This is an automated email from the ASF dual-hosted git repository.

Abacn pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/beam.git


The following commit(s) were added to refs/heads/master by this push:
     new 78261e7af2d Add --add-opens test JVM args for HCatalog and Dataflow 
worker tests (#39351)
78261e7af2d is described below

commit 78261e7af2dee7f3739e05e0e731fe4bd9658ac1
Author: Abdelrahman Ibrahim <[email protected]>
AuthorDate: Mon Jul 20 18:33:03 2026 +0300

    Add --add-opens test JVM args for HCatalog and Dataflow worker tests 
(#39351)
    
    * Add --add-opens test JVM args for HCatalog and Dataflow worker tests
    
    * add more --add-opens for Dataflow
    
    * document --add-opens for WindmillStateTestUtils cache
    
    * '--add-opens=java.base/java.util.concurrent.locks=ALL-UNNAMED'
    
    * Add remaining --add-opens for WindmillStateTestUtils
    
    * fix worker tests for JDK 21 Thread.toString format
---
 .../beam_PostCommit_Java_Hadoop_Versions.json            |  4 ++--
 runners/google-cloud-dataflow-java/worker/build.gradle   | 16 ++++++++++++++++
 .../dataflow/worker/DataflowOperationContextTest.java    |  6 ++++--
 .../dataflow/worker/status/ThreadzServletTest.java       | 15 ++++++++++-----
 sdks/java/io/hcatalog/build.gradle                       |  4 ++++
 5 files changed, 36 insertions(+), 9 deletions(-)

diff --git a/.github/trigger_files/beam_PostCommit_Java_Hadoop_Versions.json 
b/.github/trigger_files/beam_PostCommit_Java_Hadoop_Versions.json
index 1bd74515152..f1ba03a243e 100644
--- a/.github/trigger_files/beam_PostCommit_Java_Hadoop_Versions.json
+++ b/.github/trigger_files/beam_PostCommit_Java_Hadoop_Versions.json
@@ -1,4 +1,4 @@
 {
   "comment": "Modify this file in a trivial way to cause this test suite to 
run",
-  "modification": 4
-}
\ No newline at end of file
+  "modification": 5
+}
diff --git a/runners/google-cloud-dataflow-java/worker/build.gradle 
b/runners/google-cloud-dataflow-java/worker/build.gradle
index 21879861e9d..44a2d40f944 100644
--- a/runners/google-cloud-dataflow-java/worker/build.gradle
+++ b/runners/google-cloud-dataflow-java/worker/build.gradle
@@ -154,6 +154,22 @@ applyJavaNature(
 
/******************************************************************************/
 // Configure the worker root project
 
+tasks.withType(Test).configureEach {
+  // WindmillStateTestUtils.assertNoReference walks every object reachable 
from the Windmill
+  // state cache (Guava Cache / ConcurrentHashMap) to ensure no per-work-item 
WindmillStateReader
+  // leaks into the global cache. It uses reflection (Field.setAccessible) 
into JDK internals
+  // (e.g. Integer.value, AtomicReferenceArray.array, ReentrantLock.sync, 
ReferenceQueue.head),
+  // which requires --add-opens on Java 17+.
+  jvmArgs '--add-opens=java.base/java.lang=ALL-UNNAMED',
+          '--add-opens=java.base/java.lang.ref=ALL-UNNAMED',
+          '--add-opens=java.base/java.lang.reflect=ALL-UNNAMED',
+          '--add-opens=java.base/java.io=ALL-UNNAMED',
+          '--add-opens=java.base/java.util=ALL-UNNAMED',
+          '--add-opens=java.base/java.util.concurrent=ALL-UNNAMED',
+          '--add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED',
+          '--add-opens=java.base/java.util.concurrent.locks=ALL-UNNAMED'
+}
+
 configurations {
     sourceFile
 
diff --git 
a/runners/google-cloud-dataflow-java/worker/src/test/java/org/apache/beam/runners/dataflow/worker/DataflowOperationContextTest.java
 
b/runners/google-cloud-dataflow-java/worker/src/test/java/org/apache/beam/runners/dataflow/worker/DataflowOperationContextTest.java
index 34c3b3d5373..6692f06d75d 100644
--- 
a/runners/google-cloud-dataflow-java/worker/src/test/java/org/apache/beam/runners/dataflow/worker/DataflowOperationContextTest.java
+++ 
b/runners/google-cloud-dataflow-java/worker/src/test/java/org/apache/beam/runners/dataflow/worker/DataflowOperationContextTest.java
@@ -305,11 +305,13 @@ public class DataflowOperationContextTest {
 
       String infoLines =
           Joiner.on("\n").join(Iterables.filter(lines, line -> 
line.contains("\"INFO\"")));
+      // Match on the thread name rather than the full Thread.toString() 
prefix: JDK 21+ inserts
+      // the thread id (Thread[#51,backgroundThread,...] vs 
Thread[backgroundThread,...]).
       if (hasFullThreadDump) {
         assertThat(
             infoLines,
             Matchers.allOf(
-                Matchers.containsString("Thread[backgroundThread,"),
+                Matchers.containsString("backgroundThread,"),
                 Matchers.containsString(
                     
"org.apache.beam.runners.dataflow.worker.DataflowOperationContext"),
                 
Matchers.not(Matchers.containsString(SimpleDoFnRunner.class.getName()))));
@@ -318,7 +320,7 @@ public class DataflowOperationContextTest {
             infoLines,
             Matchers.not(
                 Matchers.anyOf(
-                    Matchers.containsString("Thread[backgroundThread,"),
+                    Matchers.containsString("backgroundThread,"),
                     Matchers.containsString(
                         
"org.apache.beam.runners.dataflow.worker.DataflowOperationContext"))));
       }
diff --git 
a/runners/google-cloud-dataflow-java/worker/src/test/java/org/apache/beam/runners/dataflow/worker/status/ThreadzServletTest.java
 
b/runners/google-cloud-dataflow-java/worker/src/test/java/org/apache/beam/runners/dataflow/worker/status/ThreadzServletTest.java
index 7737f7d405b..1c2352954bd 100644
--- 
a/runners/google-cloud-dataflow-java/worker/src/test/java/org/apache/beam/runners/dataflow/worker/status/ThreadzServletTest.java
+++ 
b/runners/google-cloud-dataflow-java/worker/src/test/java/org/apache/beam/runners/dataflow/worker/status/ThreadzServletTest.java
@@ -36,13 +36,18 @@ public class ThreadzServletTest {
 
   @Test
   public void testDeduping() throws Exception {
+    // Use Thread.toString() rather than hard-coded strings: JDK 21+ includes 
the thread id
+    // (e.g. Thread[#42,Thread1,5,main] vs Thread[Thread1,5,main]).
+    Thread thread1 = new Thread("Thread1");
+    Thread thread2 = new Thread("Thread2");
+    Thread thread3 = new Thread("Thread3");
     Map<Thread, StackTraceElement[]> stacks =
         ImmutableMap.of(
-            new Thread("Thread1"),
+            thread1,
             new StackTraceElement[] {new StackTraceElement("Class", "Method1", 
"File", 11)},
-            new Thread("Thread2"),
+            thread2,
             new StackTraceElement[] {new StackTraceElement("Class", "Method1", 
"File", 11)},
-            new Thread("Thread3"),
+            thread3,
             new StackTraceElement[] {new StackTraceElement("Class", "Method2", 
"File", 17)});
 
     Map<Stack, List<String>> deduped = 
ThreadzServlet.deduplicateThreadStacks(stacks);
@@ -54,13 +59,13 @@ public class ThreadzServletTest {
             new Stack(
                 new StackTraceElement[] {new StackTraceElement("Class", 
"Method1", "File", 11)},
                 Thread.State.NEW),
-            Arrays.asList("Thread[Thread1,5,main]", 
"Thread[Thread2,5,main]")));
+            Arrays.asList(thread1.toString(), thread2.toString())));
     assertThat(
         deduped,
         Matchers.hasEntry(
             new Stack(
                 new StackTraceElement[] {new StackTraceElement("Class", 
"Method2", "File", 17)},
                 Thread.State.NEW),
-            Arrays.asList("Thread[Thread3,5,main]")));
+            Arrays.asList(thread3.toString())));
   }
 }
diff --git a/sdks/java/io/hcatalog/build.gradle 
b/sdks/java/io/hcatalog/build.gradle
index d3bdd8f1076..b44487ab6ec 100644
--- a/sdks/java/io/hcatalog/build.gradle
+++ b/sdks/java/io/hcatalog/build.gradle
@@ -40,6 +40,10 @@ hadoopVersions.each {kv -> 
configurations.create("hadoopVersion$kv.key")}
 
 def hive_version = "4.0.1"
 
+tasks.withType(Test).configureEach {
+   jvmArgs '--add-opens=java.base/java.net=ALL-UNNAMED'
+}
+
 dependencies {
   implementation library.java.vendored_guava_32_1_2_jre
   implementation project(path: ":sdks:java:core", configuration: "shadow")

Reply via email to