[ 
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)

Reply via email to