3198: Support setattr().
authorPeter Amstutz <peter.amstutz@curoverse.com>
Thu, 14 May 2015 19:21:27 +0000 (15:21 -0400)
committerPeter Amstutz <peter.amstutz@curoverse.com>
Thu, 14 May 2015 19:21:27 +0000 (15:21 -0400)
services/fuse/arvados_fuse/__init__.py
services/fuse/arvados_fuse/fusedir.py

index 0d5ecb46ed31f6a4640feb31456e79be09085add..9df9429e2587d13d723ecdd84e7497bbaadf7ca2 100644 (file)
@@ -291,6 +291,19 @@ class Operations(llfuse.Operations):
 
         return entry
 
+    @catch_exceptions
+    def setattr(self, inode, attr):
+        entry = self.getattr(inode)
+
+        e = self.inodes[inode]
+
+        if attr.st_size is not None and isinstance(e, FuseArvadosFile):
+            with llfuse.lock_released:
+                e.arvfile.truncate(attr.st_size)
+                entry.st_size = e.arvfile.size()
+
+        return entry
+
     @catch_exceptions
     def lookup(self, parent_inode, name):
         name = unicode(name, self.encoding)
index 9b93187e4f0f0ea3c35ec257b52df714fe23adfc..17709df1d7bdec9076dfcbaf40dc04f920f77b8d 100644 (file)
@@ -258,10 +258,12 @@ class CollectionDirectoryBase(Directory):
     def unlink(self, name):
         with llfuse.lock_released:
             self.collection.remove(name)
+        self.flush()
 
     def rmdir(self, name):
         with llfuse.lock_released:
             self.collection.remove(name)
+        self.flush()
 
     def rename(self, name_old, name_new, src):
         if not isinstance(src, CollectionDirectoryBase):
@@ -270,14 +272,14 @@ class CollectionDirectoryBase(Directory):
         if name_new in self:
             ent = src[name_old]
             tgt = self[name_new]
-            if isinstance(FuseArvadosFile, ent) and isinstance(FuseArvadosFile, tgt):
+            if isinstance(ent, FuseArvadosFile) and isinstance(tgt, FuseArvadosFile):
                 pass
-            elif isinstance(CollectionDirectoryBase, ent) and isinstance(CollectionDirectoryBase, tgt):
+            elif isinstance(ent, CollectionDirectoryBase) and isinstance(tgt, CollectionDirectoryBase):
                 if len(tgt) > 0:
                     raise llfuse.FUSEError(errno.ENOTEMPTY)
-            elif isinstance(CollectionDirectoryBase, ent) and isinstance(FuseArvadosFile, tgt):
+            elif isinstance(ent, CollectionDirectoryBase) and isinstance(tgt, FuseArvadosFile):
                 raise llfuse.FUSEError(errno.ENOTDIR)
-            elif isinstance(FuseArvadosFile, ent) and isinstance(CollectionDirectoryBase, tgt):
+            elif isinstance(ent, FuseArvadosFile) and isinstance(tgt, CollectionDirectoryBase):
                 raise llfuse.FUSEError(errno.EISDIR)
 
         with llfuse.lock_released: