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
