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

heejong 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 a286049  [BEAM-12389] fix xlang validate runner test flakiness
     new 8ab0d34  Merge pull request #15025 from ihji/BEAM-12389
a286049 is described below

commit a2860491f7e41fc024ca5f05a7c5be5f6332a7ce
Author: Heejong Lee <[email protected]>
AuthorDate: Wed Jun 16 15:14:31 2021 -0700

    [BEAM-12389] fix xlang validate runner test flakiness
---
 .../org/apache/beam/gradle/BeamModulePlugin.groovy      | 17 +++++++++++++----
 runners/flink/job-server/flink_job_server.gradle        |  4 ++--
 runners/spark/job-server/spark_job_server.gradle        |  4 ++--
 sdks/python/test-suites/direct/xlang/build.gradle       |  2 +-
 4 files changed, 18 insertions(+), 9 deletions(-)

diff --git 
a/buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy 
b/buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy
index 1b77c06..985bdb3 100644
--- a/buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy
+++ b/buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy
@@ -45,7 +45,7 @@ import org.gradle.api.tasks.PathSensitive
 import org.gradle.api.tasks.PathSensitivity
 import org.gradle.testing.jacoco.tasks.JacocoReport
 
-import java.util.concurrent.atomic.AtomicInteger
+import java.net.ServerSocket
 /**
  * This plugin adds methods to configure a module with Beam's defaults, called 
"natures".
  *
@@ -82,7 +82,16 @@ class BeamModulePlugin implements Plugin<Project> {
  * limitations under the License.
  */
 """
-  static AtomicInteger startingExpansionPortNumber = new AtomicInteger(18091)
+  static def getRandomPort() {
+    new ServerSocket(0).withCloseable { socket ->
+      def port = socket.getLocalPort()
+      if (port > 0) {
+        return port
+      } else {
+        throw new GradleException("couldn't find a free port.")
+      }
+    }
+  }
 
   /** A class defining the set of configurable properties accepted by 
applyJavaNature. */
   class JavaNatureConfiguration {
@@ -2029,8 +2038,8 @@ class BeamModulePlugin implements Plugin<Project> {
       // Task for launching expansion services
       def envDir = project.project(":sdks:python").envdir
       def pythonDir = project.project(":sdks:python").projectDir
-      def javaPort = startingExpansionPortNumber.getAndDecrement()
-      def pythonPort = startingExpansionPortNumber.getAndDecrement()
+      def javaPort = getRandomPort()
+      def pythonPort = getRandomPort()
       def expansionJar = 
project.project(':sdks:java:testing:expansion-service').buildTestExpansionServiceJar.archivePath
       def expansionServiceOpts = [
         "group_id": project.name,
diff --git a/runners/flink/job-server/flink_job_server.gradle 
b/runners/flink/job-server/flink_job_server.gradle
index 4a4d5ff..a95504c 100644
--- a/runners/flink/job-server/flink_job_server.gradle
+++ b/runners/flink/job-server/flink_job_server.gradle
@@ -211,8 +211,8 @@ task validatesPortableRunner() {
   dependsOn validatesPortableRunnerStreamingCheckpoint
 }
 
-def jobPort = BeamModulePlugin.startingExpansionPortNumber.getAndDecrement()
-def artifactPort = 
BeamModulePlugin.startingExpansionPortNumber.getAndDecrement()
+def jobPort = BeamModulePlugin.getRandomPort()
+def artifactPort = BeamModulePlugin.getRandomPort()
 
 def setupTask = project.tasks.create(name: "flinkJobServerSetup", type: Exec) {
   dependsOn shadowJar
diff --git a/runners/spark/job-server/spark_job_server.gradle 
b/runners/spark/job-server/spark_job_server.gradle
index 172e9e5..c32f7b0 100644
--- a/runners/spark/job-server/spark_job_server.gradle
+++ b/runners/spark/job-server/spark_job_server.gradle
@@ -202,8 +202,8 @@ task validatesPortableRunner() {
   dependsOn validatesPortableRunnerStreaming
 }
 
-def jobPort = BeamModulePlugin.startingExpansionPortNumber.getAndDecrement()
-def artifactPort = 
BeamModulePlugin.startingExpansionPortNumber.getAndDecrement()
+def jobPort = BeamModulePlugin.getRandomPort()
+def artifactPort = BeamModulePlugin.getRandomPort()
 
 def setupTask = project.tasks.create(name: "sparkJobServerSetup", type: Exec) {
   dependsOn shadowJar
diff --git a/sdks/python/test-suites/direct/xlang/build.gradle 
b/sdks/python/test-suites/direct/xlang/build.gradle
index dc33fb4..0e64e58 100644
--- a/sdks/python/test-suites/direct/xlang/build.gradle
+++ b/sdks/python/test-suites/direct/xlang/build.gradle
@@ -26,7 +26,7 @@ project.evaluationDependsOn(":runners:portability:java")
 
 def envDir = project.project(":sdks:python").envdir
 def crossLanguageTestClasspath = 
project.project(":runners:portability:java").sourceSets.test.runtimeClasspath
-def jobPort = BeamModulePlugin.startingExpansionPortNumber.getAndDecrement()
+def jobPort = BeamModulePlugin.getRandomPort()
 def tmpDir = System.getenv("TMPDIR") ?: System.getenv("WORKSPACE") ?: "/tmp"
 def pidFile = "${tmpDir}/local_job_service_main-${jobPort}.pid"
 

Reply via email to