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
