Class CpuAllowedLimit

  • All Implemented Interfaces:
    org.apache.lucene.index.QueryTimeout, QueryLimit

    @NotThreadSafe
    public class CpuAllowedLimit
    extends Object
    implements QueryLimit
    Enforces a CPU-time based timeout on a given SolrQueryRequest, as specified by the cpuAllowed query parameter.

    Since this class uses ThreadCpuTimer it is irrevocably lock-hostile and can never be exposed to multiple threads, even if guarded by synchronization. Normally this is attached to objects ultimately held by a ThreadLocal in SolrRequestInfo to provide safe usage on the assumption that such objects are not shared to other threads.

    See Also:
    ThreadCpuTimer
    • Field Detail

      • TIMING_CONTEXT

        public static final String TIMING_CONTEXT
    • Constructor Detail

      • CpuAllowedLimit

        public CpuAllowedLimit​(SolrQueryRequest req)
        Create an object to represent a CPU time limit for the current request. NOTE: this implementation will attempt to obtain an existing thread CPU time monitor, created when QueryLimits(SolrQueryRequest, SolrQueryResponse) is called.
        Parameters:
        req - solr request with a cpuAllowed parameter
    • Method Detail

      • shouldExit

        public boolean shouldExit()
        Return true if usage has exceeded the limit.
        Specified by:
        shouldExit in interface org.apache.lucene.index.QueryTimeout
      • currentValue

        public Object currentValue()
        Description copied from interface: QueryLimit
        A value representing the portion of the specified limit that has been consumed. Reading this value should never affect the outcome (other than the time it takes to do it).
        Specified by:
        currentValue in interface QueryLimit
        Returns:
        an expression of the amount of the limit used so far, numeric if possible, if non-numeric it should have toString() suitable for logging or similar expression to the user.