[ARVADOS] updated: 4574dbbacdd10d24cf5ed312d7b8e91ec9d9c14a
git at public.curoverse.com
git at public.curoverse.com
Tue Nov 24 10:31:49 EST 2015
Summary of changes:
services/fuse/arvados_fuse/__init__.py | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
via 4574dbbacdd10d24cf5ed312d7b8e91ec9d9c14a (commit)
from f6bd4a2d80a5092a4306bac61dac90bffdf6211c (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
commit 4574dbbacdd10d24cf5ed312d7b8e91ec9d9c14a
Author: Tom Clegg <tom at curoverse.com>
Date: Tue Nov 24 10:41:15 2015 -0500
7751: Fix stack trace on shutdown caused by race between destroy() and llfuse unmount.
diff --git a/services/fuse/arvados_fuse/__init__.py b/services/fuse/arvados_fuse/__init__.py
index a540ebd..b7c0091 100644
--- a/services/fuse/arvados_fuse/__init__.py
+++ b/services/fuse/arvados_fuse/__init__.py
@@ -324,6 +324,12 @@ class Operations(llfuse.Operations):
# is fully initialized should wait() on this event object.
self.initlock = threading.Event()
+ # If we get overlapping shutdown events (e.g., fusermount -u
+ # -z and operations.destroy()) llfuse calls forget() on inodes
+ # that have already been deleted. To avoid this, we make
+ # forget() a no-op if called after destroy().
+ self._shutdown_started = threading.Event()
+
self.num_retries = num_retries
self.read_counter = arvados.keep.Counter()
@@ -340,11 +346,13 @@ class Operations(llfuse.Operations):
@catch_exceptions
def destroy(self):
- if self.events:
- self.events.close()
- self.events = None
+ with llfuse.lock:
+ self._shutdown_started.set()
+ if self.events:
+ self.events.close()
+ self.events = None
- self.inodes.clear()
+ self.inodes.clear()
def access(self, inode, mode, ctx):
return True
@@ -468,6 +476,8 @@ class Operations(llfuse.Operations):
@catch_exceptions
def forget(self, inodes):
+ if self._shutdown_started.is_set():
+ return
for inode, nlookup in inodes:
ent = self.inodes[inode]
_logger.debug("arv-mount forget: inode %i nlookup %i ref_count %i", inode, nlookup, ent.ref_count)
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list