[Ur] sqlite, sequence, database is locked

Adam Chlipala adamc at csail.mit.edu
Tue Feb 28 13:55:36 EST 2017


That's an interesting idea, Austin.  I was going to respond that my 
intention has been for Ur/Web to hide all issues with concurrency 
control, restarting transactions as necessary.  I believe that logic 
already works properly for PostgreSQL, and I just don't do as much 
testing with SQLite.  So, I would be happy to implement either the kind 
of solution I had in mind OR the solution that Austin suggests.

To implement either fix, I'll need some detailed suggestions specific to 
SQLite.

*OPTION 1.* Change the generated C code to detect concurrency errors 
that imply restarts.  Someone would ideally build a representative 
minimal example with "urweb -debug" and examine the generated 
/tmp/webapp.c file, to make suggestions on changes.

*OPTION 2.* Change the SQL schemas generated automatically by Ur/Web, to 
add extra settings that preclude the problem Sergey reported.  Someone 
would need to use the 'sql' .urp directive with SQLite as the backend, 
then tell me which diff should be applied to generated files.  It sounds 
like Austin probably already knows the exact change that's called for, 
but I'm presenting both options in case it becomes clear that Option 1 
is preferable.

On 02/28/2017 01:28 PM, Austin Seipp wrote:
> An alternative might be to turn on WAL mode for your SQLite database. 
> This will allow
> readers and writers (SELECT and INSERTs) to proceed concurrently and 
> might alleviate
> this problem for you, without having to do some kind of heuristic backoff.
>
> (Perhaps Ur/Web should enable WAL by default in the Schema it 
> generates for SQLite)
>
> On Tue, Feb 28, 2017 at 11:42 AM, Sergey Mironov <grrwlf at gmail.com 
> <mailto:grrwlf at gmail.com>> wrote:
>
>     Hi. My sqlite-based application uses sequences during GET processing.
>     AFAIK sequences are implemented as INSERTs for sqlite backend, so I
>     think the question is about generic sqlite behavior.
>
>     In my application, some transactions take a considerable time to
>     produce a page. During the process, other requests, even those which
>     only access sequences, are denied with 'Database is locked' error. Is
>     it possible to treat the sqlite locking error as a 'Bounded error'
>     rather than to terminate the request immediately? By bounded error I
>     mean to attempt to process transaction several times after certain
>     delay. What are possible negative effects of such a modification?
>
>     Regards,
>     Sergey
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.impredicative.com/pipermail/ur/attachments/20170228/148c5bea/attachment.html>


More information about the Ur mailing list