diff --git a/src/github.com/matrix-org/dendrite/clientapi/auth/storage/accounts/membership_table.go b/src/github.com/matrix-org/dendrite/clientapi/auth/storage/accounts/membership_table.go index a6d82860f..70affdc33 100644 --- a/src/github.com/matrix-org/dendrite/clientapi/auth/storage/accounts/membership_table.go +++ b/src/github.com/matrix-org/dendrite/clientapi/auth/storage/accounts/membership_table.go @@ -39,8 +39,10 @@ CREATE TABLE IF NOT EXISTS memberships ( CREATE UNIQUE INDEX IF NOT EXISTS membership_event_id ON memberships(event_id); ` -const insertMembershipSQL = "" + - "INSERT INTO memberships(localpart, room_id, event_id) VALUES ($1, $2, $3)" +const insertMembershipSQL = ` + 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 = "" + "SELECT * from memberships WHERE localpart = $1 AND room_id = $2" diff --git a/src/github.com/matrix-org/dendrite/clientapi/consumers/roomserver.go b/src/github.com/matrix-org/dendrite/clientapi/consumers/roomserver.go index 98dcd5b65..1e2320787 100644 --- a/src/github.com/matrix-org/dendrite/clientapi/consumers/roomserver.go +++ b/src/github.com/matrix-org/dendrite/clientapi/consumers/roomserver.go @@ -107,6 +107,11 @@ func (s *OutputRoomEvent) lookupStateEvents( ) ([]gomatrixserverlib.Event, error) { // Fast path if there aren't any new state events. 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 } diff --git a/src/github.com/matrix-org/dendrite/clientapi/readers/profile.go b/src/github.com/matrix-org/dendrite/clientapi/readers/profile.go index 9cc90aee7..4e9fc9022 100644 --- a/src/github.com/matrix-org/dendrite/clientapi/readers/profile.go +++ b/src/github.com/matrix-org/dendrite/clientapi/readers/profile.go @@ -314,12 +314,7 @@ func buildMembershipEvents( } 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) - if err = db.UpdateMembership(membership.EventID, eventID); err != nil { - return nil, err - } - now := time.Now() event, err := builder.Build(eventID, now, cfg.Matrix.ServerName, cfg.Matrix.KeyID, cfg.Matrix.PrivateKey) if err != nil {