Hi,

We have recently upgraded from 3.5.9 to 3.6.5 and one of tests that ensures 
certain SQLite behavior now fails. The test basically checks how cache spill is 
handled:

SESSION THREAD 1                    SESSION THREAD 2

Open session
Launch SELECT, keep stmt
(assert SHARED lock is held)
Start session 2 ------------->      Open session
                                    Adjust cache size to 5 pages
                                    INSERT data definitely larger than cache
                                    (assert RESERVED lock)
                                    (at some point assert cache spill:
                                     try EXCLUSIVE lock => fail)


The test expected that at some point during session two SQLITE_BUSY will happen 
and transaction will be rolled back - that worked on 3.5.9.

What now happens is that all INSERTS complete successfully. If followed by 
COMMIT, an SQLITE_BUSY will result and transaction will *not* be rolled back. 
Also, trying to get more SHARED locks will fail. So it looks like writer 
session holds PENDING lock.

This change looks to be for the better, but I couldn’t find any references in 
change log or here in the forum. So I wonder:

1. Is this intentional change, and will it stay in future versions?

2. How is it implemented, in regards to serialized isolation level? Shared lock 
holders should be able to read whole database in a consistent state and at the 
same time writer is obviously able to change as much as needed, spilling 
changes to disk. 


Thanks!
Igor



_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to