Home / Class/ ActiveStreams Class — netty Architecture

ActiveStreams Class — netty Architecture

Architecture documentation for the ActiveStreams class in DefaultHttp2Connection.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  0ec3cd81_c4d9_2ddb_582d_5c58407aaa07["ActiveStreams"]
  c1b91a38_3d50_98cc_116d_1d9e5bc49432["DefaultHttp2Connection.java"]
  0ec3cd81_c4d9_2ddb_582d_5c58407aaa07 -->|defined in| c1b91a38_3d50_98cc_116d_1d9e5bc49432
  0a31ede2_021b_8033_94dc_7dd6482e61f3["ActiveStreams()"]
  0ec3cd81_c4d9_2ddb_582d_5c58407aaa07 -->|method| 0a31ede2_021b_8033_94dc_7dd6482e61f3
  cd5dbdca_c253_9014_4710_af50d3d57270["size()"]
  0ec3cd81_c4d9_2ddb_582d_5c58407aaa07 -->|method| cd5dbdca_c253_9014_4710_af50d3d57270
  069e97e2_761e_738d_cd6f_cdf91fe84e83["activate()"]
  0ec3cd81_c4d9_2ddb_582d_5c58407aaa07 -->|method| 069e97e2_761e_738d_cd6f_cdf91fe84e83
  d3d8df90_d8af_4c4c_db98_f1ec02127ab8["deactivate()"]
  0ec3cd81_c4d9_2ddb_582d_5c58407aaa07 -->|method| d3d8df90_d8af_4c4c_db98_f1ec02127ab8
  cb0e7203_72eb_2078_3ea6_493340750840["Http2Stream()"]
  0ec3cd81_c4d9_2ddb_582d_5c58407aaa07 -->|method| cb0e7203_72eb_2078_3ea6_493340750840
  b4d4da37_92f6_a8ef_c484_357d8cd84ef8["addToActiveStreams()"]
  0ec3cd81_c4d9_2ddb_582d_5c58407aaa07 -->|method| b4d4da37_92f6_a8ef_c484_357d8cd84ef8
  8adb0879_5971_ccaa_50b1_d48d2463e4b8["removeFromActiveStreams()"]
  0ec3cd81_c4d9_2ddb_582d_5c58407aaa07 -->|method| 8adb0879_5971_ccaa_50b1_d48d2463e4b8
  ea157506_1684_b850_8aa9_ff162ce821de["allowModifications()"]
  0ec3cd81_c4d9_2ddb_582d_5c58407aaa07 -->|method| ea157506_1684_b850_8aa9_ff162ce821de
  f0f9ba92_f6b6_9036_9ef7_235938810d6c["incrementPendingIterations()"]
  0ec3cd81_c4d9_2ddb_582d_5c58407aaa07 -->|method| f0f9ba92_f6b6_9036_9ef7_235938810d6c
  d59982c4_2840_f395_d369_855f817593af["decrementPendingIterations()"]
  0ec3cd81_c4d9_2ddb_582d_5c58407aaa07 -->|method| d59982c4_2840_f395_d369_855f817593af

Relationship Graph

Source Code

codec-http2/src/main/java/io/netty/handler/codec/http2/DefaultHttp2Connection.java lines 970–1072

    private final class ActiveStreams {
        private final List<Listener> listeners;
        private final Queue<Event> pendingEvents = new ArrayDeque<Event>(4);
        private final Set<Http2Stream> streams = new LinkedHashSet<Http2Stream>();
        private int pendingIterations;

        ActiveStreams(List<Listener> listeners) {
            this.listeners = listeners;
        }

        public int size() {
            return streams.size();
        }

        public void activate(final DefaultStream stream) {
            if (allowModifications()) {
                addToActiveStreams(stream);
            } else {
                pendingEvents.add(new Event() {
                    @Override
                    public void process() {
                        addToActiveStreams(stream);
                    }
                });
            }
        }

        public void deactivate(final DefaultStream stream, final Iterator<?> itr) {
            if (allowModifications() || itr != null) {
                removeFromActiveStreams(stream, itr);
            } else {
                pendingEvents.add(new Event() {
                    @Override
                    public void process() {
                        removeFromActiveStreams(stream, itr);
                    }
                });
            }
        }

        public Http2Stream forEachActiveStream(Http2StreamVisitor visitor) throws Http2Exception {
            incrementPendingIterations();
            try {
                for (Http2Stream stream : streams) {
                    if (!visitor.visit(stream)) {
                        return stream;
                    }
                }
                return null;
            } finally {
                decrementPendingIterations();
            }
        }

        void addToActiveStreams(DefaultStream stream) {
            if (streams.add(stream)) {
                // Update the number of active streams initiated by the endpoint.
                stream.createdBy().numActiveStreams++;

                for (int i = 0; i < listeners.size(); i++) {
                    try {
                        listeners.get(i).onStreamActive(stream);
                    } catch (Throwable cause) {
                        logger.error("Caught Throwable from listener onStreamActive.", cause);
                    }
                }
            }
        }

        void removeFromActiveStreams(DefaultStream stream, Iterator<?> itr) {
            if (streams.remove(stream)) {
                // Update the number of active streams initiated by the endpoint.
                stream.createdBy().numActiveStreams--;
                notifyClosed(stream);
            }
            removeStream(stream, itr);
        }

        boolean allowModifications() {
            return pendingIterations == 0;
        }

Frequently Asked Questions

What is the ActiveStreams class?
ActiveStreams is a class in the netty codebase, defined in codec-http2/src/main/java/io/netty/handler/codec/http2/DefaultHttp2Connection.java.
Where is ActiveStreams defined?
ActiveStreams is defined in codec-http2/src/main/java/io/netty/handler/codec/http2/DefaultHttp2Connection.java at line 970.

Analyze Your Own Codebase

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

Try Supermodel Free