diff options
author | Bjørn Christian Seime <bjorncs@yahoo-inc.com> | 2017-06-14 20:05:20 +0200 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@yahoo-inc.com> | 2017-06-15 10:59:16 +0200 |
commit | 96b644bf817b2b789d882008166793bd177c35c0 (patch) | |
tree | 743ea0dd0522556f3f5532a767a06bbe63478c6c | |
parent | 65a9c242caf0ad4e9d1d96c2faa7567b07b0ecd5 (diff) |
Fix race condition in config maven plugin
The race occur during Maven parallel build where multiple threads will
race to create the output directory.
-rw-r--r-- | config-class-plugin/src/main/java/com/yahoo/vespa/ConfigGenMojo.java | 2 | ||||
-rw-r--r-- | configgen/src/main/scala/com/yahoo/config/codegen/JavaClassBuilder.scala | 4 |
2 files changed, 4 insertions, 2 deletions
diff --git a/config-class-plugin/src/main/java/com/yahoo/vespa/ConfigGenMojo.java b/config-class-plugin/src/main/java/com/yahoo/vespa/ConfigGenMojo.java index 941f8afc648..17eb557ace0 100644 --- a/config-class-plugin/src/main/java/com/yahoo/vespa/ConfigGenMojo.java +++ b/config-class-plugin/src/main/java/com/yahoo/vespa/ConfigGenMojo.java @@ -20,7 +20,7 @@ import java.util.ArrayList; /** * Goal which generates config classes from def-files. */ -@org.apache.maven.plugins.annotations.Mojo(name = "config-gen", defaultPhase = LifecyclePhase.GENERATE_SOURCES) +@org.apache.maven.plugins.annotations.Mojo(name = "config-gen", defaultPhase = LifecyclePhase.GENERATE_SOURCES, threadSafe = true) public class ConfigGenMojo extends AbstractMojo { @Component private MavenProject project; diff --git a/configgen/src/main/scala/com/yahoo/config/codegen/JavaClassBuilder.scala b/configgen/src/main/scala/com/yahoo/config/codegen/JavaClassBuilder.scala index c346338e543..f2ee4f74157 100644 --- a/configgen/src/main/scala/com/yahoo/config/codegen/JavaClassBuilder.scala +++ b/configgen/src/main/scala/com/yahoo/config/codegen/JavaClassBuilder.scala @@ -166,7 +166,9 @@ object JavaClassBuilder { val subDirs: Array[String] = (PackagePrefix + namespace).split("""\.""") for (subDir <- subDirs) { dir = new File(dir, subDir) - if (!dir.isDirectory && !dir.mkdir) throw new CodegenRuntimeException("Could not create " + dir.getPath) + this.synchronized { + if (!dir.isDirectory && !dir.mkdir) throw new CodegenRuntimeException("Could not create " + dir.getPath) + } } dir } |