[Bug]: gossip seed UT depends on DNS response for a public nonexistent hostname #30204
Description
Failure
On PR #29152 at exact head feba47948a79c8cd0f282260189716d0645aafbb, Ubuntu/x64 UT run 38521477342, attempt 1, failed only cmd/mo-service/TestResolveGossipSeedAddresses. The required-check rollup then failed transitively.
- UT job 115712005614
- CI Required job 115806947221
- Full failed-job logs were obtained with
gh run view 38521477342 --log-failed; all 9,396 lines were inspected for failure signatures. - UT command:
make ut UT_CONFIGURED=1 UT_PARALLEL=6 UT_TIMEOUT=40 UT_SHARD=all, Go 1.27.1, Linux/amd64, CGo enabled,matrixone_testtag and race mode.
--- FAIL: TestResolveGossipSeedAddresses (0.08s)
config_test.go:309: expected <nil>, got invalid configuration: GossipSeedAddress of-course-no-such-address42033.io:32001
config_test.go:312: expected [127.0.0.1:32001 of-course-no-such-address42033.io:32001], got [localhost:32001 of-course-no-such-address42033.io:32001]
UNIT TESTING FAILED: go-test=1, analysis=0
Error: matrixone-ci: failure
The test treats a registrable public .io domain as permanently unresolvable and depends on the runner's external DNS response. It does not control that response.
Direct network evidence and attribution
The exact-head helper calls net.LookupIP directly. A lookup error retains the original hostname and succeeds. The observed BadConfig message can only come from the other branch: lookup returned no error, but the filtered IPv4 count was zero or greater than one. That count is inferred from the unique guard producing the logged error; the job did not log the returned IP addresses, so no particular address or exact count is claimed.
The failed case finished at 08:59:15 UTC. The same run's corresponding pkg/embed/TestResolveGossipSeedAddresses passed at 09:49:19 UTC. Its counterpart also uses the same external hostname. This supports a resolver-dependent failure rather than a reproducible Python UDF execution failure. There are no compile errors, type errors, race reports or test timeouts in the failed-job log.
The current official main revision is fd4767e488dc111db02c9119cd46dfe78af1ee23. The main helper and main test are byte-for-byte identical to the PR's helper/test. Their SHA-256 values are respectively 8ab36d4e7e0f81ddb180f5351668d9bdd2170599786d819ed0b6cc86de12e84d and 355576204d166f0b02b5116cb39eda9123af01470c774862d62ae41ca2c8e255.
The PR changes the Python worker config field/import in this package, but does not change this helper, test, net.LookupIP behavior, or the resolver. No replacement of net.DefaultResolver, DNS configuration or GODEBUG was found in that changed dependency closure. The direct runner lookup outcome above supplies infrastructure evidence; source similarity alone is not being used as proof. No Linux clean-main reproduction is claimed. The same-head UT coverage, shared build, SCA and active multi-CN BVT jobs succeeded.
Reproduction and expected result
- Run the existing case on a Linux/x64 runner using the repository CGo wrapper:
GOWORK=off .agents/skills/mo-dev/scripts/mo-cgo-test -short -race -tags=matrixone_test -count=1 -timeout=120s -run '^TestResolveGossipSeedAddresses$' ./cmd/mo-service. - The environmental prerequisite for the reported signature is a successful DNS lookup of
of-course-no-such-address42033.iowith zero or multiple IPv4 addresses. A normal NXDOMAIN response makes the same test pass; this failure is DNS-response dependent. - Observe the BadConfig and unchanged-address-list assertions shown above.
The unit test should control DNS outcomes, or use a guaranteed-invalid namespace, so an external resolver response cannot make the unrelated required UT lane fail. This report does not propose relaxing the product's single-IPv4 admission check.
Open and closed issues were searched for TestResolveGossipSeedAddresses, ResolveGossipSeed, GossipSeedAddress and the hostname; no matching report was found. After recording this evidence, only the failed jobs of run 38521477342 will be rerun once. No unrelated product code or CI harness is changed.
Activity
fix: close HTTP trace and CI fixture ownership gaps (#30472)
XuPeng-SH commentedon Oct 17, 2026
Verified on latest official main b111224 (Linux/amd64, Go1.27.1, CGo, short/race/matrixone_test). Both cmd/mo-service and pkg/embed TestResolveGossipSeedAddresses actually ran and passed. Both fixtures now use the syntactically invalid hostname of-course-no-such-address42033..invalid, so the reported registrable public-domain DNS outcome is no longer a dependency. The production single-IPv4 validation is retained. Closing the reported test defect.