"""
from __future__ import absolute_import
+from __future__ import division
+from future.utils import viewitems
+from future.utils import native
+from future import standard_library
+standard_library.install_aliases()
+from builtins import next
+from builtins import str
+from builtins import object
+from builtins import dict
import os
import sys
import llfuse
import functools
import arvados.keep
from prometheus_client import Summary
-
-import Queue
+import queue
# Default _notify_queue has a limit of 1000 items, but it really needs to be
# unlimited to avoid deadlocks, see https://arvados.org/issues/3198#note-43 for
if hasattr(llfuse, 'capi'):
# llfuse < 0.42
- llfuse.capi._notify_queue = Queue.Queue()
+ llfuse.capi._notify_queue = queue.Queue()
else:
# llfuse >= 0.42
- llfuse._notify_queue = Queue.Queue()
+ llfuse._notify_queue = queue.Queue()
LLFUSE_VERSION_0 = llfuse.__version__.startswith('0')
self._entries[key] = item
def __iter__(self):
- return self._entries.iterkeys()
+ return iter(self._entries.keys())
def items(self):
return self._entries.items()
if entry.has_ref(False):
# Only necessary if the kernel has previously done a lookup on this
# inode and hasn't yet forgotten about it.
- llfuse.invalidate_entry(entry.inode, name.encode(self.encoding))
+ llfuse.invalidate_entry(entry.inode, native(name.encode(self.encoding)))
def clear(self):
self.inode_cache.clear()
- for k,v in self._entries.items():
+ for k,v in viewitems(self._entries):
try:
v.finalize()
except Exception as e:
entry.st_size = e.size()
entry.st_blksize = 512
- entry.st_blocks = (entry.st_size/512)+1
+ entry.st_blocks = (entry.st_size // 512) + 1
if hasattr(entry, 'st_atime_ns'):
# llfuse >= 0.42
entry.st_atime_ns = int(e.atime() * 1000000000)
@lookup_time.time()
@catch_exceptions
def lookup(self, parent_inode, name, ctx=None):
- name = unicode(name, self.inodes.encoding)
+ name = str(name, self.inodes.encoding)
inode = None
if name == '.':
#
# SPDX-License-Identifier: AGPL-3.0
+from builtins import range
+from builtins import str
+from builtins import object
import argparse
import arvados
import daemon
if self.args.replace:
unmount(path=self.args.mountpoint,
timeout=self.args.unmount_timeout)
- llfuse.init(self.operations, self.args.mountpoint, self._fuse_options())
+ llfuse.init(self.operations, self.args.mountpoint.encode('utf-8'), self._fuse_options())
if self.daemon:
daemon.DaemonContext(
working_directory=os.path.dirname(self.args.mountpoint),
- files_preserve=range(
- 3, resource.getrlimit(resource.RLIMIT_NOFILE)[1])
+ files_preserve=list(range(
+ 3, resource.getrlimit(resource.RLIMIT_NOFILE)[1]))
).open()
if self.listen_for_events and not self.args.disable_event_listening:
self.operations.listen_for_events()
#
# SPDX-License-Identifier: AGPL-3.0
+from builtins import str
+from builtins import object
import sys
import time
from collections import namedtuple
Stat = namedtuple("Stat", ['name', 'get'])
-class StatWriter(object):
+class StatWriter(object):
def __init__(self, prefix, interval, stats):
self.prefix = prefix
self.interval = interval
def statlogger(interval, keep, ops):
calls = StatWriter("keepcalls", interval, [
- Stat("put", keep.put_counter.get),
+ Stat("put", keep.put_counter.get),
Stat("get", keep.get_counter.get)
])
net = StatWriter("net:keep0", interval, [
Stat("rx", keep.download_counter.get)
])
cache = StatWriter("keepcache", interval, [
- Stat("hit", keep.hits_counter.get),
+ Stat("hit", keep.hits_counter.get),
Stat("miss", keep.misses_counter.get)
])
fuseops = StatWriter("fuseops", interval, [
- Stat("write", ops.write_ops_counter.get),
+ Stat("write", ops.write_ops_counter.get),
Stat("read", ops.read_ops_counter.get)
])
fusetimes = []
- for cur_op in ops.metric_op_names():
+ for cur_op in ops.metric_op_names():
name = "fuseop:{0}".format(cur_op)
fusetimes.append(StatWriter(name, interval, [
Stat("count", ops.metric_count_func(cur_op)),
#
# SPDX-License-Identifier: AGPL-3.0
+from builtins import object
import time
import ciso8601
import calendar
# SPDX-License-Identifier: AGPL-3.0
from __future__ import absolute_import
+from __future__ import division
+from future.utils import viewitems
+from builtins import dict
import logging
import re
import time
def in_use(self):
if super(Directory, self).in_use():
return True
- for v in self._entries.itervalues():
+ for v in self._entries.values():
if v.in_use():
return True
return False
def has_ref(self, only_children):
if super(Directory, self).has_ref(only_children):
return True
- for v in self._entries.itervalues():
+ for v in self._entries.values():
if v.has_ref(False):
return True
return False
# Find self on the parent in order to invalidate this path.
# Calling the public items() method might trigger a refresh,
# which we definitely don't want, so read the internal dict directly.
- for k,v in parent._entries.items():
+ for k,v in viewitems(parent._entries):
if v is self:
self.inodes.invalidate_entry(parent, k)
break
def populate(self, mtime):
self._mtime = mtime
self.collection.subscribe(self.on_event)
- for entry, item in self.collection.items():
+ for entry, item in viewitems(self.collection):
self.new_entry(entry, item, self.mtime())
def writable(self):
self.collection_record = None
self._poll = True
try:
- self._poll_time = (api._rootDesc.get('blobSignatureTtl', 60*60*2)/2)
+ self._poll_time = (api._rootDesc.get('blobSignatureTtl', 60*60*2) // 2)
except:
_logger.debug("Error getting blobSignatureTtl from discovery document: %s", sys.exc_info()[0])
self._poll_time = 60*60
# end with llfuse.lock_released, re-acquire lock
- self.merge(contents.items(),
+ self.merge(viewitems(contents),
lambda i: i[0],
lambda a, i: a.uuid() == i[1]['uuid'],
lambda i: ProjectDirectory(self.inode, self.inodes, self.api, self.num_retries, i[1], poll=self._poll, poll_time=self._poll_time))
#
# SPDX-License-Identifier: Apache-2.0
+from builtins import str
+from builtins import next
import subprocess
import time
import os
],
install_requires=[
'arvados-python-client >= 0.1.20151118035730',
- # llfuse 1.3.4 fails to install via pip
- 'llfuse >=1.2, <1.3.4',
+ 'llfuse >= 1.3.6',
'python-daemon',
'ciso8601 >= 2.0.0',
'setuptools',