WEB: Lifecycle + Lane ownership + Diag fixes

Co-Authored-By: brekotis <93345790+brekotis@users.noreply.github.com>
This commit is contained in:
Alexey
2026-08-27 09:02:19 +03:00
parent c75cf5cc9d
commit f73f52a033
25 changed files with 2050 additions and 245 deletions
+22 -3
View File
@@ -62,6 +62,22 @@ pub(crate) struct StreamIdentity {
pub(crate) instance: u64,
}
/// Exact server-local identity of one carrier-lane incarnation.
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub(crate) struct CarrierLaneIdentity {
/// Numeric lane identifier carried on the wire.
pub(crate) lane_id: u32,
/// Monotonic server-local incarnation of that numeric lane.
pub(crate) instance: u64,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
struct WebSocketLaneClaim {
lane: CarrierLaneIdentity,
peer_port: u16,
connection_id: Option<u64>,
}
struct StreamState {
instance: u64,
inbound: VecDeque<InboundChunk>,
@@ -144,7 +160,7 @@ struct SessionState {
carrier_lanes: HashMap<u32, CarrierLane>,
lane_open_waits: usize,
next_lane_instance: u64,
websocket_lane_reservations: HashMap<u32, u16>,
websocket_lane_reservations: HashMap<u32, WebSocketLaneClaim>,
pending_bytes: usize,
pending_items: usize,
pending_control_bytes: usize,
@@ -506,11 +522,14 @@ fn remember_closed(state: &mut SessionState, stream_id: u32, limit: usize) -> Op
evicted
}
fn insert_carrier_lane(state: &mut SessionState, lane_id: u32) -> Option<u64> {
fn insert_carrier_lane(state: &mut SessionState, lane_id: u32) -> Option<CarrierLaneIdentity> {
if state.carrier_lanes.contains_key(&lane_id) {
return None;
}
let instance = state.next_lane_instance;
state.next_lane_instance = instance.checked_add(1)?;
state
.carrier_lanes
.insert(lane_id, CarrierLane::new(instance));
Some(instance)
Some(CarrierLaneIdentity { lane_id, instance })
}