Parrellize fetching of events

This commit is contained in:
Erik Johnston 2015-02-12 18:35:36 +00:00
parent 963256638d
commit 58d848adc0

View File

@ -50,8 +50,11 @@ class FederationBase(object):
Returns: Returns:
Deferred : A list of PDUs that have valid signatures and hashes. Deferred : A list of PDUs that have valid signatures and hashes.
""" """
signed_pdus = [] signed_pdus = []
for pdu in pdus:
@defer.inlineCallbacks
def do(pdu):
try: try:
new_pdu = yield self._check_sigs_and_hash(pdu) new_pdu = yield self._check_sigs_and_hash(pdu)
signed_pdus.append(new_pdu) signed_pdus.append(new_pdu)
@ -66,7 +69,7 @@ class FederationBase(object):
) )
if new_pdu: if new_pdu:
signed_pdus.append(new_pdu) signed_pdus.append(new_pdu)
continue return
# Check pdu.origin # Check pdu.origin
if pdu.origin != origin: if pdu.origin != origin:
@ -79,12 +82,17 @@ class FederationBase(object):
if new_pdu: if new_pdu:
signed_pdus.append(new_pdu) signed_pdus.append(new_pdu)
continue return
except: except:
pass pass
logger.warn("Failed to find copy of %s with valid signature") logger.warn("Failed to find copy of %s with valid signature")
yield defer.gatherResults(
[do(pdu) for pdu in pdus],
consumeErrors=True
)
defer.returnValue(signed_pdus) defer.returnValue(signed_pdus)
@defer.inlineCallbacks @defer.inlineCallbacks