org.apache.cassandra.db.compaction
Class LazilyCompactedRow

java.lang.Object
  extended by org.apache.cassandra.db.compaction.AbstractCompactedRow
      extended by org.apache.cassandra.db.compaction.LazilyCompactedRow
All Implemented Interfaces:
java.lang.Iterable<IColumn>, IIterableColumns

public class LazilyCompactedRow
extends AbstractCompactedRow
implements IIterableColumns

LazilyCompactedRow only computes the row bloom filter and column index in memory (at construction time); it does this by reading one column at a time from each of the rows being compacted, and merging them as it does so. So the most we have in memory at a time is the bloom filter, the index, and one column from each pre-compaction row. When write() or update() is called, a second pass is made over the pre-compaction rows to write the merged columns or update the hash, again with at most one column from each row deserialized at a time.


Field Summary
 
Fields inherited from class org.apache.cassandra.db.compaction.AbstractCompactedRow
key
 
Constructor Summary
LazilyCompactedRow(CompactionController controller, java.util.List<? extends ICountableColumnIterator> rows)
           
 
Method Summary
 int columnCount()
           
 AbstractType getComparator()
           
 int getEstimatedColumnCount()
           
 boolean isEmpty()
           
 java.util.Iterator<IColumn> iterator()
           
 long maxTimestamp()
           
 void update(java.security.MessageDigest digest)
          update @param digest with the data bytes of the row (not including row key or row size).
 long write(java.io.DataOutput out)
          write the row (size + column index + filter + column data, but NOT row key) to @param out.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

LazilyCompactedRow

public LazilyCompactedRow(CompactionController controller,
                          java.util.List<? extends ICountableColumnIterator> rows)
Method Detail

write

public long write(java.io.DataOutput out)
           throws java.io.IOException
Description copied from class: AbstractCompactedRow
write the row (size + column index + filter + column data, but NOT row key) to @param out. It is an error to call this if isEmpty is false. (Because the key is appended first, so we'd have an incomplete row written.) write() may change internal state; it is NOT valid to call write() or update() a second time.

Specified by:
write in class AbstractCompactedRow
Throws:
java.io.IOException

update

public void update(java.security.MessageDigest digest)
Description copied from class: AbstractCompactedRow
update @param digest with the data bytes of the row (not including row key or row size). May be called even if empty. update() may change internal state; it is NOT valid to call write() or update() a second time.

Specified by:
update in class AbstractCompactedRow

isEmpty

public boolean isEmpty()
Specified by:
isEmpty in class AbstractCompactedRow
Returns:
true if there are no columns in the row AND there are no row-level tombstones to be preserved

getEstimatedColumnCount

public int getEstimatedColumnCount()
Specified by:
getEstimatedColumnCount in interface IIterableColumns

getComparator

public AbstractType getComparator()
Specified by:
getComparator in interface IIterableColumns

iterator

public java.util.Iterator<IColumn> iterator()
Specified by:
iterator in interface java.lang.Iterable<IColumn>

columnCount

public int columnCount()
Specified by:
columnCount in class AbstractCompactedRow
Returns:
the number of columns in the row

maxTimestamp

public long maxTimestamp()
Specified by:
maxTimestamp in class AbstractCompactedRow
Returns:
the max column timestamp in the row or Long.MIN_VALUE if computing this value would require extra effort we're not willing to make.


Copyright © 2011 The Apache Software Foundation