Skip to content

Commit

Permalink
support dead slot in geyser
Browse files Browse the repository at this point in the history
  • Loading branch information
lijunwangs committed Oct 21, 2024
1 parent 7b05e29 commit db5ad2b
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 1 deletion.
21 changes: 20 additions & 1 deletion core/src/replay_stage.rs
Original file line number Diff line number Diff line change
Expand Up @@ -699,6 +699,7 @@ impl ReplayStage {
&bank_notification_sender,
&rewards_recorder_sender,
&rpc_subscriptions,
&slot_status_notifier,
&mut duplicate_slots_tracker,
&duplicate_confirmed_slots,
&mut epoch_slots_frozen_slots,
Expand Down Expand Up @@ -2253,6 +2254,7 @@ impl ReplayStage {
root: Slot,
err: &BlockstoreProcessorError,
rpc_subscriptions: &Arc<RpcSubscriptions>,
slot_status_notifier: &Option<SlotStatusNotifier>,
duplicate_slots_tracker: &mut DuplicateSlotsTracker,
duplicate_confirmed_slots: &DuplicateConfirmedSlots,
epoch_slots_frozen_slots: &mut EpochSlotsFrozenSlots,
Expand Down Expand Up @@ -2293,11 +2295,21 @@ impl ReplayStage {

blockstore.slots_stats.mark_dead(slot);

let err = format!("error: {err:?}");

if let Some(slot_status_notifier) = slot_status_notifier {
slot_status_notifier
.read()
.unwrap()
.notify_slot_dead(slot, err.clone());
}

rpc_subscriptions.notify_slot_update(SlotUpdate::Dead {
slot,
err: format!("error: {err:?}"),
err,
timestamp: timestamp(),
});

let dead_state = DeadState::new_from_state(
slot,
duplicate_slots_tracker,
Expand Down Expand Up @@ -3005,6 +3017,7 @@ impl ReplayStage {
bank_notification_sender: &Option<BankNotificationSenderConfig>,
rewards_recorder_sender: &Option<RewardsRecorderSender>,
rpc_subscriptions: &Arc<RpcSubscriptions>,
slot_status_notifier: &Option<SlotStatusNotifier>,
duplicate_slots_tracker: &mut DuplicateSlotsTracker,
duplicate_confirmed_slots: &DuplicateConfirmedSlots,
epoch_slots_frozen_slots: &mut EpochSlotsFrozenSlots,
Expand Down Expand Up @@ -3045,6 +3058,7 @@ impl ReplayStage {
root,
err,
rpc_subscriptions,
slot_status_notifier,
duplicate_slots_tracker,
duplicate_confirmed_slots,
epoch_slots_frozen_slots,
Expand Down Expand Up @@ -3093,6 +3107,7 @@ impl ReplayStage {
root,
&BlockstoreProcessorError::InvalidTransaction(err),
rpc_subscriptions,
slot_status_notifier,
duplicate_slots_tracker,
duplicate_confirmed_slots,
epoch_slots_frozen_slots,
Expand Down Expand Up @@ -3124,6 +3139,7 @@ impl ReplayStage {
root,
&result_err,
rpc_subscriptions,
slot_status_notifier,
duplicate_slots_tracker,
duplicate_confirmed_slots,
epoch_slots_frozen_slots,
Expand Down Expand Up @@ -3302,6 +3318,7 @@ impl ReplayStage {
bank_notification_sender: &Option<BankNotificationSenderConfig>,
rewards_recorder_sender: &Option<RewardsRecorderSender>,
rpc_subscriptions: &Arc<RpcSubscriptions>,
slot_status_notifier: &Option<SlotStatusNotifier>,
duplicate_slots_tracker: &mut DuplicateSlotsTracker,
duplicate_confirmed_slots: &DuplicateConfirmedSlots,
epoch_slots_frozen_slots: &mut EpochSlotsFrozenSlots,
Expand Down Expand Up @@ -3384,6 +3401,7 @@ impl ReplayStage {
bank_notification_sender,
rewards_recorder_sender,
rpc_subscriptions,
slot_status_notifier,
duplicate_slots_tracker,
duplicate_confirmed_slots,
epoch_slots_frozen_slots,
Expand Down Expand Up @@ -4957,6 +4975,7 @@ pub(crate) mod tests {
0,
err,
&rpc_subscriptions,
&None,
&mut DuplicateSlotsTracker::default(),
&DuplicateConfirmedSlots::new(),
&mut EpochSlotsFrozenSlots::default(),
Expand Down
4 changes: 4 additions & 0 deletions geyser-plugin-interface/src/geyser_plugin_interface.rs
Original file line number Diff line number Diff line change
Expand Up @@ -328,6 +328,9 @@ pub enum SlotStatus {

/// A new bank fork is created with the slot
CreatedBank,

/// A slot is marked dead
Dead,
}

impl SlotStatus {
Expand All @@ -339,6 +342,7 @@ impl SlotStatus {
SlotStatus::FirstShredReceived => "first_shread_received",
SlotStatus::Completed => "completed",
SlotStatus::CreatedBank => "created_bank",
SlotStatus::Dead => "dead",
}
}
}
Expand Down
4 changes: 4 additions & 0 deletions geyser-plugin-manager/src/slot_status_notifier.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,10 @@ impl SlotStatusNotifierInterface for SlotStatusNotifierImpl {
fn notify_created_bank(&self, slot: Slot, parent: Slot) {
self.notify_slot_status(slot, Some(parent), SlotStatus::CreatedBank);
}

fn notify_slot_dead(&self, slot: Slot, _error: String) {
self.notify_slot_status(slot, None, SlotStatus::Dead);
}
}

impl SlotStatusNotifierImpl {
Expand Down
3 changes: 3 additions & 0 deletions rpc/src/slot_status_notifier.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@ pub trait SlotStatusNotifierInterface {

/// Notified when the slot has bank created.
fn notify_created_bank(&self, slot: Slot, parent: Slot);

/// Notified when the slot is marked "Dead"
fn notify_slot_dead(&self, slot: Slot, error: String);
}

pub type SlotStatusNotifier = Arc<RwLock<dyn SlotStatusNotifierInterface + Sync + Send>>;

0 comments on commit db5ad2b

Please sign in to comment.