Use PrepareAs

This commit is contained in:
Neil Alexander 2020-03-11 11:04:38 +00:00
parent e2803ab4a6
commit ba7f0c44a0
10 changed files with 28 additions and 67 deletions

View file

@ -94,16 +94,7 @@ func (s *OutputRoomEventConsumer) onMessage(msg *sarama.ConsumerMessage) error {
return nil
}
// TODO: Is this trusted here?
ev, err := gomatrixserverlib.NewEventFromTrustedJSON(output.NewRoomEvent.Event, false, output.NewRoomEvent.RoomVersion)
if err != nil {
log.WithError(err).WithField("roomversion", output.NewRoomEvent.RoomVersion).Errorf(
"roomserver output log: couldn't create event from trusted JSON (%d bytes)",
len(output.NewRoomEvent.Event),
)
return err
}
ev := output.NewRoomEvent.Event
log.WithFields(log.Fields{
"event_id": ev.EventID(),
"room_id": ev.RoomID(),

View file

@ -84,16 +84,7 @@ func (s *OutputRoomEventConsumer) onMessage(msg *sarama.ConsumerMessage) error {
return nil
}
// TODO: Is this trusted here?
ev, err := gomatrixserverlib.NewEventFromTrustedJSON(output.NewRoomEvent.Event, false, output.NewRoomEvent.RoomVersion)
if err != nil {
log.WithError(err).WithField("roomversion", output.NewRoomEvent.RoomVersion).Errorf(
"roomserver output log: couldn't create event from trusted JSON (%d bytes)",
len(output.NewRoomEvent.Event),
)
return err
}
ev := output.NewRoomEvent.Event
log.WithFields(log.Fields{
"event_id": ev.EventID(),
"room_id": ev.RoomID(),

View file

@ -86,12 +86,7 @@ func (s *OutputRoomEventConsumer) onMessage(msg *sarama.ConsumerMessage) error {
return nil
}
// TODO: Is this trusted here?
ev, err := gomatrixserverlib.NewEventFromTrustedJSON(output.NewRoomEvent.Event, false, output.NewRoomEvent.RoomVersion)
if err != nil {
return err
}
ev := output.NewRoomEvent.Event
log.WithFields(log.Fields{
"event_id": ev.EventID(),
"room_id": ev.RoomID(),
@ -115,12 +110,7 @@ func (s *OutputRoomEventConsumer) onMessage(msg *sarama.ConsumerMessage) error {
// processMessage updates the list of currently joined hosts in the room
// and then sends the event to the hosts that were joined before the event.
func (s *OutputRoomEventConsumer) processMessage(ore api.OutputNewRoomEvent) error {
// TODO: Is this trusted here?
ev, err := gomatrixserverlib.NewEventFromTrustedJSON(ore.Event, false, ore.RoomVersion)
if err != nil {
return err
}
ev := ore.Event
addsStateEvents, err := s.lookupStateEvents(ore.AddsStateEventIDs, ev)
if err != nil {
return err
@ -183,15 +173,7 @@ func (s *OutputRoomEventConsumer) processMessage(ore api.OutputNewRoomEvent) err
func (s *OutputRoomEventConsumer) joinedHostsAtEvent(
ore api.OutputNewRoomEvent, oldJoinedHosts []types.JoinedHost,
) ([]gomatrixserverlib.ServerName, error) {
// TODO: Is this trusted here?
ev, err := gomatrixserverlib.NewEventFromTrustedJSON(ore.Event, false, ore.RoomVersion)
if err != nil {
log.WithError(err).WithField("roomversion", ore.RoomVersion).Errorf(
"roomserver output log: couldn't create event from trusted JSON (%d bytes)",
len(ore.Event),
)
return nil, err
}
ev := ore.Event
// Combine the delta into a single delta so that the adds and removes can
// cancel each other out. This should reduce the number of times we need

2
go.mod
View file

@ -8,7 +8,7 @@ require (
github.com/matrix-org/go-http-js-libp2p v0.0.0-20200304160008-4ec1129a00c4
github.com/matrix-org/go-sqlite3-js v0.0.0-20200304164012-aa524245b658
github.com/matrix-org/gomatrix v0.0.0-20190528120928-7df988a63f26
github.com/matrix-org/gomatrixserverlib v0.0.0-20200310154032-5ca7e25c30ed
github.com/matrix-org/gomatrixserverlib v0.0.0-20200311110021-ac84b78b81be
github.com/matrix-org/naffka v0.0.0-20200127221512-0716baaabaf1
github.com/matrix-org/util v0.0.0-20190711121626-527ce5ddefc7
github.com/mattn/go-sqlite3 v2.0.2+incompatible

2
go.sum
View file

@ -94,6 +94,8 @@ github.com/matrix-org/gomatrixserverlib v0.0.0-20200310151755-d60e4e8147d2 h1:1k
github.com/matrix-org/gomatrixserverlib v0.0.0-20200310151755-d60e4e8147d2/go.mod h1:FsKa2pWE/bpQql9H7U4boOPXFoJX/QcqaZZ6ijLkaZI=
github.com/matrix-org/gomatrixserverlib v0.0.0-20200310154032-5ca7e25c30ed h1:USEw1Rw391AzQBo/QgNyEY1nSAkwkuMoQ9LNTwGaKC0=
github.com/matrix-org/gomatrixserverlib v0.0.0-20200310154032-5ca7e25c30ed/go.mod h1:FsKa2pWE/bpQql9H7U4boOPXFoJX/QcqaZZ6ijLkaZI=
github.com/matrix-org/gomatrixserverlib v0.0.0-20200311110021-ac84b78b81be h1:4ZM5Ps50b7Ku75VzML6+3fCyuw0NSuDJi/kYjB+UScI=
github.com/matrix-org/gomatrixserverlib v0.0.0-20200311110021-ac84b78b81be/go.mod h1:FsKa2pWE/bpQql9H7U4boOPXFoJX/QcqaZZ6ijLkaZI=
github.com/matrix-org/naffka v0.0.0-20200127221512-0716baaabaf1 h1:osLoFdOy+ChQqVUn2PeTDETFftVkl4w9t/OW18g3lnk=
github.com/matrix-org/naffka v0.0.0-20200127221512-0716baaabaf1/go.mod h1:cXoYQIENbdWIQHt1SyCo6Bl3C3raHwJ0wgVrXHSqf+A=
github.com/matrix-org/util v0.0.0-20171127121716-2e2df66af2f5 h1:W7l5CP4V7wPyPb4tYE11dbmeAOwtFQBTW0rf4OonOS8=

View file

@ -22,7 +22,6 @@ import (
"github.com/matrix-org/dendrite/common/config"
"github.com/matrix-org/dendrite/publicroomsapi/storage"
"github.com/matrix-org/dendrite/roomserver/api"
"github.com/matrix-org/gomatrixserverlib"
log "github.com/sirupsen/logrus"
sarama "gopkg.in/Shopify/sarama.v1"
)
@ -78,16 +77,20 @@ func (s *OutputRoomEventConsumer) onMessage(msg *sarama.ConsumerMessage) error {
return nil
}
// TODO: Is this trusted here?
ev, err := gomatrixserverlib.NewEventFromTrustedJSON(output.NewRoomEvent.Event, false, output.NewRoomEvent.RoomVersion)
if err != nil {
log.WithError(err).WithField("roomversion", output.NewRoomEvent.RoomVersion).Errorf(
"roomserver output log: couldn't create event from trusted JSON (%d bytes)",
len(output.NewRoomEvent.Event),
)
// Get the room version of the room
vQueryReq := api.QueryRoomVersionForRoomIDRequest{RoomID: output.NewRoomEvent.Event.RoomID()}
vQueryRes := api.QueryRoomVersionForRoomIDResponse{}
if err := s.query.QueryRoomVersionForRoomID(context.Background(), &vQueryReq, &vQueryRes); err != nil {
return err
}
if err := output.NewRoomEvent.Event.PrepareAs(vQueryRes.RoomVersion); err != nil {
log.WithFields(log.Fields{
"room_version": vQueryRes.RoomVersion,
}).WithError(err).Errorf("can't prepare event to version")
}
ev := output.NewRoomEvent.Event
log.WithFields(log.Fields{
"event_id": ev.EventID(),
"room_id": ev.RoomID(),

View file

@ -54,7 +54,7 @@ type OutputEvent struct {
// prev_events.
type OutputNewRoomEvent struct {
// The event.
Event []byte `json:"event"`
Event gomatrixserverlib.Event `json:"event"`
// The event version.
RoomVersion gomatrixserverlib.RoomVersion `json:"room_version"`
// The latest events in the room after this event.

View file

@ -262,18 +262,13 @@ func (u *latestEventsUpdater) makeOutputNewRoomEvent() (*api.OutputEvent, error)
latestEventIDs[i] = u.latest[i].EventID
}
eventJSON, err := u.event.MarshalJSON()
if err != nil {
return nil, err
}
roomVersion, err := u.db.GetRoomVersionForRoom(context.Background(), u.roomNID)
if err != nil {
return nil, err
}
ore := api.OutputNewRoomEvent{
Event: eventJSON,
Event: u.event,
RoomVersion: roomVersion,
LastSentEventID: u.lastEventIDSent,
LatestEventIDs: latestEventIDs,

View file

@ -99,19 +99,16 @@ func (s *OutputRoomEventConsumer) onMessage(msg *sarama.ConsumerMessage) error {
func (s *OutputRoomEventConsumer) onNewRoomEvent(
ctx context.Context, msg api.OutputNewRoomEvent,
) error {
ev := msg.Event
roomVersion := gomatrixserverlib.RoomVersionV1
if rv := gjson.Get(string(msg.Event), "content.room_version"); rv.Exists() {
if rv := gjson.Get(string(ev.Content()), "room_version"); rv.Exists() {
roomVersion = gomatrixserverlib.RoomVersion(rv.String())
}
// TODO: Is this trusted here?
ev, err := gomatrixserverlib.NewEventFromTrustedJSON(msg.Event, false, roomVersion)
if err != nil {
log.WithError(err).WithField("roomversion", msg.RoomVersion).Errorf(
"roomserver output log: couldn't create event from trusted JSON (%d bytes)",
len(msg.Event),
)
return err
if err := msg.Event.PrepareAs(roomVersion); err != nil {
log.WithFields(log.Fields{
"room_version": roomVersion,
}).WithError(err).Errorf("can't prepare event to version")
}
log.WithFields(log.Fields{

View file

@ -28,7 +28,7 @@ func (s *roomVersionStatements) prepare(db *sql.DB) (err error) {
func (s *roomVersionStatements) selectRoomVersion(
ctx context.Context, txn *sql.Tx, roomID string,
) (roomVersion gomatrixserverlib.RoomVersion, err error) {
stmt := common.TxStmt(txn, s.selectStateEventStmt)
stmt := common.TxStmt(nil, s.selectStateEventStmt)
var res []byte
err = stmt.QueryRowContext(ctx, roomID, "m.room.create", "").Scan(&res)
if err != nil {