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