diff --git a/.changeset/stupid-apples-glow.md b/.changeset/stupid-apples-glow.md new file mode 100644 index 0000000000000..c856a9ca74797 --- /dev/null +++ b/.changeset/stupid-apples-glow.md @@ -0,0 +1,5 @@ +--- +'@eth-optimism/indexer': patch +--- + +fix context reuse diff --git a/go/indexer/services/l1/bridge/eth_bridge.go b/go/indexer/services/l1/bridge/eth_bridge.go index 0004c27ebfb3e..6ea9a4e4a1843 100644 --- a/go/indexer/services/l1/bridge/eth_bridge.go +++ b/go/indexer/services/l1/bridge/eth_bridge.go @@ -24,10 +24,9 @@ func (e *EthBridge) Address() common.Address { func (e *EthBridge) GetDepositsByBlockRange(start, end uint64) (DepositsMap, error) { depositsByBlockhash := make(DepositsMap) - iter, err := FilterETHDepositInitiatedWithRetry(e.filterer, &bind.FilterOpts{ - Start: start, - End: &end, - Context: e.ctx, + iter, err := FilterETHDepositInitiatedWithRetry(e.ctx, e.filterer, &bind.FilterOpts{ + Start: start, + End: &end, }) if err != nil { logger.Error("Error fetching filter", "err", err) diff --git a/go/indexer/services/l1/bridge/filter.go b/go/indexer/services/l1/bridge/filter.go index f9b6f34555d39..14800f54de74a 100644 --- a/go/indexer/services/l1/bridge/filter.go +++ b/go/indexer/services/l1/bridge/filter.go @@ -15,54 +15,48 @@ var clientRetryInterval = 5 * time.Second // FilterStateBatchAppendedWithRetry retries the given func until it succeeds, // waiting for clientRetryInterval duration after every call. -func FilterStateBatchAppendedWithRetry(filterer *scc.StateCommitmentChainFilterer, opts *bind.FilterOpts) (*scc.StateCommitmentChainStateBatchAppendedIterator, error) { +func FilterStateBatchAppendedWithRetry(ctx context.Context, filterer *scc.StateCommitmentChainFilterer, opts *bind.FilterOpts) (*scc.StateCommitmentChainStateBatchAppendedIterator, error) { for { - ctxt, cancel := context.WithTimeout(opts.Context, DefaultConnectionTimeout) + ctxt, cancel := context.WithTimeout(ctx, DefaultConnectionTimeout) opts.Context = ctxt res, err := filterer.FilterStateBatchAppended(opts, nil) - switch err { - case nil: - cancel() - return res, err - default: - logger.Error("Error fetching filter", "err", err) + cancel() + if err == nil { + return res, nil } + logger.Error("Error fetching filter", "err", err) time.Sleep(clientRetryInterval) } } // FilterETHDepositInitiatedWithRetry retries the given func until it succeeds, // waiting for clientRetryInterval duration after every call. -func FilterETHDepositInitiatedWithRetry(filterer *l1bridge.L1StandardBridgeFilterer, opts *bind.FilterOpts) (*l1bridge.L1StandardBridgeETHDepositInitiatedIterator, error) { +func FilterETHDepositInitiatedWithRetry(ctx context.Context, filterer *l1bridge.L1StandardBridgeFilterer, opts *bind.FilterOpts) (*l1bridge.L1StandardBridgeETHDepositInitiatedIterator, error) { for { - ctxt, cancel := context.WithTimeout(opts.Context, DefaultConnectionTimeout) + ctxt, cancel := context.WithTimeout(ctx, DefaultConnectionTimeout) opts.Context = ctxt res, err := filterer.FilterETHDepositInitiated(opts, nil, nil) - switch err { - case nil: - cancel() - return res, err - default: - logger.Error("Error fetching filter", "err", err) + cancel() + if err == nil { + return res, nil } + logger.Error("Error fetching filter", "err", err) time.Sleep(clientRetryInterval) } } // FilterERC20DepositInitiatedWithRetry retries the given func until it succeeds, // waiting for clientRetryInterval duration after every call. -func FilterERC20DepositInitiatedWithRetry(filterer *l1bridge.L1StandardBridgeFilterer, opts *bind.FilterOpts) (*l1bridge.L1StandardBridgeERC20DepositInitiatedIterator, error) { +func FilterERC20DepositInitiatedWithRetry(ctx context.Context, filterer *l1bridge.L1StandardBridgeFilterer, opts *bind.FilterOpts) (*l1bridge.L1StandardBridgeERC20DepositInitiatedIterator, error) { for { - ctxt, cancel := context.WithTimeout(opts.Context, DefaultConnectionTimeout) + ctxt, cancel := context.WithTimeout(ctx, DefaultConnectionTimeout) opts.Context = ctxt res, err := filterer.FilterERC20DepositInitiated(opts, nil, nil, nil) - switch err { - case nil: - cancel() - return res, err - default: - logger.Error("Error fetching filter", "err", err) + cancel() + if err == nil { + return res, nil } + logger.Error("Error fetching filter", "err", err) time.Sleep(clientRetryInterval) } } diff --git a/go/indexer/services/l1/bridge/standard_bridge.go b/go/indexer/services/l1/bridge/standard_bridge.go index b9ed8866ab891..d0e3ade39e05d 100644 --- a/go/indexer/services/l1/bridge/standard_bridge.go +++ b/go/indexer/services/l1/bridge/standard_bridge.go @@ -24,10 +24,9 @@ func (s *StandardBridge) Address() common.Address { func (s *StandardBridge) GetDepositsByBlockRange(start, end uint64) (DepositsMap, error) { depositsByBlockhash := make(DepositsMap) - iter, err := FilterERC20DepositInitiatedWithRetry(s.filterer, &bind.FilterOpts{ - Start: start, - End: &end, - Context: s.ctx, + iter, err := FilterERC20DepositInitiatedWithRetry(s.ctx, s.filterer, &bind.FilterOpts{ + Start: start, + End: &end, }) if err != nil { logger.Error("Error fetching filter", "err", err) diff --git a/go/indexer/services/l1/query.go b/go/indexer/services/l1/query.go index c3e3fdae3ea24..ec0ba7b8cca71 100644 --- a/go/indexer/services/l1/query.go +++ b/go/indexer/services/l1/query.go @@ -44,10 +44,9 @@ func QueryERC20(address common.Address, client *ethclient.Client) (*db.Token, er func QueryStateBatches(filterer *scc.StateCommitmentChainFilterer, startHeight, endHeight uint64, ctx context.Context) (map[common.Hash][]db.StateBatch, error) { batches := make(map[common.Hash][]db.StateBatch) - iter, err := bridge.FilterStateBatchAppendedWithRetry(filterer, &bind.FilterOpts{ - Start: startHeight, - End: &endHeight, - Context: ctx, + iter, err := bridge.FilterStateBatchAppendedWithRetry(ctx, filterer, &bind.FilterOpts{ + Start: startHeight, + End: &endHeight, }) if err != nil { return nil, err diff --git a/go/indexer/services/l2/bridge/filter.go b/go/indexer/services/l2/bridge/filter.go index 50d1b7f9da266..302d906b0d88f 100644 --- a/go/indexer/services/l2/bridge/filter.go +++ b/go/indexer/services/l2/bridge/filter.go @@ -14,18 +14,16 @@ var clientRetryInterval = 5 * time.Second // FilterWithdrawalInitiatedWithRetry retries the given func until it succeeds, // waiting for clientRetryInterval duration after every call. -func FilterWithdrawalInitiatedWithRetry(filterer *l2bridge.L2StandardBridgeFilterer, opts *bind.FilterOpts) (*l2bridge.L2StandardBridgeWithdrawalInitiatedIterator, error) { +func FilterWithdrawalInitiatedWithRetry(ctx context.Context, filterer *l2bridge.L2StandardBridgeFilterer, opts *bind.FilterOpts) (*l2bridge.L2StandardBridgeWithdrawalInitiatedIterator, error) { for { - ctxt, cancel := context.WithTimeout(opts.Context, DefaultConnectionTimeout) + ctxt, cancel := context.WithTimeout(ctx, DefaultConnectionTimeout) opts.Context = ctxt res, err := filterer.FilterWithdrawalInitiated(opts, nil, nil, nil) - switch err { - case nil: - cancel() - return res, err - default: - logger.Error("Error fetching filter", "err", err) + cancel() + if err == nil { + return res, nil } + logger.Error("Error fetching filter", "err", err) time.Sleep(clientRetryInterval) } } diff --git a/go/indexer/services/l2/bridge/standard_bridge.go b/go/indexer/services/l2/bridge/standard_bridge.go index 821ce4cc53c0c..9ee5693a3a696 100644 --- a/go/indexer/services/l2/bridge/standard_bridge.go +++ b/go/indexer/services/l2/bridge/standard_bridge.go @@ -25,10 +25,9 @@ func (s *StandardBridge) Address() common.Address { func (s *StandardBridge) GetWithdrawalsByBlockRange(start, end uint64) (WithdrawalsMap, error) { withdrawalsByBlockhash := make(map[common.Hash][]db.Withdrawal) - iter, err := FilterWithdrawalInitiatedWithRetry(s.filterer, &bind.FilterOpts{ - Start: start, - End: &end, - Context: s.ctx, + iter, err := FilterWithdrawalInitiatedWithRetry(s.ctx, s.filterer, &bind.FilterOpts{ + Start: start, + End: &end, }) if err != nil { logger.Error("Error fetching filter", "err", err)