improve request cancelling and timeouts during switches
This commit is contained in:
parent
55f5c7491c
commit
b999abb9ea
2 changed files with 12 additions and 0 deletions
|
@ -6,9 +6,11 @@ from twisted.internet import defer, reactor, protocol
|
|||
from twisted.application.internet import ClientService, CancelledError
|
||||
from twisted.internet.endpoints import clientFromString
|
||||
from twisted.protocols.basic import LineOnlyReceiver
|
||||
from twisted.python import failure
|
||||
|
||||
from torba import __version__
|
||||
from torba.stream import StreamController
|
||||
from torba.constants import TIMEOUT
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
@ -69,7 +71,11 @@ class StratumClientProtocol(LineOnlyReceiver):
|
|||
log.warning("Error setting up socket: %s", err)
|
||||
|
||||
def connectionLost(self, reason=None):
|
||||
self.connected = 0
|
||||
self.on_disconnected_controller.add(True)
|
||||
for deferred in self.lookup_table.values():
|
||||
if not deferred.called:
|
||||
deferred.errback(TimeoutError("Connection dropped."))
|
||||
|
||||
def lineReceived(self, line):
|
||||
log.debug('received: %s', line)
|
||||
|
@ -105,6 +111,10 @@ class StratumClientProtocol(LineOnlyReceiver):
|
|||
log.debug('sent: %s', message)
|
||||
self.sendLine(message.encode('latin-1'))
|
||||
d = self.lookup_table[message_id] = defer.Deferred()
|
||||
d.addTimeout(
|
||||
TIMEOUT, reactor, onTimeoutCancel=lambda *_: failure.Failure(TimeoutError(
|
||||
"Timeout: Stratum request for '%s' took more than %s seconds" % (method, TIMEOUT)))
|
||||
)
|
||||
return d
|
||||
|
||||
|
||||
|
|
|
@ -2,3 +2,5 @@ NULL_HASH32 = b'\x00'*32
|
|||
|
||||
CENT = 1000000
|
||||
COIN = 100*CENT
|
||||
|
||||
TIMEOUT = 30.0
|
||||
|
|
Loading…
Reference in a new issue