Hi,

Thanks for pointing out the mistake about the string data type. I used
python3 which supports bytes type and run the test case. Ignite would seems
still treat the received value as String type and would decode the data
correctly. I would like to try with a some simple C client program and see
how It works.

In addition, I checked the source code, and it seems the data type of key
or value is
1. computed via U.bytesToShort() method @
https://github.com/apache/ignite/blob/ignite-2.6/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/protocols/tcp/GridTcpRestParser.java#L664
2. retrieved the type flag via masking bits off @
https://github.com/apache/ignite/blob/ignite-2.6/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/protocols/tcp/GridTcpRestParser.java#L749

Could someone share some insight of what  U.bytesToShort() does ?

Thanks.


On Wed, Oct 17, 2018 at 8:29 PM Павлухин Иван <[email protected]> wrote:

> Hi Michael,
>
> The troubles could be related to Python library. It seems in Python 2.7
> there is no such thing as "byte array". And value passed to the client is
> string in this case.
> I checked that Ignite recognizes bytes array type and stores in as byte
> array internally. I did following experiment with Spymemcached [1].
> public class Memcached {
>     public static void main(String[] args) throws IOException {
>         MemcachedClient client = new MemcachedClient(
>             new BinaryConnectionFactory(),
>             AddrUtil.getAddresses("127.0.0.1:11211"));
>
>         client.add("a", Integer.MAX_VALUE, new byte[]{1, 2, 3});
>         client.add("b", Integer.MAX_VALUE, "123");
>
>         System.out.println(Arrays.toString((byte[])client.get("a")));
>         System.out.println(client.get("b"));
>
>         System.exit(0);
>     }
> }
>
> And I see expected output:
> [1, 2, 3]
> 123
>
> [1] https://mvnrepository.com/artifact/net.spy/spymemcached/2.12.3
>
> ср, 17 окт. 2018 г. в 10:25, Павлухин Иван <[email protected]>:
>
>> Hi Michael,
>>
>> Answering one of your questions.
>> > Does ignite internally have a way to store the data type when cache
>> entry is stored?
>> Yes, internally Ignite maintains data types for stored keys and values.
>>
>> Could you confirm that for real memcached your example works as expected?
>> I will try reproduce your Python example. It should not be hard to check
>> what exactly is stored inside Ignite.
>>
>> ср, 17 окт. 2018 г. в 5:25, Michael Fong <[email protected]>:
>>
>>> bump :)
>>>
>>> Could anyone please help to answer a newbie question? Thanks in advance!
>>>
>>> On Mon, Oct 15, 2018 at 4:22 PM Michael Fong <[email protected]>
>>> wrote:
>>>
>>>> Hi,
>>>>
>>>> I kind of able to reproduce it with a small python script
>>>>
>>>> import pylibmc
>>>>
>>>> client = pylibmc.Client (["127.0.0.1:11211"], binary=True)
>>>>
>>>>
>>>> ##abc
>>>> val = "abcd".decode("hex")
>>>> client.set("pyBin1", val)
>>>>
>>>> print "val decode w/ iso-8859-1: %s" % val.encode("hex")
>>>>
>>>> get_val = client.get("pyBin1")
>>>>
>>>> print "Value for 'pyBin1': %s" % get_val.encode("hex")
>>>>
>>>>
>>>> where the the program intends to insert a byte[] into ignite using
>>>> memcache binary protocol.
>>>> The output is
>>>>
>>>> val decode w/ iso-8859-1: abcd
>>>> Value for 'pyBin1': *efbfbdefbfbd*
>>>>
>>>> where, 'ef bf bd' are the replacement character for UTF-8 String.
>>>> Therefore, the value field seems to be treated as String in Ignite.
>>>>
>>>> Regards,
>>>>
>>>> Michael
>>>>
>>>>
>>>>
>>>> On Thu, Oct 4, 2018 at 9:38 PM Maxim.Pudov <[email protected]> wrote:
>>>>
>>>>> Hi, it looks strange to me. Do you have a reproducer?
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Sent from: http://apache-ignite-users.70518.x6.nabble.com/
>>>>>
>>>>
>>
>> --
>> Best regards,
>> Ivan Pavlukhin
>>
>
>
> --
> Best regards,
> Ivan Pavlukhin
>

Reply via email to