You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by sl...@apache.org on 2014/08/07 16:12:20 UTC

git commit: Fix minor potential leak in sstable2json

Repository: cassandra
Updated Branches:
  refs/heads/cassandra-2.0 b6b8a285e -> f3f69cb47


Fix minor potential leak in sstable2json

patch by blerer; reviewed by slebresne for CASSANDRA-7709


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

Branch: refs/heads/cassandra-2.0
Commit: f3f69cb47319bbc7d3c1e1aa1d48076e4a155e8c
Parents: b6b8a28
Author: Sylvain Lebresne <sy...@datastax.com>
Authored: Thu Aug 7 16:11:38 2014 +0200
Committer: Sylvain Lebresne <sy...@datastax.com>
Committed: Thu Aug 7 16:11:38 2014 +0200

----------------------------------------------------------------------
 CHANGES.txt                                     |   1 +
 .../apache/cassandra/tools/SSTableExport.java   | 139 +++++++++++--------
 2 files changed, 79 insertions(+), 61 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/f3f69cb4/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index fdff490..4392159 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 2.0.10
+ * Minor leak in sstable2jon (CASSANDRA-7709)
  * Add cassandra.auto_bootstrap system property (CASSANDRA-7650)
  * Remove CqlPagingRecordReader/CqlPagingInputFormat (CASSANDRA-7570)
  * Fix IncompatibleClassChangeError from hadoop2 (CASSANDRA-7229)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/f3f69cb4/src/java/org/apache/cassandra/tools/SSTableExport.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/tools/SSTableExport.java b/src/java/org/apache/cassandra/tools/SSTableExport.java
