Repository: cloudstack
Updated Branches:
  refs/heads/master 57ee142de -> 67876b215


CLOUDSTACK-7191:On restartNetwork destroy the VR immediatley, instead of
cleanup the rules then destroy

fix adds a provision to specify if cleanup is needed on network on
shutdown. VR is marked as to not to require network rules clean up on
network shutdown as the VR is destroyed and recreated.

ran the simulator tests that test network life cycle


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/67876b21
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/67876b21
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/67876b21

Branch: refs/heads/master
Commit: 67876b215ef5217b3d306b3642a38a3708a30494
Parents: 57ee142
Author: Murali Reddy <muralimmre...@gmail.com>
Authored: Mon Jul 28 16:14:50 2014 +0530
Committer: Murali Reddy <muralimmre...@gmail.com>
Committed: Mon Jul 28 17:09:42 2014 +0530

----------------------------------------------------------------------
 api/src/com/cloud/network/Network.java            | 18 +++++++++++++++++-
 .../engine/orchestration/NetworkOrchestrator.java | 17 ++++++++++++++---
 2 files changed, 31 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/67876b21/api/src/com/cloud/network/Network.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/network/Network.java 
b/api/src/com/cloud/network/Network.java
index 341c6c4..55502df 100644
--- a/api/src/com/cloud/network/Network.java
+++ b/api/src/com/cloud/network/Network.java
@@ -112,7 +112,7 @@ public interface Network extends ControlledEntity, 
StateObject<Network.State>, I
     public static class Provider {
         private static List<Provider> supportedProviders = new 
ArrayList<Provider>();
 
-        public static final Provider VirtualRouter = new 
Provider("VirtualRouter", false);
+        public static final Provider VirtualRouter = new 
Provider("VirtualRouter", false, false);
         public static final Provider JuniperContrailRouter = new 
Provider("JuniperContrailRouter", false);
         public static final Provider JuniperContrailVpcRouter = new 
Provider("JuniperContrailVpcRouter", false);
         public static final Provider JuniperSRX = new Provider("JuniperSRX", 
true);
@@ -140,9 +140,21 @@ public interface Network extends ControlledEntity, 
StateObject<Network.State>, I
         private final String name;
         private final boolean isExternal;
 
+        // set to true, if on network shutdown resources (acquired/configured 
at implemented phase) needed to cleaned up. set to false
+        // if no clean-up is required ( for e.g appliance based providers like 
VirtualRouter, VM is destroyed so there is no need to cleanup).
+        private final boolean needCleanupOnShutdown;
+
         public Provider(String name, boolean isExternal) {
             this.name = name;
             this.isExternal = isExternal;
+            needCleanupOnShutdown = true;
+            supportedProviders.add(this);
+        }
+
+        public Provider(String name, boolean isExternal, boolean 
needCleanupOnShutdown) {
+            this.name = name;
+            this.isExternal = isExternal;
+            this.needCleanupOnShutdown = needCleanupOnShutdown;
             supportedProviders.add(this);
         }
 
@@ -154,6 +166,10 @@ public interface Network extends ControlledEntity, 
StateObject<Network.State>, I
             return isExternal;
         }
 
+        public boolean cleanupNeededOnShutdown() {
+            return needCleanupOnShutdown;
+        }
+
         public static Provider getProvider(String providerName) {
             for (Provider provider : supportedProviders) {
                 if (provider.getName().equalsIgnoreCase(providerName)) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/67876b21/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
----------------------------------------------------------------------
diff --git 
a/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
 
b/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
index 265515c..20f8212 100755
--- 
a/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
+++ 
b/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java
@@ -2095,11 +2095,24 @@ public class NetworkOrchestrator extends ManagerBase 
implements NetworkOrchestra
 
     @Override
     public boolean shutdownNetworkElementsAndResources(ReservationContext 
context, boolean cleanupElements, Network network) {
+
+        // get providers to shutdown
+        List<Provider> providersToShutdown = 
getNetworkProviders(network.getId());
+
         // 1) Cleanup all the rules for the network. If it fails, just log the 
failure and proceed with shutting down
         // the elements
         boolean cleanupResult = true;
+        boolean cleanupNeeded = false;
         try {
-            cleanupResult = shutdownNetworkResources(network.getId(), 
context.getAccount(), context.getCaller().getId());
+            for (Provider provider: providersToShutdown) {
+                if (provider.cleanupNeededOnShutdown()) {
+                    cleanupNeeded = true;
+                    break;
+                }
+            }
+            if (cleanupNeeded) {
+                cleanupResult = shutdownNetworkResources(network.getId(), 
context.getAccount(), context.getCaller().getId());
+            }
         } catch (Exception ex) {
             s_logger.warn("shutdownNetworkRules failed during the network " + 
network + " shutdown due to ", ex);
         } finally {
@@ -2110,8 +2123,6 @@ public class NetworkOrchestrator extends ManagerBase 
implements NetworkOrchestra
         }
 
         // 2) Shutdown all the network elements
-        // get providers to shutdown
-        List<Provider> providersToShutdown = 
getNetworkProviders(network.getId());
         boolean success = true;
         for (NetworkElement element : networkElements) {
             if (providersToShutdown.contains(element.getProvider())) {

Reply via email to