What I see from the object is that it's fully raw, meaning, all the fields written without names. Is that correct?
In this case, there is no schema on C++ side, because there are no named fields and schema is not needed. Java client writes schemaInitialId() in this case, which is FNV1_OFFSET_BASIS(0x811C9DC5). Looks like a bug in Java client to me. Pavel, what do you think? Best Regards, Igor On Tue, Jul 30, 2024 at 10:03 AM Louis C <[email protected]> wrote: > Sorry to up this subject, but I have not been able to find a > solution/reason for this problem. > Does anyone have an idea ? > > Thanks, > > Louis C. > ------------------------------ > *De :* Louis C <[email protected]> > *Envoyé :* lundi 22 juillet 2024 17:06 > *À :* [email protected] <[email protected]> > *Objet :* RE: Ignite cache with custom key : key not found > > Hello, > > Thanks for your answers. > > As for the "compactFooter" I already set it to "false" in the xml config > of the server. For the client, it is the C++ thin client and in the > object"IgniteClientConfiguration" I can not do it, it seems. I believe > there is no need to set this parameter for the C++ thin client. > > It will be quite hard to extract a reproducible example, but I might do it > if necessary. > In the meantime I managed to extract the binary representartion of the 2 > differents keys (in hexadecimal) : > Key from C++ thin client : > 67 01 05 00 91 D3 05 6C 87 E6 CF 1E 26 00 00 00 00 00 00 00 18 00 00 00 05 > 00 00 00 0C 05 00 00 00 32 32 32 32 32 > Key from Java : > 67 01 05 00 91 D3 05 6C 87 E6 CF 1E 26 00 00 00 C5 9D 1C 81 18 00 00 00 05 > 00 00 00 0C 05 00 00 00 32 32 32 32 32 > > As we can see, the difference is the 4 bytes in position 17 to 20, > corresponding, if we follow > https://cwiki.apache.org/confluence/display/IGNITE/Binary%20object%20format to > the "Schema Id" which is a "has of the object fields". > In case of C++ thin client it is "00 00 00 00", and "C5 9D 1C 81". > The bytes in position 3 to 4 are " 05 00" which seems to indicate user > type + raw data, but indeed there is not the flag "compact footer" (0x20). > So it seems to be OK. > > I do not know if I said it but I add keys with a CacheEntryProcessor on > the java side of things. > Anyone has an idea ? > > Best regards, > Louis C. > > ------------------------------ > *De :* Николай Ижиков <[email protected]> de la part de Nikolay > Izhikov <[email protected]> > *Envoyé :* lundi 22 juillet 2024 10:33 > *À :* [email protected] <[email protected]> > *Objet :* Re: Ignite cache with custom key : key not found > > Hello. > > It common issue with the thin client. > Please, set same value of BinaryConfiguration#compactFooter explicitly to > false both on the server side and client side. > > On 22 Jul 2024, at 10:32, Pavel Tupitsyn <[email protected]> wrote: > > Hello, could you please attach a reproducer? > > This might have to do with type names / ids mismatch, but hard to tell > without the code. > > On Fri, Jul 19, 2024 at 7:39 PM Louis C <[email protected]> wrote: > > Hello, > > I have a strange problem for which I can't find the reason. > > I made a cache (key/value cache) with a custom key type that is called > "IgniteBinaryData". > > I have a C++ thin client that calls the server and execute a Java > ComputeTaskAdapter<CustomType1,CustomType2> that I made (let's call it > "Task1"). > This Task1 writes data in the cache with the custom key type > "IgniteBinaryData". > > But the issue is that when I request the same cache from the C++ thin > client, the key is not found. > > What is strange is that I can then add the key with a "Put" from the C++, > and when I look at the deserialized keys in the java code, there does not > seem to be any difference between the 2 "different" keys, which are both > present in the cache. > > What I saw is that when I do a "Get" from the C++, the key is not > deserialized (Ignite looks only at the serialized data of the keys). > > So I think there might be a difference in the serialization of the key > between the Java code and the C++, but not visible when deserialized. > > But looking at all the entries in the cache with an iterator, I found no > differences. I tried using the".withKeepBinary();" method to access the > keys without deserialization, but I can't find a way to get the "bytes[]" > corresponding to the key from the BinaryObject. > > So, my question would be : how to get the "bytes[]" corresponding to a > custom key ? > And also, is there a known issue that could arise when doing this ? I > carefully followed > https://ignite.apache.org/docs/latest/cpp-specific/cpp-platform-interoperability > and > I have no problem of deserialization... > > Best regards, > > Louis C. > > >
