Update all events instead of only memberships

This commit is contained in:
Brendan Abolivier 2017-07-25 14:06:25 +01:00
parent 37a9db5e6a
commit f7ced6b3c8
No known key found for this signature in database
GPG key ID: 8EF1500759F70623
3 changed files with 19 additions and 34 deletions

View file

@ -19,7 +19,6 @@ import (
"fmt"
log "github.com/Sirupsen/logrus"
"github.com/matrix-org/dendrite/clientapi/events"
"github.com/matrix-org/dendrite/common"
"github.com/matrix-org/dendrite/common/config"
"github.com/matrix-org/dendrite/roomserver/api"
@ -42,9 +41,9 @@ type OutputRoomEvent struct {
}
type prevMembership struct {
PrevContent events.MemberContent `json:"prev_content"`
PrevID string `json:"replaces_state"`
UserID string `json:"prev_sender"`
PrevContent json.RawMessage `json:"prev_content"`
PrevID string `json:"replaces_state"`
UserID string `json:"prev_sender"`
}
// NewOutputRoomEvent creates a new OutputRoomEvent consumer. Call Start() to begin consuming from room servers.
@ -114,13 +113,13 @@ func (s *OutputRoomEvent) onMessage(msg *sarama.ConsumerMessage) error {
}).Panicf("roomserver output log: state event lookup failure")
}
ev, err = s.updateMemberEvent(ev, s.keyID, s.privateKey)
ev, err = s.updateStateEvent(ev, s.keyID, s.privateKey)
if err != nil {
return err
}
for i := range addsStateEvents {
addsStateEvents[i], err = s.updateMemberEvent(addsStateEvents[i], s.keyID, s.privateKey)
addsStateEvents[i], err = s.updateStateEvent(addsStateEvents[i], s.keyID, s.privateKey)
if err != nil {
return err
}
@ -202,22 +201,11 @@ func (s *OutputRoomEvent) lookupStateEvents(
return result, nil
}
func (s *OutputRoomEvent) updateMemberEvent(
func (s *OutputRoomEvent) updateStateEvent(
event gomatrixserverlib.Event, keyID gomatrixserverlib.KeyID,
privateKey []byte,
) (gomatrixserverlib.Event, error) {
if event.Type() != "m.room.member" {
return event, nil
}
membership, err := event.Membership()
if err != nil {
return event, err
}
if membership != "join" {
return event, nil
}
prevEvent, err := s.db.GetMembershipEvent(event.RoomID(), *event.StateKey())
prevEvent, err := s.db.GetStateEvent(event.Type(), event.RoomID(), *event.StateKey())
if err != nil {
return event, err
}
@ -226,13 +214,8 @@ func (s *OutputRoomEvent) updateMemberEvent(
return event, nil
}
var content events.MemberContent
if err := json.Unmarshal(prevEvent.Content(), &content); err != nil {
return event, err
}
prev := prevMembership{
PrevContent: content,
PrevContent: prevEvent.Content(),
PrevID: prevEvent.EventID(),
UserID: prevEvent.Sender(),
}

View file

@ -66,8 +66,8 @@ const selectCurrentStateSQL = "" +
const selectJoinedUsersSQL = "" +
"SELECT room_id, state_key FROM current_room_state WHERE type = 'm.room.member' AND membership = 'join'"
const selectJoinEventForUserSQL = "" +
"SELECT event_json FROM current_room_state WHERE type = 'm.room.member' AND membership = 'join' AND room_id = $1 AND state_key = $2"
const selectStateEventSQL = "" +
"SELECT event_json FROM current_room_state WHERE type = $1 AND room_id = $2 AND state_key = $3"
const selectEventsWithEventIDsSQL = "" +
"SELECT added_at, event_json FROM current_room_state WHERE event_id = ANY($1)"
@ -79,7 +79,7 @@ type currentRoomStateStatements struct {
selectCurrentStateStmt *sql.Stmt
selectJoinedUsersStmt *sql.Stmt
selectEventsWithEventIDsStmt *sql.Stmt
selectJoinEventForUserStmt *sql.Stmt
selectStateEventStmt *sql.Stmt
}
func (s *currentRoomStateStatements) prepare(db *sql.DB) (err error) {
@ -105,7 +105,7 @@ func (s *currentRoomStateStatements) prepare(db *sql.DB) (err error) {
if s.selectEventsWithEventIDsStmt, err = db.Prepare(selectEventsWithEventIDsSQL); err != nil {
return
}
if s.selectJoinEventForUserStmt, err = db.Prepare(selectJoinEventForUserSQL); err != nil {
if s.selectStateEventStmt, err = db.Prepare(selectStateEventSQL); err != nil {
return
}
return
@ -203,9 +203,9 @@ func rowsToEvents(rows *sql.Rows) ([]gomatrixserverlib.Event, error) {
return result, nil
}
func (s *currentRoomStateStatements) selectJoinEventForUser(roomID string, userID string) (*gomatrixserverlib.Event, error) {
func (s *currentRoomStateStatements) selectStateEvent(evType string, roomID string, stateKey string) (*gomatrixserverlib.Event, error) {
var res []byte
if err := s.selectJoinEventForUserStmt.QueryRow(roomID, userID).Scan(&res); err == sql.ErrNoRows {
if err := s.selectStateEventStmt.QueryRow(evType, roomID, stateKey).Scan(&res); err == sql.ErrNoRows {
return nil, nil
}
ev, err := gomatrixserverlib.NewEventFromTrustedJSON(res, false)

View file

@ -141,9 +141,11 @@ func (d *SyncServerDatabase) updateRoomState(
return nil
}
// GetMembershipEvent returns the Matrix join event for a given user into a given room
func (d *SyncServerDatabase) GetMembershipEvent(roomID string, userID string) (*gomatrixserverlib.Event, error) {
return d.roomstate.selectJoinEventForUser(roomID, userID)
// GetStateEvent returns the Matrix state event of a given type for a given room with a given state key
// If no event could be found, returns nil
// If there was an issue during the retrieval, returns an error
func (d *SyncServerDatabase) GetStateEvent(evType string, roomID string, stateKey string) (*gomatrixserverlib.Event, error) {
return d.roomstate.selectStateEvent(evType, roomID, stateKey)
}
// PartitionOffsets implements common.PartitionStorer