diff options
author | Erik Johnston <erik@matrix.org> | 2022-02-11 13:38:05 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-02-11 13:38:05 +0000 |
commit | 79fb64e417686c91eeb64016e91dffeac9115a80 (patch) | |
tree | 47da409576556e9d8683ad55a8bd962da7e069ab /synapse | |
parent | fix import cycle (#11965) (diff) | |
download | synapse-79fb64e417686c91eeb64016e91dffeac9115a80.tar.xz |
Fix to-device being dropped in limited sync in SQLite. (#11966)
If ther are more than 100 to-device messages pending for a device `/sync` will only return the first 100, however the next batch token was incorrectly calculated and so all other pending messages would be dropped. This is due to `txn.rowcount` only returning the number of rows that *changed*, rather than the number *selected* in SQLite.
Diffstat (limited to 'synapse')
-rw-r--r-- | synapse/storage/databases/main/deviceinbox.py | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/synapse/storage/databases/main/deviceinbox.py b/synapse/storage/databases/main/deviceinbox.py index 8801b7b2dd..1392363de1 100644 --- a/synapse/storage/databases/main/deviceinbox.py +++ b/synapse/storage/databases/main/deviceinbox.py @@ -362,7 +362,10 @@ class DeviceInboxWorkerStore(SQLBaseStore): # intended for each device. last_processed_stream_pos = to_stream_id recipient_device_to_messages: Dict[Tuple[str, str], List[JsonDict]] = {} + rowcount = 0 for row in txn: + rowcount += 1 + last_processed_stream_pos = row[0] recipient_user_id = row[1] recipient_device_id = row[2] @@ -373,7 +376,7 @@ class DeviceInboxWorkerStore(SQLBaseStore): (recipient_user_id, recipient_device_id), [] ).append(message_dict) - if limit is not None and txn.rowcount == limit: + if limit is not None and rowcount == limit: # We ended up bumping up against the message limit. There may be more messages # to retrieve. Return what we have, as well as the last stream position that # was processed. |