Liron Aravot has uploaded a new change for review. Change subject: core: WIP : prevent execute simultaneously ReconstructsMasterDomain on same pool (#845838) ......................................................................
core: WIP : prevent execute simultaneously ReconstructsMasterDomain on same pool (#845838) https://bugzilla.redhat.com/845838 ReconsturctMasterDomain command can be triggered from the GUI (by executing Reinitialize DC) and by IrsBrokerCommand timer which may cause to two different ReconstructMasterDomain commands run on the same pool simultanously, this patch prevent it by add new type of lock - RECONSTRUCT_POOL and not make use of existing lock type of pool (POOL) in order to prevent deadlock. Change-Id: I99393aea692a1bb2c6b6cb0b07329275bd3e7b7f Signed-off-by: Liron Aravot <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ReconstructMasterDomainCommand.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/locks/LockingGroup.java 2 files changed, 15 insertions(+), 1 deletion(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/64/7964/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ReconstructMasterDomainCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ReconstructMasterDomainCommand.java index 7a7aac1..ffddfa4 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ReconstructMasterDomainCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ReconstructMasterDomainCommand.java @@ -1,7 +1,9 @@ package org.ovirt.engine.core.bll.storage; import java.text.MessageFormat; +import java.util.Collections; import java.util.List; +import java.util.Map; import org.ovirt.engine.core.bll.Backend; import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute; @@ -18,6 +20,7 @@ import org.ovirt.engine.core.common.errors.VdcBLLException; import org.ovirt.engine.core.common.errors.VdcBllErrors; import org.ovirt.engine.core.common.interfaces.SearchType; +import org.ovirt.engine.core.common.locks.LockingGroup; import org.ovirt.engine.core.common.queries.SearchParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.common.vdscommands.ConnectStoragePoolVDSCommandParameters; @@ -255,6 +258,16 @@ } @Override + protected Map<String, String> getExclusiveLocks() { + return Collections.singletonMap(getStoragePoolId().toString(), LockingGroup.RECONSTRUCT_POOL.name()); + } + + @Override + protected Map<String, String> getSharedLocks() { + return null; + } + + @Override public AuditLogType getAuditLogTypeValue() { return getSucceeded() ? _isLastMaster ? AuditLogType.RECONSTRUCT_MASTER_FAILED_NO_MASTER : AuditLogType.RECONSTRUCT_MASTER_DONE : AuditLogType.RECONSTRUCT_MASTER_FAILED; diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/locks/LockingGroup.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/locks/LockingGroup.java index 88ecaff..3c4c91e 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/locks/LockingGroup.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/locks/LockingGroup.java @@ -12,6 +12,7 @@ VM_NAME, STORAGE, REGISTER_VDS, - VM_SNAPSHOTS; + VM_SNAPSHOTS, + RECONSTRUCT_POOL; } -- To view, visit http://gerrit.ovirt.org/7964 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I99393aea692a1bb2c6b6cb0b07329275bd3e7b7f Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Liron Aravot <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
