diff --git a/book/api/metrics-generated.md b/book/api/metrics-generated.md
index e1879e231e..dfc52cb310 100644
--- a/book/api/metrics-generated.md
+++ b/book/api/metrics-generated.md
@@ -484,17 +484,6 @@
-## Storei Tile
-
-
-
-| Metric | Type | Description |
-|--------|------|-------------|
-| storei_first_turbine_slot | gauge | |
-| storei_current_turbine_slot | gauge | |
-
-
-
## Gossip Tile
@@ -720,6 +709,9 @@
| Metric | Type | Description |
|--------|------|-------------|
+| repair_first_turbine_slot | gauge | |
+| repair_latest_turbine_slot | gauge | |
+| repair_latest_repair_slot | gauge | |
| repair_recv_clnt_pkt | counter | Now many client packets have we received |
| repair_recv_serv_pkt | counter | How many server packets have we received |
| repair_recv_serv_corrupt_pkt | counter | How many corrupt server packets have we received |
diff --git a/src/app/firedancer/topology.c b/src/app/firedancer/topology.c
index a9fe7a0bd0..7dc1773222 100644
--- a/src/app/firedancer/topology.c
+++ b/src/app/firedancer/topology.c
@@ -788,22 +788,19 @@ fd_topo_initialize( config_t * config ) {
fd_topob_wksp( topo, "plugin_out" );
fd_topob_wksp( topo, "plugin" );
- /**/ fd_topob_link( topo, "plugin_out", "plugin_out", 128UL, 8UL+40200UL*(58UL+12UL*34UL), 1UL );
- /**/ fd_topob_link( topo, "replay_plugi", "plugin_in", 128UL, 4098*8UL, 1UL );
- /**/ fd_topob_link( topo, "gossip_plugi", "plugin_in", 128UL, 8UL+40200UL*(58UL+12UL*34UL), 1UL );
- /**/ fd_topob_link( topo, "votes_plugin", "plugin_in", 128UL, 8UL+40200UL*(58UL+12UL*34UL), 1UL );
+ /**/ fd_topob_link( topo, "plugin_out", "plugin_out", 128UL, 8UL+40200UL*(58UL+12UL*34UL), 1UL );
+ /**/ fd_topob_link( topo, "replay_plugi", "plugin_in", 128UL, 4098*8UL, 1UL );
+ /**/ fd_topob_link( topo, "gossip_plugi", "plugin_in", 128UL, 8UL+40200UL*(58UL+12UL*34UL), 1UL );
/**/ fd_topob_tile( topo, "plugin", "plugin", "metric_in", tile_to_cpu[ topo->tile_cnt ], 0, 0 );
/**/ fd_topob_tile_out( topo, "replay", 0UL, "replay_plugi", 0UL );
- /**/ fd_topob_tile_out( topo, "replay", 0UL, "votes_plugin", 0UL );
/**/ fd_topob_tile_out( topo, "gossip", 0UL, "gossip_plugi", 0UL );
- /**/ fd_topob_tile_out( topo, "plugin", 0UL, "plugin_out", 0UL );
+ /**/ fd_topob_tile_out( topo, "plugin", 0UL, "plugin_out", 0UL );
/**/ fd_topob_tile_in( topo, "plugin", 0UL, "metric_in", "replay_plugi", 0UL, FD_TOPOB_RELIABLE, FD_TOPOB_POLLED );
/**/ fd_topob_tile_in( topo, "plugin", 0UL, "metric_in", "gossip_plugi", 0UL, FD_TOPOB_RELIABLE, FD_TOPOB_POLLED );
/**/ fd_topob_tile_in( topo, "plugin", 0UL, "metric_in", "stake_out", 0UL, FD_TOPOB_RELIABLE, FD_TOPOB_POLLED );
- /**/ fd_topob_tile_in( topo, "plugin", 0UL, "metric_in", "votes_plugin", 0UL, FD_TOPOB_RELIABLE, FD_TOPOB_POLLED );
}
/* Link from writer tile to replay tile, to send solcap account updates so that they are serialized.
diff --git a/src/disco/metrics/generated/fd_metrics_all.c b/src/disco/metrics/generated/fd_metrics_all.c
index 739137b449..4aacf24aa1 100644
--- a/src/disco/metrics/generated/fd_metrics_all.c
+++ b/src/disco/metrics/generated/fd_metrics_all.c
@@ -49,7 +49,6 @@ const char * FD_METRICS_TILE_KIND_NAMES[FD_METRICS_TILE_KIND_CNT] = {
"store",
"metric",
"replay",
- "storei",
"gossip",
"netlnk",
"sock",
@@ -74,7 +73,6 @@ const ulong FD_METRICS_TILE_KIND_SIZES[FD_METRICS_TILE_KIND_CNT] = {
FD_METRICS_STORE_TOTAL,
FD_METRICS_METRIC_TOTAL,
FD_METRICS_REPLAY_TOTAL,
- FD_METRICS_STOREI_TOTAL,
FD_METRICS_GOSSIP_TOTAL,
FD_METRICS_NETLNK_TOTAL,
FD_METRICS_SOCK_TOTAL,
@@ -98,7 +96,6 @@ const fd_metrics_meta_t * FD_METRICS_TILE_KIND_METRICS[FD_METRICS_TILE_KIND_CNT]
FD_METRICS_STORE,
FD_METRICS_METRIC,
FD_METRICS_REPLAY,
- FD_METRICS_STOREI,
FD_METRICS_GOSSIP,
FD_METRICS_NETLNK,
FD_METRICS_SOCK,
diff --git a/src/disco/metrics/generated/fd_metrics_all.h b/src/disco/metrics/generated/fd_metrics_all.h
index c51d94ed88..ec89d9b8f6 100644
--- a/src/disco/metrics/generated/fd_metrics_all.h
+++ b/src/disco/metrics/generated/fd_metrics_all.h
@@ -16,7 +16,6 @@
#include "fd_metrics_shred.h"
#include "fd_metrics_store.h"
#include "fd_metrics_replay.h"
-#include "fd_metrics_storei.h"
#include "fd_metrics_repair.h"
#include "fd_metrics_gossip.h"
#include "fd_metrics_netlnk.h"
@@ -160,7 +159,7 @@ extern const fd_metrics_meta_t FD_METRICS_ALL_LINK_OUT[FD_METRICS_ALL_LINK_OUT_T
#define FD_METRICS_TOTAL_SZ (8UL*253UL)
-#define FD_METRICS_TILE_KIND_CNT 22
+#define FD_METRICS_TILE_KIND_CNT 21
extern const char * FD_METRICS_TILE_KIND_NAMES[FD_METRICS_TILE_KIND_CNT];
extern const ulong FD_METRICS_TILE_KIND_SIZES[FD_METRICS_TILE_KIND_CNT];
extern const fd_metrics_meta_t * FD_METRICS_TILE_KIND_METRICS[FD_METRICS_TILE_KIND_CNT];
diff --git a/src/disco/metrics/generated/fd_metrics_repair.c b/src/disco/metrics/generated/fd_metrics_repair.c
index 640ea7f104..ea69b3f65d 100644
--- a/src/disco/metrics/generated/fd_metrics_repair.c
+++ b/src/disco/metrics/generated/fd_metrics_repair.c
@@ -2,6 +2,9 @@
#include "fd_metrics_repair.h"
const fd_metrics_meta_t FD_METRICS_REPAIR[FD_METRICS_REPAIR_TOTAL] = {
+ DECLARE_METRIC( REPAIR_FIRST_TURBINE_SLOT, GAUGE ),
+ DECLARE_METRIC( REPAIR_LATEST_TURBINE_SLOT, GAUGE ),
+ DECLARE_METRIC( REPAIR_LATEST_REPAIR_SLOT, GAUGE ),
DECLARE_METRIC( REPAIR_RECV_CLNT_PKT, COUNTER ),
DECLARE_METRIC( REPAIR_RECV_SERV_PKT, COUNTER ),
DECLARE_METRIC( REPAIR_RECV_SERV_CORRUPT_PKT, COUNTER ),
diff --git a/src/disco/metrics/generated/fd_metrics_repair.h b/src/disco/metrics/generated/fd_metrics_repair.h
index f8df3c9c36..daa8b77853 100644
--- a/src/disco/metrics/generated/fd_metrics_repair.h
+++ b/src/disco/metrics/generated/fd_metrics_repair.h
@@ -3,87 +3,105 @@
#include "../fd_metrics_base.h"
#include "fd_metrics_enums.h"
-#define FD_METRICS_COUNTER_REPAIR_RECV_CLNT_PKT_OFF (16UL)
+#define FD_METRICS_GAUGE_REPAIR_FIRST_TURBINE_SLOT_OFF (16UL)
+#define FD_METRICS_GAUGE_REPAIR_FIRST_TURBINE_SLOT_NAME "repair_first_turbine_slot"
+#define FD_METRICS_GAUGE_REPAIR_FIRST_TURBINE_SLOT_TYPE (FD_METRICS_TYPE_GAUGE)
+#define FD_METRICS_GAUGE_REPAIR_FIRST_TURBINE_SLOT_DESC ""
+#define FD_METRICS_GAUGE_REPAIR_FIRST_TURBINE_SLOT_CVT (FD_METRICS_CONVERTER_NONE)
+
+#define FD_METRICS_GAUGE_REPAIR_LATEST_TURBINE_SLOT_OFF (17UL)
+#define FD_METRICS_GAUGE_REPAIR_LATEST_TURBINE_SLOT_NAME "repair_latest_turbine_slot"
+#define FD_METRICS_GAUGE_REPAIR_LATEST_TURBINE_SLOT_TYPE (FD_METRICS_TYPE_GAUGE)
+#define FD_METRICS_GAUGE_REPAIR_LATEST_TURBINE_SLOT_DESC ""
+#define FD_METRICS_GAUGE_REPAIR_LATEST_TURBINE_SLOT_CVT (FD_METRICS_CONVERTER_NONE)
+
+#define FD_METRICS_GAUGE_REPAIR_LATEST_REPAIR_SLOT_OFF (18UL)
+#define FD_METRICS_GAUGE_REPAIR_LATEST_REPAIR_SLOT_NAME "repair_latest_repair_slot"
+#define FD_METRICS_GAUGE_REPAIR_LATEST_REPAIR_SLOT_TYPE (FD_METRICS_TYPE_GAUGE)
+#define FD_METRICS_GAUGE_REPAIR_LATEST_REPAIR_SLOT_DESC ""
+#define FD_METRICS_GAUGE_REPAIR_LATEST_REPAIR_SLOT_CVT (FD_METRICS_CONVERTER_NONE)
+
+#define FD_METRICS_COUNTER_REPAIR_RECV_CLNT_PKT_OFF (19UL)
#define FD_METRICS_COUNTER_REPAIR_RECV_CLNT_PKT_NAME "repair_recv_clnt_pkt"
#define FD_METRICS_COUNTER_REPAIR_RECV_CLNT_PKT_TYPE (FD_METRICS_TYPE_COUNTER)
#define FD_METRICS_COUNTER_REPAIR_RECV_CLNT_PKT_DESC "Now many client packets have we received"
#define FD_METRICS_COUNTER_REPAIR_RECV_CLNT_PKT_CVT (FD_METRICS_CONVERTER_NONE)
-#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_PKT_OFF (17UL)
+#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_PKT_OFF (20UL)
#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_PKT_NAME "repair_recv_serv_pkt"
#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_PKT_TYPE (FD_METRICS_TYPE_COUNTER)
#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_PKT_DESC "How many server packets have we received"
#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_PKT_CVT (FD_METRICS_CONVERTER_NONE)
-#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_CORRUPT_PKT_OFF (18UL)
+#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_CORRUPT_PKT_OFF (21UL)
#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_CORRUPT_PKT_NAME "repair_recv_serv_corrupt_pkt"
#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_CORRUPT_PKT_TYPE (FD_METRICS_TYPE_COUNTER)
#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_CORRUPT_PKT_DESC "How many corrupt server packets have we received"
#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_CORRUPT_PKT_CVT (FD_METRICS_CONVERTER_NONE)
-#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_INVALID_SIGNATURE_OFF (19UL)
+#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_INVALID_SIGNATURE_OFF (22UL)
#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_INVALID_SIGNATURE_NAME "repair_recv_serv_invalid_signature"
#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_INVALID_SIGNATURE_TYPE (FD_METRICS_TYPE_COUNTER)
#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_INVALID_SIGNATURE_DESC "How many invalid signatures have we received"
#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_INVALID_SIGNATURE_CVT (FD_METRICS_CONVERTER_NONE)
-#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_FULL_PING_TABLE_OFF (20UL)
+#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_FULL_PING_TABLE_OFF (23UL)
#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_FULL_PING_TABLE_NAME "repair_recv_serv_full_ping_table"
#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_FULL_PING_TABLE_TYPE (FD_METRICS_TYPE_COUNTER)
#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_FULL_PING_TABLE_DESC "Is our ping table full and causing packet drops"
#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_FULL_PING_TABLE_CVT (FD_METRICS_CONVERTER_NONE)
-#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_PKT_TYPES_OFF (21UL)
+#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_PKT_TYPES_OFF (24UL)
#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_PKT_TYPES_NAME "repair_recv_serv_pkt_types"
#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_PKT_TYPES_TYPE (FD_METRICS_TYPE_COUNTER)
#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_PKT_TYPES_DESC "Server messages received"
#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_PKT_TYPES_CVT (FD_METRICS_CONVERTER_NONE)
#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_PKT_TYPES_CNT (5UL)
-#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_PKT_TYPES_PONG_OFF (21UL)
-#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_PKT_TYPES_WINDOW_OFF (22UL)
-#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_PKT_TYPES_HIGHEST_WINDOW_OFF (23UL)
-#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_PKT_TYPES_ORPHAN_OFF (24UL)
-#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_PKT_TYPES_UNKNOWN_OFF (25UL)
+#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_PKT_TYPES_PONG_OFF (24UL)
+#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_PKT_TYPES_WINDOW_OFF (25UL)
+#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_PKT_TYPES_HIGHEST_WINDOW_OFF (26UL)
+#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_PKT_TYPES_ORPHAN_OFF (27UL)
+#define FD_METRICS_COUNTER_REPAIR_RECV_SERV_PKT_TYPES_UNKNOWN_OFF (28UL)
-#define FD_METRICS_COUNTER_REPAIR_RECV_PKT_CORRUPTED_MSG_OFF (26UL)
+#define FD_METRICS_COUNTER_REPAIR_RECV_PKT_CORRUPTED_MSG_OFF (29UL)
#define FD_METRICS_COUNTER_REPAIR_RECV_PKT_CORRUPTED_MSG_NAME "repair_recv_pkt_corrupted_msg"
#define FD_METRICS_COUNTER_REPAIR_RECV_PKT_CORRUPTED_MSG_TYPE (FD_METRICS_TYPE_COUNTER)
#define FD_METRICS_COUNTER_REPAIR_RECV_PKT_CORRUPTED_MSG_DESC "How many corrupt messages have we received"
#define FD_METRICS_COUNTER_REPAIR_RECV_PKT_CORRUPTED_MSG_CVT (FD_METRICS_CONVERTER_NONE)
-#define FD_METRICS_COUNTER_REPAIR_SEND_PKT_CNT_OFF (27UL)
+#define FD_METRICS_COUNTER_REPAIR_SEND_PKT_CNT_OFF (30UL)
#define FD_METRICS_COUNTER_REPAIR_SEND_PKT_CNT_NAME "repair_send_pkt_cnt"
#define FD_METRICS_COUNTER_REPAIR_SEND_PKT_CNT_TYPE (FD_METRICS_TYPE_COUNTER)
#define FD_METRICS_COUNTER_REPAIR_SEND_PKT_CNT_DESC "How many packets have sent"
#define FD_METRICS_COUNTER_REPAIR_SEND_PKT_CNT_CVT (FD_METRICS_CONVERTER_NONE)
-#define FD_METRICS_COUNTER_REPAIR_SENT_PKT_TYPES_OFF (28UL)
+#define FD_METRICS_COUNTER_REPAIR_SENT_PKT_TYPES_OFF (31UL)
#define FD_METRICS_COUNTER_REPAIR_SENT_PKT_TYPES_NAME "repair_sent_pkt_types"
#define FD_METRICS_COUNTER_REPAIR_SENT_PKT_TYPES_TYPE (FD_METRICS_TYPE_COUNTER)
#define FD_METRICS_COUNTER_REPAIR_SENT_PKT_TYPES_DESC "What types of client messages are we sending"
#define FD_METRICS_COUNTER_REPAIR_SENT_PKT_TYPES_CVT (FD_METRICS_CONVERTER_NONE)
#define FD_METRICS_COUNTER_REPAIR_SENT_PKT_TYPES_CNT (3UL)
-#define FD_METRICS_COUNTER_REPAIR_SENT_PKT_TYPES_NEEDED_WINDOW_OFF (28UL)
-#define FD_METRICS_COUNTER_REPAIR_SENT_PKT_TYPES_NEEDED_HIGHEST_WINDOW_OFF (29UL)
-#define FD_METRICS_COUNTER_REPAIR_SENT_PKT_TYPES_NEEDED_ORPHAN_OFF (30UL)
+#define FD_METRICS_COUNTER_REPAIR_SENT_PKT_TYPES_NEEDED_WINDOW_OFF (31UL)
+#define FD_METRICS_COUNTER_REPAIR_SENT_PKT_TYPES_NEEDED_HIGHEST_WINDOW_OFF (32UL)
+#define FD_METRICS_COUNTER_REPAIR_SENT_PKT_TYPES_NEEDED_ORPHAN_OFF (33UL)
-#define FD_METRICS_HISTOGRAM_REPAIR_STORE_LINK_WAIT_OFF (31UL)
+#define FD_METRICS_HISTOGRAM_REPAIR_STORE_LINK_WAIT_OFF (34UL)
#define FD_METRICS_HISTOGRAM_REPAIR_STORE_LINK_WAIT_NAME "repair_store_link_wait"
#define FD_METRICS_HISTOGRAM_REPAIR_STORE_LINK_WAIT_TYPE (FD_METRICS_TYPE_HISTOGRAM)
#define FD_METRICS_HISTOGRAM_REPAIR_STORE_LINK_WAIT_DESC "Time in seconds spent waiting for the store to link a new FEC set"
#define FD_METRICS_HISTOGRAM_REPAIR_STORE_LINK_WAIT_CVT (FD_METRICS_CONVERTER_SECONDS)
#define FD_METRICS_HISTOGRAM_REPAIR_STORE_LINK_WAIT_MIN (1e-08)
-#define FD_METRICS_HISTOGRAM_REPAIR_STORE_LINK_WAIT_MAX (0.001)
+#define FD_METRICS_HISTOGRAM_REPAIR_STORE_LINK_WAIT_MAX (0.0005)
-#define FD_METRICS_HISTOGRAM_REPAIR_STORE_LINK_WORK_OFF (48UL)
+#define FD_METRICS_HISTOGRAM_REPAIR_STORE_LINK_WORK_OFF (51UL)
#define FD_METRICS_HISTOGRAM_REPAIR_STORE_LINK_WORK_NAME "repair_store_link_work"
#define FD_METRICS_HISTOGRAM_REPAIR_STORE_LINK_WORK_TYPE (FD_METRICS_TYPE_HISTOGRAM)
#define FD_METRICS_HISTOGRAM_REPAIR_STORE_LINK_WORK_DESC "Time in seconds spent on linking a new FEC set"
#define FD_METRICS_HISTOGRAM_REPAIR_STORE_LINK_WORK_CVT (FD_METRICS_CONVERTER_SECONDS)
#define FD_METRICS_HISTOGRAM_REPAIR_STORE_LINK_WORK_MIN (1e-08)
-#define FD_METRICS_HISTOGRAM_REPAIR_STORE_LINK_WORK_MAX (0.001)
+#define FD_METRICS_HISTOGRAM_REPAIR_STORE_LINK_WORK_MAX (0.0005)
-#define FD_METRICS_REPAIR_TOTAL (17UL)
+#define FD_METRICS_REPAIR_TOTAL (20UL)
extern const fd_metrics_meta_t FD_METRICS_REPAIR[FD_METRICS_REPAIR_TOTAL];
diff --git a/src/disco/metrics/generated/fd_metrics_shred.h b/src/disco/metrics/generated/fd_metrics_shred.h
index 4f87b52937..006f62142d 100644
--- a/src/disco/metrics/generated/fd_metrics_shred.h
+++ b/src/disco/metrics/generated/fd_metrics_shred.h
@@ -117,7 +117,7 @@
#define FD_METRICS_HISTOGRAM_SHRED_STORE_INSERT_WAIT_DESC "Time in seconds spent waiting for the store to insert a new FEC set"
#define FD_METRICS_HISTOGRAM_SHRED_STORE_INSERT_WAIT_CVT (FD_METRICS_CONVERTER_SECONDS)
#define FD_METRICS_HISTOGRAM_SHRED_STORE_INSERT_WAIT_MIN (1e-08)
-#define FD_METRICS_HISTOGRAM_SHRED_STORE_INSERT_WAIT_MAX (0.001)
+#define FD_METRICS_HISTOGRAM_SHRED_STORE_INSERT_WAIT_MAX (0.0005)
#define FD_METRICS_HISTOGRAM_SHRED_STORE_INSERT_WORK_OFF (133UL)
#define FD_METRICS_HISTOGRAM_SHRED_STORE_INSERT_WORK_NAME "shred_store_insert_work"
@@ -125,7 +125,7 @@
#define FD_METRICS_HISTOGRAM_SHRED_STORE_INSERT_WORK_DESC "Time in seconds spent on inserting a new FEC set"
#define FD_METRICS_HISTOGRAM_SHRED_STORE_INSERT_WORK_CVT (FD_METRICS_CONVERTER_SECONDS)
#define FD_METRICS_HISTOGRAM_SHRED_STORE_INSERT_WORK_MIN (1e-08)
-#define FD_METRICS_HISTOGRAM_SHRED_STORE_INSERT_WORK_MAX (0.001)
+#define FD_METRICS_HISTOGRAM_SHRED_STORE_INSERT_WORK_MAX (0.0005)
#define FD_METRICS_SHRED_TOTAL (22UL)
extern const fd_metrics_meta_t FD_METRICS_SHRED[FD_METRICS_SHRED_TOTAL];
diff --git a/src/disco/metrics/metrics.xml b/src/disco/metrics/metrics.xml
index f5a22103bb..c07241a0a2 100644
--- a/src/disco/metrics/metrics.xml
+++ b/src/disco/metrics/metrics.xml
@@ -680,10 +680,6 @@ metric introduced.
Time in seconds spent on publishing a new FEC set
-
-
-
-
@@ -791,6 +787,9 @@ metric introduced.
+
+
+
diff --git a/src/discof/repair/fd_repair_tile.c b/src/discof/repair/fd_repair_tile.c
index 31642c4a26..5ef7211fa6 100644
--- a/src/discof/repair/fd_repair_tile.c
+++ b/src/discof/repair/fd_repair_tile.c
@@ -104,6 +104,7 @@ struct fd_repair_tile_ctx {
ulong * turbine_slot0;
ulong * turbine_slot;
+ ulong latest_repair_slot; /* slot of most recent repair request, used as a gauge metric */
uchar identity_private_key[ 32 ];
fd_pubkey_t identity_public_key;
@@ -412,6 +413,7 @@ fd_repair_send_requests( fd_repair_tile_ctx_t * ctx,
fd_repair_send_request( ctx, stem, glob, type, slot, shred_index, id, now );
if( FD_UNLIKELY( glob->peer_idx >= glob->peer_cnt ) ) glob->peer_idx = 0; /* wrap around */
}
+ ctx->latest_repair_slot = slot;
}
@@ -1060,6 +1062,10 @@ static inline void
metrics_write( fd_repair_tile_ctx_t * ctx ) {
/* Repair-protocol-specific metrics */
fd_repair_metrics_t * metrics = fd_repair_get_metrics( ctx->repair );
+ FD_MGAUGE_SET( REPAIR, FIRST_TURBINE_SLOT, fd_fseq_query( ctx->turbine_slot0 ) );
+ FD_MGAUGE_SET( REPAIR, LATEST_TURBINE_SLOT, fd_fseq_query( ctx->turbine_slot ) );
+ FD_MGAUGE_SET( REPAIR, LATEST_REPAIR_SLOT, ctx->latest_repair_slot );
+
FD_MCNT_SET( REPAIR, RECV_CLNT_PKT, metrics->recv_clnt_pkt );
FD_MCNT_SET( REPAIR, RECV_SERV_PKT, metrics->recv_serv_pkt );
FD_MCNT_SET( REPAIR, RECV_SERV_CORRUPT_PKT, metrics->recv_serv_corrupt_pkt );
diff --git a/src/discof/replay/fd_replay_tile.c b/src/discof/replay/fd_replay_tile.c
index 282c92253f..2f50054130 100644
--- a/src/discof/replay/fd_replay_tile.c
+++ b/src/discof/replay/fd_replay_tile.c
@@ -192,7 +192,6 @@ struct fd_replay_tile_ctx {
// Inputs to plugin/gui
fd_replay_out_link_t plugin_out[1];
- fd_replay_out_link_t votes_plugin_out[1];
long last_plugin_push_time;
int tx_metadata_storage;
@@ -1071,103 +1070,6 @@ init_poh( fd_replay_tile_ctx_t * ctx ) {
ctx->poh_init_done = 1;
}
-static void
-publish_votes_to_plugin( fd_replay_tile_ctx_t * ctx,
- fd_stem_context_t * stem ) {
- uchar * dst = (uchar *)fd_chunk_to_laddr( ctx->votes_plugin_out->mem, ctx->votes_plugin_out->chunk );
-
- ulong bank_slot = fd_bank_slot_get( ctx->slot_ctx->bank );
- fd_fork_t * fork = fd_fork_frontier_ele_query( ctx->forks->frontier, &bank_slot, NULL, ctx->forks->pool );
- if( FD_UNLIKELY ( !fork ) ) return;
-
- fd_vote_accounts_global_t const * epoch_stakes = fd_bank_epoch_stakes_locking_query( ctx->slot_ctx->bank );
- fd_vote_accounts_pair_global_t_mapnode_t * epoch_stakes_pool = fd_vote_accounts_vote_accounts_pool_join( epoch_stakes );
- fd_vote_accounts_pair_global_t_mapnode_t * epoch_stakes_root = fd_vote_accounts_vote_accounts_root_join( epoch_stakes );
-
- ulong i = 0;
- FD_SPAD_FRAME_BEGIN( ctx->runtime_spad ) {
- for( fd_vote_accounts_pair_global_t_mapnode_t const * n = fd_vote_accounts_pair_global_t_map_minimum_const( epoch_stakes_pool, epoch_stakes_root );
- n && i < FD_CLUSTER_NODE_CNT;
- n = fd_vote_accounts_pair_global_t_map_successor_const( epoch_stakes_pool, n ) ) {
- if( n->elem.stake == 0 ) continue;
-
- uchar * data = (uchar *)&n->elem.value + n->elem.value.data_offset;
- ulong data_len = n->elem.value.data_len;
-
- int err;
- fd_vote_state_versioned_t * vsv = fd_bincode_decode_spad(
- vote_state_versioned, ctx->runtime_spad,
- data,
- data_len,
- &err );
- if( FD_UNLIKELY( err ) ) {
- FD_LOG_ERR(( "Unexpected failure in decoding vote state %d", err ));
- }
-
- fd_pubkey_t node_pubkey;
- ulong commission;
- ulong epoch_credits;
- fd_vote_epoch_credits_t const * _epoch_credits;
- ulong root_slot;
-
- switch( vsv->discriminant ) {
- case fd_vote_state_versioned_enum_v0_23_5:
- node_pubkey = vsv->inner.v0_23_5.node_pubkey;
- commission = vsv->inner.v0_23_5.commission;
- _epoch_credits = deq_fd_vote_epoch_credits_t_cnt( vsv->inner.v0_23_5.epoch_credits ) == 0 ? NULL : deq_fd_vote_epoch_credits_t_peek_tail_const( vsv->inner.v0_23_5.epoch_credits );
- epoch_credits = _epoch_credits==NULL ? 0UL : _epoch_credits->credits - _epoch_credits->prev_credits;
- root_slot = vsv->inner.v0_23_5.root_slot;
- break;
- case fd_vote_state_versioned_enum_v1_14_11:
- node_pubkey = vsv->inner.v1_14_11.node_pubkey;
- commission = vsv->inner.v1_14_11.commission;
- _epoch_credits = deq_fd_vote_epoch_credits_t_cnt( vsv->inner.v1_14_11.epoch_credits ) == 0 ? NULL : deq_fd_vote_epoch_credits_t_peek_tail_const( vsv->inner.v1_14_11.epoch_credits );
- epoch_credits = _epoch_credits==NULL ? 0UL : _epoch_credits->credits - _epoch_credits->prev_credits;
- root_slot = vsv->inner.v1_14_11.root_slot;
- break;
- case fd_vote_state_versioned_enum_current:
- node_pubkey = vsv->inner.current.node_pubkey;
- commission = vsv->inner.current.commission;
- _epoch_credits = deq_fd_vote_epoch_credits_t_cnt( vsv->inner.current.epoch_credits ) == 0 ? NULL : deq_fd_vote_epoch_credits_t_peek_tail_const( vsv->inner.current.epoch_credits );
- epoch_credits = _epoch_credits==NULL ? 0UL : _epoch_credits->credits - _epoch_credits->prev_credits;
- root_slot = vsv->inner.v0_23_5.root_slot;
- break;
- default:
- __builtin_unreachable();
- }
-
- fd_clock_timestamp_vote_t_mapnode_t query;
- memcpy( query.elem.pubkey.uc, n->elem.key.uc, 32UL );
- fd_clock_timestamp_votes_global_t const * clock_timestamp_votes = fd_bank_clock_timestamp_votes_locking_query( ctx->slot_ctx->bank );
- fd_clock_timestamp_vote_t_mapnode_t * timestamp_votes_root = fd_clock_timestamp_votes_votes_root_join( clock_timestamp_votes );
- fd_clock_timestamp_vote_t_mapnode_t * timestamp_votes_pool = fd_clock_timestamp_votes_votes_pool_join( clock_timestamp_votes );
-
- fd_clock_timestamp_vote_t_mapnode_t * res = fd_clock_timestamp_vote_t_map_find( timestamp_votes_pool, timestamp_votes_root, &query );
-
- fd_vote_update_msg_t * msg = (fd_vote_update_msg_t *)(dst + sizeof(ulong) + i*112U);
- memset( msg, 0, 112U );
- memcpy( msg->vote_pubkey, n->elem.key.uc, sizeof(fd_pubkey_t) );
- memcpy( msg->node_pubkey, node_pubkey.uc, sizeof(fd_pubkey_t) );
- msg->activated_stake = n->elem.stake;
- msg->last_vote = res == NULL ? 0UL : res->elem.slot;
- msg->root_slot = root_slot;
- msg->epoch_credits = epoch_credits;
- msg->commission = (uchar)commission;
- msg->is_delinquent = (uchar)fd_int_if(fd_bank_slot_get( ctx->slot_ctx->bank ) >= 128UL, msg->last_vote <= fd_bank_slot_get( ctx->slot_ctx->bank ) - 128UL, msg->last_vote == 0);
- ++i;
- fd_bank_clock_timestamp_votes_end_locking_query( ctx->slot_ctx->bank );
- }
- } FD_SPAD_FRAME_END;
-
- fd_bank_epoch_stakes_end_locking_query( ctx->slot_ctx->bank );
-
- *(ulong *)dst = i;
-
- ulong tspub = (ulong)fd_frag_meta_ts_comp( fd_tickcount() );
- fd_stem_publish( stem, ctx->votes_plugin_out->idx, FD_PLUGIN_MSG_VOTE_ACCOUNT_UPDATE, ctx->votes_plugin_out->chunk, 0, 0UL, 0UL, tspub );
- ctx->votes_plugin_out->chunk = fd_dcache_compact_next( ctx->votes_plugin_out->chunk, 8UL + 40200UL*(58UL+12UL*34UL), ctx->votes_plugin_out->chunk0, ctx->votes_plugin_out->wmark );
-}
-
static void
handle_writer_state_updates( fd_replay_tile_ctx_t * ctx ) {
@@ -1395,6 +1297,7 @@ handle_slot_change( fd_replay_tile_ctx_t * ctx,
}
ulong turbine_slot = fd_fseq_query( ctx->turbine_slot );
+ ctx->metrics.slot = slot;
FD_LOG_NOTICE(( "\n\n[Distance]\n"
"slot: %lu\n"
"current turbine: %lu\n"
@@ -1682,19 +1585,11 @@ after_credit( fd_replay_tile_ctx_t * ctx,
int * opt_poll_in FD_PARAM_UNUSED,
int * charge_busy FD_PARAM_UNUSED ) {
- if( !ctx->snapshot_init_done ) {
- if( ctx->plugin_out->mem ) {
- uchar msg[56];
- fd_memset( msg, 0, sizeof(msg) );
- msg[ 0 ] = 0; // ValidatorStartProgress::Initializing
- replay_plugin_publish( ctx, stem, FD_PLUGIN_MSG_START_PROGRESS, msg, sizeof(msg) );
- }
-
- if( strlen( ctx->genesis )>0 ) {
+ if( FD_UNLIKELY( !ctx->snapshot_init_done ) ) {
+ if( FD_LIKELY( strlen( ctx->genesis )>0 ) ) {
init_from_genesis( ctx, stem );
ctx->snapshot_init_done = 1;
}
-
return;
}
@@ -1705,12 +1600,6 @@ after_credit( fd_replay_tile_ctx_t * ctx,
exec_and_handle_slice( ctx, stem );
- long now = fd_log_wallclock();
- if( ctx->votes_plugin_out->mem && FD_UNLIKELY( ( now - ctx->last_plugin_push_time )>PLUGIN_PUBLISH_TIME_NS ) ) {
- ctx->last_plugin_push_time = now;
- publish_votes_to_plugin( ctx, stem );
- }
-
}
static void
@@ -2181,16 +2070,6 @@ unprivileged_init( fd_topo_t * topo,
ctx->plugin_out->chunk0 = fd_dcache_compact_chunk0( ctx->plugin_out->mem, replay_plugin_out->dcache );
ctx->plugin_out->wmark = fd_dcache_compact_wmark ( ctx->plugin_out->mem, replay_plugin_out->dcache, replay_plugin_out->mtu );
ctx->plugin_out->chunk = ctx->plugin_out->chunk0;
-
- ctx->votes_plugin_out->idx = fd_topo_find_tile_out_link( topo, tile, "votes_plugin", 0 );
- fd_topo_link_t const * votes_plugin_out = &topo->links[ tile->out_link_id[ ctx->votes_plugin_out->idx] ];
- if( strcmp( votes_plugin_out->name, "votes_plugin" ) ) {
- FD_LOG_ERR(("output link confusion for output %lu", ctx->votes_plugin_out->idx));
- }
- ctx->votes_plugin_out->mem = topo->workspaces[ topo->objs[ votes_plugin_out->dcache_obj_id ].wksp_id ].wksp;
- ctx->votes_plugin_out->chunk0 = fd_dcache_compact_chunk0( ctx->votes_plugin_out->mem, votes_plugin_out->dcache );
- ctx->votes_plugin_out->wmark = fd_dcache_compact_wmark ( ctx->votes_plugin_out->mem, votes_plugin_out->dcache, votes_plugin_out->mtu );
- ctx->votes_plugin_out->chunk = ctx->votes_plugin_out->chunk0;
}
if( strnlen( tile->replay.slots_replayed, sizeof(tile->replay.slots_replayed) )>0UL ) {