On 17 April 2010 05:27, Jeff Shell <j...@bottlerocket.net> wrote:
> We encountered a problem during an export/import in a Zope 3 based 
> application that resulted in something not being importable. This is from our 
> very first Zope 3 based application, and I stumbled across some very old 
> adapter/utility registrations that I thought I had cleared out. There are 
> references to `zope.interface.adapter.Null` which haven't been around for 
> years. This is in an old `LocalAdapterRegistry` which, again, I thought I had 
> removed along time ago. These objects and what they reference are not part of 
> our normal object graph, and I was surprised to see them.
> Given an oid, how can I trace what references that object/oid? There is 
> something in our normal object hierarchy retaining a reference, but I don't 
> know how to find it, and imagine that trying to investigate/load the objects 
> from the ZODB level will help me find the culprit.

I describe how to do this in an article here:

Since then, Jim has written zc.zodbgc in which the
"multi-zodb-check-refs script will optionally produce a database
of reverse references".

> Are there low level deletion tools in the ZODB to delete individual objects?

You delete an object by removing all references to it, so it becomes
liable for garbage collection. Persistent component registrations will
be referenced from the registry as well as the _components container.

For more information about ZODB, see the ZODB Wiki:

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

Reply via email to