[Zope] Database connectors

Maciej Wisniowski maciej.wisniowski at coig.katowice.pl
Fri Nov 17 07:37:23 EST 2006


> Dario Lopez-Kästen said the following on 11/17/2006 01:07 PM:
>>> Do you know these reasons?
>> yes, we sometimes get deadlocks in the database, net outages and general
>> misbehavior of DCO2. 
> 
> Sorry, i am casting too much blame on DCO2 here; in reality we have a
> combination of zope2.6, large file uploads and downloads, not
> necessarily good code on our end, AND quite a lot of DCO2 strangeness.
You say deadlocks... Do you use DCOracle2 Stored Procedures?? If so,
then there is a bug in it's definition that may cause Oracle deadlocks.

In SP.py there is function __call__ and code like:


try:
    # Note, this does not do result promotion like the DA query will
    # which is probably bad.  OracleDates in particular look like
    # DateTimes but arent at all the same!
    results = apply(self._v_proc,args,kw)
    return self._lobConvert(self._v_db, results)
except:
     self._v_proc = None
     raise                          # Reraise error

AFAIR you may change this to:

except:
     self._abort()
     self._v_proc = None
     raise                          # Reraise error

Possibly you may need to change these too:


def _abort(self):
    self.db.rollback()

to:

def _abort(self):
    if self.db:
        self.db.rollback()



Otherwise, when during request you've called only one stored procedure
(no other zsqlmethods etc.) and this SP raised an exception, there
may be no rollback to Oracle.

-- 
Maciej Wisniowski


More information about the Zope mailing list