Federico Simoncelli has uploaded a new change for review.

Change subject: core: synchronize pool storage domain operations
......................................................................

core: synchronize pool storage domain operations

Storage domain operations attach, detach, activate and deactivate were
historically synchronized on the SPM. In preparation to the storage pool
metadata removal we need to move this synchronization to the engine side
in order to send consistent domains map information when connecting or
refreshing the storage pool.

Change-Id: Ie2d90d9589181802a2722b0e841a6342af0a807c
Signed-off-by: Federico Simoncelli <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ActivateStorageDomainCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AttachStorageDomainToPoolCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DetachStorageDomainFromPoolCommand.java
4 files changed, 52 insertions(+), 30 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/90/25190/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ActivateStorageDomainCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ActivateStorageDomainCommand.java
index 693c40e..147ac9b 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ActivateStorageDomainCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ActivateStorageDomainCommand.java
@@ -3,8 +3,8 @@
 import static 
org.ovirt.engine.core.common.businessentities.NonOperationalReason.STORAGE_DOMAIN_UNREACHABLE;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -33,7 +33,7 @@
 import org.ovirt.engine.core.utils.transaction.TransactionMethod;
 import org.ovirt.engine.core.utils.transaction.TransactionSupport;
 
-@LockIdNameAttribute
+@LockIdNameAttribute(isWait = true)
 @NonTransactiveCommandAttribute(forceCompensation=true)
 public class ActivateStorageDomainCommand<T extends 
StorageDomainPoolParametersBase> extends
         StorageDomainCommandBase<T> {
@@ -128,8 +128,12 @@
 
     @Override
     protected Map<String, Pair<String, String>> getExclusiveLocks() {
-        return Collections.singletonMap(getStorageDomainId().toString(),
+        Map<String, Pair<String, String>> locks = new HashMap<>();
+        locks.put(getStoragePoolId().toString(),
+                LockMessagesMatchUtil.makeLockingPair(LockingGroup.POOL, 
VdcBllMessages.ACTION_TYPE_FAILED_OBJECT_LOCKED));
+        locks.put(getStorageDomainId().toString(),
                 LockMessagesMatchUtil.makeLockingPair(LockingGroup.STORAGE, 
VdcBllMessages.ACTION_TYPE_FAILED_OBJECT_LOCKED));
+        return locks;
     }
 
     @Override
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AttachStorageDomainToPoolCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AttachStorageDomainToPoolCommand.java
index 2158e21..f52aa97 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AttachStorageDomainToPoolCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AttachStorageDomainToPoolCommand.java
@@ -1,9 +1,14 @@
 package org.ovirt.engine.core.bll.storage;
 
 import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
 
+import org.ovirt.engine.core.bll.LockIdNameAttribute;
+import org.ovirt.engine.core.bll.LockMessagesMatchUtil;
 import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute;
 import org.ovirt.engine.core.bll.context.CommandContext;
+import org.ovirt.engine.core.bll.job.ExecutionHandler;
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.action.StorageDomainPoolParametersBase;
 import org.ovirt.engine.core.common.action.StoragePoolWithStoragesParameter;
@@ -15,12 +20,15 @@
 import org.ovirt.engine.core.common.businessentities.StoragePoolIsoMapId;
 import org.ovirt.engine.core.common.businessentities.StoragePoolStatus;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
+import org.ovirt.engine.core.common.locks.LockingGroup;
+import org.ovirt.engine.core.common.utils.Pair;
 import 
org.ovirt.engine.core.common.vdscommands.AttachStorageDomainVDSCommandParameters;
 import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.compat.TransactionScopeOption;
 import org.ovirt.engine.core.utils.transaction.TransactionMethod;
 
+@LockIdNameAttribute(isWait = true)
 @NonTransactiveCommandAttribute(forceCompensation = true)
 public class AttachStorageDomainToPoolCommand<T extends 
StorageDomainPoolParametersBase> extends
         StorageDomainCommandBase<T> {
@@ -108,7 +116,8 @@
         StorageDomainPoolParametersBase activateParameters = new 
StorageDomainPoolParametersBase(getStorageDomain().getId(),
                 getStoragePool().getId());
         getBackend()
-                .runInternalAction(VdcActionType.ActivateStorageDomain, 
activateParameters);
+                .runInternalAction(VdcActionType.ActivateStorageDomain, 
activateParameters,
+                        
ExecutionHandler.createDefaultContexForTasks(getExecutionContext(), getLock()));
     }
 
     @Override
@@ -141,4 +150,14 @@
         addCanDoActionMessage(VdcBllMessages.VAR__TYPE__STORAGE__DOMAIN);
         addCanDoActionMessage(VdcBllMessages.VAR__ACTION__ATTACH);
     }
+
+    @Override
+    protected Map<String, Pair<String, String>> getExclusiveLocks() {
+        Map<String, Pair<String, String>> locks = new HashMap<>();
+        locks.put(getStorageDomainId().toString(),
+                LockMessagesMatchUtil.makeLockingPair(LockingGroup.STORAGE, 
VdcBllMessages.ACTION_TYPE_FAILED_OBJECT_LOCKED));
+        locks.put(getStoragePoolId().toString(),
+                LockMessagesMatchUtil.makeLockingPair(LockingGroup.POOL, 
VdcBllMessages.ACTION_TYPE_FAILED_OBJECT_LOCKED));
+        return locks;
+    }
 }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainCommand.java
index a765299..30dbcde 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DeactivateStorageDomainCommand.java
@@ -1,6 +1,5 @@
 package org.ovirt.engine.core.bll.storage;
 
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
@@ -39,7 +38,7 @@
 import org.ovirt.engine.core.utils.transaction.TransactionMethod;
 import 
