[ 
https://issues.apache.org/jira/browse/HADOOP-19978?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18111772#comment-18111772
 ] 

ASF GitHub Bot commented on HADOOP-19978:
-----------------------------------------

joseluisll opened a new pull request, #8720:
URL: https://github.com/apache/hadoop/pull/8720

   ### Description of PR
   
   Upgrades `maven-surefire-plugin` from 3.5.3 to 3.6.0, plus the two changes 
the new version needs.
   
   3.6.0 is the first release that registers surefire's `listener` property as 
a JUnit Platform `TestExecutionListener` (SUREFIRE-1639). Eight poms already 
carry that property for `TimedOutTestsListener`, and on 3.5.3 it does nothing 
at all. This bump is what lets HADOOP-19964's listener bind, so a timed-out 
test prints a thread dump again. Until 19964 lands the listener stays dormant — 
this change is what unblocks it.
   
   Two changes come with the bump:
   
   - **`java.net.preferIPv4Stack` moves into `maven-surefire-plugin.argLine`.** 
As a `systemPropertyVariable` it is applied only after the forked JVM has 
started. 3.6.0 initialises the fork's networking before applying those 
properties, so the flag arrives too late and the fork falls back to IPv6, 
turning 5 of 7 CI test jobs red; 3.5.3 applies them before any networking class 
loads, which is why the same configuration works there. As an argLine entry the 
flag is a real JVM startup argument and cannot be late. All the `<argLine>` 
overrides in the tree interpolate the property and maven-failsafe-plugin shares 
it, so it propagates everywhere. `hadoop-registry` carried a second copy of the 
same ineffective setting; removed.
   
   - **`hadoop-common`'s test-jar added to `hadoop-yarn-services-core` and 
`hadoop-yarn-applications-catalog-webapp`.** Both inherit the listener property 
from `hadoop-yarn` but resolve only `hadoop-common`'s main jar, so the listener 
class cannot be loaded there and surefire silently drops it.
   
   ### Known impact of 3.6.0, needs a decision
   
   3.6.0 also includes SUREFIRE-823, which **decouples `-DskipTests` from 
maven-failsafe-plugin**. On 3.5.3 `-DskipTests` skips both surefire and 
failsafe; on 3.6.0 it skips surefire only, and failsafe runs. `-DskipITs` still 
skips integration tests.
   
   For most of the tree this is invisible — `hadoop-aws`, `hadoop-azure`, 
`hadoop-gcp` and `hadoop-bos` gate their ITs on `skipITs` via the presence of 
`auth-keys.xml`, so they stay skipped. 
`hadoop-client-modules/hadoop-client-integration-tests` does not, and its 
integration tests now run under `mvn install -DskipTests`, the command in 
BUILDING.txt.
   
   This PR does not address that yet. Options are to bind failsafe's skip to 
`skipTests` in `hadoop-project`, to update BUILDING.txt and CI to pass 
`-DskipITs`, or to handle it in a follow-up JIRA. Happy to take direction from 
reviewers.
   
   ### How was this patch tested?
   
   WSL2 Ubuntu 24.04, OpenJDK 17, Maven 3.9.16. Full reactor build clean.
   
   Full suites on the modules this touches, all green: `hadoop-registry` (164 
tests), `hadoop-yarn-services-core` (145), 
`hadoop-yarn-applications-catalog-webapp` (5).
   
   `hadoop-common` full suite run against unpatched trunk at the same commit as 
a control: every failure reproduces on the baseline, and the two that did not 
pass on rerun. No new failures.
   
   The tests that fail when 3.6.0 is bumped without the argLine fix all pass: 
`TestDNS`, `TestNameNodeRpcServer`, `TestBlockRecovery2`, `TestWebHdfsTokens`, 
`TestHSAdminServer`.
   
   One reporting change to be aware of: 3.6.0 counts assumption-skipped tests 
that 3.5.3 reported as zero, which raises `hadoop-common`'s skip count by 40 
(two OpenSSL codec classes).
   
   ### For code changes:
   
   - [x] Does the title of this PR start with the corresponding JIRA issue id 
(e.g. 'HADOOP-17799. Your PR title ...')?
   - [ ] Object storage: Have the integration tests been executed and the 
endpoint declared according to the connector-specific documentation?
   - [ ] If adding new dependencies to the code, are these dependencies 
