提交 0c7413e9 编写于 作者: B Brian Johnson

Multiple retries to identify transaction. GH #5199

上级 383d276c
...@@ -245,27 +245,30 @@ class Node(object): ...@@ -245,27 +245,30 @@ class Node(object):
# pylint: disable=too-many-branches # pylint: disable=too-many-branches
def getTransaction(self, transId, silentErrors=False, exitOnError=False, delayedRetry=True): def getTransaction(self, transId, silentErrors=False, exitOnError=False, delayedRetry=True):
firstExitOnError=not delayedRetry and exitOnError exitOnErrorForDelayed=not delayedRetry and exitOnError
timeout=3
if not self.enableMongo: if not self.enableMongo:
cmdDesc="get transaction" cmdDesc="get transaction"
cmd="%s %s" % (cmdDesc, transId) cmd="%s %s" % (cmdDesc, transId)
msg="(transaction id=%s)" % (transId); msg="(transaction id=%s)" % (transId);
trans=self.processCmd(cmd, cmdDesc, silentErrors=silentErrors, exitOnError=firstExitOnError, exitMsg=msg) for i in range(0,(int(60/timeout) - 1)):
if trans is not None or not delayedRetry: trans=self.processCmd(cmd, cmdDesc, silentErrors=silentErrors, exitOnError=exitOnErrorForDelayed, exitMsg=msg)
return trans if trans is not None or not delayedRetry:
return trans
# delay long enough to ensure if Utils.Debug: Utils.Print("Could not find transaction with id %s, delay and retry" % (transId))
if Utils.Debug: Utils.Print("Could not find transaction with id %s, delay and retry" % (transId)) time.sleep(timeout)
time.sleep(1)
# either it is there or the transaction has timed out
return self.processCmd(cmd, cmdDesc, silentErrors=silentErrors, exitOnError=exitOnError, exitMsg=msg) return self.processCmd(cmd, cmdDesc, silentErrors=silentErrors, exitOnError=exitOnError, exitMsg=msg)
else: else:
trans=self.getTransactionMdb(transId, silentErrors=silentErrors, exitOnError=firstExitOnError) for i in range(0,(int(60/timeout) - 1)):
if trans is not None or not delayedRetry: trans=self.getTransactionMdb(transId, silentErrors=silentErrors, exitOnError=exitOnErrorForDelayed)
return trans if trans is not None or not delayedRetry:
return trans
if Utils.Debug: Utils.Print("Could not find transaction with id %s in mongodb, delay and retry" % (transId)) if Utils.Debug: Utils.Print("Could not find transaction with id %s in mongodb, delay and retry" % (transId))
time.sleep(3) time.sleep(timeout)
return self.getTransactionMdb(transId, silentErrors=silentErrors, exitOnError=firstExitOnError)
return self.getTransactionMdb(transId, silentErrors=silentErrors, exitOnError=exitOnError)
def getTransactionMdb(self, transId, silentErrors=False, exitOnError=False): def getTransactionMdb(self, transId, silentErrors=False, exitOnError=False):
"""Get transaction from MongoDB. Since DB only contains finalized blocks, transactions can take a while to appear in DB.""" """Get transaction from MongoDB. Since DB only contains finalized blocks, transactions can take a while to appear in DB."""
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册