From dd61c7dc211852d910c627d5ad3cc8eda1faf953 Mon Sep 17 00:00:00 2001 From: Ruud Date: Tue, 17 Jun 2014 16:27:22 +0200 Subject: [PATCH] Compact DB every 7 days if needed --- couchpotato/core/database.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/couchpotato/core/database.py b/couchpotato/core/database.py index 1b9501c2..d753d87f 100644 --- a/couchpotato/core/database.py +++ b/couchpotato/core/database.py @@ -26,7 +26,9 @@ class Database(object): addApiView('database.document.update', self.updateDocument) addApiView('database.document.delete', self.deleteDocument) + addEvent('database.setup.after', self.startup_compact) addEvent('database.setup_index', self.setupIndex) + addEvent('app.migrate', self.migrate) addEvent('app.after_shutdown', self.close) @@ -140,8 +142,14 @@ class Database(object): success = True try: + start = time.time() db = self.getDB() + size = float(db.get_db_details().get('size', 0)) + log.debug('Compacting database, current size: %sMB', round(size/1048576, 2)) + db.compact() + new_size = float(db.get_db_details().get('size', 0)) + log.debug('Done compacting database in %ss, new size: %sMB, saved: %sMB', (round(time.time()-start, 2), round(new_size/1048576, 2), round((size-new_size)/1048576, 2))) except: log.error('Failed compact: %s', traceback.format_exc()) success = False @@ -150,6 +158,18 @@ class Database(object): 'success': success } + # Compact on start + def startup_compact(self): + from couchpotato import Env + + db = self.getDB() + size = db.get_db_details().get('size') + prop_name = 'last_db_compact' + last_check = int(Env.prop(prop_name, default = 0)) + if size > 26214400 and last_check < time.time()-604800: # 25MB / 7 days + self.compact() + Env.prop(prop_name, value = int(time.time())) + def migrate(self): from couchpotato import Env