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:12:44 UTC

[2/5] 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/c14a7d51
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/c14a7d51
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/c14a7d51

Branch: refs/heads/trunk
Commit: c14a7d51e601b40cd0be03576dfcb9dba5a0abe9
Parents: a72869c
Author: Benedict Elliott Smith <be...@apache.org>
Authored: Fri Feb 13 10:10:02 2015 +0000
Committer: Benedict Elliott Smith <be...@apache.org>
Committed: Fri Feb 13 10:10:02 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/c14a7d51/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index d2ecccc..096e630 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)
  * Throw OOM if allocating memory fails to return a valid pointer (CASSANDRA-8726)
  * Fix SSTableSimpleUnsortedWriter ConcurrentModificationException (CASSANDRA-8619)
  * Round up time deltas lower than 1ms in BulkLoader (CASSANDRA-8645)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/c14a7d51/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/c14a7d51/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/c14a7d51/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/c14a7d51/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