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
19 changes: 19 additions & 0 deletions dag/test/claim/compute/host_capacity_wet_witness_test.dag
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,25 @@ import gunbc.compute.host_capacity {

data one_gibibyte_in_kibibytes: Int = 1048576

// THIS FILE RUNS ON THE LOCAL-REPO WET LANE, AND THAT TAKES THREE ROWS IN THREE AUTHORITIES.
// Named here because the carriers do not reference each other and nothing refuses a file that has
// some of them and not all -- the state this file was in from gunbc#11962 until gunbc#12025, which
// blocked the merge queue for gunbc#11829 with route_gap_unenrolled=5.
//
// 1. v2.workflow.local_repo_wet_terminal local_repo_wet_schedule -- a WetScheduledClaim per
// identity. This is the ROUTE, and it is what discharges the hold.
// 2. gunbc.ci_layer_roots witness_exclusion_frontier -- the row classifying this file
// LocalRepoWetLane. It does NOT keep the nominal floor from planning these identities: a
// changed witness is admitted regardless of any exclusion, deliberately, so an exclusion list
// cannot be how a witness opts out of the commit that introduces it.
// 3. v2.workflow.floor_route_gap floor_route_gap_expectation_chunk_21 -- the expectation for the
// five identities below that reach fresh_root(). Without it the nominal floor counts a measured
// identity as unmeasured and BLOCKS instead of holding.
//
// ONLY THE FIVE THAT CALL fresh_root() ARE ENROLLED IN (3). the_real_observation_reads_this_machine
// and two_instances_on_one_host_resolve_to_one_pool_at_one_root reach their subjects hermetically;
// enrolling either would be a stale_route_gap, which is its own red. So a claim added below that
// calls fresh_root() owes a chunk_21 row, and one that does not must not have one.
fn fresh_root() -> String {
shell.Mktemp.DirWithTemplate(template: "/tmp/gunbc_compute_capacity.XXXXXX").path
}
Expand Down
56 changes: 55 additions & 1 deletion src/v2/workflow/floor_route_gap.dag
Original file line number Diff line number Diff line change
Expand Up @@ -1464,8 +1464,62 @@ fn floor_route_gap_expectation_chunk_20() -> List<FloorRouteGapExpectation> {
}
}

// THE FIVE test.claim.compute.host_capacity_wet_witness IDENTITIES THAT REACH A REAL HOST POOL.
// Landed by gunbc#11962 with TWO of the three rows chunk_06's header names -- the WetScheduledClaim
// rows in v2.workflow.local_repo_wet_terminal local_repo_wet_schedule, and the
// gunbc.ci_layer_roots witness_exclusion_frontier row classifying the file LocalRepoWetLane -- and
// without this one. Nothing refused the incomplete triple, exactly as that header says nothing
// will; what happened instead is the state it predicts, five red floors later. The immediate cost
// is recorded because it is the argument for the wall that header asks for: these five blocked the
// merge queue for gunbc#11829 (queue run 35673852146, composed revision on 3ab9d319c02), and the
// floor receipt that run published read route_gap_unenrolled=5 route_gap_held=7 -- the seven being
// every OTHER wet identity in the same run, enrolled and therefore held rather than blocking.
//
// THE OPERATION AND GROUND ARE READ FROM THAT RUN, NOT INFERRED, on the standard chunk_06 states:
// each of the five refused with "the hermetic route has no arm for DirWithTemplate (operation
// declares no mock_response)". DirWithTemplate is shell.Mktemp's templated directory operation and
// is a DIFFERENT string from the Dir carried by the chunks above; writing Dir here from the
// neighbouring rows would have produced a floor_route_gap_expectation_mismatch instead of a
// discharge, which is the second half of the guard shape that header names.
//
// THE EXCLUSION ROW WAS NEVER GOING TO REMOVE THESE FROM THE NOMINAL PLAN, and the receipt says so
// at identity grain: disposition=planned_as_changed_witness. The changed-witness sublane admits a
// changed witness REGARDLESS of any exclusion (required_floor_runner cause=ChangedWitnessOutside
// PreparedSubject), deliberately, so that an exclusion list cannot be the way a witness opts out of
// the commit that introduces it. So for a witness whose file is being edited, enrolment here is not
// one of several remedies -- it is the only one that is not a weakening.
//
// WHAT DISCHARGES THE HOLD IS THE WET TERMINAL, NEVER THIS ENROLMENT. The same run recorded all
// seven identities of this module passing on the local-repo wet lane ([local-repo-wet]
// expected=passed observed=passed), and the changed-witness projection already read
// standing=hermetic-route-gap-held-and-wet-passed for exactly these five.
//
// THE OTHER TWO IDENTITIES OF THIS FILE ARE DELIBERATELY ABSENT. the_real_observation_reads_this_
// machine and two_instances_on_one_host_resolve_to_one_pool_at_one_root reached their subjects
// hermetically in the same run (standing=planned-and-passed), so a row for either would be a stale
// enrolment -- an expectation of a gap that does not occur -- which the floor counts as
// stale_route_gap and which is its own red.
fn floor_route_gap_expectation_chunk_21() -> List<FloorRouteGapExpectation> {
Cons {
head: FloorRouteGapExpectation { identity: "test.claim.compute.host_capacity_wet_witness.a_request_the_machine_cannot_back_refuses_below_the_live_floor", operation: "DirWithTemplate", ground: NoMockResponse {} },
tail: Cons {
head: FloorRouteGapExpectation { identity: "test.claim.compute.host_capacity_wet_witness.a_reused_reference_is_a_ledger_refusal_and_never_reported_as_a_full_pool", operation: "DirWithTemplate", ground: NoMockResponse {} },
tail: Cons {
head: FloorRouteGapExpectation { identity: "test.claim.compute.host_capacity_wet_witness.an_appropriation_larger_than_the_machine_refuses_rather_than_admitting", operation: "DirWithTemplate", ground: NoMockResponse {} },
tail: Cons {
head: FloorRouteGapExpectation { identity: "test.claim.compute.host_capacity_wet_witness.competing_reservations_cannot_over_reserve_and_a_release_returns_the_capacity", operation: "DirWithTemplate", ground: NoMockResponse {} },
tail: Cons {
head: FloorRouteGapExpectation { identity: "test.claim.compute.host_capacity_wet_witness.two_requests_summing_past_the_observed_headroom_cannot_both_admit", operation: "DirWithTemplate", ground: NoMockResponse {} },
tail: Empty {}
}
}
}
}
}
}

fn floor_route_gap_expectation_chunks() -> List<List<FloorRouteGapExpectation>> {
Cons { head: floor_route_gap_expectation_chunk_00(), tail: Cons { head: floor_route_gap_expectation_chunk_01(), tail: Cons { head: floor_route_gap_expectation_chunk_02(), tail: Cons { head: floor_route_gap_expectation_chunk_03(), tail: Cons { head: floor_route_gap_expectation_chunk_04(), tail: Cons { head: floor_route_gap_expectation_chunk_05(), tail: Cons { head: floor_route_gap_expectation_chunk_06(), tail: Cons { head: floor_route_gap_expectation_chunk_07(), tail: Cons { head: floor_route_gap_expectation_chunk_08(), tail: Cons { head: floor_route_gap_expectation_chunk_09(), tail: Cons { head: floor_route_gap_expectation_chunk_10(), tail: Cons { head: floor_route_gap_expectation_chunk_11(), tail: Cons { head: floor_route_gap_expectation_chunk_12(), tail: Cons { head: floor_route_gap_expectation_chunk_13(), tail: Cons { head: floor_route_gap_expectation_chunk_14(), tail: Cons { head: floor_route_gap_expectation_chunk_15(), tail: Cons { head: floor_route_gap_expectation_chunk_16(), tail: Cons { head: floor_route_gap_expectation_chunk_17(), tail: Cons { head: floor_route_gap_expectation_chunk_18(), tail: Cons { head: floor_route_gap_expectation_chunk_19(), tail: Cons { head: floor_route_gap_expectation_chunk_20(), tail: Empty {} } } } } } } } } } } } } } } } } } } } } }
Cons { head: floor_route_gap_expectation_chunk_00(), tail: Cons { head: floor_route_gap_expectation_chunk_01(), tail: Cons { head: floor_route_gap_expectation_chunk_02(), tail: Cons { head: floor_route_gap_expectation_chunk_03(), tail: Cons { head: floor_route_gap_expectation_chunk_04(), tail: Cons { head: floor_route_gap_expectation_chunk_05(), tail: Cons { head: floor_route_gap_expectation_chunk_06(), tail: Cons { head: floor_route_gap_expectation_chunk_07(), tail: Cons { head: floor_route_gap_expectation_chunk_08(), tail: Cons { head: floor_route_gap_expectation_chunk_09(), tail: Cons { head: floor_route_gap_expectation_chunk_10(), tail: Cons { head: floor_route_gap_expectation_chunk_11(), tail: Cons { head: floor_route_gap_expectation_chunk_12(), tail: Cons { head: floor_route_gap_expectation_chunk_13(), tail: Cons { head: floor_route_gap_expectation_chunk_14(), tail: Cons { head: floor_route_gap_expectation_chunk_15(), tail: Cons { head: floor_route_gap_expectation_chunk_16(), tail: Cons { head: floor_route_gap_expectation_chunk_17(), tail: Cons { head: floor_route_gap_expectation_chunk_18(), tail: Cons { head: floor_route_gap_expectation_chunk_19(), tail: Cons { head: floor_route_gap_expectation_chunk_20(), tail: Cons { head: floor_route_gap_expectation_chunk_21(), tail: Empty {} } } } } } } } } } } } } } } } } } } } } } }
}

fn floor_route_gap_expectations() -> List<FloorRouteGapExpectation> {
Expand Down