[zope2-tracker] [Bug 646661] [NEW] Cannot unpickle object with broken interface provided on it
Sylvain Viollon
sylvain at infrae.com
Fri Sep 24 04:35:26 EDT 2010
Public bug reported:
On a ZODB object I do an alsoProvide of an interface.
Now I remove the corresponding code for that interface (and that
object but it is not required) and I restart my server. I didn't
moved them, I just removed them. (If I moved them I would use
zodbupdate, and have no problem).
But let say I need to remove that object from ZODB. Unpickling that
object fail in the custom set_state of zope.interface with the well known
error:
File
".../zope.interface-3.5.3-py2.6-linux-i686.egg/zope/interface/adapter.py",
line 470, in add_extendor for i in provided.__iro__:
AttributeError: type object 'IMyInterface' has no attribute '__iro__'
Because it expect to get an interface to restore the alsoProvides,
and got a broken interface instead (which is just like a regular
broken object).
And you cannot access your ZODB anymore, since this broken object, with
its broken interface is unpickled when its container is.
I found a way 'to prevent' this error, by adding an attribute
__iro__ which is an empty tuple to OFS.Uninstalled.BrokenClass.
That let me load this broken object, and delete it (along with the reference
to the broken interface).
I think it is the good behavior, and since you cannot modify a broken
object, if you put back the code after, your object will work again,
with its interface provided as well.
** Affects: zope2
Importance: Undecided
Status: New
--
Cannot unpickle object with broken interface provided on it
https://bugs.launchpad.net/bugs/646661
You received this bug notification because you are a member of Zope 2
Developers, which is subscribed to Zope 2.
More information about the zope2-tracker
mailing list