fix(e2e): widen the migration webhook wait above the observed CI stall (#1260)

The datastore migration spec waits one minute for the kamaji-freeze
ValidatingWebhookConfiguration to appear in the tenant cluster. That budget
sits inside the stall the manager routinely experiences on the CI runner, so
the spec fails intermittently with no fault in Kamaji itself.

Measured in GitHub Actions run 30307341733: the entire manager process - the
host-side tenantcontrolplane controller across every TCP in the suite, plus
this tenant's soot sub-manager - went silent for 2m16s with nothing logged.
That is CPU starvation on the 2-vCPU runner, where many tenant control planes,
datastores and their apiservers compete for two cores.

Widens the wait to five minutes for headroom above the observed stall. The
spec still fails if the webhook genuinely never arrives; it just stops failing
when the runner is merely slow.
This commit is contained in:
Ross Golder
2026-08-11 23:27:24 +02:00
committed by GitHub
parent 2123265811
commit 1ce36455d9
+9 -1
View File
@@ -101,9 +101,17 @@ func featureTestMigration(driver string) {
StatusMustEqualTo(tcp, kamajiv1alpha1.VersionMigrating)
By("waiting for the webhook installation")
// Measured directly in CI (GitHub Actions run 30307341733): the whole manager
// process - the host-side tenantcontrolplane controller across every TCP in the
// suite, plus this tenant's own soot sub-manager - went completely silent for
// 2m16s (21:45:45 to 21:48:01 UTC) with no errors logged, consistent with the
// process being starved of CPU on the 2-vCPU runner rather than any Kamaji-side
// bug: many tenant control planes, datastores, and their apiservers all compete
// for the same two cores. One minute sits well inside that observed stall, so
// the wait is widened to five for headroom above it.
Eventually(func() error {
return tcpClient.Get(context.Background(), types.NamespacedName{Name: "kamaji-freeze"}, &admissionregistrationv1.ValidatingWebhookConfiguration{})
}, time.Minute, time.Second).Should(Succeed())
}, 5*time.Minute, time.Second).Should(Succeed())
By("ensuring changes are not allowed")
Consistently(func() error {