Class PartitionUpdate

  • All Implemented Interfaces:
    java.lang.Iterable<Row>, Partition

    public class PartitionUpdate
    extends AbstractBTreePartition
    Stores updates made on a partition.

    A PartitionUpdate object requires that all writes/additions are performed before we try to read the updates (attempts to write to the PartitionUpdate after a read method has been called will result in an exception being thrown). In other words, a Partition is mutable while it's written but becomes immutable as soon as it is read.

    A typical usage is to create a new update (new PartitionUpdate(metadata, key, columns, capacity)) and then add rows and range tombstones through the add() methods (the partition level deletion time can also be set with addPartitionDeletion()). However, there is also a few static helper constructor methods for special cases (emptyUpdate(), fullPartitionDelete and singleRowUpdate).

    • Method Detail

      • emptyUpdate

        public static PartitionUpdate emptyUpdate​(TableMetadata metadata,
                                                  DecoratedKey key)
        Creates a empty immutable partition update.
        Parameters:
        metadata - the metadata for the created update.
        key - the partition key for the created update.
        Returns:
        the newly created empty (and immutable) update.
      • fullPartitionDelete

        public static PartitionUpdate fullPartitionDelete​(TableMetadata metadata,
                                                          DecoratedKey key,
                                                          long timestamp,
                                                          long nowInSec)
        Creates an immutable partition update that entirely deletes a given partition.
        Parameters:
        metadata - the metadata for the created update.
        key - the partition key for the partition that the created update should delete.
        timestamp - the timestamp for the deletion.
        nowInSec - the current time in seconds to use as local deletion time for the partition deletion.
        Returns:
        the newly created partition deletion update.
      • singleRowUpdate

        public static PartitionUpdate singleRowUpdate​(TableMetadata metadata,
                                                      DecoratedKey key,
                                                      Row row,
                                                      Row staticRow)
        Creates an immutable partition update that contains a single row update.
        Parameters:
        metadata - the metadata for the created update.
        key - the partition key for the partition to update.
        row - the row for the update (may be null).
        row - the static row for the update (may be null).
        Returns:
        the newly created partition update containing only row.
      • singleRowUpdate

        public static PartitionUpdate singleRowUpdate​(TableMetadata metadata,
                                                      DecoratedKey key,
                                                      Row row)
        Creates an immutable partition update that contains a single row update.
        Parameters:
        metadata - the metadata for the created update.
        key - the partition key for the partition to update.
        row - the row for the update (may be static).
        Returns:
        the newly created partition update containing only row.
      • singleRowUpdate

        public static PartitionUpdate singleRowUpdate​(TableMetadata metadata,
                                                      java.nio.ByteBuffer key,
                                                      Row row)
        Creates an immutable partition update that contains a single row update.
        Parameters:
        metadata - the metadata for the created update.
        key - the partition key for the partition to update.
        row - the row for the update.
        Returns:
        the newly created partition update containing only row.
      • fromIterator

        public static PartitionUpdate fromIterator​(UnfilteredRowIterator iterator,
                                                   ColumnFilter filter)
        Turns the given iterator into an update.
        Parameters:
        iterator - the iterator to turn into updates.
        filter - the column filter used when querying iterator. This is used to make sure we don't include data for which the value has been skipped while reading (as we would then be writing something incorrect). Warning: this method does not close the provided iterator, it is up to the caller to close it.
      • fromIterator

        public static PartitionUpdate fromIterator​(RowIterator iterator,
                                                   ColumnFilter filter)
        Turns the given iterator into an update.
        Parameters:
        iterator - the iterator to turn into updates.
        filter - the column filter used when querying iterator. This is used to make sure we don't include data for which the value has been skipped while reading (as we would then be writing something incorrect). Warning: this method does not close the provided iterator, it is up to the caller to close it.
      • fromBytes

        public static PartitionUpdate fromBytes​(java.nio.ByteBuffer bytes,
                                                int version)
        Deserialize a partition update from a provided byte buffer.
        Parameters:
        bytes - the byte buffer that contains the serialized update.
        version - the version with which the update is serialized.
        Returns:
        the deserialized update or null if bytes == null.
      • toBytes

        public static java.nio.ByteBuffer toBytes​(PartitionUpdate update,
                                                  int version)
        Serialize a partition update as a byte buffer.
        Parameters:
        update - the partition update to serialize.
        version - the version to serialize the update into.
        Returns:
        a newly allocated byte buffer containing the serialized update.
      • fullPartitionDelete

        public static PartitionUpdate fullPartitionDelete​(TableMetadata metadata,
                                                          java.nio.ByteBuffer key,
                                                          long timestamp,
                                                          long nowInSec)
        Creates a partition update that entirely deletes a given partition.
        Parameters:
        metadata - the metadata for the created update.
        key - the partition key for the partition that the created update should delete.
        timestamp - the timestamp for the deletion.
        nowInSec - the current time in seconds to use as local deletion time for the partition deletion.
        Returns:
        the newly created partition deletion update.
      • merge

        public static PartitionUpdate merge​(java.util.List<PartitionUpdate> updates)
        Merges the provided updates, yielding a new update that incorporates all those updates.
        Parameters:
        updates - the collection of updates to merge. This shouldn't be empty.
        Returns:
        a partition update that include (merge) all the updates from updates.
      • operationCount

        public int operationCount()
        The number of "operations" contained in the update.

        This is used by Memtable to approximate how much work this update does. In practice, this count how many rows are updated and how many ranges are deleted by the partition update.

        Returns:
        the number of "operations" performed by the update.
      • dataSize

        public int dataSize()
        The size of the data contained in this update.
        Returns:
        the size of the data contained in this update.
      • unsharedHeapSize

        public long unsharedHeapSize()
        The size of the data contained in this update.
        Returns:
        the size of the data contained in this update.
      • validate

        public void validate()
        Validates the data contained in this update.
        Throws:
        MarshalException - if some of the data contained in this update is corrupted.
      • maxTimestamp

        public long maxTimestamp()
        The maximum timestamp used in this update.
        Returns:
        the maximum timestamp used in this update.
      • collectCounterMarks

        public java.util.List<PartitionUpdate.CounterMark> collectCounterMarks()
        For an update on a counter table, returns a list containing a CounterMark for every counter contained in the update.
        Returns:
        a list with counter marks for every counter in this update.
      • affectedRowCount

        public int affectedRowCount()
        Returns:
        the estimated number of rows affected by this mutation
      • affectedColumnCount

        public int affectedColumnCount()
        Returns:
        the estimated total number of columns that either have live data or are covered by a delete
      • simpleBuilder

        public static PartitionUpdate.SimpleBuilder simpleBuilder​(TableMetadata metadata,
                                                                  java.lang.Object... partitionKeyValues)
        Creates a new simple partition update builder.
        Parameters:
        metadata - the metadata for the table this is a partition of.
        partitionKeyValues - the values for partition key columns identifying this partition. The values for each partition key column can be passed either directly as ByteBuffer or using a "native" value (int for Int32Type, string for UTF8Type, ...). It is also allowed to pass a single DecoratedKey value directly.
        Returns:
        a newly created builder.
      • validateIndexedColumns

        public void validateIndexedColumns​(ClientState state)