-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Fix overcounting of pushers when they are replaced #13296
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
Fix a bug introduced in v1.18.0 where the `synapse_pushers` metric would overcount pushers when they are replaced. |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -328,7 +328,7 @@ async def _start_pusher(self, pusher_config: PusherConfig) -> Optional[Pusher]: | |
return None | ||
|
||
try: | ||
p = self.pusher_factory.create_pusher(pusher_config) | ||
pusher = self.pusher_factory.create_pusher(pusher_config) | ||
except PusherConfigException as e: | ||
logger.warning( | ||
"Pusher incorrectly configured id=%i, user=%s, appid=%s, pushkey=%s: %s", | ||
|
@@ -346,23 +346,28 @@ async def _start_pusher(self, pusher_config: PusherConfig) -> Optional[Pusher]: | |
) | ||
return None | ||
|
||
if not p: | ||
if not pusher: | ||
return None | ||
|
||
appid_pushkey = "%s:%s" % (pusher_config.app_id, pusher_config.pushkey) | ||
appid_pushkey = "%s:%s" % (pusher.app_id, pusher.pushkey) | ||
|
||
byuser = self.pushers.setdefault(pusher_config.user_name, {}) | ||
byuser = self.pushers.setdefault(pusher.user_id, {}) | ||
if appid_pushkey in byuser: | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Would it be clearer to use There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Turns out that There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Huh, I wonder why |
||
byuser[appid_pushkey].on_stop() | ||
byuser[appid_pushkey] = p | ||
previous_pusher = byuser[appid_pushkey] | ||
previous_pusher.on_stop() | ||
|
||
synapse_pushers.labels(type(p).__name__, p.app_id).inc() | ||
synapse_pushers.labels( | ||
type(previous_pusher).__name__, previous_pusher.app_id | ||
).dec() | ||
Comment on lines
+359
to
+361
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Do the decrementing than incrementing cancel or can the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. They ought to cancel most of the time - the However, I can't convince myself that they always cancel. I'm not sure that |
||
byuser[appid_pushkey] = pusher | ||
|
||
synapse_pushers.labels(type(pusher).__name__, pusher.app_id).inc() | ||
|
||
# Check if there *may* be push to process. We do this as this check is a | ||
# lot cheaper to do than actually fetching the exact rows we need to | ||
# push. | ||
user_id = pusher_config.user_name | ||
last_stream_ordering = pusher_config.last_stream_ordering | ||
user_id = pusher.user_id | ||
last_stream_ordering = pusher.last_stream_ordering | ||
if last_stream_ordering: | ||
have_notifs = await self.store.get_if_maybe_push_in_range_for_user( | ||
user_id, last_stream_ordering | ||
|
@@ -372,9 +377,9 @@ async def _start_pusher(self, pusher_config: PusherConfig) -> Optional[Pusher]: | |
# risk missing push. | ||
have_notifs = True | ||
|
||
p.on_started(have_notifs) | ||
pusher.on_started(have_notifs) | ||
|
||
return p | ||
return pusher | ||
|
||
async def remove_pusher(self, app_id: str, pushkey: str, user_id: str) -> None: | ||
appid_pushkey = "%s:%s" % (app_id, pushkey) | ||
|
Uh oh!
There was an error while loading. Please reload this page.