Skip to content

Commit 82bbc50

Browse files
committed
force exit when batch limit error
1 parent 3b6a32c commit 82bbc50

File tree

1 file changed

+44
-21
lines changed

1 file changed

+44
-21
lines changed

cmd/monitor/monitor.go

+44-21
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"errors"
66
"fmt"
77
"math/big"
8+
"strings"
89
"sync"
910
"time"
1011

@@ -323,27 +324,51 @@ func (ms *monitorStatus) processBatchesConcurrently(ctx context.Context, rpc *et
323324
}
324325
subBatch := blms[i:end]
325326

326-
b := backoff.NewExponentialBackOff()
327-
b.MaxElapsedTime = 3 * time.Minute
328-
retryable := func() error {
329-
return rpc.BatchCallContext(ctx, subBatch)
330-
}
331-
if err := backoff.Retry(retryable, b); err != nil {
332-
log.Error().Err(err).Msg("unable to retry")
333-
errorsMutex.Lock()
334-
errs = append(errs, err)
335-
errorsMutex.Unlock()
327+
doneCh := make(chan error, 1)
328+
329+
go func() {
330+
b := backoff.NewExponentialBackOff()
331+
b.MaxElapsedTime = 3 * time.Minute
332+
retryable := func() error {
333+
select {
334+
case <-ctx.Done():
335+
return ctx.Err()
336+
default:
337+
err := rpc.BatchCallContext(ctx, subBatch)
338+
if err != nil {
339+
log.Error().Err(err).Msg("BatchCallContext error - retry loop")
340+
if strings.Contains(err.Error(), "limit") {
341+
return backoff.Permanent(err)
342+
}
343+
}
344+
return err
345+
}
346+
}
347+
err := backoff.Retry(retryable, b)
348+
doneCh <- err
349+
}()
350+
351+
select {
352+
case <-ctx.Done():
336353
return
337-
}
354+
case err := <-doneCh:
355+
if err != nil {
356+
log.Error().Err(err).Msg("unable to retry")
357+
errorsMutex.Lock()
358+
errs = append(errs, err)
359+
errorsMutex.Unlock()
360+
return
361+
}
338362

339-
for _, elem := range subBatch {
340-
if elem.Error != nil {
341-
log.Error().Str("Method", elem.Method).Interface("Args", elem.Args).Err(elem.Error).Msg("Failed batch element")
342-
} else {
343-
pb := rpctypes.NewPolyBlock(elem.Result.(*rpctypes.RawBlockResponse))
344-
ms.BlocksLock.Lock()
345-
ms.BlockCache.Add(pb.Number().String(), pb)
346-
ms.BlocksLock.Unlock()
363+
for _, elem := range subBatch {
364+
if elem.Error != nil {
365+
log.Error().Str("Method", elem.Method).Interface("Args", elem.Args).Err(elem.Error).Msg("Failed batch element")
366+
} else {
367+
pb := rpctypes.NewPolyBlock(elem.Result.(*rpctypes.RawBlockResponse))
368+
ms.BlocksLock.Lock()
369+
ms.BlockCache.Add(pb.Number().String(), pb)
370+
ms.BlocksLock.Unlock()
371+
}
347372
}
348373
}
349374

@@ -434,12 +459,10 @@ func renderMonitorUI(ctx context.Context, ec *ethclient.Client, ms *monitorStatu
434459
bottomBlockNumber.SetInt64(0)
435460
}
436461

437-
// if ms.LowerBlock == nil || ms.LowerBlock.Cmp(bottomBlockNumber) > 0 {
438462
err := ms.getBlockRange(ctx, ms.TopDisplayedBlock, rpc)
439463
if err != nil {
440464
log.Error().Err(err).Msg("There was an issue fetching the block range")
441465
}
442-
// }
443466
}
444467
toBlockNumber := ms.TopDisplayedBlock
445468
fromBlockNumber := new(big.Int).Sub(toBlockNumber, big.NewInt(int64(windowSize-1)))

0 commit comments

Comments
 (0)