diff options
Diffstat (limited to 'geo-replication/syncdaemon')
| -rw-r--r-- | geo-replication/syncdaemon/configinterface.py.in | 12 | ||||
| -rw-r--r-- | geo-replication/syncdaemon/gsyncd.py | 45 | 
2 files changed, 57 insertions, 0 deletions
diff --git a/geo-replication/syncdaemon/configinterface.py.in b/geo-replication/syncdaemon/configinterface.py.in index f8df49935f1..0570061955f 100644 --- a/geo-replication/syncdaemon/configinterface.py.in +++ b/geo-replication/syncdaemon/configinterface.py.in @@ -64,6 +64,18 @@ CONFIGS = (       "ignore_deletes",       "true",       "false"), +    ("peersrx . .", +     "pid-file", +     "@GLUSTERD_WORKDIR@/geo-replication/${mastervol}_${remotehost}_" +     "${slavevol}/${eSlave}.pid", +     "@GLUSTERD_WORKDIR@/geo-replication/${mastervol}_${remotehost}_" +     "${slavevol}/monitor.pid"), +    ("peersrx . .", +     "state-file", +     "@GLUSTERD_WORKDIR@/geo-replication/${mastervol}_${remotehost}_" +     "${slavevol}/${eSlave}.status", +     "@GLUSTERD_WORKDIR@/geo-replication/${mastervol}_${remotehost}_" +     "${slavevol}/monitor.status"),  ) diff --git a/geo-replication/syncdaemon/gsyncd.py b/geo-replication/syncdaemon/gsyncd.py index fdb5348d363..1667e97b245 100644 --- a/geo-replication/syncdaemon/gsyncd.py +++ b/geo-replication/syncdaemon/gsyncd.py @@ -32,9 +32,14 @@ from syncdutils import GsyncdError, select, set_term_handler  from configinterface import GConffile, upgrade_config_file  import resource  from monitor import monitor +import xml.etree.ElementTree as XET +from subprocess import PIPE +import subprocess  from changelogagent import agent, Changelog  from gsyncdstatus import set_monitor_status, GeorepStatus +ParseError = XET.ParseError if hasattr(XET, 'ParseError') else SyntaxError +  class GLogger(Logger): @@ -112,6 +117,36 @@ class GLogger(Logger):          gconf.log_exit = True +# Given slave host and its volume name, get corresponding volume uuid +def slave_vol_uuid_get(host, vol): +    po = subprocess.Popen(['gluster', '--xml', '--remote-host=' + host, +                           'volume', 'info', vol], bufsize=0, +                          stdin=None, stdout=PIPE, stderr=PIPE) +    vix, err = po.communicate() +    if po.returncode != 0: +        logging.info("Volume info failed, unable to get " +                     "volume uuid of %s present in %s," +                     "returning empty string: %s" % +                     (vol, host, po.returncode)) +        return "" +    vi = XET.fromstring(vix) +    if vi.find('opRet').text != '0': +        logging.info("Unable to get volume uuid of %s, " +                     "present in %s returning empty string: %s" % +                     (vol, host, vi.find('opErrstr').text)) +        return "" + +    try: +        voluuid = vi.find("volInfo/volumes/volume/id").text +    except (ParseError, AttributeError, ValueError) as e: +        logging.info("Parsing failed to volume uuid of %s, " +                     "present in %s returning empty string: %s" % +                     (vol, host, e)) +        voluuid = "" + +    return voluuid + +  def startup(**kw):      """set up logging, pidfile grabbing, daemonization"""      if getattr(gconf, 'pid_file', None) and kw.get('go_daemon') != 'postconn': @@ -314,6 +349,8 @@ def main_i():                    action='callback', callback=store_local_curry('dont'))      op.add_option('--verify', type=str, dest="verify",                    action='callback', callback=store_local) +    op.add_option('--slavevoluuid-get', type=str, dest="slavevoluuid_get", +                  action='callback', callback=store_local)      op.add_option('--create', type=str, dest="create",                    action='callback', callback=store_local)      op.add_option('--delete', dest='delete', action='callback', @@ -375,6 +412,14 @@ def main_i():      defaults = op.get_default_values()      opts, args = op.parse_args(values=optparse.Values())      args_orig = args[:] + +    voluuid_get = rconf.get('slavevoluuid_get') +    if voluuid_get: +        slave_host, slave_vol = voluuid_get.split("::") +        svol_uuid = slave_vol_uuid_get(slave_host, slave_vol) +        print svol_uuid +        return +      r = rconf.get('resource_local')      if r:          if len(args) == 0:  | 
