Reduce the number of allocations made by `localRoomMembers` when consuming stream events for push notifications
MODIFY
roomserver/api/query.go
roomserver/api/query.go
@@ -128,6 +128,8 @@ type QueryMembershipForUserResponse struct {
type QueryMembershipsForRoomRequest struct {
// If true, only returns the membership events of "join" membership
JoinedOnly bool `json:"joined_only"`
+ // If true, only returns the membership events of local users
+ LocalOnly bool `json:"local_only"`
// ID of the room to fetch memberships from
RoomID string `json:"room_id"`
// Optional - ID of the user sending the request, for checking if the

MODIFY
roomserver/internal/query/query.go
roomserver/internal/query/query.go
@@ -220,7 +220,7 @@ func (r *Queryer) QueryMembershipsForRoom(
if request.Sender == "" {
var events []types.Event
var eventNIDs []types.EventNID
- eventNIDs, err = r.DB.GetMembershipEventNIDsForRoom(ctx, info.RoomNID, request.JoinedOnly, false)
+ eventNIDs, err = r.DB.GetMembershipEventNIDsForRoom(ctx, info.RoomNID, request.JoinedOnly, request.LocalOnly)
if err != nil {
return fmt.Errorf("r.DB.GetMembershipEventNIDsForRoom: %w", err)
}

MODIFY
userapi/consumers/syncapi_streamevent.go
userapi/consumers/syncapi_streamevent.go
@@ -184,6 +184,7 @@ func (s *OutputStreamEventConsumer) localRoomMembers(ctx context.Context, roomID
req := &rsapi.QueryMembershipsForRoomRequest{
RoomID: roomID,
JoinedOnly: true,
+ LocalOnly: true,
}
var res rsapi.QueryMembershipsForRoomResponse

Reduce the number of allocations made by `localRoomMembers` when consuming stream events for push notifications (#2324)