[
https://issues.apache.org/jira/browse/IGNITE-12549?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Sergey Kosarev updated IGNITE-12549:
------------------------------------
Description:
Case 1
1. start server node 1
2 create and fill replicated cache with RebalanceMode.Async (as by default)
3 start servr node 2
3 immediately execute scan query on the replicated cache((or just iterate the
cache)) on the node 2
It can get empty or partial results. (if rebalance on node 2 is finished)
Case 2
1. start server node 1
2 create and fill replicated cache with RebalanceMode.Async (as by default)
3 start client node 2
3 start server node 3
3 immediately execute scan query on the replicated cache((or just iterate the
cache)) on the client node 2
It can get empty or partial results. (if rebalance on node 2 is not finished
and query is mapped on the node 2)
It looks like problem in the
org.apache.ignite.internal.processors.cache.query.GridCacheQueryAdapter#nodes()
case REPLICATED:
if (prj != null || part != null)
return nodes(cctx, prj, part);
if (cctx.affinityNode())
return *Collections.singletonList(cctx.localNode())*;
Collection<ClusterNode> affNodes = nodes(cctx, null, null);
return affNodes.isEmpty() ? affNodes :
*Collections.singletonList(F.rand(affNodes))*;
case PARTITIONED:
return nodes(cctx, prj, part);
which is executed in
org.apache.ignite.internal.processors.cache.query.GridCacheQueryAdapter#executeScanQuery
if executed on a just started node it obviously returns the local node
disregarding was it rebalanced or not.
if executed on a client it returns a random affinity node, so it also can be
not yet rebalanced node.
was:
Case 1
1. start server node 1
2 create and fill replicated cache with RebalanceMode.Async (as by default)
3 start servr node 2
3 immediately execute scan query on the replicated cache((or just iterate the
cache)) on the node 2
It can get empty or partial results. (if rebalance on node 2 is finished)
Case 2
1. start server node 1
2 create and fill replicated cache with RebalanceMode.Async (as by default)
3 start client node 2
3 start server node 3
3 immediately execute scan query on the replicated cache((or just iterate the
cache)) on the client node 2
It can get empty or partial results. (if rebalance on node 2 is not finished
and query is mapped on the node 2)
It looks like problem in the
org.apache.ignite.internal.processors.cache.query.GridCacheQueryAdapter#nodes()
case REPLICATED:
if (prj != null || part != null)
return nodes(cctx, prj, part);
if (cctx.affinityNode())
return *Collections.singletonList(cctx.localNode())*;
Collection<ClusterNode> affNodes = nodes(cctx, null, null);
return affNodes.isEmpty() ? affNodes :
*Collections.singletonList(F.rand(affNodes))*;
case PARTITIONED:
return nodes(cctx, prj, part);
> Scan query/iterator on a replicated cache may get wrong results
> ---------------------------------------------------------------
>
> Key: IGNITE-12549
> URL: https://issues.apache.org/jira/browse/IGNITE-12549
> Project: Ignite
> Issue Type: Bug
> Components: cache
> Affects Versions: 2.7.6
> Reporter: Sergey Kosarev
> Priority: Major
>
> Case 1
> 1. start server node 1
> 2 create and fill replicated cache with RebalanceMode.Async (as by default)
> 3 start servr node 2
> 3 immediately execute scan query on the replicated cache((or just iterate
> the cache)) on the node 2
> It can get empty or partial results. (if rebalance on node 2 is finished)
> Case 2
> 1. start server node 1
> 2 create and fill replicated cache with RebalanceMode.Async (as by default)
> 3 start client node 2
> 3 start server node 3
> 3 immediately execute scan query on the replicated cache((or just iterate
> the cache)) on the client node 2
> It can get empty or partial results. (if rebalance on node 2 is not finished
> and query is mapped on the node 2)
> It looks like problem in the
> org.apache.ignite.internal.processors.cache.query.GridCacheQueryAdapter#nodes()
> case REPLICATED:
> if (prj != null || part != null)
> return nodes(cctx, prj, part);
> if (cctx.affinityNode())
> return *Collections.singletonList(cctx.localNode())*;
> Collection<ClusterNode> affNodes = nodes(cctx, null, null);
> return affNodes.isEmpty() ? affNodes :
> *Collections.singletonList(F.rand(affNodes))*;
> case PARTITIONED:
> return nodes(cctx, prj, part);
> which is executed in
> org.apache.ignite.internal.processors.cache.query.GridCacheQueryAdapter#executeScanQuery
> if executed on a just started node it obviously returns the local node
> disregarding was it rebalanced or not.
> if executed on a client it returns a random affinity node, so it also can be
> not yet rebalanced node.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)