Author: jbellis
Date: Thu Sep 22 20:14:14 2011
New Revision: 1174367
URL: http://svn.apache.org/viewvc?rev=1174367&view=rev
Log:
use Array backed columns in compaction
patch by jbellis; reviewed by slebresne and tested by brandonwilliams for
CASSANDRA-3234
Modified:
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/compaction/ParallelCompactionIterable.java
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/compaction/PrecompactedRow.java
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/io/sstable/SSTableIdentityIterator.java
Modified:
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/ColumnFamilyStore.java?rev=1174367&r1=1174366&r2=1174367&view=diff
==============================================================================
---
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
(original)
+++
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
Thu Sep 22 20:14:14 2011
@@ -812,8 +812,10 @@ public class ColumnFamilyStore implement
private static void removeDeletedStandard(ColumnFamily cf, int gcBefore)
{
- for (IColumn c : cf)
+ Iterator<IColumn> iter = cf.iterator();
+ while (iter.hasNext())
{
+ IColumn c = iter.next();
ByteBuffer cname = c.name();
// remove columns if
// (a) the column itself is tombstoned or
@@ -821,7 +823,7 @@ public class ColumnFamilyStore implement
if ((c.isMarkedForDelete() && c.getLocalDeletionTime() <= gcBefore)
|| c.timestamp() <= cf.getMarkedForDeleteAt())
{
- cf.remove(cname);
+ iter.remove();
}
}
}
@@ -836,15 +838,17 @@ public class ColumnFamilyStore implement
{
SuperColumn c = (SuperColumn)iter.next();
long minTimestamp = Math.max(c.getMarkedForDeleteAt(),
cf.getMarkedForDeleteAt());
- for (IColumn subColumn : c.getSubColumns())
+ Iterator<IColumn> subIter = c.getSubColumns().iterator();
+ while (subIter.hasNext())
{
+ IColumn subColumn = subIter.next();
// remove subcolumns if
// (a) the subcolumn itself is tombstoned or
// (b) the supercolumn is tombstoned and the subcolumn is not
newer than it
if (subColumn.timestamp() <= minTimestamp
|| (subColumn.isMarkedForDelete() &&
subColumn.getLocalDeletionTime() <= gcBefore))
{
- c.remove(subColumn.name());
+ subIter.remove();
}
}
if (c.getSubColumns().isEmpty() && c.getLocalDeletionTime() <=
gcBefore)
Modified:
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/compaction/ParallelCompactionIterable.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/compaction/ParallelCompactionIterable.java?rev=1174367&r1=1174366&r2=1174367&view=diff
==============================================================================
---
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/compaction/ParallelCompactionIterable.java
(original)
+++
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/compaction/ParallelCompactionIterable.java
Thu Sep 22 20:14:14 2011
@@ -229,6 +229,7 @@ public class ParallelCompactionIterable
}
else
{
+ // addAll is ok even if cf is an
ArrayBackedSortedColumns
cf.addAll(thisCF, HeapAllocator.instance);
}
}
Modified:
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/compaction/PrecompactedRow.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/compaction/PrecompactedRow.java?rev=1174367&r1=1174366&r2=1174367&view=diff
==============================================================================
---
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/compaction/PrecompactedRow.java
(original)
+++
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/db/compaction/PrecompactedRow.java
Thu Sep 22 20:14:14 2011
@@ -125,6 +125,7 @@ public class PrecompactedRow extends Abs
}
else
{
+ // addAll is ok even if cf is an ArrayBackedSortedColumns
cf.addAll(thisCF, HeapAllocator.instance);
}
}
Modified:
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/io/sstable/SSTableIdentityIterator.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/io/sstable/SSTableIdentityIterator.java?rev=1174367&r1=1174366&r2=1174367&view=diff
==============================================================================
---
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/io/sstable/SSTableIdentityIterator.java
(original)
+++
cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/io/sstable/SSTableIdentityIterator.java
Thu Sep 22 20:14:14 2011
@@ -27,9 +27,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.cassandra.config.CFMetaData;
-import org.apache.cassandra.db.ColumnFamily;
-import org.apache.cassandra.db.DecoratedKey;
-import org.apache.cassandra.db.IColumn;
+import org.apache.cassandra.db.*;
import org.apache.cassandra.db.columniterator.ICountableColumnIterator;
import org.apache.cassandra.db.marshal.MarshalException;
import org.apache.cassandra.io.util.RandomAccessReader;
@@ -228,7 +226,7 @@ public class SSTableIdentityIterator imp
public ColumnFamily getColumnFamilyWithColumns() throws IOException
{
assert inputWithTracker.getBytesRead() == headerSize();
- ColumnFamily cf = columnFamily.cloneMeShallow();
+ ColumnFamily cf =
columnFamily.cloneMeShallow(ArrayBackedSortedColumns.factory(), false);
// since we already read column count, just pass that value and
continue deserialization
ColumnFamily.serializer().deserializeColumns(inputWithTracker, cf,
columnCount, fromRemote);
if (validateColumns)