Fix MembershipUpdater method to not commit the transaction before returning it

This commit is contained in:
Mark Haines 2017-08-21 14:19:36 +01:00
parent 6d69180fc9
commit 76c7f176e0

View file

@ -17,8 +17,6 @@ package storage
import ( import (
"database/sql" "database/sql"
"github.com/matrix-org/dendrite/common"
// Import the postgres database driver. // Import the postgres database driver.
_ "github.com/lib/pq" _ "github.com/lib/pq"
"github.com/matrix-org/dendrite/roomserver/types" "github.com/matrix-org/dendrite/roomserver/types"
@ -383,24 +381,35 @@ func (d *Database) StateEntriesForTuples(
} }
// MembershipUpdater implements input.RoomEventDatabase // MembershipUpdater implements input.RoomEventDatabase
func (d *Database) MembershipUpdater(roomID, targetUserID string) (updater types.MembershipUpdater, err error) { func (d *Database) MembershipUpdater(roomID, targetUserID string) (types.MembershipUpdater, error) {
err = common.WithTransaction(d.db, func(txn *sql.Tx) error { txn, err := d.db.Begin()
var ( if err != nil {
roomNID types.RoomNID return nil, err
targetUserNID types.EventStateKeyNID }
) succeeded := false
roomNID, err = d.assignRoomNID(txn, roomID) defer func() {
if err != nil { if !succeeded {
return err txn.Rollback()
} }
targetUserNID, err = d.assignStateKeyNID(txn, targetUserID) }()
if err != nil {
return err roomNID, err := d.assignRoomNID(txn, roomID)
} if err != nil {
updater, err = d.membershipUpdaterTxn(txn, roomNID, targetUserNID) return nil, err
return err }
})
return targetUserNID, err := d.assignStateKeyNID(txn, targetUserID)
if err != nil {
return nil, err
}
updater, err := d.membershipUpdaterTxn(txn, roomNID, targetUserNID)
if err != nil {
return nil, err
}
succeeded = true
return updater, nil
} }
type membershipUpdater struct { type membershipUpdater struct {