[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