Class PartitionUpdate

java.lang.Object
org.apache.cassandra.db.partitions.AbstractBTreePartition
org.apache.cassandra.db.partitions.PartitionUpdate
All Implemented Interfaces:
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).

  • Field Details

  • Method Details

    • 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, 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.
    • withOnlyPresentColumns

      public PartitionUpdate withOnlyPresentColumns()
    • canHaveShadowedData

      protected boolean canHaveShadowedData()
      Specified by:
      canHaveShadowedData in class AbstractBTreePartition
    • fromBytes

      public static PartitionUpdate fromBytes(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 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, 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(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.
    • deletionInfo

      public DeletionInfo deletionInfo()
      Overrides:
      deletionInfo in class AbstractBTreePartition
    • 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.
    • metadata

      public TableMetadata metadata()
      Specified by:
      metadata in interface Partition
      Specified by:
      metadata in class AbstractBTreePartition
    • columns

      public RegularAndStaticColumns columns()
      Specified by:
      columns in interface Partition
      Overrides:
      columns in class AbstractBTreePartition
    • holder

      protected BTreePartitionData holder()
      Specified by:
      holder in class AbstractBTreePartition
    • stats

      public EncodingStats stats()
      Specified by:
      stats in interface Partition
      Overrides:
      stats in class AbstractBTreePartition
    • 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 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, 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)
    • unsafeConstruct

      public static PartitionUpdate unsafeConstruct(TableMetadata metadata, DecoratedKey key, BTreePartitionData holder, MutableDeletionInfo deletionInfo, boolean canHaveShadowedData)