diff --git a/.github/trigger_files/beam_PostCommit_Java_PVR_Spark_Batch.json b/.github/trigger_files/beam_PostCommit_Java_PVR_Spark_Batch.json index b60f5c4cc3c80..e3d6056a5de96 100644 --- a/.github/trigger_files/beam_PostCommit_Java_PVR_Spark_Batch.json +++ b/.github/trigger_files/beam_PostCommit_Java_PVR_Spark_Batch.json @@ -1,4 +1,4 @@ { "comment": "Modify this file in a trivial way to cause this test suite to run", - "modification": 0 + "modification": 1 } 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 a7e129211757a..5938ad3095ce7 100644 --- a/buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy +++ b/buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy @@ -2587,6 +2587,7 @@ class BeamModulePlugin implements Plugin { def javaContainerSuffix = ver ? "java$ver" : getSupportedJavaVersion() dependsOn ":sdks:java:container:${javaContainerSuffix}:docker" } + outputs.upToDateWhen {false} } } diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/io/FileSystems.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/io/FileSystems.java index fb25cac6262f9..4b2587ad1688e 100644 --- a/sdks/java/core/src/main/java/org/apache/beam/sdk/io/FileSystems.java +++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/io/FileSystems.java @@ -565,7 +565,12 @@ static FileSystem getFileSystemInternal(String scheme) { * *

It will be used in {@link FileSystemRegistrar FileSystemRegistrars} for all schemes. * - *

This is expected only to be used by runners after {@code Pipeline.run}, or in tests. + *

This is expected only to be used by runners after {@code Pipeline.run}. User code executed + * during pipeline execution time should not call it. + * + *

Outside pipeline execution environments where Beam FileSystem API is used (e.g. test + * methods, user code executed during pipeline submission), use + * {@link #setDefaultPipelineOptionsOnce} instead. */ @Internal public static void setDefaultPipelineOptions(PipelineOptions options) { @@ -593,6 +598,20 @@ public static void setDefaultPipelineOptions(PipelineOptions options) { } } + /** + * Sets the default configuration once. Used by test host (e.g. JUnit test class). + * + *

This method executes setDefaultPipelineOptions if SCHEME_TO_FILESYSTEM is empty. This avoids + * conflicts in repeated calls to setDefaultPipelineOptions for every TestPipeline JVM runtime + * constructing. + */ + @Internal + public static synchronized void setDefaultPipelineOptionsOnce(PipelineOptions options) { + if (SCHEME_TO_FILESYSTEM.get().isEmpty()) { + setDefaultPipelineOptions(options); + } + } + @VisibleForTesting static Map verifySchemesAreUnique( PipelineOptions options, Set registrars) { diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/TestPipeline.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/TestPipeline.java index ed61f7f3d6f24..ca8192b6dd935 100644 --- a/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/TestPipeline.java +++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/testing/TestPipeline.java @@ -373,7 +373,7 @@ public PipelineResult runWithAdditionalOptionArgs(List additionalArgs) { } newOptions.setStableUniqueNames(CheckEnabled.ERROR); - FileSystems.setDefaultPipelineOptions(options); + FileSystems.setDefaultPipelineOptionsOnce(options); return run(newOptions); } catch (IOException e) { throw new RuntimeException( @@ -515,7 +515,7 @@ public static PipelineOptions testingPipelineOptions() { } options.setStableUniqueNames(CheckEnabled.ERROR); - FileSystems.setDefaultPipelineOptions(options); + FileSystems.setDefaultPipelineOptionsOnce(options); return options; } catch (IOException e) { throw new RuntimeException(