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

Andrey Gura edited comment on IGNITE-2565 at 2/11/16 6:18 PM:
--------------------------------------------------------------

This test fails in cases when rebalancing is not finished for current topology. 
See 
{{org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache#updateAllAsyncInternal0}}:

{code}
boolean sndPrevVal = !top.rebalanceFinished(req.topologyVersion())
{code}

As result {{GridCacheMapEntry#innerUpdate}} method invoked with {{retval == 
true}} and performs get operation. It leads to update "cache miss" metric 
becasue it was the first put in test.

{code}
if (metrics && cctx.cache().configuration().isStatisticsEnabled() && needVal) {
    // PutIfAbsent methods mustn't update hit/miss statistics
    if (op != GridCacheOperation.UPDATE || F.isEmpty(filter) || 
!cctx.putIfAbsentFilter(filter))
        cctx.cache().metrics0().onRead(oldVal != null);
}
{code}

HitPercentage problem is related with the same behavior.  The first {{put}} in 
the test performs {{get}} and miss metrics incremented. 
{{RemoveEntryProcessor}} perfroms {{get}} and hit metric incremented (gets 
metric equals two). As result we have {{hits / gets * 100 == 50}}.


was (Author: agura):
This test fails in cases when rebalancing is not finished for current topology. 
See 
{{org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache#updateAllAsyncInternal0}}:

{code}
boolean sndPrevVal = !top.rebalanceFinished(req.topologyVersion())
{code}

As result {{GridCacheMapEntry#innerUpdate}} method invoked with {{retval == 
true}} and performs get operation. It leads to update "cache miss" metric 
becasue it was the first put in test.

{code}
if (metrics && cctx.cache().configuration().isStatisticsEnabled() && needVal) {
    // PutIfAbsent methods mustn't update hit/miss statistics
    if (op != GridCacheOperation.UPDATE || F.isEmpty(filter) || 
!cctx.putIfAbsentFilter(filter))
        cctx.cache().metrics0().onRead(oldVal != null);
}
{code}

> TCK fails when client nodes are particapating in the cluster.
> -------------------------------------------------------------
>
>                 Key: IGNITE-2565
>                 URL: https://issues.apache.org/jira/browse/IGNITE-2565
>             Project: Ignite
>          Issue Type: Bug
>          Components: cache
>    Affects Versions: 1.5.0.final
>            Reporter: Anton Vinogradov
>            Assignee: Vladimir Ershov
>            Priority: Critical
>              Labels: important
>             Fix For: 1.6
>
>
> TCK suite fail periodically fails with assetrions about CacheHitPercentage.
> I see that a lot of changes was made last two months where added logic with 
> invoking of metrics.onRead(); possible this affects statictic counting.
> Typical stacktrace:
> java.lang.AssertionError: expected:<100.0> but was:<50.0>
>     at org.junit.Assert.fail(Assert.java:88)
>     at org.junit.Assert.failNotEquals(Assert.java:743)
>     at org.junit.Assert.assertEquals(Assert.java:118)
>     at org.junit.Assert.assertEquals(Assert.java:144)
>     at 
> org.jsr107.tck.management.CacheMBStatisticsBeanTest.testCacheStatisticsInvokeEntryProcessorRemove(CacheMBStatisticsBeanTest.java:424)



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to