org.ovirt.engine.core.vdsbroker.irsbroker.SpmStopOnIrsVDSCommandParameters;
 
-@LockIdNameAttribute
+@LockIdNameAttribute(isWait = true)
 @NonTransactiveCommandAttribute(forceCompensation = true)
 public class DeactivateStorageDomainCommand<T extends 
StorageDomainPoolParametersBase> extends
         StorageDomainCommandBase<T> {
@@ -355,29 +354,11 @@
 
     @Override
     protected Map<String, Pair<String, String>> getExclusiveLocks() {
-        StorageDomain storageDomain = getStorageDomain();
-        if (storageDomain != null) {
-            Map<String, Pair<String, String>> locks = new HashMap<String, 
Pair<String, String>>();
-            locks.put(storageDomain.getId().toString(),
-                    
LockMessagesMatchUtil.makeLockingPair(LockingGroup.STORAGE, 
VdcBllMessages.ACTION_TYPE_FAILED_OBJECT_LOCKED));
-            if (storageDomain.getStorageDomainType() == 
StorageDomainType.Master) {
-                locks.put(storageDomain.getStoragePoolId().toString(),
-                        
LockMessagesMatchUtil.makeLockingPair(LockingGroup.POOL, 
VdcBllMessages.ACTION_TYPE_FAILED_OBJECT_LOCKED));
-            }
-            return locks;
-        }
-        return null;
-    }
-
-    @Override
-    protected Map<String, Pair<String, String>> getSharedLocks() {
-        StorageDomain storageDomain = getStorageDomain();
-        if (storageDomain != null && storageDomain.getStorageDomainType() == 
StorageDomainType.Data
-                && storageDomain.getStorageDomainType() != 
StorageDomainType.Master
-                && storageDomain.getStoragePoolId() != null) {
-            return 
Collections.singletonMap(storageDomain.getStoragePoolId().toString(),
-                    LockMessagesMatchUtil.makeLockingPair(LockingGroup.POOL, 
VdcBllMessages.ACTION_TYPE_FAILED_OBJECT_LOCKED));
-        }
-        return null;
+        Map<String, Pair<String, String>> locks = new HashMap<>();
+        locks.put(getStorageDomainId().toString(),
+                LockMessagesMatchUtil.makeLockingPair(LockingGroup.STORAGE, 
VdcBllMessages.ACTION_TYPE_FAILED_OBJECT_LOCKED));
+        locks.put(getStoragePoolId().toString(),
+                LockMessagesMatchUtil.makeLockingPair(LockingGroup.POOL, 
VdcBllMessages.ACTION_TYPE_FAILED_OBJECT_LOCKED));
+        return locks;
     }
 }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DetachStorageDomainFromPoolCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DetachStorageDomainFromPoolCommand.java
index 78b1ea9..696849b 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DetachStorageDomainFromPoolCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DetachStorageDomainFromPoolCommand.java
@@ -1,5 +1,7 @@
 package org.ovirt.engine.core.bll.storage;
 
+import org.ovirt.engine.core.bll.LockIdNameAttribute;
+import org.ovirt.engine.core.bll.LockMessagesMatchUtil;
 import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute;
 import org.ovirt.engine.core.common.AuditLogType;
 import 
org.ovirt.engine.core.common.action.DetachStorageDomainFromPoolParameters;
@@ -8,6 +10,8 @@
 import org.ovirt.engine.core.common.businessentities.StoragePoolIsoMapId;
 import org.ovirt.engine.core.common.businessentities.StoragePoolIsoMap;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
+import org.ovirt.engine.core.common.locks.LockingGroup;
+import org.ovirt.engine.core.common.utils.Pair;
 import 
org.ovirt.engine.core.common.vdscommands.DetachStorageDomainVDSCommandParameters;
 import org.ovirt.engine.core.common.vdscommands.IrsBaseVDSCommandParameters;
 import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
@@ -17,6 +21,10 @@
 import org.ovirt.engine.core.utils.transaction.TransactionMethod;
 import org.ovirt.engine.core.utils.transaction.TransactionSupport;
 
+import java.util.HashMap;
+import java.util.Map;
+
+@LockIdNameAttribute(isWait = true)
 @NonTransactiveCommandAttribute(forceCompensation=true)
 public class DetachStorageDomainFromPoolCommand<T extends 
DetachStorageDomainFromPoolParameters> extends
         StorageDomainCommandBase<T> {
@@ -93,4 +101,14 @@
         addCanDoActionMessage(VdcBllMessages.VAR__TYPE__STORAGE__DOMAIN);
         addCanDoActionMessage(VdcBllMessages.VAR__ACTION__DETACH);
     }
+
+    @Override
+    protected Map<String, Pair<String, String>> getExclusiveLocks() {
+        Map<String, Pair<String, String>> locks = new HashMap<>();
+        locks.put(getStorageDomainId().toString(),
+                LockMessagesMatchUtil.makeLockingPair(LockingGroup.STORAGE, 
VdcBllMessages.ACTION_TYPE_FAILED_OBJECT_LOCKED));
+        locks.put(getStoragePoolId().toString(),
+                LockMessagesMatchUtil.makeLockingPair(LockingGroup.POOL, 
VdcBllMessages.ACTION_TYPE_FAILED_OBJECT_LOCKED));
+        return locks;
+    }
 }


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ie2d90d9589181802a2722b0e841a6342af0a807c
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Federico Simoncelli <[email protected]>
Gerrit-Reviewer: Allon Mureinik <[email protected]>
Gerrit-Reviewer: [email protected]
Gerrit-Reviewer: oVirt Jenkins CI Server
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to