Repository navigation
Conversation
Run the ozone-ha compose cluster on a Docker network with IPv4 disabled and the bind hosts set to "::", then reuse existing robot suites for shell, ofs, S3, admin CLI and OM leader transfer. A new ipv6 suite checks that no host resolves to an IPv4 address, that datanodes register with IPv6 addresses and answer an admin command sent to them directly, that the HTTP servers answer on an IPv6 literal and that SCM and OM are reachable when the client is configured with bracketed IPv6 literals. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
Copilot wasn't able to review any files in this pull request. Check if the Files changed in this pull request are included in default exclusions.
CI failure analysis (HA-unsecure,
|
| Should Contain X Times ${output} Reconfigurable properties 3 | ||
|
|
||
| HTTP servers listen on IPv6 | ||
| FOR ${host} ${port} IN scm1 9876 om1 9874 recon 9888 s3g 19878 |
There was a problem hiding this comment.
let's include httpfs too.
jojochuang
left a comment
There was a problem hiding this comment.
Good first cut for IPv6-only HA compose smoke. Worth being clear what it is: Docker-only, servers bind :: on the compose network, clients mostly use service hostnames (plus a narrow bracketed-literal CLI path). It does not exercise production-style static literals in config or the full IPv6 address-string matrix—that stays with unit tests and later acceptance work.
Non-blocking follow-ups: add HttpFS (HTTPFS-SITE.XML_httpfs.http.hostname: "::" + the HTTP loop); /jmx only proves listen/reachability, not that HTTP APIs actually work on literals.
Fine to merge once HttpFS is covered; broader roadmap items can wait.
…y network. Bind HttpFS to ::, check it in the ipv6 robot suite, run the httpfs WebHDFS smoke tests, and clear OZONE_OPTS when coverage is enabled so the JaCoCo agent does not block SCM startup on an IPv6-only compose network. Co-authored-by: Cursor <cursoragent@cursor.com> Change-Id: I97be96e84a671bd0a987e2d47856f0cd8d27ef4b
jojochuang
left a comment
There was a problem hiding this comment.
Looks good. The IPv6-only compose override, dedicated ipv6.robot checks, and reuse of the existing HA-unsecure suites give useful end-to-end coverage beyond unit tests. HttpFS bind + WebHDFS smoke and clearing OZONE_OPTS under coverage address the earlier CI and review feedback. Fine to merge once HA-unsecure is green.
Generated-by: Claude Code (Opus 5.5)
What changes were proposed in this pull request?
No test currently runs an Ozone cluster over IPv6 end to end. The IPv6 fixes under HDDS-15763 only have unit tests, so a regression in listener setup, peer addressing or a client path would not be caught.
This adds an acceptance test that runs the non-secure
ozone-hacompose cluster (SCM HA, OM HA, three datanodes, Recon, S3 Gateway, HttpFS) on a Docker network with IPv4 disabled:compose/ozone-ha/ipv6.yamlis a compose override that setsenable_ipv4: falseandenable_ipv6: trueon the network and sets the bind host properties to::, includinghttpfs.http.hostname. SCM HA reads its RPC bind hosts only from the keys suffixed with service ID and node ID, so those are set per node. Existing environments are unchanged.compose/ozone-ha/test-ipv6.sh(suiteHA-unsecure) reuses existing robot suites: shell,ofs, S3 object put and get, HttpFS WebHDFS,adminclidatanode, pipeline and SCM roles, OM roles and OM leader transfer. WhenOZONE_WITH_COVERAGE=true, JaCoCo is disabled for this script because the coverage collector uses the IPv4 docker bridge gateway, which is unreachable on the IPv6-only network.smoketest/ipv6/ipv6.robotadds checks specific to this environment:ozone admin reconfig --service=DATANODE --in-service-datanodes propertiesreaches each datanode by its IPv6 address/jmxproves listen/reachability)Not covered here:
What is the link to the Apache JIRA
https://issues.apache.org/jira/browse/HDDS-16969
How was this patch tested?
Ran
compose/ozone-ha/test-ipv6.shfrom a locally built distribution on Docker 29.8.2 with Compose v2. All suites passed. The containers had no IPv4 address and every listener was bound to:::port.GitHub-hosted runners have no outbound IPv6 route, but this test only needs traffic between containers on a local bridge. The acceptance (HA-unsecure) job of this PR is the first run there.
🤖 Generated with Claude Code