Teach netconf-impl about maximum incoming chunk size 02/102302/4
authorDanielCV <daniel.viswanathan@verizon.com>
Wed, 7 Sep 2022 10:51:21 +0000 (16:21 +0530)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 19 Sep 2022 15:46:22 +0000 (17:46 +0200)
Negotiators can specify custom maximum chunk size, this patch teaches
netconf-impl's configuration to take advantage of that.

JIRA: NETCONF-898
Change-Id: I1532a7e56e496c55af0d510e0259479fe2508eb4
Signed-off-by: DanielCV <daniel.viswanathan@verizon.com>
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
netconf/netconf-impl/src/main/java/org/opendaylight/netconf/impl/NetconfServerSessionNegotiator.java
netconf/netconf-impl/src/main/java/org/opendaylight/netconf/impl/NetconfServerSessionNegotiatorFactory.java
netconf/netconf-impl/src/main/java/org/opendaylight/netconf/impl/NetconfServerSessionNegotiatorFactoryBuilder.java

index 407f663debca6a006e858ff16c24b7768916064a..efd48b08310b9f77a52ffa805471068490e260fb 100644 (file)
@@ -15,6 +15,7 @@ import java.net.InetSocketAddress;
 import java.net.SocketAddress;
 import java.util.AbstractMap.SimpleImmutableEntry;
 import java.util.Map;
+import org.checkerframework.checker.index.qual.NonNegative;
 import org.opendaylight.netconf.api.NetconfDocumentedException;
 import org.opendaylight.netconf.api.messages.NetconfHelloMessage;
 import org.opendaylight.netconf.api.messages.NetconfHelloMessageAdditionalHeader;
@@ -31,9 +32,10 @@ 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) {
+            final NetconfServerSessionListener sessionListener, final long connectionTimeoutMillis,
+            final @NonNegative int maximumIncomingChunkSize) {
         super(hello, promise, channel, timer, sessionListener, connectionTimeoutMillis,
-            DEFAULT_MAXIMUM_INCOMING_CHUNK_SIZE);
+            maximumIncomingChunkSize);
         this.sessionId = sessionId;
     }
 
index 38df10178b641fb0991ed93833fbdedf728f9263..385f20fc7b31dd4c5f4219d2d41246e9c30cb806 100644 (file)
@@ -16,6 +16,7 @@ import io.netty.util.Timer;
 import io.netty.util.concurrent.Promise;
 import java.net.SocketAddress;
 import java.util.Set;
+import org.checkerframework.checker.index.qual.NonNegative;
 import org.opendaylight.netconf.api.NetconfSessionListenerFactory;
 import org.opendaylight.netconf.api.messages.NetconfHelloMessage;
 import org.opendaylight.netconf.api.monitoring.NetconfMonitoringService;
@@ -24,6 +25,7 @@ import org.opendaylight.netconf.impl.osgi.NetconfOperationRouter;
 import org.opendaylight.netconf.impl.osgi.NetconfOperationRouterImpl;
 import org.opendaylight.netconf.mapping.api.NetconfOperationService;
 import org.opendaylight.netconf.mapping.api.NetconfOperationServiceFactory;
+import org.opendaylight.netconf.nettyutil.AbstractNetconfSessionNegotiator;
 import org.opendaylight.netconf.nettyutil.NetconfSessionNegotiatorFactory;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.Capabilities;
@@ -38,31 +40,40 @@ public class NetconfServerSessionNegotiatorFactory
             XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_CAPABILITY_NOTIFICATION_1_0
     );
 
+    private final @NonNegative int maximumIncomingChunkSize;
     private final Timer timer;
-
     private final SessionIdProvider idProvider;
     private final NetconfOperationServiceFactory aggregatedOpService;
     private final long connectionTimeoutMillis;
     private final NetconfMonitoringService monitoringService;
     private final Set<String> baseCapabilities;
 
+    // FIXME: 5.0.0: protected
     public NetconfServerSessionNegotiatorFactory(final Timer timer,
-            final NetconfOperationServiceFactory netconfOperationProvider,
-            final SessionIdProvider idProvider, final long connectionTimeoutMillis,
-            final NetconfMonitoringService monitoringService) {
+            final NetconfOperationServiceFactory netconfOperationProvider, final SessionIdProvider idProvider,
+            final long connectionTimeoutMillis, final NetconfMonitoringService monitoringService) {
         this(timer, netconfOperationProvider, idProvider, connectionTimeoutMillis, monitoringService, null);
     }
 
