Skip to content

Commit 455e9e5

Browse files
committed
diag(daemon): name the cohort path that admits a mismatched build
A forced client/daemon build mismatch raises a cohort conflict locally but is ADMITTED on every CI leg, which made the #1388 conflict regression untestable there. Reading the code explains how that is possible: identity comparison happens ONLY in the BUSY branch, i.e. when another process already holds the cohort lifetime lock. When the EX acquire succeeds - no live holder - the participant claims the cohort and NO comparison runs at all, so a mismatched build joins. That is correct behaviour when nothing is running. What is missing is the ability to tell the two apart after the fact: "was the lifetime lock held?" is exactly the question that separates the local run from the CI run, and no log line answered it. This is deliberately observability only - no admission behaviour changes. The next CI run that exercises the path will say which branch it took, and that decides whether the CI daemon simply is not holding the lease (an environment fact) or the lease is being released early (a real bug). Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
1 parent 0d6f26a commit 455e9e5

1 file changed

Lines changed: 8 additions & 0 deletions

File tree

src/daemon/version_cohort.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -457,6 +457,14 @@ cbm_version_cohort_status_t cbm_version_cohort_acquire(cbm_version_cohort_manage
457457
CBM_PRIVATE_FILE_LOCK_EX, &lease->lifetime);
458458
cbm_version_cohort_status_t status = version_cohort_status_from_lock(lock_status);
459459
if (status == CBM_VERSION_COHORT_OK) {
460+
/* No live holder: this participant CLAIMS the cohort and NO identity
461+
* comparison happens — a mismatched build is admitted, not refused.
462+
* That is correct when nothing is running, and it is the only path by
463+
* which a mismatched client can join. Name it: "was the lifetime lock
464+
* held?" is exactly what separates a local run (conflict raised) from
465+
* a CI run (client admitted), and it was not observable in any log. */
466+
cbm_log_info("version_cohort.claimed_unheld", "build",
467+
identity->build_fingerprint ? identity->build_fingerprint : "<null>");
460468
status = version_cohort_claim_new(lease, identity, deadline_ms);
461469
} else if (status == CBM_VERSION_COHORT_BUSY) {
462470
lock_status =

0 commit comments

Comments
 (0)