summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@yahoo-inc.com>2017-06-14 20:05:20 +0200
committerBjørn Christian Seime <bjorncs@yahoo-inc.com>2017-06-15 10:59:16 +0200
commit96b644bf817b2b789d882008166793bd177c35c0 (patch)
tree743ea0dd0522556f3f5532a767a06bbe63478c6c
parent65a9c242caf0ad4e9d1d96c2faa7567b07b0ecd5 (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.java2
-rw-r--r--configgen/src/main/scala/com/yahoo/config/codegen/JavaClassBuilder.scala4
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
}