Hi all,

the zope.app.cache.ram.RAMCache doesn't seem to expire correctly the cached data. If I rightly understand the code, the cache for an object is expired only when another object is inserted into the cache.


I wrote a little test in order to query only the cache.

---->8---->8---->8----

Set up an object that provide ICacheable and set up a ramcache with the max age set to 1 second::

  >>> from zope import interface
  >>> from zope.app.cache.ram import RAMCache
  >>> from zope.app.cache.interfaces import ICacheable

  >>> ramcache = RAMCache()
  >>> ramcache.update(maxEntries=1000, maxAge=1, cleanupInterval=1)

  >>> class CacheableObject(object):
  ...     interface.implements(ICacheable)
  ...     cacheId = None
  ...     def getCacheId(self):
  ...         return cacheId
  ...     def setCacheId(self, cacheId):
  ...         self.cacheId = cacheId

  >>> cacheable = CacheableObject()

Now I query, set and query again the cache and I got the right behavior::

  >>> data = "my data"
  >>> ramcache.query(cacheable) is None
  True
  >>> ramcache.set(data, cacheable)
  >>> ramcache.query(cacheable) is data
  True

Sleep 2 seconds in order to assure the expiration of the cache::

  >>> import time
  >>> time.sleep(2)
  >>> ramcache.query(cacheable) is data
  False

----8<----8<----8<----

With Zope-3.2 I got:

...
Failed example:
    ramcache.query(cacheable) is data
Expected:
    False
Got:
    True

Kind regards,
Marco Andreini
_______________________________________________
Zope3-dev mailing list
Zope3-dev@zope.org
Unsub: http://mail.zope.org/mailman/options/zope3-dev/archive%40mail-archive.com

Reply via email to