Repository navigation
Conversation
|
🔍 OpenCodeReview found 2 issue(s) in this PR.
📄
|
|
Review round 1 summary — all 8 findings from the OpenCodeReview run triaged, plus the test-soundness note already disclosed in the description. Inline threads (4) — all addressed, threads resolved
Summary-routed findings (4)
Disclosed test-soundness note The caller-trap assertion compared a trap table the cleanup scope could not touch; it now compares the trap table of the shell that runs the scope, and a mutant that arms the trap in the caller makes the case fail. The description's remaining-work paragraph is updated accordingly. Verification Fast group 43/0 and the full live group 67/0 (43 fast + 24 live) on native macOS arm64, exit 0, teardown clean; |
6bba9e7 to
109c8ff
Compare
109c8ff to
c15a4fc
Compare
|
Review round 2 summary — 1 finding from the OpenCodeReview run on 109c8ff, no suppressed comments.
All four round-1 threads remain resolved with their replies, and the description still reflects the current state (43 fast + 24 live assertions). |
c15a4fc to
193a7e4
Compare
|
Review round 3 summary — 5 findings from the OpenCodeReview run on c15a4fc, no suppressed comments. All five are addressed in 193a7e4; every thread carries its reply and is resolved.
Verification Standalone logic proofs A–F (read-failure fail-fast, success fall-through, stale-cache fall-through, matching-cache build, both empty-identifier refusals), fast group 43/0, full live suite 67/0 with clean teardown, pinned ShellCheck green over the three scripts, |
193a7e4 to
5092ff5
Compare
|
Review round 4 summary — 1 finding from the OpenCodeReview run on 193a7e4, no suppressed comments. Addressed in 5092ff5; the thread carries its reply and is resolved.
Verification Fast group 44/0, full live suite 68/0 with clean teardown, pinned ShellCheck green over the three scripts, |
5092ff5 to
3ba530b
Compare
| token="$(lw_token)" | ||
| lw_write_listener "${listener}" | ||
| python3 "${listener}" "${bind_address}" "${port_file}" "${token}" >"${log_file}" 2>&1 & | ||
| LW_LISTENER_PID=$! |
There was a problem hiding this comment.
The listener process and its temp files are only cleaned up through explicit lw_stop_listener calls on the success/failure paths of lw_probe_address. There is no EXIT trap in run.sh that calls lw_stop_listener, so any exit that happens while the listener is live leaves a stray python process running for up to 120 seconds plus files under <state_dir>/network. Concretely reachable: lw_probe_from_node calls lw_die when the node image lacks curl/wget/bash/timeout — that aborts run.sh while the listener is still bound and serving. Suggestion: arm trap lw_stop_listener EXIT for the duration of cmd_network (or in lw_probe_address's caller), matching the discipline used by lw_with_fixture_cleanup.
There was a problem hiding this comment.
Valid finding, and confirmed reachable as described: lw_probe_from_node's availability guard (and any other lw_die) exits run.sh while the listener is live, and no EXIT trap calls lw_stop_listener, so the python process can serve for up to its 120-second deadline and the files under the state directory's network/ subdirectory outlive the run until the next cleanup.
This arrived in the review run on the previous head, after the five feedback rounds authorized for this pull request had closed, so it is not being fixed here: the thread is left open and the finding is reported to the pull request's coordinator in the round summary, with this assessment. The bounded fix shape, for whoever picks it up: arm trap lw_stop_listener EXIT for the duration of cmd_network (mirroring lw_with_fixture_cleanup's discipline), keeping the explicit stops on the normal paths. Impact today is self-limiting: a stray listener exits at its own 120-second deadline, binds an ephemeral port, serves a random per-run token, and its files live under the recipe's own state directory, which cleanup removes.
|
Review round 5 summary — this was the fifth and final authorized feedback round. The OpenCodeReview runs on 5092ff5 and 3ba530b produced 4 findings total; all 4 are answered below, 3 with fixes in 6aa14a4 and 1 deferred as out-of-round. No suppressed comments in either run.
Verification for this round Fast group 45/0 (including the new failed-create regression), pinned ShellCheck green over the three scripts, |
3ba530b to
6aa14a4
Compare
| lw_download_checksum() { | ||
| curl -fsSL "$1" | awk '{print $1}' | ||
| } |
There was a problem hiding this comment.
The network fetches in lw_download_checksum and lw_provision_kubectl run curl -fsSL with no deadline (--max-time or --connect-timeout) and no retry. A stalled or black-holed connection hangs preflight/prepare indefinitely — note the recipe itself acknowledges deadline sensitivity elsewhere (the cached release tarball exists precisely because kind's download can exceed a deadline, and lw_read_slice_names gained --request-timeout=10s for the same reason). A truncated download is caught by the checksum, but a hung one is not. Suggest bounding both fetches, e.g. curl -fsSL --max-time 120 ....
Suggestion:
| lw_download_checksum() { | |
| curl -fsSL "$1" | awk '{print $1}' | |
| } | |
| lw_download_checksum() { | |
| curl -fsSL --max-time 60 "$1" | awk '{print $1}' | |
| } |
There was a problem hiding this comment.
Valid finding, same hazard class as the request timeout the previous round added to lw_read_slice_names: lw_download_checksum and lw_provision_kubectl fetch over curl -fsSL with no --max-time/--connect-timeout, so a black-holed connection can hang preflight/prepare where the recipe elsewhere is careful about deadlines. A truncated download is caught by the checksum comparison, but a hung one is not caught by anything.
This arrived in the review run on the final head, after the five feedback rounds authorized for this pull request had closed, so it is not being fixed here: the thread stays open and the finding is reported to the pull request's coordinator with this assessment. The bounded fix shape, for whoever picks it up: add --max-time (and optionally --connect-timeout) to both fetches — the checksum fetch is a tiny document, so a short bound like 30–60 seconds fits, while the kubectl binary download justifies the 120 seconds you suggested.
Signed-off-by: thxCode <thxcode0824@gmail.com>
6aa14a4 to
34ccb54
Compare
What type of PR is this?
/kind enhancement
/area testing
What this PR does / why we need it:
Add a disposable macOS arm64 kind recipe that proves a Kubernetes v1.36.5 control plane can reach a listener on the host. The recipe provisions a task-local kubectl, builds or reuses the pinned native node image, and verifies aggregator routing and disabled EndpointSlice mirroring from the running cluster. A positive EndpointSlice control distinguishes disabled mirroring from a broken fixture or failed API read.
The recipe records cluster ownership, uses an isolated kubeconfig, and refuses to adopt or delete pre-existing clusters or fixture namespaces. Add the development guide, module-map routing and generated site navigation with the fixture tests.
Which issue(s) this PR links to:
NONE
Special notes for your reviewer:
This is the local network prerequisite for the staged Go 1.27.3 / Kubernetes 1.36.5 upgrade. It proves host reachability only; authenticated worker aggregation, TLS and EndpointSlice routing changes remain later work.
Validation: 43 fast assertions and 24 live assertions pass on native macOS arm64 with Kubernetes v1.36.5. Regression and mutation checks detect failed slice reads, deletion of a namespace the fixture did not create, an extraArgs entry without a value, and a cleanup scope that arms its trap in the caller. Bash syntax, ShellCheck and documentation lint pass. The final run removed its disposable cluster and state, preserved the node-image/download caches and left the default kubeconfig unchanged.
Full
make lintpasses with process-scopedGOTOOLCHAIN=go1.26.9, the current module-declared toolchain, using unchanged tool pins. The same gate under host Go 1.27.3 fails because the pinned golangci-lint cannot read its export data. Target-toolchain lint compatibility remains part of the dependency upgrade; this PR does not change the host compiler or linter configuration.Independent qwen review accepted the final scope with no required findings. Its one test-soundness note, the caller-trap assertion comparing a trap table the cleanup scope could not touch, is addressed: the assertion compares the trap table of the shell that runs the cleanup scope, and a mutant that arms the trap in the caller makes it fail. The review-round findings are triaged and answered in the review threads and the summary comment.
Does this PR introduce a user-facing change?