2007-03-08

ZODB tracing done

Project home is now z3c.zodbtracing on svn.zope.org.
Read more here: http://svn.zope.org/z3c.zodbtracing/trunk/src/z3c/zodbtracing/
Performance can be an issue if using this storage, but that's not for production, just for debugging so don't come whining.

How to debug UnpickleableError

Sometimes happens that you put a security proxied object into a persistent object's property. Then on transaction commit you get the error:
UnpickleableError: Cannot pickle objects
Now you can search al your code and guess where you set that property.
That can be solved much simpler:
modify ZODB/serialize.py temporarly as follows:
def _dump(self, classmeta, state):
# To reuse the existing cStringIO object, we must reset
# the file position to 0 and truncate the file after the
# new pickle is written.
self._file.seek(0)
self._p.clear_memo()
self._p.dump(classmeta)
try:
self._p.dump(state)
except:
#your favorite debugger's break command

self._file.truncate()
return self._file.getvalue()

And voila, classmeta is the class concerned, state is a dict holding the state. From these values it's piece of cake.

2007-03-02

Restart Z3 with a single click

Put a bookmark into your browser's toolbar that points to http://localhost:8080/++etc++process/servercontrol.html?restart=1
That simple it is.

ZODB debugger

The questions "how-to check the structure of ZODB", "what is stored in the ZODB" pops up here and there.
The answer is: http://svn.zope.org/z3c.zodbbrowser/
This is a wxPython package running independently of the Z3 app server. In fact shut it down before trying to start the ZODB debugger.