[
https://issues.apache.org/jira/browse/IGNITE-4487?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15777996#comment-15777996
]
Alexander Menshikov commented on IGNITE-4487:
---------------------------------------------
I found that: in inner class
'GridCacheQueryAdapter.ScanQueryFallbackClosableIterator' in constructor is
called with method 'init()', but method 'init()' cannot be called with an empty
field 'nodes'. In source code it looks like:
{code:java}
private ScanQueryFallbackClosableIterator(int part, GridCacheQueryAdapter qry,
GridCacheQueryManager qryMgr, GridCacheContext cctx) {
this.qry = qry;
this.qryMgr = qryMgr;
this.cctx = cctx;
this.part = part;
nodes = fallbacks(cctx.discovery().topologyVersionEx());
// !!! Here nodes.isEmpty()==true, and init() will fail in the
future. !!!
init();
}
{code}
I can fix it by adding some check in code, but i must know what behavior are
best in this case? As I understand it, the list of nodes is empty if there are
no nodes with the current partition, which means data loss, and either need to
return a meaningful exception, or ignore this situation. But maybe I missed
something.
> NPE on query execution
> ----------------------
>
> Key: IGNITE-4487
> URL: https://issues.apache.org/jira/browse/IGNITE-4487
> Project: Ignite
> Issue Type: Bug
> Components: cache
> Affects Versions: 1.8
> Reporter: Dmitry Karachentsev
> Fix For: 2.0
>
> Attachments: IgniteThread.java, Main.java
>
>
> NPE may be thrown when called destroyCache() and started querying.
> Attached example reproduces this case when
> GridDiscoveryManager#removeCacheFilter called but cache state haven't been
> changed to STOPPED
> org.apache.ignite.internal.processors.cache.GridCacheGateway#onStopped.
> {code:none}
> javax.cache.CacheException: class org.apache.ignite.IgniteCheckedException:
> null
> at
> org.apache.ignite.internal.processors.cache.IgniteCacheProxy.query(IgniteCacheProxy.java:740)
> at
> com.intellica.evam.engine.event.future.FutureEventWorker.processFutureEvents(FutureEventWorker.java:117)
> at
> com.intellica.evam.engine.event.future.FutureEventWorker.run(FutureEventWorker.java:66)
> Caused by: class org.apache.ignite.IgniteCheckedException: null
> at
> org.apache.ignite.internal.processors.query.GridQueryProcessor.executeQuery(GridQueryProcessor.java:1693)
> at
> org.apache.ignite.internal.processors.cache.IgniteCacheProxy.query(IgniteCacheProxy.java:494)
> at
> org.apache.ignite.internal.processors.cache.IgniteCacheProxy.query(IgniteCacheProxy.java:732)
> ... 2 more
> Caused by: java.lang.NullPointerException
> at
> org.apache.ignite.internal.processors.cache.query.GridCacheQueryAdapter$ScanQueryFallbackClosableIterator.init(GridCacheQueryAdapter.java:712)
> at
> org.apache.ignite.internal.processors.cache.query.GridCacheQueryAdapter$ScanQueryFallbackClosableIterator.<init>(GridCacheQueryAdapter.java:677)
> at
> org.apache.ignite.internal.processors.cache.query.GridCacheQueryAdapter$ScanQueryFallbackClosableIterator.<init>(GridCacheQueryAdapter.java:628)
> at
> org.apache.ignite.internal.processors.cache.query.GridCacheQueryAdapter.executeScanQuery(GridCacheQueryAdapter.java:548)
> at
> org.apache.ignite.internal.processors.cache.IgniteCacheProxy$2.applyx(IgniteCacheProxy.java:497)
> at
> org.apache.ignite.internal.processors.cache.IgniteCacheProxy$2.applyx(IgniteCacheProxy.java:495)
> at
> org.apache.ignite.internal.util.lang.IgniteOutClosureX.apply(IgniteOutClosureX.java:36)
> at
> org.apache.ignite.internal.processors.query.GridQueryProcessor.executeQuery(GridQueryProcessor.java:1670)
> ... 4 more
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)