[ARVADOS] updated: 19c43cebdfa1b701b031577f62c2a7b060dc8b0e

git at public.curoverse.com git at public.curoverse.com
Mon May 18 16:48:27 EDT 2015


Summary of changes:
 sdk/python/arvados/_ranges.py          |  7 +++++--
 services/fuse/arvados_fuse/__init__.py | 11 ++++++++++-
 services/fuse/arvados_fuse/fusedir.py  |  7 +++++--
 services/fuse/bin/arv-mount            |  7 +++++++
 4 files changed, 27 insertions(+), 5 deletions(-)

       via  19c43cebdfa1b701b031577f62c2a7b060dc8b0e (commit)
      from  faefe8fc192886b35be484d5a6bb9f5a6a87b53f (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 19c43cebdfa1b701b031577f62c2a7b060dc8b0e
Author: Peter Amstutz <peter.amstutz at curoverse.com>
Date:   Mon May 18 16:49:18 2015 -0400

    3198: Enable support for event bus based updates in arv-mount.

diff --git a/sdk/python/arvados/_ranges.py b/sdk/python/arvados/_ranges.py
index d4f20f0..d5ff6ed 100644
--- a/sdk/python/arvados/_ranges.py
+++ b/sdk/python/arvados/_ranges.py
@@ -2,6 +2,9 @@ import logging
 
 _logger = logging.getLogger('arvados.ranges')
 
+# Log level below 'debug' !
+RANGES_SPAM = 9
+
 class Range(object):
     def __init__(self, locator, range_start, range_size, segment_offset=0):
         self.locator = locator
@@ -96,7 +99,7 @@ def locators_and_ranges(data_locators, range_start, range_size):
         block_start = dl.range_start
         block_size = dl.range_size
         block_end = block_start + block_size
-        _logger.debug(
+        _logger.log(RANGES_SPAM,
             "%s range_start %s block_start %s range_end %s block_end %s",
             dl.locator, range_start, block_start, range_end, block_end)
         if range_end <= block_start:
@@ -170,7 +173,7 @@ def replace_range(data_locators, new_range_start, new_range_size, new_locator, n
         dl = data_locators[i]
         old_segment_start = dl.range_start
         old_segment_end = old_segment_start + dl.range_size
-        _logger.debug(
+        _logger.log(RANGES_SPAM,
             "%s range_start %s segment_start %s range_end %s segment_end %s",
             dl, new_range_start, old_segment_start, new_range_end,
             old_segment_end)
diff --git a/services/fuse/arvados_fuse/__init__.py b/services/fuse/arvados_fuse/__init__.py
index 913db4c..46c5a1b 100644
--- a/services/fuse/arvados_fuse/__init__.py
+++ b/services/fuse/arvados_fuse/__init__.py
@@ -302,7 +302,16 @@ class Operations(llfuse.Operations):
                 item = self.inodes.inode_cache.find(ev["object_uuid"])
                 if item is not None:
                     item.invalidate()
-                    item.update()
+                    if ev["object_kind"] == "arvados#collection":
+                        item.update(to_pdh=ev.get("properties", {}).get("new_attributes", {}).get("portable_data_hash"))
+                    else:
+                        item.update()
+
+                oldowner = ev.get("properties", {}).get("old_attributes", {}).get("owner_uuid")
+                olditemparent = self.inodes.inode_cache.find(oldowner)
+                if olditemparent is not None:
+                    olditemparent.invalidate()
+                    olditemparent.update()
 
                 itemparent = self.inodes.inode_cache.find(ev["object_owner_uuid"])
                 if itemparent is not None:
diff --git a/services/fuse/arvados_fuse/fusedir.py b/services/fuse/arvados_fuse/fusedir.py
index 2fca36e..85f4bca 100644
--- a/services/fuse/arvados_fuse/fusedir.py
+++ b/services/fuse/arvados_fuse/fusedir.py
@@ -371,7 +371,7 @@ class CollectionDirectory(CollectionDirectoryBase):
         return self.collection_locator
 
     @use_counter
-    def update(self):
+    def update(self, to_pdh=None):
         try:
             if self.collection_record is not None and portable_data_hash_pattern.match(self.collection_locator):
                 return True
@@ -388,7 +388,10 @@ class CollectionDirectory(CollectionDirectoryBase):
 
                     _logger.debug("Updating %s", self.collection_locator)
                     if self.collection:
-                        self.collection.update()
+                        if self.collection.portable_data_hash() == to_pdh:
+                            _logger.debug("%s is fresh at pdh '%s'", self.collection_locator, to_pdh)
+                        else:
+                            self.collection.update()
                     else:
                         if uuid_pattern.match(self.collection_locator):
                             coll_reader = arvados.collection.Collection(
diff --git a/services/fuse/bin/arv-mount b/services/fuse/bin/arv-mount
index 76476da..c3f4ab0 100755
--- a/services/fuse/bin/arv-mount
+++ b/services/fuse/bin/arv-mount
@@ -163,6 +163,9 @@ From here, the following directories are available:
         # Initialize the fuse connection
         llfuse.init(operations, args.mountpoint, opts)
 
+        # Subscribe to change events from API server
+        operations.listen_for_events(api)
+
         t = threading.Thread(None, lambda: llfuse.main())
         t.start()
 
@@ -199,6 +202,10 @@ From here, the following directories are available:
     else:
         try:
             llfuse.init(operations, args.mountpoint, opts)
+
+            # Subscribe to change events from API server
+            operations.listen_for_events(api)
+
             llfuse.main()
         except Exception as e:
             logger.exception('arv-mount: exception during mount')

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list