Repository: cassandra Updated Branches: refs/heads/cassandra-2.1 056f627e9 -> d6200a801 refs/heads/trunk 3bb4c3033 -> 99739ee3d
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/cassandra-2.1 Commit: c14a7d51e601b40cd0be03576dfcb9dba5a0abe9 Parents: a72869c Author: Benedict Elliott Smith <bened...@apache.org> Authored: Fri Feb 13 10:10:02 2015 +0000 Committer: Benedict Elliott Smith <bened...@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