_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
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:
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)
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:
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
_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(
# 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()
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')