LCOV - code coverage report
Current view: top level - discof - fd_startup.c (source / functions) Hit Total Coverage
Test: cov.lcov Lines: 0 27 0.0 %
Date: 2026-06-29 05:51:35 Functions: 0 1 0.0 %

          Line data    Source code
       1             : #include "fd_startup.h"
       2             : #include "../disco/metrics/fd_metrics.h"
       3             : #include <time.h>
       4             : 
       5             : __attribute__((weak)) int volatile const fd_startup_skip_checks = 0;
       6             : 
       7             : void
       8           0 : fd_sleep_until_replay_started( fd_topo_t const * topo ) {
       9           0 :   if( fd_startup_skip_checks ) return;
      10             : 
      11             :   /* Defensive boilerplate to prevent segfault */
      12             : 
      13           0 :   ulong metric_wksp_id = fd_topo_find_wksp( topo, "metric_in" );
      14           0 :   if( FD_UNLIKELY( metric_wksp_id==ULONG_MAX ) ) FD_LOG_ERR(( "This topology does not have a metric_in workspace" ));
      15             : 
      16           0 :   fd_topo_wksp_t const * metric_topo_wksp = &topo->workspaces[ metric_wksp_id ];
      17           0 :   if( FD_UNLIKELY( !metric_topo_wksp->wksp ) ) FD_LOG_ERR(( "metric_in wksp is not joined" ));
      18             : 
      19           0 :   fd_wksp_t * metric_wksp = metric_topo_wksp->wksp;
      20           0 :   if( FD_UNLIKELY( !metric_wksp ) ) FD_LOG_ERR(( "metric_in wksp is not joined" ));
      21             : 
      22           0 :   if( FD_UNLIKELY( fd_shmem_join_query_by_join( metric_wksp, NULL )!=0 ) ) {
      23           0 :     FD_LOG_ERR(( "metric_in wksp not mapped into current tile" ));
      24           0 :   }
      25             : 
      26           0 :   ulong replay_tile_id = fd_topo_find_tile( topo, "replay", 0 );
      27           0 :   if( FD_UNLIKELY( replay_tile_id==ULONG_MAX ) ) FD_LOG_ERR(( "This topology does not have a replay tile" ));
      28           0 :   fd_topo_tile_t const * replay_tile = &topo->tiles[ replay_tile_id ];
      29             : 
      30           0 :   fd_topo_obj_t const * metric_obj = fd_topo_find_tile_obj( topo, replay_tile, "metrics" );
      31           0 :   if( FD_UNLIKELY( !metric_obj ) ) FD_LOG_ERR(( "replay:0 does not have a metrics object" ));
      32           0 :   if( FD_UNLIKELY( metric_obj->wksp_id!=metric_wksp_id ) ) FD_LOG_ERR(( "This tile does not have access to replay:0 metrics" ));
      33             : 
      34           0 :   ulong * replay_metrics = fd_topo_obj_laddr( topo, metric_obj->id );
      35           0 :   if( FD_UNLIKELY( !replay_metrics ) ) FD_LOG_ERR(( "Cannot access replay:0 metrics" ));
      36             : 
      37             :   /* We have access to metrics, now find 'status' metric */
      38             : 
      39           0 :   ulong volatile const * replay_tile_metrics = fd_metrics_tile( replay_metrics );
      40           0 :   ulong volatile const * replay_status = &replay_tile_metrics[ MIDX( GAUGE, REPLAY, RUNTIME_STATUS ) ];
      41             : 
      42             :   /* Wait */
      43             : 
      44           0 :   FD_LOG_INFO(( "waiting for replay:0 to start runtime" ));
      45           0 :   while( FD_VOLATILE_CONST( *replay_status )==0 ) {
      46           0 :     struct timespec ts = { .tv_sec=0, .tv_nsec=(int)1e6 }; /* 1ms */
      47           0 :     (void)clock_nanosleep( CLOCK_REALTIME, 0, &ts, NULL );
      48           0 :   }
      49             : 
      50             :   /* No need to log here because stem_run logs on startup */
      51           0 : }

Generated by: LCOV version 1.14