On Fri, Dec 31, 2010 at 08:39:22AM +0100, Godefroid Chapelle wrote:
> Le 31/12/10 04:08, Marius Gedminas a écrit :
> > On Fri, Dec 31, 2010 at 02:02:36AM +0100, Godefroid Chapelle wrote:
> >> I have been fighting all day to understand a bug with the unregistration
> >> of a utility from a local site.
> >>
> >> After unregistration, some instance is left in the _subscribers list of
> >> the utilities AdapterRegistry in my local site.
> >
> > Sounds like https://bugs.launchpad.net/zope.component/+bug/551049
> > Actually, half of it is based on identity, and half on equality; when
> > these disagree, you end up with inconsistent state.
> Yup
> > Your example is a good argument for making both halves use equality
> > rather than identity.
> > I think a more fruitful approach would be to fix the zope.component bug
> > and then unregister the utility in the normal way.
> Marius, did you already try to fix zope.component ?

No.  I didn't have an opinion how to fix it (make both pieces of code
use identity or equality), and I was a bit afraid to touch the internals
in case I broke something.  And it was easy to work around in my code,
so I just chickened out :(

> Is it because it is 
> hard that you accepted the Won't fix ? Or because of lack of time ?

The wontfix is for the obsolete monolithic zope3 package.  The bug is
still open against zope.component.

Although it may need to be fixed in the internals of the adapter
registry which lives, I think, in zope.interface?  I forgot most of the
details :(

> > Alternatively, you could hack up a __new__ method to always return the
> > same instance, so you can unregister it cleanly before removing the
> > code.  This will not work if you have more than one instance in the DB.
> Could that __new__ method insert Persistent as a base class if not present ?

No.  In order to change from non-persistent to persistent, you need to
activate and dirty all objects that have references to your
nonpersistent object; it's not enough to change just the object itself.

Marius Gedminas
The death rate on Earth is: .... (computing) .... One per person.

Attachment: signature.asc
Description: Digital signature

For more information about ZODB, see the ZODB Wiki:

ZODB-Dev mailing list  -  ZODB-Dev@zope.org

Reply via email to