Federico Simoncelli has uploaded a new change for review. Change subject: core: send domains map on connectStoragePool ......................................................................
core: send domains map on connectStoragePool Change-Id: Ic16034c6757959e5d0445814a8acc2221a74f6aa Signed-off-by: Federico Simoncelli <fsimo...@redhat.com> --- 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/ActivateStorageDomainCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AfterDeactivateSingleAsyncOperation.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ConntectVDSToPoolAndDomains.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/RefreshPoolSingleAsyncOperation.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RefreshStoragePoolAndDisconnectAsyncOperation.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/FeatureSupported.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/ConnectStoragePoolVDSCommandParameters.java D backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/RefreshStoragePoolVDSCommandParameters.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsBrokerCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ConnectStoragePoolVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java D backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/RefreshStoragePoolVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java M packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql 19 files changed, 190 insertions(+), 168 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/12/22712/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 d6e5cae..5733fdc 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 @@ -224,9 +224,7 @@ VDSError error = null; try { VDSReturnValue vdsReturnValue = runVdsCommand(VDSCommandType.ConnectStoragePool, - new ConnectStoragePoolVDSCommandParameters(vds.getId(), storagePoolId, - vds.getVdsSpmId(), masterDomain.getId(), - storagePool.getmaster_domain_version())); + new ConnectStoragePoolVDSCommandParameters(vds, storagePool)); if (!vdsReturnValue.getSucceeded()) { error = vdsReturnValue.getVdsError(); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ActivateStorageDomainCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ActivateStorageDomainCommand.java index 3787421..462c0b6 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ActivateStorageDomainCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ActivateStorageDomainCommand.java @@ -74,7 +74,7 @@ freeLock(); log.infoFormat("ActivateStorage Domain. Before Connect all hosts to pool. Time:{0}", new Date()); - connectAllHostsToPool(); + connectAllHostsToPool(); // TBD: really needed? runVdsCommand(VDSCommandType.ActivateStorageDomain, new ActivateStorageDomainVDSCommandParameters(getStoragePool().getId(), getStorageDomain().getId())); log.infoFormat("ActivateStorage Domain. After Connect all hosts to pool. Time:{0}", new Date()); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AfterDeactivateSingleAsyncOperation.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AfterDeactivateSingleAsyncOperation.java index 7a9279e..78fc213 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AfterDeactivateSingleAsyncOperation.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AfterDeactivateSingleAsyncOperation.java @@ -5,10 +5,9 @@ import org.ovirt.engine.core.common.businessentities.StoragePool; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VdsSpmStatus; -import org.ovirt.engine.core.common.vdscommands.RefreshStoragePoolVDSCommandParameters; +import org.ovirt.engine.core.common.vdscommands.ConnectStoragePoolVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.VDSCommandType; 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; @@ -29,18 +28,9 @@ log.infoFormat("After deactivate treatment vds: {0},pool {1}", getVdss().get(iterationId).getName(), getStoragePool().getName()); if (!_isLastMaster) { - Backend.getInstance() - .getResourceManager() - .RunVdsCommand( - VDSCommandType.RefreshStoragePool, - new RefreshStoragePoolVDSCommandParameters(getVdss().get(iterationId).getId(), - getStoragePool().getId(), - !_newMasterStorageDomainId.equals(Guid.Empty) ? _newMasterStorageDomainId - : DbFacade.getInstance() - .getStorageDomainDao() - .getMasterStorageDomainIdForPool( - getStoragePool().getId()), getStoragePool() - .getmaster_domain_version())); + Backend.getInstance().getResourceManager().RunVdsCommand( + VDSCommandType.ConnectStoragePool, + new ConnectStoragePoolVDSCommandParameters(getVdss().get(iterationId), getStoragePool(), true)); } if (getVdss().get(iterationId).getSpmStatus() == VdsSpmStatus.None) { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ConntectVDSToPoolAndDomains.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ConntectVDSToPoolAndDomains.java index 49f5246..a77dfa2 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ConntectVDSToPoolAndDomains.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ConntectVDSToPoolAndDomains.java @@ -11,7 +11,7 @@ import org.ovirt.engine.core.utils.log.LogFactory; import org.ovirt.engine.core.vdsbroker.ResourceManager; -public class ConntectVDSToPoolAndDomains extends ActivateDeactivateSingleAsyncOperation { +public class ConntectVDSToPoolAndDomains extends ActivateDeactivateSingleAsyncOperation { // To be removed probably private static Log log = LogFactory.getLog(ConntectVDSToPoolAndDomains.class); @@ -29,9 +29,7 @@ if (isConnectSucceeded) { ResourceManager.getInstance().runVdsCommand( VDSCommandType.ConnectStoragePool, - new ConnectStoragePoolVDSCommandParameters(vds.getId(), getStoragePool().getId(), vds - .getVdsSpmId(), getStorageDomain().getId(), getStoragePool() - .getmaster_domain_version())); + new ConnectStoragePoolVDSCommandParameters(vds, getStoragePool())); } else { log.errorFormat("Failed to connect host {0} to domain {1}", vds.getName(), 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 d8ebc39..5bea460 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 @@ -22,7 +22,6 @@ import org.ovirt.engine.core.common.vdscommands.DisconnectStoragePoolVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.IrsBaseVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.ReconstructMasterVDSCommandParameters; -import org.ovirt.engine.core.common.vdscommands.RefreshStoragePoolVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.ResetIrsVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.VDSCommandType; import org.ovirt.engine.core.common.vdscommands.VDSReturnValue; @@ -231,19 +230,13 @@ if (isPerformConnectOps && connectVdsToNewMaster(vds)) { try { runVdsCommand( - VDSCommandType.RefreshStoragePool, - new RefreshStoragePoolVDSCommandParameters(vds.getId(), - getStoragePool().getId(), - _newMasterStorageDomainId, - getStoragePool().getmaster_domain_version())); + VDSCommandType.ConnectStoragePool, // FIXME: _newMasterStorageDomainId + new ConnectStoragePoolVDSCommandParameters(vds, getStoragePool(), true)); } catch (VdcBLLException ex) { if (VdcBllErrors.StoragePoolUnknown == ex.getVdsError().getCode()) { VDSReturnValue returnVal = runVdsCommand( VDSCommandType.ConnectStoragePool, - new ConnectStoragePoolVDSCommandParameters(vds.getId(), - getStoragePool().getId(), vds.getVdsSpmId(), - _newMasterStorageDomainId, getStoragePool() - .getmaster_domain_version())); + new ConnectStoragePoolVDSCommandParameters(vds, getStoragePool())); if (!returnVal.getSucceeded()) { log.errorFormat("Post reconstruct actions (connectPool) did not complete on host {0} in the pool. error {1}", vds.getId(), diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RefreshPoolSingleAsyncOperation.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RefreshPoolSingleAsyncOperation.java index 27c7fad..c54f359 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RefreshPoolSingleAsyncOperation.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RefreshPoolSingleAsyncOperation.java @@ -8,10 +8,8 @@ import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.StoragePool; import org.ovirt.engine.core.common.vdscommands.ConnectStoragePoolVDSCommandParameters; -import org.ovirt.engine.core.common.vdscommands.RefreshStoragePoolVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.VDSCommandType; 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; @@ -27,20 +25,11 @@ @Override public void execute(int iterationId) { try { - Guid masterDomainIdFromDb = - DbFacade.getInstance() - .getStorageDomainDao() - .getMasterStorageDomainIdForPool(getStoragePool().getId()); - if (getStorageDomain().getStorageDomainType() == StorageDomainType.Master) { try { - Backend.getInstance() - .getResourceManager() - .RunVdsCommand( - VDSCommandType.ConnectStoragePool, - new ConnectStoragePoolVDSCommandParameters(getVdss().get(iterationId).getId(), - getStoragePool().getId(), getVdss().get(iterationId).getVdsSpmId(), - masterDomainIdFromDb, getStoragePool().getmaster_domain_version())); + Backend.getInstance().getResourceManager().RunVdsCommand( + VDSCommandType.ConnectStoragePool, + new ConnectStoragePoolVDSCommandParameters(getVdss().get(iterationId), getStoragePool())); } catch (java.lang.Exception e) { log.errorFormat("Could not connect vds {0} to pool {1} - moving host to non-operational", getVdss() .get(iterationId).getName(), getStoragePool().getName()); @@ -49,13 +38,9 @@ } } } else { - Backend.getInstance() - .getResourceManager() - .RunVdsCommand( - VDSCommandType.RefreshStoragePool, - new RefreshStoragePoolVDSCommandParameters(getVdss().get(iterationId).getId(), - getStoragePool().getId(), masterDomainIdFromDb, getStoragePool() - .getmaster_domain_version())); + Backend.getInstance().getResourceManager().RunVdsCommand( + VDSCommandType.ConnectStoragePool, + new ConnectStoragePoolVDSCommandParameters(getVdss().get(iterationId), getStoragePool(), true)); log.infoFormat("Refreshed vds {0} in pool {1}", getVdss().get(iterationId).getName(), getStoragePool().getName()); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RefreshStoragePoolAndDisconnectAsyncOperation.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RefreshStoragePoolAndDisconnectAsyncOperation.java index 2826022..9a69e25 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RefreshStoragePoolAndDisconnectAsyncOperation.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RefreshStoragePoolAndDisconnectAsyncOperation.java @@ -4,10 +4,8 @@ import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.StoragePool; -import org.ovirt.engine.core.common.vdscommands.RefreshStoragePoolVDSCommandParameters; +import org.ovirt.engine.core.common.vdscommands.ConnectStoragePoolVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.VDSCommandType; -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; @@ -20,17 +18,9 @@ @Override public void execute(int iterationId) { try { - Guid masterDomainIdFromDb = - DbFacade.getInstance() - .getStorageDomainDao() - .getMasterStorageDomainIdForPool(getStoragePool().getId()); - Backend.getInstance() - .getResourceManager() - .RunVdsCommand( - VDSCommandType.RefreshStoragePool, - new RefreshStoragePoolVDSCommandParameters(getVdss().get(iterationId).getId(), - getStoragePool().getId(), masterDomainIdFromDb, getStoragePool() - .getmaster_domain_version())); + Backend.getInstance().getResourceManager().RunVdsCommand( + VDSCommandType.ConnectStoragePool, + new ConnectStoragePoolVDSCommandParameters(getVdss().get(iterationId), getStoragePool(), true)); StorageHelperDirector.getInstance().getItem(getStorageDomain().getStorageType()) .disconnectStorageFromDomainByVdsId(getStorageDomain(), getVdss().get(iterationId).getId()); } catch (RuntimeException e) { diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/FeatureSupported.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/FeatureSupported.java index 5816e5e..566d517 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/FeatureSupported.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/FeatureSupported.java @@ -195,4 +195,8 @@ public static boolean hotPlugDiskSnapshot(Version version) { return supportedInConfig(ConfigValues.HotPlugDiskSnapshotSupported, version); } + + public static boolean storagePoolNoMetadata(Version version) { + return supportedInConfig(ConfigValues.StoragePoolNoMetadata, version); + } } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java index 1cb083d..36037be 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java @@ -1557,5 +1557,9 @@ @DefaultValueAttribute("true") GlusterSupportForceCreateVolume, + @TypeConverterAttribute(Boolean.class) + @DefaultValueAttribute("true") + StoragePoolNoMetadata, + Invalid; } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/ConnectStoragePoolVDSCommandParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/ConnectStoragePoolVDSCommandParameters.java index 185fb46..2a60ff9 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/ConnectStoragePoolVDSCommandParameters.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/ConnectStoragePoolVDSCommandParameters.java @@ -1,44 +1,63 @@ package org.ovirt.engine.core.common.vdscommands; +import org.ovirt.engine.core.common.businessentities.StoragePool; +import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.compat.Guid; -public class ConnectStoragePoolVDSCommandParameters extends DisconnectStoragePoolVDSCommandParameters { - public ConnectStoragePoolVDSCommandParameters(Guid vdsId, Guid storagePoolId, int vds_spm_id, Guid masterDomainId, - int masterVersion) { - super(vdsId, storagePoolId, vds_spm_id); - setMasterDomainId(masterDomainId); - setMasterVersion(masterVersion); - } - private int privateMasterVersion; +public class ConnectStoragePoolVDSCommandParameters extends VdsIdVDSCommandParametersBase { - public int getMasterVersion() { - return privateMasterVersion; - } + private VDS vds; - private void setMasterVersion(int value) { - privateMasterVersion = value; - } + private StoragePool storagePool; + + private boolean refreshOnly; public ConnectStoragePoolVDSCommandParameters() { - privateMasterDomainId = Guid.Empty; } - private Guid privateMasterDomainId; - - public Guid getMasterDomainId() { - return privateMasterDomainId; + public ConnectStoragePoolVDSCommandParameters(VDS vds, StoragePool storagePool) { + this.vds = vds; + this.storagePool = storagePool; } - private void setMasterDomainId(Guid value) { - privateMasterDomainId = value; + public ConnectStoragePoolVDSCommandParameters(VDS vds, StoragePool storagePool, boolean refreshOnly) { + this(vds, storagePool); + this.refreshOnly = refreshOnly; + } + + public VDS getVds() { + return vds; + } + + public void setVds(VDS vds) { + this.vds = vds; + } + + public Guid getVdsId() { + return vds.getId(); + } + + public StoragePool getStoragePool() { + return storagePool; + } + + public Guid getStoragePoolId() { + return storagePool.getId(); + } + + public void setStoragePool(StoragePool storagePool) { + this.storagePool = storagePool; + } + + public boolean isRefreshOnly() { + return this.refreshOnly; } @Override public String toString() { - return String.format("%s, masterDomainId = %s, masterVersion = %s", - super.toString(), - getMasterDomainId(), - getMasterVersion()); + return String.format("%s, vdsId = %s, storagePoolId = %s, masterVersion = %d", + super.toString(), vds.getId().toString(), storagePool.getId().toString(), + storagePool.getmaster_domain_version()); } } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/RefreshStoragePoolVDSCommandParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/RefreshStoragePoolVDSCommandParameters.java deleted file mode 100644 index e78f8f9..0000000 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/RefreshStoragePoolVDSCommandParameters.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.ovirt.engine.core.common.vdscommands; - -import org.ovirt.engine.core.compat.Guid; - -public class RefreshStoragePoolVDSCommandParameters extends GetStorageConnectionsListVDSCommandParameters { - public RefreshStoragePoolVDSCommandParameters(Guid vdsId, Guid storagePoolId, Guid masterStorageDomainId, - int masterVersion) { - super(vdsId, storagePoolId); - setMasterStorageDomainId(masterStorageDomainId); - setMasterVersion(masterVersion); - } - - private Guid privateMasterStorageDomainId; - - public Guid getMasterStorageDomainId() { - return privateMasterStorageDomainId; - } - - private void setMasterStorageDomainId(Guid value) { - privateMasterStorageDomainId = value; - } - - private int privateMasterVersion; - - public int getMasterVersion() { - return privateMasterVersion; - } - - private void setMasterVersion(int value) { - privateMasterVersion = value; - } - - public RefreshStoragePoolVDSCommandParameters() { - privateMasterStorageDomainId = Guid.Empty; - } - - @Override - public String toString() { - return String.format("%s, masterStorageDomainId=%s, masterVersion=%s", - super.toString(), - getMasterStorageDomainId(), - getMasterVersion()); - } -} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java index 27b7ab0..3614c34 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java @@ -36,7 +36,6 @@ ConnectStoragePool("org.ovirt.engine.core.vdsbroker.vdsbroker"), DisconnectStoragePool("org.ovirt.engine.core.vdsbroker.vdsbroker"), DiscoverSendTargets("org.ovirt.engine.core.vdsbroker.vdsbroker"), - RefreshStoragePool("org.ovirt.engine.core.vdsbroker.vdsbroker"), CreateStoragePool("org.ovirt.engine.core.vdsbroker.vdsbroker"), UpgradeStoragePool("org.ovirt.engine.core.vdsbroker.irsbroker"), ReconstructMaster("org.ovirt.engine.core.vdsbroker.vdsbroker"), 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 ffbaf86..a58ed01 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 @@ -654,8 +654,7 @@ .getMasterStorageDomainIdForPool(_storagePoolId); VDSReturnValue connectResult = ResourceManager.getInstance().runVdsCommand( VDSCommandType.ConnectStoragePool, - new ConnectStoragePoolVDSCommandParameters(selectedVds.getId(), _storagePoolId, - selectedVds.getVdsSpmId(), masterId, storagePool.getmaster_domain_version())); + new ConnectStoragePoolVDSCommandParameters(selectedVds, storagePool)); if (!connectResult.getSucceeded() && connectResult.getExceptionObject() instanceof IRSNoMasterDomainException) { throw connectResult.getExceptionObject(); @@ -1038,6 +1037,8 @@ return; } + boolean vdsNeedsRefresh = false; + // Step 2: build the domain maps for the reported domains and the pool domains Map<Guid, VDSDomainsData> dataDomainMap = getDataDomainsMap(domainsDataList); Map<Guid, StorageDomain> poolDomainMap = getPoolDomainsMap(_storagePoolId); @@ -1048,6 +1049,15 @@ isDomainReportedAsProblematic(domainData, false) ? Status.UNREACHABLE : Status.VISIBLE; _domainsVisibility.setVdsDomainStatus(vds.getId(), domainData.getDomainId(), status); + + // If the vds is reporting a domain that should be in maintenance it needs a refresh + StorageDomain poolDomain = poolDomainMap.get(domainData.getDomainId()); + if (poolDomain.getStatus() == StorageDomainStatus.MovingToMaintenance + || poolDomain.getStatus() == StorageDomainStatus.Maintenance) { + log.infoFormat("VDS {0} is reporting domain in maintenance {1} refresh is needed", + vds.getId(), poolDomain.getId()); + vdsNeedsRefresh = true; + } } // Step 4: for each domain in the pool that is not reported by the vds mark it as unreported @@ -1055,9 +1065,25 @@ VDSDomainsData domainData = dataDomainMap.get(poolDomain.getId()); if (domainData == null) { _domainsVisibility.setVdsDomainStatus(vds.getId(), poolDomain.getId(), Status.UNREPORTED); + + // If the vds is not reporting a domain that should be active it needs a refresh + if (poolDomain.getStatus() == StorageDomainStatus.Active) { + log.infoFormat("VDS {0} is not reporting domain {1} refresh is needed", + vds.getId(), poolDomain.getId()); + vdsNeedsRefresh = true; + } + + // Check if the domain is ready to be moved to maintenance moveDomainToMaintenance(poolDomain); } } + + // Step 5: try to synchronize the vds domain visibility when needed + if (vdsNeedsRefresh) { + StoragePool storagePool = DbFacade.getInstance().getStoragePoolDao().get(_storagePoolId); + ResourceManager.getInstance().runVdsCommand(VDSCommandType.ConnectStoragePool, + new ConnectStoragePoolVDSCommandParameters(vds, storagePool, true)); + } } private void moveDomainToMaintenance(StorageDomain poolDomain) { diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ConnectStoragePoolVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ConnectStoragePoolVDSCommand.java index efbea46..6bf943d 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ConnectStoragePoolVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ConnectStoragePoolVDSCommand.java @@ -1,26 +1,92 @@ package org.ovirt.engine.core.vdsbroker.vdsbroker; +import org.ovirt.engine.core.common.FeatureSupported; +import org.ovirt.engine.core.common.businessentities.StorageDomain; +import org.ovirt.engine.core.common.businessentities.StorageDomainStatus; +import org.ovirt.engine.core.common.businessentities.StorageDomainType; +import org.ovirt.engine.core.common.businessentities.StoragePoolIsoMap; import org.ovirt.engine.core.common.errors.VdcBllErrors; +import org.ovirt.engine.core.common.utils.StoragePoolDomainHelper; import org.ovirt.engine.core.common.vdscommands.ConnectStoragePoolVDSCommandParameters; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dal.dbbroker.DbFacade; + +import java.util.HashMap; +import java.util.Map; public class ConnectStoragePoolVDSCommand<P extends ConnectStoragePoolVDSCommandParameters> extends VdsBrokerCommand<P> { + public ConnectStoragePoolVDSCommand(P parameters) { super(parameters); } + private static Map<String, String> getStoragePoolIsoMap(Guid storagePoolId) { + Map<String, String> storageDomains = new HashMap<>(); + + for (StoragePoolIsoMap domain : + DbFacade.getInstance().getStoragePoolIsoMapDao().getAllForStoragePool(storagePoolId)) { + if (domain.getStatus() == StorageDomainStatus.Maintenance + || domain.getStatus() == StorageDomainStatus.MovingToMaintenance) { + storageDomains.put(domain.getstorage_id().toString(), "attached"); + } else { + storageDomains.put(domain.getstorage_id().toString(), + StorageDomainStatus.Active.toString().toLowerCase()); + } + } + + return storageDomains; + } + + private static StorageDomain getMasterStorageDomain(Guid storagePoolId) { + return DbFacade.getInstance().getStorageDomainDao() + .getStorageDomainByTypeAndPool(storagePoolId, StorageDomainType.Master); + } + + private boolean isPoolWithoutMetadata() { + return FeatureSupported.storagePoolNoMetadata(getParameters().getStoragePool().getcompatibility_version()); + } + + public void connectStoragePool() { + Map<String, String> storageDomains = null; + Guid masterDomainId = getMasterStorageDomain(getParameters().getStoragePoolId()).getId(); // performance issue? + + if (isPoolWithoutMetadata()) { + storageDomains = StoragePoolDomainHelper.getStoragePoolIsoMap( + DbFacade.getInstance().getStoragePoolIsoMapDao().getAllForStoragePool( + getParameters().getStoragePoolId())); + } + + status = getBroker().connectStoragePool(getParameters().getStoragePoolId().toString(), + getParameters().getVds().getVdsSpmId(), getParameters().getStoragePoolId().toString(), + masterDomainId.toString(), getParameters().getStoragePool().getmaster_domain_version(), + storageDomains); + } + + public void refreshStoragePool() { + Guid masterDomainId = getMasterStorageDomain(getParameters().getStoragePoolId()).getId(); // performance issue? + status = getBroker().refreshStoragePool(getParameters().getStoragePoolId().toString(), + masterDomainId.toString(), getParameters().getStoragePool().getmaster_domain_version()); + } + @Override protected void executeVdsBrokerCommand() { - status = getBroker().connectStoragePool(getParameters().getStoragePoolId().toString(), - getParameters().getvds_spm_id(), getParameters().getStoragePoolId().toString(), - getParameters().getMasterDomainId().toString(), getParameters().getMasterVersion()); - proceedProxyReturnValue(); + if (getParameters().isRefreshOnly() && !isPoolWithoutMetadata()) { + refreshStoragePool(); + proceedConnectProxyReturnValue(); + } else { + connectStoragePool(); + proceedConnectProxyReturnValue(); + } + } + + protected void proceedRefreshProxyReturnValue() { + super.proceedProxyReturnValue(); } // dont throw exception on errors except StoragePoolMasterNotFound for // master domain failure treatment - @Override - protected void proceedProxyReturnValue() { + protected void proceedConnectProxyReturnValue() { VdcBllErrors returnStatus = getReturnValueFromStatus(getReturnStatus()); switch (returnStatus) { case Done: diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java index 8fa530d..8071bf4 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java @@ -105,7 +105,7 @@ StatusOnlyReturnForXmlRpc formatStorageDomain(String sdUUID); StatusOnlyReturnForXmlRpc connectStoragePool(String spUUID, int hostSpmId, String SCSIKey, String masterdomainId, - int masterVersion); + int masterVersion, Map<String, String> storageDomains); StatusOnlyReturnForXmlRpc disconnectStoragePool(String spUUID, int hostSpmId, String SCSIKey); diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/RefreshStoragePoolVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/RefreshStoragePoolVDSCommand.java deleted file mode 100644 index 5806a7e..0000000 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/RefreshStoragePoolVDSCommand.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.ovirt.engine.core.vdsbroker.vdsbroker; - -import org.ovirt.engine.core.common.vdscommands.RefreshStoragePoolVDSCommandParameters; - -public class RefreshStoragePoolVDSCommand<P extends RefreshStoragePoolVDSCommandParameters> - extends VdsBrokerCommand<P> { - public RefreshStoragePoolVDSCommand(P parameters) { - super(parameters); - } - - @Override - protected void executeVdsBrokerCommand() { - status = getBroker() - .refreshStoragePool(getParameters().getStoragePoolId().toString(), - getParameters().getMasterStorageDomainId().toString(), - getParameters().getMasterVersion()); - proceedProxyReturnValue(); - } -} diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java index 0cd2d0f..260dcdf 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java @@ -88,6 +88,9 @@ public Map<String, Object> connectStoragePool(String spUUID, int hostSpmId, String SCSIKey, String masterdomainId, int masterVersion); + public Map<String, Object> connectStoragePool(String spUUID, int hostSpmId, String SCSIKey, String masterdomainId, + int masterVersion, Map<String, String> storageDomains); + public Map<String, Object> disconnectStoragePool(String spUUID, int hostSpmId, String SCSIKey); public Map<String, Object> createStoragePool(int poolType, String spUUID, String poolName, String msdUUID, diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java index bc4ad53..5c669bb 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java @@ -469,10 +469,16 @@ @Override public StatusOnlyReturnForXmlRpc connectStoragePool(String spUUID, int hostSpmId, String SCSIKey, - String masterdomainId, int masterVersion) { + String masterdomainId, int masterVersion, Map<String, String> storageDomains) { try { - Map<String, Object> xmlRpcReturnValue = vdsServer.connectStoragePool(spUUID, hostSpmId, SCSIKey, - masterdomainId, masterVersion); + Map<String, Object> xmlRpcReturnValue; + if (storageDomains == null) { + xmlRpcReturnValue = vdsServer.connectStoragePool(spUUID, hostSpmId, SCSIKey, + masterdomainId, masterVersion); + } else { + xmlRpcReturnValue = vdsServer.connectStoragePool(spUUID, hostSpmId, SCSIKey, + masterdomainId, masterVersion, storageDomains); + } StatusOnlyReturnForXmlRpc wrapper = new StatusOnlyReturnForXmlRpc(xmlRpcReturnValue); return wrapper; } catch (UndeclaredThrowableException ute) { diff --git a/packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql b/packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql index c5aa861..08cd99e 100644 --- a/packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql +++ b/packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql @@ -226,6 +226,10 @@ select fn_db_add_config_value('HotPlugDiskSnapshotSupported','false','3.0'); select fn_db_add_config_value('HotPlugDiskSnapshotSupported','false','3.1'); select fn_db_add_config_value('HotPlugDiskSnapshotSupported','false','3.2'); +select fn_db_add_config_value('StoragePoolNoMetadata','false','3.0'); +select fn_db_add_config_value('StoragePoolNoMetadata','false','3.1'); +select fn_db_add_config_value('StoragePoolNoMetadata','false','3.2'); +select fn_db_add_config_value('StoragePoolNoMetadata','false','3.3'); -- by default use no proxy select fn_db_add_config_value('SpiceProxyDefault','','general'); -- To view, visit http://gerrit.ovirt.org/22712 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ic16034c6757959e5d0445814a8acc2221a74f6aa Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Federico Simoncelli <fsimo...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches