Skip to content
This repository was archived by the owner on Nov 25, 2024. It is now read-only.

Commit 05607d6

Browse files
authored
Add roomserver tests (3/4) (#2447)
* Add Room Aliases tests * Add Rooms table test * Move StateKeyTuplerSorter to the types package * Add StateBlock tests Some optimizations * Add State Snapshot tests Some optimization * Return []int64 and convert to pq.Int64Array for postgres * Move []types.EventNID back to rows.Next() * Update tests, rename SelectRoomIDs
1 parent 6af3538 commit 05607d6

22 files changed

+570
-313
lines changed

roomserver/storage/postgres/events_table.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -264,11 +264,11 @@ func (s *eventStatements) BulkSelectStateEventByNID(
264264
ctx context.Context, txn *sql.Tx, eventNIDs []types.EventNID,
265265
stateKeyTuples []types.StateKeyTuple,
266266
) ([]types.StateEntry, error) {
267-
tuples := stateKeyTupleSorter(stateKeyTuples)
267+
tuples := types.StateKeyTupleSorter(stateKeyTuples)
268268
sort.Sort(tuples)
269-
eventTypeNIDArray, eventStateKeyNIDArray := tuples.typesAndStateKeysAsArrays()
269+
eventTypeNIDArray, eventStateKeyNIDArray := tuples.TypesAndStateKeysAsArrays()
270270
stmt := sqlutil.TxStmt(txn, s.bulkSelectStateEventByNIDStmt)
271-
rows, err := stmt.QueryContext(ctx, eventNIDsAsArray(eventNIDs), eventTypeNIDArray, eventStateKeyNIDArray)
271+
rows, err := stmt.QueryContext(ctx, eventNIDsAsArray(eventNIDs), pq.Int64Array(eventTypeNIDArray), pq.Int64Array(eventStateKeyNIDArray))
272272
if err != nil {
273273
return nil, err
274274
}

roomserver/storage/postgres/room_aliases_table.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,12 @@ type roomAliasesStatements struct {
6161
deleteRoomAliasStmt *sql.Stmt
6262
}
6363

64-
func createRoomAliasesTable(db *sql.DB) error {
64+
func CreateRoomAliasesTable(db *sql.DB) error {
6565
_, err := db.Exec(roomAliasesSchema)
6666
return err
6767
}
6868

69-
func prepareRoomAliasesTable(db *sql.DB) (tables.RoomAliases, error) {
69+
func PrepareRoomAliasesTable(db *sql.DB) (tables.RoomAliases, error) {
7070
s := &roomAliasesStatements{}
7171

7272
return s, sqlutil.StatementList{
@@ -108,8 +108,8 @@ func (s *roomAliasesStatements) SelectAliasesFromRoomID(
108108
defer internal.CloseAndLogIfError(ctx, rows, "selectAliasesFromRoomID: rows.close() failed")
109109

110110
var aliases []string
111+
var alias string
111112
for rows.Next() {
112-
var alias string
113113
if err = rows.Scan(&alias); err != nil {
114114
return nil, err
115115
}

roomserver/storage/postgres/rooms_table.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -95,12 +95,12 @@ type roomStatements struct {
9595
bulkSelectRoomNIDsStmt *sql.Stmt
9696
}
9797

98-
func createRoomsTable(db *sql.DB) error {
98+
func CreateRoomsTable(db *sql.DB) error {
9999
_, err := db.Exec(roomsSchema)
100100
return err
101101
}
102102

103-
func prepareRoomsTable(db *sql.DB) (tables.Rooms, error) {
103+
func PrepareRoomsTable(db *sql.DB) (tables.Rooms, error) {
104104
s := &roomStatements{}
105105

106106
return s, sqlutil.StatementList{
@@ -117,16 +117,16 @@ func prepareRoomsTable(db *sql.DB) (tables.Rooms, error) {
117117
}.Prepare(db)
118118
}
119119

120-
func (s *roomStatements) SelectRoomIDs(ctx context.Context, txn *sql.Tx) ([]string, error) {
120+
func (s *roomStatements) SelectRoomIDsWithEvents(ctx context.Context, txn *sql.Tx) ([]string, error) {
121121
stmt := sqlutil.TxStmt(txn, s.selectRoomIDsStmt)
122122
rows, err := stmt.QueryContext(ctx)
123123
if err != nil {
124124
return nil, err
125125
}
126126
defer internal.CloseAndLogIfError(ctx, rows, "selectRoomIDsStmt: rows.close() failed")
127127
var roomIDs []string
128+
var roomID string
128129
for rows.Next() {
129-
var roomID string
130130
if err = rows.Scan(&roomID); err != nil {
131131
return nil, err
132132
}
@@ -231,9 +231,9 @@ func (s *roomStatements) SelectRoomVersionsForRoomNIDs(
231231
}
232232
defer internal.CloseAndLogIfError(ctx, rows, "selectRoomVersionsForRoomNIDsStmt: rows.close() failed")
233233
result := make(map[types.RoomNID]gomatrixserverlib.RoomVersion)
234+
var roomNID types.RoomNID
235+
var roomVersion gomatrixserverlib.RoomVersion
234236
for rows.Next() {
235-
var roomNID types.RoomNID
236-
var roomVersion gomatrixserverlib.RoomVersion
237237
if err = rows.Scan(&roomNID, &roomVersion); err != nil {
238238
return nil, err
239239
}
@@ -254,8 +254,8 @@ func (s *roomStatements) BulkSelectRoomIDs(ctx context.Context, txn *sql.Tx, roo
254254
}
255255
defer internal.CloseAndLogIfError(ctx, rows, "bulkSelectRoomIDsStmt: rows.close() failed")
256256
var roomIDs []string
257+
var roomID string
257258
for rows.Next() {
258-
var roomID string
259259
if err = rows.Scan(&roomID); err != nil {
260260
return nil, err
261261
}
@@ -276,8 +276,8 @@ func (s *roomStatements) BulkSelectRoomNIDs(ctx context.Context, txn *sql.Tx, ro
276276
}
277277
defer internal.CloseAndLogIfError(ctx, rows, "bulkSelectRoomNIDsStmt: rows.close() failed")
278278
var roomNIDs []types.RoomNID
279+
var roomNID types.RoomNID
279280
for rows.Next() {
280-
var roomNID types.RoomNID
281281
if err = rows.Scan(&roomNID); err != nil {
282282
return nil, err
283283
}

roomserver/storage/postgres/state_block_table.go

Lines changed: 10 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import (
1919
"context"
2020
"database/sql"
2121
"fmt"
22-
"sort"
2322

2423
"github.com/lib/pq"
2524
"github.com/matrix-org/dendrite/internal"
@@ -71,12 +70,12 @@ type stateBlockStatements struct {
7170
bulkSelectStateBlockEntriesStmt *sql.Stmt
7271
}
7372

74-
func createStateBlockTable(db *sql.DB) error {
73+
func CreateStateBlockTable(db *sql.DB) error {
7574
_, err := db.Exec(stateDataSchema)
7675
return err
7776
}
7877

79-
func prepareStateBlockTable(db *sql.DB) (tables.StateBlock, error) {
78+
func PrepareStateBlockTable(db *sql.DB) (tables.StateBlock, error) {
8079
s := &stateBlockStatements{}
8180

8281
return s, sqlutil.StatementList{
@@ -90,9 +89,9 @@ func (s *stateBlockStatements) BulkInsertStateData(
9089
entries types.StateEntries,
9190
) (id types.StateBlockNID, err error) {
9291
entries = entries[:util.SortAndUnique(entries)]
93-
var nids types.EventNIDs
94-
for _, e := range entries {
95-
nids = append(nids, e.EventNID)
92+
nids := make(types.EventNIDs, entries.Len())
93+
for i := range entries {
94+
nids[i] = entries[i].EventNID
9695
}
9796
stmt := sqlutil.TxStmt(txn, s.insertStateDataStmt)
9897
err = stmt.QueryRowContext(
@@ -113,15 +112,15 @@ func (s *stateBlockStatements) BulkSelectStateBlockEntries(
113112

114113
results := make([][]types.EventNID, len(stateBlockNIDs))
115114
i := 0
115+
var stateBlockNID types.StateBlockNID
116+
var result pq.Int64Array
116117
for ; rows.Next(); i++ {
117-
var stateBlockNID types.StateBlockNID
118-
var result pq.Int64Array
119118
if err = rows.Scan(&stateBlockNID, &result); err != nil {
120119
return nil, err
121120
}
122-
r := []types.EventNID{}
123-
for _, e := range result {
124-
r = append(r, types.EventNID(e))
121+
r := make([]types.EventNID, len(result))
122+
for x := range result {
123+
r[x] = types.EventNID(result[x])
125124
}
126125
results[i] = r
127126
}
@@ -141,35 +140,3 @@ func stateBlockNIDsAsArray(stateBlockNIDs []types.StateBlockNID) pq.Int64Array {
141140
}
142141
return pq.Int64Array(nids)
143142
}
144-
145-
type stateKeyTupleSorter []types.StateKeyTuple
146-
147-
func (s stateKeyTupleSorter) Len() int { return len(s) }
148-
func (s stateKeyTupleSorter) Less(i, j int) bool { return s[i].LessThan(s[j]) }
149-
func (s stateKeyTupleSorter) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
150-
151-
// Check whether a tuple is in the list. Assumes that the list is sorted.
152-
func (s stateKeyTupleSorter) contains(value types.StateKeyTuple) bool {
153-
i := sort.Search(len(s), func(i int) bool { return !s[i].LessThan(value) })
154-
return i < len(s) && s[i] == value
155-
}
156-
157-
// List the unique eventTypeNIDs and eventStateKeyNIDs.
158-
// Assumes that the list is sorted.
159-
func (s stateKeyTupleSorter) typesAndStateKeysAsArrays() (eventTypeNIDs pq.Int64Array, eventStateKeyNIDs pq.Int64Array) {
160-
eventTypeNIDs = make(pq.Int64Array, len(s))
161-
eventStateKeyNIDs = make(pq.Int64Array, len(s))
162-
for i := range s {
163-
eventTypeNIDs[i] = int64(s[i].EventTypeNID)
164-
eventStateKeyNIDs[i] = int64(s[i].EventStateKeyNID)
165-
}
166-
eventTypeNIDs = eventTypeNIDs[:util.SortAndUnique(int64Sorter(eventTypeNIDs))]
167-
eventStateKeyNIDs = eventStateKeyNIDs[:util.SortAndUnique(int64Sorter(eventStateKeyNIDs))]
168-
return
169-
}
170-
171-
type int64Sorter []int64
172-
173-
func (s int64Sorter) Len() int { return len(s) }
174-
func (s int64Sorter) Less(i, j int) bool { return s[i] < s[j] }
175-
func (s int64Sorter) Swap(i, j int) { s[i], s[j] = s[j], s[i] }

roomserver/storage/postgres/state_block_table_test.go

Lines changed: 0 additions & 86 deletions
This file was deleted.

roomserver/storage/postgres/state_snapshot_table.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -77,12 +77,12 @@ type stateSnapshotStatements struct {
7777
bulkSelectStateBlockNIDsStmt *sql.Stmt
7878
}
7979

80-
func createStateSnapshotTable(db *sql.DB) error {
80+
func CreateStateSnapshotTable(db *sql.DB) error {
8181
_, err := db.Exec(stateSnapshotSchema)
8282
return err
8383
}
8484

85-
func prepareStateSnapshotTable(db *sql.DB) (tables.StateSnapshot, error) {
85+
func PrepareStateSnapshotTable(db *sql.DB) (tables.StateSnapshot, error) {
8686
s := &stateSnapshotStatements{}
8787

8888
return s, sqlutil.StatementList{
@@ -95,12 +95,10 @@ func (s *stateSnapshotStatements) InsertState(
9595
ctx context.Context, txn *sql.Tx, roomNID types.RoomNID, nids types.StateBlockNIDs,
9696
) (stateNID types.StateSnapshotNID, err error) {
9797
nids = nids[:util.SortAndUnique(nids)]
98-
var id int64
99-
err = sqlutil.TxStmt(txn, s.insertStateStmt).QueryRowContext(ctx, nids.Hash(), int64(roomNID), stateBlockNIDsAsArray(nids)).Scan(&id)
98+
err = sqlutil.TxStmt(txn, s.insertStateStmt).QueryRowContext(ctx, nids.Hash(), int64(roomNID), stateBlockNIDsAsArray(nids)).Scan(&stateNID)
10099
if err != nil {
101100
return 0, err
102101
}
103-
stateNID = types.StateSnapshotNID(id)
104102
return
105103
}
106104

@@ -119,9 +117,9 @@ func (s *stateSnapshotStatements) BulkSelectStateBlockNIDs(
119117
defer rows.Close() // nolint: errcheck
120118
results := make([]types.StateBlockNIDList, len(stateNIDs))
121119
i := 0
120+
var stateBlockNIDs pq.Int64Array
122121
for ; rows.Next(); i++ {
123122
result := &results[i]
124-
var stateBlockNIDs pq.Int64Array
125123
if err = rows.Scan(&result.StateSnapshotNID, &stateBlockNIDs); err != nil {
126124
return nil, err
127125
}

roomserver/storage/postgres/storage.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -80,19 +80,19 @@ func (d *Database) create(db *sql.DB) error {
8080
if err := CreateEventsTable(db); err != nil {
8181
return err
8282
}
83-
if err := createRoomsTable(db); err != nil {
83+
if err := CreateRoomsTable(db); err != nil {
8484
return err
8585
}
86-
if err := createStateBlockTable(db); err != nil {
86+
if err := CreateStateBlockTable(db); err != nil {
8787
return err
8888
}
89-
if err := createStateSnapshotTable(db); err != nil {
89+
if err := CreateStateSnapshotTable(db); err != nil {
9090
return err
9191
}
9292
if err := CreatePrevEventsTable(db); err != nil {
9393
return err
9494
}
95-
if err := createRoomAliasesTable(db); err != nil {
95+
if err := CreateRoomAliasesTable(db); err != nil {
9696
return err
9797
}
9898
if err := CreateInvitesTable(db); err != nil {
@@ -128,23 +128,23 @@ func (d *Database) prepare(db *sql.DB, writer sqlutil.Writer, cache caching.Room
128128
if err != nil {
129129
return err
130130
}
131-
rooms, err := prepareRoomsTable(db)
131+
rooms, err := PrepareRoomsTable(db)
132132
if err != nil {
133133
return err
134134
}
135-
stateBlock, err := prepareStateBlockTable(db)
135+
stateBlock, err := PrepareStateBlockTable(db)
136136
if err != nil {
137137
return err
138138
}
139-
stateSnapshot, err := prepareStateSnapshotTable(db)
139+
stateSnapshot, err := PrepareStateSnapshotTable(db)
140140
if err != nil {
141141
return err
142142
}
143143
prevEvents, err := PreparePrevEventsTable(db)
144144
if err != nil {
145145
return err
146146
}
147-
roomAliases, err := prepareRoomAliasesTable(db)
147+
roomAliases, err := PrepareRoomAliasesTable(db)
148148
if err != nil {
149149
return err
150150
}

roomserver/storage/shared/storage.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1216,7 +1216,7 @@ func (d *Database) GetKnownUsers(ctx context.Context, userID, searchString strin
12161216

12171217
// GetKnownRooms returns a list of all rooms we know about.
12181218
func (d *Database) GetKnownRooms(ctx context.Context) ([]string, error) {
1219-
return d.RoomsTable.SelectRoomIDs(ctx, nil)
1219+
return d.RoomsTable.SelectRoomIDsWithEvents(ctx, nil)
12201220
}
12211221

12221222
// ForgetRoom sets a users room to forgotten

roomserver/storage/sqlite3/events_table.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -247,9 +247,9 @@ func (s *eventStatements) BulkSelectStateEventByNID(
247247
ctx context.Context, txn *sql.Tx, eventNIDs []types.EventNID,
248248
stateKeyTuples []types.StateKeyTuple,
249249
) ([]types.StateEntry, error) {
250-
tuples := stateKeyTupleSorter(stateKeyTuples)
250+
tuples := types.StateKeyTupleSorter(stateKeyTuples)
251251
sort.Sort(tuples)
252-
eventTypeNIDArray, eventStateKeyNIDArray := tuples.typesAndStateKeysAsArrays()
252+
eventTypeNIDArray, eventStateKeyNIDArray := tuples.TypesAndStateKeysAsArrays()
253253
params := make([]interface{}, 0, len(eventNIDs)+len(eventTypeNIDArray)+len(eventStateKeyNIDArray))
254254
selectOrig := strings.Replace(bulkSelectStateEventByNIDSQL, "($1)", sqlutil.QueryVariadic(len(eventNIDs)), 1)
255255
for _, v := range eventNIDs {

0 commit comments

Comments
 (0)