synapse icon indicating copy to clipboard operation
synapse copied to clipboard

Faster room joins: `device_lists.left` not emitted in `/sync` response when completing the join and discovering that a user is actually not in the room

Open squahtx opened this issue 2 years ago • 2 comments

See the commented out check in the TestPartialStateJoin/Device_list_tracking/Device_list_no_longer_tracked_for_user_incorrectly_believed_to_be_in_room complement test.

That test case is roughly:

  1. A room starts with @charlie:remote, @derek:remote (moderator) and @fred:remote (admin)
  2. @fred:remote leaves the room.
  3. @alice:local partial state joins the room.
  4. @elsie:remote joins the room.
  5. @fred:remote "bans" @derek:remote, citing their join event as auth. The local homeserver does not know that @fred:remote is no longer in the room and accepts the event.
  6. @derek:remote kicks @elsie:remote. The local homeserver incorrectly rejects the kick because it thinks @derek:remote has been banned.
  7. The partial state join completes and @elsie:remote is discovered to really have been kicked.
  8. No device_lists.left entry is emitted.

squahtx avatar Sep 23 '22 12:09 squahtx

This bug likely also applies to /keys/changes both ways (missing changed when discovering a user is actually in a room and missing left when a user is actually not in a room). We only have a complement test for the missing left scenario.

squahtx avatar Sep 23 '22 16:09 squahtx

This is likely already an issue if the user is state-reset out.

See also #13650

richvdh avatar Oct 04 '22 13:10 richvdh

I think https://github.com/matrix-org/synapse/actions/runs/3369422572/jobs/5589123694 hit this problem(?)

DMRobertson avatar Nov 01 '22 15:11 DMRobertson