[Zope3-Users] Need help with an urgent problem
Marius Gedminas
marius at gedmin.as
Thu Jan 8 06:52:41 EST 2009
On Wed, Jan 07, 2009 at 01:28:24PM -0000, kevin gill wrote:
> I am having a problem on my live site. The problem is todo with a DataBase
> connector object which ends up in an incorrect state:
>
> This is the important part of the traceback.
>
> File
> "/home/kevin/src/castingzone.tables/castingzone/tables/person/extraaccount_db.py",
> line 460, in IsValidUser
> result = self.execute('extraaccount.IsValidUser',
> self.IsValidUser.__doc__, **params)
> File "/home/kevin/src/castingzone.utility/castingzone/utility/db/db.py",
> line 125, in execute
> return queryForResults(connection, query)
> File "/home/kevin/src/castingzone.utility/castingzone/utility/db/db.py",
> line 28, in queryForResults
> cursor.execute(query)
> File
> "/srv/zope/hosting/castingzone/instance/hacks/psycopgda-1.0-py2.4.egg/psycopgda/adapter.py",
> line 417, in execute
> return ZopeCursor.execute(self, operation, parameters)
> File
> "/srv/zope/hosting/castingzone/eggs/zope.rdb-3.4.0-py2.4.egg/zope/rdb/__init__.py",
> line 261, in execute
> operation, parameters = self._prepareOperation(operation, parameters)
> File
> "/srv/zope/hosting/castingzone/eggs/zope.rdb-3.4.0-py2.4.egg/zope/rdb/__init__.py",
> line 278, in _prepareOperation
> encoding = self.connection.getTypeInfo().getEncoding()
> File
> "/srv/zope/hosting/castingzone/eggs/ZODB3-3.9.0_dev_r77011-py2.4-linux-i686.egg/ZODB/Connection.py",
> line 798, in setstate
> raise ConnectionStateError(msg)
> ConnectionStateError: Shouldn't load state for 0x1d54 when the connection
> is closed
If I'm not mistaken, this error typically occurs when you try to hold a
reference to a Persistent object across transaction boundaries (e.g. by
storing it in a global). Don't do that.
Sometimes this happens in unexpected places (e.g. having a schema with
an Object field that has a default value, and an edit form -- the
default value is never explicitly copied, so you may end up with
multiple references to it). I'm not saying this could be your problem;
I'm just trying to remind you that some globals may be difficult to
notice if you haven't been burned by them before.
> Once the server gets into this state, it seems to repeat often.
>
> The object in question is a database connection object.
Are you talking about the persistent object with oid 0x1d54?
> I have just
> retrieved it via an adapter lookup. It is not stored.
>
> connection= zope.component.getUtility(IZopeDatabaseAdapter,
> CONNECTION_NAME, self.context)()
>
> The database connection is provided by a global utility. The important
> code is as follows:
>
> def connection_directive(_context, name=CONNECTION_NAME,
> connection_string='', encoding='latin-1'):
> """Process a db:Connection zcml directive"""
>
> # Don't delay to the end of the configuration process -
> gAdapter = PsycopgAdapter(connection_string)
> gAdapter.setEncoding(encoding)
> gAdapter.connect()
> provideUtility(gAdapter, IZopeDatabaseAdapter, name)
This looks okay-ish to me (latin-1, yuck, is this the 20th century still?).
> Any help in narrowing down this problem would be greatly appreciated. It
> is making my live system unworkable.
Start a debug console (zopectl debug or bin/debugzope), then take a look
at oid 0x1d54:
>>> from ZODB.utils import p64
>>> app.root()._p_jar.get(p64(0x1d54))
The interesting bit of information is the class name of that object.
Then look through the sources trying to determine the lifetime of that
object: where are references to it created?
Marius Gedminas
--
I doubt, therefore I might be.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
Url : http://mail.zope.org/pipermail/zope3-users/attachments/20090108/b6f64f2c/attachment.bin
More information about the Zope3-users
mailing list