mirror of
https://github.com/telemt/telemt.git
synced 2026-10-10 19:35:58 +03:00
WEB: Lifecycle + Lane ownership + Diag fixes
Co-Authored-By: brekotis <93345790+brekotis@users.noreply.github.com>
This commit is contained in:
+22
-3
@@ -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 })
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user