diff options
-rw-r--r-- | geo-replication/syncdaemon/monitor.py | 8 | ||||
-rw-r--r-- | geo-replication/syncdaemon/rconf.py | 3 | ||||
-rw-r--r-- | geo-replication/syncdaemon/resource.py | 19 | ||||
-rw-r--r-- | geo-replication/syncdaemon/syncdutils.py | 14 | ||||
-rw-r--r-- | glusterfs.spec.in | 4 |
5 files changed, 33 insertions, 15 deletions
diff --git a/geo-replication/syncdaemon/monitor.py b/geo-replication/syncdaemon/monitor.py index 257d34a743b..0d1423aca9f 100644 --- a/geo-replication/syncdaemon/monitor.py +++ b/geo-replication/syncdaemon/monitor.py @@ -221,7 +221,13 @@ class Monitor(object): if rconf.args.debug: args_to_worker.append("--debug") - os.execv(sys.executable, args_to_worker) + access_mount = gconf.get("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) cpids.add(cpid) agents.add(apid) diff --git a/geo-replication/syncdaemon/rconf.py b/geo-replication/syncdaemon/rconf.py index 1b8f333c0c8..ccac62c63a8 100644 --- a/geo-replication/syncdaemon/rconf.py +++ b/geo-replication/syncdaemon/rconf.py @@ -30,5 +30,8 @@ class RConf(object): mgmt_lock_fd = None args = None turns = 0 + mountbroker = False + mount_point = None + mbr_umount_cmd = [] rconf = RConf() diff --git a/geo-replication/syncdaemon/resource.py b/geo-replication/syncdaemon/resource.py index 2d48a28c145..8f17e00fb2d 100644 --- a/geo-replication/syncdaemon/resource.py +++ b/geo-replication/syncdaemon/resource.py @@ -38,7 +38,7 @@ from syncdutils import get_changelog_log_level, get_rsync_version from syncdutils import CHANGELOG_AGENT_CLIENT_VERSION from syncdutils import GX_GFID_CANONICAL_LEN from gsyncdstatus import GeorepStatus -from syncdutils import mntpt_list, lf, Popen, sup, Volinfo +from syncdutils import lf, Popen, sup, Volinfo from syncdutils import Xattr, matching_disk_gfid, get_gfid_from_mnt @@ -804,6 +804,7 @@ class Mounter(object): def __init__(self, params): self.params = params self.mntpt = None + self.umount_cmd = [] @classmethod def get_glusterprog(cls): @@ -838,10 +839,6 @@ class Mounter(object): change into the mount, and lazy unmount the filesystem. """ - access_mount = gconf.get("access-mount") - if rconf.args.subcmd == "slave": - access_mount = gconf.get("slave-access-mount") - mpi, mpo = os.pipe() mh = Popen.fork() if mh: @@ -903,13 +900,15 @@ class Mounter(object): assert(mntdata[-1] == '\0') mntpt = mntdata[:-1] assert(mntpt) - if mounted and not access_mount: + if mounted and rconf.args.subcmd == "slave" \ + and not gconf.get("slave-access-mount"): po = self.umount_l(mntpt) po.terminate_geterr(fail_on_err=False) if po.returncode != 0: po.errlog() rv = po.returncode - if not access_mount: + if rconf.args.subcmd == "slave" \ + and not gconf.get("slave-access-mount"): self.cleanup_mntpt(mntpt) except: logging.exception('mount cleanup failure:') @@ -931,7 +930,7 @@ class DirectMounter(Mounter): def make_mount_argv(self, label=None): self.mntpt = tempfile.mkdtemp(prefix='gsyncd-aux-mount-') - mntpt_list.append(self.mntpt) + rconf.mount_point = self.mntpt return [self.get_glusterprog()] + \ ['--' + p for p in self.params] + [self.mntpt] @@ -964,6 +963,10 @@ class MountbrokerMounter(Mounter): def handle_mounter(self, po): self.mntpt = po.stdout.readline()[:-1] + rconf.mount_point = self.mntpt + rconf.mountbroker = True + self.umount_cmd = self.make_cli_argv() + ['umount'] + rconf.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 e546f558265..1e40ff56858 100644 --- a/geo-replication/syncdaemon/syncdutils.py +++ b/geo-replication/syncdaemon/syncdutils.py @@ -68,9 +68,6 @@ PERCENTAGE_ESCAPE_CHAR = "%25" final_lock = Lock() -mntpt_list = [] - - def sup(x, *a, **kw): """a rubyesque "super" for python ;) @@ -254,12 +251,16 @@ def finalize(*args, **kwargs): shutil.rmtree(rconf.ssh_ctl_dir, onerror=handle_rm_error) """ Unmount if not done """ - for mnt in mntpt_list: - p0 = subprocess.Popen(["umount", "-l", mnt], stderr=subprocess.PIPE) + if rconf.mount_point: + if rconf.mountbroker: + umount_cmd = rconf.mbr_umount_cmd + [rconf.mount_point, 'lazy'] + else: + umount_cmd = ['umount', '-l', rconf.mount_point] + p0 = subprocess.Popen(umount_cmd, stderr=subprocess.PIPE) _, errdata = p0.communicate() if p0.returncode == 0: try: - os.rmdir(mnt) + os.rmdir(rconf.mount_point) except OSError: pass else: @@ -279,6 +280,7 @@ def log_raise_exception(excont): Translate some weird sounding but well understood exceptions into human-friendly lingo """ + is_filelog = False for h in logging.getLogger().handlers: fno = getattr(getattr(h, 'stream', None), 'fileno', None) diff --git a/glusterfs.spec.in b/glusterfs.spec.in index 1c3c51b6513..c147dd9bc2d 100644 --- a/glusterfs.spec.in +++ b/glusterfs.spec.in @@ -441,6 +441,7 @@ Requires: python2 Requires: python-prettytable Requires: python2-gluster = %{version}-%{release} Requires: rsync +Requires: util-linux %description geo-replication GlusterFS is a distributed file-system capable of scaling to several @@ -1463,6 +1464,9 @@ exit 0 %endif %changelog +* Thu Feb 22 2018 Kotresh HR <khiremat@redhat.com> +- Added util-linux as dependency to georeplication rpm (#1544382) + * Thu Feb 1 2018 Niels de Vos <ndevos@redhat.com> - Add '--without server' option to facilitate el6 builds (#1074947) |