16 Commits

Author SHA1 Message Date
Kegan Dougal
37aa1469a5 WIP: use complement libraries 2023-10-11 12:23:46 +01:00
David Robertson
57d8c1deba
Expose Domain on CSAPI 2023-09-11 20:16:12 +01:00
Kegan Dougal
9209c61691 bugfix: set unsigned.redacted_because field on redaction
Element X relies on this field being set.
2023-09-07 10:16:00 +01:00
Kegan Dougal
d5ee6d13b3 Add failing test for dupe account data 2023-08-02 10:30:29 +01:00
Kegan Dougal
f22ef91da6 bugfix: distinguish between a 0 invited_count and a missing invited_count 2023-07-07 15:16:59 +01:00
David Robertson
039a1621ad
Debugging aids 2023-05-24 19:26:28 +01:00
Kegan Dougal
995ef5f8b1 bugfix: always lazy load typing notif members
Previously we would _only_ do this when live streaming, and not
for initially loaded rooms. This just seems to be an oversight
when this feature was landed. We now defer lazy loading members
until after the response has been fully calculated.

We also need to add a distinction between "strict" matching
on `required_state` and not, as the tests only care about the
LL typing member, but we can also see LL _timeline_ members, which
then sometimes flake the test. Since we don't care about the LL
timeline member, just use a looser check.
2023-05-23 17:29:14 +01:00
David Robertson
00dd396359
Fix MatchRoomTimelineMostRecent
Suppose I build `MatchRoomTimelineMostRecent(1, []Event{C})`.
this matcher was given a list `[A, B, C]` of three events.
The matcher should allow that, but before this patch it wouldn't.
I don't think this is the intention?
2023-04-19 15:42:39 +01:00
Kegan Dougal
aa28df161c Rename package -> github.com/matrix-org/sliding-sync 2022-12-15 11:08:50 +00:00
Kegan Dougal
be8543a21a add extensions for typing and receipts; bugfixes and additional perf improvements
Features:
 - Add `typing` extension.
 - Add `receipts` extension.
 - Add comprehensive prometheus `/metrics` activated via `SYNCV3_PROM`.
 - Add `SYNCV3_PPROF` support.
 - Add `by_notification_level` sort order.
 - Add `include_old_rooms` support.
 - Add support for `$ME` and `$LAZY`.
 - Add correct filtering when `*,*` is used as `required_state`.
 - Add `num_live` to each room response to indicate how many timeline entries are live.

Bug fixes:
 - Use a stricter comparison function on ranges: fixes an issue whereby UTs fail on go1.19 due to change in sorting algorithm.
 - Send back an `errcode` on HTTP errors (e.g expired sessions).
 - Remove `unsigned.txn_id` on insertion into the DB. Otherwise other users would see other users txn IDs :(
 - Improve range delta algorithm: previously it didn't handle cases like `[0,20] -> [20,30]` and would panic.
 - Send HTTP 400 for invalid range requests.
 - Don't publish no-op unread counts which just adds extra noise.
 - Fix leaking DB connections which could eventually consume all available connections.
 - Ensure we always unblock WaitUntilInitialSync even on invalid access tokens. Other code relies on WaitUntilInitialSync() actually returning at _some_ point e.g on startup we have N workers which bound the number of concurrent pollers made at any one time, we need to not just hog a worker forever.

Improvements:
 - Greatly improve startup times of sync3 handlers by improving `JoinedRoomsTracker`: a modest amount of data would take ~28s to create the handler, now it takes 4s.
 - Massively improve initial initial v3 sync times, by refactoring `JoinedRoomsTracker`, from ~47s to <1s.
 - Add `SlidingSyncUntil...` in tests to reduce races.
 - Tweak the API shape of JoinedUsersForRoom to reduce state block processing time for large rooms from 63s to 39s.
 - Add trace task for initial syncs.
 - Include the proxy version in UA strings.
 - HTTP errors now wait 1s before returning to stop clients tight-looping on error.
 - Pending event buffer is now 2000.
 - Index the room ID first to cull the most events when returning timeline entries. Speeds up `SelectLatestEventsBetween` by a factor of 8.
 - Remove cancelled `m.room_key_requests` from the to-device inbox. Cuts down the amount of events in the inbox by ~94% for very large (20k+) inboxes, ~50% for moderate sized (200 events) inboxes. Adds book-keeping to remember the unacked to-device position for each client.
2022-12-14 18:53:55 +00:00
Kegan Dougal
55ed63ef97 Assert that the new room has a predecessor set 2022-09-08 15:15:42 +01:00
Kegan Dougal
8af8f7413e bugfix: ensure live-streamed invites include an invite_state
With regression tests. Comments explain the edge case, but basically
previously we were not calling `builder.AddRoomsToSubscription` with
the new room because we didn't know it was brand new, as it had a
valid swap operation. It only had a valid swap op because we "inserted"
(read: pretended) that the room has always been there at `len(list)`
so the from index was outside the known range. This works great most
of the time, but failed in the case where you use a large window size
e.g `[[0,20]]` for 3 rooms, then the 4th room is still "inside the range"
and hence is merely an update, not a brand new room, so we wouldn't add
the room to the builder.

Fixed by decoupling adding rooms to the builder and expecting swap/insert
ops; they aren't mutually exclusive.
2022-08-15 18:40:43 +01:00
Kegan Dougal
a40441e963 Migrate lists_test to end-to-end tests
Add more helper functions like `WithPos` and `MatchTimeline`.
2022-07-26 17:54:58 +01:00
Kegan Dougal
86570aaff4 Migrate membership transitions test to e2e tests; add README 2022-07-26 12:24:05 +01:00
Kegan Dougal
7133ee0c51 Migrate security tests to e2e tests 2022-07-26 11:39:19 +01:00
Kegan Dougal
1e8ca38f79 e2e tests: add prev_batch tests
Uses a client theived from Complement since it does exactly what I want.
2022-07-25 17:51:26 +01:00