Query rooms with ACLs instead of all rooms (#3338)
This now should actually speed up startup times. This is because _many_ rooms (like DMs) don't have room ACLs, this means that we had around 95% pointless DB queries. (as queried on d.m.org)
This commit is contained in:
parent
09f15a3d3f
commit
928c8c8c4a
14 changed files with 171 additions and 61 deletions
|
|
@ -2,6 +2,7 @@ package tables_test
|
|||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"github.com/matrix-org/dendrite/internal/sqlutil"
|
||||
|
|
@ -147,3 +148,38 @@ func Test_EventsTable(t *testing.T) {
|
|||
assert.Equal(t, int64(len(room.Events())+1), maxDepth)
|
||||
})
|
||||
}
|
||||
|
||||
func TestRoomsWithACL(t *testing.T) {
|
||||
|
||||
test.WithAllDatabases(t, func(t *testing.T, dbType test.DBType) {
|
||||
eventStateKeys, closeEventStateKeys := mustCreateEventTypesTable(t, dbType)
|
||||
defer closeEventStateKeys()
|
||||
|
||||
eventsTable, closeEventsTable := mustCreateEventsTable(t, dbType)
|
||||
defer closeEventsTable()
|
||||
|
||||
ctx := context.Background()
|
||||
|
||||
// insert the m.room.server_acl event type
|
||||
eventTypeNID, err := eventStateKeys.InsertEventTypeNID(ctx, nil, "m.room.server_acl")
|
||||
assert.Nil(t, err)
|
||||
|
||||
// Create ACL'd rooms
|
||||
var wantRoomNIDs []types.RoomNID
|
||||
for i := 0; i < 10; i++ {
|
||||
_, _, err = eventsTable.InsertEvent(ctx, nil, types.RoomNID(i), eventTypeNID, types.EmptyStateKeyNID, fmt.Sprintf("$1337+%d", i), nil, 0, false)
|
||||
assert.Nil(t, err)
|
||||
wantRoomNIDs = append(wantRoomNIDs, types.RoomNID(i))
|
||||
}
|
||||
|
||||
// Create non-ACL'd rooms (eventTypeNID+1)
|
||||
for i := 10; i < 20; i++ {
|
||||
_, _, err = eventsTable.InsertEvent(ctx, nil, types.RoomNID(i), eventTypeNID+1, types.EmptyStateKeyNID, fmt.Sprintf("$1337+%d", i), nil, 0, false)
|
||||
assert.Nil(t, err)
|
||||
}
|
||||
|
||||
gotRoomNIDs, err := eventsTable.SelectRoomsWithEventTypeNID(ctx, nil, eventTypeNID)
|
||||
assert.Nil(t, err)
|
||||
assert.Equal(t, wantRoomNIDs, gotRoomNIDs)
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -69,6 +69,8 @@ type Events interface {
|
|||
SelectMaxEventDepth(ctx context.Context, txn *sql.Tx, eventNIDs []types.EventNID) (int64, error)
|
||||
SelectRoomNIDsForEventNIDs(ctx context.Context, txn *sql.Tx, eventNIDs []types.EventNID) (roomNIDs map[types.EventNID]types.RoomNID, err error)
|
||||
SelectEventRejected(ctx context.Context, txn *sql.Tx, roomNID types.RoomNID, eventID string) (rejected bool, err error)
|
||||
|
||||
SelectRoomsWithEventTypeNID(ctx context.Context, txn *sql.Tx, eventTypeNID types.EventTypeNID) ([]types.RoomNID, error)
|
||||
}
|
||||
|
||||
type Rooms interface {
|
||||
|
|
@ -80,7 +82,6 @@ type Rooms interface {
|
|||
UpdateLatestEventNIDs(ctx context.Context, txn *sql.Tx, roomNID types.RoomNID, eventNIDs []types.EventNID, lastEventSentNID types.EventNID, stateSnapshotNID types.StateSnapshotNID) error
|
||||
SelectRoomVersionsForRoomNIDs(ctx context.Context, txn *sql.Tx, roomNID []types.RoomNID) (map[types.RoomNID]gomatrixserverlib.RoomVersion, error)
|
||||
SelectRoomInfo(ctx context.Context, txn *sql.Tx, roomID string) (*types.RoomInfo, error)
|
||||
SelectRoomIDsWithEvents(ctx context.Context, txn *sql.Tx) ([]string, error)
|
||||
BulkSelectRoomIDs(ctx context.Context, txn *sql.Tx, roomNIDs []types.RoomNID) ([]string, error)
|
||||
BulkSelectRoomNIDs(ctx context.Context, txn *sql.Tx, roomIDs []string) ([]types.RoomNID, error)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -74,11 +74,6 @@ func TestRoomsTable(t *testing.T) {
|
|||
assert.NoError(t, err)
|
||||
assert.Nil(t, roomInfo)
|
||||
|
||||
// There are no rooms with latestEventNIDs yet
|
||||
roomIDs, err := tab.SelectRoomIDsWithEvents(ctx, nil)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, 0, len(roomIDs))
|
||||
|
||||
roomVersions, err := tab.SelectRoomVersionsForRoomNIDs(ctx, nil, []types.RoomNID{wantRoomNID, 1337})
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, roomVersions[wantRoomNID], room.Version)
|
||||
|
|
@ -86,7 +81,7 @@ func TestRoomsTable(t *testing.T) {
|
|||
_, ok := roomVersions[1337]
|
||||
assert.False(t, ok)
|
||||
|
||||
roomIDs, err = tab.BulkSelectRoomIDs(ctx, nil, []types.RoomNID{wantRoomNID, 1337})
|
||||
roomIDs, err := tab.BulkSelectRoomIDs(ctx, nil, []types.RoomNID{wantRoomNID, 1337})
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, []string{room.ID}, roomIDs)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue