On Fri, Sep 10, 2010 at 2:27 AM, Chris Withers <chris@simplistix.co.uk> wrote:
On 09/09/2010 21:47, Jim Fulton wrote:
2010-08-26 22:49:01 ERROR txn.-1338986496 Failed to abort resource manager:<MultiObjectResourceAdapter for<ZODB.DB.TransactionalUndo object at 0x2d509f0> at 47516176> Traceback (most recent call last): File "transaction-1.1.0-py2.6.egg/transaction/_transaction.py", line 475, in abort rm.abort(self) File "transaction-1.1.0-py2.6.egg/transaction/_transaction.py", line 548, in abort self.manager.abort(o, txn) File "ZODB3-3.9.5-py2.6-macosx-10.3-fat.egg/ZODB/DB.py", line 985, in abort raise NotImplementedError NotImplementedError
This used to give a meaningful error message.
In 3.7 and earlier.
Anyone know why it no longer does?
The resource manager abort method used to be a pass. In 3.9 in raises an exception, which hides the undo exception.
That's bad, right?
It's affect on zope users is, but arguably because Zope 2 is(/was?) misshandling the exception. It shouldn't let an exception raised while handling the original exception hide the original exception. (Of course, this is a common mistake. I've made it many times myself. :)
An app should capture the undo exception information before calling abort.
"the app" here is Zope 2's publisher process, right?
I guess. :)
My guess is that this works much better in ZODB 3.10.
Any particular reason?
Because the undo handling was rewritten for 3.10. It was a mess for some time before. Jim -- Jim Fulton