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 1f4f5590a40 Pass --add-opens JVM flags to Spark job server (#39242)
1f4f5590a40 is described below

commit 1f4f5590a40bcd5f2c7b8cc03421dc0d5812d103
Author: Abdelrahman Ibrahim <[email protected]>
AuthorDate: Wed Jul 8 18:19:26 2026 +0300

    Pass --add-opens JVM flags to Spark job server (#39242)
---
 .github/trigger_files/beam_PostCommit_XVR_Spark3.json |  2 +-
 runners/spark/job-server/spark_job_server.gradle      | 17 ++++++++++++++++-
 sdks/python/scripts/run_job_server.sh                 |  8 +++++++-
 3 files changed, 24 insertions(+), 3 deletions(-)

diff --git a/.github/trigger_files/beam_PostCommit_XVR_Spark3.json 
b/.github/trigger_files/beam_PostCommit_XVR_Spark3.json
index 03bb52a7ef4..1be4456862d 100644
--- a/.github/trigger_files/beam_PostCommit_XVR_Spark3.json
+++ b/.github/trigger_files/beam_PostCommit_XVR_Spark3.json
@@ -1,3 +1,3 @@
 {
-  "trigger-2026-04-04": "portable_runner expand_sdf opt-in"
+  "trigger-2026-07-08": "portable_runner expand_sdf opt-in 2"
 }
diff --git a/runners/spark/job-server/spark_job_server.gradle 
b/runners/spark/job-server/spark_job_server.gradle
index b2180ebf70a..e72b59444de 100644
--- a/runners/spark/job-server/spark_job_server.gradle
+++ b/runners/spark/job-server/spark_job_server.gradle
@@ -267,13 +267,28 @@ tasks.register("validatesRunnerSickbay", Test) {
 def jobPort = BeamModulePlugin.getRandomPort()
 def artifactPort = BeamModulePlugin.getRandomPort()
 
+def sparkJobServerJvmArgs() {
+  def testJavaVer = project.findProperty('testJavaVersion') ? 
(project.property('testJavaVersion') as int) : 
JavaVersion.current().majorVersion.toInteger()
+  if (testJavaVer >= 17) {
+    return [
+      "--add-opens=java.base/sun.nio.ch=ALL-UNNAMED",
+      "--add-opens=java.base/java.nio=ALL-UNNAMED",
+      "--add-opens=java.base/java.util=ALL-UNNAMED",
+      "--add-opens=java.base/java.lang.invoke=ALL-UNNAMED"
+    ]
+  }
+  return []
+}
+
 def setupTask = project.tasks.register("sparkJobServerSetup", Exec) {
   dependsOn shadowJar
   def pythonDir = project.project(":sdks:python").projectDir
   def sparkJobServerJar = shadowJar.archivePath
+  def jvmArgs = sparkJobServerJvmArgs().join(' ')
+  def jvmArgsOpt = jvmArgs ? "--jvm_args \"${jvmArgs}\"" : ""
 
   executable 'sh'
-  args '-c', "$pythonDir/scripts/run_job_server.sh stop --group_id 
${project.name} && $pythonDir/scripts/run_job_server.sh start --group_id 
${project.name} --job_port ${jobPort} --artifact_port ${artifactPort} 
--job_server_jar ${sparkJobServerJar}"
+  args '-c', "$pythonDir/scripts/run_job_server.sh stop --group_id 
${project.name} && $pythonDir/scripts/run_job_server.sh start --group_id 
${project.name} --job_port ${jobPort} --artifact_port ${artifactPort} 
--job_server_jar ${sparkJobServerJar} ${jvmArgsOpt}"
 }
 
 def cleanupTask = project.tasks.register("sparkJobServerCleanup", Exec) {
diff --git a/sdks/python/scripts/run_job_server.sh 
b/sdks/python/scripts/run_job_server.sh
index ce2ed9d08bc..bd8ecd8c81a 100755
--- a/sdks/python/scripts/run_job_server.sh
+++ b/sdks/python/scripts/run_job_server.sh
@@ -23,6 +23,7 @@ Options:
   --job_port [port for job endpoint, default 8099]
   --artifact_port [port for artifact service, default 8098]
   --job_server_jar [path to job server jar]
+  --jvm_args [additional JVM arguments, e.g. --add-opens flags]
 END
 
 JOB_PORT=8099
@@ -61,6 +62,11 @@ while [[ $# -gt 0 ]]; do
       shift
       shift
       ;;
+    --jvm_args)
+      JVM_ARGS="$2"
+      shift
+      shift
+      ;;
     start)
       STARTSTOP="$1"
       shift
@@ -107,7 +113,7 @@ case $STARTSTOP in
     fi
 
     echo "Launching job server @ $JOB_PORT ..."
-    "$JAVA_CMD" -jar $JOB_SERVER_JAR --job-port=$JOB_PORT 
--artifact-port=$ARTIFACT_PORT --expansion-port=0 $ADDITIONAL_ARGS 
>$TEMP_DIR/$FILE_BASE.log 2>&1 </dev/null &
+    "$JAVA_CMD" $JVM_ARGS -jar $JOB_SERVER_JAR --job-port=$JOB_PORT 
--artifact-port=$ARTIFACT_PORT --expansion-port=0 $ADDITIONAL_ARGS 
>$TEMP_DIR/$FILE_BASE.log 2>&1 </dev/null &
     mypid=$!
     if kill -0 $mypid >/dev/null 2>&1; then
       echo $mypid >> $pid

Reply via email to