Pass maximum chunk size to AbstractNetconfSessionNegotiator 99/102199/1
authorRobert Varga <robert.varga@pantheon.tech>
Fri, 29 Jul 2022 16:27:21 +0000 (18:27 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 22 Aug 2022 08:44:50 +0000 (10:44 +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>
(cherry picked from commit e7b911225b8b7178aac2c94e0bf552cb24dd6409)

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 68f2bef0639d0c7525af4187a7e6c7dd610b96a4..bc44751332e1656940bf3d86324062994508452e 100644 (file)
@@ -5,7 +5,6 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.netconf.client;
 
 import com.google.common.base.Strings;
@@ -59,7 +58,8 @@ public class NetconfClientSessionNegotiator extends
                                              final Timer timer,
                                              final NetconfClientSessionListener sessionListener,
                                              final long connectionTimeoutMillis) {
-        super(sessionPreferences, promise, channel, timer, sessionListener, connectionTimeoutMillis);
+        super(sessionPreferences, promise, channel, timer, sessionListener, connectionTimeoutMillis,
+            DEFAULT_MAXIMUM_INCOMING_CHUNK_SIZE);
     }
 
     @SuppressWarnings("checkstyle:IllegalCatch")
index 1a975fc79f5a5c204c6d03346b6e1638dd78c8ea..d0bb6b9ae6b6db98eb0fbfef84139238dece5b80 100644 (file)
@@ -34,16 +34,16 @@ public class NetconfServerSessionNegotiator
     private static final String UNKNOWN = "unknown";
 
     protected NetconfServerSessionNegotiator(
-            NetconfServerSessionPreferences sessionPreferences,
-            Promise<NetconfServerSession> promise, Channel channel,
-            Timer timer, NetconfServerSessionListener sessionListener,
-            long connectionTimeoutMillis) {
-        super(sessionPreferences, promise, channel, timer, sessionListener,
-                connectionTimeoutMillis);
+            final NetconfServerSessionPreferences sessionPreferences,
+            final Promise<NetconfServerSession> promise, final Channel channel,
+            final Timer timer, final NetconfServerSessionListener sessionListener,
+            final long connectionTimeoutMillis) {
+        super(sessionPreferences, promise, channel, timer, sessionListener, connectionTimeoutMillis,
+            DEFAULT_MAXIMUM_INCOMING_CHUNK_SIZE);
     }
 
     @Override
-    protected void handleMessage(NetconfHelloMessage netconfMessage)
+    protected void handleMessage(final NetconfHelloMessage netconfMessage)
             throws NetconfDocumentedException {
         NetconfServerSession session = getSessionForHelloMessage(netconfMessage);
         replaceHelloMessageInboundHandler(session);
@@ -54,8 +54,8 @@ public class NetconfServerSessionNegotiator
     @Override
     @SuppressFBWarnings("BC_UNCONFIRMED_CAST_OF_RETURN_VALUE")
     protected NetconfServerSession getSession(
-            NetconfServerSessionListener sessionListener, Channel channel,
-            NetconfHelloMessage message) {
+            final NetconfServerSessionListener sessionListener, final Channel channel,
+            final NetconfHelloMessage message) {
         Optional<NetconfHelloMessageAdditionalHeader> additionalHeader = message
                 .getAdditionalHeader();
 
@@ -86,7 +86,7 @@ public class NetconfServerSessionNegotiator
      * @return Two values - port and host of socket address
      */
     protected static Map.Entry<String, String> getHostName(
-            SocketAddress socketAddress) {
+            final SocketAddress socketAddress) {
 
         if (socketAddress instanceof InetSocketAddress) {
 
index d7f97aa4cc9197d9d84f3af88132a588c27b34e0..6ff68fea9604f19a7605d5e03f6b194f615e9771 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;
 
@@ -79,6 +80,7 @@ public abstract class AbstractNetconfSessionNegotiator<P extends NetconfSessionP
     protected final P sessionPreferences;
     protected final Channel channel;
 
+    private final @NonNegative int maximumIncomingChunkSize;
     private final long connectionTimeoutMillis;
     private final Promise<S> promise;
     private final L sessionListener;
@@ -91,13 +93,24 @@ public abstract class AbstractNetconfSessionNegotiator<P extends NetconfSessionP
 
     protected AbstractNetconfSessionNegotiator(final P sessionPreferences, final Promise<S> promise,
                                                final Channel channel, final Timer timer,
-                                               final L sessionListener, final long connectionTimeoutMillis) {
+                                               final L sessionListener, final long connectionTimeoutMillis,
+                                               final @NonNegative int maximumIncomingChunkSize) {
         this.channel = requireNonNull(channel);
         this.promise = requireNonNull(promise);
         this.sessionPreferences = sessionPreferences;
         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 P sessionPreferences, final Promise<S> promise,
+                                               final Channel channel, final Timer timer,
+                                               final L sessionListener, final long connectionTimeoutMillis) {
+        this(sessionPreferences, promise, channel, timer, sessionListener, connectionTimeoutMillis,
+            DEFAULT_MAXIMUM_INCOMING_CHUNK_SIZE);
     }
 
     protected final void startNegotiation() {
@@ -194,7 +207,7 @@ public abstract class AbstractNetconfSessionNegotiator<P extends NetconfSessionP
         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 d5e895515b2f2bb50ca1bf29605b6a08b652def3..1aa910ab491032aed0f969d472b286c6fe128979 100644 (file)
@@ -5,7 +5,6 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.netconf.nettyutil;
 
 import io.netty.channel.Channel;
@@ -19,14 +18,12 @@ import org.opendaylight.netconf.api.messages.NetconfHelloMessage;
 final class TestSessionNegotiator extends
     AbstractNetconfSessionNegotiator<NetconfSessionPreferences,
         TestingNetconfSession, NetconfSessionListener<TestingNetconfSession>> {
-
-
     TestSessionNegotiator(final NetconfSessionPreferences sessionPreferences,
                           final Promise<TestingNetconfSession> promise, final Channel channel,
                           final Timer timer,
                           final NetconfSessionListener<TestingNetconfSession> sessionListener,
                           final long connectionTimeoutMillis) {
-        super(sessionPreferences, promise, channel, timer, sessionListener, connectionTimeoutMillis);
+        super(sessionPreferences, promise, channel, timer, sessionListener, connectionTimeoutMillis, 16384);
     }
 
     @Override