Add error parser to backend
This commit is contained in:
parent
3f41edca73
commit
08e23ae584
@ -189,10 +189,8 @@ class Otx(SessionBase):
|
|||||||
SessionBase.release_session(session)
|
SessionBase.release_session(session)
|
||||||
raise TxStateChangeError('REJECTED on tx that has not been RESERVED ({})'.format(status))
|
raise TxStateChangeError('REJECTED on tx that has not been RESERVED ({})'.format(status))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
self.__set_status(StatusBits.NODE_ERROR | StatusBits.FINAL, session)
|
self.__set_status(StatusBits.NODE_ERROR | StatusBits.FINAL, session)
|
||||||
|
self.__reset_status(StatusBits.QUEUED | StatusBits.RESERVED, session)
|
||||||
if self.tracing:
|
if self.tracing:
|
||||||
self.__state_log(session=session)
|
self.__state_log(session=session)
|
||||||
|
|
||||||
@ -221,7 +219,7 @@ class Otx(SessionBase):
|
|||||||
self.__set_status(StatusBits.OBSOLETE, session)
|
self.__set_status(StatusBits.OBSOLETE, session)
|
||||||
if manual:
|
if manual:
|
||||||
self.manual(session=session)
|
self.manual(session=session)
|
||||||
self.__reset_status(StatusBits.QUEUED | StatusBits.IN_NETWORK, session)
|
self.__reset_status(StatusBits.QUEUED | StatusBits.IN_NETWORK | StatusBits.RESERVED, session)
|
||||||
|
|
||||||
if self.tracing:
|
if self.tracing:
|
||||||
self.__state_log(session=session)
|
self.__state_log(session=session)
|
||||||
|
@ -6,7 +6,11 @@ import urllib.error
|
|||||||
from sqlalchemy.exc import (
|
from sqlalchemy.exc import (
|
||||||
IntegrityError,
|
IntegrityError,
|
||||||
)
|
)
|
||||||
from chainlib.error import JSONRPCException
|
from chainlib.error import (
|
||||||
|
RPCException,
|
||||||
|
RPCNonceException,
|
||||||
|
DefaultErrorParser,
|
||||||
|
)
|
||||||
from hexathon import (
|
from hexathon import (
|
||||||
add_0x,
|
add_0x,
|
||||||
strip_0x,
|
strip_0x,
|
||||||
@ -26,6 +30,7 @@ from chainqueue.sql.state import (
|
|||||||
set_reserved,
|
set_reserved,
|
||||||
set_sent,
|
set_sent,
|
||||||
set_fubar,
|
set_fubar,
|
||||||
|
set_rejected,
|
||||||
)
|
)
|
||||||
from chainqueue.sql.tx import cache_tx_dict
|
from chainqueue.sql.tx import cache_tx_dict
|
||||||
|
|
||||||
@ -34,8 +39,11 @@ logg = logging.getLogger(__name__)
|
|||||||
|
|
||||||
class SQLBackend:
|
class SQLBackend:
|
||||||
|
|
||||||
def __init__(self, conn_spec, *args, **kwargs):
|
def __init__(self, conn_spec, error_parser=None, *args, **kwargs):
|
||||||
SessionBase.connect(conn_spec, pool_size=kwargs.get('poolsize', 0), debug=kwargs.get('debug', False))
|
SessionBase.connect(conn_spec, pool_size=kwargs.get('poolsize', 0), debug=kwargs.get('debug', False))
|
||||||
|
if error_parser == None:
|
||||||
|
error_parser = DefaultErrorParser()
|
||||||
|
self.error_parser = error_parser
|
||||||
|
|
||||||
|
|
||||||
def create(self, chain_spec, nonce, holder_address, tx_hash, signed_tx, obsolete_predecessors=True, session=None):
|
def create(self, chain_spec, nonce, holder_address, tx_hash, signed_tx, obsolete_predecessors=True, session=None):
|
||||||
@ -71,7 +79,7 @@ class SQLBackend:
|
|||||||
fail = False
|
fail = False
|
||||||
r = 1
|
r = 1
|
||||||
try:
|
try:
|
||||||
rpc.do(payload)
|
rpc.do(payload, error_parser=self.error_parser)
|
||||||
r = 0
|
r = 0
|
||||||
except ConnectionError as e:
|
except ConnectionError as e:
|
||||||
logg.error('dispatch {} connection error {}'.format(tx_hash, e))
|
logg.error('dispatch {} connection error {}'.format(tx_hash, e))
|
||||||
@ -79,7 +87,11 @@ class SQLBackend:
|
|||||||
except urllib.error.URLError as e:
|
except urllib.error.URLError as e:
|
||||||
logg.error('dispatch {} urllib error {}'.format(tx_hash, e))
|
logg.error('dispatch {} urllib error {}'.format(tx_hash, e))
|
||||||
fail = True
|
fail = True
|
||||||
except JSONRPCException as e:
|
except RPCNonceException as e:
|
||||||
|
logg.error('nonce error {} default {}'.format(tx_hash, e))
|
||||||
|
set_rejected(chain_spec, tx_hash, session=session)
|
||||||
|
return 1
|
||||||
|
except RPCException as e:
|
||||||
logg.exception('error! {}'.format(e))
|
logg.exception('error! {}'.format(e))
|
||||||
set_fubar(chain_spec, tx_hash, session=session)
|
set_fubar(chain_spec, tx_hash, session=session)
|
||||||
raise e
|
raise e
|
||||||
|
@ -5,4 +5,4 @@ alembic==1.4.2
|
|||||||
SQLAlchemy==1.3.20
|
SQLAlchemy==1.3.20
|
||||||
confini>=0.4.1a1,<0.5.0
|
confini>=0.4.1a1,<0.5.0
|
||||||
pyxdg~=0.27
|
pyxdg~=0.27
|
||||||
chainlib~=0.0.9a2
|
chainlib~=0.0.9a3
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[metadata]
|
[metadata]
|
||||||
name = chainqueue
|
name = chainqueue
|
||||||
version = 0.0.4a4
|
version = 0.0.4a5
|
||||||
description = Generic blockchain transaction queue control
|
description = Generic blockchain transaction queue control
|
||||||
author = Louis Holbrook
|
author = Louis Holbrook
|
||||||
author_email = dev@holbrook.no
|
author_email = dev@holbrook.no
|
||||||
|
Loading…
Reference in New Issue
Block a user