Sergey Gotliv has uploaded a new change for review.

Change subject: engine: Setup multiple iscsi sessions with the iscsi target
......................................................................

engine: Setup multiple iscsi sessions with the iscsi target

Up until now the engine allowed to create single connection to the
iscsi target using only one interface.
>From now on it's possible to configure iscsi multipath which will
protect against failing of the single network interface and provide
better throughput by using more than one interface.

Change-Id: I779f6dd95dfbfc2b74ad7ba3ce2271b7c9ad94db
Bug-Url: https://bugzilla.redhat.com/753541
Signed-off-by: Sergey Gotliv <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddIscsiBondCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/BaseIscsiBondCommand.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/ConnectStorageToVdsCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/EditIscsiBondCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ISCSIStorageHelper.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/StorageServerConnections.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageServerConnectionDAO.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageServerConnectionDAODbFacadeImpl.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/InterfaceDao.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/InterfaceDaoDbFacadeImpl.java
M 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageServerConnectionDAOTest.java
M 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/InterfaceDaoTest.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ConnectStorageServerVDSCommand.java
M packaging/dbscripts/create_views.sql
M packaging/dbscripts/network_sp.sql
M packaging/dbscripts/storages_san_sp.sql
17 files changed, 179 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/41/23541/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddIscsiBondCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddIscsiBondCommand.java
index df0c202..8b7da3d 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddIscsiBondCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddIscsiBondCommand.java
@@ -54,6 +54,7 @@
             }
         });
 
+        connectAllHostsToStorage(iscsiBond.getStorageConnectionIds());
         setSucceeded(true);
     }
 
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/BaseIscsiBondCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/BaseIscsiBondCommand.java
index b8bb09b..d058a90 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/BaseIscsiBondCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/BaseIscsiBondCommand.java
@@ -1,14 +1,23 @@
 package org.ovirt.engine.core.bll.storage;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.concurrent.Callable;
 
 import org.ovirt.engine.core.bll.CommandBase;
 import org.ovirt.engine.core.bll.utils.PermissionSubject;
 import org.ovirt.engine.core.common.VdcObjectType;
 import org.ovirt.engine.core.common.action.VdcActionParametersBase;
 import org.ovirt.engine.core.common.businessentities.IscsiBond;
+import org.ovirt.engine.core.common.businessentities.StorageServerConnections;
+import org.ovirt.engine.core.common.businessentities.StorageType;
+import org.ovirt.engine.core.common.businessentities.VDS;
+import org.ovirt.engine.core.common.businessentities.VDSStatus;
+import 
org.ovirt.engine.core.common.vdscommands.StorageServerConnectionManagementVDSParameters;
+import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
 import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.utils.threadpool.ThreadPoolUtil;
 
 public abstract class BaseIscsiBondCommand<T extends VdcActionParametersBase> 
extends CommandBase<T> {
 
@@ -26,6 +35,27 @@
                 VdcObjectType.StoragePool, getActionType().getActionGroup()));
     }
 
