From 367d7f814114df2be19b743409d998d73aa893c0 Mon Sep 17 00:00:00 2001 From: Atin Mukherjee Date: Wed, 30 May 2018 11:44:24 +0530 Subject: [PATCH 660/660] Revert "geo-rep: Remove lazy umount and use mount namespaces" This reverts commit 1747de037b7fa7513d5a3755d273002076165784 to make the RHEL6 build BUG: 1556680 Change-Id: I9d8263ea2fb5c7226539fccd028f89146d4b42a5 Signed-off-by: Kotresh HR Reviewed-by: Atin Mukherjee Reviewed-on: https://code.engineering.redhat.com/gerrit/140201 Tested-by: RHGS Build Bot --- geo-replication/syncdaemon/gconf.py | 3 --- geo-replication/syncdaemon/gsyncd.py | 14 +++++------- geo-replication/syncdaemon/monitor.py | 38 ++++++++++++-------------------- geo-replication/syncdaemon/resource.py | 16 ++------------ geo-replication/syncdaemon/syncdutils.py | 18 +-------------- glusterfs.spec.in | 4 ---- 6 files changed, 23 insertions(+), 70 deletions(-) diff --git a/geo-replication/syncdaemon/gconf.py b/geo-replication/syncdaemon/gconf.py index 2280f44..97395b4 100644 --- a/geo-replication/syncdaemon/gconf.py +++ b/geo-replication/syncdaemon/gconf.py @@ -28,8 +28,5 @@ class GConf(object): active_earlier = False passive_earlier = False mgmt_lock_fd = None - mountbroker = False - mount_point = None - mbr_umount_cmd = [] gconf = GConf() diff --git a/geo-replication/syncdaemon/gsyncd.py b/geo-replication/syncdaemon/gsyncd.py index 96256cf..f9471e4 100644 --- a/geo-replication/syncdaemon/gsyncd.py +++ b/geo-replication/syncdaemon/gsyncd.py @@ -269,8 +269,6 @@ def main_i(): type=str, action='callback', callback=store_abs) op.add_option('--georep-session-working-dir', metavar='STATF', type=str, action='callback', callback=store_abs) - op.add_option('--access-mount', default=False, action='store_true') - op.add_option('--slave-access-mount', default=False, action='store_true') op.add_option('--ignore-deletes', default=False, action='store_true') op.add_option('--isolated-slave', default=False, action='store_true') op.add_option('--use-rsync-xattrs', default=False, action='store_true') @@ -416,7 +414,7 @@ def main_i(): o.get_opt_string() not in ('--version', '--help'))] remote_tunables = ['listen', 'go_daemon', 'timeout', 'session_owner', 'config_file', 'use_rsync_xattrs', - 'local_id', 'local_node', 'slave_access_mount'] + 'local_id', 'local_node'] rq_remote_tunables = {'listen': True} # precedence for sources of values: 1) commandline, 2) cfg file, 3) @@ -750,15 +748,15 @@ def main_i(): else: log_file = gconf.log_file if be_monitor: - gconf.label = 'monitor' + label = 'monitor' elif be_agent: - gconf.label = gconf.local_path + label = gconf.local_path elif remote: # master - gconf.label = gconf.local_path + label = gconf.local_path else: - gconf.label = 'slave' - startup(go_daemon=go_daemon, log_file=log_file, label=gconf.label) + label = 'slave' + startup(go_daemon=go_daemon, log_file=log_file, label=label) resource.Popen.init_errhandler() if be_agent: diff --git a/geo-replication/syncdaemon/monitor.py b/geo-replication/syncdaemon/monitor.py index 087a202..dc0211e 100644 --- a/geo-replication/syncdaemon/monitor.py +++ b/geo-replication/syncdaemon/monitor.py @@ -24,7 +24,7 @@ import random from gconf import gconf from syncdutils import select, waitpid, errno_wrap from syncdutils import set_term_handler, is_host_local, GsyncdError -from syncdutils import escape, Thread, finalize, memoize, boolify +from syncdutils import escape, Thread, finalize, memoize from syncdutils import gf_event, EVENT_GEOREP_FAULTY from gsyncdstatus import GeorepStatus, set_monitor_status @@ -301,29 +301,19 @@ class Monitor(object): os.close(pr) os.close(ra) os.close(wa) - args_to_worker = argv + ['--feedback-fd', str(pw), - '--local-path', w[0]['dir'], - '--local-node', w[0]['host'], - '--local-node-id', - w[0]['uuid'], - '--local-id', - '.' + escape(w[0]['dir']), - '--rpc-fd', - ','.join([str(rw), str(ww), - str(ra), str(wa)]), - '--subvol-num', str(w[2])] - - if w[3]: - args_to_worker.append('--is-hottier') - args_to_worker += ['--resource-remote', remote_host] - - access_mount = boolify(gconf.access_mount) - if access_mount: - os.execv(sys.executable, args_to_worker) - else: - unshare_cmd = ['unshare', '-m', '--propagation', 'private'] - cmd = unshare_cmd + args_to_worker - os.execvp("unshare", cmd) + os.execv(sys.executable, argv + ['--feedback-fd', str(pw), + '--local-path', w[0]['dir'], + '--local-node', w[0]['host'], + '--local-node-id', + w[0]['uuid'], + '--local-id', + '.' + escape(w[0]['dir']), + '--rpc-fd', + ','.join([str(rw), str(ww), + str(ra), str(wa)]), + '--subvol-num', str(w[2])] + + (['--is-hottier'] if w[3] else []) + + ['--resource-remote', remote_host]) cpids.add(cpid) agents.add(apid) diff --git a/geo-replication/syncdaemon/resource.py b/geo-replication/syncdaemon/resource.py index 39d537b..943e3ec 100644 --- a/geo-replication/syncdaemon/resource.py +++ b/geo-replication/syncdaemon/resource.py @@ -989,8 +989,6 @@ class SlaveRemote(object): extra_opts += ['--local-node', ln] if boolify(gconf.use_rsync_xattrs): extra_opts.append('--use-rsync-xattrs') - if boolify(gconf.slave_access_mount): - extra_opts.append('--slave-access-mount') po = Popen(rargs + gconf.remote_gsyncd.split() + extra_opts + ['-N', '--listen', '--timeout', str(gconf.timeout), slave], @@ -1260,7 +1258,6 @@ class GLUSTER(AbstractUrl, SlaveLocal, SlaveRemote): def __init__(self, params): self.params = params self.mntpt = None - self.umount_cmd = [] @classmethod def get_glusterprog(cls): @@ -1351,16 +1348,13 @@ class GLUSTER(AbstractUrl, SlaveLocal, SlaveRemote): assert(mntdata[-1] == '\0') mntpt = mntdata[:-1] assert(mntpt) - if mounted and gconf.label == 'slave' \ - and not boolify(gconf.slave_access_mount): + if mounted: po = self.umount_l(mntpt) po.terminate_geterr(fail_on_err=False) if po.returncode != 0: po.errlog() rv = po.returncode - if gconf.label == 'slave' \ - and not boolify(gconf.slave_access_mount): - self.cleanup_mntpt(mntpt) + self.cleanup_mntpt(mntpt) except: logging.exception('mount cleanup failure:') rv = 200 @@ -1380,7 +1374,6 @@ class GLUSTER(AbstractUrl, SlaveLocal, SlaveRemote): def make_mount_argv(self): self.mntpt = tempfile.mkdtemp(prefix='gsyncd-aux-mount-') - gconf.mount_point = self.mntpt return [self.get_glusterprog()] + \ ['--' + p for p in self.params] + [self.mntpt] @@ -1412,11 +1405,6 @@ class GLUSTER(AbstractUrl, SlaveLocal, SlaveRemote): def handle_mounter(self, po): self.mntpt = po.stdout.readline()[:-1] - gconf.mount_point = self.mntpt - gconf.mountbroker = True - self.umount_cmd = self.make_cli_argv() + ['umount'] - gconf.mbr_umount_cmd = self.umount_cmd - po.stdout.close() sup(self, po) if po.returncode != 0: diff --git a/geo-replication/syncdaemon/syncdutils.py b/geo-replication/syncdaemon/syncdutils.py index 8dc6c96..a22289e 100644 --- a/geo-replication/syncdaemon/syncdutils.py +++ b/geo-replication/syncdaemon/syncdutils.py @@ -16,7 +16,6 @@ import fcntl import shutil import logging import socket -import subprocess from threading import Lock, Thread as baseThread from errno import EACCES, EAGAIN, EPIPE, ENOTCONN, ECONNABORTED from errno import EINTR, ENOENT, EPERM, ESTALE, EBUSY, errorcode @@ -189,6 +188,7 @@ def grabpidfile(fname=None, setpid=True): final_lock = Lock() + def finalize(*a, **kw): """all those messy final steps we go trough upon termination @@ -233,22 +233,6 @@ def finalize(*a, **kw): if sys.exc_info()[0] == OSError: pass - """ Unmount if not done """ - if gconf.mount_point: - if gconf.mountbroker: - umount_cmd = gconf.mbr_umount_cmd + [gconf.mount_point, 'lazy'] - else: - umount_cmd = ['umount', '-l', gconf.mount_point] - p0 = subprocess.Popen(umount_cmd, stderr=subprocess.PIPE) - _, errdata = p0.communicate() - if p0.returncode == 0: - try: - os.rmdir(gconf.mount_point) - except OSError: - pass - else: - pass - if gconf.log_exit: logging.info("exiting.") sys.stdout.flush() diff --git a/glusterfs.spec.in b/glusterfs.spec.in index d1aa3ea..fc9125b 100644 --- a/glusterfs.spec.in +++ b/glusterfs.spec.in @@ -439,7 +439,6 @@ Requires: %{name}%{?_isa} = %{version}-%{release} Requires: %{name}-server%{?_isa} = %{version}-%{release} Requires: python python-ctypes Requires: rsync -Requires: util-linux %description geo-replication GlusterFS is a distributed file-system capable of scaling to several @@ -2068,9 +2067,6 @@ fi %endif %changelog -* Thu Mar 22 2018 Kotresh HR -- Added util-linux as dependency to georeplication rpm (#1544382) - * Wed Dec 20 2017 Milind Changire - Remove ExclusiveArch directive to help building on non-x86_64 arches (#1527772) -- 1.8.3.1