Move membership update to roomserver consumer

This commit is contained in:
Brendan Abolivier 2017-07-20 11:57:08 +01:00
parent 40a806ce78
commit f8cb14678c
No known key found for this signature in database
GPG key ID: 8EF1500759F70623
3 changed files with 9 additions and 7 deletions

View file

@ -39,8 +39,10 @@ CREATE TABLE IF NOT EXISTS memberships (
CREATE UNIQUE INDEX IF NOT EXISTS membership_event_id ON memberships(event_id); CREATE UNIQUE INDEX IF NOT EXISTS membership_event_id ON memberships(event_id);
` `
const insertMembershipSQL = "" + const insertMembershipSQL = `
"INSERT INTO memberships(localpart, room_id, event_id) VALUES ($1, $2, $3)" INSERT INTO memberships(localpart, room_id, event_id) VALUES ($1, $2, $3)
ON CONFLICT (localpart, room_id) DO UPDATE SET event_id = EXCLUDED.event_id
`
const selectMembershipSQL = "" + const selectMembershipSQL = "" +
"SELECT * from memberships WHERE localpart = $1 AND room_id = $2" "SELECT * from memberships WHERE localpart = $1 AND room_id = $2"

View file

@ -107,6 +107,11 @@ func (s *OutputRoomEvent) lookupStateEvents(
) ([]gomatrixserverlib.Event, error) { ) ([]gomatrixserverlib.Event, error) {
// Fast path if there aren't any new state events. // Fast path if there aren't any new state events.
if len(addsStateEventIDs) == 0 { if len(addsStateEventIDs) == 0 {
// If the event is a membership update (e.g. for a profile update), it won't
// show up in AddsStateEventIDs, so we need to add it manually
if event.Type() == "m.room.member" {
return []gomatrixserverlib.Event{event}, nil
}
return nil, nil return nil, nil
} }

View file

@ -314,12 +314,7 @@ func buildMembershipEvents(
} }
builder.AuthEvents = refs builder.AuthEvents = refs
// Generate a new event ID and set it in the database
eventID := fmt.Sprintf("$%s:%s", util.RandomString(16), cfg.Matrix.ServerName) eventID := fmt.Sprintf("$%s:%s", util.RandomString(16), cfg.Matrix.ServerName)
if err = db.UpdateMembership(membership.EventID, eventID); err != nil {
return nil, err
}
now := time.Now() now := time.Now()
event, err := builder.Build(eventID, now, cfg.Matrix.ServerName, cfg.Matrix.KeyID, cfg.Matrix.PrivateKey) event, err := builder.Build(eventID, now, cfg.Matrix.ServerName, cfg.Matrix.KeyID, cfg.Matrix.PrivateKey)
if err != nil { if err != nil {