Skip to content

Commit 3f9fa23

Browse files
committed
fix(rpc): address review feedback on events SSE (no-panic head emit, keep-alive)
1 parent a3dcb73 commit 3f9fa23

2 files changed

Lines changed: 15 additions & 10 deletions

File tree

crates/blockchain/src/store.rs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -70,14 +70,15 @@ pub fn update_head(store: &mut Store, log_tree: bool, events: Option<&ChainEvent
7070
// Emit the new head whenever fork choice moved it. Read the header once
7171
// and reuse it for slot and parent_root so they stay consistent.
7272
if old_head != new_head {
73-
let new_header = store
74-
.get_block_header(&new_head)
75-
.expect("head block exists");
76-
let _ = events.send(ChainEvent::Head {
77-
slot: new_header.slot,
78-
root: new_head,
79-
parent_root: new_header.parent_root,
80-
});
73+
if let Some(new_header) = store.get_block_header(&new_head) {
74+
let _ = events.send(ChainEvent::Head {
75+
slot: new_header.slot,
76+
root: new_head,
77+
parent_root: new_header.parent_root,
78+
});
79+
} else {
80+
tracing::warn!("head header missing while emitting Head event; skipping");
81+
}
8182
}
8283

8384
// Emit a finalized-checkpoint event only when finalization advanced.

crates/net/rpc/src/events.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,13 @@ async fn get_events(
4040
ChainEvent::Block { .. } => "block",
4141
ChainEvent::FinalizedCheckpoint { .. } => "finalized_checkpoint",
4242
};
43-
Some(Ok(Event::default().event(name).json_data(ev).ok()?))
43+
Some(Ok(Event::default()
44+
.event(name)
45+
.json_data(ev)
46+
.inspect_err(|err| tracing::warn!(%err, "failed to serialize SSE chain event"))
47+
.ok()?))
4448
});
45-
Sse::new(stream)
49+
Sse::new(stream).keep_alive(axum::response::sse::KeepAlive::default())
4650
}
4751

4852
pub(crate) fn routes() -> Router<Store> {

0 commit comments

Comments
 (0)