sqlite3: configure the timeout explicitly.

In flush-cache.sh, we have to do this, because the sqlite3 command-line tool
sets it to zero.  Inevitably during parallel testing, it'll end up
contending for a lock, and we really want it to wait a bit.

In state.py, it's not as important since the default is nonzero.  But
python-sqlite3's default of 5 seconds makes me a little too nervous; I can
imagine a disk write waiting for more than 5 seconds sometime.  So let's use
60 instead.
This commit is contained in:
Avery Pennarun 2010-12-08 21:40:42 -08:00
commit 9e36106642
2 changed files with 4 additions and 2 deletions

View file

@ -3,6 +3,7 @@ import vars
from helpers import unlink, err, debug2, debug3, mkdirp, close_on_exec
SCHEMA_VER=7
TIMEOUT=60
_db = None
def db():
@ -14,7 +15,7 @@ def db():
mkdirp(dbdir)
must_create = not os.path.exists(dbfile)
if not must_create:
_db = sqlite3.connect(dbfile)
_db = sqlite3.connect(dbfile, timeout=TIMEOUT)
try:
row = _db.cursor().execute("select version from Schema").fetchone()
except sqlite3.OperationalError:
@ -27,7 +28,7 @@ def db():
_db = None
if must_create:
unlink(dbfile)
_db = sqlite3.connect(dbfile)
_db = sqlite3.connect(dbfile, timeout=TIMEOUT)
_db.execute("create table Schema (version int)")
_db.execute("create table Runid "
" (id integer primary key autoincrement)")