Skip to content

Commit 7634a9b

Browse files
author
Ubuntu
committed
feat(shred-tracker): add --log-finished-slots CLI flag
- Add flag to log highest finished slot when it updates in setBottom - Wire flag through cmd.zig -> config.zig -> service.zig -> shred_tracker - Log directly in existing code path, no separate thread
1 parent f855cd7 commit 7634a9b

File tree

6 files changed

+29
-7
lines changed

6 files changed

+29
-7
lines changed

src/cmd.zig

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ pub fn main() !void {
128128
params.gossip_node.apply(&current_config);
129129
params.repair.apply(&current_config);
130130
current_config.shred_network.dump_shred_tracker = params.repair.dump_shred_tracker;
131+
current_config.shred_network.log_finished_slots = params.repair.log_finished_slots;
131132
// Derive snapshot_dir from validator_dir if using default
132133
if (std.mem.eql(u8, params.snapshot_dir, sig.VALIDATOR_DIR ++ "accounts_db")) {
133134
current_config.accounts_db.snapshot_dir = try std.fs.path.join(gpa, &.{ current_config.validator_dir, "accounts_db" });
@@ -181,6 +182,7 @@ pub fn main() !void {
181182
params.gossip_node.apply(&current_config);
182183
params.repair.apply(&current_config);
183184
current_config.shred_network.dump_shred_tracker = params.repair.dump_shred_tracker;
185+
current_config.shred_network.log_finished_slots = params.repair.log_finished_slots;
184186
current_config.turbine.overwrite_stake_for_testing =
185187
params.overwrite_stake_for_testing;
186188
current_config.shred_network.no_retransmit = params.no_retransmit;
@@ -677,6 +679,7 @@ const Cmd = struct {
677679
max_shreds: u64,
678680
num_retransmit_threads: ?usize,
679681
dump_shred_tracker: bool,
682+
log_finished_slots: bool,
680683

681684
const cmd_info: cli.ArgumentInfoGroup(@This()) = .{
682685
.turbine_port = .{
@@ -733,6 +736,14 @@ const Cmd = struct {
733736
.help = "Create shred-tracker.txt" ++
734737
" to visually represent the currently tracked slots.",
735738
},
739+
.log_finished_slots = .{
740+
.kind = .named,
741+
.name_override = "log-finished-slots",
742+
.alias = .none,
743+
.default_value = false,
744+
.config = {},
745+
.help = "Log the highest finished slot when it updates.",
746+
},
736747
};
737748

738749
fn apply(args: @This(), cfg: *config.Cmd) void {

src/config.zig

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ pub const ShredNetwork = struct {
7676
turbine_recv_port: u16 = 8002,
7777
no_retransmit: bool = true,
7878
dump_shred_tracker: bool = false,
79+
log_finished_slots: bool = false,
7980

8081
/// Converts from the CLI args into the `shred_network.start` parameters
8182
pub fn toConfig(self: ShredNetwork, fallback_slot: sig.core.Slot) ShredNetworkConfig {
@@ -85,6 +86,7 @@ pub const ShredNetwork = struct {
8586
.turbine_recv_port = self.turbine_recv_port,
8687
.retransmit = !self.no_retransmit,
8788
.dump_shred_tracker = self.dump_shred_tracker,
89+
.log_finished_slots = self.log_finished_slots,
8890
};
8991
}
9092
};

src/shred_network/collector/repair_service.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -659,7 +659,7 @@ test "RepairService sends repair request to gossip peer" {
659659
);
660660

661661
var tracker: BasicShredTracker = undefined;
662-
try tracker.init(std.testing.allocator, 13579, .noop, &registry);
662+
try tracker.init(std.testing.allocator, 13579, .noop, &registry, false);
663663
defer tracker.deinit();
664664

665665
var service: RepairService = blk: {

src/shred_network/collector/shred_receiver.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@ test "handleBatch/handlePacket" {
305305

306306
const shred_tracker = try allocator.create(BasicShredTracker);
307307
defer allocator.destroy(shred_tracker);
308-
try shred_tracker.init(allocator, root_slot + 1, .noop, &registry);
308+
try shred_tracker.init(allocator, root_slot + 1, .noop, &registry, false);
309309
defer shred_tracker.deinit();
310310

311311
var exit = Atomic(bool).init(false);

src/shred_network/collector/shred_tracker.zig

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ pub const BasicShredTracker = struct {
4747
/// ring buffer
4848
slots: [num_slots]MonitoredSlot = @splat(.{}),
4949
metrics: Metrics,
50+
/// Whether to log when finished_slots_through is updated
51+
log_finished_slots: bool,
5052

5153
const num_slots: usize = 1024;
5254

@@ -65,6 +67,7 @@ pub const BasicShredTracker = struct {
6567
slot: Slot,
6668
logger: Logger,
6769
registry: *Registry(.{}),
70+
log_finished_slots: bool,
6871
) !void {
6972
const metrics = try registry.initStruct(Metrics);
7073
metrics.finished_slots_through.set(slot);
@@ -77,6 +80,7 @@ pub const BasicShredTracker = struct {
7780
.max_slot_seen = slot,
7881
.logger = logger,
7982
.metrics = metrics,
83+
.log_finished_slots = log_finished_slots,
8084
};
8185
}
8286

@@ -282,6 +286,9 @@ pub const BasicShredTracker = struct {
282286
}
283287
self.current_bottom_slot = @max(self.current_bottom_slot, slot);
284288
self.metrics.finished_slots_through.max(slot -| 1);
289+
if (self.log_finished_slots) {
290+
self.logger.info().logf("tracked to slot: {}", .{slot -| 1});
291+
}
285292
}
286293

287294
/// - Record that a slot has been observed.
@@ -518,7 +525,7 @@ test "trivial happy path" {
518525

519526
const tracker = try allocator.create(BasicShredTracker);
520527
defer allocator.destroy(tracker);
521-
try tracker.init(allocator, 13579, .noop, &registry);
528+
try tracker.init(allocator, 13579, .noop, &registry, false);
522529
defer tracker.deinit();
523530

524531
_ = try tracker.identifyMissing(&msr, Instant.EPOCH_ZERO.plus(Duration.fromSecs(1)));
@@ -542,7 +549,7 @@ test "1 registered shred is identified" {
542549

543550
const tracker = try allocator.create(BasicShredTracker);
544551
defer allocator.destroy(tracker);
545-
try tracker.init(allocator, 13579, .noop, &registry);
552+
try tracker.init(allocator, 13579, .noop, &registry, false);
546553
defer tracker.deinit();
547554

548555
try tracker.registerShred(13579, 123, 13578, false, .EPOCH_ZERO);
@@ -573,7 +580,7 @@ test "slots are only skipped after a competing fork has developed sufficiently"
573580

574581
const tracker = try allocator.create(BasicShredTracker);
575582
defer allocator.destroy(tracker);
576-
try tracker.init(allocator, 1, .noop, &registry);
583+
try tracker.init(allocator, 1, .noop, &registry, false);
577584
defer tracker.deinit();
578585

579586
const start = Instant.EPOCH_ZERO;
@@ -625,7 +632,7 @@ test "slots are not skipped when the current fork is developed" {
625632

626633
const tracker = try allocator.create(BasicShredTracker);
627634
defer allocator.destroy(tracker);
628-
try tracker.init(allocator, 1, .noop, &registry);
635+
try tracker.init(allocator, 1, .noop, &registry, false);
629636
defer tracker.deinit();
630637

631638
const start = Instant.EPOCH_ZERO;

src/shred_network/service.zig

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ pub const ShredNetworkConfig = struct {
3232
turbine_recv_port: u16,
3333
retransmit: bool,
3434
dump_shred_tracker: bool,
35+
log_finished_slots: bool,
3536
};
3637

3738
/// Resources that are required for the Shred Network to operate.
@@ -85,7 +86,7 @@ pub fn start(
8586

8687
// tracker (shared state, internal to Shred Network)
8788
const shred_tracker = try arena.create(BasicShredTracker);
88-
try shred_tracker.init(deps.allocator, conf.root_slot + 1, .from(deps.logger), deps.registry);
89+
try shred_tracker.init(deps.allocator, conf.root_slot + 1, .from(deps.logger), deps.registry, conf.log_finished_slots);
8990
try defers.deferCall(BasicShredTracker.deinit, .{shred_tracker});
9091

9192
// channels (cant use arena as they need to alloc/free frequently &
@@ -202,6 +203,7 @@ test "start and stop gracefully" {
202203
.turbine_recv_port = 50305,
203204
.retransmit = true,
204205
.dump_shred_tracker = false,
206+
.log_finished_slots = false,
205207
};
206208

207209
var exit = Atomic(bool).init(false);

0 commit comments

Comments
 (0)