diff options
author | Martin Langhoff <martin@laptop.org> | 2012-09-21 01:54:40 (GMT) |
---|---|---|
committer | Simon Schampijer <simon@laptop.org> | 2012-11-07 07:21:03 (GMT) |
commit | f6d77778de8b1c5ef741e776eed055ec01cd7dcf (patch) | |
tree | d0236b6439ceaf188591a34fd551c19e76644956 | |
parent | adaf1d0d4bd536e24b7c4df8fd38f80f5b23850f (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.py | 24 |
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) |