On Fri, Feb 21, 2014 at 02:00:01AM +0400, Alexey Shamrin wrote:
Hi,
SQLite uses DELETE journaling mode by default. It
became a problem on a
real-world, actively used network (several hundred subscribers, several
thousands SMS per day). Some location updates and SMS delivery marks
were not getting written because database file was locked:
2013-12-13_07:26:10.10665 <0002> gsm_subscriber.c:362 Subscriber 334020422525672
ATTACHED LAC=3
2013-12-13_07:26:10.10668 <000d> db.c:170 DBI: 5: database is locked
2013-12-13_07:26:10.10865 <000d> db.c:969 Failed to update Subscriber (by IMSI).
the answer right now is really not to access the database/tables from
outside. So the "fix" is really just a workaround and WAL does not come
for free either. In case you want to improve the database code please have
a look here[1]. In the long run our interface should be async, we should
use the DB APIs directly, use prepared statements, etc.
holger
[1]
http://openbsc.osmocom.org/trac/wiki/Tasks/NITBAsyncDatabase