Skip to content

Commit 722f022

Browse files
Merge pull request #590 from shutter-network/feat/api-sync-monitor
update sync monitor to not check for dkg and ws error to panic keyper
2 parents b36ce00 + e964fde commit 722f022

File tree

6 files changed

+11
-228
lines changed

6 files changed

+11
-228
lines changed

rolling-shutter/keyperimpl/shutterservice/syncmonitor.go

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -59,15 +59,6 @@ func (s *SyncMonitor) runCheck(
5959
keyperdb *keyperDB.Queries,
6060
lastBlockNumber *int64,
6161
) error {
62-
isRunning, err := s.isDKGRunning(ctx, keyperdb)
63-
if err != nil {
64-
return fmt.Errorf("syncMonitor | error in dkgIsRunning: %w", err)
65-
}
66-
if isRunning {
67-
log.Debug().Msg("dkg is running, skipping sync monitor checks")
68-
return nil
69-
}
70-
7162
record, err := db.GetIdentityRegisteredEventsSyncedUntil(ctx)
7263
if err != nil {
7364
if errors.Is(err, pgx.ErrNoRows) {
@@ -91,31 +82,3 @@ func (s *SyncMonitor) runCheck(
9182
Msg("block number has not increased between checks")
9283
return ErrBlockNotIncreasing
9384
}
94-
95-
func (s *SyncMonitor) isDKGRunning(ctx context.Context, keyperdb *keyperDB.Queries) (bool, error) {
96-
// if latest eon is registered then EonStarted event has triggered, which means the dkg can start
97-
eons, err := keyperdb.GetAllEons(ctx)
98-
if errors.Is(err, pgx.ErrNoRows) {
99-
return false, nil
100-
}
101-
if err != nil {
102-
log.Error().
103-
Err(err).
104-
Msg("syncMonitor | error getting all eons")
105-
return false, err
106-
}
107-
108-
if len(eons) == 0 {
109-
return false, nil
110-
}
111-
112-
// if we get no rows in getting dkg result then dkg is not completed for that eon
113-
_, err = keyperdb.GetDKGResult(ctx, eons[len(eons)-1].Eon)
114-
if errors.Is(err, pgx.ErrNoRows) {
115-
return true, nil
116-
} else if err != nil {
117-
log.Error().Err(err).Msg("syncMonitor | error getting dkg result")
118-
return false, err
119-
}
120-
return false, nil
121-
}

rolling-shutter/keyperimpl/shutterservice/syncmonitor_test.go

Lines changed: 1 addition & 186 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import (
88
"github.com/jackc/pgx/v4/pgxpool"
99
"gotest.tools/assert"
1010

11-
keyperDB "github.com/shutter-network/rolling-shutter/rolling-shutter/keyper/database"
1211
"github.com/shutter-network/rolling-shutter/rolling-shutter/keyperimpl/shutterservice"
1312
"github.com/shutter-network/rolling-shutter/rolling-shutter/keyperimpl/shutterservice/database"
1413
"github.com/shutter-network/rolling-shutter/rolling-shutter/medley/service"
@@ -18,23 +17,9 @@ import (
1817
func setupTestData(ctx context.Context, t *testing.T, dbpool *pgxpool.Pool, blockNumber int64) {
1918
t.Helper()
2019
db := database.New(dbpool)
21-
keyperdb := keyperDB.New(dbpool)
22-
23-
// Set up eon
24-
err := keyperdb.InsertEon(ctx, keyperDB.InsertEonParams{
25-
Eon: 1,
26-
})
27-
assert.NilError(t, err)
28-
29-
// Set up DKG result
30-
err = keyperdb.InsertDKGResult(ctx, keyperDB.InsertDKGResultParams{
31-
Eon: 1,
32-
Success: true,
33-
})
34-
assert.NilError(t, err)
3520

3621
// Set up initial block
37-
err = db.SetIdentityRegisteredEventSyncedUntil(ctx, database.SetIdentityRegisteredEventSyncedUntilParams{
22+
err := db.SetIdentityRegisteredEventSyncedUntil(ctx, database.SetIdentityRegisteredEventSyncedUntilParams{
3823
BlockHash: []byte{0x01, 0x02, 0x03},
3924
BlockNumber: blockNumber,
4025
})
@@ -121,132 +106,13 @@ func TestAPISyncMonitor_HandlesBlockNumberIncreasing(t *testing.T) {
121106
assert.Equal(t, initialBlockNumber+5, syncedData.BlockNumber, "block number should have been incremented correctly")
122107
}
123108

124-
func TestAPISyncMonitor_SkipsWhenDKGIsRunning(t *testing.T) {
125-
ctx, cancel := context.WithCancel(context.Background())
126-
defer cancel()
127-
128-
dbpool, closeDB := testsetup.NewTestDBPool(ctx, t, database.Definition)
129-
defer closeDB()
130-
db := database.New(dbpool)
131-
keyperdb := keyperDB.New(dbpool)
132-
133-
// Set up eon but no DKG result to simulate DKG running
134-
err := keyperdb.InsertEon(ctx, keyperDB.InsertEonParams{
135-
Eon: 1,
136-
})
137-
assert.NilError(t, err)
138-
139-
// Set up initial block data
140-
initialBlockNumber := int64(100)
141-
err = db.SetIdentityRegisteredEventSyncedUntil(ctx, database.SetIdentityRegisteredEventSyncedUntilParams{
142-
BlockHash: []byte{0x01, 0x02, 0x03},
143-
BlockNumber: initialBlockNumber,
144-
})
145-
assert.NilError(t, err)
146-
147-
monitor := &shutterservice.SyncMonitor{
148-
DBPool: dbpool,
149-
CheckInterval: 5 * time.Second,
150-
}
151-
152-
monitorCtx, cancelMonitor := context.WithCancel(ctx)
153-
defer cancelMonitor()
154-
155-
errCh := make(chan error, 1)
156-
go func() {
157-
err := service.RunWithSighandler(monitorCtx, monitor)
158-
if err != nil {
159-
errCh <- err
160-
}
161-
}()
162-
163-
// Let it run for a while without incrementing the block number
164-
time.Sleep(15 * time.Second)
165-
cancelMonitor()
166-
167-
select {
168-
case err := <-errCh:
169-
t.Fatalf("expected monitor to continue without error, but got: %v", err)
170-
case <-time.After(1 * time.Second):
171-
// Test passes if no error is received
172-
}
173-
174-
// Verify the block number hasn't changed
175-
syncedData, err := db.GetIdentityRegisteredEventsSyncedUntil(ctx)
176-
assert.NilError(t, err)
177-
assert.Equal(t, initialBlockNumber, syncedData.BlockNumber, "block number should remain unchanged")
178-
}
179-
180-
func TestAPISyncMonitor_RunsNormallyWhenNoEons(t *testing.T) {
181-
ctx, cancel := context.WithCancel(context.Background())
182-
defer cancel()
183-
184-
dbpool, closeDB := testsetup.NewTestDBPool(ctx, t, database.Definition)
185-
defer closeDB()
186-
db := database.New(dbpool)
187-
188-
// Only set up initial block data, no eon entries
189-
initialBlockNumber := int64(100)
190-
err := db.SetIdentityRegisteredEventSyncedUntil(ctx, database.SetIdentityRegisteredEventSyncedUntilParams{
191-
BlockHash: []byte{0x01, 0x02, 0x03},
192-
BlockNumber: initialBlockNumber,
193-
})
194-
assert.NilError(t, err)
195-
196-
monitor := &shutterservice.SyncMonitor{
197-
DBPool: dbpool,
198-
CheckInterval: 5 * time.Second,
199-
}
200-
201-
monitorCtx, cancelMonitor := context.WithCancel(ctx)
202-
defer cancelMonitor()
203-
204-
errCh := make(chan error, 1)
205-
go func() {
206-
err := service.RunWithSighandler(monitorCtx, monitor)
207-
if err != nil {
208-
errCh <- err
209-
}
210-
}()
211-
212-
// Let it run for a while without incrementing the block number
213-
time.Sleep(15 * time.Second)
214-
cancelMonitor()
215-
216-
select {
217-
case err := <-errCh:
218-
assert.ErrorContains(t, err, shutterservice.ErrBlockNotIncreasing.Error())
219-
case <-time.After(1 * time.Second):
220-
t.Fatalf("expected monitor to throw error, but no error returned")
221-
}
222-
223-
// Verify the block number hasn't changed
224-
syncedData, err := db.GetIdentityRegisteredEventsSyncedUntil(ctx)
225-
assert.NilError(t, err)
226-
assert.Equal(t, initialBlockNumber, syncedData.BlockNumber, "block number should remain unchanged")
227-
}
228-
229109
func TestAPISyncMonitor_ContinuesWhenNoRows(t *testing.T) {
230110
ctx, cancel := context.WithCancel(context.Background())
231111
defer cancel()
232112

233113
dbpool, closeDB := testsetup.NewTestDBPool(ctx, t, database.Definition)
234114
defer closeDB()
235115

236-
// Set up eon and DKG result, but no block data
237-
keyperdb := keyperDB.New(dbpool)
238-
239-
err := keyperdb.InsertEon(ctx, keyperDB.InsertEonParams{
240-
Eon: 1,
241-
})
242-
assert.NilError(t, err)
243-
244-
err = keyperdb.InsertDKGResult(ctx, keyperDB.InsertDKGResultParams{
245-
Eon: 1,
246-
Success: true,
247-
})
248-
assert.NilError(t, err)
249-
250116
monitor := &shutterservice.SyncMonitor{
251117
DBPool: dbpool,
252118
CheckInterval: 5 * time.Second,
@@ -272,54 +138,3 @@ func TestAPISyncMonitor_ContinuesWhenNoRows(t *testing.T) {
272138
case <-time.After(1 * time.Second):
273139
}
274140
}
275-
276-
func TestAPISyncMonitor_RunsNormallyWithCompletedDKG(t *testing.T) {
277-
ctx, cancel := context.WithCancel(context.Background())
278-
defer cancel()
279-
280-
dbpool, closeDB := testsetup.NewTestDBPool(ctx, t, database.Definition)
281-
defer closeDB()
282-
db := database.New(dbpool)
283-
284-
initialBlockNumber := int64(100)
285-
setupTestData(ctx, t, dbpool, initialBlockNumber)
286-
287-
// Set up initial block data
288-
err := db.SetIdentityRegisteredEventSyncedUntil(ctx, database.SetIdentityRegisteredEventSyncedUntilParams{
289-
BlockHash: []byte{0x01, 0x02, 0x03},
290-
BlockNumber: initialBlockNumber,
291-
})
292-
assert.NilError(t, err)
293-
294-
monitor := &shutterservice.SyncMonitor{
295-
DBPool: dbpool,
296-
CheckInterval: 5 * time.Second,
297-
}
298-
299-
monitorCtx, cancelMonitor := context.WithCancel(ctx)
300-
defer cancelMonitor()
301-
302-
errCh := make(chan error, 1)
303-
go func() {
304-
err := service.RunWithSighandler(monitorCtx, monitor)
305-
if err != nil {
306-
errCh <- err
307-
}
308-
}()
309-
310-
// Let it run for a while without incrementing the block number
311-
time.Sleep(15 * time.Second)
312-
cancelMonitor()
313-
314-
select {
315-
case err := <-errCh:
316-
assert.ErrorContains(t, err, shutterservice.ErrBlockNotIncreasing.Error())
317-
case <-time.After(1 * time.Second):
318-
t.Fatalf("expected monitor to throw error, but no error returned")
319-
}
320-
321-
// Verify the block number hasn't changed
322-
syncedData, err := db.GetIdentityRegisteredEventsSyncedUntil(ctx)
323-
assert.NilError(t, err)
324-
assert.Equal(t, initialBlockNumber, syncedData.BlockNumber, "block number should remain unchanged")
325-
}

rolling-shutter/medley/chainsync/syncer/eonpubkey.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,8 @@ func (s *EonPubKeySyncer) watchNewEonPubkey(ctx context.Context, subsErr <-chan
149149
}
150150
case err := <-subsErr:
151151
if err != nil {
152-
s.Log.Error("subscription error for watchNewEonPubkey", err)
152+
s.Log.Error("subscription error for watchNewEonPubkey", err.Error())
153+
return err
153154
}
154155
case <-ctx.Done():
155156
return ctx.Err()

rolling-shutter/medley/chainsync/syncer/keyperset.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,8 @@ func (s *KeyperSetSyncer) watchNewKeypersService(ctx context.Context, subsErr <-
236236
}
237237
case err := <-subsErr:
238238
if err != nil {
239-
s.Log.Error("subscription error for watchNewKeypersService", err)
239+
s.Log.Error("subscription error for watchNewKeypersService", err.Error())
240+
return err
240241
}
241242
case <-ctx.Done():
242243
return ctx.Err()

rolling-shutter/medley/chainsync/syncer/shutterstate.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,11 +125,13 @@ func (s *ShutterStateSyncer) watchPaused(ctx context.Context, subsErr <-chan err
125125
s.handle(ctx, ev)
126126
case err := <-subsErr:
127127
if err != nil {
128-
s.Log.Error("subscription error for watchPaused")
128+
s.Log.Error("subscription error for watchPaused", err.Error())
129+
return err
129130
}
130131
case err := <-subsErrUnpaused:
131132
if err != nil {
132-
s.Log.Error("subscription error for watchUnpaused", err)
133+
s.Log.Error("subscription error for watchUnpaused", err.Error())
134+
return err
133135
}
134136
case <-ctx.Done():
135137
return ctx.Err()

rolling-shutter/medley/chainsync/syncer/unsafehead.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,8 @@ func (s *UnsafeHeadSyncer) watchLatestUnsafeHead(ctx context.Context, subsErr <-
6060
}
6161
case err := <-subsErr:
6262
if err != nil {
63-
s.Log.Error("subscription error for watchLatestUnsafeHead", err)
63+
s.Log.Error("subscription error for watchLatestUnsafeHead", err.Error())
64+
return err
6465
}
6566
case <-ctx.Done():
6667
return ctx.Err()

0 commit comments

Comments
 (0)