summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernhard Reutner-Fischer <rep.dot.nop@gmail.com>2010-06-04 14:04:41 +0200
committerRichard Purdie <rpurdie@linux.intel.com>2010-07-02 15:41:35 +0100
commit726802b98071f6139c9305be0383a2be20a37f4e (patch)
tree0864d2a7084f1681c6f14660f4940ca5ddb00672
parent30216c65e59e7072bed5001598240dcc58017940 (diff)
downloadopenembedded-core-726802b98071f6139c9305be0383a2be20a37f4e.tar.gz
openembedded-core-726802b98071f6139c9305be0383a2be20a37f4e.tar.bz2
openembedded-core-726802b98071f6139c9305be0383a2be20a37f4e.zip
persist_data: cache connection and use cursor
Store database connection to persistent database in fetcher. (Bitbake rev: 8a6876752b90efd81d92f0947bfc9527d8260969) Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> Signed-off-by: Chris Larson <chris_larson@mentor.com> Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
-rw-r--r--bitbake/lib/bb/fetch/__init__.py9
-rw-r--r--bitbake/lib/bb/persist_data.py21
2 files changed, 18 insertions, 12 deletions
diff --git a/bitbake/lib/bb/fetch/__init__.py b/bitbake/lib/bb/fetch/__init__.py
index 01bcd36539..701e79025a 100644
--- a/bitbake/lib/bb/fetch/__init__.py
+++ b/bitbake/lib/bb/fetch/__init__.py
@@ -146,13 +146,14 @@ def uri_replace(uri, uri_find, uri_replace, d):
methods = []
urldata_cache = {}
saved_headrevs = {}
+persistent_database_connection = {}
def fetcher_init(d):
"""
Called to initialize the fetchers once the configuration data is known.
Calls before this must not hit the cache.
"""
- pd = persist_data.PersistData(d)
+ pd = persist_data.PersistData(d, persistent_database_connection)
# When to drop SCM head revisions controlled by user policy
srcrev_policy = bb.data.getVar('BB_SRCREV_POLICY', d, 1) or "clear"
if srcrev_policy == "cache":
@@ -181,7 +182,7 @@ def fetcher_compare_revisons(d):
return true/false on whether they've changed.
"""
- pd = persist_data.PersistData(d)
+ pd = persist_data.PersistData(d, persistent_database_connection)
data = pd.getKeyValues("BB_URI_HEADREVS")
data2 = bb.fetch.saved_headrevs
@@ -673,7 +674,7 @@ class Fetch(object):
if not hasattr(self, "_latest_revision"):
raise ParameterError
- pd = persist_data.PersistData(d)
+ pd = persist_data.PersistData(d, persistent_database_connection)
key = self.generate_revision_key(url, ud, d)
rev = pd.getValue("BB_URI_HEADREVS", key)
if rev != None:
@@ -690,7 +691,7 @@ class Fetch(object):
if hasattr(self, "_sortable_revision"):
return self._sortable_revision(url, ud, d)
- pd = persist_data.PersistData(d)
+ pd = persist_data.PersistData(d, persistent_database_connection)
key = self.generate_revision_key(url, ud, d)
latest_rev = self._build_revision(url, ud, d)
diff --git a/bitbake/lib/bb/persist_data.py b/bitbake/lib/bb/persist_data.py
index 80ddeb5560..df0409cd8a 100644
--- a/bitbake/lib/bb/persist_data.py
+++ b/bitbake/lib/bb/persist_data.py
@@ -43,7 +43,10 @@ class PersistData:
Why sqlite? It handles all the locking issues for us.
"""
- def __init__(self, d):
+ def __init__(self, d, persistent_database_connection):
+ if "connection" in persistent_database_connection:
+ self.cursor = persistent_database_connection["connection"].cursor()
+ return
self.cachedir = bb.data.getVar("PERSISTENT_DIR", d, True) or bb.data.getVar("CACHE", d, True)
if self.cachedir in [None, '']:
bb.msg.fatal(bb.msg.domain.PersistData, "Please set the 'PERSISTENT_DIR' or 'CACHE' variable.")
@@ -55,27 +58,29 @@ class PersistData:
self.cachefile = os.path.join(self.cachedir, "bb_persist_data.sqlite3")
bb.msg.debug(1, bb.msg.domain.PersistData, "Using '%s' as the persistent data cache" % self.cachefile)
- self.connection = sqlite3.connect(self.cachefile, timeout=5, isolation_level=None)
+ connection = sqlite3.connect(self.cachefile, timeout=5, isolation_level=None)
+ persistent_database_connection["connection"] = connection
+ self.cursor = persistent_database_connection["connection"].cursor()
def addDomain(self, domain):
"""
Should be called before any domain is used
Creates it if it doesn't exist.
"""
- self.connection.execute("CREATE TABLE IF NOT EXISTS %s(key TEXT, value TEXT);" % domain)
+ self.cursor.execute("CREATE TABLE IF NOT EXISTS %s(key TEXT, value TEXT);" % domain)
def delDomain(self, domain):
"""
Removes a domain and all the data it contains
"""
- self.connection.execute("DROP TABLE IF EXISTS %s;" % domain)
+ self.cursor.execute("DROP TABLE IF EXISTS %s;" % domain)
def getKeyValues(self, domain):
"""
Return a list of key + value pairs for a domain
"""
ret = {}
- data = self.connection.execute("SELECT key, value from %s;" % domain)
+ data = self.cursor.execute("SELECT key, value from %s;" % domain)
for row in data:
ret[str(row[0])] = str(row[1])
@@ -85,7 +90,7 @@ class PersistData:
"""
Return the value of a key for a domain
"""
- data = self.connection.execute("SELECT * from %s where key=?;" % domain, [key])
+ data = self.cursor.execute("SELECT * from %s where key=?;" % domain, [key])
for row in data:
return row[1]
@@ -93,7 +98,7 @@ class PersistData:
"""
Sets the value of a key for a domain
"""
- data = self.connection.execute("SELECT * from %s where key=?;" % domain, [key])
+ data = self.cursor.execute("SELECT * from %s where key=?;" % domain, [key])
rows = 0
for row in data:
rows = rows + 1
@@ -111,7 +116,7 @@ class PersistData:
def _execute(self, *query):
while True:
try:
- self.connection.execute(*query)
+ self.cursor.execute(*query)
return
except sqlite3.OperationalError as e:
if 'database is locked' in str(e):