[ZODB-Dev] persistent client caches okay to use again in ZODB 3.9.6?
Jim Fulton
jim at zope.com
Thu Oct 14 12:09:16 EDT 2010
On Wed, Oct 13, 2010 at 8:28 PM, Chris Withers <chris at simplistix.co.uk> wrote:
> On 12/10/2010 17:56, Jim Fulton wrote:
>>
>> Currently the only configuration "docs" are in the .xml Alan provided a
>> link to.
>>
>> The best size will depend on the app.
>
> Is there a downside to "too big", provided there's plenty of disk space free
> on the app servers?
Yes. On startup, the cache has to be scanned, and large caches can cause
excessive IO on startup.
...
>> In ZODB 3.10, the cache tracing analysis tools actually work and produce
>> meaningful numbers if you start tracing with an empty cache.
>
> Okay, does that mean the stuff that's documented should be ignored for ZODB
> 3.9?
Cache tracing is busted for 3.9, so yeah. :)
The documentation may be wrong for 3.10 too. I don't know.
I'm working (slowly) on new docs. This will be executable and thus more likely
to be accurate.
>
> I went for the following in the end:
>
> ...
> cache-size 200Mb
> client app
> wait on
> </zeoclient>
> mount-point /
> cache-size 50000
> cache-size-bytes 500Mb
>
> Any obvious issues with that?
No.
>
> One problem I did hit, though, was if I restarted an app server, I got:
>
> File "/var/buildout-eggs/ZODB3-3.9.6-py2.6-linux-i686.egg/ZODB/config.py",
> line 210, in open
> **options)
> File
> "/var/buildout-eggs/ZODB3-3.9.6-py2.6-linux-i686.egg/ZEO/ClientStorage.py",
> line 395, in __init__
> self._cache = self.ClientCacheClass(cache_path, size=cache_size)
> File "/var/buildout-eggs/ZODB3-3.9.6-py2.6-linux-i686.egg/ZEO/cache.py",
> line 194, in __init__
> self._lock_file = zc.lockfile.LockFile(path + '.lock')
> File
> "/var/buildout-eggs/zc.lockfile-1.0.0-py2.6.egg/zc/lockfile/__init__.py",
> line 76, in __init__
> _lock_file(fp)
> File
> "/var/buildout-eggs/zc.lockfile-1.0.0-py2.6.egg/zc/lockfile/__init__.py",
> line 59, in _lock_file
> raise LockError("Couldn't lock %r" % file.name)
> LockError: Couldn't lock '....zec.lock'
ZEO caches can't be shared between processes. This is catching that.
I think the lock was added in 3.9 to protect you from cache corruption
due to multiple processes accessing the cache at once.
> ...and yet the app server came up fine.
This is rather disturbing.
> What does this error message imply?
That two processes were trying to access the cache.
> The above did not, however, occur if I stopped and then started the app
> server...
>
> Race condition?
Hopefully, you screwed up somehow and started the process while it was
already running. :)
Jim
--
Jim Fulton
More information about the ZODB-Dev
mailing list