Muli Salem has uploaded a new change for review.

Change subject: engine: Free Mac Addresses in ImportVmCommand (#864346)
......................................................................

engine: Free Mac Addresses in ImportVmCommand (#864346)

This patch adds a list of mac addresses that gathers all
the macs that are added during ImportVmCommand, in case
the command fails and these macs need to be released.

Change-Id: I228d747be7e2c456e1777a51fd6fdfeca518bbbb
Bug-Url: https://bugzilla.redhat.com/864346
Signed-off-by: Muli Salem <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MacPoolManager.java
2 files changed, 24 insertions(+), 8 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/02/9302/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java
index 6cf5074..0835a4b 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java
@@ -91,6 +91,7 @@
     private List<DiskImage> imageList;
     private List<Guid> diskGuidList = new ArrayList<Guid>();
     private List<Guid> imageGuidList = new ArrayList<Guid>();
+    private List<String> macsAdded = new ArrayList<String>();
 
     public ImportVmCommand(ImportVmParameters parameters) {
         super(parameters);
@@ -485,15 +486,21 @@
 
     @Override
     protected void executeCommand() {
-        addVmToDb();
-        VM vm = getVm();
-        // if there aren't any images- we can just perform the end
-        // vm related ops
-        if (!hasSnappableDisks(vm)) {
-            endVmRelatedOps();
-        } else {
-            processImages();
+        try {
+            addVmToDb();
+            VM vm = getVm();
+            // if there aren't any images- we can just perform the end
+            // vm related ops
+            if (!hasSnappableDisks(vm)) {
+                endVmRelatedOps();
+            } else {
+                processImages();
+            }
+        } catch (RuntimeException e) {
+            MacPoolManager.getInstance().freeMacs(macsAdded);
+            throw e;
         }
+
         setSucceeded(true);
     }
 
@@ -836,6 +843,9 @@
             }
 
             vmInterfaceManager.add(iface, getCompensationContext(), 
getParameters().isImportAsNewEntity());
+
+            // If Exception was not thrown
+            macsAdded.add(iface.getMacAddress());
         }
 
         auditInvalidInterfaces(invalidNetworkNames, invalidIfaceNames);
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MacPoolManager.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MacPoolManager.java
index 1f032d1..8145e9a 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MacPoolManager.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MacPoolManager.java
@@ -207,5 +207,11 @@
         }
     }
 
+    public void freeMacs(List<String> macs) {
+        for (String mac : macs) {
+            freeMac(mac);
+        }
+    }
+
     private static Log log = LogFactory.getLog(MacPoolManager.class);
 }


--
To view, visit http://gerrit.ovirt.org/9302
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I228d747be7e2c456e1777a51fd6fdfeca518bbbb
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Muli Salem <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to