Skip to content

Commit 9dab17f

Browse files
author
ylembachar
committed
continue only when no rows are returned
1 parent bae90ac commit 9dab17f

File tree

2 files changed

+55
-2
lines changed

2 files changed

+55
-2
lines changed

rolling-shutter/keyperimpl/gnosis/syncmonitor.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package gnosis
22

33
import (
44
"context"
5+
"github.com/jackc/pgx/v4"
56
"time"
67

78
"github.com/jackc/pgx/v4/pgxpool"
@@ -35,9 +36,13 @@ func (s *SyncMonitor) runMonitor(ctx context.Context) error {
3536
select {
3637
case <-time.After(s.CheckInterval):
3738
record, err := db.GetTransactionSubmittedEventsSyncedUntil(ctx)
39+
3840
if err != nil {
39-
log.Warn().Err(err).Msg("error fetching block number")
40-
continue
41+
if errors.Is(err, pgx.ErrNoRows) {
42+
log.Warn().Err(err).Msg("no rows found in table transaction_submitted_events_synced_until")
43+
continue
44+
}
45+
return errors.Wrap(err, "error getting transaction_submitted_events_synced_until")
4146
}
4247

4348
currentBlockNumber := record.BlockNumber

rolling-shutter/keyperimpl/gnosis/syncmonitor_test.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,3 +147,51 @@ func TestSyncMonitor_HandlesBlockNumberIncreasing(t *testing.T) {
147147

148148
assert.Equal(t, initialBlockNumber+5, finalBlockNumber, "block number should have been incremented correctly")
149149
}
150+
151+
func TestSyncMonitor_ContinuesWhenNoRows(t *testing.T) {
152+
parentCtx, cancelParent := context.WithCancel(context.Background())
153+
defer cancelParent()
154+
155+
dbpool, closeDB := testsetup.NewTestDBPool(parentCtx, t, database.Definition)
156+
defer func() {
157+
closeDB()
158+
cancelParent()
159+
}()
160+
161+
_, err := dbpool.Exec(parentCtx, `
162+
CREATE TABLE IF NOT EXISTS transaction_submitted_events_synced_until(
163+
enforce_one_row bool PRIMARY KEY DEFAULT true,
164+
block_hash bytea NOT NULL,
165+
block_number bigint NOT NULL CHECK (block_number >= 0),
166+
slot bigint NOT NULL CHECK (slot >= 0)
167+
);
168+
`)
169+
if err != nil {
170+
t.Fatalf("failed to create table: %v", err)
171+
}
172+
173+
monitor := &gnosis.SyncMonitor{
174+
DBPool: dbpool,
175+
CheckInterval: 5 * time.Second,
176+
}
177+
178+
monitorCtx, cancelMonitor := context.WithCancel(parentCtx)
179+
defer cancelMonitor()
180+
181+
errCh := make(chan error, 1)
182+
go func() {
183+
err := service.RunWithSighandler(monitorCtx, monitor)
184+
if err != nil {
185+
errCh <- err
186+
}
187+
}()
188+
189+
time.Sleep(15 * time.Second)
190+
cancelMonitor()
191+
192+
select {
193+
case err := <-errCh:
194+
t.Fatalf("expected monitor to continue without error, but got: %v", err)
195+
case <-time.After(1 * time.Second):
196+
}
197+
}

0 commit comments

Comments
 (0)