diff options
author | Neil Alexander <neilalexander@users.noreply.github.com> | 2020-08-20 09:24:52 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-20 09:24:52 +0100 |
commit | 5ad47d3b3dc79fc8c7c9255728710906b118e2d8 (patch) | |
tree | 6df47915bb85bbee3e3352b14db32b7862a20b37 | |
parent | f5edfb9659f97b564b490cbbc1118b380d6244cd (diff) |
Fix more roomserver transactions/locks (#1287)
* Fix transaction to InsertTransaction
* Remove unnecessary txn, add txns around setting up updaters
-rw-r--r-- | roomserver/storage/shared/storage.go | 45 |
1 files changed, 26 insertions, 19 deletions
diff --git a/roomserver/storage/shared/storage.go b/roomserver/storage/shared/storage.go index 45020d55..766d4f20 100644 --- a/roomserver/storage/shared/storage.go +++ b/roomserver/storage/shared/storage.go @@ -179,22 +179,19 @@ func (d *Database) RoomNIDExcludingStubs(ctx context.Context, roomID string) (ro func (d *Database) LatestEventIDs( ctx context.Context, roomNID types.RoomNID, ) (references []gomatrixserverlib.EventReference, currentStateSnapshotNID types.StateSnapshotNID, depth int64, err error) { - err = sqlutil.WithTransaction(d.DB, func(txn *sql.Tx) error { - var eventNIDs []types.EventNID - eventNIDs, currentStateSnapshotNID, err = d.RoomsTable.SelectLatestEventNIDs(ctx, txn, roomNID) - if err != nil { - return err - } - references, err = d.EventsTable.BulkSelectEventReference(ctx, txn, eventNIDs) - if err != nil { - return err - } - depth, err = d.EventsTable.SelectMaxEventDepth(ctx, txn, eventNIDs) - if err != nil { - return err - } - return nil - }) + var eventNIDs []types.EventNID + eventNIDs, currentStateSnapshotNID, err = d.RoomsTable.SelectLatestEventNIDs(ctx, nil, roomNID) + if err != nil { + return + } + references, err = d.EventsTable.BulkSelectEventReference(ctx, nil, eventNIDs) + if err != nil { + return + } + depth, err = d.EventsTable.SelectMaxEventDepth(ctx, nil, eventNIDs) + if err != nil { + return + } return } @@ -351,7 +348,12 @@ func (d *Database) MembershipUpdater( if err != nil { return nil, err } - return NewMembershipUpdater(ctx, d, txn, roomID, targetUserID, targetLocal, roomVersion) + var updater *MembershipUpdater + _ = d.Writer.Do(d.DB, txn, func(txn *sql.Tx) error { + updater, err = NewMembershipUpdater(ctx, d, txn, roomID, targetUserID, targetLocal, roomVersion) + return nil + }) + return updater, err } func (d *Database) GetLatestEventsForUpdate( @@ -361,7 +363,12 @@ func (d *Database) GetLatestEventsForUpdate( if err != nil { return nil, err } - return NewLatestEventsUpdater(ctx, d, txn, roomNID) + var updater *LatestEventsUpdater + _ = d.Writer.Do(d.DB, txn, func(txn *sql.Tx) error { + updater, err = NewLatestEventsUpdater(ctx, d, txn, roomNID) + return nil + }) + return updater, err } // nolint:gocyclo @@ -383,7 +390,7 @@ func (d *Database) StoreEvent( err = d.Writer.Do(d.DB, nil, func(txn *sql.Tx) error { if txnAndSessionID != nil { if err = d.TransactionsTable.InsertTransaction( - ctx, nil, txnAndSessionID.TransactionID, + ctx, txn, txnAndSessionID.TransactionID, txnAndSessionID.SessionID, event.Sender(), event.EventID(), ); err != nil { return fmt.Errorf("d.TransactionsTable.InsertTransaction: %w", err) |