@@ -665,29 +665,42 @@ impl EthereumAdapter {
665
665
& self ,
666
666
logger : Logger ,
667
667
ids : Vec < H256 > ,
668
- ) -> impl Stream < Item = Arc < LightEthereumBlock > , Error = Error > + Send {
668
+ ) -> impl futures03 :: Stream < Item = Result < Arc < LightEthereumBlock > , Error > > + Send {
669
669
let web3 = self . web3 . clone ( ) ;
670
670
671
- stream :: iter_ok :: < _ , Error > ( ids. into_iter ( ) . map ( move |hash| {
671
+ futures03 :: stream :: iter ( ids. into_iter ( ) . map ( move |hash| {
672
672
let web3 = web3. clone ( ) ;
673
- retry ( format ! ( "load block {}" , hash) , & logger)
674
- . redact_log_urls ( true )
675
- . limit ( ENV_VARS . request_retries )
676
- . timeout_secs ( ENV_VARS . json_rpc_timeout . as_secs ( ) )
677
- . run ( move || {
678
- Box :: pin ( web3. eth ( ) . block_with_txs ( BlockId :: Hash ( hash) ) )
679
- . compat ( )
680
- . from_err :: < Error > ( )
681
- . and_then ( move |block| {
682
- block. map ( Arc :: new) . ok_or_else ( || {
683
- anyhow:: anyhow!( "Ethereum node did not find block {:?}" , hash)
684
- } )
673
+ let logger = logger. clone ( ) ;
674
+
675
+ async move {
676
+ retry ( format ! ( "load block {}" , hash) , & logger)
677
+ . redact_log_urls ( true )
678
+ . limit ( ENV_VARS . request_retries )
679
+ . timeout_secs ( ENV_VARS . json_rpc_timeout . as_secs ( ) )
680
+ . run ( move || {
681
+ let web3 = web3. cheap_clone ( ) ;
682
+ async move {
683
+ web3. eth ( )
684
+ . block_with_txs ( BlockId :: Hash ( hash) )
685
+ . await
686
+ . map_err ( Error :: from)
687
+ . and_then ( |block| {
688
+ block. map ( Arc :: new) . ok_or_else ( || {
689
+ anyhow:: anyhow!(
690
+ "Ethereum node did not find block {:?}" ,
691
+ hash
692
+ )
693
+ } )
694
+ } )
695
+ }
696
+ } )
697
+ . await
698
+ . map_err ( |e| {
699
+ e. into_inner ( ) . unwrap_or_else ( || {
700
+ anyhow:: anyhow!( "Ethereum node took too long to return block {}" , hash)
685
701
} )
686
- . compat ( )
687
- } )
688
- . boxed ( )
689
- . compat ( )
690
- . from_err ( )
702
+ } )
703
+ }
691
704
} ) )
692
705
. buffered ( ENV_VARS . block_batch_size )
693
706
}
@@ -1587,10 +1600,9 @@ impl EthereumAdapterTrait for EthereumAdapter {
1587
1600
1588
1601
// Return a stream that lazily loads batches of blocks.
1589
1602
debug ! ( logger, "Requesting {} block(s)" , missing_blocks. len( ) ) ;
1590
- let new_blocks = self
1603
+ let new_blocks: Vec < Arc < LightEthereumBlock > > = self
1591
1604
. load_blocks_rpc ( logger. clone ( ) , missing_blocks)
1592
- . collect ( )
1593
- . compat ( )
1605
+ . try_collect ( )
1594
1606
. await ?;
1595
1607
let upsert_blocks: Vec < _ > = new_blocks
1596
1608
. iter ( )
0 commit comments