Skip to content

Commit 018708b

Browse files
committed
fix(pylon): fence admission exclusions by request instance
Preserve the current engine-concurrency behavior while preventing stale requests from excluding replacement reservations. Update the new capacity regression fixture for request identities. Refs: #1817
1 parent 29b6b0a commit 018708b

2 files changed

Lines changed: 26 additions & 0 deletions

File tree

‎src/libraries/rust/stargate/crates/pylon-lib/src/queue_admission.rs‎

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,9 @@ impl LiveRequestState {
309309
let excluded_request = state
310310
.requests
311311
.get(&required.request_id)
312+
.filter(|record| {
313+
record.instance.as_ref() == Some(&required.request_instance)
314+
})
312315
.and_then(|record| match &record.request {
313316
LiveRequest::Queue(queue, _) => Some(queue),
314317
LiveRequest::Observed(_) => None,
@@ -1004,6 +1007,28 @@ mod tests {
10041007
}
10051008
}
10061009

1010+
#[test]
1011+
fn admission_excludes_only_its_own_request_instance() {
1012+
let live = LiveRequestState::default();
1013+
live.update_model_throughput("model-a", 100.0);
1014+
let stale = required("reused-id", 0, 100);
1015+
let _first = live.track_request(&stale);
1016+
let current = required("reused-id", 0, 200);
1017+
let _replacement = live.track_request(&current);
1018+
let generation = ModelGeneration::new("model-a", 0);
1019+
let evaluate = |request| {
1020+
live.evaluate_generation(
1021+
&PylonQueueMismatchRetryConfig::default(),
1022+
request,
1023+
Some(&generation),
1024+
&headers_with_expected("0"),
1025+
Some(1),
1026+
)
1027+
};
1028+
assert_eq!(evaluate(&stale).actual_ms(), Some(2000));
1029+
assert_eq!(evaluate(&current).actual_ms(), Some(0));
1030+
}
1031+
10071032
#[test]
10081033
fn stale_guards_cannot_advance_or_remove_reused_request_ids() {
10091034
for replacement_model in ["model-a", "model-b"] {

‎src/libraries/rust/stargate/crates/pylon-lib/src/stats/collector.rs‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3724,6 +3724,7 @@ mod tests {
37243724
2
37253725
);
37263726
let required = |request_id: &str| crate::request_observer::RequiredTunnelHeaders {
3727+
request_instance: Default::default(),
37273728
request_id: request_id.to_string(),
37283729
routing_key: None,
37293730
model_id: "model-a".to_string(),

0 commit comments

Comments
 (0)