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 closedIf 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.
signature.asc
Description: Digital signature
_______________________________________________ Zope3-users mailing list [email protected] http://mail.zope.org/mailman/listinfo/zope3-users
