Class PartitionRangeReadCommand
- java.lang.Object
-
- org.apache.cassandra.db.monitoring.MonitorableImpl
-
- org.apache.cassandra.db.ReadCommand
-
- org.apache.cassandra.db.PartitionRangeReadCommand
-
- All Implemented Interfaces:
Monitorable
,PartitionRangeReadQuery
,ReadQuery
- Direct Known Subclasses:
PartitionRangeReadCommand.VirtualTablePartitionRangeReadCommand
public class PartitionRangeReadCommand extends ReadCommand implements PartitionRangeReadQuery
A read command that selects a (part of a) range of partitions.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
PartitionRangeReadCommand.VirtualTablePartitionRangeReadCommand
-
Nested classes/interfaces inherited from class org.apache.cassandra.db.ReadCommand
ReadCommand.Kind, ReadCommand.SelectionDeserializer, ReadCommand.Serializer
-
-
Field Summary
Fields Modifier and Type Field Description protected DataRange
dataRange
protected Slices
requestedSlices
protected static ReadCommand.SelectionDeserializer
selectionDeserializer
-
Fields inherited from class org.apache.cassandra.db.ReadCommand
logger, serializer
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static PartitionRangeReadCommand
allDataRead(TableMetadata metadata, long nowInSec)
Creates a new read command that query all the data in the table.protected void
appendCQLWhereClause(java.lang.StringBuilder sb)
ClusteringIndexFilter
clusteringIndexFilter(DecoratedKey key)
The clustering index filter this command to use for the provided key.ColumnFilter
columnFilter()
A filter on which (non-PK) columns must be returned by the query.PartitionRangeReadCommand
copy()
Returns a copy of this command.protected PartitionRangeReadCommand
copyAsDigestQuery()
protected PartitionRangeReadCommand
copyAsTransientQuery()
static PartitionRangeReadCommand
create(TableMetadata metadata, long nowInSec, ColumnFilter columnFilter, RowFilter rowFilter, DataLimits limits, DataRange dataRange)
DataRange
dataRange()
PartitionIterator
execute(ConsistencyLevel consistency, ClientState state, Dispatcher.RequestTime requestTime)
Executes the query at the provided consistency level.PartitionIterator
executeInternal(ReadExecutionController controller)
Execute the query for internal queries (that is, it basically executes the query locally).PartitionRangeReadCommand
forSubRange(AbstractBounds<PartitionPosition> range, boolean isRangeContinuation)
Returns an equivalent command but that only queries data within the provided range.long
getTimeout(java.util.concurrent.TimeUnit unit)
The configured timeout for this command.protected boolean
intersects(SSTableReader sstable)
boolean
isLimitedToOnePartition()
boolean
isNamesQuery()
boolean
isRangeRequest()
boolean
isReversed()
Whether the underlyingClusteringIndexFilter
is reversed or not.DataLimits
limits()
The limits for the query.java.lang.String
loggableTokens()
Return the queried token(s) for loggingTableMetadata
metadata()
The metadata for the table this is a query on.long
nowInSec()
The time in seconds to use as "now" for this query.PartitionIterator
postReconciliationProcessing(PartitionIterator result)
Allow to post-process the result of the query after it has been reconciled on the coordinator but before it is passed to the CQL layer to return the ResultSet.UnfilteredPartitionIterator
queryStorage(ColumnFamilyStore cfs, ReadExecutionController controller)
protected void
recordLatency(TableMetrics metric, long latencyNanos)
RowFilter
rowFilter()
Filters/Resrictions on CQL rows.protected long
selectionSerializedSize(int version)
protected void
serializeSelection(DataOutputPlus out, int version)
java.lang.String
toCQLString()
Recreate the CQL string corresponding to this query.java.lang.String
toString()
Verb
verb()
PartitionRangeReadCommand
withUpdatedLimit(DataLimits newLimits)
Creates a newReadCommand
instance with new limits.PartitionRangeReadCommand
withUpdatedLimitsAndDataRange(DataLimits newLimits, DataRange newDataRange)
Creates a newPartitionRangeReadQuery
with the updated limits and data range.-
Methods inherited from class org.apache.cassandra.db.ReadCommand
acceptsTransient, copyAsDigestQuery, copyAsDigestQuery, copyAsTransientQuery, copyAsTransientQuery, createEmptyResponse, createMessage, createResponse, digestVersion, executeLocally, executionController, executionController, getCommand, hasPartitionLevelDeletions, hasRequiredStatics, indexQueryPlan, indexSearcher, isDigestQuery, isTopK, isTrackingWarnings, maybeValidateIndex, name, setDigestVersion, trackWarnings, withoutPurgeableTombstones
-
Methods inherited from class org.apache.cassandra.db.monitoring.MonitorableImpl
abort, complete, creationTimeNanos, isAborted, isCompleted, isCrossNode, isInProgress, isSlow, setMonitoringTime, slowTimeoutNanos, timeoutNanos
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.apache.cassandra.db.PartitionRangeReadQuery
getPager, selectsClustering, selectsFullPartition, selectsKey
-
Methods inherited from interface org.apache.cassandra.db.ReadQuery
columnFilter, executeInternal, executeLocally, executionController, isEmpty, isTopK, limits, maybeValidateIndex, metadata, nowInSec, rowFilter, trackWarnings
-
-
-
-
Field Detail
-
selectionDeserializer
protected static final ReadCommand.SelectionDeserializer selectionDeserializer
-
dataRange
protected final DataRange dataRange
-
requestedSlices
protected final Slices requestedSlices
-
-
Method Detail
-
create
public static PartitionRangeReadCommand create(TableMetadata metadata, long nowInSec, ColumnFilter columnFilter, RowFilter rowFilter, DataLimits limits, DataRange dataRange)
-
allDataRead
public static PartitionRangeReadCommand allDataRead(TableMetadata metadata, long nowInSec)
Creates a new read command that query all the data in the table.- Parameters:
metadata
- the table to query.nowInSec
- the time in seconds to use are "now" for this query.- Returns:
- a newly created read command that queries everything in the table.
-
dataRange
public DataRange dataRange()
- Specified by:
dataRange
in interfacePartitionRangeReadQuery
-
clusteringIndexFilter
public ClusteringIndexFilter clusteringIndexFilter(DecoratedKey key)
Description copied from class:ReadCommand
The clustering index filter this command to use for the provided key.Note that that method should only be called on a key actually queried by this command and in practice, this will almost always return the same filter, but for the sake of paging, the filter on the first key of a range command might be slightly different.
- Specified by:
clusteringIndexFilter
in classReadCommand
- Parameters:
key
- a partition key queried by this command.- Returns:
- the
ClusteringIndexFilter
to use for the partition of keykey
.
-
isNamesQuery
public boolean isNamesQuery()
-
forSubRange
public PartitionRangeReadCommand forSubRange(AbstractBounds<PartitionPosition> range, boolean isRangeContinuation)
Returns an equivalent command but that only queries data within the provided range.- Parameters:
range
- the sub-range to restrict the command to. This method assumes that this is a proper sub-range of the command this is applied to.isRangeContinuation
- whetherrange
is a direct continuation of whatever previous range we have queried. This matters for theDataLimits
that may contain states when we do paging and in the context of parallel queries: that state only make sense if the range queried is indeed the follow-up of whatever range we've previously query (that yield said state). In practice this means that ranges for whichisRangeContinuation
is false may have to be slightly pessimistic when counting data and may include a little bit than necessary, and this should be dealt with post-query (in the case ofStorageProxy.getRangeSlice()
, which uses this method for replica queries, this is dealt with by re-counting results on the coordinator). Note that if this is the first range we queried, then theDataLimits
will have not state and the value of this parameter doesn't matter.
-
copy
public PartitionRangeReadCommand copy()
Description copied from class:ReadCommand
Returns a copy of this command.- Specified by:
copy
in classReadCommand
- Returns:
- a copy of this command.
-
copyAsDigestQuery
protected PartitionRangeReadCommand copyAsDigestQuery()
- Specified by:
copyAsDigestQuery
in classReadCommand
-
copyAsTransientQuery
protected PartitionRangeReadCommand copyAsTransientQuery()
- Specified by:
copyAsTransientQuery
in classReadCommand
-
withUpdatedLimit
public PartitionRangeReadCommand withUpdatedLimit(DataLimits newLimits)
Description copied from class:ReadCommand
Creates a newReadCommand
instance with new limits.- Specified by:
withUpdatedLimit
in interfacePartitionRangeReadQuery
- Specified by:
withUpdatedLimit
in classReadCommand
- Parameters:
newLimits
- the new limits- Returns:
- a new
ReadCommand
with the updated limits
-
withUpdatedLimitsAndDataRange
public PartitionRangeReadCommand withUpdatedLimitsAndDataRange(DataLimits newLimits, DataRange newDataRange)
Description copied from interface:PartitionRangeReadQuery
Creates a newPartitionRangeReadQuery
with the updated limits and data range.- Specified by:
withUpdatedLimitsAndDataRange
in interfacePartitionRangeReadQuery
- Parameters:
newLimits
- the new limits- Returns:
- the new
PartitionRangeReadQuery
-
getTimeout
public long getTimeout(java.util.concurrent.TimeUnit unit)
Description copied from class:ReadCommand
The configured timeout for this command.- Specified by:
getTimeout
in classReadCommand
- Returns:
- the configured timeout for this command.
-
isReversed
public boolean isReversed()
Description copied from class:ReadCommand
Whether the underlyingClusteringIndexFilter
is reversed or not.- Specified by:
isReversed
in classReadCommand
- Returns:
- whether the underlying
ClusteringIndexFilter
is reversed or not.
-
execute
public PartitionIterator execute(ConsistencyLevel consistency, ClientState state, Dispatcher.RequestTime requestTime) throws RequestExecutionException
Description copied from interface:ReadQuery
Executes the query at the provided consistency level.- Specified by:
execute
in interfaceReadQuery
- Parameters:
consistency
- the consistency level to achieve for the query.state
- client state- Returns:
- the result of the query.
- Throws:
RequestExecutionException
-
recordLatency
protected void recordLatency(TableMetrics metric, long latencyNanos)
- Specified by:
recordLatency
in classReadCommand
-
queryStorage
public UnfilteredPartitionIterator queryStorage(ColumnFamilyStore cfs, ReadExecutionController controller)
- Specified by:
queryStorage
in classReadCommand
-
intersects
protected boolean intersects(SSTableReader sstable)
- Specified by:
intersects
in classReadCommand
-
verb
public Verb verb()
- Specified by:
verb
in classReadCommand
-
appendCQLWhereClause
protected void appendCQLWhereClause(java.lang.StringBuilder sb)
- Specified by:
appendCQLWhereClause
in classReadCommand
-
loggableTokens
public java.lang.String loggableTokens()
Description copied from class:ReadCommand
Return the queried token(s) for logging- Specified by:
loggableTokens
in classReadCommand
-
postReconciliationProcessing
public PartitionIterator postReconciliationProcessing(PartitionIterator result)
Allow to post-process the result of the query after it has been reconciled on the coordinator but before it is passed to the CQL layer to return the ResultSet. See CASSANDRA-8717 for why this exists.
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
serializeSelection
protected void serializeSelection(DataOutputPlus out, int version) throws java.io.IOException
- Specified by:
serializeSelection
in classReadCommand
- Throws:
java.io.IOException
-
selectionSerializedSize
protected long selectionSerializedSize(int version)
- Specified by:
selectionSerializedSize
in classReadCommand
-
isLimitedToOnePartition
public boolean isLimitedToOnePartition()
- Specified by:
isLimitedToOnePartition
in classReadCommand
-
isRangeRequest
public boolean isRangeRequest()
- Specified by:
isRangeRequest
in classReadCommand
-
metadata
public TableMetadata metadata()
Description copied from interface:ReadQuery
The metadata for the table this is a query on.
-
executeInternal
public PartitionIterator executeInternal(ReadExecutionController controller)
Description copied from interface:ReadQuery
Execute the query for internal queries (that is, it basically executes the query locally).- Specified by:
executeInternal
in interfaceReadQuery
- Parameters:
controller
- theReadExecutionController
protecting the read.- Returns:
- the result of the query.
-
limits
public DataLimits limits()
Description copied from interface:ReadQuery
The limits for the query.
-
nowInSec
public long nowInSec()
Description copied from interface:ReadQuery
The time in seconds to use as "now" for this query.We use the same time as "now" for the whole query to avoid considering different values as expired during the query, which would be buggy (would throw of counting amongst other things).
-
rowFilter
public RowFilter rowFilter()
Description copied from interface:ReadQuery
Filters/Resrictions on CQL rows.This contains the restrictions that are not directly handled by the
ClusteringIndexFilter
. More specifically, this includes any non-PK column restrictions and can include some PK columns restrictions when those can't be satisfied entirely by the clustering index filter (because not all clustering columns have been restricted for instance). If there is 2ndary indexes on the table, one of this restriction might be handled by a 2ndary index.
-
columnFilter
public ColumnFilter columnFilter()
Description copied from interface:ReadQuery
A filter on which (non-PK) columns must be returned by the query.- Specified by:
columnFilter
in interfaceReadQuery
- Returns:
- which columns must be fetched by this query.
-
toCQLString
public java.lang.String toCQLString()
Recreate the CQL string corresponding to this query.Note that in general the returned string will not be exactly the original user string, first because there isn't always a single syntax for a given query, but also because we don't have all the information needed (we know the non-PK columns queried but not the PK ones as internally we query them all). So this shouldn't be relied too strongly, but this should be good enough for debugging purpose which is what this is for.
-
-