From aca161f8a05085370a360930793d58a46982ac2f Mon Sep 17 00:00:00 2001 From: Lianhao Lu Date: Mon, 16 Jan 2012 12:07:44 +0800 Subject: bitbake/persist_data: Reconnect when DB is locked [YOCTO #1761] Reconnect to the backend Sqlite DB in 'database is locked' exception so the timeout can be leveraged in each time retry. (Bitbake rev: b310382764367b573c84f33d847c6eb821266f9e) Signed-off-by: Lianhao Lu Signed-off-by: Richard Purdie Signed-off-by: Joshua Lock --- bitbake/lib/bb/persist_data.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'bitbake') diff --git a/bitbake/lib/bb/persist_data.py b/bitbake/lib/bb/persist_data.py index 551b58a2a9..4a4505c89b 100644 --- a/bitbake/lib/bb/persist_data.py +++ b/bitbake/lib/bb/persist_data.py @@ -47,9 +47,10 @@ if hasattr(sqlite3, 'enable_shared_cache'): @total_ordering class SQLTable(collections.MutableMapping): """Object representing a table/domain in the database""" - def __init__(self, cursor, table): - self.cursor = cursor + def __init__(self, cachefile, table): + self.cachefile = cachefile self.table = table + self.cursor = connect(self.cachefile) self._execute("CREATE TABLE IF NOT EXISTS %s(key TEXT, value TEXT);" % table) @@ -63,6 +64,8 @@ class SQLTable(collections.MutableMapping): except sqlite3.OperationalError as exc: if 'database is locked' in str(exc) and count < 500: count = count + 1 + self.cursor.close() + self.cursor = connect(self.cachefile) continue raise @@ -188,7 +191,7 @@ class PersistData(object): del self.data[domain][key] def connect(database): - return sqlite3.connect(database, timeout=30, isolation_level=None) + return sqlite3.connect(database, timeout=5, isolation_level=None) def persist(domain, d): """Convenience factory for SQLTable objects based upon metadata""" @@ -201,5 +204,4 @@ def persist(domain, d): bb.utils.mkdirhier(cachedir) cachefile = os.path.join(cachedir, "bb_persist_data.sqlite3") - connection = connect(cachefile) - return SQLTable(connection, domain) + return SQLTable(cachefile, domain) -- cgit v1.2.3-54-g00ecf