From 9767eba8d1da85749afa1b9dfb63ddfd3f5d5191 Mon Sep 17 00:00:00 2001 From: Shireesh Anjal Date: Sun, 31 Jul 2011 16:43:00 +0530 Subject: Background task to periodically sync cluster-server mapping --- .../scripts/multicast-discover-servers.py | 90 ++++++++++++++++++++++ .../WebContent/scripts/vmware-discover-servers.py | 90 ---------------------- 2 files changed, 90 insertions(+), 90 deletions(-) create mode 100755 src/com.gluster.storage.management.server/WebContent/scripts/multicast-discover-servers.py delete mode 100755 src/com.gluster.storage.management.server/WebContent/scripts/vmware-discover-servers.py (limited to 'src/com.gluster.storage.management.server/WebContent') diff --git a/src/com.gluster.storage.management.server/WebContent/scripts/multicast-discover-servers.py b/src/com.gluster.storage.management.server/WebContent/scripts/multicast-discover-servers.py new file mode 100755 index 00000000..e9ae8666 --- /dev/null +++ b/src/com.gluster.storage.management.server/WebContent/scripts/multicast-discover-servers.py @@ -0,0 +1,90 @@ +#!/usr/bin/python +# Copyright (C) 2009 Gluster, Inc. +# This file is part of Gluster Storage Platform. +# +# Gluster Storage Platform is free software; you can redistribute it +# and/or modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 3 of +# the License, or (at your option) any later version. +# +# Gluster Storage Platform is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied warranty +# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see +# . + +import sys +import socket +import signal +import struct +import syslog +import Globals +import Common +import time +from XmlHandler import * + +class TimeoutException(Exception): + pass + +def timeoutSignal(signum, frame): + raise TimeoutException, "Timed out" + +def serverDiscoveryRequest(multiCastGroup, port): + servers = [] + # Sending request to all the servers + socketSend = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) + socketSend.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2) + socketSend.sendto("ServerDiscovery", (multiCastGroup, port)) + + # Waiting for the response + socketReceive = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) + socketReceive.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + socketReceive.bind(('', port)) + mreq = struct.pack("4sl", socket.inet_aton(multiCastGroup), socket.INADDR_ANY) + + socketReceive.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq) + sendtime = time.time() + socketSend.sendto("ServerDiscovery" % (sendtime), (multiCastGroup, port)) + + try: + while True: + response = socketReceive.recvfrom(200) + if not response: + continue + dom = XDOM() + dom.parseString(response[0]) + if not dom: + continue + if dom.getTextByTagRoute("request.name"): + continue + responsetime = dom.getTextByTagRoute("response.time") + servername = dom.getTextByTagRoute("response.servername") + if responsetime == str(sendtime): + servers.append(servername) + signal.signal(signal.SIGALRM, timeoutSignal) + signal.alarm(3) + except TimeoutException: + return servers + return None + +def main(): + syslog.openlog("discovery server request") + servers = serverDiscoveryRequest(Globals.MULTICAST_GROUP, Globals.MULTICAST_PORT) + if not servers: + Common.log(syslog.LOG_ERR, "Failed to discover new servers") + sys.exit(-1) + + servers = set(servers) + try: + for server in servers: + print server + except IOError: + Common.log(syslog.LOG_ERR, "Unable to open file %s" % Globals.DISCOVERED_SERVER_LIST_FILENAME) + sys.exit(-1) + sys.exit(0) + +if __name__ == "__main__": + main() diff --git a/src/com.gluster.storage.management.server/WebContent/scripts/vmware-discover-servers.py b/src/com.gluster.storage.management.server/WebContent/scripts/vmware-discover-servers.py deleted file mode 100755 index e9ae8666..00000000 --- a/src/com.gluster.storage.management.server/WebContent/scripts/vmware-discover-servers.py +++ /dev/null @@ -1,90 +0,0 @@ -#!/usr/bin/python -# Copyright (C) 2009 Gluster, Inc. -# This file is part of Gluster Storage Platform. -# -# Gluster Storage Platform is free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 3 of -# the License, or (at your option) any later version. -# -# Gluster Storage Platform is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied warranty -# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see -# . - -import sys -import socket -import signal -import struct -import syslog -import Globals -import Common -import time -from XmlHandler import * - -class TimeoutException(Exception): - pass - -def timeoutSignal(signum, frame): - raise TimeoutException, "Timed out" - -def serverDiscoveryRequest(multiCastGroup, port): - servers = [] - # Sending request to all the servers - socketSend = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) - socketSend.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2) - socketSend.sendto("ServerDiscovery", (multiCastGroup, port)) - - # Waiting for the response - socketReceive = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) - socketReceive.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - socketReceive.bind(('', port)) - mreq = struct.pack("4sl", socket.inet_aton(multiCastGroup), socket.INADDR_ANY) - - socketReceive.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq) - sendtime = time.time() - socketSend.sendto("ServerDiscovery" % (sendtime), (multiCastGroup, port)) - - try: - while True: - response = socketReceive.recvfrom(200) - if not response: - continue - dom = XDOM() - dom.parseString(response[0]) - if not dom: - continue - if dom.getTextByTagRoute("request.name"): - continue - responsetime = dom.getTextByTagRoute("response.time") - servername = dom.getTextByTagRoute("response.servername") - if responsetime == str(sendtime): - servers.append(servername) - signal.signal(signal.SIGALRM, timeoutSignal) - signal.alarm(3) - except TimeoutException: - return servers - return None - -def main(): - syslog.openlog("discovery server request") - servers = serverDiscoveryRequest(Globals.MULTICAST_GROUP, Globals.MULTICAST_PORT) - if not servers: - Common.log(syslog.LOG_ERR, "Failed to discover new servers") - sys.exit(-1) - - servers = set(servers) - try: - for server in servers: - print server - except IOError: - Common.log(syslog.LOG_ERR, "Unable to open file %s" % Globals.DISCOVERED_SERVER_LIST_FILENAME) - sys.exit(-1) - sys.exit(0) - -if __name__ == "__main__": - main() -- cgit