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 7e2940a2c35b..0c776e255662 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 @@ -85,6 +85,8 @@ public class FileSystems { private static final AtomicReference> SCHEME_TO_FILESYSTEM = new AtomicReference<>(ImmutableMap.of(DEFAULT_SCHEME, new LocalFileSystem())); + private static final Object lock = new Object(); + /** ******************************** METHODS FOR CLIENT ********************************* */ /** Checks whether the given spec contains a glob wildcard character. */ @@ -586,15 +588,17 @@ public static void setDefaultPipelineOptions(PipelineOptions options) { return; } - if (FILESYSTEM_REVISION.compareAndSet(revision, KV.of(id, nextRevision))) { - Set registrars = - Sets.newTreeSet(ReflectHelpers.ObjectsClassComparator.INSTANCE); - registrars.addAll( - Lists.newArrayList( - ServiceLoader.load(FileSystemRegistrar.class, ReflectHelpers.findClassLoader()))); - - SCHEME_TO_FILESYSTEM.set(verifySchemesAreUnique(options, registrars)); - return; + synchronized (lock) { + if (FILESYSTEM_REVISION.compareAndSet(revision, KV.of(id, nextRevision))) { + Set registrars = + Sets.newTreeSet(ReflectHelpers.ObjectsClassComparator.INSTANCE); + registrars.addAll( + Lists.newArrayList( + ServiceLoader.load(FileSystemRegistrar.class, ReflectHelpers.findClassLoader()))); + + SCHEME_TO_FILESYSTEM.set(verifySchemesAreUnique(options, registrars)); + return; + } } } }