Do not retain the list of RPCs 37/76537/3
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 1 Oct 2018 16:45:43 +0000 (18:45 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 1 Oct 2018 18:48:39 +0000 (20:48 +0200)
These RPCs are only used when a listener registers, there is simply
no point to retain them in a transformed collection. We can always
re-create them as needed from the SchemaContext.

Change-Id: Ia47c3163bff5232d079f8768420bfa6360fe3b49
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceRpc.java

index 897cdaa5c73267039b1438aed9054cb69c37b9d9..01cdac9d6bb8d98d7e470b6dcaa58a1c63b5df4d 100644 (file)
@@ -7,12 +7,13 @@
  */
 package org.opendaylight.netconf.sal.connect.netconf.sal;
 
+import static java.util.Objects.requireNonNull;
+
 import com.google.common.collect.Collections2;
 import com.google.common.util.concurrent.CheckedFuture;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.MoreExecutors;
-import java.util.Collection;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import org.opendaylight.controller.md.sal.dom.api.DOMRpcAvailabilityListener;
@@ -38,16 +39,14 @@ public final class NetconfDeviceRpc implements DOMRpcService {
 
     private final RemoteDeviceCommunicator<NetconfMessage> communicator;
     private final MessageTransformer<NetconfMessage> transformer;
-    private final Collection<DOMRpcIdentifier> availableRpcs;
+    private final SchemaContext schemaContext;
 
     public NetconfDeviceRpc(final SchemaContext schemaContext,
             final RemoteDeviceCommunicator<NetconfMessage> communicator,
             final MessageTransformer<NetconfMessage> transformer) {
         this.communicator = communicator;
         this.transformer = transformer;
-
-        availableRpcs = Collections2.transform(schemaContext.getOperations(),
-            input -> DOMRpcIdentifier.create(input.getPath()));
+        this.schemaContext = requireNonNull(schemaContext);
     }
 
     @Nonnull
@@ -76,7 +75,8 @@ public final class NetconfDeviceRpc implements DOMRpcService {
     public <T extends DOMRpcAvailabilityListener> ListenerRegistration<T> registerRpcListener(
             @Nonnull final T listener) {
 
-        listener.onRpcAvailable(availableRpcs);
+        listener.onRpcAvailable(Collections2.transform(schemaContext.getOperations(),
+            input -> DOMRpcIdentifier.create(input.getPath())));
 
         return new ListenerRegistration<T>() {
             @Override