Update interface to get room version from room ID instead of NID

This commit is contained in:
Neil Alexander 2020-03-17 17:14:10 +00:00
parent 8739f9d3a9
commit 9a8ada3289
10 changed files with 34 additions and 85 deletions

View file

@ -25,7 +25,6 @@ import (
"github.com/matrix-org/dendrite/common" "github.com/matrix-org/dendrite/common"
"github.com/matrix-org/dendrite/common/config" "github.com/matrix-org/dendrite/common/config"
roomserverAPI "github.com/matrix-org/dendrite/roomserver/api" roomserverAPI "github.com/matrix-org/dendrite/roomserver/api"
"github.com/matrix-org/dendrite/roomserver/types"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/util" "github.com/matrix-org/util"
) )
@ -47,11 +46,9 @@ type RoomserverAliasAPIDatabase interface {
// Remove a given room alias. // Remove a given room alias.
// Returns an error if there was a problem talking to the database. // Returns an error if there was a problem talking to the database.
RemoveRoomAlias(ctx context.Context, alias string) error RemoveRoomAlias(ctx context.Context, alias string) error
// Return the room NID for a room ID.
RoomNID(ctx context.Context, roomID string) (types.RoomNID, error)
// Look up the room version for a given room. // Look up the room version for a given room.
GetRoomVersionForRoom( GetRoomVersionForRoom(
ctx context.Context, roomNID types.RoomNID, ctx context.Context, roomID string,
) (gomatrixserverlib.RoomVersion, error) ) (gomatrixserverlib.RoomVersion, error)
} }
@ -247,12 +244,7 @@ func (r *RoomserverAliasAPI) sendUpdatedAliasesEvent(
} }
builder.AuthEvents = refs builder.AuthEvents = refs
roomNID, err := r.DB.RoomNID(ctx, roomID) roomVersion, err := r.DB.GetRoomVersionForRoom(ctx, roomID)
if err != nil {
return err
}
roomVersion, err := r.DB.GetRoomVersionForRoom(ctx, roomNID)
if err != nil { if err != nil {
return err return err
} }

View file

@ -22,7 +22,6 @@ import (
appserviceAPI "github.com/matrix-org/dendrite/appservice/api" appserviceAPI "github.com/matrix-org/dendrite/appservice/api"
roomserverAPI "github.com/matrix-org/dendrite/roomserver/api" roomserverAPI "github.com/matrix-org/dendrite/roomserver/api"
"github.com/matrix-org/dendrite/roomserver/types"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
) )
@ -51,14 +50,8 @@ func (db *MockRoomserverAliasAPIDatabase) GetCreatorIDForAlias(
return "", nil return "", nil
} }
func (db *MockRoomserverAliasAPIDatabase) RoomNID(
ctx context.Context, roomID string,
) (types.RoomNID, error) {
return 1, nil
}
func (db *MockRoomserverAliasAPIDatabase) GetRoomVersionForRoom( func (db *MockRoomserverAliasAPIDatabase) GetRoomVersionForRoom(
ctx context.Context, roomNID types.RoomNID, ctx context.Context, roomID string,
) (gomatrixserverlib.RoomVersion, error) { ) (gomatrixserverlib.RoomVersion, error) {
return gomatrixserverlib.RoomVersionV1, nil return gomatrixserverlib.RoomVersionV1, nil
} }

View file

@ -74,7 +74,7 @@ type RoomEventDatabase interface {
) (string, error) ) (string, error)
// Look up the room version for a given room. // Look up the room version for a given room.
GetRoomVersionForRoom( GetRoomVersionForRoom(
ctx context.Context, roomNID types.RoomNID, ctx context.Context, roomID string,
) (gomatrixserverlib.RoomVersion, error) ) (gomatrixserverlib.RoomVersion, error)
} }

View file

