Skip to content

e2e: with no probe client available the LB datapath capture stamps every LB as reachable #3658

Closed

Description

Summary

In hack/e2e-capture-dataplane.sh, when the LB probe produces zero outcomes because no probe client exists (neither nc nor curl reachable in the host netns), lb_capture_decision hits its n == 0 branch and prints skip (line 183 at 605030b), which routes to the artifact line "probe: LB reachable or not probeable from -- reachable, skipped" (line 672). The artifact asserts reachability of an address no probe ever touched; the actual fact is "no probe could run".

Why it matters

This is the same class as the reachability-verdict-from-empty-probes defect just fixed in the bounding branch for #3642, at a sixth site that predates that branch: a conclusion inferred from missing data rather than a statement that data is missing. A minimal e2e image without nc/curl in the host netns would stamp every LB as reachable and silently skip the entire heavy-capture leg, which reads as a healthy datapath.

Fix shape

Give n == 0 its own outcome ("unknown: no probe client available") instead of folding it into skip, and let the artifact line say that no probe ran. The distinction machinery (an explicit unknown verdict that does not collapse into either answer) exists in the in-flight branch already; this site just needs to route through it.

Activity

  1. added
    kind/bugCategorizes issue or PR as related to a bug
    area/testingIssues or PRs related to testing (e2e, bats, unit tests)
    on Aug 8, 2026
  2. lexfrei commented on Aug 8, 2026

    @lexfrei
    ContributorAuthor

    Scope update: the unprobed-input set is wider than the description says. Three distinct inputs reach the skip branch and its "reachable, skipped" artifact line without any probe running: an empty _probenode (neither the announcer nor the endpoint node resolved), an _lbport of 0, and the no-probe-client case the description covers. The first was reproduced under dash with a stub where get svc answers but endpointslices does not; the artifact then asserts reachability of an address the script never touched. All three exist verbatim on the merge base. The fix shape stays the same, applied to the branch rather than to one condition: every path into skip that ran zero probes should route to the explicit unknown outcome instead.

  3. lexfrei commented on Aug 8, 2026

    @lexfrei
    ContributorAuthor

    Fourth unprobed input into the skip branch, found by a second independent pass: a failing kubectl exec itself (127 with no timeout on PATH, exec forbidden by policy, or the pod disappearing mid-probe) also emits no outcome token, and zero tokens still routes to "reachable, skipped". Same fix shape: any path that ran zero probes routes to the explicit unknown outcome.

  4. lexfrei commented on Aug 8, 2026

    @lexfrei
    ContributorAuthor

    Correcting the count in my earlier scope notes: the unprobed inputs that reach "reachable, skipped" on the merge base are FIVE, not four. Measured by running all six routes against the merge-base script: no probe node, port 0, no kube-ovn-cni pod on the node, no TCP/HTTP client in its host netns, and an exec that could not run. The sixth candidate, a cni-server lookup that never answered, already routed to unknown before any of this work, so it does not belong in the list. The earlier "four" came from reading the routes rather than exercising them.

  5. lexfrei commented on Sep 23, 2026

    @lexfrei
    ContributorAuthor

    Fixed by #3672. All five no-probe paths now record the LB as unprobed with a reason instead of reachable, and each one has a test in hack/capture-dataplane.bats.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/testingIssues or PRs related to testing (e2e, bats, unit tests)kind/bugCategorizes issue or PR as related to a bugtriage/not-reproducibleIndicates an issue can not be reproduced as described

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions