I've been playing around with WAL journaling on sqlite 3.7.2 (the
build from Ubuntu Maverick). I consistently get corrupted dbs when I
use synchronous=NORMAL and journal_mode=WAL on XFS with multiple
concurrent writers. If I change either of those pragmas or run it on
ext3, I don't seem to have any problems.
Here's my little repro in python:
-------
import sqlite3, time, os, multiprocessing, uuid
def connect():
conn = sqlite3.connect('./test.db', timeout=60.0)
conn.execute('PRAGMA synchronous = NORMAL')
conn.execute('PRAGMA journal_mode = WAL')
return conn
connect().execute("CREATE TABLE object (name TEXT UNIQUE);")
def insert_items():
while True:
conn = connect()
conn.execute('''
INSERT INTO object (name) VALUES (?)
''', (uuid.uuid4().hex,))
conn.commit()
for x in xrange(10):
proc = multiprocessing.Process(target=insert_items)
proc.daemon = True
proc.start()
while True:
print len(list(connect().execute('select * from object order by name')))
time.sleep(5)
-------
Running this, I get something along the lines of:
n...@cfsyn27:/mnt/sdb1$ python reproduce.py
11
3643
7479
Traceback (most recent call last):
File "reproduce.py", line 25, in <module>
print len(list(connect().execute('select * from object order by name')))
sqlite3.DatabaseError: database disk image is malformed
Any thoughts?
-- Michael Barton
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users