cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Corentin Chary (JIRA)" <>
Subject [jira] [Created] (CASSANDRA-13159) Coalescing strategy can enter infinite loop
Date Thu, 26 Jan 2017 19:32:25 GMT
Corentin Chary created CASSANDRA-13159:

             Summary: Coalescing strategy can enter infinite loop
                 Key: CASSANDRA-13159
             Project: Cassandra
          Issue Type: Bug
          Components: Streaming and Messaging
            Reporter: Corentin Chary

{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.

diff --git a/src/java/org/apache/cassandra/utils/ b/src/java/org/apache/cassandra/utils/
index 0aa980f..982d4a6 100644
--- a/src/java/org/apache/cassandra/utils/
+++ b/src/java/org/apache/cassandra/utils/
@@ -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

This message was sent by Atlassian JIRA

View raw message