Repository: cassandra Updated Branches: refs/heads/cassandra-2.0 b0b64fd3c -> b1825e6f8 refs/heads/cassandra-2.1 d6200a801 -> 15c92c386 refs/heads/trunk 99739ee3d -> 51293ed08
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.0 Commit: b1825e6f840402c86b36f0e7910318f366a4cced Parents: b0b64fd Author: Benedict Elliott Smith <bened...@apache.org> Authored: Fri Feb 13 10:26:53 2015 +0000 Committer: Benedict Elliott Smith <bened...@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