Commit 6714794f authored by Tres Seaver's avatar Tres Seaver

Reset ``_cache`` on a connection's ``_reader`` object when resetting the cache

- This change prevent reads from the old cache object, e.g. during Zope2's
  auto-refresh of products. (https://bugs.launchpad.net/zodb/+bug/142667).
parent 43749047
...@@ -4,6 +4,11 @@ Whats new in ZODB 3.8.1 ...@@ -4,6 +4,11 @@ Whats new in ZODB 3.8.1
Bugs Fixed: Bugs Fixed:
- (3.8.1) Reset ``_cache`` on a connection's ``_reader`` object when
resetting the cache, to prevent reads from the old cache object, e.g.
during Zope2's auto-refresh of products.
(https://bugs.launchpad.net/zodb/+bug/142667).
- (beta 9) An exception would be raised when an error occured attempting to - (beta 9) An exception would be raised when an error occured attempting to
lock a file and logging of said error was enabled. lock a file and logging of said error was enabled.
......
...@@ -1027,7 +1027,7 @@ class Connection(ExportImport, object): ...@@ -1027,7 +1027,7 @@ class Connection(ExportImport, object):
self._invalidated.clear() self._invalidated.clear()
self._invalidatedCache = False self._invalidatedCache = False
cache_size = self._cache.cache_size cache_size = self._cache.cache_size
self._cache = cache = PickleCache(self, cache_size) self._reader._cache = self._cache = PickleCache(self, cache_size)
########################################################################## ##########################################################################
# Python protocol # Python protocol
......
...@@ -140,6 +140,14 @@ class ConnectionDotAdd(unittest.TestCase): ...@@ -140,6 +140,14 @@ class ConnectionDotAdd(unittest.TestCase):
self.datamgr.tpc_finish(self.transaction) self.datamgr.tpc_finish(self.transaction)
self.assert_(obj._p_oid not in self.datamgr._storage._stored) self.assert_(obj._p_oid not in self.datamgr._storage._stored)
def check__resetCacheResetsReader(self):
# https://bugs.launchpad.net/zodb/+bug/142667
old_cache = self.datamgr._cache
self.datamgr._resetCache()
new_cache = self.datamgr._cache
self.failIf(new_cache is old_cache)
self.failUnless(self.datamgr._reader._cache is new_cache)
class UserMethodTests(unittest.TestCase): class UserMethodTests(unittest.TestCase):
# add isn't tested here, because there are a bunch of traditional # add isn't tested here, because there are a bunch of traditional
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment