ignite-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Andrew Mashenkov (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (IGNITE-4145) "No query result found for request" exception when running multiple queries concurrently.
Date Tue, 08 Nov 2016 14:38:58 GMT

    [ https://issues.apache.org/jira/browse/IGNITE-4145?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15647727#comment-15647727
] 

Andrew Mashenkov commented on IGNITE-4145:
------------------------------------------

There is a race in GridMergeIndex.addPage() method.

A page can pass to FetchingCursor (in GridMergeIndexUnsorted class) and become available to
another thread before remaining rows counter is reduced. So, another thread could call fetchNextPage()
method on the last page object in sequence, that resulted in error, because Map side had no
query result object (see  NodeResult class) already. 


> "No query result found for request" exception when running multiple queries concurrently.
> -----------------------------------------------------------------------------------------
>
>                 Key: IGNITE-4145
>                 URL: https://issues.apache.org/jira/browse/IGNITE-4145
>             Project: Ignite
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 1.7
>            Reporter: Vladimir Ozerov
>            Assignee: Andrew Mashenkov
>             Fix For: 1.8
>
>
> When many queries are executed simultaneously in multi-node cluster, the following exception
might appear from time to time:
> {code}
> Exception in thread "qry-exec-20" javax.cache.CacheException: Failed to fetch data from
node: 3432842f-2fa2-44b9-b69b-cadba286d317
> 	at org.apache.ignite.internal.processors.query.h2.twostep.GridReduceQueryExecutor$3.fetchNextPage(GridReduceQueryExecutor.java:298)
> 	at org.apache.ignite.internal.processors.query.h2.twostep.GridMergeIndex.fetchNextPage(GridMergeIndex.java:229)
> 	at org.apache.ignite.internal.processors.query.h2.twostep.GridMergeIndexUnsorted$1.hasNext(GridMergeIndexUnsorted.java:106)
> 	at org.apache.ignite.internal.processors.query.h2.twostep.GridMergeIndex$IteratorCursor.next(GridMergeIndex.java:351)
> 	at org.apache.ignite.internal.processors.query.h2.twostep.GridMergeIndex$FetchingCursor.next(GridMergeIndex.java:382)
> 	at org.apache.ignite.internal.processors.query.h2.twostep.GridReduceQueryExecutor.query(GridReduceQueryExecutor.java:640)
> 	at org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing$4.iterator(IgniteH2Indexing.java:1057)
> 	at org.apache.ignite.internal.processors.cache.QueryCursorImpl.iterator(QueryCursorImpl.java:81)
> 	at org.apache.ignite.yardstick.ringcentral.AdgRunner$QueryExecutor.run(AdgRunner.java:394)
> 	at java.lang.Thread.run(Thread.java:745)
> 	Suppressed: javax.cache.CacheException: Failed to execute map query on the node: c51bc4f2-7038-4df6-88a9-eb87506c2f86,
class javax.cache.CacheException:No query result found for request: GridQueryNextPageRequest
[qryReqId=93, qry=0, pageSize=1024]
> 		at org.apache.ignite.internal.processors.query.h2.twostep.GridReduceQueryExecutor.fail(GridReduceQueryExecutor.java:259)
> 		at org.apache.ignite.internal.processors.query.h2.twostep.GridReduceQueryExecutor.onFail(GridReduceQueryExecutor.java:249)
> 		at org.apache.ignite.internal.processors.query.h2.twostep.GridReduceQueryExecutor.onMessage(GridReduceQueryExecutor.java:230)
> 		at org.apache.ignite.internal.processors.query.h2.twostep.GridReduceQueryExecutor$1.onMessage(GridReduceQueryExecutor.java:178)
> 		at org.apache.ignite.internal.managers.communication.GridIoManager$ArrayListener.onMessage(GridIoManager.java:1900)
> 		at org.apache.ignite.internal.managers.communication.GridIoManager.invokeListener(GridIoManager.java:1080)
> 		at org.apache.ignite.internal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:708)
> 		at org.apache.ignite.internal.managers.communication.GridIoManager.access$1700(GridIoManager.java:101)
> 		at org.apache.ignite.internal.managers.communication.GridIoManager$5.run(GridIoManager.java:671)
> 		at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
> 		at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
> 		... 1 more
> {code}
> Quick analysis shows that next-page request could possibly arrive before original query
message is processed. Need to confirm it with deeper debugging first.
> The best way to reproduce it:
> 1) Generate some data
> 2) Start several data nodes (e.g. 4)
> 3) Start client node
> 4) Concurrently execute multiple SQL queries from the client in different threads.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message