0
0
Fork 0
mirror of https://github.com/matrix-org/dendrite synced 2024-06-13 09:58:59 +02:00
dendrite/userapi
Till 5267cc0f54
Optimise getting local members and membership counts (#3150)
The previous version was getting **ALL** membership events (as
`ClientEvents`, so going through `NewEventFromTrustedJSONWithID`) for a
given room.
Now we are querying only locally joined users as `ClientEvents`, which
should **significantly** reduce allocations.

Take for example a large room with 2k membership events, but only 1
local user - avoiding 1999 `NewEventFromTrustedJSONWithID` calls just to
calculate the `roomSize` which we can also query by other means.

This is also getting called for every `OutputRoomEvent` in the userAPI.

Benchmark with 1 local user and 100 remote users.
```
pkg: github.com/matrix-org/dendrite/userapi/consumers
cpu: 12th Gen Intel(R) Core(TM) i5-12500H
                    │   old.txt   │               new.txt               │
                    │   sec/op    │   sec/op     vs base                │
LocalRoomMembers-16   375.9µ ± 7%   327.6µ ± 6%  -12.85% (p=0.000 n=10)

                    │    old.txt    │               new.txt                │
                    │     B/op      │     B/op      vs base                │
LocalRoomMembers-16   79.426Ki ± 0%   8.507Ki ± 0%  -89.29% (p=0.000 n=10)

                    │   old.txt   │              new.txt               │
                    │  allocs/op  │ allocs/op   vs base                │
LocalRoomMembers-16   1015.0 ± 0%   277.0 ± 0%  -72.71% (p=0.000 n=10)
```
2023-07-13 14:19:08 +02:00
..
api feat: admin APIs for token authenticated registration (#3101) 2023-06-22 16:37:21 +00:00
consumers Optimise getting local members and membership counts (#3150) 2023-07-13 14:19:08 +02:00
internal feat: admin APIs for token authenticated registration (#3101) 2023-06-22 16:37:21 +00:00
producers Merge keyserver & userapi (#2972) 2023-02-20 14:58:03 +01:00
storage feat: admin APIs for token authenticated registration (#3101) 2023-06-22 16:37:21 +00:00
types refactor: update GMSL (#3058) 2023-04-19 15:50:33 +01:00
util Cleanup remaining statekey usage for senderIDs (#3106) 2023-06-12 11:19:25 +00:00
userapi.go Remove BaseDendrite (#3023) 2023-03-22 09:21:32 +01:00
userapi_test.go refactor: update GMSL (#3058) 2023-04-19 15:50:33 +01:00