You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ignite.apache.org by Alexey Kuznetsov <ak...@gridgain.com> on 2015/10/27 09:12:51 UTC

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

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

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

Posted by Alexey Goncharuk <al...@gmail.com>.
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 <ak...@gridgain.com>:

> 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 <akuznetsov@gridgain.com
> >
> 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
>

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

Posted by Alexey Kuznetsov <ak...@gridgain.com>.
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 <ak...@gridgain.com>
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