From db30c1ed7b7e83d0e7f8ce8ba5a4f54d28c00eaa Mon Sep 17 00:00:00 2001 From: Lee Miller Date: Wed, 11 Sep 2024 05:33:10 +0300 Subject: [PATCH] Add vacuum after deleting 10000 objects --- minode/sql.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/minode/sql.py b/minode/sql.py index 83e1e73..d737e4f 100644 --- a/minode/sql.py +++ b/minode/sql.py @@ -14,6 +14,7 @@ class Inventory(): """sqlite inventory""" def __init__(self): self._lock = threading.Lock() + self._deleted = 0 self._db = sqlite3.connect( os.path.join(shared.data_directory, 'objects.dat'), check_same_thread=False @@ -54,12 +55,22 @@ class Inventory(): def cleanup(self): with self._lock: - self._db.execute( + cur = self._db.execute( 'DELETE FROM objects WHERE expires < ?', (int(time.time()) - 3 * 3600,) ) self._db.commit() + self._deleted += cur.rowcount # conditional vacuum and validity check + if self._deleted > 10000: + logging.info('Doing VACUUM for objects') + cur.execute('VACUUM') + cur.execute( + "INSERT INTO status VALUES ('lastvacuumtime', ?)", + (int(time.time()),)) + self._db.commit() + self._deleted = 0 + logging.info('Deleted %s expired objects', cur.rowcount) def filter(self, stream=None, object_type=None, tag=None): clauses = []