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)