[ARVADOS] updated: 52e25652032ccf70f6cade4e575102840b212aa1

git at public.curoverse.com git at public.curoverse.com
Fri Sep 5 11:45:28 EDT 2014


Summary of changes:
 services/fuse/arvados_fuse/__init__.py | 73 ++++++++++++++--------------------
 services/fuse/bin/arv-mount            |  5 ++-
 2 files changed, 33 insertions(+), 45 deletions(-)

       via  52e25652032ccf70f6cade4e575102840b212aa1 (commit)
       via  3d1181ac8527cdd355b14872b808cbaede26e487 (commit)
      from  fb24229eaf2d3af64fe406de850ab25b9c0611e1 (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 52e25652032ccf70f6cade4e575102840b212aa1
Author: Peter Amstutz <peter.amstutz at curoverse.com>
Date:   Fri Sep 5 11:45:10 2014 -0400

    3644: minor control block indentation fix.

diff --git a/services/fuse/arvados_fuse/__init__.py b/services/fuse/arvados_fuse/__init__.py
index aecc7a9..710457a 100644
--- a/services/fuse/arvados_fuse/__init__.py
+++ b/services/fuse/arvados_fuse/__init__.py
@@ -259,7 +259,7 @@ class Directory(FreshBase):
                     ent = new_entry(i)
                     if ent is not None:
                         self._entries[name] = self.inodes.add_entry(ent)
-                    changed = True
+                        changed = True
 
         # delete any other directory entries that were not in found in 'items'
         for i in oldentries:            

commit 3d1181ac8527cdd355b14872b808cbaede26e487
Author: Peter Amstutz <peter.amstutz at curoverse.com>
Date:   Fri Sep 5 11:43:41 2014 -0400

    3644: Changed so ctime == mtime because ctime is not creation time (arg!).
    Added atime.  Tweaked timestamps behavior be a bit more useful.

diff --git a/services/fuse/arvados_fuse/__init__.py b/services/fuse/arvados_fuse/__init__.py
index 607a941..aecc7a9 100644
--- a/services/fuse/arvados_fuse/__init__.py
+++ b/services/fuse/arvados_fuse/__init__.py
@@ -89,39 +89,36 @@ class FreshBase(object):
         self._stale = True
         self._poll = False
         self._last_update = time.time()
+        self._atime = time.time()
         self._poll_time = 60
 
     # Mark the value as stale
     def invalidate(self):
         self._stale = True
 
-    # Test if the entries dict is stale
+    # Test if the entries dict is stale.  Also updates atime.
     def stale(self):
+        self._atime = time.time()
         if self._stale:
             return True
         if self._poll:
-            return (self._last_update + self._poll_time) < time.time()
+            return (self._last_update + self._poll_time) < self._atime
         return False
 
     def fresh(self):
         self._stale = False
         self._last_update = time.time()
 
-    def ctime(self):
-        return 0
-
-    def mtime(self):
-        return 0
-
+    def atime(self):
+        return self._atime
 
 class File(FreshBase):
     '''Base for file objects.'''
 
-    def __init__(self, parent_inode, _ctime=0, _mtime=0):
+    def __init__(self, parent_inode, _mtime=0):
         super(File, self).__init__()
         self.inode = None
         self.parent_inode = parent_inode
-        self._ctime = _ctime
         self._mtime = _mtime
 
     def size(self):
@@ -130,9 +127,6 @@ class File(FreshBase):
     def readfrom(self, off, size):
         return ''
 
-    def ctime(self):
-        return self._ctime
-
     def mtime(self):
         return self._mtime
 
@@ -140,8 +134,8 @@ class File(FreshBase):
 class StreamReaderFile(File):
     '''Wraps a StreamFileReader as a file.'''
 
-    def __init__(self, parent_inode, reader, _ctime, _mtime):
-        super(StreamReaderFile, self).__init__(parent_inode, _ctime, _mtime)
+    def __init__(self, parent_inode, reader, _mtime):
+        super(StreamReaderFile, self).__init__(parent_inode, _mtime)
         self.reader = reader
 
     def size(self):
@@ -156,8 +150,8 @@ class StreamReaderFile(File):
 
 class StringFile(File):
     '''Wrap a simple string as a file'''
-    def __init__(self, parent_inode, contents, _ctime, _mtime):
-        super(StringFile, self).__init__(parent_inode, _ctime, _mtime)
+    def __init__(self, parent_inode, contents, _mtime):
+        super(StringFile, self).__init__(parent_inode, _mtime)
         self.contents = contents
 
     def size(self):
@@ -171,12 +165,11 @@ class ObjectFile(StringFile):
     '''Wrap a dict as a serialized json object.'''
 
     def __init__(self, parent_inode, obj):
-        super(ObjectFile, self).__init__(parent_inode, "", 0, 0)
+        super(ObjectFile, self).__init__(parent_inode, "", 0)
         self.uuid = obj['uuid']
         self.update(obj)
 
     def update(self, obj):
-        self._ctime = convertTime(obj['created_at']) if 'created_at' in obj else 0
         self._mtime = convertTime(obj['modified_at']) if 'modified_at' in obj else 0
         self.contents = json.dumps(obj, indent=4, sort_keys=True) + "\n"
 
@@ -196,6 +189,7 @@ class Directory(FreshBase):
             raise Exception("parent_inode should be an int")
         self.parent_inode = parent_inode
         self._entries = {}
+        self._mtime = time.time()
 
     #  Overriden by subclasses to implement logic to update the entries dict
     #  when the directory is stale
@@ -252,6 +246,7 @@ class Directory(FreshBase):
 
         oldentries = self._entries
         self._entries = {}
+        changed = False
         for i in items:
             name = sanitize_filename(fn(i))
             if name:
@@ -264,11 +259,17 @@ class Directory(FreshBase):
                     ent = new_entry(i)
                     if ent is not None:
                         self._entries[name] = self.inodes.add_entry(ent)
+                    changed = True
 
         # delete any other directory entries that were not in found in 'items'
         for i in oldentries:            
             llfuse.invalidate_entry(self.inode, str(i))
             self.inodes.del_entry(oldentries[i])
+            changed = True
+
+        if changed:
+            self._mtime = time.time()
+
         self.fresh()
 
     def clear(self):
@@ -282,6 +283,9 @@ class Directory(FreshBase):
             self.inodes.del_entry(oldentries[n])
         self.invalidate()
 
+    def mtime(self):
+        return self._mtime
+
 
 class CollectionDirectory(Directory):
     '''Represents the root of a directory tree holding a collection.'''
@@ -317,7 +321,7 @@ class CollectionDirectory(Directory):
                         cwd._entries[partname] = self.inodes.add_entry(Directory(cwd.inode))
                     cwd = cwd._entries[partname]
             for k, v in s.files().items():
-                cwd._entries[sanitize_filename(k)] = self.inodes.add_entry(StreamReaderFile(cwd.inode, v, self.ctime(), self.mtime()))        
+                cwd._entries[sanitize_filename(k)] = self.inodes.add_entry(StreamReaderFile(cwd.inode, v, self.mtime()))        
 
     def update(self):
         try:
@@ -364,10 +368,6 @@ class CollectionDirectory(Directory):
         else:
             return super(CollectionDirectory, self).__contains__(k)
 
-    def ctime(self):
-        self.checkupdate()
-        return convertTime(self.collection_object["created_at"]) if self.collection_object is not None and 'created_at' in self.collection_object else 0
-
     def mtime(self):
         self.checkupdate()
         return convertTime(self.collection_object["modified_at"]) if self.collection_object is not None and 'modified_at' in self.collection_object else 0
@@ -400,7 +400,7 @@ specific collection subdirectory (such as trying to 'cd' into it), at which
 point the collection will actually be looked up on the server and the directory
 will appear if it exists.
 '''
-            self.readme_file = self.inodes.add_entry(StringFile(self.inode, text, 0, 0))
+            self.readme_file = self.inodes.add_entry(StringFile(self.inode, text, time.time()))
             self._entries["README"] = self.readme_file
 
         if k in self._entries:
@@ -449,9 +449,6 @@ class TagsDirectory(RecursiveInvalidateDirectory):
         super(TagsDirectory, self).__init__(parent_inode)
         self.inodes = inodes
         self.api = api
-        #try:
-        #    arvados.events.subscribe(self.api, [['object_uuid', 'is_a', 'arvados#link']], lambda ev: self.invalidate())
-        #except:
         self._poll = True
         self._poll_time = poll_time
 
@@ -573,12 +570,6 @@ class ProjectDirectory(RecursiveInvalidateDirectory):
         else:
             return super(ProjectDirectory, self).__contains__(k)
 
-    def ctime(self):
-        return convertTime(self.project_object["created_at"]) if "created_at" in self.project_object else 0
-
-    def mtime(self):
-        return convertTime(self.project_object["modified_at"]) if "modified_at" in self.project_object  else 0
-
 
 class SharedDirectory(RecursiveInvalidateDirectory):
     '''A special directory that represents users or groups who have shared projects with me.'''
@@ -588,10 +579,6 @@ class SharedDirectory(RecursiveInvalidateDirectory):
         self.current_user = api.users().current().execute()
         self.inodes = inodes
         self.api = api
-
-        # try:
-        #     arvados.events.subscribe(self.api, [], lambda ev: self.invalidate())
-        # except:
         self._poll = True
         self._poll_time = poll_time
 
@@ -744,12 +731,10 @@ class Operations(llfuse.Operations):
         entry.st_size = e.size()
 
         entry.st_blksize = 512
-        entry.st_blocks = (e.size()/512)
-        if e.size()/512 != 0:
-            entry.st_blocks += 1
-        entry.st_atime = 0
-        entry.st_mtime = e.mtime()
-        entry.st_ctime = e.ctime()
+        entry.st_blocks = (e.size()/512)+1
+        entry.st_atime = int(e.atime())
+        entry.st_mtime = int(e.mtime())
+        entry.st_ctime = int(e.mtime())
 
         return entry
 
diff --git a/services/fuse/bin/arv-mount b/services/fuse/bin/arv-mount
index 00cfbde..76d026e 100755
--- a/services/fuse/bin/arv-mount
+++ b/services/fuse/bin/arv-mount
@@ -7,6 +7,7 @@ import logging
 import os
 import signal
 import subprocess
+import time
 
 from arvados_fuse import *
 
@@ -89,6 +90,7 @@ with "--".
         api = SafeApi(arvados.config)
 
         usr = api.users().current().execute()
+        now = time.time()
         if args.by_id:
             # Set up the request handler with the 'magic directory' at the root
             operations.inodes.add_entry(MagicDirectory(llfuse.ROOT_INODE, operations.inodes, api))
@@ -105,6 +107,7 @@ with "--".
             operations.inodes.add_entry(ProjectDirectory(llfuse.ROOT_INODE, operations.inodes, api, api.groups().get(uuid=args.project).execute()))
         else:
             e = operations.inodes.add_entry(Directory(llfuse.ROOT_INODE))
+
             e._entries['home'] = operations.inodes.add_entry(ProjectDirectory(e.inode, operations.inodes, api, usr))
             e._entries['shared'] = operations.inodes.add_entry(SharedDirectory(e.inode, operations.inodes, api, usr))
             e._entries['by_tag'] = operations.inodes.add_entry(TagsDirectory(e.inode, operations.inodes, api))
@@ -123,7 +126,7 @@ From here, the following directories are available:
   shared/    Projects shared with you.
 '''.format(arvados.config.get('ARVADOS_API_HOST'), usr['email'])
 
-            e._entries["README"] = operations.inodes.add_entry(StringFile(e.inode, text, 0, 0))
+            e._entries["README"] = operations.inodes.add_entry(StringFile(e.inode, text, now))
 
 
     except Exception:

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


hooks/post-receive
-- 




More information about the arvados-commits mailing list