"Got {count} buffered events from worker {worker_id}",
count=events.len()
);
events
}
WorkerKvQueryResponse::TreeDump(events)=>{
tracing::info!(
"Got tree dump from worker {worker_id} (range too old or unspecified), count: {count}",
count=events.len()
);
events
}
WorkerKvQueryResponse::TooNew{
requested_start,
requested_end,
newest_available,
}=>{
tracing::warn!(
"Worker {worker_id} requested range is newer than available data: requested_start: {requested_start:?}, requested_end: {requested_end:?}, newest_available: {newest_available}"
"Failed to recover gap events for worker {worker_id} (gap_start: {gap_start}, gap_end: {gap_end}); proceeding with current event anyway: {e}"
"Failed to recover gap events for worker {worker_id} dp_rank {dp_rank} (gap_start: {gap_start}, gap_end: {gap_end}); proceeding with current event anyway: {e}"
);
);
// Note: If recovery fails, we still apply the current event.
// Note: If recovery fails, we still apply the current event.
// The tree will have a gap, but it's better than dropping the event.
// The tree will have a gap, but it's better than dropping the event.
}
}
}
}
// First event from this worker is always valid - we accept whatever ID it has.
// First event from this (worker, dp_rank) is always valid - we accept whatever ID it has.
// This handles initial startup and worker restarts without requiring event 0.
// This handles initial startup and worker restarts without requiring event 0.
// Update last seen event ID (use max to handle out-of-order)
// Update last seen event ID (use max to handle out-of-order)