@@ -12,6 +12,7 @@ use graph::prelude::{anyhow, tokio};
12
12
use graph:: prelude:: { prost, MetricsRegistry } ;
13
13
use graph:: slog:: { debug, error, info, o, Logger } ;
14
14
use graph:: url:: Url ;
15
+ use graph:: util:: futures:: retry;
15
16
use graph:: util:: security:: SafeDisplay ;
16
17
use graph_chain_ethereum:: { self as ethereum, EthereumAdapterTrait , Transport } ;
17
18
use std:: collections:: { btree_map, BTreeMap } ;
@@ -329,12 +330,21 @@ where
329
330
logger, "Connecting to Firehose to get chain identifier" ;
330
331
"provider" => & endpoint. provider. to_string( ) ,
331
332
) ;
332
- match tokio:: time:: timeout (
333
- NET_VERSION_WAIT_TIME ,
334
- endpoint. genesis_block_ptr :: < M > ( & logger) ,
335
- )
336
- . await
337
- . map_err ( Error :: from)
333
+
334
+ let retry_endpoint = endpoint. clone ( ) ;
335
+ let retry_logger = logger. clone ( ) ;
336
+ let req = retry ( "firehose startup connection test" , & logger)
337
+ . no_limit ( )
338
+ . no_timeout ( )
339
+ . run ( move || {
340
+ let retry_endpoint = retry_endpoint. clone ( ) ;
341
+ let retry_logger = retry_logger. clone ( ) ;
342
+ async move { retry_endpoint. genesis_block_ptr :: < M > ( & retry_logger) . await }
343
+ } ) ;
344
+
345
+ match tokio:: time:: timeout ( NET_VERSION_WAIT_TIME , req)
346
+ . await
347
+ . map_err ( Error :: from)
338
348
{
339
349
// An `Err` means a timeout, an `Ok(Err)` means some other error (maybe a typo
340
350
// on the URL)
0 commit comments