Sahina Bose has uploaded a new change for review.

Change subject: engine: Peer probing with alternate addresses
......................................................................

engine: Peer probing with alternate addresses

When another interface is marked as gluster network,
the gluster cluster has to be made aware of this address
using the "gluster peer probe"
Adding the functionality to handle that

Change-Id: I8fa407d6a525e73b89a79d063517798283b520fd
Bug-Url: https://bugzilla.redhat.com/1049994
Signed-off-by: Sahina Bose <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVdsCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterJob.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterSyncJob.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GlusterSyncJobTest.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterServer.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterServerDao.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterServerDaoDbFacadeImpl.java
M 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/gluster/GlusterServerDaoTest.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/GlusterVolumesListReturnForXmlRpc.java
M packaging/dbscripts/gluster_server_sp.sql
A packaging/dbscripts/upgrade/03_05_1420_add_alternateprobed_gluster_server.sql
11 files changed, 233 insertions(+), 12 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/48/40048/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVdsCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVdsCommand.java
index 2110a64..5d0750d 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVdsCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVdsCommand.java
@@ -247,14 +247,19 @@
                         if (glusterServers != null) {
                             if 
(!GlusterUtil.getInstance().isHostExists(glusterServers, getVds())) {
                                 setSucceeded(true);
-                                return;
                             }
                         }
                     }
-                    
getReturnValue().getFault().setError(returnValue.getVdsError().getCode());
-                    
getReturnValue().getFault().setMessage(returnValue.getVdsError().getMessage());
-                    errorType = AuditLogType.GLUSTER_SERVER_REMOVE_FAILED;
-                    return;
+                    if (!getSucceeded()) {
+                        
getReturnValue().getFault().setError(returnValue.getVdsError().getCode());
+                        
getReturnValue().getFault().setMessage(returnValue.getVdsError().getMessage());
+                        errorType = AuditLogType.GLUSTER_SERVER_REMOVE_FAILED;
+                        return;
+                    }
+                }
+                // if last but one host in cluster, update the last host's 
known addresses
+                if (getClusterUtils().getServerCount(getVdsGroupId()) == 2) {
+                    removeOtherKnowAddressesForGlusterServer(upServer.getId());
                 }
             }
         }
@@ -275,6 +280,10 @@
         return getClusterUtils().hasMultipleServers(getVdsGroupId());
     }
 
