pub mod address_book;
pub mod backoff_table;
pub mod backpressure_notice;
pub mod backpressure_tracker;
pub mod event_source;
pub mod hold_table;
pub mod inbound_dedup;
pub mod outbound_queue;
pub mod peer_gate;
pub mod peer_governor;
pub mod peer_state;
pub mod record_buffer;
pub mod request_tracker;
pub mod rng;
pub mod rtt_tracker;
pub mod scheduler;
pub mod serialize_queue;
pub use address_book::{
Address, AddressBook, AddressBookError, AddressError, Multiaddress, Protocol,
};
pub use backoff_table::BackoffTable;
pub use backpressure_notice::{
backoff_notice_type_hash, build_backoff_notice_envelope, BackoffCauseWire,
BackoffNoticePayload, BACKPRESSURE_DOMAIN,
};
pub use backpressure_tracker::{
BackoffCause, BackpressureEntry, BackpressureTracker, Decision as BackpressureDecision,
DEFAULT_HIGH_WATER_PCT, DEFAULT_K_BEFORE_SILENT, DEFAULT_MIN_NOTICE_INTERVAL_NS,
};
pub use event_source::EventSource;
pub use hold_table::HoldTable;
pub use inbound_dedup::InboundDedup;
pub use outbound_queue::OutboundQueue;
pub use peer_gate::PeerGate;
pub use peer_governor::{
BlockReason, Decision, LifecycleTransition, PeerGovernor, PeerHealth, DEFAULT_FAILURE_THRESHOLD,
};
pub use peer_state::PeerState;
pub use record_buffer::RecordBuffer;
pub use request_tracker::RequestTracker;
pub use rng::{CounterRng, GetrandomU64, RngU64Source};
pub use scheduler::{Scheduler, TimerKind};
pub use serialize_queue::SerializeQueue;
use crate::bus::AppEvent;
pub struct FrameworkComponents {
pub scheduler: Scheduler,
pub peer_state: PeerState,
pub request_tracker: RequestTracker,
pub inbound_dedup: InboundDedup,
pub address_book: AddressBook,
pub rtt_tracker: rtt_tracker::RttTracker,
pub outbound_queue: OutboundQueue,
pub event_source: EventSource,
pub serialize_queue: SerializeQueue,
pub hold_table: HoldTable,
pub record_buffer: RecordBuffer,
pub pending_app_events: Vec<AppEvent>,
pub counters: std::collections::HashMap<String, u64>,
pub rng: Box<dyn RngU64Source>,
pub any_fired_groups: std::collections::HashSet<String>,
pub deadline_match_fired: std::collections::HashSet<(u64, u64)>,
pub pending_peer_resolve_failures: Vec<(Option<crate::ids::PeerId>, crate::ids::OpRef)>,
pub inbound_contexts: std::collections::HashMap<crate::ids::ExecId, InboundContext>,
}
#[derive(Clone, Debug, Default)]
pub struct InboundContext {
pub src_peer: Option<crate::ids::PeerId>,
pub wire_req_id: Option<u64>,
pub arrival_ns: Option<u64>,
pub remaining_deadline_ns: Option<u64>,
}
impl FrameworkComponents {
pub fn new() -> Self {
Self {
scheduler: Scheduler::new(),
peer_state: PeerState::new(),
request_tracker: RequestTracker::new(),
inbound_dedup: InboundDedup::new(),
address_book: AddressBook::new(),
rtt_tracker: rtt_tracker::RttTracker::new(),
outbound_queue: OutboundQueue::new(),
event_source: EventSource::new(),
serialize_queue: SerializeQueue::new(),
hold_table: HoldTable::new(),
record_buffer: RecordBuffer::new(),
pending_app_events: Vec::new(),
counters: std::collections::HashMap::new(),
rng: Box::new(GetrandomU64::new()),
any_fired_groups: std::collections::HashSet::new(),
deadline_match_fired: std::collections::HashSet::new(),
pending_peer_resolve_failures: Vec::new(),
inbound_contexts: std::collections::HashMap::new(),
}
}
}
impl Default for FrameworkComponents {
fn default() -> Self {
Self::new()
}
}