[ https://issues.apache.org/jira/browse/CASSANDRA-13159?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15861000#comment-15861000 ]
Corentin Chary commented on CASSANDRA-13159: -------------------------------------------- LGTM > Coalescing strategy can enter infinite loop > ------------------------------------------- > > Key: CASSANDRA-13159 > URL: https://issues.apache.org/jira/browse/CASSANDRA-13159 > Project: Cassandra > Issue Type: Bug > Components: Streaming and Messaging > Reporter: Corentin Chary > Assignee: Corentin Chary > Fix For: 3.0.11, 2.1.x, 2.2.x, 3.11.x > > > {code}boolean maybeSleep(int messages, long averageGap, long > maxCoalesceWindow, Parker parker){code} > maybeSleep() can enter an infinite loop if messages or averageGap ends up > being 0 because sleep will be 0 and the while loop will never exit. I've > noticed that on one of my clusters twice this week. > This can happen if in averageGap() sum is bigger than MEASURED_INTERVAL, > which should be pretty rare but apparently happen to me. > Even if the diagnostic is wrong (and I'm pretty sure that this thread was > using 100% CPU doing nothing), the fix seems pretty safe to apply. > {code} > diff --git a/src/java/org/apache/cassandra/utils/CoalescingStrategies.java > b/src/java/org/apache/cassandra/utils/CoalescingStrategies.java > index 0aa980f..982d4a6 100644 > --- a/src/java/org/apache/cassandra/utils/CoalescingStrategies.java > +++ b/src/java/org/apache/cassandra/utils/CoalescingStrategies.java > @@ -100,7 +100,7 @@ public class CoalescingStrategies > { > // only sleep if we can expect to double the number of messages > we're sending in the time interval > long sleep = messages * averageGap; > - if (sleep > maxCoalesceWindow) > + if (!sleep || sleep > maxCoalesceWindow) > return false; > > // assume we receive as many messages as we expect; apply the same > logic to the future batch: > {code} -- This message was sent by Atlassian JIRA (v6.3.15#6346)