Parallel execution of cache.loadCache() and SCAN query.

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Parallel execution of cache.loadCache() and SCAN query.

Alexey Kuznetsov-2
Igniters,

I've got following situation:
1) Start Ignite node.
2) Start load from store via cache.loadCache(null)
3) From java client (org.apache.ignite.internal.client.GridClient) start
SCAN query on this cache.
4) SCAN query blocked until load is not finished.

Is this expected behavior?

I expected that SCAN query will immediately return with some data already
loaded into cache.

--
Alexey Kuznetsov
GridGain Systems
www.gridgain.com
Reply | Threaded
Open this post in threaded view
|

Re: Parallel execution of cache.loadCache() and SCAN query.

Alexey Kuznetsov-2
I take thread dump and found the following:
"ignite-#80%rest-jdbc.CacheJdbcPortableStoreSelfTest%" prio=6
tid=0x000000000e6bd800 nid=0x21e4 in Object.wait() [0x000000001662d000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
 at java.lang.Object.wait(Native Method)
 - waiting on <0x00000007ddf3ebf0> (a java.lang.Object)
 at
org.apache.ignite.internal.processors.cache.query.GridCacheQueryFutureAdapter.internalIterator(GridCacheQueryFutureAdapter.java:314)
 - locked <0x00000007ddf3ebf0> (a java.lang.Object)
 at
org.apache.ignite.internal.processors.cache.query.GridCacheQueryFutureAdapter.next(GridCacheQueryFutureAdapter.java:171)
 at
org.apache.ignite.internal.processors.cache.IgniteCacheProxy$5.onHasNext(IgniteCacheProxy.java:518)
 at
org.apache.ignite.internal.util.GridCloseableIteratorAdapter.hasNextX(GridCloseableIteratorAdapter.java:53)
 at
org.apache.ignite.internal.util.lang.GridIteratorAdapter.hasNext(GridIteratorAdapter.java:45)
 at
org.apache.ignite.internal.visor.query.VisorQueryCursor.hasNext(VisorQueryCursor.java:51)
 at
org.apache.ignite.internal.visor.query.VisorQueryUtils.fetchScanQueryRows(VisorQueryUtils.java:127)
 at
org.apache.ignite.internal.visor.query.VisorQueryJob.run(VisorQueryJob.java:94)
 at
org.apache.ignite.internal.visor.query.VisorQueryJob.run(VisorQueryJob.java:49)
 at org.apache.ignite.internal.visor.VisorJob.execute(VisorJob.java:69)
 at
org.apache.ignite.internal.processors.job.GridJobWorker$2.call(GridJobWorker.java:509)
 at
org.apache.ignite.internal.util.IgniteUtils.wrapThreadLoader(IgniteUtils.java:6371)
 at
org.apache.ignite.internal.processors.job.GridJobWorker.execute0(GridJobWorker.java:503)
 at
org.apache.ignite.internal.processors.job.GridJobWorker.body(GridJobWorker.java:456)
 at
org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110)
 at
org.apache.ignite.internal.processors.job.GridJobProcessor.processJobExecuteRequest(GridJobProcessor.java:1100)
 at
org.apache.ignite.internal.processors.task.GridTaskWorker.sendRequest(GridTaskWorker.java:1231)
 at
org.apache.ignite.internal.processors.task.GridTaskWorker.processMappedJobs(GridTaskWorker.java:609)
 at
org.apache.ignite.internal.processors.task.GridTaskWorker.body(GridTaskWorker.java:501)
 at
org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110)
 at
org.apache.ignite.internal.processors.task.GridTaskProcessor.startTask(GridTaskProcessor.java:678)
 at
org.apache.ignite.internal.processors.task.GridTaskProcessor.execute(GridTaskProcessor.java:447)
 at
org.apache.ignite.internal.processors.rest.handlers.task.GridTaskCommandHandler.handleAsyncUnsafe(GridTaskCommandHandler.java:227)
 at
org.apache.ignite.internal.processors.rest.handlers.task.GridTaskCommandHandler.handleAsync(GridTaskCommandHandler.java:163)
 at
org.apache.ignite.internal.processors.rest.GridRestProcessor.handleRequest(GridRestProcessor.java:261)
 at
org.apache.ignite.internal.processors.rest.GridRestProcessor.access$100(GridRestProcessor.java:84)
 at
org.apache.ignite.internal.processors.rest.GridRestProcessor$2.body(GridRestProcessor.java:150)
 at
org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110)
 at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
 at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
 at java.lang.Thread.run(Thread.java:745)

On Tue, Oct 27, 2015 at 3:12 PM, Alexey Kuznetsov <[hidden email]>
wrote:

> Igniters,
>
> I've got following situation:
> 1) Start Ignite node.
> 2) Start load from store via cache.loadCache(null)
> 3) From java client (org.apache.ignite.internal.client.GridClient) start
> SCAN query on this cache.
> 4) SCAN query blocked until load is not finished.
>
> Is this expected behavior?
>
> I expected that SCAN query will immediately return with some data already
> loaded into cache.
>
> --
> Alexey Kuznetsov
> GridGain Systems
> www.gridgain.com
>



--
Alexey Kuznetsov
GridGain Systems
www.gridgain.com
Reply | Threaded
Open this post in threaded view
|

Re: Parallel execution of cache.loadCache() and SCAN query.

