Liron Ar has uploaded a new change for review. Change subject: core: change domains status to unknown when there are no reporting hosts ......................................................................
core: change domains status to unknown when there are no reporting hosts Currently the monitored pool domains 'change' their statuses according to the reports received by the pool hosts that are in status UP. When there are no reporting hosts - the status of the pool domains that are monitored should be changed to unknown, because otherwise nothing will trigger the status change. In that case (an example) we might be left with a domain in 'active' status although there are no reporting hosts. Change-Id: I8091a4864711aeccee41effb1bc7d9823a1870c7 Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=975742 Signed-off-by: Liron Aravot <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/SetStoragePoolStatusCommand.java D backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/StoragePoolDomainHelper.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsBrokerCommand.java A backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/storage/StoragePoolDomainHelper.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ReconstructMasterVDSCommand.java 5 files changed, 90 insertions(+), 48 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/77/26077/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/SetStoragePoolStatusCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/SetStoragePoolStatusCommand.java index 1f521a9..94fe74e 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/SetStoragePoolStatusCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/SetStoragePoolStatusCommand.java @@ -1,6 +1,6 @@ package org.ovirt.engine.core.bll.storage; -import java.util.List; +import java.util.EnumSet; import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.bll.Backend; @@ -8,8 +8,8 @@ import org.ovirt.engine.core.common.action.SetStoragePoolStatusParameters; import org.ovirt.engine.core.common.businessentities.StorageDomainStatus; import org.ovirt.engine.core.common.businessentities.StoragePoolStatus; -import org.ovirt.engine.core.common.businessentities.StoragePoolIsoMap; import org.ovirt.engine.core.dal.dbbroker.DbFacade; +import org.ovirt.engine.core.vdsbroker.storage.StoragePoolDomainHelper; public class SetStoragePoolStatusCommand<T extends SetStoragePoolStatusParameters> extends StorageHandlingCommandBase<T> { @@ -24,17 +24,10 @@ DbFacade.getInstance().getStoragePoolDao().updateStatus(getStoragePool().getId(), getStoragePool().getStatus()); if (getParameters().getStatus() == StoragePoolStatus.NonResponsive || getParameters().getStatus() == StoragePoolStatus.NotOperational) { - List<StoragePoolIsoMap> storagesStatusInPool = DbFacade.getInstance() - .getStoragePoolIsoMapDao().getAllForStoragePool(getStoragePool().getId()); - for (StoragePoolIsoMap storageStatusInPool : storagesStatusInPool) { - if (storageStatusInPool.getStatus() != null - && storageStatusInPool.getStatus() == StorageDomainStatus.Active) { - storageStatusInPool.setStatus(StorageDomainStatus.Unknown); - DbFacade.getInstance() - .getStoragePoolIsoMapDao() - .updateStatus(storageStatusInPool.getId(), storageStatusInPool.getStatus()); - } - } + StoragePoolDomainHelper.updateApplicablePoolDomainsStatuses(getStoragePool().getId(), + EnumSet.of(StorageDomainStatus.Active), + StorageDomainStatus.Unknown, + null); } StoragePoolStatusHandler.poolStatusChanged(getStoragePool().getId(), getStoragePool().getStatus()); setSucceeded(true); diff --git a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/StoragePoolDomainHelper.java b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/StoragePoolDomainHelper.java deleted file mode 100644 index f70e1e4..0000000 --- a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/StoragePoolDomainHelper.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.ovirt.engine.core.utils; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.ovirt.engine.core.common.businessentities.StorageDomainStatus; -import org.ovirt.engine.core.common.businessentities.StoragePoolIsoMap; - - -public class StoragePoolDomainHelper { - - public static Map<String, String> buildStoragePoolDomainsMap(List<StoragePoolIsoMap> storagePoolIsoMaps) { - Map<String, String> storageDomains = new HashMap<String, String>(); - - for (StoragePoolIsoMap domain : storagePoolIsoMaps) { - if (domain.getStatus() == StorageDomainStatus.Maintenance) { - storageDomains.put(domain.getstorage_id().toString(), "attached"); - } else { - storageDomains.put(domain.getstorage_id().toString(), - StorageDomainStatus.Active.toString().toLowerCase()); - } - } - - return storageDomains; - } - -} diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsBrokerCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsBrokerCommand.java index 10380d9..11342cc 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsBrokerCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsBrokerCommand.java @@ -78,6 +78,7 @@ import org.ovirt.engine.core.utils.transaction.TransactionMethod; import org.ovirt.engine.core.utils.transaction.TransactionSupport; import org.ovirt.engine.core.vdsbroker.ResourceManager; +import org.ovirt.engine.core.vdsbroker.storage.StoragePoolDomainHelper; import org.ovirt.engine.core.vdsbroker.vdsbroker.BrokerCommandBase; import org.ovirt.engine.core.vdsbroker.vdsbroker.VDSExceptionBase; import org.ovirt.engine.core.vdsbroker.vdsbroker.VDSNetworkException; @@ -86,6 +87,7 @@ @Logged(errorLevel = LogLevel.ERROR) public abstract class IrsBrokerCommand<P extends IrsBaseVDSCommandParameters> extends BrokerCommandBase<P> { private static Map<Guid, IrsProxyData> _irsProxyData = new ConcurrentHashMap<Guid, IrsProxyData>(); + private static final VDSStatus reportingVdsStatus = VDSStatus.Up; /** * process received domain monitoring information from a given vds if necessary (according to it's status). @@ -95,7 +97,7 @@ */ public static void updateVdsDomainsData(VDS vds, Guid storagePoolId, ArrayList<VDSDomainsData> vdsDomainData) { - if (vds.getStatus() == VDSStatus.Up) { + if (vds.getStatus() == reportingVdsStatus) { IrsProxyData proxy = _irsProxyData.get(storagePoolId); if (proxy != null) { proxy.updateVdsDomainsData(vds.getId(), vds.getName(), vdsDomainData); @@ -188,11 +190,24 @@ if (!_disposed) { StoragePool storagePool = DbFacade.getInstance().getStoragePoolDao() .get(_storagePoolId); - if (storagePool != null - && (storagePool.getStatus() == StoragePoolStatus.Up - || storagePool.getStatus() == StoragePoolStatus.NonResponsive || storagePool - .getStatus() == StoragePoolStatus.Contend)) { - proceedStoragePoolStats(storagePool); + + if (storagePool != null) { + // when there are no hosts in status up, it means that there shouldn't be domain monitoring + // so all the domains need to move to "unknown" status as otherwise their status won't change. + if (DbFacade.getInstance() + .getVdsDao() + .getAllForStoragePoolAndStatus(_storagePoolId, reportingVdsStatus) + .isEmpty()) { + StoragePoolDomainHelper.updateApplicablePoolDomainsStatuses(_storagePoolId, + StoragePoolDomainHelper.storageDomainMonitoredStatus, + StorageDomainStatus.Unknown, "no reporting hosts"); + } + + if (storagePool.getStatus() == StoragePoolStatus.Up + || storagePool.getStatus() == StoragePoolStatus.NonResponsive || storagePool + .getStatus() == StoragePoolStatus.Contend) { + proceedStoragePoolStats(storagePool); + } } } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/storage/StoragePoolDomainHelper.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/storage/StoragePoolDomainHelper.java new file mode 100644 index 0000000..a27d642 --- /dev/null +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/storage/StoragePoolDomainHelper.java @@ -0,0 +1,62 @@ +package org.ovirt.engine.core.vdsbroker.storage; + +import java.util.Collections; +import java.util.EnumSet; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.ovirt.engine.core.common.businessentities.StorageDomainStatus; +import org.ovirt.engine.core.common.businessentities.StoragePoolIsoMap; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dal.dbbroker.DbFacade; +import org.ovirt.engine.core.utils.log.Log; +import org.ovirt.engine.core.utils.log.LogFactory; + + +public class StoragePoolDomainHelper { + + private static final Log log = LogFactory.getLog(StoragePoolDomainHelper.class); + + public static final Set<StorageDomainStatus> storageDomainMonitoredStatus = + Collections.unmodifiableSet(EnumSet.of(StorageDomainStatus.InActive, StorageDomainStatus.Active)); + + public static Map<String, String> buildStoragePoolDomainsMap(List<StoragePoolIsoMap> storagePoolIsoMaps) { + Map<String, String> storageDomains = new HashMap<String, String>(); + + for (StoragePoolIsoMap domain : storagePoolIsoMaps) { + if (domain.getStatus() == StorageDomainStatus.Maintenance) { + storageDomains.put(domain.getstorage_id().toString(), "attached"); + } else { + storageDomains.put(domain.getstorage_id().toString(), + StorageDomainStatus.Active.toString().toLowerCase()); + } + } + + return storageDomains; + } + + public static void updateApplicablePoolDomainsStatuses(Guid storagePoolId, + Set<StorageDomainStatus> applicableStatusesForUpdate, + StorageDomainStatus newStatus, String reason) { + List<StoragePoolIsoMap> storagesStatusInPool = DbFacade.getInstance() + .getStoragePoolIsoMapDao().getAllForStoragePool(storagePoolId); + for (StoragePoolIsoMap storageStatusInPool : storagesStatusInPool) { + if (storageStatusInPool.getStatus() != null + && storageStatusInPool.getStatus() != newStatus + && applicableStatusesForUpdate.contains(storageStatusInPool.getStatus())) { + log.infoFormat("Storage Pool {0} - Updating Storage Domain {1} status from {2} to {3}, reason : {4}", + storagePoolId, + storageStatusInPool.getstorage_id(), + storageStatusInPool.getStatus().name(), + newStatus.name(), + reason); + storageStatusInPool.setStatus(newStatus); + DbFacade.getInstance() + .getStoragePoolIsoMapDao() + .updateStatus(storageStatusInPool.getId(), storageStatusInPool.getStatus()); + } + } + } +} diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ReconstructMasterVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ReconstructMasterVDSCommand.java index 59b6ae5..c3e16b4 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ReconstructMasterVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ReconstructMasterVDSCommand.java @@ -4,8 +4,8 @@ import org.ovirt.engine.core.common.config.Config; import org.ovirt.engine.core.common.config.ConfigValues; -import org.ovirt.engine.core.utils.StoragePoolDomainHelper; import org.ovirt.engine.core.common.vdscommands.ReconstructMasterVDSCommandParameters; +import org.ovirt.engine.core.vdsbroker.storage.StoragePoolDomainHelper; public class ReconstructMasterVDSCommand<P extends ReconstructMasterVDSCommandParameters> extends VdsBrokerCommand<P> { public ReconstructMasterVDSCommand(P parameters) { -- To view, visit http://gerrit.ovirt.org/26077 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I8091a4864711aeccee41effb1bc7d9823a1870c7 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.4 Gerrit-Owner: Liron Ar <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
