Skip to content

Commit bd5bd9b

Browse files
riptljvarela-jump
authored andcommitted
restore: pipeline bstream integrity hashing
Adds a new 'snapwh' tile dedicated to computing database block integrity hashes to the snapshot loading pipeline.
1 parent 82664f1 commit bd5bd9b

File tree

20 files changed

+474
-34
lines changed

20 files changed

+474
-34
lines changed

book/api/metrics-generated.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1118,3 +1118,13 @@
11181118
| <span class="metrics-name">benchs_&#8203;transactions_&#8203;sent</span> | counter | Number of benchmark packets sent |
11191119

11201120
</div>
1121+
1122+
## Snapwh Tile
1123+
1124+
<div class="metrics">
1125+
1126+
| Metric | Type | Description |
1127+
|--------|------|-------------|
1128+
| <span class="metrics-name">snapwh_&#8203;state</span> | gauge | State of the tile. 0=IDLE, 1=PROCESSING, 4=SHUTDOWN |
1129+
1130+
</div>

src/app/firedancer-dev/commands/snapshot_load.c

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,14 @@ snapshot_load_topo( config_t * config ) {
7878

7979
/* "snapwr": Snapshot writer tile */
8080
int vinyl_enabled = config->firedancer.vinyl.enabled;
81+
fd_topo_tile_t * snapwr_tile = NULL;
8182
if( vinyl_enabled ) {
83+
fd_topob_wksp( topo, "snapwh" );
84+
fd_topo_tile_t * snapwh_tile = fd_topob_tile( topo, "snapwh", "snapwh", "metric_in", ULONG_MAX, 0, 0 );
85+
snapwh_tile->allow_shutdown = 1;
86+
8287
fd_topob_wksp( topo, "snapwr" );
83-
fd_topo_tile_t * snapwr_tile = fd_topob_tile( topo, "snapwr", "snapwr", "metric_in", ULONG_MAX, 0, 0 );
88+
snapwr_tile = fd_topob_tile( topo, "snapwr", "snapwr", "metric_in", ULONG_MAX, 0, 0 );
8489
snapwr_tile->allow_shutdown = 1;
8590
}
8691

@@ -90,7 +95,9 @@ snapshot_load_topo( config_t * config ) {
9095
fd_topob_wksp( topo, "snapin_ct" );
9196
fd_topob_wksp( topo, "snapin_manif" );
9297
fd_topob_wksp( topo, "snapct_repr" );
93-
if( vinyl_enabled ) fd_topob_wksp( topo, "snapin_wr" );
98+
if( vinyl_enabled ) {
99+
fd_topob_wksp( topo, "snapin_wr" );
100+
}
94101

95102
fd_topob_link( topo, "snapct_ld", "snapct_ld", 128UL, sizeof(fd_ssctrl_init_t), 1UL );
96103
fd_topob_link( topo, "snapld_dc", "snapld_dc", 16384UL, USHORT_MAX, 1UL );
@@ -99,7 +106,9 @@ snapshot_load_topo( config_t * config ) {
99106
fd_topob_link( topo, "snapin_manif", "snapin_manif", 2UL, sizeof(fd_snapshot_manifest_t), 1UL )->permit_no_consumers = 1;
100107
fd_topob_link( topo, "snapct_repr", "snapct_repr", 128UL, 0UL, 1UL )->permit_no_consumers = 1;
101108
if( vinyl_enabled ) {
102-
fd_topob_link( topo, "snapin_wr", "snapin_wr", 4UL, 16UL<<20, 1UL );
109+
fd_topo_link_t * snapin_wh = fd_topob_link( topo, "snapin_wh", "snapin_wr", 4UL, 16UL<<20, 1UL );
110+
fd_topob_link( topo, "snapwh_wr", "snapin_wr", 4UL, 0UL, 1UL );
111+
fd_pod_insertf_ulong( topo->props, 8UL, "obj.%lu.app_sz", snapin_wh->dcache_obj_id );
103112
}
104113

105114
fd_topob_tile_in ( topo, "snapct", 0UL, "metric_in", "snapin_ct", 0UL, FD_TOPOB_RELIABLE, FD_TOPOB_POLLED );
@@ -114,8 +123,11 @@ snapshot_load_topo( config_t * config ) {
114123
fd_topob_tile_out( topo, "snapin", 0UL, "snapin_ct", 0UL );
115124
fd_topob_tile_out( topo, "snapin", 0UL, "snapin_manif", 0UL );
116125
if( vinyl_enabled ) {
117-
fd_topob_tile_out( topo, "snapin", 0UL, "snapin_wr", 0UL );
118-
fd_topob_tile_in ( topo, "snapwr", 0UL, "metric_in", "snapin_wr", 0UL, FD_TOPOB_RELIABLE, FD_TOPOB_POLLED );
126+
fd_topob_tile_out( topo, "snapin", 0UL, "snapin_wh", 0UL );
127+
fd_topob_tile_in ( topo, "snapwh", 0UL, "metric_in", "snapin_wh", 0UL, FD_TOPOB_RELIABLE, FD_TOPOB_POLLED );
128+
fd_topob_tile_out( topo, "snapwh", 0UL, "snapwh_wr", 0UL );
129+
fd_topob_tile_in ( topo, "snapwr", 0UL, "metric_in", "snapwh_wr", 0UL, FD_TOPOB_RELIABLE, FD_TOPOB_POLLED );
130+
fd_topob_tile_uses( topo, snapwr_tile, &topo->objs[ topo->links[ fd_topo_find_link( topo, "snapin_wh", 0UL ) ].dcache_obj_id ], FD_SHMEM_JOIN_MODE_READ_ONLY );
119131
}
120132

121133
/* snapin funk / txncache access */
@@ -558,7 +570,9 @@ snapshot_load_cmd_fn( args_t * args,
558570
fd_topo_tile_t * snapld_tile = &topo->tiles[ fd_topo_find_tile( topo, "snapld", 0UL ) ];
559571
fd_topo_tile_t * snapdc_tile = &topo->tiles[ fd_topo_find_tile( topo, "snapdc", 0UL ) ];
560572
fd_topo_tile_t * snapin_tile = &topo->tiles[ fd_topo_find_tile( topo, "snapin", 0UL ) ];
573+
ulong snapwh_idx = fd_topo_find_tile( topo, "snapwh", 0UL );
561574
ulong snapwr_idx = fd_topo_find_tile( topo, "snapwr", 0UL );
575+
fd_topo_tile_t * snapwh_tile = snapwh_idx!=ULONG_MAX ? &topo->tiles[ snapwh_idx ] : NULL;
562576
fd_topo_tile_t * snapwr_tile = snapwr_idx!=ULONG_MAX ? &topo->tiles[ snapwr_idx ] : NULL;
563577

564578
double tick_per_ns = fd_tempo_tick_per_ns( NULL );
@@ -571,6 +585,7 @@ snapshot_load_cmd_fn( args_t * args,
571585
ulong volatile * const snapld_metrics = fd_metrics_tile( snapld_tile->metrics );
572586
ulong volatile * const snapdc_metrics = fd_metrics_tile( snapdc_tile->metrics );
573587
ulong volatile * const snapin_metrics = fd_metrics_tile( snapin_tile->metrics );
588+
ulong volatile * const snapwh_metrics = snapwh_tile ? fd_metrics_tile( snapwh_tile->metrics ) : NULL;
574589
ulong volatile * const snapwr_metrics = snapwr_tile ? fd_metrics_tile( snapwr_tile->metrics ) : NULL;
575590

576591
ulong total_off_old = 0UL;
@@ -584,6 +599,7 @@ snapshot_load_cmd_fn( args_t * args,
584599
ulong snapdc_wait_old = 0UL;
585600
ulong snapin_backp_old = 0UL;
586601
ulong snapin_wait_old = 0UL;
602+
ulong snapwh_wait_old = 0UL;
587603
ulong snapwr_wait_old = 0UL;
588604
ulong acc_cnt_old = 0UL;
589605

@@ -600,7 +616,7 @@ snapshot_load_cmd_fn( args_t * args,
600616
fputs( "--------------------------------------------", stdout );
601617
if( snapwr_tile ) fputs( "--------------", stdout );
602618
fputs( "[ct],[ld],[dc],[in]--------[ct],[ld],[dc],[in]", stdout );
603-
if( snapwr_tile ) fputs( ",[wr]" , stdout );
619+
if( snapwr_tile ) fputs( ",[wh],[wr]" , stdout );
604620
puts( "--------------" );
605621
}
606622

@@ -633,8 +649,11 @@ snapshot_load_cmd_fn( args_t * args,
633649
ulong snapdc_wait = snapdc_metrics[ MIDX( COUNTER, TILE, REGIME_DURATION_NANOS_CAUGHT_UP_POSTFRAG ) ] + snapdc_backp;
634650
ulong snapin_backp = snapin_metrics[ MIDX( COUNTER, TILE, REGIME_DURATION_NANOS_BACKPRESSURE_PREFRAG ) ];
635651
ulong snapin_wait = snapin_metrics[ MIDX( COUNTER, TILE, REGIME_DURATION_NANOS_CAUGHT_UP_POSTFRAG ) ] + snapin_backp;
652+
ulong snapwh_wait = 0UL;
636653
ulong snapwr_wait = 0UL;
637654
if( snapwr_tile ) {
655+
snapwh_wait = snapwh_metrics[ MIDX( COUNTER, TILE, REGIME_DURATION_NANOS_CAUGHT_UP_POSTFRAG ) ] +
656+
snapwh_metrics[ MIDX( COUNTER, TILE, REGIME_DURATION_NANOS_BACKPRESSURE_PREFRAG ) ];
638657
snapwr_wait = snapwr_metrics[ MIDX( COUNTER, TILE, REGIME_DURATION_NANOS_CAUGHT_UP_POSTFRAG ) ] +
639658
snapwr_metrics[ MIDX( COUNTER, TILE, REGIME_DURATION_NANOS_BACKPRESSURE_PREFRAG ) ];
640659
}
@@ -662,14 +681,14 @@ snapshot_load_cmd_fn( args_t * args,
662681
100-( ( (double)( snapdc_wait-snapdc_wait_old )*ns_per_tick )/1e7 ),
663682
100-( ( (double)( snapin_wait-snapin_wait_old )*ns_per_tick )/1e7 ) );
664683
if( snapwr_tile ) {
665-
printf( ",%3.0f%%",
684+
printf( ",%3.0f%%,%3.0f%%",
685+
100-( ( (double)( snapwh_wait-snapwh_wait_old )*ns_per_tick )/1e7 ),
666686
100-( ( (double)( snapwr_wait-snapwr_wait_old )*ns_per_tick )/1e7 ) );
667687
}
668688
printf( ") acc=%4.1f M/s\n",
669689
(double)( acc_cnt-acc_cnt_old )/1e6 );
670690
fflush( stdout );
671691
}
672-
673692
total_off_old = total_off;
674693
decomp_off_old = decomp_off;
675694
vinyl_off_old = vinyl_off;
@@ -681,6 +700,7 @@ snapshot_load_cmd_fn( args_t * args,
681700
snapdc_wait_old = snapdc_wait;
682701
snapin_backp_old = snapin_backp;
683702
snapin_wait_old = snapin_wait;
703+
snapwh_wait_old = snapwh_wait;
684704
snapwr_wait_old = snapwr_wait;
685705
acc_cnt_old = acc_cnt;
686706

src/app/firedancer-dev/main.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ extern fd_topo_run_tile_t fd_tile_snapct;
116116
extern fd_topo_run_tile_t fd_tile_snapld;
117117
extern fd_topo_run_tile_t fd_tile_snapdc;
118118
extern fd_topo_run_tile_t fd_tile_snapin;
119+
extern fd_topo_run_tile_t fd_tile_snapwh;
119120
extern fd_topo_run_tile_t fd_tile_snapwr;
120121

121122
fd_topo_run_tile_t * TILES[] = {
@@ -163,6 +164,7 @@ fd_topo_run_tile_t * TILES[] = {
163164
&fd_tile_snapld,
164165
&fd_tile_snapdc,
165166
&fd_tile_snapin,
167+
&fd_tile_snapwh,
166168
&fd_tile_snapwr,
167169
&fd_tile_genesi,
168170
&fd_tile_ipecho,

src/app/firedancer/main.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ extern fd_topo_run_tile_t fd_tile_snapct;
9090
extern fd_topo_run_tile_t fd_tile_snapld;
9191
extern fd_topo_run_tile_t fd_tile_snapdc;
9292
extern fd_topo_run_tile_t fd_tile_snapin;
93+
extern fd_topo_run_tile_t fd_tile_snapwh;
9394
extern fd_topo_run_tile_t fd_tile_snapwr;
9495

9596
fd_topo_run_tile_t * TILES[] = {
@@ -122,6 +123,7 @@ fd_topo_run_tile_t * TILES[] = {
122123
&fd_tile_snapld,
123124
&fd_tile_snapdc,
124125
&fd_tile_snapin,
126+
&fd_tile_snapwh,
125127
&fd_tile_snapwr,
126128
&fd_tile_genesi,
127129
&fd_tile_ipecho,

src/app/firedancer/topology.c

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,10 @@ fd_topo_initialize( config_t * config ) {
373373
fd_topob_wksp( topo, "snapld" );
374374
fd_topob_wksp( topo, "snapdc" );
375375
fd_topob_wksp( topo, "snapin" );
376-
if( vinyl_enabled ) fd_topob_wksp( topo, "snapwr" );
376+
if( vinyl_enabled ) {
377+
fd_topob_wksp( topo, "snapwh" );
378+
fd_topob_wksp( topo, "snapwr" );
379+
}
377380

378381
fd_topob_wksp( topo, "snapct_ld" );
379382
fd_topob_wksp( topo, "snapld_dc" );
@@ -413,7 +416,10 @@ fd_topo_initialize( config_t * config ) {
413416
/**/ fd_topob_link( topo, "snapin_gui", "snapin_gui", 4UL, FD_GUI_CONFIG_PARSE_CONFIG_KEYS_MAX_SZ+FD_GUI_CONFIG_PARSE_VALIDATOR_INFO_MAX_SZ, 1UL );
414417
}
415418
if( vinyl_enabled ) {
416-
/**/ fd_topob_link( topo, "snapin_wr", "snapin_wr", 4UL, 16UL<<20, 1UL );
419+
fd_topo_link_t * snapin_wh =
420+
/**/ fd_topob_link( topo, "snapin_wh", "snapin_wr", 4UL, 16UL<<20, 1UL );
421+
/**/ fd_topob_link( topo, "snapwh_wr", "snapin_wr", 4UL, 0UL, 1UL );
422+
fd_pod_insertf_ulong( topo->props, 8UL, "obj.%lu.app_sz", snapin_wh->dcache_obj_id );
417423
}
418424
}
419425

@@ -500,6 +506,7 @@ fd_topo_initialize( config_t * config ) {
500506
/**/ fd_topob_tile( topo, "snapld", "snapld", "metric_in", tile_to_cpu[ topo->tile_cnt ], 0, 0 )->allow_shutdown = 1;
501507
/**/ fd_topob_tile( topo, "snapdc", "snapdc", "metric_in", tile_to_cpu[ topo->tile_cnt ], 0, 0 )->allow_shutdown = 1;
502508
/**/ fd_topob_tile( topo, "snapin", "snapin", "metric_in", tile_to_cpu[ topo->tile_cnt ], 0, 0 )->allow_shutdown = 1;
509+
if(vinyl_enabled) fd_topob_tile( topo, "snapwh", "snapwh", "metric_in", tile_to_cpu[ topo->tile_cnt ], 0, 0 )->allow_shutdown = 1;
503510
if(vinyl_enabled) fd_topob_tile( topo, "snapwr", "snapwr", "metric_in", tile_to_cpu[ topo->tile_cnt ], 0, 0 )->allow_shutdown = 1;
504511
}
505512

@@ -573,8 +580,11 @@ fd_topo_initialize( config_t * config ) {
573580
/**/ fd_topob_tile_out( topo, "snapct", 0UL, "snapct_gui", 0UL );
574581
}
575582
if( vinyl_enabled ) {
576-
/**/ fd_topob_tile_out( topo, "snapin", 0UL, "snapin_wr", 0UL );
577-
/**/ fd_topob_tile_in ( topo, "snapwr", 0UL, "metric_in", "snapin_wr", 0UL, FD_TOPOB_RELIABLE, FD_TOPOB_POLLED );
583+
/**/ fd_topob_tile_out( topo, "snapin", 0UL, "snapin_wh", 0UL );
584+
/**/ fd_topob_tile_in ( topo, "snapwh", 0UL, "metric_in", "snapin_wh", 0UL, FD_TOPOB_RELIABLE, FD_TOPOB_POLLED );
585+
/**/ fd_topob_tile_out( topo, "snapwh", 0UL, "snapwh_wr", 0UL );
586+
/**/ fd_topob_tile_in ( topo, "snapwr", 0UL, "metric_in", "snapwh_wr", 0UL, FD_TOPOB_RELIABLE, FD_TOPOB_POLLED );
587+
fd_topob_tile_uses( topo, &topo->tiles[ fd_topo_find_tile( topo, "snapwr", 0UL ) ], &topo->objs[ topo->links[ fd_topo_find_link( topo, "snapin_wh", 0UL ) ].dcache_obj_id ], FD_SHMEM_JOIN_MODE_READ_ONLY );
578588
}
579589

580590
/**/ fd_topob_tile_in ( topo, "snapld", 0UL, "metric_in", "snapct_ld", 0UL, FD_TOPOB_RELIABLE, FD_TOPOB_POLLED );
@@ -1056,15 +1066,21 @@ fd_topo_configure_tile( fd_topo_tile_t * tile,
10561066
tile->snapin.vinyl_meta_map_obj_id = fd_pod_query_ulong( config->topo.props, "vinyl.meta_map", ULONG_MAX );
10571067
tile->snapin.vinyl_meta_pool_obj_id = fd_pod_query_ulong( config->topo.props, "vinyl.meta_pool", ULONG_MAX );
10581068

1059-
ulong in_wr_link_id = fd_topo_find_link( &config->topo, "snapin_wr", 0UL );
1069+
ulong in_wr_link_id = fd_topo_find_link( &config->topo, "snapin_wh", 0UL );
10601070
FD_TEST( in_wr_link_id!=ULONG_MAX );
10611071
fd_topo_link_t * in_wr_link = &config->topo.links[ in_wr_link_id ];
10621072
tile->snapin.snapwr_depth = in_wr_link->depth;
10631073
}
10641074

1075+
} else if( FD_UNLIKELY( !strcmp( tile->name, "snapwh" ) ) ) {
1076+
10651077
} else if( FD_UNLIKELY( !strcmp( tile->name, "snapwr" ) ) ) {
10661078

10671079
strcpy( tile->snapwr.vinyl_path, config->paths.accounts );
1080+
ulong in_wr_link_id = fd_topo_find_link( &config->topo, "snapin_wh", 0UL );
1081+
FD_TEST( in_wr_link_id!=ULONG_MAX );
1082+
fd_topo_link_t * in_wr_link = &config->topo.links[ in_wr_link_id ];
1083+
tile->snapwr.dcache_obj_id = in_wr_link->dcache_obj_id;
10681084

10691085
} else if( FD_UNLIKELY( !strcmp( tile->name, "repair" ) ) ) {
10701086
tile->repair.max_pending_shred_sets = config->tiles.shred.max_pending_shred_sets;

src/disco/metrics/generate/types.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ class Tile(Enum):
3939
EXEC = 33
4040
SNAPWR = 34
4141
BENCHS = 35
42+
SNAPWH = 36
4243

4344
class MetricType(Enum):
4445
COUNTER = 0

src/disco/metrics/generated/fd_metrics_all.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ const char * FD_METRICS_TILE_KIND_NAMES[FD_METRICS_TILE_KIND_CNT] = {
6868
"exec",
6969
"snapwr",
7070
"benchs",
71+
"snapwh",
7172
};
7273

7374
const ulong FD_METRICS_TILE_KIND_SIZES[FD_METRICS_TILE_KIND_CNT] = {
@@ -103,6 +104,7 @@ const ulong FD_METRICS_TILE_KIND_SIZES[FD_METRICS_TILE_KIND_CNT] = {
103104
FD_METRICS_EXEC_TOTAL,
104105
FD_METRICS_SNAPWR_TOTAL,
105106
FD_METRICS_BENCHS_TOTAL,
107+
FD_METRICS_SNAPWH_TOTAL,
106108
};
107109
const fd_metrics_meta_t * FD_METRICS_TILE_KIND_METRICS[FD_METRICS_TILE_KIND_CNT] = {
108110
FD_METRICS_NET,
@@ -137,4 +139,5 @@ const fd_metrics_meta_t * FD_METRICS_TILE_KIND_METRICS[FD_METRICS_TILE_KIND_CNT]
137139
FD_METRICS_EXEC,
138140
FD_METRICS_SNAPWR,
139141
FD_METRICS_BENCHS,
142+
FD_METRICS_SNAPWH,
140143
};

src/disco/metrics/generated/fd_metrics_all.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
#include "fd_metrics_snapdc.h"
3333
#include "fd_metrics_snapin.h"
3434
#include "fd_metrics_snapwr.h"
35+
#include "fd_metrics_snapwh.h"
3536
#include "fd_metrics_metric.h"
3637
#include "fd_metrics_ipecho.h"
3738
#include "fd_metrics_backt.h"
@@ -173,7 +174,7 @@ extern const fd_metrics_meta_t FD_METRICS_ALL_LINK_OUT[FD_METRICS_ALL_LINK_OUT_T
173174

174175
#define FD_METRICS_TOTAL_SZ (8UL*254UL)
175176

176-
#define FD_METRICS_TILE_KIND_CNT 32
177+
#define FD_METRICS_TILE_KIND_CNT 33
177178
extern const char * FD_METRICS_TILE_KIND_NAMES[FD_METRICS_TILE_KIND_CNT];
178179
extern const ulong FD_METRICS_TILE_KIND_SIZES[FD_METRICS_TILE_KIND_CNT];
179180
extern const fd_metrics_meta_t * FD_METRICS_TILE_KIND_METRICS[FD_METRICS_TILE_KIND_CNT];
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
/* THIS FILE IS GENERATED BY gen_metrics.py. DO NOT HAND EDIT. */
2+
#include "fd_metrics_snapwh.h"
3+
4+
const fd_metrics_meta_t FD_METRICS_SNAPWH[FD_METRICS_SNAPWH_TOTAL] = {
5+
DECLARE_METRIC( SNAPWH_STATE, GAUGE ),
6+
};
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#ifndef HEADER_fd_src_disco_metrics_generated_fd_metrics_snapwh_h
2+
#define HEADER_fd_src_disco_metrics_generated_fd_metrics_snapwh_h
3+
4+
/* THIS FILE IS GENERATED BY gen_metrics.py. DO NOT HAND EDIT. */
5+
6+
#include "../fd_metrics_base.h"
7+
#include "fd_metrics_enums.h"
8+
9+
#define FD_METRICS_GAUGE_SNAPWH_STATE_OFF (16UL)
10+
#define FD_METRICS_GAUGE_SNAPWH_STATE_NAME "snapwh_state"
11+
#define FD_METRICS_GAUGE_SNAPWH_STATE_TYPE (FD_METRICS_TYPE_GAUGE)
12+
#define FD_METRICS_GAUGE_SNAPWH_STATE_DESC "State of the tile. 0=IDLE, 1=PROCESSING, 4=SHUTDOWN"
13+
#define FD_METRICS_GAUGE_SNAPWH_STATE_CVT (FD_METRICS_CONVERTER_NONE)
14+
15+
#define FD_METRICS_SNAPWH_TOTAL (1UL)
16+
extern const fd_metrics_meta_t FD_METRICS_SNAPWH[FD_METRICS_SNAPWH_TOTAL];
17+
18+
#endif /* HEADER_fd_src_disco_metrics_generated_fd_metrics_snapwh_h */

0 commit comments

Comments
 (0)