index 197585b..f8b85c3 100644
--- a/src/java/org/apache/cassandra/tools/SSTableExport.java
+++ b/src/java/org/apache/cassandra/tools/SSTableExport.java
@@ -252,20 +252,26 @@ public class SSTableExport
     throws IOException
     {
         KeyIterator iter = new KeyIterator(desc);
-        DecoratedKey lastKey = null;
-        while (iter.hasNext())
+        try
         {
-            DecoratedKey key = iter.next();
+            DecoratedKey lastKey = null;
+            while (iter.hasNext())
+            {
+                DecoratedKey key = iter.next();
 
-            // validate order of the keys in the sstable
-            if (lastKey != null && lastKey.compareTo(key) > 0)
-                throw new IOException("Key out of order! " + lastKey + " > " + key);
-            lastKey = key;
+                // validate order of the keys in the sstable
+                if (lastKey != null && lastKey.compareTo(key) > 0)
+                    throw new IOException("Key out of order! " + lastKey + " > " + key);
+                lastKey = key;
 
-            outs.println(bytesToHex(key.key));
-            checkStream(outs); // flushes
+                outs.println(bytesToHex(key.key));
+                checkStream(outs); // flushes
+            }
+        }
+        finally
+        {
+            iter.close();
         }
-        iter.close();
     }
 
     /**
@@ -281,51 +287,59 @@ public class SSTableExport
     {
         SSTableReader sstable = SSTableReader.open(desc);
         RandomAccessReader dfile = sstable.openDataReader();
+        try
+        {
+            IPartitioner<?> partitioner = sstable.partitioner;
 
-        IPartitioner<?> partitioner = sstable.partitioner;
+            if (excludes != null)
+                toExport.removeAll(Arrays.asList(excludes));
 
-        if (excludes != null)
-            toExport.removeAll(Arrays.asList(excludes));
+            outs.println("[");
 
-        outs.println("[");
+            int i = 0;
 
-        int i = 0;
+            // last key to compare order
+            DecoratedKey lastKey = null;
 
-        // last key to compare order
-        DecoratedKey lastKey = null;
+            for (String key : toExport)
+            {
+                DecoratedKey decoratedKey = partitioner.decorateKey(hexToBytes(key));
 
-        for (String key : toExport)
-        {
-            DecoratedKey decoratedKey = partitioner.decorateKey(hexToBytes(key));
+                if (lastKey != null && lastKey.compareTo(decoratedKey) > 0)
+                    throw new IOException("Key out of order! " + lastKey + " > " + decoratedKey);
 
-            if (lastKey != null && lastKey.compareTo(decoratedKey) > 0)
-                throw new IOException("Key out of order! " + lastKey + " > " + decoratedKey);
+                lastKey = decoratedKey;
 
-            lastKey = decoratedKey;
+                RowIndexEntry entry = sstable.getPosition(decoratedKey, SSTableReader.Operator.EQ);
+                if (entry == null)
+                    continue;
 
-            RowIndexEntry entry = sstable.getPosition(decoratedKey, SSTableReader.Operator.EQ);
-            if (entry == null)
-                continue;
+                dfile.seek(entry.position);
+                ByteBufferUtil.readWithShortLength(dfile); // row key
+                if (sstable.descriptor.version.hasRowSizeAndColumnCount)
+                    dfile.readLong(); // row size
+                DeletionInfo deletionInfo = new DeletionInfo(DeletionTime.serializer.deserialize(dfile));
+                int columnCount = sstable.descriptor.version.hasRowSizeAndColumnCount ? dfile.readInt()
+                        : Integer.MAX_VALUE;
 
-            dfile.seek(entry.position);
-            ByteBufferUtil.readWithShortLength(dfile); // row key
-            if (sstable.descriptor.version.hasRowSizeAndColumnCount)
-                dfile.readLong(); // row size
-            DeletionInfo deletionInfo = new DeletionInfo(DeletionTime.serializer.deserialize(dfile));
-            int columnCount = sstable.descriptor.version.hasRowSizeAndColumnCount ? dfile.readInt() : Integer.MAX_VALUE;
+                Iterator<OnDiskAtom> atomIterator = sstable.metadata.getOnDiskIterator(dfile, columnCount,
+                        sstable.descriptor.version);
 
-            Iterator<OnDiskAtom> atomIterator = sstable.metadata.getOnDiskIterator(dfile, columnCount, sstable.descriptor.version);
+                checkStream(outs);
 
-            checkStream(outs);
+                if (i != 0)
+                    outs.println(",");
+                i++;
+                serializeRow(deletionInfo, atomIterator, sstable.metadata, decoratedKey, outs);
+            }
 
-            if (i != 0)
-                outs.println(",");
-            i++;
-            serializeRow(deletionInfo, atomIterator, sstable.metadata, decoratedKey, outs);
+            outs.println("\n]");
+            outs.flush();
+        }
+        finally
+        {
+            dfile.close();
         }
-
-        outs.println("\n]");
-        outs.flush();
     }
 
     // This is necessary to accommodate the test suite since you cannot open a Reader more
@@ -337,36 +351,39 @@ public class SSTableExport
         if (excludes != null)
             excludeSet = new HashSet<String>(Arrays.asList(excludes));
 
-
         SSTableIdentityIterator row;
         SSTableScanner scanner = reader.getScanner();
+        try
+        {
+            outs.println("[");
 
-        outs.println("[");
+            int i = 0;
 
-        int i = 0;
+            // collecting keys to export
+            while (scanner.hasNext())
+            {
+                row = (SSTableIdentityIterator) scanner.next();
 
-        // collecting keys to export
-        while (scanner.hasNext())
-        {
-            row = (SSTableIdentityIterator) scanner.next();
+                String currentKey = bytesToHex(row.getKey().key);
 
-            String currentKey = bytesToHex(row.getKey().key);
+                if (excludeSet.contains(currentKey))
+                    continue;
+                else if (i != 0)
+                    outs.println(",");
 
-            if (excludeSet.contains(currentKey))
-                continue;
-            else if (i != 0)
-                outs.println(",");
+                serializeRow(row, row.getKey(), outs);
+                checkStream(outs);
 
-            serializeRow(row, row.getKey(), outs);
-            checkStream(outs);
+                i++;
+            }
 
-            i++;
+            outs.println("\n]");
+            outs.flush();
+        }
+        finally
+        {
+            scanner.close();
         }
-
-        outs.println("\n]");
-        outs.flush();
-
-        scanner.close();
     }
 
     /**