core (disco): client.disco.requestInfo failure are re-raised:
so far, requestInfo failure where logged as a warning, and an empty disco was returned. This prevented the requesting entity to know about the error, so now the error is logged and re-raised. CancelError are converted to TimeoutError (requestInfo is only cancelled on timeout). An empty disco is still cached in case of failure, to avoid re-waiting for the entity on next request.
This commit is contained in:
parent
c5a17cc9ef
commit
180b4790bf
1 changed files with 10 additions and 6 deletions
|
|
@ -189,21 +189,25 @@ class Discovery(object):
|
|||
def infosEb(fail):
|
||||
if fail.check(defer.CancelledError):
|
||||
reason = u"request time-out"
|
||||
fail = failure.Failure(exceptions.TimeOutError(fail.message))
|
||||
else:
|
||||
try:
|
||||
reason = unicode(fail.value)
|
||||
except AttributeError:
|
||||
reason = unicode(fail)
|
||||
log.warning(
|
||||
u"Error while requesting disco infos from {jid}: {reason}".format(
|
||||
jid=jid_.full(), reason=reason
|
||||
)
|
||||
|
||||
log.warning(
|
||||
u"Error while requesting disco infos from {jid}: {reason}".format(
|
||||
jid=jid_.full(), reason=reason
|
||||
)
|
||||
)
|
||||
|
||||
# XXX we set empty disco in cache, to avoid getting an error or waiting
|
||||
# for a timeout again the next time
|
||||
self.host.memory.updateEntityData(
|
||||
jid_, C.ENTITY_CAP_HASH, CAP_HASH_ERROR, profile_key=client.profile
|
||||
)
|
||||
disco_infos = self.hashes[CAP_HASH_ERROR]
|
||||
return disco_infos
|
||||
raise fail
|
||||
|
||||
d = client.disco.requestInfo(jid_, nodeIdentifier=node)
|
||||
d.addCallback(infosCb)
|
||||
|
|
|
|||
Loading…
Reference in a new issue