13 Commits

Author SHA1 Message Date
Kegan Dougal
37aa1469a5 WIP: use complement libraries 2023-10-11 12:23:46 +01:00
David Robertson
1c12414dd9
Describe the failure mode 2023-06-05 11:26:47 +01:00
David Robertson
5b078cd627
Reproduce panic 2023-05-26 15:11:59 +01:00
Kegan Dougal
ac8459e7b2 bugfix: ensure space rooms are filtered out in invite lists
Previously, if you were invited to a space and had a list with
filters set to ignore invites for spaces, it didn't work. Now
it does.

Root cause: this code was landed prior to spec changes which added
m.room.create to stripped state, which has the room type.
2023-04-28 10:36:39 +01:00
David Robertson
2006e4e5fa
More e2e test fixes 2023-04-05 01:07:07 +01:00
Kegan Dougal
ca6ceb28da BREAKING: Change the API to refer to lists by keys not index positions
This provides more flexibility to refer to lists as well as delete them.
2022-12-20 13:32:39 +00: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
dcad80f51f bugfix: send correct deltas for deletions at the front of windows
Previously we wouldn't send deletions for this, even though they shift
all elements to the left. Add a battery of unit tests for the list delta
algorithm, and standardise on the practice of issuing a DELETE prior to
an INSERT for newly inserted rooms, regardless of where in the window
they appear. Previously, we may skip the DELETE at the end of the list,
which was just inconsistent of us.
2022-08-31 17:54:07 +01:00
Kegan Dougal
a314b29b58 Add test for space filter changes correctly invalidating/syncing new rooms 2022-08-02 15:20:23 +01:00
Kegan Dougal
0c52fac9a6 bugfix: when space children are modified, notify both the parent and child
Previously we would only notify the parent (in the case of m.space.child events)
which would cause lists tracking a space to not be aware of the change in
membership.
2022-08-02 15:11:15 +01:00
Kegan Dougal
6ac58d0e0e Add security tests for spaces filters
Because the spaces filter is user controlled, malicious users can
insert room IDs they are not joined to or should not be aware of.
We need to check that this does not leak any data or metadata.
2022-07-29 16:22:26 +01:00
Kegan Dougal
7ac03c46ca Add end-to-end spaces test; tweak e2e script; fix embarrassing negation bug
- Tests exercise multiple pre-configured spaces as well as adding/removing children on the fly.
- E2E run-tests.sh script now uses `$@` to pass through args to `go test` for running e2e tests with timeouts/single tests/etc
- Spaces are deleted when there is no valid `via` key, not when there is(!)
2022-07-29 16:04:12 +01:00