Arik Hadas has uploaded a new change for review.

Change subject: core: in-memory lock for imported vm
......................................................................

core: in-memory lock for imported vm

Lock the VM that is being imported with in-memory lock for the whole
import operation.

Change-Id: I13970306bfc01e11a1d130f5ae818971e18c9634
Signed-off-by: Arik Hadas <[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/ImportVmCommandBase.java
2 files changed, 26 insertions(+), 14 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/32/38032/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 89f2bae..9bdf3d7 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
@@ -163,14 +163,6 @@
                         getVmIsBeingImportedMessage()));
     }
 
-    private String getVmIsBeingImportedMessage() {
-        StringBuilder builder = new 
StringBuilder(VdcBllMessages.ACTION_TYPE_FAILED_VM_IS_BEING_IMPORTED.name());
-        if (getVmName() != null) {
-            builder.append(String.format("$VmName %1$s", getVmName()));
-        }
-        return builder.toString();
-    }
-
     protected ImportVmCommand(Guid commandId) {
         super(commandId);
     }
@@ -261,7 +253,7 @@
     }
 
     private void initImportClonedVm() {
-        Guid guid = Guid.newGuid();
+        Guid guid = getParameters().getVm().getId();
         getVm().setId(guid);
         setVmId(guid);
         getVm().setName(getParameters().getVm().getName());
@@ -318,7 +310,7 @@
         VM vm = LinqUtils.firstOrNull(vms, new Predicate<VM>() {
             @Override
             public boolean eval(VM evalVm) {
-                return evalVm.getId().equals(getParameters().getVm().getId());
+                return evalVm.getId().equals(getParameters().getVmId());
             }
         });
 
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommandBase.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommandBase.java
index 9a5565b..561e7e5 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommandBase.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommandBase.java
@@ -2,7 +2,6 @@
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -66,18 +65,39 @@
     }
 
     @Override
+    @SuppressWarnings("serial")
     protected Map<String, Pair<String, String>> getExclusiveLocks() {
         if (getParameters().getVm() != null && 
!StringUtils.isBlank(getParameters().getVm().getName())) {
-            return Collections.singletonMap(getParameters().getVm().getName(),
-                    LockMessagesMatchUtil.makeLockingPair(LockingGroup.VM_NAME,
-                            
VdcBllMessages.ACTION_TYPE_FAILED_NAME_ALREADY_USED));
+            return new HashMap<String, Pair<String, String>>() {
+                {
+                    put(getParameters().getVm().getName(),
+                            
LockMessagesMatchUtil.makeLockingPair(LockingGroup.VM_NAME,
+                                    
VdcBllMessages.ACTION_TYPE_FAILED_NAME_ALREADY_USED));
+
+                    put(getParameters().getVm().getId().toString(),
+                            
LockMessagesMatchUtil.makeLockingPair(LockingGroup.VM,
+                                    getVmIsBeingImportedMessage()));
+                }
+            };
         }
+
         return null;
+    }
+
+    protected String getVmIsBeingImportedMessage() {
+        StringBuilder builder = new 
StringBuilder(VdcBllMessages.ACTION_TYPE_FAILED_VM_IS_BEING_IMPORTED.name());
+        if (getVmName() != null) {
+            builder.append(String.format("$VmName %1$s", getVmName()));
+        }
+        return builder.toString();
     }
 
     @Override
     protected void postConstruct() {
         T parameters = getParameters();
+        if (parameters.isImportAsNewEntity() && 
parameters.getVmId().equals(parameters.getVm().getId())) {
+            parameters.getVm().setId(Guid.newGuid());
+        }
         setStoragePoolId(parameters.getStoragePoolId());
         imageToDestinationDomainMap = 
parameters.getImageToDestinationDomainMap();
     }


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

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

Reply via email to