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

_______________________________________________
For more information about ZODB, see the ZODB Wiki:
http://www.zope.org/Wikis/ZODB/

ZODB-Dev mailing list  -  ZODB-Dev@zope.org
http://mail.zope.org/mailman/listinfo/zodb-dev

Reply via email to