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
