решено: я попытался добавить один SerialKey в список. Когда я теперь добавляю SerialKeyList одним ключом, он работает так, как и должно быть.
Я использую memcached с libmemcached и буферами протокола google для сохранения списка в кеше, который состоит из списка элементов и списка элементов в черном списке.
.proto:
message SerialKeyList {
repeated SerialBlackKey bkey = 2;
repeated SerialKey key = 1;
}
message SerialKey {
optional string key = 1;
}
message SerialBlackKey {
optional string key = 2;
}
Я хотел бы добавить отдельные элементы типа SerialKey или SerialBlackKey с помощью memcached_append ().
Я инициализирую список одним элементом SerialKey (с memcached_set (SerialKeyList)), а затем добавляю один элемент SerialBlackKey (с memcached_append).
Результат, который я получаю при разборе списка из memcached и печати с помощью PrintDebugString (), равен
key {
key: "REPL:http://a.host.com/replica"
}
bkey {
10: "PL:http://a.host.com/replica"
}
Итак, два списка созданы, но 2-й элемент прочитан неправильно.
Должно ли это быть возможным? Из кодировки Protobuf документация я понимаю, что повторяющиеся поля не должны следовать за другим, поэтому чередование полей другого типа должно быть возможным.
/ EDIT: у меня та же проблема только с одним типом элемента (SerialKey) в списке.
Здесь я использую дополнительный атрибут SerialKey, чтобы решить, находится ли он в черном списке.
Прото:
message SerialKeyList {
repeated SerialKey key = 1;
}
message SerialKey {
required string key = 1;
required bool white = 2 [default = true];
}