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

View file

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

View file

@ -141,9 +141,11 @@ func (d *SyncServerDatabase) updateRoomState(
return nil return nil
} }
// GetMembershipEvent returns the Matrix join event for a given user into a given room // GetStateEvent returns the Matrix state event of a given type for a given room with a given state key
func (d *SyncServerDatabase) GetMembershipEvent(roomID string, userID string) (*gomatrixserverlib.Event, error) { // If no event could be found, returns nil
return d.roomstate.selectJoinEventForUser(roomID, userID) // 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 // PartitionOffsets implements common.PartitionStorer