+    protected void connectAllHostsToStorage(List<String> connectionIds) {
+        List<Callable<Void>> tasks = new ArrayList<>();
+        final List<StorageServerConnections> connections = 
getDbFacade().getStorageServerConnectionDao().getByIds(connectionIds);
+        List<VDS> hosts = 
getVdsDAO().getAllForStoragePoolAndStatus(getIscsiBond().getStoragePoolId(), 
VDSStatus.Up);
+
+        for (final VDS host : hosts) {
+            tasks.add(new Callable<Void>() {
+                @Override
+                public Void call() throws Exception {
+                    final List<StorageServerConnections> conns = 
ISCSIStorageHelper.updateIfaces(connections, host.getId());
+                    runVdsCommand(VDSCommandType.ConnectStorageServer,
+                            new 
StorageServerConnectionManagementVDSParameters(host.getId(), Guid.Empty, 
StorageType.ISCSI, conns)
+                    );
+                    return null;
+                }
+            });
+        }
+
+        ThreadPoolUtil.invokeAll(tasks);
+    }
+
     /**
      * Used by audit log to populate ${IscsiBondName} placeholder.
      * @return
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..dc47d87 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
@@ -57,6 +57,10 @@
     private boolean connectStorageServer(StorageType type, 
List<StorageServerConnections> connections) {
         boolean connectSucceeded = true;
         if (connections != null && connections.size() > 0) {
+            if (type == StorageType.ISCSI) {
+                connections = ISCSIStorageHelper.updateIfaces(connections, 
getVds().getId());
+            }
+
             Map<String, String> retValues = (HashMap<String, String>) Backend
                     .getInstance()
                     .getResourceManager()
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ConnectStorageToVdsCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ConnectStorageToVdsCommand.java
index b1389de..7ac95e1 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ConnectStorageToVdsCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ConnectStorageToVdsCommand.java
@@ -9,6 +9,7 @@
 import org.ovirt.engine.core.bll.InternalCommandAttribute;
 import 
org.ovirt.engine.core.common.action.StorageServerConnectionParametersBase;
 import org.ovirt.engine.core.common.businessentities.StorageServerConnections;
+import org.ovirt.engine.core.common.businessentities.StorageType;
 import org.ovirt.engine.core.common.errors.VdcFault;
 import org.ovirt.engine.core.common.utils.Pair;
 import 
org.ovirt.engine.core.common.vdscommands.StorageServerConnectionManagementVDSParameters;
@@ -46,6 +47,10 @@
     protected Pair<Boolean, Integer> connectHostToStorage() {
         List<StorageServerConnections> connections = 
Arrays.asList(getConnection());
 
+        if (getConnection().getstorage_type() == StorageType.ISCSI) {
+            connections = ISCSIStorageHelper.updateIfaces(connections, 
getVds().getId());
+        }
+
         Map<String, String> result = (HashMap<String, String>) runVdsCommand(
                 VDSCommandType.ConnectStorageServer,
                 new 
StorageServerConnectionManagementVDSParameters(getVds().getId(), Guid.Empty,
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/EditIscsiBondCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/EditIscsiBondCommand.java
index 51688d9..e1e65cb 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/EditIscsiBondCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/EditIscsiBondCommand.java
@@ -1,5 +1,6 @@
 package org.ovirt.engine.core.bll.storage;
 
+import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -20,6 +21,9 @@
 public class EditIscsiBondCommand <T extends EditIscsiBondParameters> extends 
BaseIscsiBondCommand<T> {
 
     private IscsiBond existingIscsiBond;
+
+    private List<String> addedConnections = new ArrayList<>();
+    private List<Guid> addedNetworks = new ArrayList<>();
 
     public EditIscsiBondCommand(T parameters) {
         super(parameters);
@@ -62,6 +66,10 @@
             }
         });
 
+        if (!addedConnections.isEmpty() || !addedNetworks.isEmpty()) {
+            connectAllHostsToStorage(getIscsiBond().getStorageConnectionIds());
+        }
+
         setSucceeded(true);
     }
 
@@ -70,6 +78,7 @@
 
         for (Guid networkId : getIscsiBond().getNetworkIds()) {
             if (!beforeChangeNetworkIds.remove(networkId)) {
+                addedNetworks.add(networkId);
                 
getDbFacade().getIscsiBondDao().addNetworkToIscsiBond(getExistingIscsiBond().getId(),
 networkId);
             }
         }
@@ -84,6 +93,7 @@
 
         for (String connectionId : getIscsiBond().getStorageConnectionIds()) {
             if (!beforeChangeConnectionIds.remove(connectionId)) {
+                addedConnections.add(connectionId);
                 
getDbFacade().getIscsiBondDao().addStorageConnectionToIscsiBond(getExistingIscsiBond().getId(),
 connectionId);
             }
         }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ISCSIStorageHelper.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ISCSIStorageHelper.java
index c536841..4353eb2 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ISCSIStorageHelper.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ISCSIStorageHelper.java
@@ -14,6 +14,7 @@
 import org.ovirt.engine.core.common.businessentities.StorageDomainStatic;
 import org.ovirt.engine.core.common.businessentities.StorageServerConnections;
 import org.ovirt.engine.core.common.businessentities.StorageType;
+import 
org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface;
 import 
org.ovirt.engine.core.common.vdscommands.StorageServerConnectionManagementVDSParameters;
 import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
 import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
@@ -47,6 +48,8 @@
             if (VDSCommandType.forValue(type) == 
VDSCommandType.DisconnectStorageServer) {
                 list = filterConnectionsUsedByOthers(list, 
storageDomain.getStorage(), lun != null ? lun.getLUN_id()
                         : "");
+            } else if (VDSCommandType.forValue(type) == 
VDSCommandType.ConnectStorageServer) {
+                list = updateIfaces(list, vdsId);
             }
             Guid poolId = storagePoolId;
             if (storageDomain != null && storageDomain.getStoragePoolId() != 
null) {
@@ -74,6 +77,32 @@
         return isSuccess;
     }
 
+    public static List<StorageServerConnections> 
updateIfaces(List<StorageServerConnections> conns, Guid vdsId) {
+        List<StorageServerConnections> res = new ArrayList<>(conns);
+
+        for (StorageServerConnections conn : conns) {
+            // Get list of endpoints (nics or vlans) that will initiate iscsi 
sessions.
+            // Targets are represented by StorageServerConnections object 
(connection, iqn, port, portal).
+            List<VdsNetworkInterface> ifaces = 
DbFacade.getInstance().getInterfaceDao()
+                    .getIscsiIfacesByHostIdAndStorageTargetId(vdsId, 
conn.getid());
+
+            if (!ifaces.isEmpty()) {
+                conn.setIface(ifaces.remove(0).getName());
+
+                // Iscsi target is represented by connection object, therefore 
if this target is approachable
+                // from more than one endpoint(initiator) we have to clone 
this connection per endpoint.
+                for (VdsNetworkInterface iface : ifaces) {
+                    StorageServerConnections newConn = 
StorageServerConnections.copyOf(conn);
+                    newConn.setid(Guid.newGuid().toString());
+                    newConn.setIface(iface.getName());
+                    res.add(newConn);
+                }
+            }
+        }
+
+        return res;
+    }
+
     @SuppressWarnings("unchecked")
     @Override
     protected List<StorageServerConnections> filterConnectionsUsedByOthers(
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/StorageServerConnections.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/StorageServerConnections.java
index 01bb78c..99da2b0 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/StorageServerConnections.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/StorageServerConnections.java
@@ -177,6 +177,16 @@
     @Max(value = Short.MAX_VALUE, message = 
"VALIDATION_STORAGE_CONNECTION_NFS_RETRANS")
     private Short nfsRetrans;
 
+    private String iface;
+
+    public String getIface() {
+        return iface;
+    }
+
+    public void setIface(String iface) {
+        this.iface = iface;
+    }
+
     @Override
     public boolean equals(Object obj) {
         boolean returnValue = super.equals(obj);
@@ -232,6 +242,10 @@
         sb.append(this.getNfsRetrans());
         sb.append(", nfsTimeo: ");
         sb.append(this.getNfsTimeo());
+        if (getIface() != null) {
+            sb.append(", iface: ");
+            sb.append(this.getIface());
+        }
         sb.append(" };");
         return sb.toString();
     }
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageServerConnectionDAO.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageServerConnectionDAO.java
index d7421ec..c122f0d 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageServerConnectionDAO.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageServerConnectionDAO.java
@@ -29,6 +29,15 @@
     StorageServerConnections get(String id);
 
     /**
+     * Retrieves connections which id is one of the specified ids.
+     *
+     * @param ids
+     *            the list of connection ids
+     * @return
+     */
+    List<StorageServerConnections> getByIds(List<String> ids);
+
+    /**
      * Retrieves the connection for the given iqn.
      *
      * @param iqn
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageServerConnectionDAODbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageServerConnectionDAODbFacadeImpl.java
index 86b35f4..392ae10 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageServerConnectionDAODbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageServerConnectionDAODbFacadeImpl.java
@@ -4,6 +4,7 @@
 import java.sql.SQLException;
 import java.util.List;
 
+import org.apache.commons.lang.StringUtils;
 import org.springframework.jdbc.core.RowMapper;
 import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
 import org.ovirt.engine.core.common.businessentities.NfsVersion;
@@ -33,6 +34,12 @@
     }
 
     @Override
+    public List<StorageServerConnections> getByIds(List<String> ids) {
+        return 
getCallsHandler().executeReadList("GetStorageServerConnectionsByIds",
+                mapper, getCustomMapSqlParameterSource().addValue("ids", 
StringUtils.join(ids, ",")));
+    }
+
+    @Override
     public StorageServerConnections getForIqn(String iqn) {
         return 
getCallsHandler().executeRead("Getstorage_server_connectionsByIqn", mapper,
                 getCustomMapSqlParameterSource()
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/InterfaceDao.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/InterfaceDao.java
index ffff869..e87e64e 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/InterfaceDao.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/InterfaceDao.java
@@ -177,4 +177,16 @@
      * @return all labels defined for the data-center's networks
      */
     Set<String> getAllNetworkLabelsForDataCenter(Guid id);
