Blob Blame History Raw
From e7436848f4e27c31d6777a6531c62a83cc313aae Mon Sep 17 00:00:00 2001
From: Atin Mukherjee <amukherj@redhat.com>
Date: Mon, 16 Apr 2018 20:38:31 +0530
Subject: [PATCH 654/654] Revert "geo-rep: Remove lazy umount and use mount
 namespaces"

This reverts commit 7bf9b8de3e59c3d31edfe5284fe283708d6b4ea0. This patch
is put up to ensure we don't include this fix RHEL6 build as this patch
break geo-rep functionality in RHEL6. Once the RHEL6 build is done in
RHGS 3.3.1-async, we will put this patch again and then at RHGS 3.4.0
we'll try to address this scenario for both the cases.

Change-Id: If279c0f2b80a78edde874beaf7fb11eb6cab25ef
BUG: 1556680
Signed-off-by: Atin Mukherjee <amukherj@redhat.com>
Reviewed-on: https://code.engineering.redhat.com/gerrit/135792
Tested-by: RHGS Build Bot <nigelb@redhat.com>
Reviewed-by: Kotresh Hiremath Ravishankar <khiremat@redhat.com>
---
 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 <khiremat@redhat.com>
-- Added util-linux as dependency to georeplication rpm (#1544382)
-
 * Wed Dec 20 2017 Milind Changire <mchangir@redhat.com>
 - Remove ExclusiveArch directive to help building on non-x86_64 arches (#1527772)
 
-- 
1.8.3.1