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.
>
>
>

Reply via email to