From ae911947fb4acb1326550060fd4232f64a8ae686 Mon Sep 17 00:00:00 2001 From: begmaroman Date: Mon, 18 Mar 2024 12:40:26 -0500 Subject: [PATCH 1/3] Imporovements --- sequencer/tracker.go | 122 ++++++++++++++++++++----------------------- 1 file changed, 58 insertions(+), 64 deletions(-) diff --git a/sequencer/tracker.go b/sequencer/tracker.go index 071a3cb3..235d6792 100644 --- a/sequencer/tracker.go +++ b/sequencer/tracker.go @@ -5,6 +5,8 @@ import ( "sync" "time" + "github.com/ethereum/go-ethereum/event" + "github.com/0xPolygon/cdk-data-availability/config" "github.com/0xPolygon/cdk-data-availability/etherman" "github.com/0xPolygon/cdk-data-availability/etherman/smartcontracts/polygonvalidium" @@ -96,45 +98,41 @@ func (st *Tracker) trackAddrChanges(ctx context.Context) { events := make(chan *polygonvalidium.PolygonvalidiumSetTrustedSequencer) defer close(events) + ctx, cancel := context.WithTimeout(ctx, st.timeout) + defer cancel() + + var sub event.Subscription + + initSubscription := func() { + var err error + for sub, err = st.client.WatchSetTrustedSequencer(ctx, events); err != nil; { + <-time.After(st.retry) + + if sub, err = st.client.WatchSetTrustedSequencer(ctx, events); err != nil { + log.Errorf("error subscribing to trusted sequencer event, retrying: %v", err) + } + } + } + + initSubscription() + for { select { + case e := <-events: + log.Infof("new trusted sequencer address: %v", e.NewTrustedSequencer) + st.setAddr(e.NewTrustedSequencer) case <-ctx.Done(): if ctx.Err() != nil && ctx.Err() != context.DeadlineExceeded { log.Warnf("context cancelled: %v", ctx.Err()) } - default: - ctx, cancel := context.WithTimeout(ctx, st.timeout) - - sub, err := st.client.WatchSetTrustedSequencer(ctx, events) - - // if no subscription, retry until established - for err != nil { - <-time.After(st.retry) - - if sub, err = st.client.WatchSetTrustedSequencer(ctx, events); err != nil { - log.Errorf("error subscribing to trusted sequencer event, retrying: %v", err) - } - } - - // wait on events, timeouts, and signals to stop - select { - case e := <-events: - log.Infof("new trusted sequencer address: %v", e.NewTrustedSequencer) - st.setAddr(e.NewTrustedSequencer) - case err := <-sub.Err(): - log.Warnf("subscription error, resubscribing: %v", err) - case <-ctx.Done(): - // Deadline exceeded is expected since we use finite context timeout - if ctx.Err() != nil && ctx.Err() != context.DeadlineExceeded { - log.Warnf("re-establishing subscription: %v", ctx.Err()) - } - case <-st.stop: - if sub != nil { - sub.Unsubscribe() - } - cancel() - return + case err := <-sub.Err(): + log.Warnf("subscription error, resubscribing: %v", err) + initSubscription() + case <-st.stop: + if sub != nil { + sub.Unsubscribe() } + return } } } @@ -143,45 +141,41 @@ func (st *Tracker) trackUrlChanges(ctx context.Context) { events := make(chan *polygonvalidium.PolygonvalidiumSetTrustedSequencerURL) defer close(events) + ctx, cancel := context.WithTimeout(ctx, st.timeout) + defer cancel() + + var sub event.Subscription + + initSubscription := func() { + var err error + for sub, err = st.client.WatchSetTrustedSequencerURL(ctx, events); err != nil; { + <-time.After(st.retry) + + if sub, err = st.client.WatchSetTrustedSequencerURL(ctx, events); err != nil { + log.Errorf("error subscribing to trusted sequencer event, retrying: %v", err) + } + } + } + + initSubscription() + for { select { + case e := <-events: + log.Infof("new trusted sequencer url: %v", e.NewTrustedSequencerURL) + st.setUrl(e.NewTrustedSequencerURL) case <-ctx.Done(): if ctx.Err() != nil && ctx.Err() != context.DeadlineExceeded { log.Warnf("context cancelled: %v", ctx.Err()) } - default: - ctx, cancel := context.WithTimeout(ctx, st.timeout) - - sub, err := st.client.WatchSetTrustedSequencerURL(ctx, events) - - // if no subscription, retry until established - for err != nil { - <-time.After(st.retry) - - if sub, err = st.client.WatchSetTrustedSequencerURL(ctx, events); err != nil { - log.Errorf("error subscribing to trusted sequencer event, retrying: %v", err) - } - } - - // wait on events, timeouts, and signals to stop - select { - case e := <-events: - log.Infof("new trusted sequencer url: %v", e.NewTrustedSequencerURL) - st.setUrl(e.NewTrustedSequencerURL) - case err := <-sub.Err(): - log.Warnf("subscription error, resubscribing: %v", err) - case <-ctx.Done(): - // Deadline exceeded is expected since we use finite context timeout - if ctx.Err() != nil && ctx.Err() != context.DeadlineExceeded { - log.Warnf("re-establishing subscription: %v", ctx.Err()) - } - case <-st.stop: - if sub != nil { - sub.Unsubscribe() - } - cancel() - return + case err := <-sub.Err(): + log.Warnf("subscription error, resubscribing: %v", err) + initSubscription() + case <-st.stop: + if sub != nil { + sub.Unsubscribe() } + return } } } From 1d1354402ed3c7f5ce8ccf594d1383fbb83821b7 Mon Sep 17 00:00:00 2001 From: begmaroman Date: Mon, 18 Mar 2024 12:41:52 -0500 Subject: [PATCH 2/3] Imporovements --- sequencer/tracker.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sequencer/tracker.go b/sequencer/tracker.go index 235d6792..c6e850c0 100644 --- a/sequencer/tracker.go +++ b/sequencer/tracker.go @@ -5,13 +5,13 @@ import ( "sync" "time" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/event" "github.com/0xPolygon/cdk-data-availability/config" "github.com/0xPolygon/cdk-data-availability/etherman" "github.com/0xPolygon/cdk-data-availability/etherman/smartcontracts/polygonvalidium" "github.com/0xPolygon/cdk-data-availability/log" - "github.com/ethereum/go-ethereum/common" ) // Tracker watches the contract for relevant changes to the sequencer From 780cb85f2442b7a5bf2277b29f636b0af633de86 Mon Sep 17 00:00:00 2001 From: begmaroman Date: Mon, 18 Mar 2024 12:44:23 -0500 Subject: [PATCH 3/3] Fixed linter --- sequencer/tracker.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/sequencer/tracker.go b/sequencer/tracker.go index c6e850c0..9c9c78b5 100644 --- a/sequencer/tracker.go +++ b/sequencer/tracker.go @@ -5,13 +5,12 @@ import ( "sync" "time" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/event" - "github.com/0xPolygon/cdk-data-availability/config" "github.com/0xPolygon/cdk-data-availability/etherman" "github.com/0xPolygon/cdk-data-availability/etherman/smartcontracts/polygonvalidium" "github.com/0xPolygon/cdk-data-availability/log" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/event" ) // Tracker watches the contract for relevant changes to the sequencer