Class PartitionUpdate
- java.lang.Object
-
- org.apache.cassandra.db.partitions.AbstractBTreePartition
-
- org.apache.cassandra.db.partitions.PartitionUpdate
-
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 theadd()
methods (the partition level deletion time can also be set withaddPartitionDeletion()
). However, there is also a few static helper constructor methods for special cases (emptyUpdate()
,fullPartitionDelete
andsingleRowUpdate
).
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
PartitionUpdate.Builder
Builder for PartitionUpdates This class is not thread safe, but the PartitionUpdate it produces is (since it is immutable).static class
PartitionUpdate.CounterMark
A counter mark is basically a pointer to a counter update inside this partition update.static class
PartitionUpdate.PartitionUpdateSerializer
static interface
PartitionUpdate.SimpleBuilder
Interface for building partition updates geared towards human.
-
Field Summary
Fields Modifier and Type Field Description protected static org.slf4j.Logger
logger
static PartitionUpdate.PartitionUpdateSerializer
serializer
-
Fields inherited from class org.apache.cassandra.db.partitions.AbstractBTreePartition
partitionKey
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description int
affectedColumnCount()
int
affectedRowCount()
protected boolean
canHaveShadowedData()
java.util.List<PartitionUpdate.CounterMark>
collectCounterMarks()
For an update on a counter table, returns a list containing aCounterMark
for every counter contained in the update.RegularAndStaticColumns
columns()
int
dataSize()
The size of the data contained in this update.DeletionInfo
deletionInfo()
static PartitionUpdate
emptyUpdate(TableMetadata metadata, DecoratedKey key)
Creates a empty immutable partition update.static PartitionUpdate
fromBytes(java.nio.ByteBuffer bytes, int version)
Deserialize a partition update from a provided byte buffer.static PartitionUpdate
fromIterator(RowIterator iterator, ColumnFilter filter)
Turns the given iterator into an update.static PartitionUpdate
fromIterator(UnfilteredRowIterator iterator, ColumnFilter filter)
Turns the given iterator into an update.static PartitionUpdate
fullPartitionDelete(TableMetadata metadata, java.nio.ByteBuffer key, long timestamp, long nowInSec)
Creates a partition update that entirely deletes a given partition.static PartitionUpdate
fullPartitionDelete(TableMetadata metadata, DecoratedKey key, long timestamp, long nowInSec)
Creates an immutable partition update that entirely deletes a given partition.protected BTreePartitionData
holder()
long
maxTimestamp()
The maximum timestamp used in this update.static PartitionUpdate
merge(java.util.List<PartitionUpdate> updates)
Merges the provided updates, yielding a new update that incorporates all those updates.TableMetadata
metadata()
int
operationCount()
The number of "operations" contained in the update.static PartitionUpdate.SimpleBuilder
simpleBuilder(TableMetadata metadata, java.lang.Object... partitionKeyValues)
Creates a new simple partition update builder.static PartitionUpdate
singleRowUpdate(TableMetadata metadata, java.nio.ByteBuffer key, Row row)
Creates an immutable partition update that contains a single row update.static PartitionUpdate
singleRowUpdate(TableMetadata metadata, DecoratedKey key, Row row)
Creates an immutable partition update that contains a single row update.static PartitionUpdate
singleRowUpdate(TableMetadata metadata, DecoratedKey key, Row row, Row staticRow)
Creates an immutable partition update that contains a single row update.EncodingStats
stats()
static java.nio.ByteBuffer
toBytes(PartitionUpdate update, int version)
Serialize a partition update as a byte buffer.static PartitionUpdate
unsafeConstruct(TableMetadata metadata, DecoratedKey key, BTreePartitionData holder, MutableDeletionInfo deletionInfo, boolean canHaveShadowedData)
long
unsharedHeapSize()
The size of the data contained in this update.void
validate()
Validates the data contained in this update.void
validateIndexedColumns(ClientState state)
PartitionUpdate
withOnlyPresentColumns()
-
Methods inherited from class org.apache.cassandra.db.partitions.AbstractBTreePartition
build, build, build, equals, getRow, hasRows, isEmpty, iterator, lastRow, partitionKey, partitionLevelDeletion, rowCount, staticRow, toString, toString, unfilteredIterator, unfilteredIterator, unfilteredIterator, unfilteredIterator
-
-
-
-
Field Detail
-
logger
protected static final org.slf4j.Logger logger
-
serializer
public static final PartitionUpdate.PartitionUpdateSerializer serializer
-
-
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 queryingiterator
. 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 queryingiterator
. 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 classAbstractBTreePartition
-
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
ifbytes == 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
.
-
deletionInfo
public DeletionInfo deletionInfo()
- Overrides:
deletionInfo
in classAbstractBTreePartition
-
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 interfacePartition
- Specified by:
metadata
in classAbstractBTreePartition
-
columns
public RegularAndStaticColumns columns()
- Specified by:
columns
in interfacePartition
- Overrides:
columns
in classAbstractBTreePartition
-
holder
protected BTreePartitionData holder()
- Specified by:
holder
in classAbstractBTreePartition
-
stats
public EncodingStats stats()
- Specified by:
stats
in interfacePartition
- Overrides:
stats
in classAbstractBTreePartition
-
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 aCounterMark
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 asByteBuffer
or using a "native" value (int for Int32Type, string for UTF8Type, ...). It is also allowed to pass a singleDecoratedKey
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)
-
-