[Checkins] SVN: lovely.memcached/trunk/ optimized handling for
invalidations
Juergen Kartnaller
juergen at kartnaller.at
Mon Aug 13 05:52:30 EDT 2007
Log message for revision 78783:
optimized handling for invalidations
raise a ValueError if the cache data in raw mode is not str.
added more tests for dependencies
Update for version 0.1.3
Changed:
U lovely.memcached/trunk/CHANGES.txt
U lovely.memcached/trunk/buildout.cfg
U lovely.memcached/trunk/setup.py
U lovely.memcached/trunk/src/lovely/memcached/README.txt
U lovely.memcached/trunk/src/lovely/memcached/event.py
U lovely.memcached/trunk/src/lovely/memcached/utility.py
-=-
Modified: lovely.memcached/trunk/CHANGES.txt
===================================================================
--- lovely.memcached/trunk/CHANGES.txt 2007-08-13 02:22:33 UTC (rev 78782)
+++ lovely.memcached/trunk/CHANGES.txt 2007-08-13 09:52:29 UTC (rev 78783)
@@ -2,6 +2,16 @@
Changes in lovely.memcached
===========================
+2007/08/13 0.1.3:
+=================
+
+- optimized handling for invalidations
+
+- raise a ValueError if the cache data in raw mode is not str.
+
+- added more tests for dependencies
+
+
2007/07/03 0.1.2:
=================
Modified: lovely.memcached/trunk/buildout.cfg
===================================================================
--- lovely.memcached/trunk/buildout.cfg 2007-08-13 02:22:33 UTC (rev 78782)
+++ lovely.memcached/trunk/buildout.cfg 2007-08-13 09:52:29 UTC (rev 78783)
@@ -6,5 +6,3 @@
recipe = zc.recipe.testrunner
eggs = lovely.memcached [test]
-
-
Modified: lovely.memcached/trunk/setup.py
===================================================================
--- lovely.memcached/trunk/setup.py 2007-08-13 02:22:33 UTC (rev 78782)
+++ lovely.memcached/trunk/setup.py 2007-08-13 09:52:29 UTC (rev 78783)
@@ -3,7 +3,7 @@
setup (
name='lovely.memcached',
- version='0.1.2',
+ version='0.1.3',
author = "Lovely Systems",
author_email = "office at lovelysystems.com",
description = "A memcached client utiltiy for zope 3",
Modified: lovely.memcached/trunk/src/lovely/memcached/README.txt
===================================================================
--- lovely.memcached/trunk/src/lovely/memcached/README.txt 2007-08-13 02:22:33 UTC (rev 78782)
+++ lovely.memcached/trunk/src/lovely/memcached/README.txt 2007-08-13 09:52:29 UTC (rev 78783)
@@ -166,22 +166,25 @@
be done by setting the raw keyword argument to True on the set
and query methods.
-If raw is used, the key must be a string.
+If raw is used, the value must be a string.
- >>> k = util.set(u'value of a', u'a', raw=True)
+ >>> k = util.set('value of a', u'a', raw=True)
Traceback (most recent call last):
+ ...
ValueError: u'a'
- >>> util.set(u'value of a', 'a', raw=True)
+ >>> util.set('value of a', 'a', raw=True)
'a'
The namespace is simply prepended to the key if provided. And must be
a string too.
- >>> util.set(u'value of a', 'a', ns=u'NS_', raw=True)
+ >>> util.set('value of a', 'a', ns=u'NS_', raw=True)
Traceback (most recent call last):
+ ...
ValueError: u'NS_a'
- >>> util.set(u'value of a', 'a', ns='NS_', raw=True)
+
+ >>> util.set('value of a', 'a', ns='NS_', raw=True)
'NS_a'
@@ -213,21 +216,42 @@
>>> k = util5.set('data1', 'key1', dependencies=['something'])
>>> k = util5.set('data2', 'key2', dependencies=['something'], raw=True)
+We have an entry in memcache which holds the list of dependencies.
+
+ >>> depKey = util5._buildDepKey('something', util5._getNS(None, False))
+ >>> util5.query(depKey, raw=True)
+ ('19192ccdbb8267c35b9bdaf2f1f5594b', 'key2')
+
>>> util5.query('key1')
'data1'
>>> util5.query('key2', raw=True)
'data2'
-
+
+Invalitating a non existing invalidation key keeps the existing entries in the
+cache.
+
>>> util.invalidate(dependencies=['otherthing'])
>>> util5.query('key1')
'data1'
>>> util5.query('key2', raw=True)
'data2'
+
+Also the dependency list is unchanged.
+
+ >>> util5.query(depKey, raw=True)
+ ('19192ccdbb8267c35b9bdaf2f1f5594b', 'key2')
+
+Now invalidating with an existing key removes our cache entries and also the
+dependency entry.
+
>>> util.invalidate(dependencies=['something', 'another thing'])
>>> util5.query('key1') is None
True
>>> util5.query('key2', raw=True) is None
True
+ >>> util5.query(depKey, raw=True) is None
+ True
+
>>> k = util5.set('data3', 'key3', ns='1', dependencies=['something'])
>>> util.invalidate(dependencies=['something'])
>>> util5.query('key3', ns='1')
@@ -237,7 +261,6 @@
True
-
Statistics
==========
Modified: lovely.memcached/trunk/src/lovely/memcached/event.py
===================================================================
--- lovely.memcached/trunk/src/lovely/memcached/event.py 2007-08-13 02:22:33 UTC (rev 78782)
+++ lovely.memcached/trunk/src/lovely/memcached/event.py 2007-08-13 09:52:29 UTC (rev 78783)
@@ -47,7 +47,7 @@
else:
caches = component.getAllUtilitiesRegisteredFor(IMemcachedClient)
for cache in caches:
- if event.raw == None:
+ if event.raw is not None:
cache.invalidate(event.key, event.ns, event.raw, event.dependencies)
else:
cache.invalidate(event.key, event.ns, True, event.dependencies)
Modified: lovely.memcached/trunk/src/lovely/memcached/utility.py
===================================================================
--- lovely.memcached/trunk/src/lovely/memcached/utility.py 2007-08-13 02:22:33 UTC (rev 78782)
+++ lovely.memcached/trunk/src/lovely/memcached/utility.py 2007-08-13 09:52:29 UTC (rev 78783)
@@ -86,6 +86,8 @@
ns = self._getNS(ns, raw)
if not raw:
data = cPickle.dumps(data)
+ elif not isinstance(data, StringType):
+ raise ValueError, data
log.debug('set: %r, %r, %r, %r' % (key,
len(data), ns,
lifetime))
@@ -131,7 +133,7 @@
depKey = self._buildDepKey(dep, ns)
keys = self.client.get(depKey)
if keys is not None:
- self.invalidate(depKey)
+ self.client.delete(depKey)
for key in keys:
self.client.delete(key)
@@ -185,7 +187,7 @@
if raw is True:
if ns:
key = ns+key
- if type(key)!= StringType:
+ if type(key) != StringType:
raise ValueError, repr(key)
return key
More information about the Checkins
mailing list