Class ReadCommand

    • Method Detail

      • serializeSelection

        protected abstract void serializeSelection​(DataOutputPlus out,
                                                   int version)
                                            throws java.io.IOException
        Throws:
        java.io.IOException
      • selectionSerializedSize

        protected abstract long selectionSerializedSize​(int version)
      • isLimitedToOnePartition

        public abstract boolean isLimitedToOnePartition()
      • isSinglePartitionRead

        public boolean isSinglePartitionRead()
        Whether this command is a single partition read
        Returns:
        true if the command is a single partition read, false otherwise
      • isRangeRequest

        public abstract boolean isRangeRequest()
      • withUpdatedLimit

        public abstract ReadCommand withUpdatedLimit​(DataLimits newLimits)
        Creates a new ReadCommand instance with new limits.
        Parameters:
        newLimits - the new limits
        Returns:
        a new ReadCommand with the updated limits
      • getTimeout

        public abstract long getTimeout​(java.util.concurrent.TimeUnit unit)
        The configured timeout for this command.
        Returns:
        the configured timeout for this command.
      • isDigestQuery

        public boolean isDigestQuery()
        Whether this query is a digest one or not.
        Returns:
        Whether this query is a digest query.
      • digestVersion

        public int digestVersion()
        If the query is a digest one, the requested digest version.
        Returns:
        the requested digest version if the query is a digest. Otherwise, this can return anything.
      • setDigestVersion

        public ReadCommand setDigestVersion​(int digestVersion)
        Sets the digest version, for when digest for that command is requested.

        Note that we allow setting this independently of setting the command as a digest query as this allows us to use the command as a carrier of the digest version even if we only call setIsDigestQuery on some copy of it.

        Parameters:
        digestVersion - the version for the digest is this command is used for digest query..
        Returns:
        this read command.
      • acceptsTransient

        public boolean acceptsTransient()
        Returns:
        Whether this query expects only a transient data response, or a full response
      • trackWarnings

        public void trackWarnings()
      • isTrackingWarnings

        public boolean isTrackingWarnings()
      • indexQueryPlan

        @Nullable
        public Index.QueryPlan indexQueryPlan()
        Index query plan chosen for this query. Can be null.
        Returns:
        index query plan chosen for this query
      • isTopK

        public boolean isTopK()
        Description copied from interface: ReadQuery
        The query is a top-k query if the query has an Index.QueryPlan that supports top-k ordering.
        Returns:
        true if this is a top-k query
      • clusteringIndexFilter

        public abstract ClusteringIndexFilter clusteringIndexFilter​(DecoratedKey key)
        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.

        Parameters:
        key - a partition key queried by this command.
        Returns:
        the ClusteringIndexFilter to use for the partition of key key.
      • copy

        public abstract ReadCommand copy()
        Returns a copy of this command.
        Returns:
        a copy of this command.
      • copyAsTransientQuery

        public ReadCommand copyAsTransientQuery​(Replica replica)
        Returns a copy of this command with acceptsTransient set to true.
      • copyAsTransientQuery

        public ReadCommand copyAsTransientQuery​(java.lang.Iterable<Replica> replicas)
        Returns a copy of this command with acceptsTransient set to true.
      • copyAsTransientQuery

        protected abstract ReadCommand copyAsTransientQuery()
      • copyAsDigestQuery

        public ReadCommand copyAsDigestQuery​(Replica replica)
        Returns a copy of this command with isDigestQuery set to true.
      • copyAsDigestQuery

        public ReadCommand copyAsDigestQuery​(java.lang.Iterable<Replica> replicas)
        Returns a copy of this command with isDigestQuery set to true.
      • copyAsDigestQuery

        protected abstract ReadCommand copyAsDigestQuery()
      • isReversed

        public abstract boolean isReversed()
        Whether the underlying ClusteringIndexFilter is reversed or not.
        Returns:
        whether the underlying ClusteringIndexFilter is reversed or not.
      • createEmptyResponse

        public ReadResponse createEmptyResponse()
      • maybeValidateIndex

        public void maybeValidateIndex()
        If the index manager for the CFS determines that there's an applicable 2i that can be used to execute this command, call its (optional) validation method to check that nothing in this command's parameters violates the implementation specific validation rules.
      • executeLocally

        public UnfilteredPartitionIterator executeLocally​(ReadExecutionController executionController)
        Executes this command on the local host.
        Parameters:
        executionController - the execution controller spanning this command
        Returns:
        an iterator over the result of executing this command locally.
      • recordLatency

        protected abstract void recordLatency​(TableMetrics metric,
                                              long latencyNanos)
      • intersects

        protected abstract boolean intersects​(SSTableReader sstable)
      • hasRequiredStatics

        protected boolean hasRequiredStatics​(SSTableReader sstable)
      • hasPartitionLevelDeletions

        protected boolean hasPartitionLevelDeletions​(SSTableReader sstable)
      • verb

        public abstract Verb verb()
      • appendCQLWhereClause

        protected abstract void appendCQLWhereClause​(java.lang.StringBuilder sb)
      • loggableTokens

        public abstract java.lang.String loggableTokens()
        Return the queried token(s) for logging
      • name

        public java.lang.String name()
        Specified by:
        name in interface Monitorable
      • metadata

        public TableMetadata metadata()
        Description copied from interface: ReadQuery
        The metadata for the table this is a query on.
        Specified by:
        metadata in interface ReadQuery
        Returns:
        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 interface ReadQuery
        Parameters:
        controller - the ReadExecutionController protecting the read.
        Returns:
        the result of the query.
      • limits

        public DataLimits limits()
        Description copied from interface: ReadQuery
        The limits for the query.
        Specified by:
        limits in interface ReadQuery
        Returns:
        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).

        Specified by:
        nowInSec in interface ReadQuery
        Returns:
        the time (in seconds) to use as "now".
      • 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.

        Specified by:
        rowFilter in interface ReadQuery
        Returns:
        the filter holding the expression that rows must satisfy.
      • 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 interface ReadQuery
        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.