Commit 6b5e0210 authored by Vincent Pelletier's avatar Vincent Pelletier

Wait for all storage responses when aborting.

Aborting might happen even before vote is called, wot there might be
pending store responses. Wait for them without doing conflict handling.

git-svn-id: https://svn.erp5.org/repos/neo/trunk@1858 71dcc9de-d417-0410-9af5-da40c76e7ee4
parent 4efce397
......@@ -634,6 +634,8 @@ class Application(object):
# dected as closed)
while pending(queue):
_waitAnyMessage()
if tryToResolveConflict is None:
break
conflicts = _handleConflicts(tryToResolveConflict)
if conflicts:
update(conflicts)
......@@ -642,15 +644,16 @@ class Application(object):
# requests
break
# Check for never-stored objects, and update result for all others
for oid, store_count in \
local_var.object_stored_counter_dict.iteritems():
if store_count == 0:
raise NEOStorageError('tpc_store failed')
elif oid in resolved_oid_set:
append((oid, ResolvedSerial))
else:
append((oid, tid))
if tryToResolveConflict is not None:
# Check for never-stored objects, and update result for all others
for oid, store_count in \
local_var.object_stored_counter_dict.iteritems():
if store_count == 0:
raise NEOStorageError('tpc_store failed')
elif oid in resolved_oid_set:
append((oid, ResolvedSerial))
else:
append((oid, tid))
return result
def tpc_vote(self, transaction, tryToResolveConflict):
......@@ -700,6 +703,10 @@ class Application(object):
if transaction is not self.local_var.txn:
return
# Just wait for response to arrive, don't handle any conflict, and
# ignore the outcome: we are going to abort anyway.
self.waitStoreResponses(None)
cell_set = set()
# select nodes where objects were stored
for oid in self.local_var.data_dict.iterkeys():
......
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