Liron Ar has uploaded a new change for review.

Change subject: core: when running initVdsOnUp inActive domain can be selected 
as master
......................................................................

core: when running initVdsOnUp inActive domain can be selected as master

When running initVdsOnUp and failing to connect to the storage pool,
there is an attempt to reconstruct - in case of all domains in inactive
status, no domain will be selected and the host will move always to non
operational.

After the proposed change, when attempting to reconstruct during initVdsOnUp
and there's no domain in Active/Unknown status, there will be an attempt
to use an inactive domain.

Change-Id: I9031e2fe0afc161c1a3acdddc9b1e7a58626a159
Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=923116
Signed-off-by: Liron Aravot <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitVdsOnUpCommand.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/ReconstructMasterDomainCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageDomainCommandBase.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ReconstructMasterParameters.java
5 files changed, 36 insertions(+), 11 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/60/13160/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitVdsOnUpCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitVdsOnUpCommand.java
index 72a73f3..c9bdb3e 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitVdsOnUpCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitVdsOnUpCommand.java
@@ -187,7 +187,7 @@
                         Backend.getInstance()
                                 
.runInternalAction(VdcActionType.ReconstructMasterDomain,
                                         new 
ReconstructMasterParameters(vds.getStoragePoolId(),
-                                                masterDomainIdFromDb, 
vds.getId(), true)).getSucceeded();
+                                                masterDomainIdFromDb, 
vds.getId(), true, true)).getSucceeded();
                 result = new EventResult(returnValue, EventType.RECONSTRUCT);
             } else {
                 log.errorFormat("Could not connect host {0} to pool {1}", 
vds.getName(), storagePool
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 a501ed3..44a9c48 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
@@ -40,11 +40,12 @@
     protected Guid _newMasterStorageDomainId = Guid.Empty;
     private StorageDomain _newMaster;
     protected boolean _isLastMaster;
+    protected boolean canChoseInactiveDomainAsMaster;
     private VDS spm;
 
     protected StorageDomain getNewMaster(boolean duringReconstruct) {
         if (_newMaster == null && 
Guid.Empty.equals(_newMasterStorageDomainId)) {
-            _newMaster = electNewMaster(duringReconstruct);
+            _newMaster = electNewMaster(duringReconstruct, 
canChoseInactiveDomainAsMaster);
         } else if (_newMaster == null) {
             _newMaster = getStorageDomainDAO().get(_newMasterStorageDomainId);
         }
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 fdfc873..11bea80 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
@@ -48,6 +48,7 @@
     public ReconstructMasterDomainCommand(T parameters) {
         super(parameters);
         _newMasterStorageDomainId = parameters.getNewMasterDomainId();
+        canChoseInactiveDomainAsMaster = 
parameters.isCanChoseInactiveDomainAsMaster();
     }
 
     @Override
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageDomainCommandBase.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageDomainCommandBase.java
index 36972e2..10d26c9 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageDomainCommandBase.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageDomainCommandBase.java
@@ -282,13 +282,13 @@
     }
 
     /**
-     *  The new master must  be a data domain which is in Active status and not
-     * reported by any vdsm as problematic. In case that all domains reported 
as problematic a first Active data domain
-     * will be returned
+     *  The new master is a data domain which is preferred to be in 
Active/Unknown status, if selectInactiveWhenNoActiveUnknownDomains
+     * is set to True, an Inactive domain will be returned in case that no 
domain in Active/Unknown status was found.
      * @return an elected master domain or null
      */
-    protected StorageDomain electNewMaster(boolean duringReconstruct) {
+    protected StorageDomain electNewMaster(boolean duringReconstruct, boolean 
selectInactiveWhenNoActiveUnknownDomains) {
         StorageDomain newMaster = null;
+        StorageDomain suggestedInactiveDomain = null;
         if (getStoragePool() != null) {
             List<StorageDomain> storageDomains = 
getStorageDomainDAO().getAllForStoragePool(getStoragePool().getId());
             Collections.sort(storageDomains, 
LastTimeUsedAsMasterComp.instance);
@@ -297,15 +297,28 @@
                 for (StorageDomain dbStorageDomain : storageDomains) {
                     if ((storageDomain == null || (duringReconstruct || 
!dbStorageDomain.getId()
                             .equals(storageDomain.getId())))
-                            && (dbStorageDomain.getStatus() == 
StorageDomainStatus.Active || dbStorageDomain.getStatus() == 
StorageDomainStatus.Unknown)
                             && dbStorageDomain.getStorageDomainType() == 
StorageDomainType.Data) {
-                        newMaster = dbStorageDomain;
-                        break;
+                        if (dbStorageDomain.getStatus() == 
StorageDomainStatus.Active
+                                || dbStorageDomain.getStatus() == 
StorageDomainStatus.Unknown) {
+                            newMaster = dbStorageDomain;
+                            break;
+                        } else if (selectInactiveWhenNoActiveUnknownDomains && 
suggestedInactiveDomain == null
+                                && dbStorageDomain.getStatus() == 
StorageDomainStatus.InActive) {
+                            suggestedInactiveDomain = dbStorageDomain;
+                        }
                     }
                 }
             }
         }
-        return newMaster;
+        return newMaster != null ? newMaster : suggestedInactiveDomain;
+    }
+
+    /**
+     * returns new master domain which is in Active/Unknown status
+     * @return an elected master domain or null
+     */
+    protected StorageDomain electNewMaster(boolean duringReconstruct) {
+        return electNewMaster(duringReconstruct, false);
     }
 
     @Override
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ReconstructMasterParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ReconstructMasterParameters.java
index f74e2a6..0cffca0 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ReconstructMasterParameters.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ReconstructMasterParameters.java
@@ -6,6 +6,7 @@
     private static final long serialVersionUID = -640521915810322901L;
 
     private Guid privateNewMasterDomainId = Guid.Empty;
+    private boolean canChoseInactiveDomainAsMaster;
 
     public ReconstructMasterParameters() {
     }
@@ -15,10 +16,11 @@
         setInactive(isInactive);
     }
 
-    public ReconstructMasterParameters(Guid storagePoolId, Guid 
storageDomainId, Guid vdsId, boolean isInactive) {
+    public ReconstructMasterParameters(Guid storagePoolId, Guid 
storageDomainId, Guid vdsId, boolean isInactive, boolean 
canChoseInactiveDomainAsMaster) {
         super(storageDomainId, storagePoolId);
         setInactive(isInactive);
         setVdsId(vdsId);
+        setCanChoseInactiveDomainAsMaster(canChoseInactiveDomainAsMaster);
     }
 
     public ReconstructMasterParameters(Guid storagePoolId, Guid 
newMasterDomainId) {
@@ -26,6 +28,14 @@
         this.privateNewMasterDomainId = newMasterDomainId;
     }
 
+    public boolean isCanChoseInactiveDomainAsMaster() {
+        return canChoseInactiveDomainAsMaster;
+    }
+
+    public void setCanChoseInactiveDomainAsMaster(boolean 
canChoseInactiveDomainAsMaster) {
+        this.canChoseInactiveDomainAsMaster = canChoseInactiveDomainAsMaster;
+    }
+
     public Guid getNewMasterDomainId() {
         return privateNewMasterDomainId;
     }


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

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

Reply via email to