Commit 13d7eb5e authored by Jim Fulton's avatar Jim Fulton

Fixed a silly typo: Collector 1866

Merged in changes from Evan's branch that allows the system to
continue commiting transactions when there is a failure of only one
data manager in the last phase of two-phase commit.
parent 967f9c05
...@@ -84,8 +84,8 @@ ...@@ -84,8 +84,8 @@
############################################################################## ##############################################################################
"""Transaction management """Transaction management
$Id: Transaction.py,v 1.24 2000/08/07 20:44:58 brian Exp $""" $Id: Transaction.py,v 1.25 2001/01/18 18:12:21 jim Exp $"""
__version__='$Revision: 1.24 $'[11:-2] __version__='$Revision: 1.25 $'[11:-2]
import time, sys, struct, POSException import time, sys, struct, POSException
from struct import pack from struct import pack
...@@ -122,7 +122,7 @@ class Transaction: ...@@ -122,7 +122,7 @@ class Transaction:
r=self.__class__() r=self.__class__()
r.user=self.user r.user=self.user
r.description=self.description r.description=self.description
r._extention=self._extension r._extension=self._extension
return r return r
def __str__(self): return "%.3f\t%s" % (self._id, self.user) def __str__(self): return "%.3f\t%s" % (self._id, self.user)
...@@ -187,6 +187,7 @@ class Transaction: ...@@ -187,6 +187,7 @@ class Transaction:
objects=self._objects objects=self._objects
jars={} jars={}
jarsv = None
subj=self._sub subj=self._sub
subjars=() subjars=()
if subtransaction: if subtransaction:
...@@ -260,11 +261,45 @@ class Transaction: ...@@ -260,11 +261,45 @@ class Transaction:
j.commit_sub(self) j.commit_sub(self)
for jar in jars.values(): jarsv = jars.values()
for jar in jarsv:
if not subtransaction: if not subtransaction:
try: jar=jar.tpc_vote try: jar=jar.tpc_vote
except: pass except: pass
else: jar(self) # last chance to bail else: jar(self) # last chance to bail
try:
# Try to finish one jar, since we may be able to
# recover if the first one fails.
if jarsv:
jarsv[-1].tpc_finish(self) # This should never fail
jarsv.pop() # It didn't, so it's taken care of.
except:
# Bug if it does, we need to keep track of it
LOG('ZODB', ERROR,
"A storage error occurred in the last phase of a "
"two-phase commit. This shouldn\'t happen. ",
error=sys.exc_info())
raise
try:
while jarsv:
jarsv[-1].tpc_finish(self) # This should never fail
jarsv.pop() # It didn't, so it's taken care of.
except:
# Bug if it does, we need to yell FIRE!
# Someone finished, so don't allow any more
# work without at least a restart!
global hosed
hosed=1
LOG('ZODB', PANIC,
"A storage error occurred in the last phase of a "
"two-phase commit. This shouldn\'t happen. "
"The application may be in a hosed state, so "
"transactions will not be allowed to commit "
"until the site/storage is reset by a restart. ",
error=sys.exc_info())
raise
except: except:
t,v,tb=sys.exc_info() t,v,tb=sys.exc_info()
...@@ -280,7 +315,9 @@ class Transaction: ...@@ -280,7 +315,9 @@ class Transaction:
except: pass except: pass
# Then, we unwind TPC for the jars that began it. # Then, we unwind TPC for the jars that began it.
for j in jars.values(): if jarsv is None:
jarsv = jars.values()
for j in jarsv:
try: j.tpc_abort(self) # This should never fail try: j.tpc_abort(self) # This should never fail
except: pass except: pass
...@@ -291,26 +328,6 @@ class Transaction: ...@@ -291,26 +328,6 @@ class Transaction:
raise t,v,tb raise t,v,tb
for j in jars.values():
try:
j.tpc_finish(self) # This should never fail
except:
# Bug if it does, we need to keep track of it and
# not allow any more work without at least a restart!
global hosed
hosed=1
LOG('ZODB', PANIC,
"A storage error occurred in the last phase of a "
"two-phase commit. This shouldn\'t happen. "
"The application may be in a hosed state, so "
"transactions will not be allowed to commit "
"until the site/storage is reset by a restart. ",
error=sys.exc_info())
if t is None:
t,v,tb=sys.exc_info()
if t is not None: raise t,v,tb
finally: finally:
tb=None tb=None
del objects[:] # clear registered del objects[:] # clear registered
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment