Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions src/api/router/snapshot_objects_bounded_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,7 @@ async fn every_alias_is_admitted_and_exact_oid_body_is_loaded_once() {
.send("POST", "objects", Body::from(request.to_string()))
.await,
409,
"DIGEST_MISMATCH",
"EXPECTED_DIGEST_MISMATCH",
false,
)
.await;
Expand Down Expand Up @@ -314,7 +314,7 @@ async fn conflicting_sizes_reject_before_io_and_distinct_oids_still_verify_each_
.send("POST", "objects", Body::from(request.to_string()))
.await,
409,
"DIGEST_MISMATCH",
"EXPECTED_DIGEST_MISMATCH",
false,
)
.await;
Expand Down Expand Up @@ -388,7 +388,7 @@ async fn truncated_wrong_sha_and_late_stream_error_never_produce_200() {
(
FaultKind::Parts(vec![Bytes::from(vec![0; 8192])]),
409,
"DIGEST_MISMATCH",
"EXPECTED_DIGEST_MISMATCH",
8192,
),
(
Expand Down
32 changes: 24 additions & 8 deletions src/api/router/snapshot_storage_route_fixture.rs
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,8 @@ pub(super) async fn reject_half_lease_commit_for_test(
.await
.unwrap();
// Simulate an omitted derived write; all statement, identity and deferred
// completeness guards remain active, and the deriving trigger is restored
// before the actual commit attempt.
// completeness guards remain active. Failed commit rolls back the trigger
// change; pending deferred events forbid ALTER TABLE before commit.
txn.execute_unprepared(
"ALTER TABLE mst2_snapshot_lease DISABLE TRIGGER mst2_route_lease_insert",
)
Expand All @@ -91,12 +91,28 @@ pub(super) async fn reject_half_lease_commit_for_test(
.unwrap();
assert_eq!(half.try_get::<i64>("", "actual").unwrap(), 1);
assert_eq!(half.try_get::<i64>("", "routes").unwrap(), 0);
txn.execute_unprepared(
"ALTER TABLE mst2_snapshot_lease ENABLE TRIGGER mst2_route_lease_insert",
)
.await
.unwrap();
assert_eq!(trigger_modes(&txn).await, before);
let paused = before.replacen(
"mst2_snapshot_lease:mst2_route_lease_insert:O",
"mst2_snapshot_lease:mst2_route_lease_insert:D",
1,
);
assert_ne!(paused, before);
assert_eq!(trigger_modes(&txn).await, paused);
let complete = txn
.query_one_raw(Statement::from_string(
DbBackend::Postgres,
"SELECT t.tgenabled::text AS mode,t.tgdeferrable AS deferrable,t.tginitdeferred AS deferred
FROM pg_catalog.pg_trigger t WHERE t.tgrelid='mst2_snapshot_lease'::regclass
AND t.tgname='mst2_route_complete' AND NOT t.tgisinternal",
))
.await
.unwrap()
.unwrap();
let mode: String = complete.try_get("", "mode").unwrap();
assert!(matches!(mode.as_str(), "O" | "A"));
assert!(before.contains(&format!("mst2_snapshot_lease:mst2_route_complete:{mode}")));
assert!(complete.try_get::<bool>("", "deferrable").unwrap());
assert!(complete.try_get::<bool>("", "deferred").unwrap());
let rejected = txn.commit().await.unwrap_err();
assert!(
rejected
Expand Down
2 changes: 1 addition & 1 deletion src/api/router/snapshot_storage_route_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1038,7 +1038,7 @@ async fn mst2_generic_storage_routes_temp_prepare_shadow_rejects_qualified_conte
scalar(&txn, "SELECT count(*) FROM mst2_metadata_prepare").await,
0
);
assert_eq!(scalar(&txn, "SELECT (to_regclass('mst2_metadata_prepare')='pg_temp.mst2_metadata_prepare'::regclass)::bigint").await, 1);
assert_eq!(scalar(&txn, "SELECT CASE WHEN to_regclass('mst2_metadata_prepare')='pg_temp.mst2_metadata_prepare'::regclass THEN 1::bigint ELSE 0::bigint END").await, 1);
let rejected = txn.execute_raw(statement(&format!(
"INSERT INTO {schema}.mst2_snapshot_context(snapshot_id,canonical_descriptor,instance_id,commit_oid,
root_tree_oid,metadata_root,prepare_id,publication_sequence,writer_epoch,certificate_receipt_id,authorization_epoch,state)
Expand Down
Loading