Class AsyncFuture<V>

java.lang.Object
org.apache.cassandra.utils.concurrent.AbstractFuture<V>
org.apache.cassandra.utils.concurrent.AsyncFuture<V>
All Implemented Interfaces:
com.google.common.util.concurrent.ListenableFuture<V>, io.netty.util.concurrent.Future<V>, Future<V>, Awaitable, Future<V>
Direct Known Subclasses:
AsyncPromise, BlockingPartitionRepair, FutureCombiner, FutureTask, ImmediateFuture, PaxosCleanup, PaxosCleanupComplete, PaxosCleanupLocalCoordinator, PaxosCleanupSession, PaxosFinishPrepareCleanup, PaxosStartPrepareCleanup, RepairJob, RepairSession, Scheduler.Task, SnapshotTask, StreamResultFuture, SyncTask, ValidationTask

public class AsyncFuture<V> extends AbstractFuture<V>
Our default Future implementation, with all state being managed without locks (except those used by the JVM). Some implementation comments versus Netty's default promise: - We permit efficient initial state declaration, avoiding unnecessary CAS or lock acquisitions when mutating a Promise we are ourselves constructing (and can easily add more; only those we use have been added) - We guarantee the order of invocation of listeners (and callbacks etc, and with respect to each other) - We save some space when registering listeners, especially if there is only one listener, as we perform no extra allocations in this case. - We implement our invocation list as a concurrent stack, that is cleared on notification - We handle special values slightly differently. - We do not use a special value for null, instead using a special value to indicate the result has not been set. This means that once isSuccess() holds, the result must be a correctly typed object (modulo generics pitfalls). - All special values are also instances of FailureHolder, which simplifies a number of the logical conditions.
  • Constructor Details

    • AsyncFuture

      public AsyncFuture()
    • AsyncFuture

      protected AsyncFuture(V immediateSuccess)
    • AsyncFuture

      protected AsyncFuture(Throwable immediateFailure)
    • AsyncFuture

      protected AsyncFuture(org.apache.cassandra.utils.concurrent.AbstractFuture.FailureHolder initialState)
    • AsyncFuture

      protected AsyncFuture(io.netty.util.concurrent.GenericFutureListener<? extends io.netty.util.concurrent.Future<? super V>> listener)
    • AsyncFuture

      protected AsyncFuture(org.apache.cassandra.utils.concurrent.AbstractFuture.FailureHolder initialState, io.netty.util.concurrent.GenericFutureListener<? extends io.netty.util.concurrent.Future<? super V>> listener)
  • Method Details