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/13 11:42:41 UTC

[2/6] cassandra git commit: Fix memory leak in SSTableSimple*Writer and SSTableReader.validate()

Fix memory leak in SSTableSimple*Writer and SSTableReader.validate()

patch by benedict; reviewed by marcus for CASSANDRA-8748


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

Branch: refs/heads/cassandra-2.1
Commit: b1825e6f840402c86b36f0e7910318f366a4cced
Parents: b0b64fd
Author: Benedict Elliott Smith <be...@apache.org>
Authored: Fri Feb 13 10:26:53 2015 +0000
Committer: Benedict Elliott Smith <be...@apache.org>
Committed: Fri Feb 13 10:26:53 2015 +0000

----------------------------------------------------------------------
 CHANGES.txt                                                 | 1 +
 src/java/org/apache/cassandra/io/sstable/SSTableReader.java | 3 +++
 .../cassandra/io/sstable/SSTableSimpleUnsortedWriter.java   | 2 +-
 .../apache/cassandra/io/sstable/SSTableSimpleWriter.java    | 2 +-
 src/java/org/apache/cassandra/io/sstable/SSTableWriter.java | 9 ++++++++-
 5 files changed, 14 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/b1825e6f/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index aef3a1e..3d7bf12 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 2.0.13:
+ * Fix memory leak in SSTableSimple*Writer and SSTableReader.validate() (CASSANDRA-8748)
  * Fix some multi-column relations with indexes on some clustering
    columns (CASSANDRA-8275)
  * Fix IllegalArgumentException in dynamic snitch (CASSANDRA-8448)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b1825e6f/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/io/sstable/SSTableReader.java b/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
index 803c7fa..15808e8 100644
--- a/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
+++ b/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
@@ -593,7 +593,10 @@ public class SSTableReader extends SSTable implements Closeable
     private void validate()
     {
         if (this.first.compareTo(this.last) > 0)
+        {
+            releaseReference();
             throw new IllegalStateException(String.format("SSTable first key %s > last key %s", this.first, this.last));
+        }
     }
 
     /** get the position in the index file to start scanning to find the given key (at most indexInterval keys away) */

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b1825e6f/src/java/org/apache/cassandra/io/sstable/SSTableSimpleUnsortedWriter.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/io/sstable/SSTableSimpleUnsortedWriter.java b/src/java/org/apache/cassandra/io/sstable/SSTableSimpleUnsortedWriter.java
index db03ea1..614ca7d 100644
--- a/src/java/org/apache/cassandra/io/sstable/SSTableSimpleUnsortedWriter.java
+++ b/src/java/org/apache/cassandra/io/sstable/SSTableSimpleUnsortedWriter.java
@@ -227,7 +227,7 @@ public class SSTableSimpleUnsortedWriter extends AbstractSSTableSimpleWriter
                             throw new AssertionError("Empty partition");
                         first = false;
                     }
-                    writer.close();
+                    writer.close(true);
                 }
             }
             catch (Throwable e)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b1825e6f/src/java/org/apache/cassandra/io/sstable/SSTableSimpleWriter.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/io/sstable/SSTableSimpleWriter.java b/src/java/org/apache/cassandra/io/sstable/SSTableSimpleWriter.java
index 9b584f0..bef78b3 100644
--- a/src/java/org/apache/cassandra/io/sstable/SSTableSimpleWriter.java
+++ b/src/java/org/apache/cassandra/io/sstable/SSTableSimpleWriter.java
@@ -72,7 +72,7 @@ public class SSTableSimpleWriter extends AbstractSSTableSimpleWriter
         {
             if (currentKey != null)
                 writeRow(currentKey, columnFamily);
-            writer.close();
+            writer.close(true);
         }
         catch (FSError e)
         {

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b1825e6f/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java b/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java
index 08e5527..300b0f3 100644
--- a/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java
+++ b/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java
@@ -363,11 +363,18 @@ public class SSTableWriter extends SSTable
         return sstable;
     }
 
-    // Close the writer and return the descriptor to the new sstable and it's metadata
     public Pair<Descriptor, SSTableMetadata> close()
     {
+        return close(false);
+    }
+
+    // Close the writer and return the descriptor to the new sstable and it's metadata
+    public Pair<Descriptor, SSTableMetadata> close(boolean closeBf)
+    {
         // index and filter
         iwriter.close();
+        if (closeBf)
+            iwriter.bf.close();
         // main data, close will truncate if necessary
         dataFile.close();
         // write sstable statistics