[ZODB-Dev] Low-level reference finding, tracking, deleting?

Laurence Rowe l at lrowe.co.uk
Sat Apr 17 09:43:20 EDT 2010


On 17 April 2010 05:27, Jeff Shell <jeff at 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:
http://plone.org/documentation/kb/debug-zodb-bloat

Since then, Jim has written zc.zodbgc in which the
"multi-zodb-check-refs script will optionally produce a database
of reverse references".
http://www.mail-archive.com/zodb-dev@zope.org/msg04389.html

> 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.

Laurence


More information about the ZODB-Dev mailing list