Use the presence cachemap ordering to early-abort the iteration loop

This commit is contained in:
Paul "LeoNerd" Evans 2015-05-07 22:40:10 +01:00
parent f683b5de47
commit 45543028bb

View file

@ -875,10 +875,15 @@ class PresenceEventSource(object):
updates = []
# TODO(paul): use a DeferredList ? How to limit concurrency.
for observed_user in cachemap.keys():
for observed_user in reversed(cachemap.keys()):
cached = cachemap[observed_user]
if cached.serial <= from_key or cached.serial > max_serial:
# Since this is ordered in descending order of serial, we can just
# stop once we've seen enough
if cached.serial <= from_key:
break
if cached.serial > max_serial:
continue
if not (yield self.is_visible(observer_user, observed_user)):