From 3691ac9cddffc0f1635fbfb5c8418c882299e482 Mon Sep 17 00:00:00 2001 From: Zhigang Ji Date: Tue, 15 Dec 2015 20:00:57 +0800 Subject: [PATCH] Modify the resolution for deny action in ActionResolver. Change-Id: I7e19d29063984d888d5db4fe9957c804acfe674b Signed-off-by: Zhigang Ji --- .../nemo/intent/action/ActionResolver.java | 33 ++++++++++++++++--- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/nemo-impl/src/main/java/org/opendaylight/nemo/intent/action/ActionResolver.java b/nemo-impl/src/main/java/org/opendaylight/nemo/intent/action/ActionResolver.java index 2b01a48..87e6a1e 100644 --- a/nemo-impl/src/main/java/org/opendaylight/nemo/intent/action/ActionResolver.java +++ b/nemo-impl/src/main/java/org/opendaylight/nemo/intent/action/ActionResolver.java @@ -249,20 +249,45 @@ public class ActionResolver { List virtualNodes = virtualNetwork.getVirtualNodes().getVirtualNode(); List intentVnMappingResults = userIntentVnMapping.getIntentVnMappingResult(); - VirtualNode virtualNode = ActionResolverUtils + VirtualNode sourceVirtualNode = ActionResolverUtils .getSourceVirtualRouterOfFlow(virtualNodes, flow, nodes, intentVnMappingResults); - if ( null == virtualNode ) { + if ( null == sourceVirtualNode ) { throw new IntentResolutionException("Can not get the source virtual node " + "of the flow " + flow.getFlowId().getValue() + "."); } + VirtualNode destinationVirtualNode = ActionResolverUtils + .getDestinationVirtualRouterOfFlow(virtualNodes, flow, nodes, intentVnMappingResults); + + if ( null == destinationVirtualNode ) { + throw new IntentResolutionException("Can not get the destination virtual node " + + "of the flow " + flow.getFlowId().getValue() + "."); + } + + VNComputationUnit vnComputationUnit = vnComputationUnits.get(user.getUserId()); + + if ( null == vnComputationUnit ) { + throw new IntentResolutionException("Can not get the virtual network computation " + + "unit for the user " + user.getUserId().getValue() + "."); + } + + VirtualPath virtualPath = vnComputationUnit + .computePath(sourceVirtualNode.getNodeId(), destinationVirtualNode.getNodeId()); + + if ( null == virtualPath || virtualPath.getVirtualLink().isEmpty() ) { + throw new IntentResolutionException("Can not compute an available virtual path in " + + "the virtual network for the flow " + flow.getFlowId().getValue() + "."); + } + + virtualNetwork.getVirtualPaths().getVirtualPath().add(virtualPath); + List virtualResources = new ArrayList(1); VirtualResource virtualResource = new VirtualResourceBuilder() .setVirtualResourceId(new VirtualResourceId(UUID.randomUUID().toString())) - .setVirtualResourceType(VirtualResource.VirtualResourceType.Vnode) - .setVirtualResourceEntityId(new VirtualResourceEntityId(virtualNode.getNodeId().getValue())) + .setVirtualResourceType(VirtualResource.VirtualResourceType.Vpath) + .setVirtualResourceEntityId(new VirtualResourceEntityId(virtualPath.getPathId().getValue())) .setOrder(0L) .build(); virtualResources.add(virtualResource); -- 2.36.6