diff options
author | Lianhao Lu <lianhao.lu@intel.com> | 2012-01-16 12:07:44 +0800 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2012-01-19 00:15:04 +0000 |
commit | b310382764367b573c84f33d847c6eb821266f9e (patch) | |
tree | 270988eafe80cfc7df012639ac8a7ab533e9df2c /lib/bb | |
parent | cdf69913f99d28bc7f51067a60257701f952c6cb (diff) | |
download | bitbake-b310382764367b573c84f33d847c6eb821266f9e.tar.gz |
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.
Signed-off-by: Lianhao Lu <lianhao.lu@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'lib/bb')
-rw-r--r-- | lib/bb/persist_data.py | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/lib/bb/persist_data.py b/lib/bb/persist_data.py index 17620ef33..c4ea23bfd 100644 --- a/lib/bb/persist_data.py +++ b/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) |