It depends. If your data in cluster is already with compactFooter=false (if you use old java client where compactFooter is false by default and all your data were ingested by this client) , you should disable it in python like this: client = Client(compact_footer=False)
Actually, this discrepancy of binary configuration is a really bad thing. чт, 22 дек. 2022 г. в 12:20, Айсина Роза Мунеровна < [email protected]>: > Hi Ivan! > > Thank you for your reply! > > I tested your snippets with client and server node. > When I raise server node in the snippet - everything works as expected, > the same output (key exists). > When I raise cluster manually on localhost and raise client node in the > snippet - I have None in output. > > I used this dependency: > pyignite = "0.5.2” in Python > implementation group: 'org.apache.ignite', name: 'ignite-core', version: > ‘2.13.0’ in Java > > The same version that we have for production cluster. > > So how can I fix this? And where - in Python connection or server config? > > Thanks! > > > On 22 Dec 2022, at 10:40 AM, Ivan Daschinsky <[email protected]> wrote: > > Внимание: Внешний отправитель! > Если вы не знаете отправителя - не открывайте вложения, не переходите по > ссылкам, не пересылайте письмо! > > Firstly, please run the java snippet, then run the python snippet > I got this output: > /home/ivandasch/.virtualenvs/pyignite-py38/bin/python > /home/ivandasch/.config/JetBrains/PyCharm2022.2/scratches/scratch.py > ValueType(name='test', version=1) > > чт, 22 дек. 2022 г. в 10:40, Ivan Daschinsky <[email protected]>: > >> Just tried on (ignite 2.13.0 server, ignite-client on master, pyignite on >> 0.6.0) >> >> Java code: >> >> import org.apache.ignite.Ignition; >> import org.apache.ignite.binary.BinaryObject; >> import org.apache.ignite.client.ClientCache; >> import org.apache.ignite.client.IgniteClient; >> import org.apache.ignite.configuration.ClientConfiguration; >> >> class Scratch { >> public static void main(String[] args) { >> try (IgniteClient client = Ignition.startClient(new >> ClientConfiguration() >> .setAddresses("127.0.0.1:10800", "127.0.0.1:10801", " >> 127.0.0.1:10802"))) { >> >> ClientCache<Object, Object> cache = >> client.getOrCreateCache("test").withKeepBinary(); >> >> BinaryObject key = >> client.binary().builder("KeyType").setField("id", 10, >> Integer.class).build(); >> BinaryObject val = >> client.binary().builder("ValueType").setField("name", "test", >> String.class).build(); >> >> cache.put(key, val); >> } >> } >> } >> >> Python code: >> >> from pyignite import Client >> from pyignite import GenericObjectMeta >> from pyignite.datatypes import IntObject, String >> >> class Key( >> metaclass=GenericObjectMeta, >> type_name="KeyType", >> schema={ >> 'id': IntObject, >> }, >> version=1, >> ): >> pass >> >> class Value( >> metaclass=GenericObjectMeta, >> type_name="ValueType", >> schema={ >> 'name': String, >> }, >> version=1, >> ): >> pass >> >> client = Client() >> client.connect([('127.0.0.1', 10800 + i) for i in range(0, 3)]) >> cache = client.get_or_create_cache("test") >> >> print(cache.get(Key(id=10))) >> >> Everything works as expected. >> >> I guess that you used the version of ignite-core (thin-client) older than >> 2.14.0. >> In that version, compactFooter equals to false, but on server side and >> pyignite it is by default enabled. >> >> But pyignite has an ability to detect this param after fetching the data. >> That is the reason why you code started working after fetching few data by >> a scan query. >> >> чт, 22 дек. 2022 г. в 09:13, Ivan Daschinsky <[email protected]>: >> >>> Couls you please specify the exact versions of pyignite and ignite-core >>> (java thin client)? >>> >>> ср, 21 дек. 2022 г., 18:36 Айсина Роза Мунеровна < >>> [email protected]>: >>> >>>> Hola again! >>>> >>>> I accidently discovered some strange behaviour when trying to get value >>>> by key in Python. >>>> >>>> I do this in part 3: >>>> >>>> cache = ignite_client.get_cache("PUBLIC_ProductFeatures") >>>> key = IoSbmtProductFeaturesKey(product_sku=15052004) >>>> cursor = cache.scan(partitions=1) >>>> >>>> # Uncomment to see error >>>> # value = cache.get(key) >>>> >>>> true_key, true_value = next(cursor) # THIS LINE IS CRUCIAL!!!11 >>>> print("true_key: ", true_key) >>>> print("true_value:", true_value) >>>> >>>> value = cache.get(key) >>>> >>>> >>>> So if data from cursor is read first then everything works as expected. >>>> If there is no cursor or reading data from it happens AFTER >>>> cache.get(key) - everything fails and key is not found. >>>> >>>> Is it ok? >>>> Maybe there is some dynamic binding of classes? >>>> Looks really weird. >>>> >>>> Help please! >>>> >>>> On 20 Dec 2022, at 1:35 PM, Айсина Роза Мунеровна < >>>> [email protected]> wrote: >>>> >>>> Hola! >>>> I can’t get data by key in Python in caches created in Java with binary >>>> objects. >>>> >>>> 1. Cache was created though DDL in SQL API: >>>> >>>> CREATE TABLE IF NOT EXISTS PUBLIC.ProductFeatures >>>> ( >>>> product_sku INT PRIMARY KEY, >>>> total_cnt_orders_with_sku INT >>>> ) >>>> WITH "CACHE_NAME=PUBLIC_ProductFeatures, >>>> KEY_TYPE=io.sbmt.ProductFeaturesKey, >>>> VALUE_TYPE=io.sbmt.ProductFeaturesValue, >>>> AFFINITY_KEY=product_sku, >>>> TEMPLATE=PARTITIONED, >>>> BACKUPS=1” >>>> >>>> 2. Java apps uploads data to this cache through Key-Value API with >>>> binary object underneath: >>>> >>>> ClientCache<BinaryObject, BinaryObject> igniteCache = igniteClient >>>> .cache(config.getCacheName()) >>>> .withKeepBinary(); >>>> >>>> final BinaryObjectBuilder keyBuilder = >>>> igniteClient.binary().builder(config.getKeyType()); >>>> final BinaryObjectBuilder valueBuilder = >>>> igniteClient.binary().builder(config.getValueType()); >>>> >>>> keyBuilder.setField(column.name, id); >>>> valueBuilder.setField(column.name, id); >>>> >>>> final BinaryObject key = keyBuilder.build(); >>>> final BinaryObject value = valueBuilder.build(); >>>> >>>> igniteCache.put(key, value); >>>> >>>> >>>> 3. In Python client I create Complex Object class and try to get data >>>> from this cache: >>>> >>>> class IoSbmtProductFeaturesKey( >>>> metaclass=GenericObjectMeta, >>>> schema={ >>>> 'product_sku': IntObject >>>> }, >>>> type_name='io.sbmt.ProductFeaturesKey' >>>> ): >>>> pass >>>> >>>> >>>> ignite_client.register_binary_type(IoSbmtProductFeaturesKey) >>>> >>>> key = IoSbmtProductFeaturesKey(product_sku=15052004) >>>> cache = ignite_client.get_cache("PUBLIC_ProductFeatures") >>>> value = cache.get(key) >>>> >>>> cursor = cache.scan(partitions=1) # to check that key really exists >>>> true_key, true_value = next(cursor) >>>> >>>> >>>> What I see: >>>> >>>> >>> *true_key* >>>> IoSbmtProductFeaturesKey(product_sku=15052004, version=1) >>>> >>> *key* >>>> IoSbmtProductFeaturesKey(product_sku=15052004, version=1) >>>> >>> *true_key == key* >>>> True >>>> >>> *cache.get(true_key)* >>>> IoSbmtProductFeaturesValue(total_cnt_orders_with_sku=12, version=1) >>>> >>> *cache.get(true_key) == true_value* >>>> True >>>> >>> *cache.get(key)* >>>> >>> *type(cache.get(key))* >>>> <class 'NoneType'> >>>> >>>> So I can’t create Python analogue of Java binary class that is stored >>>> as key in the cache. >>>> I tried also to change case in schema of python class, check all this >>>> on cache with composite key, to not specify *type_id* - nothing helps >>>> :( >>>> >>>> Please help. >>>> >>>> *--* >>>> >>>> *Роза Айсина* >>>> Старший разработчик ПО >>>> *СберМаркет* | Доставка из любимых магазинов >>>> >>>> >>>> Email: [email protected] >>>> Mob: >>>> Web: sbermarket.ru >>>> App: iOS >>>> <https://apps.apple.com/ru/app/%D1%81%D0%B1%D0%B5%D1%80%D0%BC%D0%B0%D1%80%D0%BA%D0%B5%D1%82-%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B0-%D0%BF%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82%D0%BE%D0%B2/id1166642457> >>>> и Android >>>> <https://play.google.com/store/apps/details?id=ru.instamart&hl=en&gl=ru> >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> *УВЕДОМЛЕНИЕ О КОНФИДЕНЦИАЛЬНОСТИ:* это электронное сообщение и любые >>>> документы, приложенные к нему, содержат конфиденциальную информацию. >>>> Настоящим уведомляем Вас о том, что, если это сообщение не предназначено >>>> Вам, использование, копирование, распространение информации, содержащейся в >>>> настоящем сообщении, а также осуществление любых действий на основе этой >>>> информации, строго запрещено. Если Вы получили это сообщение по ошибке, >>>> пожалуйста, сообщите об этом отправителю по электронной почте и удалите это >>>> сообщение. >>>> *CONFIDENTIALITY NOTICE:* This email and any files attached to it are >>>> confidential. If you are not the intended recipient you are notified that >>>> using, copying, distributing or taking any action in reliance on the >>>> contents of this information is strictly prohibited. If you have received >>>> this email in error please notify the sender and delete this email. >>>> *--* >>>> >>>> *Роза Айсина* >>>> Старший разработчик ПО >>>> *СберМаркет* | Доставка из любимых магазинов >>>> >>>> >>>> Email: [email protected] >>>> Mob: >>>> Web: sbermarket.ru >>>> App: iOS >>>> <https://apps.apple.com/ru/app/%D1%81%D0%B1%D0%B5%D1%80%D0%BC%D0%B0%D1%80%D0%BA%D0%B5%D1%82-%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B0-%D0%BF%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82%D0%BE%D0%B2/id1166642457> >>>> и Android >>>> <https://play.google.com/store/apps/details?id=ru.instamart&hl=en&gl=ru> >>>> >>>> >>>> >>>> >>>> >>>> *--* >>>> >>>> *Роза Айсина* >>>> Старший разработчик ПО >>>> *СберМаркет* | Доставка из любимых магазинов >>>> >>>> >>>> Email: [email protected] >>>> Mob: >>>> Web: sbermarket.ru >>>> App: iOS >>>> <https://apps.apple.com/ru/app/%D1%81%D0%B1%D0%B5%D1%80%D0%BC%D0%B0%D1%80%D0%BA%D0%B5%D1%82-%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B0-%D0%BF%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82%D0%BE%D0%B2/id1166642457> >>>> и Android >>>> <https://play.google.com/store/apps/details?id=ru.instamart&hl=en&gl=ru> >>>> >>>> >>>> >>>> >>>> >>>> >>>> *УВЕДОМЛЕНИЕ О КОНФИДЕНЦИАЛЬНОСТИ:* это электронное сообщение и любые >>>> документы, приложенные к нему, содержат конфиденциальную информацию. >>>> Настоящим уведомляем Вас о том, что, если это сообщение не предназначено >>>> Вам, использование, копирование, распространение информации, содержащейся в >>>> настоящем сообщении, а также осуществление любых действий на основе этой >>>> информации, строго запрещено. Если Вы получили это сообщение по ошибке, >>>> пожалуйста, сообщите об этом отправителю по электронной почте и удалите это >>>> сообщение. >>>> *CONFIDENTIALITY NOTICE:* This email and any files attached to it are >>>> confidential. If you are not the intended recipient you are notified that >>>> using, copying, distributing or taking any action in reliance on the >>>> contents of this information is strictly prohibited. If you have received >>>> this email in error please notify the sender and delete this email. >>>> >>> >> >> -- >> Sincerely yours, Ivan Daschinskiy >> > > > -- > Sincerely yours, Ivan Daschinskiy > > > *--* > > *Роза Айсина* > > Старший разработчик ПО > > *СберМаркет* | Доставка из любимых магазинов > > > > Email: [email protected] > > Mob: > > Web: sbermarket.ru > > App: iOS > <https://apps.apple.com/ru/app/%D1%81%D0%B1%D0%B5%D1%80%D0%BC%D0%B0%D1%80%D0%BA%D0%B5%D1%82-%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B0-%D0%BF%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82%D0%BE%D0%B2/id1166642457> > и Android > <https://play.google.com/store/apps/details?id=ru.instamart&hl=en&gl=ru> > > > > *УВЕДОМЛЕНИЕ О КОНФИДЕНЦИАЛЬНОСТИ:* это электронное сообщение и любые > документы, приложенные к нему, содержат конфиденциальную информацию. > Настоящим уведомляем Вас о том, что, если это сообщение не предназначено > Вам, использование, копирование, распространение информации, содержащейся в > настоящем сообщении, а также осуществление любых действий на основе этой > информации, строго запрещено. Если Вы получили это сообщение по ошибке, > пожалуйста, сообщите об этом отправителю по электронной почте и удалите это > сообщение. > *CONFIDENTIALITY NOTICE:* This email and any files attached to it are > confidential. If you are not the intended recipient you are notified that > using, copying, distributing or taking any action in reliance on the > contents of this information is strictly prohibited. If you have received > this email in error please notify the sender and delete this email. > -- Sincerely yours, Ivan Daschinskiy
