Class BackpressureDrainManager

    • Field Detail

      • emitting

        protected boolean emitting
        Indicates if one is in emitting phase, guarded by this.
      • terminated

        protected volatile boolean terminated
        Indicates a terminal state.
      • exception

        protected Throwable exception
        Indicates an error state, barrier is provided via terminated.
    • Constructor Detail

      • BackpressureDrainManager

        public BackpressureDrainManager(BackpressureDrainManager.BackpressureQueueCallback actual)
        Constructs a backpressure drain manager with 0 requesedCount, no terminal event and not emitting.
        Parameters:
        actual - he queue callback to check for new element availability
    • Method Detail

      • isTerminated

        public final boolean isTerminated()
        Checks if a terminal state has been reached.
        Returns:
        true if a terminal state has been reached
      • terminate

        public final void terminate()
        Move into a terminal state. Call drain() anytime after.
      • terminate

        public final void terminate(Throwable error)
        Move into a terminal state with an exception. Call drain() anytime after.

        Serialized access is expected with respect to element emission.

        Parameters:
        error - the exception to deliver
      • terminateAndDrain

        public final void terminateAndDrain()
        Move into a terminal state and drain.
      • terminateAndDrain

        public final void terminateAndDrain(Throwable error)
        Move into a terminal state with an exception and drain.

        Serialized access is expected with respect to element emission.

        Parameters:
        error - the exception to deliver
      • request

        public final void request(long n)
        Description copied from interface: Producer
        Request a certain maximum number of items from this Producer. This is a way of requesting backpressure. To disable backpressure, pass Long.MAX_VALUE to this method.

        Requests are additive but if a sequence of requests totals more than Long.MAX_VALUE then Long.MAX_VALUE requests will be actioned and the extras may be ignored. Arriving at Long.MAX_VALUE by addition of requests cannot be assumed to disable backpressure. For example, the code below may result in Long.MAX_VALUE requests being actioned only.

         request(100);
         request(Long.MAX_VALUE-1);
         
        Specified by:
        request in interface  Producer
        Parameters:
        n - the maximum number of items you want this Producer to produce, or Long.MAX_VALUE if you want the Producer to produce items at its own pace
      • drain

        public final void drain()
        Try to drain the "queued" elements and terminal events by considering the available and requested event counts.