[ZODB-Dev] Invalidating caches for module refresh doesn't seem to work

Philipp von Weitershausen philipp at weitershausen.de
Mon Jan 29 17:46:51 EST 2007


After refreshing a product, Zope 2 uses the following stanza in 
App.RefreshFuncs.autoRefresh() to let the ZODB know that it should 
invalidate its pickle caches:

         ... refresh products
         from ZODB import Connection
         Connection.resetCaches()
         transaction.commit()
         jar._resetCache()
         transaction.begin()

That way, persistent objects will use the newly reimported classes 
instead of continuing to use the old, no longer current classes.

For grok I tried to implement the same mechanism and copied that code 
almost verbatimly, only to find out it doesn't seem to work. Persistent 
objects will still be instances of the classes that should have been 
thrown away during the re-import of modules.

Testing product refresh with both Zope 2.9 and 2.10 produces errors for 
me while Zope 2.8 works, which leads me to the assumption that a cache 
invalidation bug was introduced after ZODB 3.4. Is anybody else seeing 
this? I'm a bit surprised nobody else has complained about this so far...

Help with tracking this down would be greatly appreciated.


-- 
http://worldcookery.com -- Professional Zope documentation and training
Next Zope 3 training at Camp5: http://trizpug.org/boot-camp/camp5



More information about the ZODB-Dev mailing list