+
+    /**
+     * Retrieve the list of the host endpoints (nics or vlans) that configured 
as iscsi session
+     * initiators to the relevant iscsi target
+     *
+     * @param hostId
+     *             the host id
+     * @param storageTargetId
+     *             the iscsi target id
+     * @return
+     */
+    List<VdsNetworkInterface> getIscsiIfacesByHostIdAndStorageTargetId(Guid 
hostId, String storageTargetId);
 }
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/InterfaceDaoDbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/InterfaceDaoDbFacadeImpl.java
index 17212cd..9376bb5 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/InterfaceDaoDbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/InterfaceDaoDbFacadeImpl.java
@@ -271,6 +271,13 @@
 
     }
 
+    @Override
+    public List<VdsNetworkInterface> 
getIscsiIfacesByHostIdAndStorageTargetId(Guid hostId, String storageTargetId) {
+        return 
getCallsHandler().executeReadList("GetIscsiIfacesByHostIdAndStorageTargetId",
+                vdsNetworkInterfaceRowMapper,
+                getCustomMapSqlParameterSource().addValue("host_id", 
hostId).addValue("target_id", storageTargetId));
+    }
+
     private static final RowMapper<VdsNetworkInterface> 
vdsNetworkInterfaceRowMapper =
             new RowMapper<VdsNetworkInterface>() {
                 @SuppressWarnings("unchecked")
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageServerConnectionDAOTest.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageServerConnectionDAOTest.java
index c909312..65a0ce7 100644
--- 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageServerConnectionDAOTest.java
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageServerConnectionDAOTest.java
@@ -7,6 +7,7 @@
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
+import java.util.Arrays;
 import java.util.List;
 
 import org.junit.Test;
@@ -232,4 +233,10 @@
       assertEquals(connections.size(), 2);
       
assertTrue((connections.get(0).getid().equals("fDMzhE-wx3s-zo3q-Qcxd-T0li-yoYU-QvVePk"))
 || 
(connections.get(0).getid().equals("0cc146e8-e5ed-482c-8814-270bc48c297e")));
     }
