You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Corentin Chary (JIRA)" <ji...@apache.org> on 2017/01/26 19:32:25 UTC

[jira] [Created] (CASSANDRA-13159) Coalescing strategy can enter infinite loop

Corentin Chary created CASSANDRA-13159:
------------------------------------------

             Summary: 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


{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.4#6332)