>
>If the previous process to access the database was in the middle of a write
>but crashed before the write could complete, then your "read-only" process
>will still need to write to the database in order to clean up the mess left
>behind by the prior process before it can start its query.  So perhaps your
>"read-only" process is unable to open the rollback journal.
>
>Another possibility is that your SELECT needs to create some transient
>intermediate tables to store intermediate results.  Such tables are normally
>created in /var/tmp (or wherever else it is appropriate to create temporary
>files on your system) and then deleted at the end of the SELECT.   If you
>are out of space on /var/tmp or if you do not have write permission on
>/var/tmp, you could get an SQLITE_CANTOPEN error.

Neither of these fits the scenario, which is multiple readers
contending for access to a networked disk.  The process receiving
the SQLITE_CANTOPEN is only reading, and the error occurs randomly
in one of many similar requests.  There is no transaction.

SQLITE_CANTOPEN appears to be recoverable only by retrying the
query (or many by sqlite3_reset?).  It seems out of spec that
a simple query should fail randomly in the absence of a disk error.   
If this were an update query, the overall process ought to be prepared
to do a retry, but a select query ought to just return SQLITE_BUSY 
until the data is available.  Correct?

It is likely that some low level and unexpected failure on a disk
operation is occurring.  

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

Reply via email to