+
+    @Test
+    public void testGetConnectionsBySpecificIds() {
+        List<StorageServerConnections> connections = 
dao.getByIds(Arrays.asList("0cc146e8-e5ed-482c-8814-270bc48c297f"));
+        assertEquals(1, connections.size());
+    }
 }
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/InterfaceDaoTest.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/InterfaceDaoTest.java
index 91f61e4..26dd2e8 100644
--- 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/InterfaceDaoTest.java
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/InterfaceDaoTest.java
@@ -28,6 +28,7 @@
     private static final String IP_ADDR = "10.35.110.10";
     private static final Guid VDS_ID = new 
Guid("afce7a39-8e8c-4819-ba9c-796d316592e6");
     private static final Guid CLUSTER_ID = new 
Guid("b399944a-81ab-4ec5-8266-e19ba7c3c9d1");
+    private static final String TARGET_ID = 
"0cc146e8-e5ed-482c-8814-270bc48c297b";
     private static final String LABEL = "abc";
 
     private InterfaceDao dao;
@@ -371,4 +372,16 @@
         assertNotNull(map.get(VDS_ID));
         assertFalse(map.get(VDS_ID).isEmpty());
     }
+
+    public void testGetIscsiIfacesByHostIdAndStorageTargetId() {
+        List<VdsNetworkInterface> interfaces =
+                dao.getIscsiIfacesByHostIdAndStorageTargetId(VDS_ID, 
TARGET_ID);
+
+        assertNotNull(interfaces);
+        assertFalse(interfaces.isEmpty());
+
+        for (VdsNetworkInterface nic : interfaces) {
+            assertEquals(VDS_ID, nic.getVdsId());
+        }
+    }
 }
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ConnectStorageServerVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ConnectStorageServerVDSCommand.java
index 543c6f4..2ed19f1 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ConnectStorageServerVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ConnectStorageServerVDSCommand.java
@@ -78,6 +78,7 @@
         con.put("iqn", connection.getiqn(), "");
         con.put("user", connection.getuser_name(), "");
         con.put("password", connection.getpassword(), "");
