From 4fcb074fbbcb2465b03021ace3ea9d9ecdf414ef 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 | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/minode/sql.py b/minode/sql.py index 10a90ae..3df8423 100644 --- a/minode/sql.py +++ b/minode/sql.py @@ -1,5 +1,6 @@ """Inventory implementation using sqlite""" +import logging import os import sqlite3 import threading @@ -14,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 @@ -54,12 +56,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 = []