Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Langhoff <martin@laptop.org>2012-09-21 01:54:40 (GMT)
committer Simon Schampijer <simon@laptop.org>2012-11-07 07:21:03 (GMT)
commitf6d77778de8b1c5ef741e776eed055ec01cd7dcf (patch)
treed0236b6439ceaf188591a34fd551c19e76644956
parentadaf1d0d4bd536e24b7c4df8fd38f80f5b23850f (diff)
datastore: make delete() more reliable, log properly
- use try/except to catch and log errors in datastore.log (instead of echoing them to callers over dbus) - use rmtree() to more reliably remove the entry - get_entry_path() before we delete all the related metadata. Signed-off-by: Martin Langhoff <martin@laptop.org> Tested-by: Samuel Greenfeld <greenfeld@laptop.org> Acked-by: Simon Schampijer <simon@laptop.org>
-rw-r--r--src/carquinyol/datastore.py24
1 files changed, 16 insertions, 8 deletions
diff --git a/src/carquinyol/datastore.py b/src/carquinyol/datastore.py
index 33c658d..01d175e 100644
--- a/src/carquinyol/datastore.py
+++ b/src/carquinyol/datastore.py
@@ -430,14 +430,22 @@ class DataStore(dbus.service.Object):
out_signature='')
def delete(self, uid):
self._mark_dirty()
- self._optimizer.remove(uid)
-
- self._index_store.delete(uid)
- self._file_store.delete(uid)
- self._metadata_store.delete(uid)
-
- entry_path = layoutmanager.get_instance().get_entry_path(uid)
- os.removedirs(entry_path)
+ try:
+ entry_path = layoutmanager.get_instance().get_entry_path(uid)
+ self._optimizer.remove(uid)
+ self._index_store.delete(uid)
+ self._file_store.delete(uid)
+ self._metadata_store.delete(uid)
+ # remove the dirtree
+ shutil.rmtree(entry_path)
+ try:
+ # will remove the hashed dir if nothing else is there
+ os.removedirs(os.path.dirname(entry_path))
+ except:
+ pass
+ except:
+ logger.exception('Exception deleting entry')
+ raise
self.Deleted(uid)
logger.debug('deleted %s', uid)