Skip to content

Commit 3a20ee8

Browse files
committed
test(server): tolerate serialized inference upserts
1 parent 461e382 commit 3a20ee8

1 file changed

Lines changed: 30 additions & 10 deletions

File tree

crates/openshell-server/src/inference.rs

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1113,7 +1113,9 @@ mod tests {
11131113
let result1 = handle1.await.unwrap();
11141114
let result2 = handle2.await.unwrap();
11151115

1116-
// One should succeed with MustCreate, the other should fail
1116+
// If both tasks observe a missing route before either insert commits, MustCreate
1117+
// should let exactly one win. If the scheduler serializes them, the second call
1118+
// may legitimately observe the new route and take the update path.
11171119
let successes = [&result1, &result2].iter().filter(|r| r.is_ok()).count();
11181120
let failures = [&result1, &result2]
11191121
.iter()
@@ -1127,22 +1129,40 @@ mod tests {
11271129
})
11281130
.count();
11291131

1130-
assert_eq!(
1131-
successes, 1,
1132-
"exactly one create should succeed, got: {result1:?}, {result2:?}"
1133-
);
1134-
assert_eq!(
1135-
failures, 1,
1136-
"exactly one create should fail, got: {result1:?}, {result2:?}"
1132+
assert!(
1133+
successes == 1 || successes == 2,
1134+
"one racing create should succeed, or both serialized upserts should succeed, got: {result1:?}, {result2:?}"
11371135
);
1136+
if successes == 1 {
1137+
assert_eq!(
1138+
failures, 1,
1139+
"the losing racing create should fail, got: {result1:?}, {result2:?}"
1140+
);
1141+
} else {
1142+
assert_eq!(
1143+
failures, 0,
1144+
"serialized upserts should not fail, got: {result1:?}, {result2:?}"
1145+
);
1146+
let mut versions = [&result1, &result2]
1147+
.into_iter()
1148+
.map(|result| result.as_ref().expect("success").route.version)
1149+
.collect::<Vec<_>>();
1150+
versions.sort_unstable();
1151+
assert_eq!(
1152+
versions,
1153+
vec![1, 2],
1154+
"serialized create-then-update should return versions 1 and 2"
1155+
);
1156+
}
11381157

1139-
// Only one route should exist
1158+
// Only one route should exist.
11401159
let route = store
11411160
.get_message_by_name::<InferenceRoute>(CLUSTER_INFERENCE_ROUTE_NAME)
11421161
.await
11431162
.expect("fetch")
11441163
.expect("route should exist");
1145-
assert_eq!(route.version, 1);
1164+
let expected_version = if successes == 1 { 1 } else { 2 };
1165+
assert_eq!(route.version, expected_version);
11461166
}
11471167

11481168
#[tokio::test]

0 commit comments

Comments
 (0)