Use logging module instead of "if DEBUG:"
[arvados.git] / services / fuse / arvados_fuse / __init__.py
index 8b734f2433e69d48cb7a4897aeebf914833bba5a..6e2bf2896dd0481004eec41e44b5c3cc29810080 100644 (file)
@@ -2,6 +2,7 @@
 # FUSE driver for Arvados Keep
 #
 
+from __future__ import print_function
 import os
 import sys
 
@@ -15,6 +16,7 @@ import arvados.events
 import re
 import apiclient
 import json
+import logging
 
 from time import time
 from llfuse import FUSEError
@@ -123,7 +125,7 @@ class Directory(FreshBase):
             try:
                 self.update()
             except apiclient.errors.HttpError as e:
-                print e
+                logging.debug(e)
 
     def __getitem__(self, item):
         self.checkupdate()
@@ -182,18 +184,22 @@ class CollectionDirectory(Directory):
         return i['uuid'] == self.collection_locator
 
     def update(self):
-        collection = arvados.CollectionReader(arvados.Keep.get(self.collection_locator))
-        for s in collection.all_streams():
-            cwd = self
-            for part in s.name().split('/'):
-                if part != '' and part != '.':
-                    if part not in cwd._entries:
-                        cwd._entries[part] = self.inodes.add_entry(Directory(cwd.inode))
-                    cwd = cwd._entries[part]
-            for k, v in s.files().items():
-                cwd._entries[k] = self.inodes.add_entry(StreamReaderFile(cwd.inode, v))
-        self.fresh()
-
+        try:
+            collection = arvados.CollectionReader(self.collection_locator)
+            for s in collection.all_streams():
+                cwd = self
+                for part in s.name().split('/'):
+                    if part != '' and part != '.':
+                        if part not in cwd._entries:
+                            cwd._entries[part] = self.inodes.add_entry(Directory(cwd.inode))
+                        cwd = cwd._entries[part]
+                for k, v in s.files().items():
+                    cwd._entries[k] = self.inodes.add_entry(StreamReaderFile(cwd.inode, v))
+            self.fresh()
+            return True
+        except Exception as detail:
+            logging.debug("arv-mount %s: error: %s" % (self.collection_locator,detail))
+            return False
 
 class MagicDirectory(Directory):
     '''A special directory that logically contains the set of all extant keep
@@ -213,19 +219,21 @@ class MagicDirectory(Directory):
         if k in self._entries:
             return True
         try:
-            if arvados.Keep.get(k):
+            e = self.inodes.add_entry(CollectionDirectory(self.inode, self.inodes, k))
+            if e.update():
+                self._entries[k] = e
                 return True
             else:
                 return False
         except Exception as e:
-            #print 'exception keep', e
+            logging.debug('arv-mount exception keep', e)
             return False
 
     def __getitem__(self, item):
-        if item not in self._entries:
-            self._entries[item] = self.inodes.add_entry(CollectionDirectory(self.inode, self.inodes, item))
-        return self._entries[item]
-
+        if item in self:
+            return self._entries[item]
+        else:
+            raise KeyError("No collection with id " + item)
 
 class TagsDirectory(Directory):
     '''A special directory that contains as subdirectories all tags visible to the user.'''
@@ -408,9 +416,13 @@ class Operations(llfuse.Operations):
     so request handlers do not run concurrently unless the lock is explicitly released
     with llfuse.lock_released.'''
 
-    def __init__(self, uid, gid):
+    def __init__(self, uid, gid, debug):
         super(Operations, self).__init__()
 
+        if debug:
+            logging.setLevel(logging.DEBUG)
+            logging.info("arv-mount debug enabled")
+
         self.inodes = Inodes()
         self.uid = uid
         self.gid = gid
@@ -467,7 +479,7 @@ class Operations(llfuse.Operations):
         return entry
 
     def lookup(self, parent_inode, name):
-        #print "lookup: parent_inode", parent_inode, "name", name
+        logging.debug("arv-mount lookup: parent_inode", parent_inode, "name", name)
         inode = None
 
         if name == '.':
@@ -503,7 +515,7 @@ class Operations(llfuse.Operations):
         return fh
 
     def read(self, fh, off, size):
-        #print "read", fh, off, size
+        logging.debug("arv-mount read", fh, off, size)
         if fh in self._filehandles:
             handle = self._filehandles[fh]
         else:
@@ -520,7 +532,7 @@ class Operations(llfuse.Operations):
             del self._filehandles[fh]
 
     def opendir(self, inode):
-        #print "opendir: inode", inode
+        logging.debug("arv-mount opendir: inode", inode)
 
         if inode in self.inodes:
             p = self.inodes[inode]
@@ -541,14 +553,14 @@ class Operations(llfuse.Operations):
         return fh
 
     def readdir(self, fh, off):
-        #print "readdir: fh", fh, "off", off
+        logging.debug("arv-mount readdir: fh", fh, "off", off)
 
         if fh in self._filehandles:
             handle = self._filehandles[fh]
         else:
             raise llfuse.FUSEError(errno.EBADF)
 
-        #print "handle.entry", handle.entry
+        logging.debug("arv-mount handle.entry", handle.entry)
 
         e = off
         while e < len(handle.entry):