From 150121d39ae4634e5c4b4f58449462bb4a2c034c Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Tue, 18 Aug 2020 09:33:43 +0100 Subject: [PATCH] Fix deadlocking Sync API tests --- syncapi/storage/shared/syncserver.go | 6 +---- syncapi/storage/sqlite3/invites_table.go | 23 ++++++++----------- .../sqlite3/output_room_events_table.go | 10 ++++---- 3 files changed, 15 insertions(+), 24 deletions(-) diff --git a/syncapi/storage/shared/syncserver.go b/syncapi/storage/shared/syncserver.go index fdbf6758d..d94df0dbb 100644 --- a/syncapi/storage/shared/syncserver.go +++ b/syncapi/storage/shared/syncserver.go @@ -171,11 +171,7 @@ func (d *Database) SyncStreamPosition(ctx context.Context) (types.StreamPosition func (d *Database) AddInviteEvent( ctx context.Context, inviteEvent gomatrixserverlib.HeaderedEvent, ) (sp types.StreamPosition, err error) { - err = sqlutil.WithTransaction(d.DB, func(txn *sql.Tx) error { - sp, err = d.Invites.InsertInviteEvent(ctx, txn, inviteEvent) - return err - }) - return + return d.Invites.InsertInviteEvent(ctx, nil, inviteEvent) } // RetireInviteEvent removes an old invite event from the database. diff --git a/syncapi/storage/sqlite3/invites_table.go b/syncapi/storage/sqlite3/invites_table.go index 8951f01b2..0a1b71396 100644 --- a/syncapi/storage/sqlite3/invites_table.go +++ b/syncapi/storage/sqlite3/invites_table.go @@ -95,13 +95,12 @@ func NewSqliteInvitesTable(db *sql.DB, writer sqlutil.TransactionWriter, streamI func (s *inviteEventsStatements) InsertInviteEvent( ctx context.Context, txn *sql.Tx, inviteEvent gomatrixserverlib.HeaderedEvent, ) (streamPos types.StreamPosition, err error) { - err = s.writer.Do(s.db, txn, func(txn *sql.Tx) error { - var err error - streamPos, err = s.streamIDStatements.nextStreamID(ctx, txn) - if err != nil { - return err - } + streamPos, err = s.streamIDStatements.nextStreamID(ctx, txn) + if err != nil { + return + } + err = s.writer.Do(s.db, txn, func(txn *sql.Tx) error { var headeredJSON []byte headeredJSON, err = json.Marshal(inviteEvent) if err != nil { @@ -124,13 +123,11 @@ func (s *inviteEventsStatements) InsertInviteEvent( func (s *inviteEventsStatements) DeleteInviteEvent( ctx context.Context, inviteEventID string, ) (types.StreamPosition, error) { - var streamPos types.StreamPosition - err := s.writer.Do(s.db, nil, func(txn *sql.Tx) error { - var err error - streamPos, err = s.streamIDStatements.nextStreamID(ctx, nil) - if err != nil { - return err - } + streamPos, err := s.streamIDStatements.nextStreamID(ctx, nil) + if err != nil { + return streamPos, err + } + err = s.writer.Do(s.db, nil, func(txn *sql.Tx) error { _, err = s.deleteInviteEventStmt.ExecContext(ctx, streamPos, inviteEventID) return err }) diff --git a/syncapi/storage/sqlite3/output_room_events_table.go b/syncapi/storage/sqlite3/output_room_events_table.go index 84e567dcf..e4fb09d92 100644 --- a/syncapi/storage/sqlite3/output_room_events_table.go +++ b/syncapi/storage/sqlite3/output_room_events_table.go @@ -304,13 +304,11 @@ func (s *outputRoomEventsStatements) InsertEvent( return 0, err } - var streamPos types.StreamPosition + streamPos, err := s.streamIDStatements.nextStreamID(ctx, txn) + if err != nil { + return 0, err + } err = s.writer.Do(s.db, txn, func(txn *sql.Tx) error { - streamPos, err = s.streamIDStatements.nextStreamID(ctx, txn) - if err != nil { - return err - } - insertStmt := sqlutil.TxStmt(txn, s.insertEventStmt) _, ierr := insertStmt.ExecContext( ctx,