[ https://issues.apache.org/jira/browse/IGNITE-12094?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Dmitry Sterinzat updated IGNITE-12094: -------------------------------------- Description: When Scan query on Replicated cache executes from client node and topology is unstable (for example 2 new server nodes are up at the same time) it is possible to get empty result: {code:java} // IgniteCacheProxyImpl#projection // here we return cluster group with random cluster node return ctx.kernalContext().grid().cluster().forDataNodes(ctx.name()).forRandom();{code} {code:java} // GridCacheQueryAdapter#executeScanQuery // Affinity nodes snapshot. Collection<ClusterNode> nodes = new ArrayList<>(nodes()); ... if (nodes.isEmpty()) { if (part != null && forceLocal) throw new IgniteCheckedException("No queryable nodes for partition " + part + " [forced local query=" + this + "]"); return new GridEmptyCloseableIterator(); } // GridCacheQueryAdapter#nodes(final GridCacheContext<?, ?> cctx, @Nullable final ClusterGroup prj, @Nullable final Integer part) final AffinityTopologyVersion topVer = cctx.affinity().affinityTopologyVersion(); // This collection isn't contains randomly selected node because AffinityTopologyVersion is previous. Collection<ClusterNode> affNodes = CU.affinityNodes(cctx, topVer); ... return F.view(affNodes, new P1<ClusterNode>() { @Override public boolean apply(ClusterNode n) { return cctx.discovery().cacheAffinityNode(n, cctx.name()) && (prj == null || prj.node(n.id()) != null) && (part == null || owners.contains(n)); } }); } {code} In our case nodes collection is empty, because node that was randomly selected isn't current topology version (cache isn't already started), so we get GridEmptyCloseableIterator (query event isn't executed). was: When Scan query on Replicated cache executes from client node and topology is unstable (for example 2 new server nodes are up at the same time) it is possible to get empty result: {code:java} // IgniteCacheProxyImpl#projection // here we return cluster group with random cluster node return ctx.kernalContext().grid().cluster().forDataNodes(ctx.name()).forRandom();{code} {code:java} // GridCacheQueryAdapter#executeScanQuery // Affinity nodes snapshot. Collection<ClusterNode> nodes = new ArrayList<>(nodes()); ... if (nodes.isEmpty()) { if (part != null && forceLocal) throw new IgniteCheckedException("No queryable nodes for partition " + part + " [forced local query=" + this + "]"); return new GridEmptyCloseableIterator(); } // GridCacheQueryAdapter#nodes(final GridCacheContext<?, ?> cctx, @Nullable final ClusterGroup prj, @Nullable final Integer part) final AffinityTopologyVersion topVer = cctx.affinity().affinityTopologyVersion(); // This collection isn't contains randomly selected node because AffinityTopologyVersion is previous. Collection<ClusterNode> affNodes = CU.affinityNodes(cctx, topVer); ... return F.view(affNodes, new P1<ClusterNode>() { @Override public boolean apply(ClusterNode n) { return cctx.discovery().cacheAffinityNode(n, cctx.name()) && (prj == null || prj.node(n.id()) != null) && (part == null || owners.contains(n)); } }); } {code} In our case nodes collection is empty, because node that was randomly selected isn't current topology version (cache isn't already started), so we get GridEmptyCloseableIterator (query event isn't executed). > Scan Query scheduled to be executed on wrong node > ------------------------------------------------- > > Key: IGNITE-12094 > URL: https://issues.apache.org/jira/browse/IGNITE-12094 > Project: Ignite > Issue Type: Bug > Components: cache > Affects Versions: 2.7.5 > Reporter: Dmitry Sterinzat > Priority: Major > > When Scan query on Replicated cache executes from client node and topology is > unstable (for example 2 new server nodes are up at the same time) it is > possible to get empty result: > {code:java} > // IgniteCacheProxyImpl#projection > // here we return cluster group with random cluster node > return > ctx.kernalContext().grid().cluster().forDataNodes(ctx.name()).forRandom();{code} > > {code:java} > // GridCacheQueryAdapter#executeScanQuery > // Affinity nodes snapshot. > Collection<ClusterNode> nodes = new ArrayList<>(nodes()); > ... > if (nodes.isEmpty()) { > if (part != null && forceLocal) > throw new IgniteCheckedException("No queryable nodes for partition " > + part > + " [forced local query=" + this + "]"); > return new GridEmptyCloseableIterator(); > } > // GridCacheQueryAdapter#nodes(final GridCacheContext<?, ?> cctx, > @Nullable final ClusterGroup prj, @Nullable final Integer part) > final AffinityTopologyVersion topVer = > cctx.affinity().affinityTopologyVersion(); > // This collection isn't contains randomly selected node because > AffinityTopologyVersion is previous. > Collection<ClusterNode> affNodes = CU.affinityNodes(cctx, topVer); > ... > return F.view(affNodes, new P1<ClusterNode>() { > @Override public boolean apply(ClusterNode n) { > return cctx.discovery().cacheAffinityNode(n, cctx.name()) && > (prj == null || prj.node(n.id()) != null) && > (part == null || owners.contains(n)); > } > }); > } > {code} > In our case nodes collection is empty, because node that was randomly > selected isn't current topology version (cache isn't already started), so we > get GridEmptyCloseableIterator (query event isn't executed). > -- This message was sent by Atlassian Jira (v8.3.2#803003)