You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by be...@apache.org on 2015/02/19 12:55:00 UTC

[2/9] cassandra git commit: Fix StreamTransferTask abort/complete bad refcounting

Fix StreamTransferTask abort/complete bad refcounting

patch by benedict; reviewed by sankalp CASSANDRA-8815


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/a762e5ad
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/a762e5ad
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/a762e5ad

Branch: refs/heads/cassandra-2.1
Commit: a762e5add2853b168e13fda7527837af045be81d
Parents: 58e6a1d
Author: Benedict Elliott Smith <be...@apache.org>
Authored: Thu Feb 19 11:48:53 2015 +0000
Committer: Benedict Elliott Smith <be...@apache.org>
Committed: Thu Feb 19 11:48:53 2015 +0000

----------------------------------------------------------------------
 CHANGES.txt                                      |  1 +
 .../cassandra/streaming/StreamTransferTask.java  | 19 ++++++++++++++++++-
 2 files changed, 19 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/a762e5ad/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 48751d9..076bb65 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 2.0.13:
+ * Fix StreamTransferTask abort/complete bad refcounting (CASSANDRA-8815)
  * Fix AssertionError when querying a DESC clustering ordered
    table with ASC ordering and paging (CASSANDRA-8767)
  * AssertionError: "Memory was freed" when running cleanup (CASSANDRA-8716)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/a762e5ad/src/java/org/apache/cassandra/streaming/StreamTransferTask.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/streaming/StreamTransferTask.java b/src/java/org/apache/cassandra/streaming/StreamTransferTask.java
index 5b75555..8d699e1 100644
--- a/src/java/org/apache/cassandra/streaming/StreamTransferTask.java
+++ b/src/java/org/apache/cassandra/streaming/StreamTransferTask.java
@@ -22,6 +22,9 @@ import java.util.concurrent.*;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.atomic.AtomicInteger;
 
+import com.google.common.base.Throwables;
+import com.google.common.collect.Iterables;
+
 import org.apache.cassandra.concurrent.NamedThreadFactory;
 import org.apache.cassandra.io.sstable.SSTableReader;
 import org.apache.cassandra.streaming.messages.OutgoingFileMessage;
@@ -91,8 +94,22 @@ public class StreamTransferTask extends StreamTask
             future.cancel(false);
         timeoutTasks.clear();
 
+        Throwable fail = null;
         for (OutgoingFileMessage file : files.values())
-            file.sstable.releaseReference();
+        {
+            try
+            {
+                file.sstable.releaseReference();
+            }
+            catch (Throwable t)
+            {
+                if (fail == null) fail = t;
+                else fail.addSuppressed(t);
+            }
+        }
+        files.clear();
+        if (fail != null)
+            Throwables.propagate(fail);
     }
 
     public synchronized int getTotalNumberOfFiles()