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
1 changed files with 7 additions and 2 deletions

View File

@ -875,10 +875,15 @@ class PresenceEventSource(object):
updates = [] updates = []
# TODO(paul): use a DeferredList ? How to limit concurrency. # 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] 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 continue
if not (yield self.is_visible(observer_user, observed_user)): if not (yield self.is_visible(observer_user, observed_user)):