From: sophana <so...@zi...> - 2007-03-21 16:40:37
|
Hi I have a question about the sqlObject cache. I'm 2 web servers over 2 replicated mysql server for high availability. What I'm actually doing is to disable the connection cache. Looking at connection debug log, there are a lot of useless transactions that could be cached. So I had the idea of calling connection.cache.weakrefAll() at the beginning of all web transactions. I checked the code and saw that it should work with no problem, as a cache lock is acquired before doing the operation. Do you think it should work? But looking at the log, I saw that the transaction are not the same between 2 identical web requests. (with an idle test webserver) I'm suspecting the cache cull system. How can I disable the cull system? Maybe there should be a connection parameter for this? Thanks |
From: Oleg B. <ph...@ph...> - 2007-03-21 16:47:13
|
On Wed, Mar 21, 2007 at 05:40:02PM +0100, sophana wrote: > I'm suspecting the cache cull system. > How can I disable the cull system? Currently there is no way do disable culling. If caching is enabled cache will always perform culling. Oleg. -- Oleg Broytmann http://phd.pp.ru/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |
From: sophana <so...@zi...> - 2007-03-21 18:38:05
|
Oleg Broytmann a écrit : > On Wed, Mar 21, 2007 at 05:40:02PM +0100, sophana wrote: > >> I'm suspecting the cache cull system. >> How can I disable the cull system? >> > > Currently there is no way do disable culling. If caching is enabled > cache will always perform culling. > > Oleg. > May I propose a little patch where the doCache value is tested: if doCache=='noCull', cache is enabled without culling it is compatible with the connection uri: &cache=noCull Do you think this the right way to do? |
From: Oleg B. <ph...@ph...> - 2007-03-21 18:51:10
|
On Wed, Mar 21, 2007 at 07:37:21PM +0100, sophana wrote: > May I propose a little patch where the doCache value is tested: > if doCache=='noCull', cache is enabled without culling > it is compatible with the connection uri: &cache=noCull This requires a note in documentation to remind the user to call .expireAll() or .clear() often to prevent the cache growing indefinitely. Oleg. -- Oleg Broytmann http://phd.pp.ru/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |
From: Simon C. <hod...@gm...> - 2007-03-22 07:02:50
|
On 3/21/07, sophana <so...@zi...> wrote: > I'm suspecting the cache cull system. > How can I disable the cull system? Mine own solution to this problem was to create an external cache (outside SQLObject) which explicitly keeps references to the objects I use often. So at start up I do something like: cache = list(CommonObjTable.select()) Then SQLObject never removes these objects from the cache since there are still references to them (provided the variable cache itself is not dereferenced). Schiavo Simon |
From: sophana <so...@zi...> - 2007-03-22 13:39:38
|
Simon Cross a écrit : > On 3/21/07, sophana <so...@zi...> wrote: > >> I'm suspecting the cache cull system. >> How can I disable the cull system? >> > > Mine own solution to this problem was to create an external cache > (outside SQLObject) which explicitly keeps references to the objects I > use often. > > So at start up I do something like: > > cache = list(CommonObjTable.select()) > > Then SQLObject never removes these objects from the cache since there > are still references to them (provided the variable cache itself is > not dereferenced). > > This is not exactly what I'm looking for. Note: if you disable the cache, they won't be in the cache as there is no cache, but in the expiredCache. I think this means they still get reloaded each time when accessed (selected). Am I right? I just wanted to clear the cache at the begining of every web transaction instead of simply disabling the cache completely. cache.clear() is NOT a good solution. I tried it and noticed data corruption! It is not thread safe! cache.weakrefAll() (which should be called expireAll...) seems a good alternative. |