Alexey Goncharuk
Alexey,

The thread that you've captured waits for the next page to be received; I
agree that the behavior looks wrong, but this thread does not explain why
it happens.

Can you check if you see any other suspicious threads or perhaps attach a
full thread dump?

2015-10-27 11:17 GMT+03:00 Alexey Kuznetsov <[hidden email]>:

> I take thread dump and found the following:
> "ignite-#80%rest-jdbc.CacheJdbcPortableStoreSelfTest%" prio=6
> tid=0x000000000e6bd800 nid=0x21e4 in Object.wait() [0x000000001662d000]
>    java.lang.Thread.State: TIMED_WAITING (on object monitor)
>  at java.lang.Object.wait(Native Method)
>  - waiting on <0x00000007ddf3ebf0> (a java.lang.Object)
>  at
>
> org.apache.ignite.internal.processors.cache.query.GridCacheQueryFutureAdapter.internalIterator(GridCacheQueryFutureAdapter.java:314)
>  - locked <0x00000007ddf3ebf0> (a java.lang.Object)
>  at
>
> org.apache.ignite.internal.processors.cache.query.GridCacheQueryFutureAdapter.next(GridCacheQueryFutureAdapter.java:171)
>  at
>
> org.apache.ignite.internal.processors.cache.IgniteCacheProxy$5.onHasNext(IgniteCacheProxy.java:518)
>  at
>
> org.apache.ignite.internal.util.GridCloseableIteratorAdapter.hasNextX(GridCloseableIteratorAdapter.java:53)
>  at
>
> org.apache.ignite.internal.util.lang.GridIteratorAdapter.hasNext(GridIteratorAdapter.java:45)
>  at
>
> org.apache.ignite.internal.visor.query.VisorQueryCursor.hasNext(VisorQueryCursor.java:51)
>  at
>
> org.apache.ignite.internal.visor.query.VisorQueryUtils.fetchScanQueryRows(VisorQueryUtils.java:127)
>  at
>
> org.apache.ignite.internal.visor.query.VisorQueryJob.run(VisorQueryJob.java:94)
>  at
>
> org.apache.ignite.internal.visor.query.VisorQueryJob.run(VisorQueryJob.java:49)
>  at org.apache.ignite.internal.visor.VisorJob.execute(VisorJob.java:69)
>  at
>
> org.apache.ignite.internal.processors.job.GridJobWorker$2.call(GridJobWorker.java:509)
>  at
>
> org.apache.ignite.internal.util.IgniteUtils.wrapThreadLoader(IgniteUtils.java:6371)
>  at
>
> org.apache.ignite.internal.processors.job.GridJobWorker.execute0(GridJobWorker.java:503)
>  at
>
> org.apache.ignite.internal.processors.job.GridJobWorker.body(GridJobWorker.java:456)
>  at
> org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110)
>  at
>
> org.apache.ignite.internal.processors.job.GridJobProcessor.processJobExecuteRequest(GridJobProcessor.java:1100)
>  at
>
> org.apache.ignite.internal.processors.task.GridTaskWorker.sendRequest(GridTaskWorker.java:1231)
>  at
>
> org.apache.ignite.internal.processors.task.GridTaskWorker.processMappedJobs(GridTaskWorker.java:609)
>  at
>
> org.apache.ignite.internal.processors.task.GridTaskWorker.body(GridTaskWorker.java:501)
>  at
> org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110)
>  at
>
> org.apache.ignite.internal.processors.task.GridTaskProcessor.startTask(GridTaskProcessor.java:678)
>  at
>
> org.apache.ignite.internal.processors.task.GridTaskProcessor.execute(GridTaskProcessor.java:447)
>  at
>
> org.apache.ignite.internal.processors.rest.handlers.task.GridTaskCommandHandler.handleAsyncUnsafe(GridTaskCommandHandler.java:227)
>  at
>
> org.apache.ignite.internal.processors.rest.handlers.task.GridTaskCommandHandler.handleAsync(GridTaskCommandHandler.java:163)
>  at
>
> org.apache.ignite.internal.processors.rest.GridRestProcessor.handleRequest(GridRestProcessor.java:261)
>  at
>
> org.apache.ignite.internal.processors.rest.GridRestProcessor.access$100(GridRestProcessor.java:84)
>  at
>
> org.apache.ignite.internal.processors.rest.GridRestProcessor$2.body(GridRestProcessor.java:150)
>  at
> org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110)
>  at
>
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>  at
>
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>  at java.lang.Thread.run(Thread.java:745)
>
> On Tue, Oct 27, 2015 at 3:12 PM, Alexey Kuznetsov <[hidden email]
> >
> wrote:
>
> > Igniters,
> >
> > I've got following situation:
> > 1) Start Ignite node.
> > 2) Start load from store via cache.loadCache(null)
> > 3) From java client (org.apache.ignite.internal.client.GridClient) start
> > SCAN query on this cache.
> > 4) SCAN query blocked until load is not finished.
> >
> > Is this expected behavior?
> >
> > I expected that SCAN query will immediately return with some data already
> > loaded into cache.
> >
> > --
> > Alexey Kuznetsov
> > GridGain Systems
> > www.gridgain.com
> >
>
>
>
> --
> Alexey Kuznetsov
> GridGain Systems
> www.gridgain.com
>