1
0

Compare commits

...

6 Commits

Author SHA1 Message Date
Erik Johnston
b6b8e2dcbf Also cache user_id -> UserID conversion 2015-06-01 14:59:53 +01:00
Erik Johnston
072a1467f2 Only log when we spend time in there 2015-06-01 14:27:41 +01:00
Erik Johnston
1b0c857a6e Hook into more things 2015-06-01 14:08:10 +01:00
Erik Johnston
a9de1ee4c4 Make class variable 2015-06-01 14:06:59 +01:00
Erik Johnston
06d1ec5dbc Err, don't use global 2015-06-01 14:03:29 +01:00
Erik Johnston
878f5b0cf7 Time get_room_members 2015-06-01 13:56:53 +01:00
4 changed files with 34 additions and 4 deletions

View File

@@ -520,6 +520,28 @@ class SynapseSite(Site):
def run(hs):
def prof(f):
import synapse.handlers.room
from synapse.handlers.room import RoomMemberHandler
import time
def g(*args, **kwargs):
RoomMemberHandler.total_time = 0
start = int(time.time()*1000)
f(*args, **kwargs)
end = int(time.time()*1000)
if RoomMemberHandler.total_time > 0.001:
logger.info(
"Total time in get_room_members: %s %d ms / %d ms",
f.__name__,
int(RoomMemberHandler.total_time*1000),
end - start
)
return g
reactor.runUntilCurrent = prof(reactor.runUntilCurrent)
reactor.doIteration = prof(reactor.doIteration)
PROFILE_SYNAPSE = False
if PROFILE_SYNAPSE:
def profile(func):

View File

@@ -236,6 +236,7 @@ class RoomCreationHandler(BaseHandler):
join_rules_event,
]
import time
class RoomMemberHandler(BaseHandler):
# TODO(paul): This handler currently contains a messy conflation of
@@ -243,6 +244,8 @@ class RoomMemberHandler(BaseHandler):
# API that takes ID strings and returns pagination chunks. These concerns
# ought to be separated out a lot better.
total_time = 0
def __init__(self, hs):
super(RoomMemberHandler, self).__init__(hs)
@@ -252,11 +255,8 @@ class RoomMemberHandler(BaseHandler):
self.distributor.declare("user_joined_room")
self.distributor.declare("user_left_room")
@defer.inlineCallbacks
def get_room_members(self, room_id):
users = yield self.store.get_users_in_room(room_id)
defer.returnValue([UserID.from_string(u) for u in users])
return self.store.get_user_objs_in_room(room_id)
@defer.inlineCallbacks
def fetch_room_distributions_into(self, room_id, localusers=None,

View File

@@ -128,6 +128,7 @@ class EventsStore(SQLBaseStore):
txn.call_after(self.get_current_state_for_key.invalidate_all)
txn.call_after(self.get_rooms_for_user.invalidate_all)
txn.call_after(self.get_users_in_room.invalidate, event.room_id)
txn.call_after(self.get_user_objs_in_room.invalidate, event.room_id)
txn.call_after(self.get_joined_hosts_for_room.invalidate, event.room_id)
txn.call_after(self.get_room_name_and_aliases, event.room_id)

View File

@@ -67,6 +67,7 @@ class RoomMemberStore(SQLBaseStore):
txn.call_after(self.get_rooms_for_user.invalidate, target_user_id)
txn.call_after(self.get_joined_hosts_for_room.invalidate, event.room_id)
txn.call_after(self.get_users_in_room.invalidate, event.room_id)
txn.call_after(self.get_user_objs_in_room.invalidate, event.room_id)
def get_room_member(self, user_id, room_id):
"""Retrieve the current state of a room member.
@@ -101,6 +102,12 @@ class RoomMemberStore(SQLBaseStore):
return [r["user_id"] for r in rows]
return self.runInteraction("get_users_in_room", f)
@cached()
def get_user_objs_in_room(self, room_id):
return self.get_users_in_room(room_id).addCallback(
lambda users: [UserID.from_string(u) for u in users]
)
def get_room_members(self, room_id, membership=None):
"""Retrieve the current room member list for a room.