@ -253,7 +253,7 @@ func (u *latestEventsUpdater) makeOutputNewRoomEvent() (*api.OutputEvent, error)
latestEventIDs[i] = u.latest[i].EventID latestEventIDs[i] = u.latest[i].EventID
} }
roomVersion, err := u.db.GetRoomVersionForRoom(u.ctx, u.roomNID) roomVersion, err := u.db.GetRoomVersionForRoom(u.ctx, u.event.RoomID())
if err != nil { if err != nil {
return nil, err return nil, err
} }

View file

@ -91,12 +91,8 @@ type RoomserverQueryAPIDatabase interface {
) (map[types.EventStateKeyNID]string, error) ) (map[types.EventStateKeyNID]string, error)
// Look up the room version for a given room. // Look up the room version for a given room.
GetRoomVersionForRoom( GetRoomVersionForRoom(
ctx context.Context, roomNID types.RoomNID, ctx context.Context, roomID string,
) (gomatrixserverlib.RoomVersion, error) ) (gomatrixserverlib.RoomVersion, error)
// Look up the room NID that an event ID appears in.
GetRoomNIDForEventID(
ctx context.Context, eventID string,
) (types.RoomNID, error)
} }
// RoomserverQueryAPI is an implementation of api.RoomserverQueryAPI // RoomserverQueryAPI is an implementation of api.RoomserverQueryAPI
@ -125,7 +121,7 @@ func (r *RoomserverQueryAPI) QueryLatestEventsAndState(
} }
response.RoomExists = true response.RoomExists = true
roomVersion, err := r.DB.GetRoomVersionForRoom(ctx, roomNID) roomVersion, err := r.DB.GetRoomVersionForRoom(ctx, request.RoomID)
if err != nil { if err != nil {
return err return err
} }
@ -178,7 +174,7 @@ func (r *RoomserverQueryAPI) QueryStateAfterEvents(
} }
response.RoomExists = true response.RoomExists = true
roomVersion, err := r.DB.GetRoomVersionForRoom(ctx, roomNID) roomVersion, err := r.DB.GetRoomVersionForRoom(ctx, request.RoomID)
if err != nil { if err != nil {
return err return err
} }
@ -238,12 +234,7 @@ func (r *RoomserverQueryAPI) QueryEventsByID(
} }
for _, event := range events { for _, event := range events {
roomNID, nerr := r.DB.GetRoomNIDForEventID(ctx, event.EventID()) roomVersion, verr := r.DB.GetRoomVersionForRoom(ctx, event.RoomID())
if nerr != nil {
return nerr
}
roomVersion, verr := r.DB.GetRoomVersionForRoom(ctx, roomNID)
if verr != nil { if verr != nil {
return verr return verr
} }
@ -527,12 +518,7 @@ func (r *RoomserverQueryAPI) QueryMissingEvents(
response.Events = make([]gomatrixserverlib.HeaderedEvent, 0, len(loadedEvents)-len(eventsToFilter)) response.Events = make([]gomatrixserverlib.HeaderedEvent, 0, len(loadedEvents)-len(eventsToFilter))
for _, event := range loadedEvents { for _, event := range loadedEvents {
if !eventsToFilter[event.EventID()] { if !eventsToFilter[event.EventID()] {
roomNID, nerr := r.DB.GetRoomNIDForEventID(ctx, event.EventID()) roomVersion, verr := r.DB.GetRoomVersionForRoom(ctx, event.RoomID())
if nerr != nil {
return nerr
}
roomVersion, verr := r.DB.GetRoomVersionForRoom(ctx, roomNID)
if verr != nil { if verr != nil {
return verr return verr
} }
@ -580,12 +566,7 @@ func (r *RoomserverQueryAPI) QueryBackfill(
} }
for _, event := range loadedEvents { for _, event := range loadedEvents {
roomNID, nerr := r.DB.GetRoomNIDForEventID(ctx, event.EventID()) roomVersion, verr := r.DB.GetRoomVersionForRoom(ctx, event.RoomID())
if nerr != nil {
return nerr
}
roomVersion, verr := r.DB.GetRoomVersionForRoom(ctx, roomNID)
if verr != nil { if verr != nil {
return verr return verr
} }
@ -678,7 +659,7 @@ func (r *RoomserverQueryAPI) QueryStateAndAuthChain(
} }
response.RoomExists = true response.RoomExists = true
roomVersion, err := r.DB.GetRoomVersionForRoom(ctx, roomNID) roomVersion, err := r.DB.GetRoomVersionForRoom(ctx, request.RoomID)
if err != nil { if err != nil {
return err return err
} }

View file

@ -38,7 +38,6 @@ type Database interface {
GetInvitesForUser(ctx context.Context, roomNID types.RoomNID, targetUserNID types.EventStateKeyNID) (senderUserIDs []types.EventStateKeyNID, err error) GetInvitesForUser(ctx context.Context, roomNID types.RoomNID, targetUserNID types.EventStateKeyNID) (senderUserIDs []types.EventStateKeyNID, err error)
SetRoomAlias(ctx context.Context, alias string, roomID string, creatorUserID string) error SetRoomAlias(ctx context.Context, alias string, roomID string, creatorUserID string) error
GetRoomIDForAlias(ctx context.Context, alias string) (string, error) GetRoomIDForAlias(ctx context.Context, alias string) (string, error)
GetRoomNIDForEventID(ctx context.Context, eventID string) (types.RoomNID, error)
GetAliasesForRoomID(ctx context.Context, roomID string) ([]string, error) GetAliasesForRoomID(ctx context.Context, roomID string) ([]string, error)
GetCreatorIDForAlias(ctx context.Context, alias string) (string, error) GetCreatorIDForAlias(ctx context.Context, alias string) (string, error)
RemoveRoomAlias(ctx context.Context, alias string) error RemoveRoomAlias(ctx context.Context, alias string) error
@ -46,5 +45,5 @@ type Database interface {
GetMembership(ctx context.Context, roomNID types.RoomNID, requestSenderUserID string) (membershipEventNID types.EventNID, stillInRoom bool, err error) GetMembership(ctx context.Context, roomNID types.RoomNID, requestSenderUserID string) (membershipEventNID types.EventNID, stillInRoom bool, err error)
GetMembershipEventNIDsForRoom(ctx context.Context, roomNID types.RoomNID, joinOnly bool) ([]types.EventNID, error) GetMembershipEventNIDsForRoom(ctx context.Context, roomNID types.RoomNID, joinOnly bool) ([]types.EventNID, error)
EventsFromIDs(ctx context.Context, eventIDs []string) ([]types.Event, error) EventsFromIDs(ctx context.Context, eventIDs []string) ([]types.Event, error)
GetRoomVersionForRoom(ctx context.Context, roomNID types.RoomNID) (gomatrixserverlib.RoomVersion, error) GetRoomVersionForRoom(ctx context.Context, roomID string) (gomatrixserverlib.RoomVersion, error)
} }

View file

@ -65,7 +65,7 @@ const selectLatestEventNIDsForUpdateSQL = "" +
const updateLatestEventNIDsSQL = "" + const updateLatestEventNIDsSQL = "" +
"UPDATE roomserver_rooms SET latest_event_nids = $2, last_event_sent_nid = $3, state_snapshot_nid = $4 WHERE room_nid = $1" "UPDATE roomserver_rooms SET latest_event_nids = $2, last_event_sent_nid = $3, state_snapshot_nid = $4 WHERE room_nid = $1"
const selectRoomVersionForRoomNIDSQL = "" + const selectRoomVersionForRoomIDSQL = "" +
"SELECT room_version FROM roomserver_rooms WHERE room_nid = $1" "SELECT room_version FROM roomserver_rooms WHERE room_nid = $1"
type roomStatements struct { type roomStatements struct {
@ -74,7 +74,7 @@ type roomStatements struct {
selectLatestEventNIDsStmt *sql.Stmt selectLatestEventNIDsStmt *sql.Stmt
selectLatestEventNIDsForUpdateStmt *sql.Stmt selectLatestEventNIDsForUpdateStmt *sql.Stmt
updateLatestEventNIDsStmt *sql.Stmt updateLatestEventNIDsStmt *sql.Stmt
selectRoomVersionForRoomNIDStmt *sql.Stmt selectRoomVersionForRoomIDStmt *sql.Stmt
} }
func (s *roomStatements) prepare(db *sql.DB) (err error) { func (s *roomStatements) prepare(db *sql.DB) (err error) {
@ -88,7 +88,7 @@ func (s *roomStatements) prepare(db *sql.DB) (err error) {
{&s.selectLatestEventNIDsStmt, selectLatestEventNIDsSQL}, {&s.selectLatestEventNIDsStmt, selectLatestEventNIDsSQL},
{&s.selectLatestEventNIDsForUpdateStmt, selectLatestEventNIDsForUpdateSQL}, {&s.selectLatestEventNIDsForUpdateStmt, selectLatestEventNIDsForUpdateSQL},
{&s.updateLatestEventNIDsStmt, updateLatestEventNIDsSQL}, {&s.updateLatestEventNIDsStmt, updateLatestEventNIDsSQL},
{&s.selectRoomVersionForRoomNIDStmt, selectRoomVersionForRoomNIDSQL}, {&s.selectRoomVersionForRoomIDStmt, selectRoomVersionForRoomIDSQL},
}.prepare(db) }.prepare(db)
} }
@ -165,11 +165,11 @@ func (s *roomStatements) updateLatestEventNIDs(
return err return err
} }
func (s *roomStatements) selectRoomVersionForRoomNID( func (s *roomStatements) selectRoomVersionForRoomID(
ctx context.Context, txn *sql.Tx, roomNID types.RoomNID, ctx context.Context, txn *sql.Tx, roomID string,
) (gomatrixserverlib.RoomVersion, error) { ) (gomatrixserverlib.RoomVersion, error) {
var roomVersion gomatrixserverlib.RoomVersion var roomVersion gomatrixserverlib.RoomVersion
stmt := common.TxStmt(txn, s.selectRoomVersionForRoomNIDStmt) stmt := common.TxStmt(txn, s.selectRoomVersionForRoomIDStmt)
err := stmt.QueryRowContext(ctx, roomNID).Scan(&roomVersion) err := stmt.QueryRowContext(ctx, roomID).Scan(&roomVersion)
return roomVersion, err return roomVersion, err
} }

View file

@ -740,18 +740,10 @@ func (d *Database) EventsFromIDs(ctx context.Context, eventIDs []string) ([]type
} }
func (d *Database) GetRoomVersionForRoom( func (d *Database) GetRoomVersionForRoom(
ctx context.Context, roomNID types.RoomNID, ctx context.Context, roomID string,
) (gomatrixserverlib.RoomVersion, error) { ) (gomatrixserverlib.RoomVersion, error) {
return d.statements.selectRoomVersionForRoomNID( return d.statements.selectRoomVersionForRoomID(
ctx, nil, roomNID, ctx, nil, roomID,
)
}
func (d *Database) GetRoomNIDForEventID(
ctx context.Context, eventID string,
) (types.RoomNID, error) {
return d.statements.selectRoomNIDForEventID(
ctx, nil, eventID,
) )
} }

View file

@ -54,8 +54,8 @@ const selectLatestEventNIDsForUpdateSQL = "" +
const updateLatestEventNIDsSQL = "" + const updateLatestEventNIDsSQL = "" +
"UPDATE roomserver_rooms SET latest_event_nids = $1, last_event_sent_nid = $2, state_snapshot_nid = $3 WHERE room_nid = $4" "UPDATE roomserver_rooms SET latest_event_nids = $1, last_event_sent_nid = $2, state_snapshot_nid = $3 WHERE room_nid = $4"
const selectRoomVersionForRoomNIDSQL = "" + const selectRoomVersionForRoomIDSQL = "" +
"SELECT room_version FROM roomserver_rooms WHERE room_nid = $1" "SELECT room_version FROM roomserver_rooms WHERE room_id = $1"
type roomStatements struct { type roomStatements struct {
insertRoomNIDStmt *sql.Stmt insertRoomNIDStmt *sql.Stmt
@ -63,7 +63,7 @@ type roomStatements struct {
selectLatestEventNIDsStmt *sql.Stmt selectLatestEventNIDsStmt *sql.Stmt
selectLatestEventNIDsForUpdateStmt *sql.Stmt selectLatestEventNIDsForUpdateStmt *sql.Stmt
updateLatestEventNIDsStmt *sql.Stmt updateLatestEventNIDsStmt *sql.Stmt
selectRoomVersionForRoomNIDStmt *sql.Stmt selectRoomVersionForRoomIDStmt *sql.Stmt
} }
func (s *roomStatements) prepare(db *sql.DB) (err error) { func (s *roomStatements) prepare(db *sql.DB) (err error) {
@ -77,7 +77,7 @@ func (s *roomStatements) prepare(db *sql.DB) (err error) {
{&s.selectLatestEventNIDsStmt, selectLatestEventNIDsSQL}, {&s.selectLatestEventNIDsStmt, selectLatestEventNIDsSQL},
{&s.selectLatestEventNIDsForUpdateStmt, selectLatestEventNIDsForUpdateSQL}, {&s.selectLatestEventNIDsForUpdateStmt, selectLatestEventNIDsForUpdateSQL},
{&s.updateLatestEventNIDsStmt, updateLatestEventNIDsSQL}, {&s.updateLatestEventNIDsStmt, updateLatestEventNIDsSQL},
{&s.selectRoomVersionForRoomNIDStmt, selectRoomVersionForRoomNIDSQL}, {&s.selectRoomVersionForRoomIDStmt, selectRoomVersionForRoomIDSQL},
}.prepare(db) }.prepare(db)
} }
@ -157,11 +157,11 @@ func (s *roomStatements) updateLatestEventNIDs(
return err return err
} }
func (s *roomStatements) selectRoomVersionForRoomNID( func (s *roomStatements) selectRoomVersionForRoomID(
ctx context.Context, txn *sql.Tx, roomNID types.RoomNID, ctx context.Context, txn *sql.Tx, roomID string,
) (gomatrixserverlib.RoomVersion, error) { ) (gomatrixserverlib.RoomVersion, error) {
var roomVersion gomatrixserverlib.RoomVersion var roomVersion gomatrixserverlib.RoomVersion
stmt := common.TxStmt(txn, s.selectRoomVersionForRoomNIDStmt) stmt := common.TxStmt(txn, s.selectRoomVersionForRoomIDStmt)
err := stmt.QueryRowContext(ctx, roomNID).Scan(&roomVersion) err := stmt.QueryRowContext(ctx, roomID).Scan(&roomVersion)
return roomVersion, err return roomVersion, err
} }

View file

@ -894,18 +894,10 @@ func (d *Database) EventsFromIDs(ctx context.Context, eventIDs []string) ([]type
} }
func (d *Database) GetRoomVersionForRoom( func (d *Database) GetRoomVersionForRoom(
ctx context.Context, roomNID types.RoomNID, ctx context.Context, roomID string,
) (gomatrixserverlib.RoomVersion, error) { ) (gomatrixserverlib.RoomVersion, error) {
return d.statements.selectRoomVersionForRoomNID( return d.statements.selectRoomVersionForRoomID(
ctx, nil, roomNID, ctx, nil, roomID,
)
}
func (d *Database) GetRoomNIDForEventID(
ctx context.Context, eventID string,
) (types.RoomNID, error) {
return d.statements.selectRoomNIDForEventID(
ctx, nil, eventID,
) )
} }