mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2024-12-26 08:29:24 -05:00
Merge branch 'develop' of github.com:matrix-org/synapse into mysql
This commit is contained in:
commit
3887350e47
@ -349,7 +349,7 @@ and port where the server is running. (At the current time synapse does not
|
|||||||
support clustering multiple servers into a single logical homeserver). The DNS
|
support clustering multiple servers into a single logical homeserver). The DNS
|
||||||
record would then look something like::
|
record would then look something like::
|
||||||
|
|
||||||
$ dig -t srv _matrix._tcp.machine.my.domaine.name
|
$ dig -t srv _matrix._tcp.machine.my.domain.name
|
||||||
_matrix._tcp IN SRV 10 0 8448 machine.my.domain.name.
|
_matrix._tcp IN SRV 10 0 8448 machine.my.domain.name.
|
||||||
|
|
||||||
|
|
||||||
|
@ -62,7 +62,8 @@ class _NotificationListener(object):
|
|||||||
|
|
||||||
self.rooms = rooms
|
self.rooms = rooms
|
||||||
|
|
||||||
self.pending_notifications = []
|
def notified(self):
|
||||||
|
return self.deferred.called
|
||||||
|
|
||||||
def notify(self, notifier, events, start_token, end_token):
|
def notify(self, notifier, events, start_token, end_token):
|
||||||
""" Inform whoever is listening about the new events. This will
|
""" Inform whoever is listening about the new events. This will
|
||||||
@ -78,11 +79,15 @@ class _NotificationListener(object):
|
|||||||
except defer.AlreadyCalledError:
|
except defer.AlreadyCalledError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
# Should the following be done be using intrusively linked lists?
|
||||||
|
# -- erikj
|
||||||
|
|
||||||
for room in self.rooms:
|
for room in self.rooms:
|
||||||
lst = notifier.room_to_listeners.get(room, set())
|
lst = notifier.room_to_listeners.get(room, set())
|
||||||
lst.discard(self)
|
lst.discard(self)
|
||||||
|
|
||||||
notifier.user_to_listeners.get(self.user, set()).discard(self)
|
notifier.user_to_listeners.get(self.user, set()).discard(self)
|
||||||
|
|
||||||
if self.appservice:
|
if self.appservice:
|
||||||
notifier.appservice_to_listeners.get(
|
notifier.appservice_to_listeners.get(
|
||||||
self.appservice, set()
|
self.appservice, set()
|
||||||
@ -161,10 +166,18 @@ class Notifier(object):
|
|||||||
|
|
||||||
room_source = self.event_sources.sources["room"]
|
room_source = self.event_sources.sources["room"]
|
||||||
|
|
||||||
listeners = self.room_to_listeners.get(room_id, set()).copy()
|
room_listeners = self.room_to_listeners.get(room_id, set())
|
||||||
|
|
||||||
|
_discard_if_notified(room_listeners)
|
||||||
|
|
||||||
|
listeners = room_listeners.copy()
|
||||||
|
|
||||||
for user in extra_users:
|
for user in extra_users:
|
||||||
listeners |= self.user_to_listeners.get(user, set()).copy()
|
user_listeners = self.user_to_listeners.get(user, set())
|
||||||
|
|
||||||
|
_discard_if_notified(user_listeners)
|
||||||
|
|
||||||
|
listeners |= user_listeners
|
||||||
|
|
||||||
for appservice in self.appservice_to_listeners:
|
for appservice in self.appservice_to_listeners:
|
||||||
# TODO (kegan): Redundant appservice listener checks?
|
# TODO (kegan): Redundant appservice listener checks?
|
||||||
@ -173,9 +186,13 @@ class Notifier(object):
|
|||||||
# receive *invites* for users they are interested in. Does this
|
# receive *invites* for users they are interested in. Does this
|
||||||
# make the room_to_listeners check somewhat obselete?
|
# make the room_to_listeners check somewhat obselete?
|
||||||
if appservice.is_interested(event):
|
if appservice.is_interested(event):
|
||||||
listeners |= self.appservice_to_listeners.get(
|
app_listeners = self.appservice_to_listeners.get(
|
||||||
appservice, set()
|
appservice, set()
|
||||||
).copy()
|
)
|
||||||
|
|
||||||
|
_discard_if_notified(app_listeners)
|
||||||
|
|
||||||
|
listeners |= app_listeners
|
||||||
|
|
||||||
logger.debug("on_new_room_event listeners %s", listeners)
|
logger.debug("on_new_room_event listeners %s", listeners)
|
||||||
|
|
||||||
@ -226,10 +243,18 @@ class Notifier(object):
|
|||||||
listeners = set()
|
listeners = set()
|
||||||
|
|
||||||
for user in users:
|
for user in users:
|
||||||
listeners |= self.user_to_listeners.get(user, set()).copy()
|
user_listeners = self.user_to_listeners.get(user, set())
|
||||||
|
|
||||||
|
_discard_if_notified(user_listeners)
|
||||||
|
|
||||||
|
listeners |= user_listeners
|
||||||
|
|
||||||
for room in rooms:
|
for room in rooms:
|
||||||
listeners |= self.room_to_listeners.get(room, set()).copy()
|
room_listeners = self.room_to_listeners.get(room, set())
|
||||||
|
|
||||||
|
_discard_if_notified(room_listeners)
|
||||||
|
|
||||||
|
listeners |= room_listeners
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def notify(listener):
|
def notify(listener):
|
||||||
@ -427,3 +452,17 @@ class Notifier(object):
|
|||||||
|
|
||||||
listeners = self.room_to_listeners.setdefault(room_id, set())
|
listeners = self.room_to_listeners.setdefault(room_id, set())
|
||||||
listeners |= new_listeners
|
listeners |= new_listeners
|
||||||
|
|
||||||
|
for l in new_listeners:
|
||||||
|
l.rooms.add(room_id)
|
||||||
|
|
||||||
|
|
||||||
|
def _discard_if_notified(listener_set):
|
||||||
|
"""Remove any 'stale' listeners from the given set.
|
||||||
|
"""
|
||||||
|
to_discard = set()
|
||||||
|
for l in listener_set:
|
||||||
|
if l.notified():
|
||||||
|
to_discard.add(l)
|
||||||
|
|
||||||
|
listener_set -= to_discard
|
||||||
|
@ -36,6 +36,7 @@ logger = logging.getLogger(__name__)
|
|||||||
|
|
||||||
sql_logger = logging.getLogger("synapse.storage.SQL")
|
sql_logger = logging.getLogger("synapse.storage.SQL")
|
||||||
transaction_logger = logging.getLogger("synapse.storage.txn")
|
transaction_logger = logging.getLogger("synapse.storage.txn")
|
||||||
|
perf_logger = logging.getLogger("synapse.storage.TIME")
|
||||||
|
|
||||||
|
|
||||||
metrics = synapse.metrics.get_metrics_for("synapse.storage")
|
metrics = synapse.metrics.get_metrics_for("synapse.storage")
|
||||||
@ -323,7 +324,7 @@ class SQLBaseStore(object):
|
|||||||
time_now - time_then, limit=3
|
time_now - time_then, limit=3
|
||||||
)
|
)
|
||||||
|
|
||||||
logger.info(
|
perf_logger.info(
|
||||||
"Total database time: %.3f%% {%s} {%s}",
|
"Total database time: %.3f%% {%s} {%s}",
|
||||||
ratio * 100, top_three_counters, top_3_event_counters
|
ratio * 100, top_three_counters, top_3_event_counters
|
||||||
)
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user