Modify the resolution for deny action in ActionResolver. 42/31342/1
authorZhigang Ji <jizhigang@huawei.com>
Tue, 15 Dec 2015 12:00:57 +0000 (20:00 +0800)
committerZhigang Ji <jizhigang@huawei.com>
Tue, 15 Dec 2015 12:02:22 +0000 (20:02 +0800)
Change-Id: I7e19d29063984d888d5db4fe9957c804acfe674b
Signed-off-by: Zhigang Ji <jizhigang@huawei.com>
nemo-impl/src/main/java/org/opendaylight/nemo/intent/action/ActionResolver.java

index 2b01a480e8128daa911b54c3b6d0109fbe5bf76a..87e6a1e22207a52d3f4a87b7135b3bcf6b438c87 100644 (file)
@@ -249,20 +249,45 @@ public class ActionResolver {
         List<VirtualNode> virtualNodes = virtualNetwork.getVirtualNodes().getVirtualNode();\r
         List<IntentVnMappingResult> intentVnMappingResults = userIntentVnMapping.getIntentVnMappingResult();\r
 \r
-        VirtualNode virtualNode = ActionResolverUtils\r
+        VirtualNode sourceVirtualNode = ActionResolverUtils\r
                 .getSourceVirtualRouterOfFlow(virtualNodes, flow, nodes, intentVnMappingResults);\r
 \r
-        if ( null == virtualNode ) {\r
+        if ( null == sourceVirtualNode ) {\r
             throw new IntentResolutionException("Can not get the source virtual node " +\r
                     "of the flow " + flow.getFlowId().getValue() + ".");\r
         }\r
 \r
+        VirtualNode destinationVirtualNode = ActionResolverUtils\r
+                .getDestinationVirtualRouterOfFlow(virtualNodes, flow, nodes, intentVnMappingResults);\r
+\r
+        if ( null == destinationVirtualNode ) {\r
+            throw new IntentResolutionException("Can not get the destination virtual node " +\r
+                    "of the flow " + flow.getFlowId().getValue() + ".");\r
+        }\r
+\r
+        VNComputationUnit vnComputationUnit = vnComputationUnits.get(user.getUserId());\r
+\r
+        if ( null == vnComputationUnit ) {\r
+            throw new IntentResolutionException("Can not get the virtual network computation " +\r
+                    "unit for the user " + user.getUserId().getValue() + ".");\r
+        }\r
+\r
+        VirtualPath virtualPath = vnComputationUnit\r
+                .computePath(sourceVirtualNode.getNodeId(), destinationVirtualNode.getNodeId());\r
+\r
+        if ( null == virtualPath || virtualPath.getVirtualLink().isEmpty() ) {\r
+            throw new IntentResolutionException("Can not compute an available virtual path in " +\r
+                    "the virtual network for the flow " + flow.getFlowId().getValue() + ".");\r
+        }\r
+\r
+        virtualNetwork.getVirtualPaths().getVirtualPath().add(virtualPath);\r
+\r
         List<VirtualResource> virtualResources = new ArrayList<VirtualResource>(1);\r
 \r
         VirtualResource virtualResource = new VirtualResourceBuilder()\r
                 .setVirtualResourceId(new VirtualResourceId(UUID.randomUUID().toString()))\r
-                .setVirtualResourceType(VirtualResource.VirtualResourceType.Vnode)\r
-                .setVirtualResourceEntityId(new VirtualResourceEntityId(virtualNode.getNodeId().getValue()))\r
+                .setVirtualResourceType(VirtualResource.VirtualResourceType.Vpath)\r
+                .setVirtualResourceEntityId(new VirtualResourceEntityId(virtualPath.getPathId().getValue()))\r
                 .setOrder(0L)\r
                 .build();\r
         virtualResources.add(virtualResource);\r