+        con.putIfNotEmpty("initiatorName", connection.getIface());
 
         // storage_pool can be null when discovering iscsi send targets or 
when connecting
         // through vds which has no storage pool
diff --git a/packaging/dbscripts/create_views.sql 
b/packaging/dbscripts/create_views.sql
index cc77956..3aadaed 100644
--- a/packaging/dbscripts/create_views.sql
+++ b/packaging/dbscripts/create_views.sql
@@ -878,7 +878,7 @@
       vds_interface.bond_name, vds_interface.is_bond, vds_interface.bond_opts, 
vds_interface.mac_addr,
       vds_interface.network_name, vds_interface.name, vds_static.vds_id, 
vds_static.vds_name,  vds_interface.id,
       vds_interface.boot_protocol, vds_interface.mtu as mtu, 
vds_interface.bridged, 1 AS is_vds, vds_interface.qos_overridden AS 
qos_overridden,
-      vds_interface.labels as labels
+      vds_interface.labels as labels, vds_static.vds_group_id as vds_group_id
   FROM vds_interface_statistics
   JOIN vds_interface ON vds_interface_statistics.id = vds_interface.id
   JOIN vds_static ON vds_interface.vds_id = vds_static.vds_id;
diff --git a/packaging/dbscripts/network_sp.sql 
b/packaging/dbscripts/network_sp.sql
index 87b720c..47b67a1 100644
--- a/packaging/dbscripts/network_sp.sql
+++ b/packaging/dbscripts/network_sp.sql
@@ -1252,3 +1252,24 @@
    WHERE network_qos_id = v_network_qos_id;
 END; $procedure$
 LANGUAGE plpgsql;
+
+
+Create or replace FUNCTION GetIscsiIfacesByHostIdAndStorageTargetId(v_host_id 
UUID, v_target_id varchar(50)) RETURNS SETOF vds_interface_view STABLE
+   AS $procedure$
+BEGIN
+   RETURN QUERY SELECT vds_interface_view.*
+   FROM vds_interface_view,
+        network_cluster,
+        network,
+        iscsi_bonds_networks_map,
+        iscsi_bonds_storage_connections_map
+   WHERE
+       iscsi_bonds_storage_connections_map.connection_id = v_target_id AND
+       iscsi_bonds_storage_connections_map.iscsi_bond_id = 
iscsi_bonds_networks_map.iscsi_bond_id AND
+       iscsi_bonds_networks_map.network_id = network.id AND
+       network.id = network_cluster.network_id AND
+       network.name = vds_interface_view.network_name AND
+       network_cluster.cluster_id = vds_interface_view.vds_group_id AND
+       vds_interface_view.vds_id = v_host_id;
+END; $procedure$
+LANGUAGE plpgsql;
diff --git a/packaging/dbscripts/storages_san_sp.sql 
b/packaging/dbscripts/storages_san_sp.sql
index 5f07bc8..3a6c7f3 100644
--- a/packaging/dbscripts/storages_san_sp.sql
+++ b/packaging/dbscripts/storages_san_sp.sql
@@ -507,6 +507,14 @@
 LANGUAGE plpgsql;
 
 
+Create or replace FUNCTION GetStorageServerConnectionsByIds(v_ids TEXT)
+RETURNS SETOF storage_server_connections STABLE
+   AS $procedure$
+BEGIN
+   RETURN QUERY SELECT *
+   FROM storage_server_connections WHERE id = 
any(string_to_array(v_ids,',')::VARCHAR[]);
+END; $procedure$
+LANGUAGE plpgsql;
 
 
 Create or replace FUNCTION 
Getstorage_server_connectionsByVolumeGroupId(v_volume_group_id VARCHAR(50)) 
RETURNS SETOF storage_server_connections STABLE


-- 
To view, visit http://gerrit.ovirt.org/23541
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I779f6dd95dfbfc2b74ad7ba3ce2271b7c9ad94db
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.4
Gerrit-Owner: Sergey Gotliv <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to