CMP-4485: [experiment] Parallelize destructive serial e2e tests across per-worker pools - #1304
Conversation
|
@Vincent056: This pull request references CMP-4485 which is a valid jira issue. Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the bug to target either version "5.0." or "openshift-5.0.", but it targets "compliance-operator-1.10.0" instead. DetailsIn response to this:
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository. |
|
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: Vincent056 The full list of commands accepted by this bot can be found here. The pull request process is described here DetailsNeeds approval from an approver in each of these files:
Approvers can indicate their approval by writing |
The reboot-heavy serial tests each apply a MachineConfig to the single shared "e2e" pool and wait for the node to reboot, so they run strictly one after another - the 5 remediation tests dominate the suite runtime. Give each destructive test its own isolated MachineConfigPool lane so they can run concurrently. setUpTestPools carves one pool per existing worker node (no cluster scaling) with matching per-lane ScanSettings, and hands lanes to tests via f.AcquireTestPool, which blocks/queues when all lanes are busy. The 5 remediation tests now call t.Parallel() and target their lane's pool. Distinct MachineConfigPools reboot independently, so the lanes proceed at the same time. Lane count defaults to 1 (legacy single "e2e" pool) so the non-serial suites that share SetUp are unaffected; the e2e-serial Makefile target raises it to 3 via E2E_PARALLEL_POOLS. Teardown skips the lane label restore/pool deletion since the CI cluster is destroyed right after. Note: with 3 lanes on a 3-worker cluster every worker is a reboot target, so the operator has no idle worker to fall back to during simultaneous reboots. If that proves flaky, set E2E_PARALLEL_POOLS=2 to keep one baseline worker. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
edde306 to
11a24b1
Compare
|
🤖 To deploy this PR, run the following command: |
|
@Vincent056: The following tests failed, say
Full PR test history. Your PR dashboard. DetailsInstructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here. |
|
PR needs rebase. DetailsInstructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. |
|
Hi Vincent, The PR looks good, though during code review with Claude I found two potential bugs:
|
|
Stale PRs are closed after 21d of inactivity. If this PR is still relevant, comment to refresh it or remove the stale label. If this PR is safe to close now please do so with /lifecycle stale |
Experimental — measuring whether the destructive serial e2e tests are faster when run in parallel. Opening this to let CI time it and to see whether concurrent node reboots are stable. Not necessarily for merge as-is.
Motivation
The e2e-aws-serial suite is ~97 min of test wall-clock, and the 5 reboot/remediation tests dominate it because they each apply a MachineConfig to the single shared
e2epool and wait for a node reboot — strictly one after another.What this does
Give each destructive test its own isolated
MachineConfigPoollane so they run concurrently:framework/testpools.go(new):TestPoollane +f.AcquireTestPool(t)allocator (buffered channel — blocks/queues when all lanes are busy, releases viat.Cleanup).setUpTestPools()carves one pool per existing worker node (no cluster scaling — reuses what's available) with matching per-lane ScanSettings.framework/common.go: splitcreateMachineConfigPoolintogetWorkerNodes()+createMachineConfigPoolFromNode(); generalizedensureE2EScanSettings→…ForPool(name).TestAutoRemediate,TestUnapplyRemediation,TestUpdateRemediation,TestKubeletConfigRemediation,TestRuntimeSSHConfigWithRemediation) nowt.Parallel()and target their acquired lane.Also includes the CMP-4485 SSH remediation fix (label-based remediation discovery) as the first commit.
Safety / scoping
e2epool) so the other e2e suites that shareSetUpare unaffected. Thee2e-serialMakefile target raises it to 3 viaE2E_PARALLEL_POOLS(+-parallel 3).rendered-worker, wasted since the CI cluster is torn down right after).Known risk this experiment is testing
With 3 lanes on a 3-worker cluster, every worker is a reboot target, so the compliance-operator pod has no idle worker to fall back to during simultaneous reboots. It should survive (MCO drives the reboots; tests poll with long timeouts), but if it flakes/wedges, set
E2E_PARALLEL_POOLS=2to keep one baseline worker (2 lanes).Expected result
Reboot block ~37 min (post-SSH-fix) → ~13–15 min at 3 lanes. CI timing on this PR is the real measurement.
Jira: https://redhat.atlassian.net/browse/CMP-4485
🤖 Generated with Claude Code