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 (
roomNID types.RoomNID
targetUserNID types.EventStateKeyNID
)
roomNID, err = d.assignRoomNID(txn, roomID)
if err != nil { if err != nil {
return err return nil, err
} }
targetUserNID, err = d.assignStateKeyNID(txn, targetUserID) succeeded := false
defer func() {
if !succeeded {
txn.Rollback()
}
}()
roomNID, err := d.assignRoomNID(txn, roomID)
if err != nil { if err != nil {
return err return nil, err
} }
updater, err = d.membershipUpdaterTxn(txn, roomNID, targetUserNID)
return err targetUserNID, err := d.assignStateKeyNID(txn, targetUserID)
}) if err != nil {
return 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 {