Maor Lipchuk has uploaded a new change for review. Change subject: core[WIP]: Seperate queries for file and block_3 ......................................................................
core[WIP]: Seperate queries for file and block_3 WIP Change-Id: I3cb04cec7d49b60d60e7fccf2bb7d512797b553f Signed-off-by: Maor Lipchuk <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddStoragePoolWithStoragesCommand.java A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetBlockStorageDomainsWithAttachedStoragePoolGuidQuery.java A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetFileStorageDomainsWithAttachedStoragePoolGuidQuery.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetStorageDomainsWithAttachedStoragePoolGuidQuery.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/GetStorageDomainsWithAttachedStoragePoolGuidQueryTest.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java 6 files changed, 184 insertions(+), 111 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/08/36408/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddStoragePoolWithStoragesCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddStoragePoolWithStoragesCommand.java index dcdcf16..eb58066 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddStoragePoolWithStoragesCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddStoragePoolWithStoragesCommand.java @@ -1,5 +1,6 @@ package org.ovirt.engine.core.bll.storage; +import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; @@ -14,16 +15,16 @@ import org.ovirt.engine.core.common.action.StorageDomainPoolParametersBase; import org.ovirt.engine.core.common.action.StoragePoolWithStoragesParameter; import org.ovirt.engine.core.common.action.VdcActionType; +import org.ovirt.engine.core.common.businessentities.StorageDomain; +import org.ovirt.engine.core.common.businessentities.StorageDomainStatic; import org.ovirt.engine.core.common.businessentities.StorageDomainStatus; import org.ovirt.engine.core.common.businessentities.StorageDomainType; import org.ovirt.engine.core.common.businessentities.StorageFormatType; +import org.ovirt.engine.core.common.businessentities.StoragePool; +import org.ovirt.engine.core.common.businessentities.StoragePoolIsoMap; import org.ovirt.engine.core.common.businessentities.StoragePoolIsoMapId; import org.ovirt.engine.core.common.businessentities.StoragePoolStatus; import org.ovirt.engine.core.common.businessentities.VDS; -import org.ovirt.engine.core.common.businessentities.StorageDomain; -import org.ovirt.engine.core.common.businessentities.StorageDomainStatic; -import org.ovirt.engine.core.common.businessentities.StoragePool; -import org.ovirt.engine.core.common.businessentities.StoragePoolIsoMap; import org.ovirt.engine.core.common.errors.VdcBLLException; import org.ovirt.engine.core.common.errors.VdcBllErrors; import org.ovirt.engine.core.common.errors.VdcBllMessages; @@ -323,9 +324,16 @@ } private boolean isStorageDomainAttachedToStoragePool(StorageDomain storageDomain) { - List<StorageDomain> storageDomainList = - (List<StorageDomain>) getBackend().runInternalQuery(VdcQueryType.GetStorageDomainsWithAttachedStoragePoolGuid, - new StorageDomainsAndStoragePoolIdQueryParameters(storageDomain, getStoragePoolId(), getVds().getId())).getReturnValue(); + List<StorageDomain> storageDomainList = new ArrayList<>(); + if (storageDomain.getStorageType().isBlockDomain()) { + storageDomainList = + (List<StorageDomain>) getBackend().runInternalQuery(VdcQueryType.GetBlockStorageDomainsWithAttachedStoragePoolGuid, + new StorageDomainsAndStoragePoolIdQueryParameters(storageDomain, getStoragePoolId(), getVds().getId())).getReturnValue(); + } else if (storageDomain.getStorageType().isFileDomain()) { + storageDomainList = + (List<StorageDomain>) getBackend().runInternalQuery(VdcQueryType.GetFileStorageDomainsWithAttachedStoragePoolGuid, + new StorageDomainsAndStoragePoolIdQueryParameters(storageDomain, getStoragePoolId(), getVds().getId())).getReturnValue(); + } return !storageDomainList.isEmpty(); } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetBlockStorageDomainsWithAttachedStoragePoolGuidQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetBlockStorageDomainsWithAttachedStoragePoolGuidQuery.java new file mode 100644 index 0000000..4decd0a --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetBlockStorageDomainsWithAttachedStoragePoolGuidQuery.java @@ -0,0 +1,75 @@ +package org.ovirt.engine.core.bll.storage; + +import java.util.ArrayList; +import java.util.List; + +import org.ovirt.engine.core.common.businessentities.StorageDomain; +import org.ovirt.engine.core.common.businessentities.StorageDomainStatic; +import org.ovirt.engine.core.common.queries.StorageDomainsAndStoragePoolIdQueryParameters; +import org.ovirt.engine.core.common.utils.Pair; +import org.ovirt.engine.core.common.vdscommands.HSMGetStorageDomainInfoVDSCommandParameters; +import org.ovirt.engine.core.common.vdscommands.VDSCommandType; +import org.ovirt.engine.core.common.vdscommands.VDSReturnValue; +import org.ovirt.engine.core.compat.Guid; + +public class GetBlockStorageDomainsWithAttachedStoragePoolGuidQuery<P extends StorageDomainsAndStoragePoolIdQueryParameters> extends GetStorageDomainsWithAttachedStoragePoolGuidQuery<P> { + + public GetBlockStorageDomainsWithAttachedStoragePoolGuidQuery(P parameters) { + super(parameters); + } + + @Override + protected List<StorageDomainStatic> getAttachedStorageDomains() { + VDSReturnValue vdsReturnValue = null; + List<StorageDomain> storageDomains = getParameters().getStorageDomainList(); + List<StorageDomainStatic> storageDomainsWithAttachedStoragePoolId = new ArrayList<>(); + + // Go over the list of Storage Domains and try to get the Storage Domain info to check if it attached to another + // Storage Pool + for (StorageDomain storageDomain : storageDomains) { + try { + vdsReturnValue = + runVdsCommand(VDSCommandType.HSMGetStorageDomainInfo, + new HSMGetStorageDomainInfoVDSCommandParameters(getVdsId(), storageDomain.getId())); + } catch (RuntimeException e) { + logErrorMessage(storageDomain); + continue; + } + if (!vdsReturnValue.getSucceeded()) { + logErrorMessage(storageDomain); + continue; + } + Pair<StorageDomainStatic, Guid> domainFromIrs = + (Pair<StorageDomainStatic, Guid>) vdsReturnValue.getReturnValue(); + if (domainFromIrs.getSecond() != null) { + storageDomainsWithAttachedStoragePoolId.add(domainFromIrs.getFirst()); + } + } + return storageDomainsWithAttachedStoragePoolId; + } + + protected boolean connectStorageDomain(StorageDomain storageDomain) { + return StorageHelperDirector.getInstance().getItem(storageDomain.getStorageType()) + .connectStorageToDomainByVdsId(storageDomain, getVdsId()); + } + + // protected boolean connectStorageDomain(StorageDomain storageDomain) { + // return StorageHelperDirector.getInstance().getItem(storageDomain.getStorageType()) + // .connectStorageToDomainByVdsId(storageDomain, getVdsId()); + // } + // + // VdcQueryReturnValue returnValue = + // getBackend().runInternalQuery(VdcQueryType.GetExistingStorageDomainList, + // new GetExistingStorageDomainListParameters( + // getVdsId(), + // storageDomain.getStorageType(), + // StorageDomainType.Data, + // getParameters().getStorageServerConnection().getconnection())); + // + // boolean connectResult = connectStorageDomain(storageDomain); + // if (connectResult) { + // + // StorageHelperDirector.getInstance().getItem(storageDomain.getStorageType()) + // .disconnectStorageFromDomainByVdsId(storageDomain, getVdsId()); + +} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetFileStorageDomainsWithAttachedStoragePoolGuidQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetFileStorageDomainsWithAttachedStoragePoolGuidQuery.java new file mode 100644 index 0000000..756982e --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetFileStorageDomainsWithAttachedStoragePoolGuidQuery.java @@ -0,0 +1,65 @@ +package org.ovirt.engine.core.bll.storage; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.ovirt.engine.core.common.action.StorageServerConnectionParametersBase; +import org.ovirt.engine.core.common.action.VdcActionType; +import org.ovirt.engine.core.common.businessentities.StorageDomain; +import org.ovirt.engine.core.common.businessentities.StorageDomainStatic; +import org.ovirt.engine.core.common.businessentities.StorageDomainType; +import org.ovirt.engine.core.common.businessentities.StorageServerConnections; +import org.ovirt.engine.core.common.queries.GetExistingStorageDomainListParameters; +import org.ovirt.engine.core.common.queries.StorageDomainsAndStoragePoolIdQueryParameters; +import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; +import org.ovirt.engine.core.common.queries.VdcQueryType; +import org.ovirt.engine.core.common.vdscommands.StorageServerConnectionManagementVDSParameters; +import org.ovirt.engine.core.common.vdscommands.VDSCommandType; +import org.ovirt.engine.core.compat.Guid; + +public class GetFileStorageDomainsWithAttachedStoragePoolGuidQuery<P extends StorageDomainsAndStoragePoolIdQueryParameters> extends GetStorageDomainsWithAttachedStoragePoolGuidQuery<P> { + public GetFileStorageDomainsWithAttachedStoragePoolGuidQuery(P parameters) { + super(parameters); + } + + @Override + protected List<StorageDomainStatic> getAttachedStorageDomains() { + List<StorageDomainStatic> storageDomains = new ArrayList<>(); + List<StorageServerConnections> connections = Arrays.asList(getParameters().getStorageServerConnection()); + Map<String, String> result = (HashMap<String, String>) runVdsCommand( + VDSCommandType.ConnectStorageServer, + new StorageServerConnectionManagementVDSParameters(getVdsId(), Guid.Empty, + getParameters().getStorageServerConnection().getstorage_type(), connections)).getReturnValue(); + + if (StorageHelperDirector.getInstance() + .getItem(getParameters().getStorageServerConnection().getstorage_type()) + .isConnectSucceeded(result, connections)) { + VdcQueryReturnValue returnValue = getBackend().runInternalQuery(VdcQueryType.GetExistingStorageDomainList, + new GetExistingStorageDomainListParameters( + getVdsId(), + getParameters().getStorageServerConnection().getstorage_type(), + StorageDomainType.Data, + getParameters().getStorageServerConnection().getconnection())); + List<StorageDomain> existingStorageDomains = returnValue.getReturnValue(); + if (!existingStorageDomains.isEmpty()) { + StorageDomain storageDomain = existingStorageDomains.get(0); + if (storageDomain.getStoragePoolId() != null) { + storageDomains.add(storageDomain.getStorageStaticData()); + } + } + + getBackend().runInternalAction(VdcActionType.DisconnectStorageServerConnection, + new StorageServerConnectionParametersBase(getParameters().getStorageServerConnection(), getVdsId())); + } + return storageDomains; + } + + @Override + protected boolean connectStorageDomain(StorageDomain storageDomain) { + return true; + } + +} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetStorageDomainsWithAttachedStoragePoolGuidQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetStorageDomainsWithAttachedStoragePoolGuidQuery.java index 0530858..77911e6 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetStorageDomainsWithAttachedStoragePoolGuidQuery.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetStorageDomainsWithAttachedStoragePoolGuidQuery.java @@ -1,45 +1,32 @@ package org.ovirt.engine.core.bll.storage; import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.Random; import org.ovirt.engine.core.bll.Backend; import org.ovirt.engine.core.bll.QueriesCommandBase; -import org.ovirt.engine.core.common.action.StorageServerConnectionParametersBase; -import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.StorageDomainStatic; -import org.ovirt.engine.core.common.businessentities.StorageDomainType; -import org.ovirt.engine.core.common.businessentities.StorageServerConnections; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VDSStatus; import org.ovirt.engine.core.common.errors.VdcBLLException; import org.ovirt.engine.core.common.interfaces.VDSBrokerFrontend; -import org.ovirt.engine.core.common.queries.GetExistingStorageDomainListParameters; import org.ovirt.engine.core.common.queries.StorageDomainsAndStoragePoolIdQueryParameters; -import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; -import org.ovirt.engine.core.common.queries.VdcQueryType; -import org.ovirt.engine.core.common.utils.Pair; -import org.ovirt.engine.core.common.vdscommands.HSMGetStorageDomainInfoVDSCommandParameters; -import org.ovirt.engine.core.common.vdscommands.StorageServerConnectionManagementVDSParameters; import org.ovirt.engine.core.common.vdscommands.VDSCommandType; import org.ovirt.engine.core.common.vdscommands.VDSParametersBase; import org.ovirt.engine.core.common.vdscommands.VDSReturnValue; import org.ovirt.engine.core.compat.Guid; public class GetStorageDomainsWithAttachedStoragePoolGuidQuery<P extends StorageDomainsAndStoragePoolIdQueryParameters> extends QueriesCommandBase<P> { - private Guid vdsId; public GetStorageDomainsWithAttachedStoragePoolGuidQuery(P parameters) { super(parameters); } - @Override - protected void executeQueryCommand() { + private Guid vdsId; + + public Guid setVdsForConnectStorage() { vdsId = getParameters().getVdsId(); if (vdsId == null) { // Get a Host which is at UP state to connect to the Storage Domain. @@ -50,106 +37,34 @@ log.info("vds id '{}' was chosen to fetch the Storage domain info", vdsId); } else { log.warn("There is no available vds in UP state to fetch the Storage domain info from VDSM"); - return; + return null; } } + return vdsId; + } - List<StorageDomainStatic> storageDomainsWithAttachedStoragePoolId = new ArrayList<>(); - if (isBlockDomain()) { - storageDomainsWithAttachedStoragePoolId = getBlockStorageDomains(); - } else if (isFileDomain()) { - storageDomainsWithAttachedStoragePoolId = getFileStorageDomains(); - } else { - log.error("No block storage domains or file server connections were initialized in the parameters passed to the query."); + @Override + protected void executeQueryCommand() { + if (setVdsForConnectStorage() == null) { + return; } + List<StorageDomainStatic> storageDomainsWithAttachedStoragePoolId = new ArrayList<>(); + storageDomainsWithAttachedStoragePoolId = getAttachedStorageDomains(); getQueryReturnValue().setReturnValue(storageDomainsWithAttachedStoragePoolId); } - private boolean isBlockDomain() { - return getParameters().getStorageDomainList() != null; + public Guid getVdsId() { + return vdsId; } - private boolean isFileDomain() { - return getParameters().getStorageServerConnection() != null; - } - - private List<StorageDomainStatic> getBlockStorageDomains() { - VDSReturnValue vdsReturnValue = null; - List<StorageDomain> storageDomains = getParameters().getStorageDomainList(); - List<StorageDomainStatic> storageDomainsWithAttachedStoragePoolId = new ArrayList<>(); - - // Go over the list of Storage Domains and try to get the Storage Domain info to check if it attached to another - // Storage Pool - for (StorageDomain storageDomain : storageDomains) { - try { - boolean connectResult = connectStorageDomain(storageDomain); - if (connectResult) { - vdsReturnValue = - runVdsCommand(VDSCommandType.HSMGetStorageDomainInfo, - new HSMGetStorageDomainInfoVDSCommandParameters(vdsId, storageDomain.getId())); - } - } catch (RuntimeException e) { - logErrorMessage(storageDomain); - continue; - } - if (!vdsReturnValue.getSucceeded()) { - logErrorMessage(storageDomain); - return null; - } - - Pair<StorageDomainStatic, Guid> domainFromIrs = - (Pair<StorageDomainStatic, Guid>) vdsReturnValue.getReturnValue(); - if (domainFromIrs.getSecond() != null) { - storageDomainsWithAttachedStoragePoolId.add(domainFromIrs.getFirst()); - } - } - return storageDomainsWithAttachedStoragePoolId; - } - - private List<StorageDomainStatic> getFileStorageDomains() { - List<StorageDomainStatic> storageDomains = new ArrayList<>(); - List<StorageServerConnections> connections = Arrays.asList(getParameters().getStorageServerConnection()); - Map<String, String> result = (HashMap<String, String>) runVdsCommand( - VDSCommandType.ConnectStorageServer, - new StorageServerConnectionManagementVDSParameters(vdsId, Guid.Empty, - getParameters().getStorageServerConnection().getstorage_type(), connections)).getReturnValue(); - - if (StorageHelperDirector.getInstance() - .getItem(getParameters().getStorageServerConnection().getstorage_type()) - .isConnectSucceeded(result, connections)) { - VdcQueryReturnValue returnValue = getBackend().runInternalQuery(VdcQueryType.GetExistingStorageDomainList, - new GetExistingStorageDomainListParameters( - vdsId, - getParameters().getStorageServerConnection().getstorage_type(), - StorageDomainType.Data, - getParameters().getStorageServerConnection().getconnection())); - List<StorageDomain> existingStorageDomains = returnValue.getReturnValue(); - if (!existingStorageDomains.isEmpty()) { - StorageDomain storageDomain = existingStorageDomains.get(0); - if (storageDomain.getStoragePoolId() != null) { - storageDomains.add(storageDomain.getStorageStaticData()); - } - } - - getBackend().runInternalAction(VdcActionType.DisconnectStorageServerConnection, - new StorageServerConnectionParametersBase(getParameters().getStorageServerConnection(), vdsId)); - } - return storageDomains; - } - - protected boolean connectStorageDomain(StorageDomain storageDomain) { - return StorageHelperDirector.getInstance().getItem(storageDomain.getStorageType()) - .connectStorageToDomainByVdsId(storageDomain, vdsId); - } - - private void logErrorMessage(StorageDomain storageDomain) { + protected void logErrorMessage(StorageDomain storageDomain) { if (storageDomain != null) { log.error("Could not get Storage Domain info for Storage Domain (name:'{}', id:'{}') with VDS '{}'. ", storageDomain.getName(), storageDomain.getId(), - vdsId); + getVdsId()); } else { - log.error("Could not get Storage Domain info with VDS '{}'. ", vdsId); + log.error("Could not get Storage Domain info with VDS '{}'. ", getVdsId()); } } @@ -157,8 +72,16 @@ return Backend.getInstance().getResourceManager(); } - public VDSReturnValue runVdsCommand(VDSCommandType commandType, VDSParametersBase parameters) + protected VDSReturnValue runVdsCommand(VDSCommandType commandType, VDSParametersBase parameters) throws VdcBLLException { return getBackend().getResourceManager().RunVdsCommand(commandType, parameters); } + + protected List<StorageDomainStatic> getAttachedStorageDomains() { + return null; + } + + protected boolean connectStorageDomain(StorageDomain storageDomain) { + return true; + } } diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/GetStorageDomainsWithAttachedStoragePoolGuidQueryTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/GetStorageDomainsWithAttachedStoragePoolGuidQueryTest.java index 6dca06e..3d2c3c3 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/GetStorageDomainsWithAttachedStoragePoolGuidQueryTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/GetStorageDomainsWithAttachedStoragePoolGuidQueryTest.java @@ -30,7 +30,7 @@ import org.ovirt.engine.core.utils.MockConfigRule; public class GetStorageDomainsWithAttachedStoragePoolGuidQueryTest extends - AbstractQueryTest<StorageDomainsAndStoragePoolIdQueryParameters, GetStorageDomainsWithAttachedStoragePoolGuidQuery<StorageDomainsAndStoragePoolIdQueryParameters>> + AbstractQueryTest<StorageDomainsAndStoragePoolIdQueryParameters, GetFileStorageDomainsWithAttachedStoragePoolGuidQuery<StorageDomainsAndStoragePoolIdQueryParameters>> { @ClassRule public static final MockConfigRule mcr = new MockConfigRule(); diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java index be83c97..b9c60e3 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java @@ -374,6 +374,8 @@ GetAffinityGroupById, GetAffinityGroupsByClusterId, GetAffinityGroupsByVmId, + GetFileStorageDomainsWithAttachedStoragePoolGuid, + GetBlockStorageDomainsWithAttachedStoragePoolGuid, GetStorageDomainsWithAttachedStoragePoolGuid, GetAllDisksPartialDataByVmId(VdcQueryAuthType.User), -- To view, visit http://gerrit.ovirt.org/36408 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I3cb04cec7d49b60d60e7fccf2bb7d512797b553f Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Maor Lipchuk <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
