Class AggregationQueryPager

java.lang.Object
org.apache.cassandra.service.pager.AggregationQueryPager
All Implemented Interfaces:
QueryPager

public final class AggregationQueryPager extends Object implements QueryPager
QueryPager that takes care of fetching the pages for aggregation queries.

For aggregation/group by queries, the user page size is in number of groups. But each group could be composed of very many rows so to avoid running into OOMs, this pager will page internal queries into sub-pages. So each call to fetchPage(int,org.apache.cassandra.db.ConsistencyLevel,org.apache.cassandra.service.ClientState,org.apache.cassandra.transport.Dispatcher.RequestTime) may (transparently) yield multiple internal queries (sub-pages).

  • Constructor Details

  • Method Details

    • fetchPage

      public PartitionIterator fetchPage(int pageSize, ConsistencyLevel consistency, ClientState clientState, Dispatcher.RequestTime requestTime)
      Description copied from interface: QueryPager
      Fetches the next page.
      Specified by:
      fetchPage in interface QueryPager
      Parameters:
      pageSize - the maximum number of elements to return in the next page.
      consistency - the consistency level to achieve for the query.
      clientState - the ClientState for the query. In practice, this can be null unless consistency is a serial consistency.
      Returns:
      the page of result.
    • executionController

      public ReadExecutionController executionController()
      Description copied from interface: QueryPager
      Starts a new read operation.

      This must be called before QueryPager.fetchPageInternal(int,org.apache.cassandra.db.ReadExecutionController) and passed to it to protect the read. The returned object must be closed on all path and it is thus strongly advised to use it in a try-with-ressource construction.

      Specified by:
      executionController in interface QueryPager
      Returns:
      a newly started order group for this QueryPager.
    • fetchPageInternal

      public PartitionIterator fetchPageInternal(int pageSize, ReadExecutionController executionController)
      Description copied from interface: QueryPager
      Fetches the next page internally (in other, this does a local query).
      Specified by:
      fetchPageInternal in interface QueryPager
      Parameters:
      pageSize - the maximum number of elements to return in the next page.
      executionController - the ReadExecutionController protecting the read.
      Returns:
      the page of result.
    • isExhausted

      public boolean isExhausted()
      Description copied from interface: QueryPager
      Whether or not this pager is exhausted, i.e. whether or not a call to fetchPage may return more result.
      Specified by:
      isExhausted in interface QueryPager
      Returns:
      whether the pager is exhausted.
    • maxRemaining

      public int maxRemaining()
      Description copied from interface: QueryPager
      The maximum number of cells/CQL3 row that we may still have to return. In other words, that's the initial user limit minus what we've already returned (note that it's not how many we *will* return, just the upper limit on it).
      Specified by:
      maxRemaining in interface QueryPager
    • state

      public PagingState state()
      Description copied from interface: QueryPager
      Get the current state of the pager. The state can allow to restart the paging on another host from where we are at this point.
      Specified by:
      state in interface QueryPager
      Returns:
      the current paging state. Will return null if paging is at the beginning. If the pager is exhausted, the result is undefined.
    • withUpdatedLimit

      public QueryPager withUpdatedLimit(DataLimits newLimits)
      Description copied from interface: QueryPager
      Creates a new QueryPager that use the new limits.
      Specified by:
      withUpdatedLimit in interface QueryPager
      Parameters:
      newLimits - the new limits
      Returns:
      a new QueryPager that use the new limits
    • isTopK

      public boolean isTopK()
      Specified by:
      isTopK in interface QueryPager
      Returns:
      true given read query is a top-k request