[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