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

Reply via email to