[Zope-dev] InvalidObjectReference: Attempt to store an object from a foreign database connection

Christian Heimes heimes at faho.rwth-aachen.de
Mon Mar 29 06:28:52 EST 2004


There is a problem regarding plone, cmf and the quickinstaller tool. I'm 
getting an InvalidObjectReference error after reinstalling a product 
with the quickinstaller a second time or several times. It looks like 
the error happens only after I visited the plone ui at least once but 
that could be concurrence. Only restarting zope stops the error until 
the next occurance.

Version: Python 2.3.3 (Debian testing)
          Zope 2.7 (CVS branch)
          CMF 1.4 (CVS)
          Plone 2.0

Traceback (innermost last):
   Module ZPublisher.Publish, line 104, in publish
   Module Zope.App.startup, line 224, in commit
   Module ZODB.Transaction, line 233, in commit
   Module ZODB.Transaction, line 348, in _commit_objects
   Module ZODB.Connection, line 419, in commit
    - __traceback_info__: (('Products.CMFCore.ActionInformation', 
'ActionInformation'), '\x00\x00\x00\x00\x00\x00\x9e\xe3', '')
InvalidObjectReference: Attempt to store an object from a foreign 
database connection

I tried to get the object by starting zope with zopectl debug and using 
app._p_jar['\x00\x00\x00\x00\x00\x00\x9e\xe3'] but the object wasn't 
available so it seems to be a new object that is saved the first time.

After changing the pickler from cPickle to pickle:

Traceback (innermost last):
   Module ZPublisher.Publish, line 104, in publish
   Module Zope.App.startup, line 224, in commit
   Module ZODB.Transaction, line 233, in commit
   Module ZODB.Transaction, line 348, in _commit_objects
   Module ZODB.Connection, line 419, in commit
    - __traceback_info__: (('Products.CMFCore.ActionInformation', 
'ActionInformation'), '\x00\x00\x00\x00\x00\x00\xa2G', '')
   Module pickle, line 231, in dump
   Module pickle, line 293, in save
   Module pickle, line 663, in save_dict
   Module pickle, line 695, in _batch_setitems
   Module pickle, line 278, in save
InvalidObjectReference: Attempt to store an object from a foreign 
database connection

pickle.save():278 is calling self.persistent_id(obj) which is patched to 
call coptimizations.new_persistent 
(pickler.persistent_id=new_persistent_id(self, stack)) in 
ZODB.Connection.commit(). The exception itself is raised by 
persistent_id_call() because of (jar != Py_None && jar != self->jar) is 
true.

Debugging so deep into the zodb is a bit over my knowledge so I would be 
glad if someone could dig in, too. :)

Christian

PS: CC to plone-devel and cmf




More information about the Zope-Dev mailing list