mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-13 01:43:09 -06:00
Fix MembershipUpdater method to not commit the transaction before returning it
This commit is contained in:
parent
6d69180fc9
commit
76c7f176e0
|
|
@ -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 {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue