Bug 5175: RPC called on mount point not being correctly handled when multiple revisio... 82/33982/1
authoradetalhouet <adetalhouet@inocybe.com>
Wed, 3 Feb 2016 14:04:40 +0000 (09:04 -0500)
committeradetalhouet <adetalhouet@inocybe.com>
Wed, 3 Feb 2016 14:04:40 +0000 (09:04 -0500)
 The ControllerContext#toQname was just looking for module using the module name. In scenarios where you have multiple revision for the same module, the method was returning the latest schema. This fix is to retreive the schema based on the revision date

Change-Id: Ie1f3ae1b6c4e6fd7133f64f3f5e7c8899c42db5a
Signed-off-by: adetalhouet <adetalhouet@inocybe.com>
opendaylight/restconf/sal-rest-connector/src/main/java/org/opendaylight/netconf/sal/restconf/impl/ControllerContext.java
opendaylight/restconf/sal-rest-connector/src/main/java/org/opendaylight/netconf/sal/restconf/impl/RestconfImpl.java

index 123309c1f9b4fe6d18a75086574e92fb359918d7..f21823cda081bc2d5db4d59247092092687430f8 100644 (file)
@@ -24,6 +24,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -595,7 +596,7 @@ public class ControllerContext implements SchemaContextListener {
             targetNode = findInstanceDataChildByNameAndNamespace(parentNode, nodeName, module.getNamespace());
 
             if (targetNode == null && parentNode instanceof Module) {
-                final RpcDefinition rpc = ControllerContext.getInstance().getRpcDefinition(head);
+                final RpcDefinition rpc = ControllerContext.getInstance().getRpcDefinition(head, module.getRevision());
                 if (rpc != null) {
                     return new InstanceIdentifierContext<RpcDefinition>(builder.build(), rpc, mountPoint,
                             mountPoint != null ? mountPoint.getSchemaContext() : globalSchema);
@@ -770,7 +771,7 @@ public class ControllerContext implements SchemaContextListener {
         String additionalInfo = "";
         if (decoded == null) {
             if ((baseType instanceof IdentityrefTypeDefinition)) {
-                decoded = toQName(urlDecoded);
+                decoded = toQName(urlDecoded, null);
                 additionalInfo = "For key which is of type identityref it should be in format module_name:identity_name.";
             }
         }
@@ -811,11 +812,11 @@ public class ControllerContext implements SchemaContextListener {
         return str.substring(idx + 1);
     }
 
-    private QName toQName(final String name) {
+    private QName toQName(final String name, final Date revisionDate) {
         checkPreconditions();
         final String module = toModuleName(name);
         final String node = toNodeName(name);
-        final Module m = globalSchema.findModuleByName(module, null);
+        final Module m = globalSchema.findModuleByName(module, revisionDate);
         return m == null ? null : QName.create(m.getQNameModule(), node);
     }
 
@@ -823,8 +824,8 @@ public class ControllerContext implements SchemaContextListener {
         return node instanceof ListSchemaNode || node instanceof ContainerSchemaNode;
     }
 
-    public RpcDefinition getRpcDefinition(final String name) {
-        final QName validName = toQName(name);
+    public RpcDefinition getRpcDefinition(final String name, final Date revisionDate) {
+        final QName validName = toQName(name, revisionDate);
         return validName == null ? null : qnameToRpc.get().get(validName);
     }
 
index bc2d23cd70f052cde95e2a304b40f1786a626b70..42057463d6ecf78d62d092713a0da3cd20662ed1 100644 (file)
@@ -601,7 +601,7 @@ public class RestconfImpl implements RestconfService {
 
         RpcDefinition rpc = null;
         if (mountPoint == null) {
-            rpc = controllerContext.getRpcDefinition(identifierDecoded);
+            rpc = controllerContext.getRpcDefinition(identifierDecoded, null);
         } else {
             rpc = findRpc(mountPoint.getSchemaContext(), identifierDecoded);
         }