SQLite Forum

"disk is full" error only once per connection?
Login
Hello,

after updating SQLite from 3.29.0 to 3.31.1 we noticed that our "disk is full" handling is not working reliantly any more.
The error is only thrown once and then never again. Everything seems to work, but when looking at the database, nothing is persisted.

Short version:
After the upgrade the "disk is full" error is only thrown once per connection.
That is, having an app whose connection is never closed the error occurs only the first time and after that SQLite throws no error even if the data could not be persisted.

Long version:
I tried to get proper reproduction steps, but it seems quite tricky.
I used DB Browser for SQLite for that, but in our solution we are using sqlite-net which gets similar results.

Using sqlite 3.29.0, the following behaviour occurs:
If the disk is completey full, there is an error on the query immediately, but if there is ~8KB free space, the error occurs when trying to persist the changes.
The error in this second case is 'database or disk full (RELEASE "RESTOREPOINT";)'.
Trying to persist it again, the next error is 'no such savepoint: RESTOREPOINT (RELEASE "RESTOREPOINT";)'. The error type is not important, but there is at least an error.

When simply replacing the sqlite3.dll in the installation folder of DB Browser for SQLIte to upgrade to version 3.31.1, the first message still occurs, but there is no second error message.
So it seems that the data have been written which is not the case.

The same behaviour occurs when using sqlite-net: On the first Release of the transaction there is an error, but doing so again no error is thrown by the sqlite3.dll, it returns Done.

This occurs only per connection, meaning opening a new connection throws the error once again. So as a workaround reopening the connection is working.

Is this the intended behaviour?