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

Reply via email to