Skip to content

Synapse does not correctly send device-list-un-tracked indications in /sync responses when lazy-loading is enabled #16948

@richvdh

Description

@richvdh
  • Alice is in a room, and uses lazy-loading of memberships
  • Charlie joins the room. Alice sees the join event in her sync, together with a device_lists update:
    {
      "next_batch":"s7_2_0_1_1_1_1_4_0_1",
      "device_lists":{"changed":["@user-3-charlie:hs1"]},
      "rooms":{"join":{"!RcwoXhPrnmxBAlwqGb:hs1":{
        "timeline":{
          "events":[
            {"type":"m.room.member","sender":"@user-3-charlie:hs1","content":{"membership":"join","displayname":"user-3-charlie"},"state_key":"@user-3-charlie:hs1","origin_server_ts":1708524078957,"unsigned":{"age":22},"event_id":"$qq0CJ2AtNKVNGaYZkRiNpnirejAH8zvkWZ2DQh_ftBc"}
          ],
          "prev_batch":"s6_2_0_1_1_1_1_4_0_1",
          "limited":false
        },
        "state":{"events":[]}
      }}}
    }
  • Charlie sends a message, and then leaves the room. Alice syncs again. The server returns both of Charlie's events, and another device_lists update:
    {
      "next_batch":"s9_4_0_1_1_1_1_4_0_1",
      "device_lists":{"left":["@user-3-charlie:hs1"]},
      "rooms":{"join":{"!RcwoXhPrnmxBAlwqGb:hs1":{
        "timeline":{
          "events":[
            {"type":"m.room.message","sender":"@user-3-charlie:hs1","content":{"body":"test0","msgtype":"m.text"},"origin_server_ts":1708524078982,"unsigned":{"age":56},"event_id":"$mxxcBMt7WBKGVC84XMerO1O5Kd1GOoATGaChzHhCOqY"},
            {"type":"m.room.member","sender":"@user-3-charlie:hs1","content":{"membership":"leave"},"state_key":"@user-3-charlie:hs1","origin_server_ts":1708524079008,"unsigned":{"replaces_state":"$qq0CJ2AtNKVNGaYZkRiNpnirejAH8zvkWZ2DQh_ftBc","prev_content":{"membership":"join","displayname":"user-3-charlie"},"prev_sender":"@user-3-charlie:hs1","age":30},"event_id":"$1vNTMX633F6JSBoZCb981mGIBE0QTyJ4C4bnAtYt0Jc"}
          ],
          "prev_batch":"s7_4_0_1_1_1_1_4_0_1",
          "limited":false
        },
        "state":{"events":[]}
      }}}
    }
  • So far so good. However, the sync response gets dropped, and Alice syncs again using the same sync token. Charlie's join event is now (redundantly) included in the state section of the response, but more worryingly, Charlie is now listed under "changed" rather than "left" in the device lists section:
    {
      "next_batch":"s9_4_0_1_1_1_1_4_0_1",
      "device_lists":{"changed":["@user-3-charlie:hs1"]},
      "rooms":{"join":{"!RcwoXhPrnmxBAlwqGb:hs1":{
        "timeline":{
          "events":[
            {"type":"m.room.message","sender":"@user-3-charlie:hs1","content":{"body":"test0","msgtype":"m.text"},"origin_server_ts":1708524078982,"unsigned":{"age":64},"event_id":"$mxxcBMt7WBKGVC84XMerO1O5Kd1GOoATGaChzHhCOqY"},
            {"type":"m.room.member","sender":"@user-3-charlie:hs1","content":{"membership":"leave"},"state_key":"@user-3-charlie:hs1","origin_server_ts":1708524079008,"unsigned":{"replaces_state":"$qq0CJ2AtNKVNGaYZkRiNpnirejAH8zvkWZ2DQh_ftBc","prev_content":{"membership":"join","displayname":"user-3-charlie"},"prev_sender":"@user-3-charlie:hs1","age":38},"event_id":"$1vNTMX633F6JSBoZCb981mGIBE0QTyJ4C4bnAtYt0Jc"}
          ],
          "prev_batch":"s7_4_0_1_1_1_1_4_0_1",
          "limited":false
        },
        "state":{"events":[
          {"type":"m.room.member","sender":"@user-3-charlie:hs1","content":{"membership":"join","displayname":"user-3-charlie"},"state_key":"@user-3-charlie:hs1","origin_server_ts":1708524078957,"unsigned":{"age":89},"event_id":"$qq0CJ2AtNKVNGaYZkRiNpnirejAH8zvkWZ2DQh_ftBc"}
        ]}
      }}}
    }

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions