Class ProtectedPromise

java.lang.Object
io.netty.util.concurrent.AbstractFuture<Void>
io.netty.util.concurrent.DefaultPromise<Void>
io.netty.channel.DefaultChannelPromise
io.grpc.alts.internal.ProtectedPromise
All Implemented Interfaces:
io.netty.channel.ChannelFuture, io.netty.channel.ChannelPromise, io.netty.util.concurrent.Future<Void>, io.netty.util.concurrent.Promise<Void>, Future<Void>

@Internal public final class ProtectedPromise extends io.netty.channel.DefaultChannelPromise
Promise used when flushing the pendingUnprotectedWrites queue. It manages the many-to many relationship between pending unprotected messages and the individual writes. Each protected frame will be written using the same instance of this promise and it will accumulate the results. Once all frames have been successfully written (or any failed), all of the promises for the pending unprotected writes are notified.

NOTE: this code is based on code in Netty's Http2CodecUtil.

  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private boolean
     
    private int
     
    private int
     
    private int
     
    private final List<io.netty.channel.ChannelPromise>
     

    Fields inherited from class io.netty.util.concurrent.DefaultPromise

    PROPERTY_MAX_LISTENER_STACK_DEPTH
  • Constructor Summary

    Constructors
    Constructor
    Description
    ProtectedPromise(io.netty.channel.Channel channel, io.netty.util.concurrent.EventExecutor executor, int numUnprotectedPromises)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    addUnprotectedPromise(io.netty.channel.ChannelPromise promise)
    Adds a promise for a pending unprotected write.
    private boolean
     
    io.netty.channel.ChannelPromise
    Signify that no more newPromise() allocations will be made.
    io.netty.channel.ChannelPromise
    Allocate a new promise for the write of a protected frame.
    io.netty.channel.ChannelPromise
    Fail this object if it has not already been failed.
    io.netty.channel.ChannelPromise
    setSuccess(Void unused)
     
    boolean
     
    private void
     
    boolean
    trySuccess(Void unused)
     
    private void
     

    Methods inherited from class io.netty.channel.DefaultChannelPromise

    addListener, addListeners, await, awaitUninterruptibly, channel, checkDeadLock, executor, flushCheckpoint, flushCheckpoint, isVoid, promise, removeListener, removeListeners, setSuccess, sync, syncUninterruptibly, trySuccess, unvoid

    Methods inherited from class io.netty.util.concurrent.DefaultPromise

    await, await, awaitUninterruptibly, awaitUninterruptibly, cancel, cause, get, get, getNow, isCancellable, isCancelled, isDone, isSuccess, notifyListener, setUncancellable, toString, toStringBuilder

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

    Methods inherited from interface io.netty.util.concurrent.Future

    await, await, awaitUninterruptibly, awaitUninterruptibly, cancel, cause, getNow, isCancellable, isSuccess

    Methods inherited from interface java.util.concurrent.Future

    get, get, isCancelled, isDone

    Methods inherited from interface io.netty.util.concurrent.Promise

    setUncancellable
  • Field Details

    • unprotectedPromises

      private final List<io.netty.channel.ChannelPromise> unprotectedPromises
    • expectedCount

      private int expectedCount
    • successfulCount

      private int successfulCount
    • failureCount

      private int failureCount
    • doneAllocating

      private boolean doneAllocating
  • Constructor Details

    • ProtectedPromise

      public ProtectedPromise(io.netty.channel.Channel channel, io.netty.util.concurrent.EventExecutor executor, int numUnprotectedPromises)
  • Method Details

    • addUnprotectedPromise

      public void addUnprotectedPromise(io.netty.channel.ChannelPromise promise)
      Adds a promise for a pending unprotected write. This will be notified after all of the writes complete.
    • newPromise

      public io.netty.channel.ChannelPromise newPromise()
      Allocate a new promise for the write of a protected frame. This will be used to aggregate the overall success of the unprotected promises.
      Returns:
      this promise.
    • doneAllocatingPromises

      public io.netty.channel.ChannelPromise doneAllocatingPromises()
      Signify that no more newPromise() allocations will be made. The aggregation can not be successful until this method is called.
      Returns:
      this promise.
    • tryFailure

      public boolean tryFailure(Throwable cause)
      Specified by:
      tryFailure in interface io.netty.util.concurrent.Promise<Void>
      Overrides:
      tryFailure in class io.netty.util.concurrent.DefaultPromise<Void>
    • setFailure

      public io.netty.channel.ChannelPromise setFailure(Throwable cause)
      Fail this object if it has not already been failed.

      This method will NOT throw an IllegalStateException if called multiple times because that may be expected.

      Specified by:
      setFailure in interface io.netty.channel.ChannelPromise
      Specified by:
      setFailure in interface io.netty.util.concurrent.Promise<Void>
      Overrides:
      setFailure in class io.netty.channel.DefaultChannelPromise
    • awaitingPromises

      private boolean awaitingPromises()
    • setSuccess

      public io.netty.channel.ChannelPromise setSuccess(Void unused)
      Specified by:
      setSuccess in interface io.netty.channel.ChannelPromise
      Specified by:
      setSuccess in interface io.netty.util.concurrent.Promise<Void>
      Overrides:
      setSuccess in class io.netty.channel.DefaultChannelPromise
    • trySuccess

      public boolean trySuccess(Void unused)
      Specified by:
      trySuccess in interface io.netty.util.concurrent.Promise<Void>
      Overrides:
      trySuccess in class io.netty.util.concurrent.DefaultPromise<Void>
    • trySuccessInternal

      private void trySuccessInternal()
    • tryFailureInternal

      private void tryFailureInternal(Throwable cause)