From 69155658924b5b49f52c1cc2c1c7776aa967a8a3 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 cd89d45..ba41fb3 100644 --- a/minode/sql.py +++ b/minode/sql.py @@ -15,6 +15,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 @@ -56,12 +57,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 = []