Pass maximum chunk size to AbstractNetconfSessionNegotiator 21/101921/4
authorRobert Varga <robert.varga@pantheon.tech>
Fri, 29 Jul 2022 16:27:21 +0000 (18:27 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Fri, 29 Jul 2022 17:39:31 +0000 (19:39 +0200)
We want to be able to control incoming maximum chunk size on a
session-by-session basis. This patch allows session negotiators
to specify this value for each instance.

JIRA: NETCONF-888
Change-Id: Ib001942ada2d5445a558f30efc8b6ec2a12395d0
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
netconf/netconf-client/src/main/java/org/opendaylight/netconf/client/NetconfClientSessionNegotiator.java
netconf/netconf-impl/src/main/java/org/opendaylight/netconf/impl/NetconfServerSessionNegotiator.java
netconf/netconf-netty-util/src/main/java/org/opendaylight/netconf/nettyutil/AbstractNetconfSessionNegotiator.java
netconf/netconf-netty-util/src/test/java/org/opendaylight/netconf/nettyutil/TestSessionNegotiator.java

index a1fe12eb97c69d7c0038c2277116d198cf208ed4..a15dd2747ed3e9e5a36102930fda5bdd0894912e 100644 (file)
@@ -55,7 +55,8 @@ class NetconfClientSessionNegotiator
     NetconfClientSessionNegotiator(final NetconfHelloMessage hello, final NetconfStartExiMessage startExi,
             final Promise<NetconfClientSession> promise, final Channel channel, final Timer timer,
             final NetconfClientSessionListener sessionListener, final long connectionTimeoutMillis) {
-        super(hello, promise, channel, timer, sessionListener, connectionTimeoutMillis);
+        super(hello, promise, channel, timer, sessionListener, connectionTimeoutMillis,
+            DEFAULT_MAXIMUM_INCOMING_CHUNK_SIZE);
         this.startExi = startExi;
     }
 
index 2bb0ec31563bddb7497eb0e9e3dc7eea74157598..407f663debca6a006e858ff16c24b7768916064a 100644 (file)
@@ -32,7 +32,8 @@ public final class NetconfServerSessionNegotiator
     NetconfServerSessionNegotiator(final NetconfHelloMessage hello, final long sessionId,
             final Promise<NetconfServerSession> promise, final Channel channel, final Timer timer,
             final NetconfServerSessionListener sessionListener, final long connectionTimeoutMillis) {
-        super(hello, promise, channel, timer, sessionListener, connectionTimeoutMillis);
+        super(hello, promise, channel, timer, sessionListener, connectionTimeoutMillis,
+            DEFAULT_MAXIMUM_INCOMING_CHUNK_SIZE);
         this.sessionId = sessionId;
     }
 
index 3566bf4bb19fc39f69ab29e6dac2c86258c073bd..04f4aa90b5b1c24f7ac7fe5157aa3bc6fe08c342 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.netconf.nettyutil;
 
+import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkState;
 import static java.util.Objects.requireNonNull;
 
@@ -77,6 +78,7 @@ public abstract class AbstractNetconfSessionNegotiator<S extends AbstractNetconf
     private final @NonNull NetconfHelloMessage localHello;
     protected final Channel channel;
 
+    private final @NonNegative int maximumIncomingChunkSize;
     private final long connectionTimeoutMillis;
     private final Promise<S> promise;
     private final L sessionListener;
@@ -88,14 +90,25 @@ public abstract class AbstractNetconfSessionNegotiator<S extends AbstractNetconf
     private State state = State.IDLE;
 
     protected AbstractNetconfSessionNegotiator(final NetconfHelloMessage hello, final Promise<S> promise,
-                                               final Channel channel, final Timer timer,
-                                               final L sessionListener, final long connectionTimeoutMillis) {
+                                               final Channel channel, final Timer timer, final L sessionListener,
+                                               final long connectionTimeoutMillis,
+                                               final @NonNegative int maximumIncomingChunkSize) {
         this.localHello = requireNonNull(hello);
         this.promise = requireNonNull(promise);
         this.channel = requireNonNull(channel);
         this.timer = timer;
         this.sessionListener = sessionListener;
         this.connectionTimeoutMillis = connectionTimeoutMillis;
+        this.maximumIncomingChunkSize = maximumIncomingChunkSize;
+        checkArgument(maximumIncomingChunkSize > 0, "Invalid maximum incoming chunk size %s", maximumIncomingChunkSize);
+    }
+
+    @Deprecated(since = "4.0.1", forRemoval = true)
+    protected AbstractNetconfSessionNegotiator(final NetconfHelloMessage hello, final Promise<S> promise,
+                                               final Channel channel, final Timer timer,
+                                               final L sessionListener, final long connectionTimeoutMillis) {
+        this(hello, promise, channel, timer, sessionListener, connectionTimeoutMillis,
+            DEFAULT_MAXIMUM_INCOMING_CHUNK_SIZE);
     }
 
     protected final @NonNull NetconfHelloMessage localHello() {
@@ -194,7 +207,7 @@ public abstract class AbstractNetconfSessionNegotiator<S extends AbstractNetconf
         replaceChannelHandler(channel, AbstractChannelInitializer.NETCONF_MESSAGE_FRAME_ENCODER,
                 FramingMechanismHandlerFactory.createHandler(FramingMechanism.CHUNK));
         replaceChannelHandler(channel, AbstractChannelInitializer.NETCONF_MESSAGE_AGGREGATOR,
-                new NetconfChunkAggregator(DEFAULT_MAXIMUM_INCOMING_CHUNK_SIZE));
+                new NetconfChunkAggregator(maximumIncomingChunkSize));
     }
 
     private boolean shouldUseChunkFraming(final Document doc) {
index 61be232134df2b8fba5de6958b688403470afae9..802bd2b03a22644eb1569c457a72e801d7fffd03 100644 (file)
@@ -18,7 +18,7 @@ final class TestSessionNegotiator
     TestSessionNegotiator(final NetconfHelloMessage hello, final Promise<TestingNetconfSession> promise,
             final Channel channel, final Timer timer,
             final NetconfSessionListener<TestingNetconfSession> sessionListener, final long connectionTimeoutMillis) {
-        super(hello, promise, channel, timer, sessionListener, connectionTimeoutMillis);
+        super(hello, promise, channel, timer, sessionListener, connectionTimeoutMillis, 16384);
     }
 
     @Override