Re: Create cache using thin protocol

2017-12-28 Thread Pavel Tupitsyn
Changes merged to master, doc updated:
https://cwiki.apache.org/confluence/display/IGNITE/IEP-9+Thin+Client+Protocol

Note that OP_CACHE_GET_CONFIGURATION still returns full config,
but OP_CACHE_CREATE_WITH_CONFIGURATION now allows partial config in
key-value form.

Thanks,
Pavel

On Fri, Dec 22, 2017 at 8:25 PM, Denis Magda  wrote:

> Pavel, thanks for a quick turnaround. Please ping Prachi when you merge
> the improvement so that she can update the readme doc.
>
> —
> Denis
>
> > On Dec 22, 2017, at 4:43 AM, Pavel Tupitsyn 
> wrote:
> >
> > Ticket created: https://issues.apache.org/jira/browse/IGNITE-7288
> > I'll implement this next week.
> >
> > On Fri, Dec 22, 2017 at 10:06 AM, Pavel Tupitsyn 
> > wrote:
> >
> >> Hi Denis,
> >>
> >> I think we can assign an id to each parameter. It is not difficult to
> add.
> >>
> >>> not to tell about this operation
> >> Hiding stuff is not a good approach. Any decent engineer will have a
> look
> >> at the server code and see it.
> >>
> >> Pavel
> >>
> >> On Fri, Dec 22, 2017 at 3:45 AM, Denis Magda  wrote:
> >>
> >>> Hi Pavel,
> >>>
> >>> If it’s supposed to be used this way then it’s better not to tell about
> >>> this operation at all until it’s simplified from a user standpoint.
> >>>
> >>> My suggestion would be to design the operation so that I can pass only
> >>> those configuration parameters that need to be different from the
> defaults.
> >>> How difficult is this and can the improvement go into 2.4?
> >>>
> >>> —
> >>> Denis
> >>>
>  On Dec 20, 2017, at 10:48 PM, Pavel Tupitsyn 
> >>> wrote:
> 
>  Hi Prachi,
> 
>  Yes, you have to provide full configuration. The error is caused by
>  incomplete request message.
> 
>  Alternatively, define cache templates on server (configs with * in
> them)
>  and then use OP_CACHE_CREATE_WITH_NAME from thin client.
> 
>  Thanks,
>  Pavel
> 
>  On Thu, Dec 21, 2017 at 3:47 AM, Prachi Garg 
> >>> wrote:
> 
> > Pavel,
> >
> > I tried to create a cache with configuration, using the thin
> protocol.
> >
> > 1. Do I need to provide every configuration as mentioned in the wiki,
> >>> or I
> > can just provide a few and the rest can be default?
> >
> > 2. Using the below code:
> >
> > DataOutputStream out = new DataOutputStream(socket.
> getOutputStream());
> >
> > // Message length
> > writeIntLittleEndian(22, out);
> >
> > // Op code = OP_CACHE_CREATE_WITH_CONFIGURATION
> > writeShortLittleEndian(1053, out);
> >
> > // Request id (can be anything)
> > long reqId = 1;
> > writeLongLittleEndian(reqId, out);
> >
> > // CacheAtomicityMode
> > writeIntLittleEndian(0, out);
> >
> > // Backups
> > writeIntLittleEndian(2, out);
> >
> > // CacheMode
> > writeIntLittleEndian(2, out);
> >
> > // Read result
> > DataInputStream in = new DataInputStream(socket.getInputStream());
> >
> > // Response length
> > final int len = readIntLittleEndian(in);
> > System.out.println("len: " + len);
> >
> > // Request id
> > long resReqId = readLongLittleEndian(in);
> > System.out.println("resReqId: " + resReqId);
> >
> > // Success
> > int statusCode = readIntLittleEndian(in);
> > System.out.println("status code: " + statusCode);
> >
> >
> > I get the following error:
> >
> > [2017-12-20 16:43:32,800][ERROR][client-co
> >>> nnector-#45][ClientListenerNioListener] Failed to parse client
> request.
> > class org.apache.ignite.binary.BinaryObjectException: Not enough
> data
> >>> to read the value [position=22, requiredBytes=4, remainingBytes=0]
> > at org.apache.ignite.internal.binary.streams.BinaryAbstractInpu
> >>> tStream.ensureEnoughData(BinaryAbstractInputStream.java:305)
> > at org.apache.ignite.internal.binary.streams.BinaryAbstractInpu
> >>> tStream.readInt(BinaryAbstractInputStream.java:127)
> > at org.apache.ignite.internal.binary.BinaryReaderExImpl.readInt
> >>> (BinaryReaderExImpl.java:743)
> > at org.apache.ignite.internal.processors.platform.client.cache.
> >>> ClientCacheConfigurationSerializer.read(ClientCacheConfigura
> >>> tionSerializer.java:125)
> > at org.apache.ignite.internal.processors.platform.client.cache.
> >>> ClientCacheCreateWithConfigurationRequest.(ClientCache
> >>> CreateWithConfigurationRequest.java:45)
> > at org.apache.ignite.internal.processors.platform.client.Client
> >>> MessageParser.decode(ClientMessageParser.java:333)
> > at org.apache.ignite.internal.processors.platform.client.Client
> >>> MessageParser.decode(ClientMessageParser.java:220)
> > at org.apache.ignite.internal.processors.odbc.ClientListenerNio
> >>> Listener.onMessage(ClientListenerNioListener.java:119)

Re: Create cache using thin protocol

2017-12-22 Thread Denis Magda
Pavel, thanks for a quick turnaround. Please ping Prachi when you merge the 
improvement so that she can update the readme doc.

—
Denis

> On Dec 22, 2017, at 4:43 AM, Pavel Tupitsyn  wrote:
> 
> Ticket created: https://issues.apache.org/jira/browse/IGNITE-7288
> I'll implement this next week.
> 
> On Fri, Dec 22, 2017 at 10:06 AM, Pavel Tupitsyn 
> wrote:
> 
>> Hi Denis,
>> 
>> I think we can assign an id to each parameter. It is not difficult to add.
>> 
>>> not to tell about this operation
>> Hiding stuff is not a good approach. Any decent engineer will have a look
>> at the server code and see it.
>> 
>> Pavel
>> 
>> On Fri, Dec 22, 2017 at 3:45 AM, Denis Magda  wrote:
>> 
>>> Hi Pavel,
>>> 
>>> If it’s supposed to be used this way then it’s better not to tell about
>>> this operation at all until it’s simplified from a user standpoint.
>>> 
>>> My suggestion would be to design the operation so that I can pass only
>>> those configuration parameters that need to be different from the defaults.
>>> How difficult is this and can the improvement go into 2.4?
>>> 
>>> —
>>> Denis
>>> 
 On Dec 20, 2017, at 10:48 PM, Pavel Tupitsyn 
>>> wrote:
 
 Hi Prachi,
 
 Yes, you have to provide full configuration. The error is caused by
 incomplete request message.
 
 Alternatively, define cache templates on server (configs with * in them)
 and then use OP_CACHE_CREATE_WITH_NAME from thin client.
 
 Thanks,
 Pavel
 
 On Thu, Dec 21, 2017 at 3:47 AM, Prachi Garg 
>>> wrote:
 
> Pavel,
> 
> I tried to create a cache with configuration, using the thin protocol.
> 
> 1. Do I need to provide every configuration as mentioned in the wiki,
>>> or I
> can just provide a few and the rest can be default?
> 
> 2. Using the below code:
> 
> DataOutputStream out = new DataOutputStream(socket.getOutputStream());
> 
> // Message length
> writeIntLittleEndian(22, out);
> 
> // Op code = OP_CACHE_CREATE_WITH_CONFIGURATION
> writeShortLittleEndian(1053, out);
> 
> // Request id (can be anything)
> long reqId = 1;
> writeLongLittleEndian(reqId, out);
> 
> // CacheAtomicityMode
> writeIntLittleEndian(0, out);
> 
> // Backups
> writeIntLittleEndian(2, out);
> 
> // CacheMode
> writeIntLittleEndian(2, out);
> 
> // Read result
> DataInputStream in = new DataInputStream(socket.getInputStream());
> 
> // Response length
> final int len = readIntLittleEndian(in);
> System.out.println("len: " + len);
> 
> // Request id
> long resReqId = readLongLittleEndian(in);
> System.out.println("resReqId: " + resReqId);
> 
> // Success
> int statusCode = readIntLittleEndian(in);
> System.out.println("status code: " + statusCode);
> 
> 
> I get the following error:
> 
> [2017-12-20 16:43:32,800][ERROR][client-co
>>> nnector-#45][ClientListenerNioListener] Failed to parse client request.
> class org.apache.ignite.binary.BinaryObjectException: Not enough data
>>> to read the value [position=22, requiredBytes=4, remainingBytes=0]
> at org.apache.ignite.internal.binary.streams.BinaryAbstractInpu
>>> tStream.ensureEnoughData(BinaryAbstractInputStream.java:305)
> at org.apache.ignite.internal.binary.streams.BinaryAbstractInpu
>>> tStream.readInt(BinaryAbstractInputStream.java:127)
> at org.apache.ignite.internal.binary.BinaryReaderExImpl.readInt
>>> (BinaryReaderExImpl.java:743)
> at org.apache.ignite.internal.processors.platform.client.cache.
>>> ClientCacheConfigurationSerializer.read(ClientCacheConfigura
>>> tionSerializer.java:125)
> at org.apache.ignite.internal.processors.platform.client.cache.
>>> ClientCacheCreateWithConfigurationRequest.(ClientCache
>>> CreateWithConfigurationRequest.java:45)
> at org.apache.ignite.internal.processors.platform.client.Client
>>> MessageParser.decode(ClientMessageParser.java:333)
> at org.apache.ignite.internal.processors.platform.client.Client
>>> MessageParser.decode(ClientMessageParser.java:220)
> at org.apache.ignite.internal.processors.odbc.ClientListenerNio
>>> Listener.onMessage(ClientListenerNioListener.java:119)
> at org.apache.ignite.internal.processors.odbc.ClientListenerNio
>>> Listener.onMessage(ClientListenerNioListener.java:40)
> at org.apache.ignite.internal.util.nio.GridNioFilterChain$TailF
>>> ilter.onMessageReceived(GridNioFilterChain.java:279)
> at org.apache.ignite.internal.util.nio.GridNioFilterAdapter.pro
>>> ceedMessageReceived(GridNioFilterAdapter.java:109)
> at org.apache.ignite.internal.util.nio.GridNioAsyncNotifyFilter
>>> $3.body(GridNioAsyncNotifyFilter.java:97)
> at org.apache.ignite.internal.util.worker.GridWorker.run(GridWo

Re: Create cache using thin protocol

2017-12-22 Thread Pavel Tupitsyn
Ticket created: https://issues.apache.org/jira/browse/IGNITE-7288
I'll implement this next week.

On Fri, Dec 22, 2017 at 10:06 AM, Pavel Tupitsyn 
wrote:

> Hi Denis,
>
> I think we can assign an id to each parameter. It is not difficult to add.
>
> > not to tell about this operation
> Hiding stuff is not a good approach. Any decent engineer will have a look
> at the server code and see it.
>
> Pavel
>
> On Fri, Dec 22, 2017 at 3:45 AM, Denis Magda  wrote:
>
>> Hi Pavel,
>>
>> If it’s supposed to be used this way then it’s better not to tell about
>> this operation at all until it’s simplified from a user standpoint.
>>
>> My suggestion would be to design the operation so that I can pass only
>> those configuration parameters that need to be different from the defaults.
>> How difficult is this and can the improvement go into 2.4?
>>
>> —
>> Denis
>>
>> > On Dec 20, 2017, at 10:48 PM, Pavel Tupitsyn 
>> wrote:
>> >
>> > Hi Prachi,
>> >
>> > Yes, you have to provide full configuration. The error is caused by
>> > incomplete request message.
>> >
>> > Alternatively, define cache templates on server (configs with * in them)
>> > and then use OP_CACHE_CREATE_WITH_NAME from thin client.
>> >
>> > Thanks,
>> > Pavel
>> >
>> > On Thu, Dec 21, 2017 at 3:47 AM, Prachi Garg 
>> wrote:
>> >
>> >> Pavel,
>> >>
>> >> I tried to create a cache with configuration, using the thin protocol.
>> >>
>> >> 1. Do I need to provide every configuration as mentioned in the wiki,
>> or I
>> >> can just provide a few and the rest can be default?
>> >>
>> >> 2. Using the below code:
>> >>
>> >> DataOutputStream out = new DataOutputStream(socket.getOutputStream());
>> >>
>> >> // Message length
>> >> writeIntLittleEndian(22, out);
>> >>
>> >> // Op code = OP_CACHE_CREATE_WITH_CONFIGURATION
>> >> writeShortLittleEndian(1053, out);
>> >>
>> >> // Request id (can be anything)
>> >> long reqId = 1;
>> >> writeLongLittleEndian(reqId, out);
>> >>
>> >> // CacheAtomicityMode
>> >> writeIntLittleEndian(0, out);
>> >>
>> >> // Backups
>> >> writeIntLittleEndian(2, out);
>> >>
>> >> // CacheMode
>> >> writeIntLittleEndian(2, out);
>> >>
>> >> // Read result
>> >> DataInputStream in = new DataInputStream(socket.getInputStream());
>> >>
>> >> // Response length
>> >> final int len = readIntLittleEndian(in);
>> >> System.out.println("len: " + len);
>> >>
>> >> // Request id
>> >> long resReqId = readLongLittleEndian(in);
>> >> System.out.println("resReqId: " + resReqId);
>> >>
>> >> // Success
>> >> int statusCode = readIntLittleEndian(in);
>> >> System.out.println("status code: " + statusCode);
>> >>
>> >>
>> >> I get the following error:
>> >>
>> >> [2017-12-20 16:43:32,800][ERROR][client-co
>> nnector-#45][ClientListenerNioListener] Failed to parse client request.
>> >> class org.apache.ignite.binary.BinaryObjectException: Not enough data
>> to read the value [position=22, requiredBytes=4, remainingBytes=0]
>> >>  at org.apache.ignite.internal.binary.streams.BinaryAbstractInpu
>> tStream.ensureEnoughData(BinaryAbstractInputStream.java:305)
>> >>  at org.apache.ignite.internal.binary.streams.BinaryAbstractInpu
>> tStream.readInt(BinaryAbstractInputStream.java:127)
>> >>  at org.apache.ignite.internal.binary.BinaryReaderExImpl.readInt
>> (BinaryReaderExImpl.java:743)
>> >>  at org.apache.ignite.internal.processors.platform.client.cache.
>> ClientCacheConfigurationSerializer.read(ClientCacheConfigura
>> tionSerializer.java:125)
>> >>  at org.apache.ignite.internal.processors.platform.client.cache.
>> ClientCacheCreateWithConfigurationRequest.(ClientCache
>> CreateWithConfigurationRequest.java:45)
>> >>  at org.apache.ignite.internal.processors.platform.client.Client
>> MessageParser.decode(ClientMessageParser.java:333)
>> >>  at org.apache.ignite.internal.processors.platform.client.Client
>> MessageParser.decode(ClientMessageParser.java:220)
>> >>  at org.apache.ignite.internal.processors.odbc.ClientListenerNio
>> Listener.onMessage(ClientListenerNioListener.java:119)
>> >>  at org.apache.ignite.internal.processors.odbc.ClientListenerNio
>> Listener.onMessage(ClientListenerNioListener.java:40)
>> >>  at org.apache.ignite.internal.util.nio.GridNioFilterChain$TailF
>> ilter.onMessageReceived(GridNioFilterChain.java:279)
>> >>  at org.apache.ignite.internal.util.nio.GridNioFilterAdapter.pro
>> ceedMessageReceived(GridNioFilterAdapter.java:109)
>> >>  at org.apache.ignite.internal.util.nio.GridNioAsyncNotifyFilter
>> $3.body(GridNioAsyncNotifyFilter.java:97)
>> >>  at org.apache.ignite.internal.util.worker.GridWorker.run(GridWo
>> rker.java:110)
>> >>  at org.apache.ignite.internal.util.worker.GridWorkerPool$1.run(
>> GridWorkerPool.java:70)
>> >>  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPool
>> Executor.java:1142)
>> >>  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoo

Re: Create cache using thin protocol

2017-12-21 Thread Pavel Tupitsyn
Hi Denis,

I think we can assign an id to each parameter. It is not difficult to add.

> not to tell about this operation
Hiding stuff is not a good approach. Any decent engineer will have a look
at the server code and see it.

Pavel

On Fri, Dec 22, 2017 at 3:45 AM, Denis Magda  wrote:

> Hi Pavel,
>
> If it’s supposed to be used this way then it’s better not to tell about
> this operation at all until it’s simplified from a user standpoint.
>
> My suggestion would be to design the operation so that I can pass only
> those configuration parameters that need to be different from the defaults.
> How difficult is this and can the improvement go into 2.4?
>
> —
> Denis
>
> > On Dec 20, 2017, at 10:48 PM, Pavel Tupitsyn 
> wrote:
> >
> > Hi Prachi,
> >
> > Yes, you have to provide full configuration. The error is caused by
> > incomplete request message.
> >
> > Alternatively, define cache templates on server (configs with * in them)
> > and then use OP_CACHE_CREATE_WITH_NAME from thin client.
> >
> > Thanks,
> > Pavel
> >
> > On Thu, Dec 21, 2017 at 3:47 AM, Prachi Garg  wrote:
> >
> >> Pavel,
> >>
> >> I tried to create a cache with configuration, using the thin protocol.
> >>
> >> 1. Do I need to provide every configuration as mentioned in the wiki,
> or I
> >> can just provide a few and the rest can be default?
> >>
> >> 2. Using the below code:
> >>
> >> DataOutputStream out = new DataOutputStream(socket.getOutputStream());
> >>
> >> // Message length
> >> writeIntLittleEndian(22, out);
> >>
> >> // Op code = OP_CACHE_CREATE_WITH_CONFIGURATION
> >> writeShortLittleEndian(1053, out);
> >>
> >> // Request id (can be anything)
> >> long reqId = 1;
> >> writeLongLittleEndian(reqId, out);
> >>
> >> // CacheAtomicityMode
> >> writeIntLittleEndian(0, out);
> >>
> >> // Backups
> >> writeIntLittleEndian(2, out);
> >>
> >> // CacheMode
> >> writeIntLittleEndian(2, out);
> >>
> >> // Read result
> >> DataInputStream in = new DataInputStream(socket.getInputStream());
> >>
> >> // Response length
> >> final int len = readIntLittleEndian(in);
> >> System.out.println("len: " + len);
> >>
> >> // Request id
> >> long resReqId = readLongLittleEndian(in);
> >> System.out.println("resReqId: " + resReqId);
> >>
> >> // Success
> >> int statusCode = readIntLittleEndian(in);
> >> System.out.println("status code: " + statusCode);
> >>
> >>
> >> I get the following error:
> >>
> >> [2017-12-20 
> >> 16:43:32,800][ERROR][client-connector-#45][ClientListenerNioListener]
> Failed to parse client request.
> >> class org.apache.ignite.binary.BinaryObjectException: Not enough data
> to read the value [position=22, requiredBytes=4, remainingBytes=0]
> >>  at org.apache.ignite.internal.binary.streams.
> BinaryAbstractInputStream.ensureEnoughData(BinaryAbstractInputStream.
> java:305)
> >>  at org.apache.ignite.internal.binary.streams.
> BinaryAbstractInputStream.readInt(BinaryAbstractInputStream.java:127)
> >>  at org.apache.ignite.internal.binary.BinaryReaderExImpl.
> readInt(BinaryReaderExImpl.java:743)
> >>  at org.apache.ignite.internal.processors.platform.client.cache.
> ClientCacheConfigurationSerializer.read(ClientCacheConfigurationSerial
> izer.java:125)
> >>  at org.apache.ignite.internal.processors.platform.client.cache.
> ClientCacheCreateWithConfigurationRequest.(
> ClientCacheCreateWithConfigurationRequest.java:45)
> >>  at org.apache.ignite.internal.processors.platform.client.
> ClientMessageParser.decode(ClientMessageParser.java:333)
> >>  at org.apache.ignite.internal.processors.platform.client.
> ClientMessageParser.decode(ClientMessageParser.java:220)
> >>  at org.apache.ignite.internal.processors.odbc.
> ClientListenerNioListener.onMessage(ClientListenerNioListener.java:119)
> >>  at org.apache.ignite.internal.processors.odbc.
> ClientListenerNioListener.onMessage(ClientListenerNioListener.java:40)
> >>  at org.apache.ignite.internal.util.nio.GridNioFilterChain$
> TailFilter.onMessageReceived(GridNioFilterChain.java:279)
> >>  at org.apache.ignite.internal.util.nio.GridNioFilterAdapter.
> proceedMessageReceived(GridNioFilterAdapter.java:109)
> >>  at org.apache.ignite.internal.util.nio.GridNioAsyncNotifyFilter$3.
> body(GridNioAsyncNotifyFilter.java:97)
> >>  at org.apache.ignite.internal.util.worker.GridWorker.run(
> GridWorker.java:110)
> >>  at org.apache.ignite.internal.util.worker.GridWorkerPool$1.
> run(GridWorkerPool.java:70)
> >>  at java.util.concurrent.ThreadPoolExecutor.runWorker(
> ThreadPoolExecutor.java:1142)
> >>  at java.util.concurrent.ThreadPoolExecutor$Worker.run(
> ThreadPoolExecutor.java:617)
> >>  at java.lang.Thread.run(Thread.java:745)
> >>
> >>
> >>
>
>


Re: Create cache using thin protocol

2017-12-21 Thread Denis Magda
Hi Pavel,

If it’s supposed to be used this way then it’s better not to tell about this 
operation at all until it’s simplified from a user standpoint.

My suggestion would be to design the operation so that I can pass only those 
configuration parameters that need to be different from the defaults. How 
difficult is this and can the improvement go into 2.4?

—
Denis

> On Dec 20, 2017, at 10:48 PM, Pavel Tupitsyn  wrote:
> 
> Hi Prachi,
> 
> Yes, you have to provide full configuration. The error is caused by
> incomplete request message.
> 
> Alternatively, define cache templates on server (configs with * in them)
> and then use OP_CACHE_CREATE_WITH_NAME from thin client.
> 
> Thanks,
> Pavel
> 
> On Thu, Dec 21, 2017 at 3:47 AM, Prachi Garg  wrote:
> 
>> Pavel,
>> 
>> I tried to create a cache with configuration, using the thin protocol.
>> 
>> 1. Do I need to provide every configuration as mentioned in the wiki, or I
>> can just provide a few and the rest can be default?
>> 
>> 2. Using the below code:
>> 
>> DataOutputStream out = new DataOutputStream(socket.getOutputStream());
>> 
>> // Message length
>> writeIntLittleEndian(22, out);
>> 
>> // Op code = OP_CACHE_CREATE_WITH_CONFIGURATION
>> writeShortLittleEndian(1053, out);
>> 
>> // Request id (can be anything)
>> long reqId = 1;
>> writeLongLittleEndian(reqId, out);
>> 
>> // CacheAtomicityMode
>> writeIntLittleEndian(0, out);
>> 
>> // Backups
>> writeIntLittleEndian(2, out);
>> 
>> // CacheMode
>> writeIntLittleEndian(2, out);
>> 
>> // Read result
>> DataInputStream in = new DataInputStream(socket.getInputStream());
>> 
>> // Response length
>> final int len = readIntLittleEndian(in);
>> System.out.println("len: " + len);
>> 
>> // Request id
>> long resReqId = readLongLittleEndian(in);
>> System.out.println("resReqId: " + resReqId);
>> 
>> // Success
>> int statusCode = readIntLittleEndian(in);
>> System.out.println("status code: " + statusCode);
>> 
>> 
>> I get the following error:
>> 
>> [2017-12-20 
>> 16:43:32,800][ERROR][client-connector-#45][ClientListenerNioListener] Failed 
>> to parse client request.
>> class org.apache.ignite.binary.BinaryObjectException: Not enough data to 
>> read the value [position=22, requiredBytes=4, remainingBytes=0]
>>  at 
>> org.apache.ignite.internal.binary.streams.BinaryAbstractInputStream.ensureEnoughData(BinaryAbstractInputStream.java:305)
>>  at 
>> org.apache.ignite.internal.binary.streams.BinaryAbstractInputStream.readInt(BinaryAbstractInputStream.java:127)
>>  at 
>> org.apache.ignite.internal.binary.BinaryReaderExImpl.readInt(BinaryReaderExImpl.java:743)
>>  at 
>> org.apache.ignite.internal.processors.platform.client.cache.ClientCacheConfigurationSerializer.read(ClientCacheConfigurationSerializer.java:125)
>>  at 
>> org.apache.ignite.internal.processors.platform.client.cache.ClientCacheCreateWithConfigurationRequest.(ClientCacheCreateWithConfigurationRequest.java:45)
>>  at 
>> org.apache.ignite.internal.processors.platform.client.ClientMessageParser.decode(ClientMessageParser.java:333)
>>  at 
>> org.apache.ignite.internal.processors.platform.client.ClientMessageParser.decode(ClientMessageParser.java:220)
>>  at 
>> org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:119)
>>  at 
>> org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:40)
>>  at 
>> org.apache.ignite.internal.util.nio.GridNioFilterChain$TailFilter.onMessageReceived(GridNioFilterChain.java:279)
>>  at 
>> org.apache.ignite.internal.util.nio.GridNioFilterAdapter.proceedMessageReceived(GridNioFilterAdapter.java:109)
>>  at 
>> org.apache.ignite.internal.util.nio.GridNioAsyncNotifyFilter$3.body(GridNioAsyncNotifyFilter.java:97)
>>  at 
>> org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110)
>>  at 
>> org.apache.ignite.internal.util.worker.GridWorkerPool$1.run(GridWorkerPool.java:70)
>>  at 
>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
>>  at 
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
>>  at java.lang.Thread.run(Thread.java:745)
>> 
>> 
>> 



Re: Create cache using thin protocol

2017-12-20 Thread Pavel Tupitsyn
Hi Prachi,

Yes, you have to provide full configuration. The error is caused by
incomplete request message.

Alternatively, define cache templates on server (configs with * in them)
and then use OP_CACHE_CREATE_WITH_NAME from thin client.

Thanks,
Pavel

On Thu, Dec 21, 2017 at 3:47 AM, Prachi Garg  wrote:

> Pavel,
>
> I tried to create a cache with configuration, using the thin protocol.
>
> 1. Do I need to provide every configuration as mentioned in the wiki, or I
> can just provide a few and the rest can be default?
>
> 2. Using the below code:
>
> DataOutputStream out = new DataOutputStream(socket.getOutputStream());
>
> // Message length
> writeIntLittleEndian(22, out);
>
> // Op code = OP_CACHE_CREATE_WITH_CONFIGURATION
> writeShortLittleEndian(1053, out);
>
> // Request id (can be anything)
> long reqId = 1;
> writeLongLittleEndian(reqId, out);
>
> // CacheAtomicityMode
> writeIntLittleEndian(0, out);
>
> // Backups
> writeIntLittleEndian(2, out);
>
> // CacheMode
> writeIntLittleEndian(2, out);
>
> // Read result
> DataInputStream in = new DataInputStream(socket.getInputStream());
>
> // Response length
> final int len = readIntLittleEndian(in);
> System.out.println("len: " + len);
>
> // Request id
> long resReqId = readLongLittleEndian(in);
> System.out.println("resReqId: " + resReqId);
>
> // Success
> int statusCode = readIntLittleEndian(in);
> System.out.println("status code: " + statusCode);
>
>
> I get the following error:
>
> [2017-12-20 
> 16:43:32,800][ERROR][client-connector-#45][ClientListenerNioListener] Failed 
> to parse client request.
> class org.apache.ignite.binary.BinaryObjectException: Not enough data to read 
> the value [position=22, requiredBytes=4, remainingBytes=0]
>   at 
> org.apache.ignite.internal.binary.streams.BinaryAbstractInputStream.ensureEnoughData(BinaryAbstractInputStream.java:305)
>   at 
> org.apache.ignite.internal.binary.streams.BinaryAbstractInputStream.readInt(BinaryAbstractInputStream.java:127)
>   at 
> org.apache.ignite.internal.binary.BinaryReaderExImpl.readInt(BinaryReaderExImpl.java:743)
>   at 
> org.apache.ignite.internal.processors.platform.client.cache.ClientCacheConfigurationSerializer.read(ClientCacheConfigurationSerializer.java:125)
>   at 
> org.apache.ignite.internal.processors.platform.client.cache.ClientCacheCreateWithConfigurationRequest.(ClientCacheCreateWithConfigurationRequest.java:45)
>   at 
> org.apache.ignite.internal.processors.platform.client.ClientMessageParser.decode(ClientMessageParser.java:333)
>   at 
> org.apache.ignite.internal.processors.platform.client.ClientMessageParser.decode(ClientMessageParser.java:220)
>   at 
> org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:119)
>   at 
> org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:40)
>   at 
> org.apache.ignite.internal.util.nio.GridNioFilterChain$TailFilter.onMessageReceived(GridNioFilterChain.java:279)
>   at 
> org.apache.ignite.internal.util.nio.GridNioFilterAdapter.proceedMessageReceived(GridNioFilterAdapter.java:109)
>   at 
> org.apache.ignite.internal.util.nio.GridNioAsyncNotifyFilter$3.body(GridNioAsyncNotifyFilter.java:97)
>   at 
> org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110)
>   at 
> org.apache.ignite.internal.util.worker.GridWorkerPool$1.run(GridWorkerPool.java:70)
>   at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
>   at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
>   at java.lang.Thread.run(Thread.java:745)
>
>
>


