2016-09-26 3 views
2

Я createted двоичного типа с именем 'SomeType' и filds:Apache Ignite бинарного типа недействительность

f1:string 
f2:string 

и кэш на основе этого типа (через CacheConfiguration.setQueryEntities).

Теперь я хочу изменить f1 из строки в int. Но я не хочу менять имя типа.

Так что, когда я пытаюсь

ignite.destroyCache(cacheName) 

А потом я создаю новый кэш (с тем же именем и бинарного типа), я получил исключение при кэш-заселении:

org.apache.ignite.binary.BinaryObjectException: Wrong value has been set [typeName=SomeType, fieldName=f1, fieldType=String, assignedValueType=int] 

Как я понимаю из http://apache-ignite-users.70518.x6.nabble.com/Ignite-client-reads-old-metadata-even-after-cache-is-destroyed-and-recreated-td5800.html это ожидаемое поведение.

Но как я могу обновить свои матадаты двоичного типа без создания нового?

ответ

1

Да, это ожидаемое поведение. Прежде всего, маршаллер глобальный в Ignite, а также метаданные, поэтому уничтожение кеша не влияет на это. Во-вторых, двоичный формат позволяет динамически изменять схему, но изменения должны быть совместимы. I.e., вы можете изменять и/или удалять поля, но не изменять их типы, поскольку в этом случае клиент, который использует устаревшую схему, не сможет десериализовать объект, если захочет.

+0

Большое спасибо за разъяснение. Насколько я понимаю, единственный способ изменить тип поля двоичного типа - создать новый двоичный тип? –

+0

Исправить. В качестве альтернативы вы можете добавить поле с другим именем. –

Смежные вопросы