From 34b89619f268143589c230252316057ea15363bd Mon Sep 17 00:00:00 2001 From: Kegan Dougal Date: Wed, 9 Sep 2020 16:53:21 +0100 Subject: [PATCH] Fix sqlite DeletePeeks API to match postgres; fix bug which incorrectly altered sp when nothing is deleted --- syncapi/consumers/roomserver.go | 10 ++++++---- syncapi/storage/shared/syncserver.go | 1 + syncapi/storage/sqlite3/peeks_table.go | 20 +++++++++++++++----- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/syncapi/consumers/roomserver.go b/syncapi/consumers/roomserver.go index 404f28b9c..b6ab9bd50 100644 --- a/syncapi/consumers/roomserver.go +++ b/syncapi/consumers/roomserver.go @@ -216,10 +216,12 @@ func (s *OutputRoomEventConsumer) notifyJoinedPeeks(ctx context.Context, ev *gom } // cancel any peeks for it - sp, err = s.db.DeletePeeks(ctx, ev.RoomID(), *ev.StateKey()) - // XXX: should we do anything with this new streampos? - if err != nil { - return sp, fmt.Errorf("s.db.DeletePeeks: %w", err) + peekSP, peekErr := s.db.DeletePeeks(ctx, ev.RoomID(), *ev.StateKey()) + if peekErr != nil { + return sp, fmt.Errorf("s.db.DeletePeeks: %w", peekErr) + } + if peekSP > 0 { + sp = peekSP } } return sp, nil diff --git a/syncapi/storage/shared/syncserver.go b/syncapi/storage/shared/syncserver.go index 38362cc35..bb91309cb 100644 --- a/syncapi/storage/shared/syncserver.go +++ b/syncapi/storage/shared/syncserver.go @@ -187,6 +187,7 @@ func (d *Database) DeletePeeks( return err }) if err == sql.ErrNoRows { + sp = 0 err = nil } return diff --git a/syncapi/storage/sqlite3/peeks_table.go b/syncapi/storage/sqlite3/peeks_table.go index add1b4ff3..409b03019 100644 --- a/syncapi/storage/sqlite3/peeks_table.go +++ b/syncapi/storage/sqlite3/peeks_table.go @@ -129,13 +129,23 @@ func (s *peekStatements) DeletePeek( func (s *peekStatements) DeletePeeks( ctx context.Context, txn *sql.Tx, roomID, userID string, -) (streamPos types.StreamPosition, err error) { - streamPos, err = s.streamIDStatements.nextStreamID(ctx, txn) +) (types.StreamPosition, error) { + streamPos, err := s.streamIDStatements.nextStreamID(ctx, txn) if err != nil { - return + return 0, err } - _, err = sqlutil.TxStmt(txn, s.deletePeeksStmt).ExecContext(ctx, streamPos, roomID, userID) - return + result, err := sqlutil.TxStmt(txn, s.deletePeeksStmt).ExecContext(ctx, streamPos, roomID, userID) + if err != nil { + return 0, err + } + numAffected, err := result.RowsAffected() + if err != nil { + return 0, err + } + if numAffected == 0 { + return 0, sql.ErrNoRows + } + return streamPos, nil } func (s *peekStatements) SelectPeeksInRange(