From 80df57f2b625231dfd76538f16428a303f7621ff Mon Sep 17 00:00:00 2001 From: Ruud Date: Tue, 16 Sep 2014 22:00:54 +0200 Subject: [PATCH] Delete corrupted documents --- couchpotato/core/database.py | 12 ++++++++++++ couchpotato/core/media/_base/media/main.py | 4 +++- couchpotato/core/plugins/release/main.py | 6 ++---- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/couchpotato/core/database.py b/couchpotato/core/database.py index 09f21059..37841bf6 100644 --- a/couchpotato/core/database.py +++ b/couchpotato/core/database.py @@ -32,6 +32,7 @@ class Database(object): addEvent('database.setup.after', self.startup_compact) addEvent('database.setup_index', self.setupIndex) + addEvent('database.delete_corrupted', self.deleteCorrupted) addEvent('app.migrate', self.migrate) addEvent('app.after_shutdown', self.close) @@ -147,6 +148,17 @@ class Database(object): return results + def deleteCorrupted(self, _id, traceback_error = ''): + + db = self.getDB() + + try: + log.debug('Deleted corrupted document "%s": %s', (_id, traceback_error)) + corrupted = db.get('id', _id, with_storage = False) + db._delete_id_index(corrupted.get('_id'), corrupted.get('_rev'), None) + except: + log.debug('Failed deleting corrupted: %s', traceback.format_exc()) + def reindex(self, **kwargs): success = True diff --git a/couchpotato/core/media/_base/media/main.py b/couchpotato/core/media/_base/media/main.py index d5e54d73..522d9fbb 100755 --- a/couchpotato/core/media/_base/media/main.py +++ b/couchpotato/core/media/_base/media/main.py @@ -178,8 +178,10 @@ class MediaPlugin(MediaBase): continue yield doc - except RecordNotFound: + except (RecordDeleted, RecordNotFound): log.debug('Record not found, skipping: %s', ms['_id']) + except (ValueError, EOFError): + fireEvent('database.delete_corrupted', ms.get('_id'), traceback_error = traceback.format_exc(0)) else: yield ms diff --git a/couchpotato/core/plugins/release/main.py b/couchpotato/core/plugins/release/main.py index b8417c3b..cc92b9f0 100644 --- a/couchpotato/core/plugins/release/main.py +++ b/couchpotato/core/plugins/release/main.py @@ -95,9 +95,7 @@ class Release(Plugin): except: log.error('Failed fixing mis-status tag: %s', traceback.format_exc()) except ValueError: - log.debug('Deleted corrupted document "%s": %s', (release.get('key'), traceback.format_exc(0))) - corrupted = db.get('id', release.get('key'), with_storage = False) - db._delete_id_index(corrupted.get('_id'), corrupted.get('_rev'), None) + fireEvent('database.delete_corrupted', release.get('key'), traceback_error = traceback.format_exc(0)) reindex += 1 except RecordDeleted: db.delete(doc) @@ -112,7 +110,7 @@ class Release(Plugin): del media_exist # get movies last_edit more than a week ago - medias = fireEvent('media.with_status', ['done','active'], single = True) + medias = fireEvent('media.with_status', ['done', 'active'], single = True) for media in medias: if media.get('last_edit', 0) > (now - week):