Create cache using thin protocol

2017-12-20 Thread Prachi Garg
Pavel,

I tried to create a cache with configuration, using the thin protocol.

1. Do I need to provide every configuration as mentioned in the wiki, or I
can just provide a few and the rest can be default?

2. Using the below code:

DataOutputStream out = new DataOutputStream(socket.getOutputStream());

// Message length
writeIntLittleEndian(22, out);

// Op code = OP_CACHE_CREATE_WITH_CONFIGURATION
writeShortLittleEndian(1053, out);

// Request id (can be anything)
long reqId = 1;
writeLongLittleEndian(reqId, out);

// CacheAtomicityMode
writeIntLittleEndian(0, out);

// Backups
writeIntLittleEndian(2, out);

// CacheMode
writeIntLittleEndian(2, out);

// Read result
DataInputStream in = new DataInputStream(socket.getInputStream());

// Response length
final int len = readIntLittleEndian(in);
System.out.println("len: " + len);

// Request id
long resReqId = readLongLittleEndian(in);
System.out.println("resReqId: " + resReqId);

// Success
int statusCode = readIntLittleEndian(in);
System.out.println("status code: " + statusCode);


I get the following error:

[2017-12-20 
16:43:32,800][ERROR][client-connector-#45][ClientListenerNioListener]
Failed to parse client request.
class org.apache.ignite.binary.BinaryObjectException: Not enough data
to read the value [position=22, requiredBytes=4, remainingBytes=0]
at 
org.apache.ignite.internal.binary.streams.BinaryAbstractInputStream.ensureEnoughData(BinaryAbstractInputStream.java:305)
at 
org.apache.ignite.internal.binary.streams.BinaryAbstractInputStream.readInt(BinaryAbstractInputStream.java:127)
at 
org.apache.ignite.internal.binary.BinaryReaderExImpl.readInt(BinaryReaderExImpl.java:743)
at 
org.apache.ignite.internal.processors.platform.client.cache.ClientCacheConfigurationSerializer.read(ClientCacheConfigurationSerializer.java:125)
at 
org.apache.ignite.internal.processors.platform.client.cache.ClientCacheCreateWithConfigurationRequest.(ClientCacheCreateWithConfigurationRequest.java:45)
at 
org.apache.ignite.internal.processors.platform.client.ClientMessageParser.decode(ClientMessageParser.java:333)
at 
org.apache.ignite.internal.processors.platform.client.ClientMessageParser.decode(ClientMessageParser.java:220)
at 
org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:119)
at 
org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:40)
at 
org.apache.ignite.internal.util.nio.GridNioFilterChain$TailFilter.onMessageReceived(GridNioFilterChain.java:279)
at 
org.apache.ignite.internal.util.nio.GridNioFilterAdapter.proceedMessageReceived(GridNioFilterAdapter.java:109)
at 
org.apache.ignite.internal.util.nio.GridNioAsyncNotifyFilter$3.body(GridNioAsyncNotifyFilter.java:97)
at 
org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110)
at 
org.apache.ignite.internal.util.worker.GridWorkerPool$1.run(GridWorkerPool.java:70)
at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)