You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2011/03/10 18:13:17 UTC
svn commit: r1080286 - in /cassandra/branches/cassandra-0.7: CHANGES.txt
src/java/org/apache/cassandra/tools/SSTableExport.java
Author: jbellis
Date: Thu Mar 10 17:13:16 2011
New Revision: 1080286
URL: http://svn.apache.org/viewvc?rev=1080286&view=rev
Log:
fix fd leak in sstable2json with non-mmap'd i/o
patch by jbellis; reviewed by Pavel Yaskevich for CASSANDRA-2304
Modified:
cassandra/branches/cassandra-0.7/CHANGES.txt
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/SSTableExport.java
Modified: cassandra/branches/cassandra-0.7/CHANGES.txt
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/CHANGES.txt?rev=1080286&r1=1080285&r2=1080286&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/CHANGES.txt (original)
+++ cassandra/branches/cassandra-0.7/CHANGES.txt Thu Mar 10 17:13:16 2011
@@ -18,6 +18,7 @@
(CASSANDRA-2282)
* fix commitlog replay when flush position refers to data that didn't
get synced before server died (CASSANDRA-2285)
+ * fix fd leak in sstable2json with non-mmap'd i/o (CASSANDRA-2304)
0.7.3
Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/SSTableExport.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/SSTableExport.java?rev=1080286&r1=1080285&r2=1080286&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/SSTableExport.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/SSTableExport.java Thu Mar 10 17:13:16 2011
@@ -19,6 +19,7 @@
package org.apache.cassandra.tools;
import java.io.File;
+import java.io.IOError;
import java.io.IOException;
import java.io.PrintStream;
import java.nio.ByteBuffer;
@@ -37,6 +38,7 @@ import org.apache.cassandra.config.Confi
import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.dht.IPartitioner;
import org.apache.cassandra.io.sstable.*;
+import org.apache.cassandra.utils.Pair;
import static org.apache.cassandra.utils.ByteBufferUtil.bytesToHex;
import static org.apache.cassandra.utils.ByteBufferUtil.hexToBytes;
@@ -97,16 +99,23 @@ public class SSTableExport
* Serialize columns using given column iterator
* @param columns column iterator
* @param out output stream
+ * @return pair of (number of columns serialized, last column serialized)
*/
- private static void serializeColumns(Iterator<IColumn> columns, PrintStream out)
+ private static Pair<Integer, ByteBuffer> serializeColumns(Iterator<IColumn> columns, PrintStream out)
{
+ int n = 0;
+ IColumn column = null;
while (columns.hasNext())
{
- serializeColumn(columns.next(), out);
+ column = columns.next();
+ n++;
+ serializeColumn(column, out);
if (columns.hasNext())
out.print(", ");
}
+
+ return new Pair<Integer, ByteBuffer>(n, column == null ? null : column.name());
}
/**
@@ -174,25 +183,29 @@ public class SSTableExport
IColumnIterator columns = filter.getSSTableColumnIterator(reader);
- int columnCount = 0;
- while (columns.hasNext())
- {
- // setting new start column to the last of the current columns
- startColumn = columns.next().name();
- columnCount++;
- }
-
+ Pair<Integer, ByteBuffer> serialized;
try
{
- columns = filter.getSSTableColumnIterator(reader); // iterator reset
- serializeRow(columns, isSuperCF, out);
+ serialized = serializeRow(columns, isSuperCF, out);
}
catch (IOException e)
{
System.err.println("WARNING: Corrupt row " + key + " (skipping).");
+ continue;
+ }
+ finally
+ {
+ try
+ {
+ columns.close();
+ }
+ catch (IOException e)
+ {
+ throw new IOError(e);
+ }
}
- if (columnCount < PAGE_SIZE)
+ if (serialized.left < PAGE_SIZE)
break;
out.print(",");
@@ -207,16 +220,20 @@ public class SSTableExport
* @param columns columns of the row
* @param isSuper true if wrapping Column Family is Super
* @param out output stream
+ * @return pair of (number of columns serialized, last column serialized)
*
* @throws IOException on any I/O error.
*/
- private static void serializeRow(IColumnIterator columns, boolean isSuper, PrintStream out) throws IOException
+ private static Pair<Integer, ByteBuffer> serializeRow(IColumnIterator columns, boolean isSuper, PrintStream out) throws IOException
{
if (isSuper)
{
+ int n = 0;
+ IColumn column = null;
while (columns.hasNext())
{
- IColumn column = columns.next();
+ column = columns.next();
+ n++;
out.print(asKey(bytesToHex(column.name())));
out.print("{");
@@ -232,10 +249,12 @@ public class SSTableExport
if (columns.hasNext())
out.print(", ");
}
+
+ return new Pair<Integer, ByteBuffer>(n, column == null ? null : column.name());
}
else
{
- serializeColumns(columns, out);
+ return serializeColumns(columns, out);
}
}