licensed in a way that is compatible for inclusion under [ASF 
2.0](http://www.apache.org/legal/resolved.html#category-a)?
   - [ ] If applicable, have you updated the `LICENSE`, `LICENSE-binary`, 
`NOTICE-binary` files?
   
   ### AI Tooling
   
   If an AI tool was used:
   
   - [x] The PR includes the phrase "Contains content generated by <tool>" 
where <tool> is the name of the AI tool used.
   - [x] My use of AI contributions follows the ASF legal policy 
https://www.apache.org/legal/generative-tooling.html
   
   Contains content generated by Claude Code.
   




> Upgrade maven-surefire-plugin to 3.6
> ------------------------------------
>
>                 Key: HADOOP-19978
>                 URL: https://issues.apache.org/jira/browse/HADOOP-19978
>             Project: Hadoop Common
>          Issue Type: Improvement
>          Components: common, test
>            Reporter: Jose Luis López
>            Priority: Major
>
> h3. Why
> HADOOP-19964 reimplements TimedOutTestsListener as a JUnit Platform
> TestExecutionListener, so a timed-out test prints a thread dump again. The
> {{listener}} provider property that eight poms already carry binds to it only
> once Surefire accepts platform listeners there — SUREFIRE-1639, shipped in
> maven-surefire-plugin 3.6.0. Until Hadoop moves to that version the listener
> is dormant.
> h3. What blocks the upgrade
> Bumping {{maven-surefire-plugin.version}} from 3.5.3 to 3.6.0 turns 5 of 7 CI
> test jobs red: common, mr, hdfs-rbf, hdfs-other, hdfs-slow. Controlled against
> another branch built the same morning on the same runners with 3.5.3, which
> was 7/7 green. Every failure is one fault — the forked JVM preferring IPv6:
> {code:java}
> TestNameNodeRpcServer.testNamenodeRpcBindAny  expected: <0.0.0.0> but was: 
> <0:0:0:0:0:0:0:0>
> TestHSAdminServer   not a valid host:port authority: 0:0:0:0:0:0:0:0:33745
> TestBlockRecovery2  not a valid host:port authority: 0:0:0:0:0:0:0:0:39677
> TestDNS             ArrayIndexOutOfBounds Index 3 out of bounds for length 1
> TestWebHdfsTokens   Connect localhost:44787: Connection refused
> {code}
> hadoop-project.xml sets {{java.net.preferIPv4Stack=true}} in surefire's
> {{{}systemPropertyVariables{}}}. Those are applied by the forked booter, not 
> as
> {{-D}} at JVM startup — in 3.5.3 and 3.6.0 alike. Class-load traces
> ({{{}-Xlog:class+load{}}}) show SystemPropertyManager running at index 699 
> under
> 3.5.3 and 736 under 3.6.0; in that gap 3.6.0 loads {{sun.nio.ch.IOUtil}} and
> {{{}sun.nio.ch.SocketChannelImpl{}}}, where 3.5.3 loads no networking classes 
> at
> all. 3.6.0 initialises the fork's networking before the property lands, so the
> flag is read too late.
> Reported upstream as apache/maven-surefire#3456.
> h3. Changes
>  * Bump {{maven-surefire-plugin.version}} to 3.6.0.
>  * Move {{-Djava.net.preferIPv4Stack=true}} into
> {{maven-surefire-plugin.argLine}} so it is a real JVM startup argument. All
> 22 {{<argLine>}} overrides in the tree already interpolate that property, and
> maven-failsafe-plugin shares it, so it propagates everywhere. No
> property-based fix can work: Surefire initialises networking before applying
> any of them.
>  * Add hadoop-common's test-jar in test scope to hadoop-yarn-services-core and
> hadoop-yarn-applications-catalog-webapp. Both inherit the {{listener}}
> property from hadoop-yarn but depend only on the main jar, so with the
> listener live Surefire cannot resolve the class and the fork dies before any
> test runs. Verified: without the dependency the module reports "Tests run: 0"
> and the fork terminates; with it, tests pass.
> h3. Notes
> Only {{java.net.preferIPv4Stack}} is affected. Checking the other
> systemPropertyVariables against the same criterion — is anything initialised
> before the properties are applied? — {{{}java.security.egd{}}},
> {{{}java.security.krb5.conf{}}}, {{{}hadoop.log.dir{}}}, 
> {{{}hadoop.tmp.dir{}}},
> {{test.build.*}} and {{require.test.libhadoop}} are all read later and are
> unaffected.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to