10117: Restore original semantics of invalidate() and add code comment, add
authorPeter Amstutz <peter.amstutz@curoverse.com>
Wed, 21 Sep 2016 18:55:53 +0000 (14:55 -0400)
committerPeter Amstutz <peter.amstutz@curoverse.com>
Wed, 21 Sep 2016 18:55:53 +0000 (14:55 -0400)
kernel_invalidate().

services/fuse/arvados_fuse/__init__.py
services/fuse/arvados_fuse/fresh.py
services/fuse/arvados_fuse/fusedir.py
services/fuse/tests/test_cache.py

index e679a23e4af5be3b63c1281dc0cb35988c3c486b..ba7095925db10f4b0441006c0165eaf0c1a96666 100644 (file)
@@ -148,8 +148,8 @@ class InodeCache(object):
                 _logger.debug("InodeCache cannot clear inode %i, in use", obj.inode)
                 return False
             if obj.has_ref(only_children=True):
-                obj.invalidate()
-                _logger.debug("InodeCache invalidate inode %i", obj.inode)
+                obj.kernel_invalidate()
+                _logger.debug("InodeCache sent kernel invalidate inode %i", obj.inode)
                 return False
             obj.clear()
         self._total -= obj.cache_size
index 95dde2b86e7b8361270065d6ee968451f5a15fb5..532f110940c56a4e3a106ec6877162e7146a87f6 100644 (file)
@@ -70,10 +70,14 @@ class FreshBase(object):
         self.allow_attr_cache = True
         self.allow_dirent_cache = True
 
-    # Mark the value as stale
     def invalidate(self):
+        """Indicate that object contents should be refreshed from source."""
         self._stale = True
 
+    def kernel_invalidate(self):
+        """Indicate that an invalidation for this object should be sent to the kernel."""
+        pass
+
     # Test if the entries dict is stale.
     def stale(self):
         if self._stale:
index 38fe32c93b7e43034a9d6e9005ff9e8c75e38bb8..15f75645b9730543e372f6464c7dddff0f89672f 100644 (file)
@@ -183,15 +183,11 @@ class Directory(FreshBase):
         self.inodes.invalidate_inode(self.inode)
         self.invalidate()
 
-    def invalidate(self):
-        try:
-            super(Directory, self).invalidate()
-            for n, e in self._entries.iteritems():
-                self.inodes.invalidate_entry(self.inode, n.encode(self.inodes.encoding))
-                e.invalidate()
-            self.inodes.invalidate_inode(self.inode)
-        except Exception:
-            _logger.exception()
+    def kernel_invalidate(self):
+        for n, e in self._entries.iteritems():
+            self.inodes.invalidate_entry(self.inode, n.encode(self.inodes.encoding))
+            e.kernel_invalidate()
+        self.inodes.invalidate_inode(self.inode)
 
     def mtime(self):
         return self._mtime
@@ -339,10 +335,8 @@ class CollectionDirectoryBase(Directory):
         src.flush()
 
     def clear(self):
-        r = super(CollectionDirectoryBase, self).clear()
+        super(CollectionDirectoryBase, self).clear()
         self.collection = None
-        self._manifest_size = 0
-        return r
 
 
 class CollectionDirectory(CollectionDirectoryBase):
@@ -512,6 +506,10 @@ class CollectionDirectory(CollectionDirectoryBase):
                 self.collection.save()
             self.collection.stop_threads()
 
+    def clear(self):
+        super(CollectionDirectory, self).clear()
+        self._manifest_size = 0
+
 
 class TmpCollectionDirectory(CollectionDirectoryBase):
     """A directory backed by an Arvados collection that never gets saved.
index 66b70c9ddadf741bec594e4db29b121e72a428b6..f90c5b0bb89c7a811048bf03a6c73f8f903cfb75 100644 (file)
@@ -11,9 +11,6 @@ import unittest
 from .integration_test import IntegrationTest
 from .mount_test_base import MountTestBase
 
-_logger = logging.getLogger('arvados.arvados_fuse')
-_logger.setLevel(logging.DEBUG)
-
 class TmpCollectionTest(IntegrationTest):
     mnt_args = ["--by-id", "--directory-cache=0"]