Home / Class/ DefaultChannelGroupFuture Class — netty Architecture

DefaultChannelGroupFuture Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  1a024fce_f7a6_4bf6_3215_f4b94d0025ce["DefaultChannelGroupFuture"]
  bf44c06f_5cc7_7329_6100_98a5c6929372["DefaultChannelGroupFuture.java"]
  1a024fce_f7a6_4bf6_3215_f4b94d0025ce -->|defined in| bf44c06f_5cc7_7329_6100_98a5c6929372
  84eab3e5_2b16_2640_2ea8_a7f12f058875["DefaultChannelGroupFuture()"]
  1a024fce_f7a6_4bf6_3215_f4b94d0025ce -->|method| 84eab3e5_2b16_2640_2ea8_a7f12f058875
  350e40f0_3ced_041e_ff32_01583ec1667e["ChannelGroup()"]
  1a024fce_f7a6_4bf6_3215_f4b94d0025ce -->|method| 350e40f0_3ced_041e_ff32_01583ec1667e
  5ba30bf7_6904_1b33_982e_7f6519c9cde9["ChannelFuture()"]
  1a024fce_f7a6_4bf6_3215_f4b94d0025ce -->|method| 5ba30bf7_6904_1b33_982e_7f6519c9cde9
  f859be4f_85be_bb20_6591_a9c69151bc75["iterator()"]
  1a024fce_f7a6_4bf6_3215_f4b94d0025ce -->|method| f859be4f_85be_bb20_6591_a9c69151bc75
  c4f9f310_db24_54bc_89e9_077730bb87f6["isPartialSuccess()"]
  1a024fce_f7a6_4bf6_3215_f4b94d0025ce -->|method| c4f9f310_db24_54bc_89e9_077730bb87f6
  dacd662b_5515_a47f_68da_6b294404b2c0["isPartialFailure()"]
  1a024fce_f7a6_4bf6_3215_f4b94d0025ce -->|method| dacd662b_5515_a47f_68da_6b294404b2c0
  dcb50b8b_093a_5920_ad6f_21c8bf91dc14["ChannelGroupException()"]
  1a024fce_f7a6_4bf6_3215_f4b94d0025ce -->|method| dcb50b8b_093a_5920_ad6f_21c8bf91dc14
  2dd45fe8_bfd0_a814_cc75_3701ecf322cd["setSuccess0()"]
  1a024fce_f7a6_4bf6_3215_f4b94d0025ce -->|method| 2dd45fe8_bfd0_a814_cc75_3701ecf322cd
  6b438797_5ce5_12c0_65eb_ecf5420f8bf8["setFailure0()"]
  1a024fce_f7a6_4bf6_3215_f4b94d0025ce -->|method| 6b438797_5ce5_12c0_65eb_ecf5420f8bf8
  d1a77b15_dffa_bb9d_cb57_48c3cf017160["trySuccess()"]
  1a024fce_f7a6_4bf6_3215_f4b94d0025ce -->|method| d1a77b15_dffa_bb9d_cb57_48c3cf017160
  91597e51_64da_c60d_0cf8_f14a25a804f8["tryFailure()"]
  1a024fce_f7a6_4bf6_3215_f4b94d0025ce -->|method| 91597e51_64da_c60d_0cf8_f14a25a804f8
  a77c2eec_f619_e9b0_32a5_109738e0110a["checkDeadLock()"]
  1a024fce_f7a6_4bf6_3215_f4b94d0025ce -->|method| a77c2eec_f619_e9b0_32a5_109738e0110a

Relationship Graph

Source Code

transport/src/main/java/io/netty/channel/group/DefaultChannelGroupFuture.java lines 41–259

final class DefaultChannelGroupFuture extends DefaultPromise<Void> implements ChannelGroupFuture {

    private final ChannelGroup group;
    private final Map<Channel, ChannelFuture> futures;
    private int successCount;
    private int failureCount;

    private final ChannelFutureListener childListener = new ChannelFutureListener() {
        @Override
        public void operationComplete(ChannelFuture future) throws Exception {
            boolean success = future.isSuccess();
            boolean callSetDone;
            synchronized (DefaultChannelGroupFuture.this) {
                if (success) {
                    successCount ++;
                } else {
                    failureCount ++;
                }

                callSetDone = successCount + failureCount == futures.size();
                assert successCount + failureCount <= futures.size();
            }

            if (callSetDone) {
                if (failureCount > 0) {
                    List<Map.Entry<Channel, Throwable>> failed =
                            new ArrayList<Map.Entry<Channel, Throwable>>(failureCount);
                    for (ChannelFuture f: futures.values()) {
                        if (!f.isSuccess()) {
                            failed.add(new DefaultEntry<Channel, Throwable>(f.channel(), f.cause()));
                        }
                    }
                    setFailure0(new ChannelGroupException(failed));
                } else {
                    setSuccess0();
                }
            }
        }
    };

    /**
     * Creates a new instance.
     */
    DefaultChannelGroupFuture(ChannelGroup group, Collection<ChannelFuture> futures,  EventExecutor executor) {
        super(executor);
        this.group = ObjectUtil.checkNotNull(group, "group");
        ObjectUtil.checkNotNull(futures, "futures");

        Map<Channel, ChannelFuture> futureMap = new LinkedHashMap<Channel, ChannelFuture>();
        for (ChannelFuture f: futures) {
            futureMap.put(f.channel(), f);
        }

        this.futures = Collections.unmodifiableMap(futureMap);

        for (ChannelFuture f: this.futures.values()) {
            f.addListener(childListener);
        }

        // Done on arrival?
        if (this.futures.isEmpty()) {
            setSuccess0();
        }
    }

    DefaultChannelGroupFuture(ChannelGroup group, Map<Channel, ChannelFuture> futures, EventExecutor executor) {
        super(executor);
        this.group = group;
        this.futures = Collections.unmodifiableMap(futures);
        for (ChannelFuture f: this.futures.values()) {
            f.addListener(childListener);
        }

        // Done on arrival?
        if (this.futures.isEmpty()) {
            setSuccess0();
        }
    }

    @Override
    public ChannelGroup group() {

Frequently Asked Questions

What is the DefaultChannelGroupFuture class?
DefaultChannelGroupFuture is a class in the netty codebase, defined in transport/src/main/java/io/netty/channel/group/DefaultChannelGroupFuture.java.
Where is DefaultChannelGroupFuture defined?
DefaultChannelGroupFuture is defined in transport/src/main/java/io/netty/channel/group/DefaultChannelGroupFuture.java at line 41.

Analyze Your Own Codebase

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

Try Supermodel Free