On Fri, Feb 21, 2014 at 3:52 AM, Peter Stuge peter@stuge.se wrote:
Alexey Shamrin wrote:
WAL journaling mode is persistent; it stays in effect after closing and reopening the database. WAL mode database requires SQLite >= 3.7.0.
Think about this some more. It's not enough to state dependencies in a commit message, you need to put them in the build system. A patch to do this will need to touch configure.ac, and I think it would be wise to make the requirement optional.
Is it really needed in this particular case? OpenBSC would continue working with SQLite < 3.7.0. It would just ignore `journal_mode = WAL` and keep using `DELETE` mode. The only thing that won't work is downgrading from newer SQLite to older while keeping the same database file. Older SQLite would refuse to open the database that was once opened in WAL mode. The file could be downgraded by changing journal_mode on it. But only newer SQLite could do it. Do you think something must be done about it?
Thanks for explaining in more detail! I do think something more needs to be done but I'm no longer so sure what I'd prefer..
I think it would be good to have a build-time (configure) option to explicitly enable WAL journalling and thus also require the newer SQLite version.
I don't think we need configure check - see my explanation below.
I also think that a version of OpenBSC built without WAL enabled has to be able to recognize databases created by OpenBSC built *with* WAL enabled, and tell the user what needs to be done to make the database work.
Finally, maybe the database version number should also be bumped, to allow OpenBSC using >=3.7 to know whether a database needs WAL or not.
I'm not sure about the DB version bump, as it doesn't touch DB structure.
OTOH I think we should have a code which enables WAL in old DBs, and then it's reasonable to do in the section where we upgrade DBs.
OTOH, an OpenBSC with SQLite < 3.7 should be able to jump onto a potential next DB revision without jumping over this "pseudo-revison". Otherwise it would be meaningless - DB version won't tell us whether we have WAL or not.
After all, I think the proper way is as follows:
1. OpenBSC should try to set WAL pragma on every start, unless a --no-wal command line option is specified:
2. OpenBSC should check SQLite version on startup and if it's <3.7 - print a warning to log that WAL can't be enabled and we recommend upgrading.