Wrap NewMembershipUpdater in a db writer
MODIFY
internal/sqlutil/trace.go
internal/sqlutil/trace.go
@@ -93,7 +93,7 @@ func trackGoID(query string) {
if strings.HasPrefix(q, "SELECT") {
return // SELECTs can go on other goroutines
}
- logrus.Warnf("unsafe goid: SQL executed not on an ExclusiveWriter: %s", q)
+ logrus.Warnf("unsafe goid %d: SQL executed not on an ExclusiveWriter: %s", thisGoID, q)
}
// Open opens a database specified by its database driver name and a driver-specific data source name,

MODIFY
roomserver/storage/shared/membership_updater.go
roomserver/storage/shared/membership_updater.go
@@ -22,12 +22,21 @@ func NewMembershipUpdater(
ctx context.Context, d *Database, txn *sql.Tx, roomID, targetUserID string,
targetLocal bool, roomVersion gomatrixserverlib.RoomVersion,
) (*MembershipUpdater, error) {
- roomNID, err := d.assignRoomNID(ctx, txn, roomID, roomVersion)
+ var roomNID types.RoomNID
+ var targetUserNID types.EventStateKeyNID
+ var err error
+ err = d.Writer.Do(d.DB, txn, func(txn *sql.Tx) error {
+ roomNID, err = d.assignRoomNID(ctx, txn, roomID, roomVersion)
if err != nil {
- return nil, err
+ return err
}
- targetUserNID, err := d.assignStateKeyNID(ctx, txn, targetUserID)
+ targetUserNID, err = d.assignStateKeyNID(ctx, txn, targetUserID)
+ if err != nil {
+ return err
+ }
+ return nil
+ })
if err != nil {
return nil, err
}

Wrap NewMembershipUpdater in a db writer (#1515)