@@ -110,6 +110,7 @@ export class DataSource extends EventTarget {
110
110
} )
111
111
private isLive = false
112
112
private noDb : boolean
113
+ private maxHandlerRetries = 5
113
114
114
115
constructor (
115
116
params : {
@@ -578,27 +579,41 @@ export class DataSource extends EventTarget {
578
579
} )
579
580
580
581
const loggerKey = `${ this . chain } -${ contractId } -${ event . eventName } `
581
- try {
582
- await handler . handler ( {
583
- eventName : event . eventName ,
584
- client : this . client ,
585
- store : this . store ,
586
- event : formatLog ( log , event ) ,
587
- contract : getContract ( {
588
- abi : handler . abi ,
589
- address : log . address ,
590
- publicClient : this . client ,
591
- } ) ,
592
- logger : logger ( loggerKey ) ,
593
- } )
594
- } catch ( e ) {
595
- error =
596
- `Event handler ${ handler . handler . name } at block ${ log . blockNumber } with arguments:${
597
- Object . entries ( event . args ?? { } ) . map ( ( [ name , arg ] , idx ) =>
598
- `\n ${ idx } ${ name } : ${ arg } `
582
+
583
+ let retries = 0
584
+ while ( true ) {
585
+ try {
586
+ await handler . handler ( {
587
+ eventName : event . eventName ,
588
+ client : this . client ,
589
+ store : this . store ,
590
+ event : formatLog ( log , event ) ,
591
+ contract : getContract ( {
592
+ abi : handler . abi ,
593
+ address : log . address ,
594
+ publicClient : this . client ,
595
+ } ) ,
596
+ logger : logger ( loggerKey ) ,
597
+ } )
598
+ break
599
+ } catch ( e ) {
600
+ error =
601
+ `Event handler ${ handler . handler . name } at block ${ log . blockNumber } with arguments:${
602
+ Object . entries ( event . args ?? { } ) . map ( ( [ name , arg ] , idx ) =>
603
+ `\n ${ idx } ${ name } : ${ arg } `
604
+ )
605
+ } \n${ e . stack } `
606
+ logger ( loggerKey ) . error ( error )
607
+ retries ++
608
+ if ( retries > this . maxHandlerRetries ) {
609
+ this . dispatchEvent ( new Event ( 'error' ) )
610
+ logger ( loggerKey ) . debug (
611
+ `Max retries reached for handler ${ handler . handler . name } at block ${ log . blockNumber } , stopping ...` ,
599
612
)
600
- } \n\n${ e . stack } `
601
- logger ( loggerKey ) . error ( error )
613
+ this . stop ( )
614
+ return
615
+ }
616
+ }
602
617
}
603
618
} else if ( logOrBlock . type === 'block' ) {
604
619
const block = logOrBlock as {
@@ -608,17 +623,31 @@ export class DataSource extends EventTarget {
608
623
609
624
for ( const handler of block . handlers ) {
610
625
const loggerKey = `${ this . chain } -${ handler . name } `
611
- try {
612
- await handler ( {
613
- block : block . block ,
614
- client : this . client ,
615
- store : this . store ,
616
- logger : logger ( loggerKey ) ,
617
- } )
618
- } catch ( e ) {
619
- error =
620
- `Block handler ${ handler . name } at block ${ block . block . number } \n\n${ e . stack } `
621
- logger ( loggerKey ) . error ( error )
626
+
627
+ let retries = 0
628
+ while ( true ) {
629
+ try {
630
+ await handler ( {
631
+ block : block . block ,
632
+ client : this . client ,
633
+ store : this . store ,
634
+ logger : logger ( loggerKey ) ,
635
+ } )
636
+ break
637
+ } catch ( e ) {
638
+ error =
639
+ `Block handler ${ handler . name } at block ${ block . block . number } \n${ e . stack } `
640
+ logger ( loggerKey ) . error ( error )
641
+ retries ++
642
+ if ( retries > this . maxHandlerRetries ) {
643
+ this . dispatchEvent ( new Event ( 'error' ) )
644
+ logger ( loggerKey ) . debug (
645
+ `Max retries reached for handler ${ handler . name } at block ${ block . block . number } , stopping ...` ,
646
+ )
647
+ this . stop ( )
648
+ return
649
+ }
650
+ }
622
651
}
623
652
}
624
653
} else if ( logOrBlock . type === 'agnosticLog' ) {
@@ -645,27 +674,41 @@ export class DataSource extends EventTarget {
645
674
646
675
const loggerKey =
647
676
`${ this . chain } -${ eventHandler . contractId } -${ event . eventName } `
648
- try {
649
- await eventHandler . handler ( {
650
- eventName : event . eventName ,
651
- client : this . client ,
652
- store : this . store ,
653
- event : formatLog ( log , event ) ,
654
- contract : getContract ( {
655
- abi : eventHandler . abi ,
656
- address : log . address ,
657
- publicClient : this . client ,
658
- } ) ,
659
- logger : logger ( loggerKey ) ,
660
- } )
661
- } catch ( e ) {
662
- error =
663
- `Agnostic event handler ${ eventHandler . handler . name } at block ${ log . blockNumber } with arguments:${
664
- Object . entries ( event . args ?? { } ) . map ( ( [ name , arg ] , idx ) =>
665
- `\n ${ idx } ${ name } : ${ arg } `
677
+
678
+ let retries = 0
679
+ while ( true ) {
680
+ try {
681
+ await eventHandler . handler ( {
682
+ eventName : event . eventName ,
683
+ client : this . client ,
684
+ store : this . store ,
685
+ event : formatLog ( log , event ) ,
686
+ contract : getContract ( {
687
+ abi : eventHandler . abi ,
688
+ address : log . address ,
689
+ publicClient : this . client ,
690
+ } ) ,
691
+ logger : logger ( loggerKey ) ,
692
+ } )
693
+ break
694
+ } catch ( e ) {
695
+ error =
696
+ `Agnostic event handler ${ eventHandler . handler . name } at block ${ log . blockNumber } with arguments:${
697
+ Object . entries ( event . args ?? { } ) . map ( ( [ name , arg ] , idx ) =>
698
+ `\n ${ idx } ${ name } : ${ arg } `
699
+ )
700
+ } \n${ e . stack } `
701
+ logger ( loggerKey ) . error ( error )
702
+ retries ++
703
+ if ( retries > this . maxHandlerRetries ) {
704
+ this . dispatchEvent ( new Event ( 'error' ) )
705
+ logger ( loggerKey ) . debug (
706
+ `Max retries reached for handler ${ eventHandler . handler . name } at block ${ log . blockNumber } , stopping ...` ,
666
707
)
667
- } \n\n${ e . stack } `
668
- logger ( loggerKey ) . error ( error )
708
+ this . stop ( )
709
+ return
710
+ }
711
+ }
669
712
}
670
713
}
671
714
0 commit comments