Class PartitionRangeReadCommand
- All Implemented Interfaces:
Monitorable,PartitionRangeReadQuery,ReadQuery
- Direct Known Subclasses:
PartitionRangeReadCommand.VirtualTablePartitionRangeReadCommand
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classNested classes/interfaces inherited from class org.apache.cassandra.db.ReadCommand
ReadCommand.Kind, ReadCommand.SelectionDeserializer, ReadCommand.Serializer -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final Slicesprotected static final ReadCommand.SelectionDeserializerFields inherited from class org.apache.cassandra.db.ReadCommand
dataRange, logger, serializer -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedPartitionRangeReadCommand(boolean isDigest, int digestVersion, boolean acceptsTransient, TableMetadata metadata, long nowInSec, ColumnFilter columnFilter, RowFilter rowFilter, DataLimits limits, DataRange dataRange, Index.QueryPlan indexQueryPlan, boolean trackWarnings) -
Method Summary
Modifier and TypeMethodDescriptionstatic PartitionRangeReadCommandallDataRead(TableMetadata metadata, long nowInSec) Creates a new read command that query all the data in the table.protected voidThe clustering index filter this command to use for the provided key.A filter on which (non-PK) columns must be returned by the query.copy()Returns a copy of this command.protected PartitionRangeReadCommandprotected PartitionRangeReadCommandstatic PartitionRangeReadCommandcreate(TableMetadata metadata, long nowInSec, ColumnFilter columnFilter, RowFilter rowFilter, DataLimits limits, DataRange dataRange) execute(ConsistencyLevel consistency, ClientState state, Dispatcher.RequestTime requestTime) Executes the query at the provided consistency level.executeInternal(ReadExecutionController controller) Execute the query for internal queries (that is, it basically executes the query locally).forSubRange(AbstractBounds<PartitionPosition> range, boolean isRangeContinuation) Returns an equivalent command but that only queries data within the provided range.longgetTimeout(TimeUnit unit) The configured timeout for this command.protected booleanintersects(SSTableReader sstable) booleanbooleanbooleanbooleanWhether the underlyingClusteringIndexFilteris reversed or not.limits()The limits for the query.Return the queried token(s) for loggingmetadata()The metadata for the table this is a query on.longnowInSec()The time in seconds to use as "now" for this query.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.queryStorage(ColumnFamilyStore cfs, ReadExecutionController controller) protected voidrecordLatency(TableMetrics metric, long latencyNanos) Filters/Resrictions on CQL rows.protected longselectionSerializedSize(int version) protected voidserializeSelection(DataOutputPlus out, int version) Recreate the CQL string corresponding to this query.toString()verb()withUpdatedLimit(DataLimits newLimits) Creates a newReadCommandinstance with new limits.withUpdatedLimitsAndDataRange(DataLimits newLimits, DataRange newDataRange) Creates a newPartitionRangeReadQuerywith the updated limits and data range.Methods inherited from class org.apache.cassandra.db.ReadCommand
acceptsTransient, copyAsDigestQuery, copyAsDigestQuery, copyAsTransientQuery, copyAsTransientQuery, createEmptyResponse, createMessage, createResponse, dataRange, digestVersion, executeLocally, executionController, executionController, getCommand, hasPartitionLevelDeletions, hasRequiredStatics, indexQueryPlan, indexSearcher, isDigestQuery, isSinglePartitionRead, isTopK, isTrackingWarnings, maybeValidateIndex, name, setDigestVersion, trackWarnings, withoutPurgeableTombstonesMethods inherited from class org.apache.cassandra.db.monitoring.MonitorableImpl
abort, complete, creationTimeNanos, isAborted, isCompleted, isCrossNode, isInProgress, isSlow, setMonitoringTime, slowTimeoutNanos, timeoutNanosMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface org.apache.cassandra.db.PartitionRangeReadQuery
getPager, selectsClustering, selectsFullPartition, selectsKeyMethods inherited from interface org.apache.cassandra.db.ReadQuery
columnFilter, dataRange, executeInternal, executeLocally, executionController, isEmpty, isTopK, limits, maybeValidateIndex, metadata, nowInSec, rowFilter, trackWarnings
-
Field Details
-
selectionDeserializer
-
requestedSlices
-
-
Constructor Details
-
PartitionRangeReadCommand
protected PartitionRangeReadCommand(boolean isDigest, int digestVersion, boolean acceptsTransient, TableMetadata metadata, long nowInSec, ColumnFilter columnFilter, RowFilter rowFilter, DataLimits limits, DataRange dataRange, Index.QueryPlan indexQueryPlan, boolean trackWarnings)
-
-
Method Details
-
create
public static PartitionRangeReadCommand create(TableMetadata metadata, long nowInSec, ColumnFilter columnFilter, RowFilter rowFilter, DataLimits limits, DataRange dataRange) -
allDataRead
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.
-
clusteringIndexFilter
Description copied from class:ReadCommandThe 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:
clusteringIndexFilterin classReadCommand- Parameters:
key- a partition key queried by this command.- Returns:
- the
ClusteringIndexFilterto 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- whetherrangeis a direct continuation of whatever previous range we have queried. This matters for theDataLimitsthat 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 whichisRangeContinuationis 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 theDataLimitswill have not state and the value of this parameter doesn't matter.
-
copy
Description copied from class:ReadCommandReturns a copy of this command.- Specified by:
copyin classReadCommand- Returns:
- a copy of this command.
-
copyAsDigestQuery
- Specified by:
copyAsDigestQueryin classReadCommand
-
copyAsTransientQuery
- Specified by:
copyAsTransientQueryin classReadCommand
-
withUpdatedLimit
Description copied from class:ReadCommandCreates a newReadCommandinstance with new limits.- Specified by:
withUpdatedLimitin interfacePartitionRangeReadQuery- Specified by:
withUpdatedLimitin classReadCommand- Parameters:
newLimits- the new limits- Returns:
- a new
ReadCommandwith the updated limits
-
withUpdatedLimitsAndDataRange
public PartitionRangeReadCommand withUpdatedLimitsAndDataRange(DataLimits newLimits, DataRange newDataRange) Description copied from interface:PartitionRangeReadQueryCreates a newPartitionRangeReadQuerywith the updated limits and data range.- Specified by:
withUpdatedLimitsAndDataRangein interfacePartitionRangeReadQuery- Parameters:
newLimits- the new limits- Returns:
- the new
PartitionRangeReadQuery
-
getTimeout
Description copied from class:ReadCommandThe configured timeout for this command.- Specified by:
getTimeoutin classReadCommand- Returns:
- the configured timeout for this command.
-
isReversed
public boolean isReversed()Description copied from class:ReadCommandWhether the underlyingClusteringIndexFilteris reversed or not.- Specified by:
isReversedin classReadCommand- Returns:
- whether the underlying
ClusteringIndexFilteris reversed or not.
-
execute
public PartitionIterator execute(ConsistencyLevel consistency, ClientState state, Dispatcher.RequestTime requestTime) throws RequestExecutionException Description copied from interface:ReadQueryExecutes the query at the provided consistency level.- Specified by:
executein interfaceReadQuery- Parameters:
consistency- the consistency level to achieve for the query.state- client staterequestTime- request enqueue / and start times- Returns:
- the result of the query.
- Throws:
RequestExecutionException
-
recordLatency
- Specified by:
recordLatencyin classReadCommand
-
queryStorage
public UnfilteredPartitionIterator queryStorage(ColumnFamilyStore cfs, ReadExecutionController controller) - Specified by:
queryStoragein classReadCommand
-
intersects
- Specified by:
intersectsin classReadCommand
-
verb
- Specified by:
verbin classReadCommand
-
appendCQLWhereClause
- Specified by:
appendCQLWhereClausein classReadCommand
-
loggableTokens
Description copied from class:ReadCommandReturn the queried token(s) for logging- Specified by:
loggableTokensin classReadCommand
-
postReconciliationProcessing
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
-
serializeSelection
- Specified by:
serializeSelectionin classReadCommand- Throws:
IOException
-
selectionSerializedSize
protected long selectionSerializedSize(int version) - Specified by:
selectionSerializedSizein classReadCommand
-
isLimitedToOnePartition
public boolean isLimitedToOnePartition()- Specified by:
isLimitedToOnePartitionin classReadCommand
-
isRangeRequest
public boolean isRangeRequest()- Specified by:
isRangeRequestin classReadCommand
-
metadata
Description copied from interface:ReadQueryThe metadata for the table this is a query on. -
executeInternal
Description copied from interface:ReadQueryExecute the query for internal queries (that is, it basically executes the query locally).- Specified by:
executeInternalin interfaceReadQuery- Parameters:
controller- theReadExecutionControllerprotecting the read.- Returns:
- the result of the query.
-
limits
Description copied from interface:ReadQueryThe limits for the query. -
nowInSec
public long nowInSec()Description copied from interface:ReadQueryThe 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
Description copied from interface:ReadQueryFilters/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
Description copied from interface:ReadQueryA filter on which (non-PK) columns must be returned by the query.- Specified by:
columnFilterin interfaceReadQuery- Returns:
- which columns must be fetched by this query.
-
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.
-