[Neo-report] r2561 vincent - /trunk/neo/client/app.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Wed Dec 22 14:12:09 CET 2010
Author: vincent
Date: Wed Dec 22 14:12:09 2010
New Revision: 2561
Log:
Factorise transaction information retrieval.
Modified:
trunk/neo/client/app.py
Modified: trunk/neo/client/app.py
==============================================================================
--- trunk/neo/client/app.py [iso-8859-1] (original)
+++ trunk/neo/client/app.py [iso-8859-1] Wed Dec 22 14:12:09 2010
@@ -1023,37 +1023,8 @@ class Application(object):
if txn is not self.local_var.txn:
raise StorageTransactionError(self, undone_tid)
- # First get transaction information from a storage node.
- cell_list = self._getCellListForTID(undone_tid, readable=True)
- shuffle(cell_list)
- cell_list.sort(key=self.cp.getCellSortKey)
- packet = Packets.AskTransactionInformation(undone_tid)
- getConnForCell = self.cp.getConnForCell
- for cell in cell_list:
- conn = getConnForCell(cell)
- if conn is None:
- continue
-
- self.local_var.txn_info = 0
- self.local_var.txn_ext = 0
- try:
- self._askStorage(conn, packet)
- except ConnectionClosed:
- continue
- except NEOStorageNotFoundError:
- # Tid not found, try with next node
- neo.logging.warning('Transaction %s was not found on node %s',
- dump(undone_tid), self.nm.getByAddress(conn.getAddress()))
- continue
-
- if isinstance(self.local_var.txn_info, dict):
- break
- else:
- raise NEOStorageError('undo failed')
- else:
- raise NEOStorageError('undo failed')
-
- oid_list = self.local_var.txn_info['oids']
+ txn_info, txn_ext = self._getTransactionInformation(undone_tid)
+ oid_list = txn_info['oids']
# Regroup objects per partition, to ask a minimum set of storage.
partition_oid_dict = {}
@@ -1070,6 +1041,7 @@ class Application(object):
# is)
getCellList = pt.getCellList
getCellSortKey = self.cp.getCellSortKey
+ getConnForCell = self.cp.getConnForCell
queue = self.local_var.queue
undo_object_tid_dict = self.local_var.undo_object_tid_dict = {}
for partition, oid_list in partition_oid_dict.iteritems():
@@ -1131,23 +1103,22 @@ class Application(object):
cell_list = self._getCellListForTID(tid, readable=True)
shuffle(cell_list)
cell_list.sort(key=self.cp.getCellSortKey)
+ packet = Packets.AskTransactionInformation(tid)
+ getConnForCell = self.cp.getConnForCell
for cell in cell_list:
- conn = self.cp.getConnForCell(cell)
- if conn is not None:
- self.local_var.txn_info = 0
- self.local_var.txn_ext = 0
- try:
- self._askStorage(conn,
- Packets.AskTransactionInformation(tid))
- except ConnectionClosed:
- continue
- if isinstance(self.local_var.txn_info, dict):
- break
- if self.local_var.txn_info in (-1, 0):
- # TID not found at all
- raise NeoException, 'Data inconsistency detected: ' \
- 'transaction info for TID %r could not ' \
- 'be found' % (tid, )
+ conn = getConnForCell(cell)
+ if conn is None:
+ continue
+ try:
+ self._askStorage(conn, packet)
+ except ConnectionClosed:
+ continue
+ except NEOStorageNotFoundError:
+ # TID not found
+ continue
+ break
+ else:
+ raise NEOStorageError('Transaction %r not found' % (tid, ))
return (self.local_var.txn_info, self.local_var.txn_ext)
@@ -1268,38 +1239,17 @@ class Application(object):
# Now that we have object informations, get txn informations
history_list = []
for serial, size in self.local_var.history[1]:
- self._getCellListForTID(serial, readable=True)
- shuffle(cell_list)
- cell_list.sort(key=self.cp.getCellSortKey)
- for cell in cell_list:
- conn = self.cp.getConnForCell(cell)
- if conn is None:
- continue
-
- # ask transaction information
- self.local_var.txn_info = None
- try:
- self._askStorage(conn,
- Packets.AskTransactionInformation(serial))
- except ConnectionClosed:
- continue
- except NEOStorageNotFoundError:
- # TID not found
- continue
- if isinstance(self.local_var.txn_info, dict):
- break
-
+ txn_info, txn_ext = self._getTransactionInformation(serial)
# create history dict
- self.local_var.txn_info.pop('id')
- self.local_var.txn_info.pop('oids')
- self.local_var.txn_info.pop('packed')
- self.local_var.txn_info['tid'] = serial
- self.local_var.txn_info['version'] = ''
- self.local_var.txn_info['size'] = size
- if filter is None or filter(self.local_var.txn_info):
- history_list.append(self.local_var.txn_info)
- self._insertMetadata(self.local_var.txn_info,
- self.local_var.txn_ext)
+ txn_info.pop('id')
+ txn_info.pop('oids')
+ txn_info.pop('packed')
+ txn_info['tid'] = serial
+ txn_info['version'] = ''
+ txn_info['size'] = size
+ if filter is None or filter(txn_info):
+ history_list.append(txn_info)
+ self._insertMetadata(txn_info, txn_ext)
return history_list
More information about the Neo-report
mailing list