public class PartitionUpdate extends AbstractBTreePartition
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
).
Modifier and Type | Class and 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.
|
AbstractBTreePartition.Holder
Modifier and Type | Field and Description |
---|---|
protected static org.slf4j.Logger |
logger |
static PartitionUpdate.PartitionUpdateSerializer |
serializer |
EMPTY, HOLDER_UNSHARED_HEAP_SIZE, partitionKey
Modifier and Type | Method and Description |
---|---|
protected boolean |
canHaveShadowedData() |
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. |
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,
int nowInSec)
Creates a partition update that entirely deletes a given partition.
|
static PartitionUpdate |
fullPartitionDelete(TableMetadata metadata,
DecoratedKey key,
long timestamp,
int nowInSec)
Creates an immutable partition update that entirely deletes a given partition.
|
protected AbstractBTreePartition.Holder |
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,
AbstractBTreePartition.Holder holder,
MutableDeletionInfo deletionInfo,
boolean canHaveShadowedData) |
void |
validate()
Validates the data contained in this update.
|
void |
validateIndexedColumns() |
build, build, build, getRow, hasRows, isEmpty, iterator, lastRow, partitionKey, partitionLevelDeletion, rowCount, staticRow, toString, unfilteredIterator, unfilteredIterator, unfilteredIterator, unfilteredIterator, unsafeConstructHolder, unsafeGetEmptyHolder
protected static final org.slf4j.Logger logger
public static final PartitionUpdate.PartitionUpdateSerializer serializer
public static PartitionUpdate emptyUpdate(TableMetadata metadata, DecoratedKey key)
metadata
- the metadata for the created update.key
- the partition key for the created update.public static PartitionUpdate fullPartitionDelete(TableMetadata metadata, DecoratedKey key, long timestamp, int nowInSec)
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.public static PartitionUpdate singleRowUpdate(TableMetadata metadata, DecoratedKey key, Row row, Row staticRow)
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).row
.public static PartitionUpdate singleRowUpdate(TableMetadata metadata, DecoratedKey key, Row row)
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).row
.public static PartitionUpdate singleRowUpdate(TableMetadata metadata, java.nio.ByteBuffer key, Row row)
metadata
- the metadata for the created update.key
- the partition key for the partition to update.row
- the row for the update.row
.public static PartitionUpdate fromIterator(UnfilteredRowIterator iterator, ColumnFilter filter)
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.public static PartitionUpdate fromIterator(RowIterator iterator, ColumnFilter filter)
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.protected boolean canHaveShadowedData()
canHaveShadowedData
in class AbstractBTreePartition
public static PartitionUpdate fromBytes(java.nio.ByteBuffer bytes, int version)
bytes
- the byte buffer that contains the serialized update.version
- the version with which the update is serialized.null
if bytes == null
.public static java.nio.ByteBuffer toBytes(PartitionUpdate update, int version)
update
- the partition update to serialize.version
- the version to serialize the update into.public static PartitionUpdate fullPartitionDelete(TableMetadata metadata, java.nio.ByteBuffer key, long timestamp, int nowInSec)
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.public static PartitionUpdate merge(java.util.List<PartitionUpdate> updates)
updates
- the collection of updates to merge. This shouldn't be empty.updates
.public DeletionInfo deletionInfo()
deletionInfo
in class AbstractBTreePartition
public int operationCount()
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.
public int dataSize()
public TableMetadata metadata()
metadata
in interface Partition
metadata
in class AbstractBTreePartition
public RegularAndStaticColumns columns()
columns
in interface Partition
columns
in class AbstractBTreePartition
protected AbstractBTreePartition.Holder holder()
holder
in class AbstractBTreePartition
public EncodingStats stats()
stats
in interface Partition
stats
in class AbstractBTreePartition
public void validate()
MarshalException
- if some of the data contained in this update is corrupted.public long maxTimestamp()
public java.util.List<PartitionUpdate.CounterMark> collectCounterMarks()
CounterMark
for
every counter contained in the update.public static PartitionUpdate.SimpleBuilder simpleBuilder(TableMetadata metadata, java.lang.Object... partitionKeyValues)
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.public void validateIndexedColumns()
public static PartitionUpdate unsafeConstruct(TableMetadata metadata, DecoratedKey key, AbstractBTreePartition.Holder holder, MutableDeletionInfo deletionInfo, boolean canHaveShadowedData)
Copyright © 2009- The Apache Software Foundation