Home / Class/ PromiseAggregator Class — netty Architecture

PromiseAggregator Class — netty Architecture

Architecture documentation for the PromiseAggregator class in PromiseAggregator.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  6b255acd_4eb0_e639_6bd9_6e6d0998b4aa["PromiseAggregator"]
  9d9acfd4_ffc5_8eb3_db6f_c7b31667336b["PromiseAggregator.java"]
  6b255acd_4eb0_e639_6bd9_6e6d0998b4aa -->|defined in| 9d9acfd4_ffc5_8eb3_db6f_c7b31667336b
  4d0aee5f_42e9_20ec_cd7e_04d16722b0ed["PromiseAggregator()"]
  6b255acd_4eb0_e639_6bd9_6e6d0998b4aa -->|method| 4d0aee5f_42e9_20ec_cd7e_04d16722b0ed
  5a56e02e_c075_5b73_12f6_4f7aa203d9cb["add()"]
  6b255acd_4eb0_e639_6bd9_6e6d0998b4aa -->|method| 5a56e02e_c075_5b73_12f6_4f7aa203d9cb
  ae7b5d31_0682_018a_1164_c59d9b70ebe3["operationComplete()"]
  6b255acd_4eb0_e639_6bd9_6e6d0998b4aa -->|method| ae7b5d31_0682_018a_1164_c59d9b70ebe3

Relationship Graph

Source Code

common/src/main/java/io/netty/util/concurrent/PromiseAggregator.java lines 34–112

@Deprecated
public class PromiseAggregator<V, F extends Future<V>> implements GenericFutureListener<F> {

    private final Promise<?> aggregatePromise;
    private final boolean failPending;
    private Set<Promise<V>> pendingPromises;

    /**
     * Creates a new instance.
     *
     * @param aggregatePromise  the {@link Promise} to notify
     * @param failPending  {@code true} to fail pending promises, false to leave them unaffected
     */
    public PromiseAggregator(Promise<Void> aggregatePromise, boolean failPending) {
        this.aggregatePromise = ObjectUtil.checkNotNull(aggregatePromise, "aggregatePromise");
        this.failPending = failPending;
    }

    /**
     * See {@link PromiseAggregator#PromiseAggregator(Promise, boolean)}.
     * Defaults {@code failPending} to true.
     */
    public PromiseAggregator(Promise<Void> aggregatePromise) {
        this(aggregatePromise, true);
    }

    /**
     * Add the given {@link Promise}s to the aggregator.
     */
    @SafeVarargs
    public final PromiseAggregator<V, F> add(Promise<V>... promises) {
        ObjectUtil.checkNotNull(promises, "promises");
        if (promises.length == 0) {
            return this;
        }
        synchronized (this) {
            if (pendingPromises == null) {
                int size;
                if (promises.length > 1) {
                    size = promises.length;
                } else {
                    size = 2;
                }
                pendingPromises = new LinkedHashSet<Promise<V>>(size);
            }
            for (Promise<V> p : promises) {
                if (p == null) {
                    continue;
                }
                pendingPromises.add(p);
                p.addListener(this);
            }
        }
        return this;
    }

    @Override
    public synchronized void operationComplete(F future) throws Exception {
        if (pendingPromises == null) {
            aggregatePromise.setSuccess(null);
        } else {
            pendingPromises.remove(future);
            if (!future.isSuccess()) {
                Throwable cause = future.cause();
                aggregatePromise.setFailure(cause);
                if (failPending) {
                    for (Promise<V> pendingFuture : pendingPromises) {
                        pendingFuture.setFailure(cause);
                    }
                }
            } else {
                if (pendingPromises.isEmpty()) {
                    aggregatePromise.setSuccess(null);
                }
            }
        }
    }

}

Frequently Asked Questions

What is the PromiseAggregator class?
PromiseAggregator is a class in the netty codebase, defined in common/src/main/java/io/netty/util/concurrent/PromiseAggregator.java.
Where is PromiseAggregator defined?
PromiseAggregator is defined in common/src/main/java/io/netty/util/concurrent/PromiseAggregator.java at line 34.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free