Re: [PATCH] Sqlite DB Pool

Alejandro Guerrieri <[email protected]>
Newsgroups gmane.comp.mobile.kannel.devel
Message-ID <[email protected]>
Any other opinions on this? Shall I commit?

Regards,
--
Alejandro Guerrieri
[email protected]


El 20/11/2008, a las 02:51 p.m., Alexander Malysh escribió:

> Alejandro Guerrieri schrieb:
>> Alex,
>> SQLite doesn't wait for the lock to free, it returns with a BUSY  
>> error inmediately. The query will return BUSY without waiting for  
>> the lock even when the process is writing to another table on the  
>> same DB.
>
> ahh now it's clear to me and I'm +1 to commit your patch.
>
>> From my tests, I can confirm that this is what it happens.
>> I understand your point about "DB agnosticism", but as it is now  
>> sqlite is not a viable alternative for sqlbox at least. The same  
>> probably applies to DLR's, if more than a thread is accessing the  
>> DB at the same time.
>> As I've said before, the PHP client implementation set this value  
>> to 60 seconds (which is a little high imho), DBD::SQlite sets it to  
>> 30 seconds and most other client libraries I've found provides a  
>> mean to set this, because its default value is non-practical for  
>> most cases.
>> Are you fine with adding a fixed value instead of being user- 
>> selectable? This wouldn't change the user interface, only the  
>> internals when dealing with sqlite DB's.
>> Regards,
>> Alex
>> El 20/11/2008, a las 12:56 p.m., Alexander Malysh escribió:
>>> Hi Alex,
>>>
>>> thanks for explaining of the sqlite internals but it didn't answer  
>>> my question: why do we need in dbpool to care about some internals  
>>> of any DB?
>>>
>>> For kannel it's not a point when DB blocks and how oft and how  
>>> long... Kannel just waits for a DB to be unlocked and do it so  
>>> long as DB think is needed.
>>>
>>> Thanks,
>>> Alex
>>>
>>> Alejandro Guerrieri schrieb:
>>>> Alex,
>>>> Sqlite makes a lock on the _whole DB file_ each time it access  
>>>> it. That means that if an external application is doing an INSERT  
>>>> on send_sms, it will lock the WHOLE FILE, so sqlbox won't get a  
>>>> LOCK to DELETE on send_sms nor to INSERT on sent_sms.
>>>> If the DB is to sustain moderate load, the default won't cut it.  
>>>> I've experienced the error when trying to enqueue messages from  
>>>> Sqlite's command line utility while running sqlbox. I'm talking  
>>>> about sending a _single_ message on an idle sqlbox process.
>>>> Using the default "busy_timeout" is too low for most practical  
>>>> uses IMHO.
>>>> For example, the PHP driver sets it to 60 seconds.
>>>> If not allowed to change it on the DBPool, it should be set to  
>>>> some more realistic value at least, or maybe even set a default  
>>>> and allow the client to change it (I can modify the patch to  
>>>> accomodate either case of course).
>>>> Regards,
>>>> Alejandro Guerrieri
>>>> El 20/11/2008, a las 07:40 a.m., Alexander Malysh escribió:
>>>>> Hi Alex,
>>>>>
>>>>> why should it be necessary to define lock_timeout? I ask because  
>>>>> we don't allow it for any DBs from our dbpool why should we make  
>>>>> exception for sqlite?
>>>>>
>>>>> Thanks,
>>>>> Alex
>>>>>
>>>>> Alejandro Guerrieri schrieb:
>>>>>> Alex? Did you see this? I've already commited the updates on  
>>>>>> sqlbox and this would definitely improve sqlite2/3 usability.
>>>>>> Regards,
>>>>>> Alejandro
>>>>>> El 13/11/2008, a las 01:20 a.m., Alejandro Guerrieri escribió:
>>>>>>> Did anyone reviewed this again? I think it's now fixed.
>>>>>>>
>>>>>>> I'm about to commit a big update on sqlbox and it would be  
>>>>>>> great to be able to have sqlite2 and sqlite3 behaving properly.
>>>>>>>
>>>>>>> Regards,
>>>>>>>
>>>>>>> Alejandro Guerrieri
>>>>>>>
>>>>>>> El 08/11/2008, a las 12:17 p.m., Alejandro Guerrieri escribió:
>>>>>>>
>>>>>>>> Ups, > 0 would be better right?
>>>>>>>>
>>>>>>>> Changed the datatype to int because that's what the  
>>>>>>>> sqlite_busy_timeout() expects.
>>>>>>>>
>>>>>>>> [Too little coffee that night] ;)
>>>>>>>>
>>>>>>>> Fixed on the code plese re-download.
>>>>>>>>
>>>>>>>> One last note: the value must be properly initialized,  
>>>>>>>> otherwise the struct default could be anything. I've checked  
>>>>>>>> the Kannel code and since there's no dlr_sqlite.c nor any  
>>>>>>>> other use for this (yet), no further patching is necessary.
>>>>>>>>
>>>>>>>> Regards,
>>>>>>>>
>>>>>>>> Alejandro Guerrieri
>>>>>>>>
>>>>>>>> El 07/11/2008, a las 01:57 p.m., Alexander Malysh escribió:
>>>>>>>>
>>>>>>>>> Hi,
>>>>>>>>>
>>>>>>>>> hmm, are you sure ? ;)
>>>>>>>>>
>>>>>>>>> +    if (conf->lock_timeout != NULL) {
>>>>>>>>>
>>>>>>>>> but lock_timeout defined as long...
>>>>>>>>>
>>>>>>>>> Thanks,
>>>>>>>>> Alex
>>>>>>>>>
>>>>>>>>> Alejandro Guerrieri schrieb:
>>>>>>>>>> Hi,
>>>>>>>>>> I've made this small patch that fixes a couple of things on  
>>>>>>>>>> the Sqlite implementation:
>>>>>>>>>> * Sqlite2's [sqlite-connection] group was missing from  
>>>>>>>>>> cfg.def, though dbpool_sqlite.c and all the hooks were in  
>>>>>>>>>> place. This patch adds the missing section.
>>>>>>>>>> * This patch adds a "lock-timeout" configuration option to  
>>>>>>>>>> both sqlite connection groups, where a value in  
>>>>>>>>>> milliseconds can be specified. That value controls the time  
>>>>>>>>>> sqlite waits before throwing a lock ("busy") error. This  
>>>>>>>>>> could be an issue because sqlite locks at the database  
>>>>>>>>>> level (yuk!), and this can surely be a problem under  
>>>>>>>>>> moderate load (I wouldn't recommend sqlite for heavy  
>>>>>>>>>> traffic at all). If not set the default behaviour is  
>>>>>>>>>> maintained, so nothing's broken ;)
>>>>>>>>>> Please check the post here:
>>>>>>>>>> http://www.blogalex.com/archives/50
>>>>>>>>>> Direct download:
>>>>>>>>>> http://www.blogalex.com/wp-content/uploads/2008/11/kannel-sqlite-pool-patches.diff 
>>>>>>>>>>  BTW, my long-term goal is to have on Sqlbox the same DB  
>>>>>>>>>> capabilities as Kannel have (Sqlbox only supports MySql and  
>>>>>>>>>> Postgres and _maybe_ MS SQL). I'm making good progress with  
>>>>>>>>>> sqlite so far, and this patches aim to complete the Kannel  
>>>>>>>>>> support to make it practical to use the DB pool with Sqlbox.
>>>>>>>>>> MS SQL by Ct-Lib is supposed to be working, though is not  
>>>>>>>>>> supported at Kannel afaik (I'll try to port the code to  
>>>>>>>>>> Kannel so it can be linked from gwlib as the rest does when  
>>>>>>>>>> I have some spare time).
>>>>>>>>>> Regards,
>>>>>>>>>> Alejandro Guerrieri
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>
>>>>>
>>>
>>>
>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.