Playing with Zope Head (as of 2003-12-04) revealed problems with
refresh.
I see varying behaviour refreshing CMFCore:
* Refresh is not effective (objects continue the have the old
behavior)
* After a while, commit reports an exception
ValueError: Cache values may only be in one cache.
http://localhost:10080/Portal/portal_types/Document/manage_editProperties
Traceback (innermost last):
Module ZPublisher.Publish, line 104, in publish
Module Zope.App.startup, line 223, in commit
Module ZODB.Transaction, line 254, in commit
Module ZODB.Transaction, line 233, in commit
Module ZODB.Transaction, line 352, in _commit_objects
Module ZODB.Connection, line 286, in commit
ValueError: Cache values may only be in one cache.
The following transscript shows strange reproducible behaviour
which is almost surely related to the above:
linux: bin/zopectl debug
Starting debugger (the name app is bound to the top-level Zope object)
pt=getattr(app,'standard_template.pt')
pr=app.unrestrictedTraverse('Control_Panel/Products/PageTemplates/manage_performRefresh')
pt.getId()
'standard_template.pt'
pr()## refresh
pt.getId() ## apparently not deactivated
'standard_template.pt'
pt._p_deactivate()
pt.getId() ## obviously a wrong result
'Zope'
pt.aq_base.getId() ## may be explainable as pt is not refetched
Traceback (most recent call last):
File stdin, line 1, in ?
File /home/dieter/ZH/ZopeHead/lib/python/ZODB/Connection.py, line 424, in setstate
self._reader.setGhostState(obj, p)
File /home/dieter/ZH/ZopeHead/lib/python/ZODB/serialize.py, line 203, in
setGhostState
obj.__setstate__(state)
File
/home/dieter/ZH/ZopeHead/lib/python/Products/PageTemplates/ZopePageTemplate.py, line
301, in __setstate__
ZopePageTemplate.inheritedAttribute('__setstate__')(self, state)
AttributeError: 'NoneType' object has no attribute 'inheritedAttribute'
pt=getattr(app,'standard_template.pt') ## refetch
pt.getId() ## still wrong
'Zope'
Looks as if refresh did not flush the ZODB cache, which still
delivers objects referencing the old classes.
I now know why the above code does not work as I expected:
The new refresh no longer uses minimize to flush the ZODB
caches but updates the code_timestamp.
This causes the cache to be replaced by a new one when
the connection is opened for the next time.
ATT: replacing the cache without clearing it can lead to huge
memory leaks (everything in the old cache is leaked!).
I can not yet explain the original observations...
--
Dieter
___
Zope-Dev maillist - [EMAIL PROTECTED]
http://mail.zope.org/mailman/listinfo/zope-dev
** No cross posts or HTML encoding! **
(Related lists -
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )