Hi John,

Thank you for letting us know. I will check it out and let you know if I 
encounter any problems.

By the way, you are right, your branch is called 'dbBackEnd'. The full URI of 
the branch is lp:~mira-dev/mira/dbBackEnd. I think running 'bzr info' from your 
local branch would be quite revealing. You can also find a list of Mira's code 
branches here: https://code.launchpad.net/mira

Regards,

Max

On 22 May 2011, at 16:16, John Deal wrote:

> Hello All,
> 
> I just pushed to the dbBackEnd branch (I think that is what it is called) an 
> update of the SQLite DB functionality.  Here is the scoop.
> 
> It is multi-threaded with multiple readers or one writer enforced with 
> OS-level locks.  I have verified it does successfully allow multiple readers 
> at a time and writes work.  This is using multiple DB connections where each 
> thread has a dedicated DB connection.
> 
> I also have a series of test functions in main.cpp that drive the DbDirectory 
> class.  This was the fastest way to test the threading issue.  This does not 
> test the rest of the server.  I know these functions do not belong in 
> main.cpp but where should we keep test functions?
> 
> I spent significant time with the members of the SQLite email list.  One 
> knowledgeable member states my multi-threaded code should work without the OS 
> locks.  However, without them I will get "database locked" errors in my 
> tests.  I could retry the writes that get the "database locked" error but 
> that complicates the code a bit and does present the remote possibility of a 
> writer lockout.  I feel using OS locks to allow multiple readers or one 
> writer is a better general solution.
> 
> You can share a DB connect across threads (this is a fairly new SQLite 
> feature) but this serializes the requests basically making DB access 
> single-threaded.
> 
> Most likely the biggest risk to this code is what I call a "hanging select".  
> It seems when a select is executed, it puts a read-only lock on the DB.  This 
> lock remains until the the associated prepared statement is reset.  This lock 
> only seems to affect other DB connections so if a write is attempted from 
> another DB connection with a hanging select the write will get a "database 
> locked" error.  This means that without making writes exclusive, there is 
> race condition between when a select is executed and when it can be reset.  
> This means that selects (actually all SQL statements) must always reset even 
> if an error is returned.  I think I have covered all of the cases.
> 
> Anyway if anyone can give the dbBackEnd branch (how do I find out the name of 
> this?) a try and let me know what you find that would be great.
> 
> Thanks,
> 
> John
> 
> ------------------------------------------------------------------------------
> What Every C/C++ and Fortran developer Should Know!
> Read this article and learn how Intel has extended the reach of its 
> next-generation tools to help Windows* and Linux* C/C++ and Fortran 
> developers boost performance applications - including clusters. 
> http://p.sf.net/sfu/intel-dev2devmay
> _______________________________________________
> Mira-development mailing list
> Mira-development@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/mira-development

------------------------------------------------------------------------------
What Every C/C++ and Fortran developer Should Know!
Read this article and learn how Intel has extended the reach of its 
next-generation tools to help Windows* and Linux* C/C++ and Fortran 
developers boost performance applications - including clusters. 
http://p.sf.net/sfu/intel-dev2devmay
_______________________________________________
Mira-development mailing list
Mira-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mira-development

Reply via email to