+    // FIXME: 5.0.0: protected
     public NetconfServerSessionNegotiatorFactory(final Timer timer,
-                                                 final NetconfOperationServiceFactory netconfOperationProvider,
-                                                 final SessionIdProvider idProvider, final long connectionTimeoutMillis,
-                                                 final NetconfMonitoringService monitoringService,
-                                                 final Set<String> baseCapabilities) {
+            final NetconfOperationServiceFactory netconfOperationProvider, final SessionIdProvider idProvider,
+            final long connectionTimeoutMillis,  final NetconfMonitoringService monitoringService,
+            final Set<String> baseCapabilities) {
+        this(timer, netconfOperationProvider, idProvider, connectionTimeoutMillis, monitoringService, baseCapabilities,
+            AbstractNetconfSessionNegotiator.DEFAULT_MAXIMUM_INCOMING_CHUNK_SIZE);
+    }
+
+    protected NetconfServerSessionNegotiatorFactory(final Timer timer,
+            final NetconfOperationServiceFactory netconfOperationProvider, final SessionIdProvider idProvider,
+            final long connectionTimeoutMillis, final NetconfMonitoringService monitoringService,
+            final Set<String> baseCapabilities, final @NonNegative int maximumIncomingChunkSize) {
         this.timer = timer;
         aggregatedOpService = netconfOperationProvider;
         this.idProvider = idProvider;
         this.connectionTimeoutMillis = connectionTimeoutMillis;
         this.monitoringService = monitoringService;
+        this.maximumIncomingChunkSize = maximumIncomingChunkSize;
         this.baseCapabilities = validateBaseCapabilities(baseCapabilities == null ? DEFAULT_BASE_CAPABILITIES :
                 baseCapabilities);
     }
@@ -100,7 +111,7 @@ public class NetconfServerSessionNegotiatorFactory
 
         return new NetconfServerSessionNegotiator(createHelloMessage(sessionId, monitoringService), sessionId, promise,
             channel, timer, getListener(Long.toString(sessionId), channel.parent().localAddress()),
-            connectionTimeoutMillis);
+            connectionTimeoutMillis, maximumIncomingChunkSize);
     }
 
     private NetconfServerSessionListener getListener(final String netconfSessionIdForReporting,
index cfbb7481ed8b0e5416f550a0ba5e085fce7fa50f..03d4687c93e3317b72c425d3143828cb5a4f1b8b 100644 (file)
@@ -12,8 +12,10 @@ import static java.util.Objects.requireNonNull;
 
 import io.netty.util.Timer;
 import java.util.Set;
+import org.checkerframework.checker.index.qual.NonNegative;
 import org.opendaylight.netconf.api.monitoring.NetconfMonitoringService;
 import org.opendaylight.netconf.mapping.api.NetconfOperationServiceFactory;
+import org.opendaylight.netconf.nettyutil.AbstractNetconfSessionNegotiator;
 
 public class NetconfServerSessionNegotiatorFactoryBuilder {
     private Timer timer;
@@ -22,6 +24,8 @@ public class NetconfServerSessionNegotiatorFactoryBuilder {
     private long connectionTimeoutMillis;
     private NetconfMonitoringService monitoringService;
     private Set<String> baseCapabilities;
+    private @NonNegative int maximumIncomingChunkSize =
+        AbstractNetconfSessionNegotiator.DEFAULT_MAXIMUM_INCOMING_CHUNK_SIZE;
 
     public NetconfServerSessionNegotiatorFactoryBuilder() {
     }
@@ -58,14 +62,19 @@ public class NetconfServerSessionNegotiatorFactoryBuilder {
         return this;
     }
 
+    public NetconfServerSessionNegotiatorFactoryBuilder setMaximumIncomingChunkSize(
+            final @NonNegative int maximumIncomingChunkSize) {
+        checkArgument(maximumIncomingChunkSize > 0);
+        this.maximumIncomingChunkSize = maximumIncomingChunkSize;
+        return this;
+    }
 
     public NetconfServerSessionNegotiatorFactory build() {
         validate();
         return new NetconfServerSessionNegotiatorFactory(timer, aggregatedOpService, idProvider,
-                connectionTimeoutMillis, monitoringService, baseCapabilities);
+                connectionTimeoutMillis, monitoringService, baseCapabilities, maximumIncomingChunkSize);
     }
 
-
     private void validate() {
         requireNonNull(timer, "timer not initialized");
         requireNonNull(aggregatedOpService, "NetconfOperationServiceFactory not initialized");