[jira] [Comment Edited] (IGNITE-12549) Scan query/iterator on a replicated cache may get wrong results

2020-02-18 Thread Sergey Kosarev (Jira)


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

Sergey Kosarev edited comment on IGNITE-12549 at 2/18/20 8:54 AM:
--

[~Pavlukhin], I've updated PR and replied to you, TC Run in progress, please 
check my changes [PR-7277|https://github.com/apache/ignite/pull/7277].


was (Author: macrergate):
[~Pavlukhin], I've updated PR and replied to you, please check 
[PR-7277|https://github.com/apache/ignite/pull/7277].

> 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
>Assignee: Sergey Kosarev
>Priority: Critical
> Fix For: 2.8
>
>  Time Spent: 1.5h
>  Remaining Estimate: 0h
>
> Case 1
> 1. start server node 1
> 2. create and fill replicated cache with RebalanceMode.Async (as by default)
> 3. start servr node 2 
> 4. 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
> 4. start server node 3 
> 5. 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 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)


[jira] [Comment Edited] (IGNITE-12549) Scan query/iterator on a replicated cache may get wrong results

2020-01-20 Thread Sergey Kosarev (Jira)


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

Sergey Kosarev edited comment on IGNITE-12549 at 1/20/20 3:20 PM:
--

[~Pavlukhin], there is a difference.

I've found the second problem in the method: 
{{org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl#projection}}

there is stacktrace:

projection:628, IgniteCacheProxyImpl 
(org.apache.ignite.internal.processors.cache)
 query:809, IgniteCacheProxyImpl (org.apache.ignite.internal.processors.cache)
 query:412, GatewayProtectedCacheProxy 
(org.apache.ignite.internal.processors.cache)

 

it looks like IgniteCacheProxyImpl#projection somewhat duplicates logic of 
org.apache.ignite.internal.processors.cache.query.GridCacheQueryAdapter#nodes()

and both have the same error - lacks the check for moving partitions.

 

 


was (Author: macrergate):
[~Pavlukhin], there is a difference. 

I've found the second problem in the method: 
{{org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl#projection}}

there is stacktrace:

projection:628, IgniteCacheProxyImpl 
(org.apache.ignite.internal.processors.cache)
query:809, IgniteCacheProxyImpl (org.apache.ignite.internal.processors.cache)
query:412, GatewayProtectedCacheProxy 
(org.apache.ignite.internal.processors.cache)

 

it looks like {{IgniteCacheProxyImpl#projection somewhat duplicates logic of 
}}org.apache.ignite.internal.processors.cache.query.GridCacheQueryAdapter#nodes()

and both have the same error - lacks the check for moving partitions.

 

 

> 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: Critical
> Fix For: 2.8
>
>
> Case 1
> 1. start server node 1
> 2. create and fill replicated cache with RebalanceMode.Async (as by default)
> 3. start servr node 2 
> 4. 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
> 4. start server node 3 
> 5. 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 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)