Skip to content

Commit 0225d33

Browse files
authored
Merge pull request #593 from shutter-network/chore/sync-monitor-reorg-updates
updated sync monitor to not stop in case of reorg
2 parents 1a1372d + 46befa1 commit 0225d33

File tree

2 files changed

+54
-1
lines changed

2 files changed

+54
-1
lines changed

rolling-shutter/keyperimpl/shutterservice/syncmonitor.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,9 @@ func (s *SyncMonitor) runCheck(
7171
currentBlockNumber := record.BlockNumber
7272
log.Debug().Int64("current-block-number", currentBlockNumber).Msg("current block number")
7373

74-
if currentBlockNumber > *lastBlockNumber {
74+
// if the current block number < last block number, this means a reorg is detected, so we do not throw error
75+
// if the current block number > last block number, then syncing is working as expected
76+
if currentBlockNumber != *lastBlockNumber {
7577
*lastBlockNumber = currentBlockNumber
7678
return nil
7779
}

rolling-shutter/keyperimpl/shutterservice/syncmonitor_test.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,3 +138,54 @@ func TestAPISyncMonitor_ContinuesWhenNoRows(t *testing.T) {
138138
case <-time.After(1 * time.Second):
139139
}
140140
}
141+
142+
func TestAPISyncMonitor_HandlesReorg(t *testing.T) {
143+
ctx, cancel := context.WithCancel(context.Background())
144+
defer cancel()
145+
146+
dbpool, closeDB := testsetup.NewTestDBPool(ctx, t, database.Definition)
147+
defer closeDB()
148+
db := database.New(dbpool)
149+
150+
// Set up initial block at a higher number
151+
initialBlockNumber := int64(100)
152+
setupTestData(ctx, t, dbpool, initialBlockNumber)
153+
154+
monitor := &shutterservice.SyncMonitor{
155+
DBPool: dbpool,
156+
CheckInterval: 5 * time.Second,
157+
}
158+
159+
monitorCtx, cancelMonitor := context.WithCancel(ctx)
160+
defer cancelMonitor()
161+
162+
errCh := make(chan error, 1)
163+
go func() {
164+
err := service.RunWithSighandler(monitorCtx, monitor)
165+
if err != nil {
166+
errCh <- err
167+
}
168+
}()
169+
170+
// Decrease the block number
171+
decreasedBlockNumber := int64(50)
172+
err := db.SetIdentityRegisteredEventSyncedUntil(ctx, database.SetIdentityRegisteredEventSyncedUntilParams{
173+
BlockHash: []byte{0x01, 0x02, 0x03},
174+
BlockNumber: decreasedBlockNumber,
175+
})
176+
assert.NilError(t, err)
177+
178+
time.Sleep(4 * time.Second)
179+
cancelMonitor()
180+
181+
select {
182+
case err := <-errCh:
183+
t.Fatalf("expected monitor to continue without error, but got: %v", err)
184+
case <-time.After(1 * time.Second):
185+
}
186+
187+
// Verify the block number was updated to the latest value
188+
syncedData, err := db.GetIdentityRegisteredEventsSyncedUntil(ctx)
189+
assert.NilError(t, err)
190+
assert.Equal(t, decreasedBlockNumber, syncedData.BlockNumber, "block number should be updated to the decreased value")
191+
}

0 commit comments

Comments
 (0)