Tal Nisan has uploaded a new change for review. Change subject: core: Change connect/disconnect storage commands to type agnostic ......................................................................
core: Change connect/disconnect storage commands to type agnostic As a part of the effort to remove the type of storage pool the connect and disconnect host to storage command were changed to ignore the specific type of the connection and instead create a map of all connections divided by type and connect/disconnect to all type by type Relates-To: https://bugzilla.redhat.com/1038053 Change-Id: I07a7fb8af9ce89a38b51cdb07a43a15f9c13f839 Signed-off-by: Tal Nisan <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ConnectHostToStoragePooServerCommandBase.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ConnectHostToStoragePoolServersCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DisconnectHostFromStoragePoolServersCommand.java 3 files changed, 49 insertions(+), 151 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/96/23296/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ConnectHostToStoragePooServerCommandBase.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ConnectHostToStoragePooServerCommandBase.java index 148fff4..87c6392 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ConnectHostToStoragePooServerCommandBase.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ConnectHostToStoragePooServerCommandBase.java @@ -1,120 +1,43 @@ package org.ovirt.engine.core.bll.storage; import java.util.ArrayList; -import java.util.HashSet; +import java.util.HashMap; import java.util.List; -import java.util.Set; +import java.util.Map; import org.ovirt.engine.core.bll.InternalCommandAttribute; import org.ovirt.engine.core.common.action.StoragePoolParametersBase; -import org.ovirt.engine.core.common.businessentities.StorageDomainStatus; -import org.ovirt.engine.core.common.businessentities.StorageDomainType; -import org.ovirt.engine.core.common.businessentities.StorageType; -import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.StorageServerConnections; +import org.ovirt.engine.core.common.businessentities.StorageType; import org.ovirt.engine.core.dal.dbbroker.DbFacade; @InternalCommandAttribute public abstract class ConnectHostToStoragePooServerCommandBase<T extends StoragePoolParametersBase> extends StorageHandlingCommandBase<T> { private List<StorageServerConnections> _connections; - private List<StorageServerConnections> _isoConnections; - private List<StorageServerConnections> _exportConnections; - private StorageType _isoType = StorageType.NFS; - private StorageType _exportType = StorageType.NFS; - private boolean _needToConnectIso = false; - private boolean _needToConnectExport = false; + private Map<StorageType, List<StorageServerConnections>> connectionsTypeMap; public ConnectHostToStoragePooServerCommandBase(T parameters) { super(parameters); } - protected boolean getNeedToConnectIso() { - return _needToConnectIso; - } - - protected void setNeedToConnectIso(boolean value) { - _needToConnectIso = value; - } - - protected boolean getNeedToConnectExport() { - return _needToConnectExport; - } - - protected void setNeedToConnectExport(boolean value) { - _needToConnectExport = value; - } - - protected List<StorageServerConnections> getConnections() { - return _connections; - } - - protected List<StorageServerConnections> getIsoConnections() { - return _isoConnections; - } - - protected List<StorageServerConnections> getExportConnections() { - return _exportConnections; - } - - protected StorageType getIsoType() { - return _isoType; - } - - protected StorageType getExportType() { - return _exportType; + protected Map<StorageType, List<StorageServerConnections>> getConnectionsTypeMap() { + return connectionsTypeMap; } protected void initConnectionList() { - List<StorageDomain> allDomains = DbFacade.getInstance().getStorageDomainDao().getAllForStoragePool( - getStoragePool().getId()); - List<StorageDomain> isoDomains = getStorageDomainsByStoragePoolId(allDomains, StorageDomainType.ISO); - List<StorageDomain> exportDomains = - getStorageDomainsByStoragePoolId(allDomains, StorageDomainType.ImportExport); - - Set<StorageServerConnections> connections = new HashSet<StorageServerConnections>( + _connections = new ArrayList<StorageServerConnections>( DbFacade.getInstance().getStorageServerConnectionDao().getAllConnectableStorageSeverConnection(getStoragePool().getId())); - if (isoDomains.size() != 0) { - _isoType = isoDomains.get(0).getStorageType(); - Set<StorageServerConnections> isoConnections = - new HashSet<StorageServerConnections>( - StorageHelperDirector.getInstance().getItem(getIsoType()) - .getStorageServerConnectionsByDomain(isoDomains.get(0).getStorageStaticData())); - if (_isoType != getStoragePool().getStorageType()) { - connections.removeAll(isoConnections); - } else { - isoConnections.removeAll(connections); - } - _isoConnections = new ArrayList<StorageServerConnections>(isoConnections); - setNeedToConnectIso(_isoConnections.size() > 0); - } - if (exportDomains.size() != 0) { - _exportType = exportDomains.get(0).getStorageType(); - Set<StorageServerConnections> exportConnections = - new HashSet<StorageServerConnections>( - StorageHelperDirector.getInstance().getItem(getExportType()) - .getStorageServerConnectionsByDomain(exportDomains.get(0).getStorageStaticData())); - if (_exportType != getStoragePool().getStorageType()) { - connections.removeAll(exportConnections); - } else { - exportConnections.removeAll(connections); - } - _exportConnections = new ArrayList<StorageServerConnections>(exportConnections); - setNeedToConnectExport(exportConnections.size() > 0); - } - _connections = new ArrayList<StorageServerConnections>(connections); + updateConnectionsTypeMap(); } - protected List<StorageDomain> getStorageDomainsByStoragePoolId(List<StorageDomain> allDomains, - StorageDomainType type) { - List<StorageDomain> domains = new ArrayList<StorageDomain>(); - for (StorageDomain s : allDomains) { - StorageDomainStatus status = s.getStatus(); - if (s.getStorageDomainType() == type - && (StorageDomainStatus.Active == status || StorageDomainStatus.Unknown == status || StorageDomainStatus.InActive == status)) { - domains.add(s); + private void updateConnectionsTypeMap() { + connectionsTypeMap = new HashMap<>(); + for (StorageServerConnections conn : _connections) { + if (!connectionsTypeMap.containsKey(conn.getstorage_type())) { + connectionsTypeMap.put(conn.getstorage_type(), new ArrayList<StorageServerConnections>()); } + connectionsTypeMap.get(conn.getstorage_type()).add(conn); } - return domains; } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ConnectHostToStoragePoolServersCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ConnectHostToStoragePoolServersCommand.java index 88a883d..dc00406 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ConnectHostToStoragePoolServersCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ConnectHostToStoragePoolServersCommand.java @@ -34,41 +34,34 @@ @Override protected void executeCommand() { initConnectionList(); - setSucceeded(connectStorageServer(getStoragePool().getStorageType(), getConnections())); - - if (getNeedToConnectIso()) { - if (!connectStorageServer(getIsoType(), getIsoConnections())) { - log.infoFormat("Failed to connect host {0} to StoragePool {1} Iso domain/s connections", getVds() - .getName(), getStoragePool().getName()); - } - } - if (getNeedToConnectExport()) { - if (!connectStorageServer(getExportType(), getExportConnections())) { - log.infoFormat("Failed to connect host {0} to StoragePool {1} Export domain/s connections", getVds() - .getName(), getStoragePool().getName()); - } - } + setSucceeded(connectStorageServer(getConnectionsTypeMap())); if (!getSucceeded()) { AuditLogDirector.log(this, AuditLogType.CONNECT_STORAGE_SERVERS_FAILED); } } - private boolean connectStorageServer(StorageType type, List<StorageServerConnections> connections) { + private boolean connectStorageServer(Map<StorageType, List<StorageServerConnections>> connectionsByType) { boolean connectSucceeded = true; - if (connections != null && connections.size() > 0) { - Map<String, String> retValues = (HashMap<String, String>) Backend - .getInstance() - .getResourceManager() - .RunVdsCommand( - VDSCommandType.ConnectStorageServer, - new StorageServerConnectionManagementVDSParameters(getVds().getId(), - getStoragePool().getId(), type, connections)).getReturnValue(); - connectSucceeded = - StorageHelperDirector.getInstance().getItem(type).isConnectSucceeded(retValues, connections); + if (connectionsByType != null && connectionsByType.size() > 0) { + for (Map.Entry<StorageType, List<StorageServerConnections>> connectionToType : connectionsByType.entrySet()) { + connectSucceeded = connectSucceeded && connectStorageServersByType(connectionToType.getKey(), connectionToType.getValue()); + } + log.infoFormat("Host {0} storage connection was {1} ", getVds().getName(), connectSucceeded ? "succeeded" : "failed"); } return connectSucceeded; } + + private boolean connectStorageServersByType(StorageType storageType, List<StorageServerConnections> connections) { + Map<String, String> retValues = (HashMap<String, String>) Backend + .getInstance() + .getResourceManager() + .RunVdsCommand( + VDSCommandType.ConnectStorageServer, + new StorageServerConnectionManagementVDSParameters(getVds().getId(), + getStoragePool().getId(), storageType, connections)).getReturnValue(); + return StorageHelperDirector.getInstance().getItem(storageType).isConnectSucceeded(retValues, connections); + } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DisconnectHostFromStoragePoolServersCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DisconnectHostFromStoragePoolServersCommand.java index 3085043..cfc75c1 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DisconnectHostFromStoragePoolServersCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/DisconnectHostFromStoragePoolServersCommand.java @@ -1,11 +1,15 @@ package org.ovirt.engine.core.bll.storage; import java.util.HashMap; +import java.util.List; +import java.util.Map; import org.ovirt.engine.core.bll.Backend; import org.ovirt.engine.core.bll.InternalCommandAttribute; import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute; import org.ovirt.engine.core.common.action.HostStoragePoolParametersBase; +import org.ovirt.engine.core.common.businessentities.StorageServerConnections; +import org.ovirt.engine.core.common.businessentities.StorageType; import org.ovirt.engine.core.common.vdscommands.StorageServerConnectionManagementVDSParameters; import org.ovirt.engine.core.common.vdscommands.VDSCommandType; import org.ovirt.engine.core.common.vdscommands.VDSReturnValue; @@ -25,49 +29,27 @@ protected void executeCommand() { initConnectionList(); // TODO: check if host belong to more than one storage pool + + if (getConnectionsTypeMap() != null && getConnectionsTypeMap().size() > 0) { + for (Map.Entry<StorageType, List<StorageServerConnections>> connectionToType : getConnectionsTypeMap().entrySet()) { + disconnectStorageByType(connectionToType.getKey(), connectionToType.getValue()); + } + } + + } + + private void disconnectStorageByType(StorageType storageType, List<StorageServerConnections> connections) { VDSReturnValue vdsReturnValue = Backend .getInstance() .getResourceManager() .RunVdsCommand( VDSCommandType.DisconnectStorageServer, new StorageServerConnectionManagementVDSParameters(getVds().getId(), getStoragePool().getId(), - getStoragePool().getStorageType(), getConnections())); + storageType, connections)); setSucceeded(vdsReturnValue.getSucceeded()); if (!vdsReturnValue.getSucceeded()) { - StorageHelperDirector.getInstance().getItem(getStoragePool().getStorageType()) - .isConnectSucceeded((HashMap<String, String>) vdsReturnValue.getReturnValue(), getConnections()); - } - if (getIsoConnections() != null && getIsoConnections().size() != 0) { - vdsReturnValue = Backend - .getInstance() - .getResourceManager() - .RunVdsCommand( - VDSCommandType.DisconnectStorageServer, - new StorageServerConnectionManagementVDSParameters(getVds().getId(), - getStoragePool().getId(), getIsoType(), getIsoConnections())); - setSucceeded(vdsReturnValue.getSucceeded()); - if (!vdsReturnValue.getSucceeded()) { - StorageHelperDirector.getInstance() - .getItem(getIsoType()) - .isConnectSucceeded((HashMap<String, String>) vdsReturnValue.getReturnValue(), - getIsoConnections()); - } - } - if (getExportConnections() != null && getExportConnections().size() != 0) { - vdsReturnValue = Backend - .getInstance() - .getResourceManager() - .RunVdsCommand( - VDSCommandType.DisconnectStorageServer, - new StorageServerConnectionManagementVDSParameters(getVds().getId(), - getStoragePool().getId(), getExportType(), getExportConnections())); - setSucceeded(vdsReturnValue.getSucceeded()); - if (!vdsReturnValue.getSucceeded()) { - StorageHelperDirector.getInstance() - .getItem(getExportType()) - .isConnectSucceeded((HashMap<String, String>) vdsReturnValue.getReturnValue(), - getExportConnections()); - } + StorageHelperDirector.getInstance().getItem(storageType) + .isConnectSucceeded((HashMap<String, String>) vdsReturnValue.getReturnValue(), connections); } } } -- To view, visit http://gerrit.ovirt.org/23296 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I07a7fb8af9ce89a38b51cdb07a43a15f9c13f839 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Tal Nisan <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
