[ 
https://issues.apache.org/jira/browse/CASSANDRA-13095?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Danil Smirnov updated CASSANDRA-13095:
--------------------------------------
    Description: 
Recently I've run into a problem with heavily loaded cluster when sometimes 
messages between certain nodes become blocked with no reason.

It's very similar to situation described here 
https://issues.apache.org/jira/browse/CASSANDRA-12676?focusedCommentId=15736166&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-15736166
 although in my case nodes does not seem to recover.

Thread dump showed infinite loop here: 
https://github.com/apache/cassandra/blob/a8a43dd32eb92406d7d8b105e08c68b3d5c7df49/src/java/org/apache/cassandra/utils/CoalescingStrategies.java#L109

Apparently the problem is in the initial value of epoch filed in 
TimeHorizonMovingAverageCoalescingStrategy class. When it's value is not evenly 
divisible by BUCKET_INTERVAL, ix(epoch-1) does not point to the correct bucket. 
As a result, sum gradually increases and, upon reaching MEASURED_INTERVAL, 
averageGap becomes 0 and thread blocks.
It's hard to reproduce because when no messages are send for some time, sum 
becomes 0 
https://github.com/apache/cassandra/blob/a8a43dd32eb92406d7d8b105e08c68b3d5c7df49/src/java/org/apache/cassandra/utils/CoalescingStrategies.java#L301
 and bud is no longer reproducible (until connection between nodes is 
re-created).

I've added a patch which should fix the problem. Don't know if it would be of 
any help since CASSANDRA-12676 will apparently disable this behaviour. One note 
about performance regressions though. There is a small chance it being result 
of the bug described here, so it might be worth testing performance after fixes 
and/or tuning the algorithm.

  was:
Recently I've run into a problem with heavily loaded cluster when sometimes 
messages between certain nodes become blocked with no reason.

It's very similar to situation described here 
https://issues.apache.org/jira/browse/CASSANDRA-12676?focusedCommentId=15736166&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-15736166
 although in my case nodes does not seem to recover.

Thread dump showed infinite loop here: 
https://github.com/apache/cassandra/blob/a8a43dd32eb92406d7d8b105e08c68b3d5c7df49/src/java/org/apache/cassandra/utils/CoalescingStrategies.java#L109

Apparently the problem is in the initial value of epoch filed in 
TimeHorizonMovingAverageCoalescingStrategy class. When it's value is not evenly 
divisible by BUCKET_INTERVAL, ix(epoch-1) does not point to the correct bucket. 
As a result, sum gradually increases and, upon reaching MEASURED_INTERVAL, 
averageGap becomes 0 and thread blocks.
It's hard to reproduce because when no messages are send for some time, sum 
becomes 0 
https://github.com/apache/cassandra/blob/a8a43dd32eb92406d7d8b105e08c68b3d5c7df49/src/java/org/apache/cassandra/utils/CoalescingStrategies.java#L301
 . So this bug affects only heavily loaded clusters.

I've added a patch which should fix the problem. Don't know if it would be of 
any help since CASSANDRA-12676 will apparently disable this behaviour. One note 
about performance though. Due to incorrect averageGap calculation, currently 
TIMEHORIZON sleeps a lot more than reasonable, so it might be worth testing 
performance after fixes and/or tune the algorithm.


> Timeouts between nodes
> ----------------------
>
>                 Key: CASSANDRA-13095
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-13095
>             Project: Cassandra
>          Issue Type: Bug
>            Reporter: Danil Smirnov
>            Priority: Minor
>         Attachments: 13095-2.1.patch
>
>
> Recently I've run into a problem with heavily loaded cluster when sometimes 
> messages between certain nodes become blocked with no reason.
> It's very similar to situation described here 
> https://issues.apache.org/jira/browse/CASSANDRA-12676?focusedCommentId=15736166&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-15736166
>  although in my case nodes does not seem to recover.
> Thread dump showed infinite loop here: 
> https://github.com/apache/cassandra/blob/a8a43dd32eb92406d7d8b105e08c68b3d5c7df49/src/java/org/apache/cassandra/utils/CoalescingStrategies.java#L109
> Apparently the problem is in the initial value of epoch filed in 
> TimeHorizonMovingAverageCoalescingStrategy class. When it's value is not 
> evenly divisible by BUCKET_INTERVAL, ix(epoch-1) does not point to the 
> correct bucket. As a result, sum gradually increases and, upon reaching 
> MEASURED_INTERVAL, averageGap becomes 0 and thread blocks.
> It's hard to reproduce because when no messages are send for some time, sum 
> becomes 0 
> https://github.com/apache/cassandra/blob/a8a43dd32eb92406d7d8b105e08c68b3d5c7df49/src/java/org/apache/cassandra/utils/CoalescingStrategies.java#L301
>  and bud is no longer reproducible (until connection between nodes is 
> re-created).
> I've added a patch which should fix the problem. Don't know if it would be of 
> any help since CASSANDRA-12676 will apparently disable this behaviour. One 
> note about performance regressions though. There is a small chance it being 
> result of the bug described here, so it might be worth testing performance 
> after fixes and/or tuning the algorithm.



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

Reply via email to