+    private void removeOtherKnowAddressesForGlusterServer(Guid lastServerId) {
+        getDbFacade().getGlusterServerDao().updateKnownAddresses(lastServerId, 
null);
+    }
+
     @Override
     protected Map<String, Pair<String, String>> getExclusiveLocks() {
         Map<String, Pair<String, String>> locks = new HashMap<String, 
Pair<String, String>>();
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterJob.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterJob.java
index fc4f4a8..3f2f570 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterJob.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterJob.java
@@ -35,6 +35,7 @@
 import org.ovirt.engine.core.dao.gluster.GlusterVolumeDao;
 import org.ovirt.engine.core.dao.gluster.StorageDeviceDao;
 import org.ovirt.engine.core.dao.network.InterfaceDao;
+import org.ovirt.engine.core.dao.network.NetworkDao;
 import org.ovirt.engine.core.utils.lock.EngineLock;
 import org.ovirt.engine.core.utils.lock.LockManager;
 import org.ovirt.engine.core.utils.lock.LockManagerFactory;
@@ -138,6 +139,11 @@
     protected StorageDeviceDao getStorageDeviceDao() {
         return DbFacade.getInstance().getStorageDeviceDao();
     }
+
+    protected NetworkDao getNetworkDao() {
+        return DbFacade.getInstance().getNetworkDao();
+    }
+
     /**
      * Acquires a lock on the cluster with given id and locking group {@link 
LockingGroup#GLUSTER}
      *
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterSyncJob.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterSyncJob.java
index 0fec24e..6308ea7 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterSyncJob.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterSyncJob.java
@@ -10,6 +10,7 @@
 import java.util.Objects;
 import java.util.Set;
 
+import org.apache.commons.lang.StringUtils;
 import org.ovirt.engine.core.bll.Backend;
 import org.ovirt.engine.core.bll.job.ExecutionHandler;
 import org.ovirt.engine.core.common.AuditLogType;
@@ -30,6 +31,7 @@
 import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeOptionEntity;
 import org.ovirt.engine.core.common.businessentities.gluster.PeerStatus;
 import org.ovirt.engine.core.common.businessentities.gluster.TransportType;
+import org.ovirt.engine.core.common.businessentities.network.Network;
 import 
org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface;
 import org.ovirt.engine.core.common.constants.gluster.GlusterConstants;
 import org.ovirt.engine.core.common.gluster.GlusterFeatureSupported;
@@ -39,10 +41,13 @@
 import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
 import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
 import org.ovirt.engine.core.common.vdscommands.VdsIdVDSCommandParametersBase;
+import 
org.ovirt.engine.core.common.vdscommands.gluster.AddGlusterServerVDSParameters;
 import 
org.ovirt.engine.core.common.vdscommands.gluster.GlusterVolumeAdvancedDetailsVDSParameters;
 import 
org.ovirt.engine.core.common.vdscommands.gluster.GlusterVolumesListVDSParameters;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.compat.TransactionScopeOption;
+import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector;
+import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableBase;
 import org.ovirt.engine.core.dao.gluster.GlusterDBUtils;
 import org.ovirt.engine.core.utils.lock.EngineLock;
 import org.ovirt.engine.core.utils.log.Log;
@@ -59,6 +64,7 @@
 public class GlusterSyncJob extends GlusterJob {
     private final Log log = LogFactory.getLog(GlusterSyncJob.class);
     private static final GlusterSyncJob instance = new GlusterSyncJob();
+    private final AuditLogDirector auditLogDirector = new AuditLogDirector();
 
     private GlusterSyncJob() {
     }
@@ -136,7 +142,7 @@
         try {
             List<GlusterServerInfo> fetchedServers = fetchServers(cluster, 
upServer, existingServers);
             if (fetchedServers != null) {
-                syncServers(existingServers, fetchedServers);
+                syncServers(cluster.getId(), existingServers, fetchedServers);
             }
         } catch(Exception e) {
             log.errorFormat("Error while refreshing server data for cluster 
{0} from database!", cluster.getName(), e);
@@ -145,10 +151,11 @@
         }
     }
 
-    private void syncServers(List<VDS> existingServers, 
List<GlusterServerInfo> fetchedServers) {
+    private void syncServers(Guid clusterId, List<VDS> existingServers, 
List<GlusterServerInfo> fetchedServers) {
         log.debugFormat("Existing servers list returned {0} comparing with 
fetched servers {1)", existingServers, fetchedServers);
 
         boolean serverRemoved = false;
+        Network glusterNetwork = findGlusterNetwork(clusterId);
         for (VDS server : existingServers) {
 
             if (isRemovableStatus(server.getStatus())) {
@@ -159,6 +166,8 @@
                     logUtil.logServerMessage(server, 
AuditLogType.GLUSTER_SERVER_REMOVED_FROM_CLI);
                     try (EngineLock lock = 
getGlusterUtil().acquireGlusterLockWait(server.getId())) {
                         removeServerFromDb(server);
+                        // if last but one server, reset alternate probed 
address for last server
+                        checkAndResetKnownAddress(existingServers, server);
                         // remove the server from resource manager
                         runVdsCommand(VDSCommandType.RemoveVds, new 
RemoveVdsVDSCommandParameters(server.getId()));
                         serverRemoved = true;
@@ -174,6 +183,9 @@
                     if (!returnValue.getSucceeded()) {
                         setNonOperational(server);
                     }
+                } else {
+                    // check if all interfaces with gluster network have been 
peer probed.
+                    peerProbeAlternateInterfaces(glusterNetwork, server);
                 }
             }
         }
@@ -181,6 +193,88 @@
             log.infoFormat("Servers detached using gluster CLI  is removed 
from engine after inspecting the Gluster servers list returned {0} "
                     + "- comparing with db servers {1}",
                     fetchedServers, existingServers);
+        }
+    }
+
+    // Check if only 1 host remaining in cluster, if so reset it's known 
address so that new host will
+    // be peer probed with this alternate address
+    private void checkAndResetKnownAddress(List<VDS> servers, VDS 
removedServer) {
+        if (servers.size() == 2) {
+            for (VDS server : servers) {
+                // set the known address on the remaining server.
+                if (!Objects.equals(server.getId(), removedServer.getId())) {
+                    getGlusterServerDao().updateKnownAddresses(server.getId(), 
null);
+                }
+            }
+        }
+    }
+
+    private void peerProbeAlternateInterfaces(Network glusterNetwork, VDS 
host) {
+        if (glusterNetwork == null || host.getStatus() != VDSStatus.Up) {
+            return;
+        }
+        GlusterServer glusterServer = getGlusterServerDao().get(host.getId());
+        if (glusterServer == null) {
+            return;
+        }
+        List<VdsNetworkInterface> interfaces = 
getInterfaceDao().getAllInterfacesForVds(host.getId());
+        for (VdsNetworkInterface iface : interfaces) {
+            if (glusterNetwork.getName().equals(iface.getNetworkName()) &&
+                    StringUtils.isNotBlank(iface.getAddress())
+                    && 
!glusterServer.getKnownAddresses().contains(iface.getAddress())) {
+                // get another server in the cluster
+                VDS upServer = 
getAlternateUpServerInCluster(host.getVdsGroupId(), host.getId());
+                if (upServer != null) {
+                    boolean peerProbed = 
glusterPeerProbeAdditionalInterface(upServer.getId(), iface.getAddress());
+                    if (peerProbed) {
+                        getGlusterServerDao().addKnownAddress(host.getId(), 
iface.getAddress());
+                    }
+                }
+            }
+        }
+
+    }
+
+    private Network findGlusterNetwork(Guid clusterId) {
+        List<Network> allNetworksInCluster = 
getNetworkDao().getAllForCluster(clusterId);
+
+        for (Network network : allNetworksInCluster) {
+            if (network.getCluster().isGluster()) {
+                return network;
+            }
+        }
+        return null;
+    }
+
+    private VDS getAlternateUpServerInCluster(Guid clusterId, Guid vdsId) {
+        List<VDS> vdsList = getVdsDao().getAllForVdsGroupWithStatus(clusterId, 
VDSStatus.Up);
+        // If the cluster already having Gluster servers, get an up server
+        if (vdsList.isEmpty()) {
+            return null;
+        }
+        for (VDS vds : vdsList) {
+            if (!vdsId.equals(vds.getId())) {
+                return vds;
+            }
+        }
+        return null;
+    }
+
+    private boolean glusterPeerProbeAdditionalInterface(Guid upServerId, 
String newServerName) {
+        try {
+            VDSReturnValue returnValue =
+                    runVdsCommand(VDSCommandType.AddGlusterServer,
+                            new AddGlusterServerVDSParameters(upServerId, 
newServerName));
+            if (!returnValue.getSucceeded()) {
+                AuditLogableBase logable = new AuditLogableBase(upServerId);
+                
logable.updateCallStackFromThrowable(returnValue.getExceptionObject());
+                auditLogDirector.log(logable, 
AuditLogType.GLUSTER_SERVER_ADD_FAILED);
+            }
+            return returnValue.getSucceeded();
+        } catch (Exception e) {
+            log.infoFormat("Exception in peer probing alernate name '{0}' on 
host with id '{1}'", newServerName, upServerId);
+            log.debug("Exception", e);
+            return false;
         }
     }
 
@@ -597,7 +691,7 @@
                 }
                 // update network id, if different
                 if (!Objects.equals(existingBrick.getNetworkId(), 
fetchedBrick.getNetworkId())) {
-                    log.info("Network address for brick '{}' detected as  
'{}'. Updating engine DB accordingly.",
+                    log.infoFormat("Network address for brick '{0}' detected 
as  '{1}'. Updating engine DB accordingly.",
                             existingBrick.getQualifiedName(),
                             fetchedBrick.getNetworkAddress());
                     getBrickDao().updateBrickNetworkId(existingBrick.getId(), 
fetchedBrick.getNetworkId());
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GlusterSyncJobTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GlusterSyncJobTest.java
index 663da38..017097d 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GlusterSyncJobTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GlusterSyncJobTest.java
@@ -65,6 +65,7 @@
 import org.ovirt.engine.core.dao.gluster.GlusterServerDao;
 import org.ovirt.engine.core.dao.gluster.GlusterVolumeDao;
 import org.ovirt.engine.core.dao.network.InterfaceDao;
+import org.ovirt.engine.core.dao.network.NetworkDao;
 import org.ovirt.engine.core.utils.MockConfigRule;
 import org.ovirt.engine.core.utils.MockEJBStrategyRule;
 
@@ -144,6 +145,8 @@
     private InterfaceDao interfaceDao;
     @Mock
     private GlusterServerDao glusterServerDao;
+    @Mock
+    private NetworkDao networkDao;
 
     private VDSGroup existingCluster;
     private VDS existingServer1;
@@ -378,6 +381,7 @@
         doReturn(clusterDao).when(glusterManager).getClusterDao();
         doReturn(interfaceDao).when(glusterManager).getInterfaceDao();
         doReturn(glusterServerDao).when(glusterManager).getGlusterServerDao();
+        doReturn(networkDao).when(glusterManager).getNetworkDao();
 
         
doReturn(Collections.singletonList(existingCluster)).when(clusterDao).getAll();
         doReturn(existingServers).when(vdsDao).getAllForVdsGroup(CLUSTER_ID);
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterServer.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterServer.java
index 3269535..f426381 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterServer.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterServer.java
@@ -1,5 +1,7 @@
 package org.ovirt.engine.core.common.businessentities.gluster;
 
+import java.util.ArrayList;
+
 import org.ovirt.engine.core.common.businessentities.BusinessEntity;
 import org.ovirt.engine.core.common.utils.ObjectUtils;
 import org.ovirt.engine.core.compat.Guid;
@@ -10,12 +12,16 @@
 
     private Guid serverId;
 
+    private ArrayList<String> knownAddresses;
+
     private Guid glusterServerUuid;
 
     public GlusterServer() {
+        knownAddresses = new ArrayList<String>();
     }
 
     public GlusterServer(Guid serverId, Guid glusterServerUuid) {
+        this();
         setId(serverId);
         setGlusterServerUuid(glusterServerUuid);
     }
@@ -38,12 +44,21 @@
         this.glusterServerUuid = serverUuid;
     }
 
+    public ArrayList<String> getKnownAddresses() {
+        return knownAddresses;
+    }
+
+    public void setKnownAddresses(ArrayList<String> knownAddresses) {
+        this.knownAddresses = knownAddresses;
+    }
+
     @Override
     public int hashCode() {
         final int prime = 31;
         int result = 1;
         result = prime * result + getId().hashCode();
         result = prime * result + ((getGlusterServerUuid() == null) ? 0 : 
getGlusterServerUuid().hashCode());
+        result = prime * result + ((getKnownAddresses() == null) ? 0 : 
getKnownAddresses().hashCode());
         return result;
     }
 
@@ -55,6 +70,7 @@
 
         GlusterServer entity = (GlusterServer) obj;
         return ObjectUtils.objectsEqual(getId(), entity.getId())
-                && ObjectUtils.objectsEqual(getGlusterServerUuid(), 
entity.getGlusterServerUuid());
+                && ObjectUtils.objectsEqual(getGlusterServerUuid(), 
entity.getGlusterServerUuid())
+                && ObjectUtils.objectsEqual(getKnownAddresses(), 
entity.getKnownAddresses());
     }
 }
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterServerDao.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterServerDao.java
index ad78c4a..63c8606 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterServerDao.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterServerDao.java
@@ -1,5 +1,7 @@
 package org.ovirt.engine.core.dao.gluster;
 
+import java.util.List;
+
 import org.ovirt.engine.core.common.businessentities.gluster.GlusterServer;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.dao.DAO;
@@ -12,4 +14,8 @@
     public GlusterServer getByGlusterServerUuid(Guid glusterServerUuid);
 
     public void removeByGlusterServerUuid(Guid glusterServerUuid);
+
+    public void addKnownAddress(Guid serverId, String address);
+
+    public void updateKnownAddresses(Guid serverId, List<String> addresses);
 }
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterServerDaoDbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterServerDaoDbFacadeImpl.java
index e02ac06..6e62ce5 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterServerDaoDbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterServerDaoDbFacadeImpl.java
@@ -2,7 +2,10 @@
 
 import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
 
+import org.apache.commons.lang.StringUtils;
 import org.ovirt.engine.core.common.businessentities.gluster.GlusterServer;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.dao.DefaultGenericDaoDbFacade;
@@ -45,6 +48,15 @@
             GlusterServer glusterServer = new GlusterServer();
             glusterServer.setId(getGuidDefaultEmpty(rs, "server_id"));
             glusterServer.setGlusterServerUuid(getGuidDefaultEmpty(rs, 
"gluster_server_uuid"));
+            String knownAddresses = rs.getString("known_addresses");
+            if (StringUtils.isNotBlank(knownAddresses)) {
+                String[] knownAddressArray = knownAddresses.split(",");
+                ArrayList<String> knownAddressList = new ArrayList<>();
+                for (String addr : knownAddressArray) {
+                    knownAddressList.add(addr);
+                }
+                glusterServer.setKnownAddresses(knownAddressList);
+            }
             return glusterServer;
         }
     }
@@ -64,4 +76,18 @@
     protected RowMapper<GlusterServer> createEntityRowMapper() {
         return glusterServerRowMapper;
     }
+
+    @Override
+    public void addKnownAddress(Guid serverId, String address) {
+        getCallsHandler().executeModification("AddGlusterServerKnownAddress",
+                getCustomMapSqlParameterSource().addValue("server_id", 
serverId)
+                        .addValue("known_address", address));
+    }
+
+    @Override
+    public void updateKnownAddresses(Guid serverId, List<String> addresses) {
+        
getCallsHandler().executeModification("UpdateGlusterServerKnownAddresses",
+                getCustomMapSqlParameterSource().addValue("server_id", 
serverId)
+                        .addValue("known_addresses", 
StringUtils.join(addresses, ",")));
+    }
 }
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/gluster/GlusterServerDaoTest.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/gluster/GlusterServerDaoTest.java
index 6962d12..29aab9a 100644
--- 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/gluster/GlusterServerDaoTest.java
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/gluster/GlusterServerDaoTest.java
@@ -4,6 +4,8 @@
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 
+import java.util.ArrayList;
+
 import org.junit.Test;
 import org.ovirt.engine.core.common.businessentities.gluster.GlusterServer;
 import org.ovirt.engine.core.compat.Guid;
@@ -73,4 +75,38 @@
         assertNotNull(entity);
         assertEquals(FixturesTool.GLUSTER_SERVER_UUID_NEW, 
entity.getGlusterServerUuid());
     }
+
+    @Test
+    public void testAddKnownAddresses() {
+        GlusterServer entityToUpdate = new GlusterServer(SERVER_ID1, 
FixturesTool.GLUSTER_SERVER_UUID_NEW);
+        dao.update(entityToUpdate);
+        dao.addKnownAddress(SERVER_ID1, "a.1");
+        GlusterServer entity = dao.getByServerId(SERVER_ID1);
+        assertNotNull(entity);
+        assertEquals(1, entity.getKnownAddresses().size());
+        assertEquals("a.1", entity.getKnownAddresses().get(0));
+        dao.addKnownAddress(SERVER_ID1, "a.2");
+        entity = dao.getByServerId(SERVER_ID1);
+        assertNotNull(entity);
+        assertEquals(2, entity.getKnownAddresses().size());
+        assertEquals("a.2", entity.getKnownAddresses().get(1));
+    }
+
+    @Test
+    public void testUpdateKnownAddresses() {
+        GlusterServer entityToUpdate = new GlusterServer(SERVER_ID1, 
FixturesTool.GLUSTER_SERVER_UUID_NEW);
+        dao.update(entityToUpdate);
+        dao.addKnownAddress(SERVER_ID1, "a.1");
+        GlusterServer entity = dao.getByServerId(SERVER_ID1);
+        assertNotNull(entity);
+        assertEquals(1, entity.getKnownAddresses().size());
+        assertEquals("a.1", entity.getKnownAddresses().get(0));
+        ArrayList<String> knownAddresses = new ArrayList<>();
+        knownAddresses.add("a.2");
+        dao.updateKnownAddresses(SERVER_ID1, knownAddresses);
+        entity = dao.getByServerId(SERVER_ID1);
+        assertNotNull(entity);
+        assertEquals(1, entity.getKnownAddresses().size());
+        assertEquals("a.2", entity.getKnownAddresses().get(0));
+    }
 }
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/GlusterVolumesListReturnForXmlRpc.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/GlusterVolumesListReturnForXmlRpc.java
index f4b6ec9..406795a 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/GlusterVolumesListReturnForXmlRpc.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/gluster/GlusterVolumesListReturnForXmlRpc.java
@@ -210,7 +210,7 @@
             if (network != null) {
                 networkId = network.getId();
             } else {
-                log.warn("Could not associate brick '{}' of volume '{}' with 
correct network as no gluster network found in cluster '{}'",
+                log.warnFormat("Could not associate brick '{0}' of volume 
'{1}' with correct network as no gluster network found in cluster '{2}'",
                         brickName,
                         volumeId,
                         clusterId);
diff --git a/packaging/dbscripts/gluster_server_sp.sql 
b/packaging/dbscripts/gluster_server_sp.sql
index 9511007..6e94492 100644
--- a/packaging/dbscripts/gluster_server_sp.sql
+++ b/packaging/dbscripts/gluster_server_sp.sql
@@ -18,7 +18,7 @@
 RETURNS SETOF gluster_server STABLE
 AS $procedure$
 BEGIN
-    RETURN QUERY SELECT server_id, gluster_server_uuid
+    RETURN QUERY SELECT *
     FROM gluster_server
     WHERE server_id = v_server_id;
 END; $procedure$
@@ -30,7 +30,7 @@
 RETURNS SETOF gluster_server STABLE
 AS $procedure$
 BEGIN
-    RETURN QUERY SELECT server_id, gluster_server_uuid
+    RETURN QUERY SELECT *
     FROM gluster_server
     WHERE gluster_server_uuid = v_gluster_server_uuid;
 END; $procedure$
@@ -71,3 +71,26 @@
 END; $procedure$
 LANGUAGE plpgsql;
 
+Create or replace FUNCTION UpdateGlusterServerKnownAddresses(v_server_id UUID,
+                                            v_known_addresses VARCHAR(250))
+RETURNS VOID
+AS $procedure$
+BEGIN
+    UPDATE gluster_server
+    SET known_addresses = v_known_addresses
+    WHERE server_id = v_server_id;
+END; $procedure$
+LANGUAGE plpgsql;
+
+Create or replace FUNCTION AddGlusterServerKnownAddress(v_server_id UUID,
+                                            v_known_address VARCHAR(250))
+RETURNS VOID
+AS $procedure$
+BEGIN
+    UPDATE gluster_server
+    SET known_addresses = coalesce(known_addresses || ',', '') || 
v_known_address
+    WHERE server_id = v_server_id;
+END; $procedure$
+LANGUAGE plpgsql;
+
+
diff --git 
a/packaging/dbscripts/upgrade/03_05_1420_add_alternateprobed_gluster_server.sql 
b/packaging/dbscripts/upgrade/03_05_1420_add_alternateprobed_gluster_server.sql
new file mode 100644
index 0000000..6931652
--- /dev/null
+++ 
b/packaging/dbscripts/upgrade/03_05_1420_add_alternateprobed_gluster_server.sql
@@ -0,0 +1 @@
+ALTER TABLE gluster_server add column known_addresses varchar(250) null;


-- 
To view, visit https://gerrit.ovirt.org/40048
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I8fa407d6a525e73b89a79d063517798283b520fd
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.5-gluster
Gerrit-Owner: Sahina Bose <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to