summaryrefslogtreecommitdiffstats
path: root/xlators/features
diff options
context:
space:
mode:
authorCsaba Henk <csaba@gluster.com>2011-04-21 08:56:09 +0000
committerAnand Avati <avati@gluster.com>2011-04-21 09:36:46 -0700
commitb5848ed21b9e718011a8f3f3870c4ed978ff17a5 (patch)
tree757ccbbde1deb954ccbfa60f37b50c5cbf972f81 /xlators/features
parent92e982b9d2f37ae88b22406be9ee88bf14b57197 (diff)
syncdaemon: handle errors in glusterfs mount more carefullyv3.2.0qa15
Signed-off-by: Csaba Henk <csaba@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2826 (stale auxiliary mounts are left over) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2826
Diffstat (limited to 'xlators/features')
-rw-r--r--xlators/features/marker/utils/syncdaemon/resource.py15
1 files changed, 11 insertions, 4 deletions
diff --git a/xlators/features/marker/utils/syncdaemon/resource.py b/xlators/features/marker/utils/syncdaemon/resource.py
index 3987b7ae9..800d297ba 100644
--- a/xlators/features/marker/utils/syncdaemon/resource.py
+++ b/xlators/features/marker/utils/syncdaemon/resource.py
@@ -364,7 +364,12 @@ class GLUSTER(AbstractUrl, SlaveLocal, SlaveRemote):
return True
def connect(self):
+ def umount_l(d):
+ time.sleep(0.2) # XXX temporary workaround
+ argv = ['umount', '-l', d]
+ return os.spawnvp(os.P_WAIT, argv[0], argv)
d = tempfile.mkdtemp(prefix='gsyncd-aux-mount-')
+ mounted = False
try:
argv = gconf.gluster_command.split() + \
(gconf.gluster_log_level and ['-L', gconf.gluster_log_level] or []) + \
@@ -372,14 +377,16 @@ class GLUSTER(AbstractUrl, SlaveLocal, SlaveRemote):
'--volfile-id', self.volume, '--client-pid=-1', d]
if os.spawnvp(os.P_WAIT, argv[0], argv):
raise RuntimeError("command failed: " + " ".join(argv))
+ mounted = True
logging.debug('auxiliary glusterfs mount in place')
os.chdir(d)
- time.sleep(0.2) # XXX temporary workaround
- argv = ['umount', '-l', d]
- if os.spawnvp(os.P_WAIT, argv[0], argv):
- raise RuntimeError("command failed: " + " ".join(argv))
+ if umount_l(d) != 0:
+ raise RuntimeError("umounting %s failed" % d)
+ mounted = False
finally:
try:
+ if mounted:
+ umount_l(d)
os.rmdir(d)
except:
logging.warn('stale mount possibly left behind on ' + d)