Skip to content

Commit 271dfa7

Browse files
authored
Avoid concurrent execution issues when running packer cache script (#69246)
1 parent bf8819d commit 271dfa7

File tree

2 files changed

+59
-32
lines changed

2 files changed

+59
-32
lines changed

buildSrc/src/main/java/org/elasticsearch/gradle/ResolveAllDependencies.java

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,23 +10,41 @@
1010

1111
import org.gradle.api.DefaultTask;
1212
import org.gradle.api.artifacts.Configuration;
13+
import org.gradle.api.file.FileCollection;
14+
import org.gradle.api.model.ObjectFactory;
15+
import org.gradle.api.tasks.InputFiles;
1316
import org.gradle.api.tasks.TaskAction;
1417
import org.gradle.internal.deprecation.DeprecatableConfiguration;
1518

19+
import javax.inject.Inject;
1620
import java.util.Collection;
21+
import java.util.stream.Collectors;
1722

1823
import static org.elasticsearch.gradle.DistributionDownloadPlugin.DISTRO_EXTRACTED_CONFIG_PREFIX;
1924

2025
public class ResolveAllDependencies extends DefaultTask {
2126

27+
private final ObjectFactory objectFactory;
28+
2229
Collection<Configuration> configs;
2330

31+
@Inject
32+
public ResolveAllDependencies(ObjectFactory objectFactory) {
33+
this.objectFactory = objectFactory;
34+
}
35+
36+
@InputFiles
37+
public FileCollection getResolvedArtifacts() {
38+
return objectFactory.fileCollection()
39+
.from(configs.stream().filter(ResolveAllDependencies::canBeResolved).collect(Collectors.toList()));
40+
}
41+
2442
@TaskAction
2543
void resolveAll() {
26-
configs.stream().filter(it -> canBeResolved(it)).forEach(it -> it.resolve());
44+
// do nothing, dependencies are resolved when snapshotting task inputs
2745
}
2846

29-
static boolean canBeResolved(Configuration configuration) {
47+
private static boolean canBeResolved(Configuration configuration) {
3048
if (configuration.isCanBeResolved() == false) {
3149
return false;
3250
}

buildSrc/src/main/java/org/elasticsearch/gradle/test/rest/RestResourcesPlugin.java

Lines changed: 39 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -90,40 +90,63 @@ public void apply(Project project) {
9090
// tests
9191
Configuration testConfig = project.getConfigurations().create("restTestConfig");
9292
Configuration xpackTestConfig = project.getConfigurations().create("restXpackTestConfig");
93+
if (BuildParams.isInternal()) {
94+
// core
95+
Dependency restTestdependency = project.getDependencies()
96+
.project(Map.of("path", ":rest-api-spec", "configuration", "restTests"));
97+
project.getDependencies().add(testConfig.getName(), restTestdependency);
98+
// x-pack
99+
Dependency restXPackTestdependency = project.getDependencies()
100+
.project(Map.of("path", ":x-pack:plugin", "configuration", "restXpackTests"));
101+
project.getDependencies().add(xpackTestConfig.getName(), restXPackTestdependency);
102+
} else {
103+
Dependency dependency = project.getDependencies()
104+
.create("org.elasticsearch:rest-api-spec:" + VersionProperties.getElasticsearch());
105+
project.getDependencies().add(testConfig.getName(), dependency);
106+
}
107+
93108
project.getConfigurations().create("restTests");
94109
project.getConfigurations().create("restXpackTests");
110+
95111
Provider<CopyRestTestsTask> copyRestYamlTestTask = project.getTasks()
96112
.register(COPY_YAML_TESTS_TASK, CopyRestTestsTask.class, task -> {
113+
if (BuildParams.isInternal()) {
114+
task.dependsOn(xpackTestConfig);
115+
task.setXpackConfig(xpackTestConfig);
116+
}
97117
task.getIncludeCore().set(extension.restTests.getIncludeCore());
98118
task.getIncludeXpack().set(extension.restTests.getIncludeXpack());
99119
task.setCoreConfig(testConfig);
100120
task.getOutputResourceDir().set(project.getLayout().getBuildDirectory().dir("restResources/yamlTests"));
101-
if (BuildParams.isInternal()) {
102-
// core
103-
Dependency restTestdependency = project.getDependencies()
104-
.project(Map.of("path", ":rest-api-spec", "configuration", "restTests"));
105-
project.getDependencies().add(testConfig.getName(), restTestdependency);
106-
// x-pack
107-
task.setXpackConfig(xpackTestConfig);
108-
Dependency restXPackTestdependency = project.getDependencies()
109-
.project(Map.of("path", ":x-pack:plugin", "configuration", "restXpackTests"));
110-
project.getDependencies().add(xpackTestConfig.getName(), restXPackTestdependency);
111-
task.dependsOn(task.getXpackConfig());
112-
} else {
113-
Dependency dependency = project.getDependencies()
114-
.create("org.elasticsearch:rest-api-spec:" + VersionProperties.getElasticsearch());
115-
project.getDependencies().add(testConfig.getName(), dependency);
116-
}
117121
task.dependsOn(testConfig);
118122
});
119123

120124
// api
121125
Configuration specConfig = project.getConfigurations().create("restSpec"); // name chosen for passivity
122126
Configuration xpackSpecConfig = project.getConfigurations().create("restXpackSpec");
127+
if (BuildParams.isInternal()) {
128+
Dependency restSpecDependency = project.getDependencies()
129+
.project(Map.of("path", ":rest-api-spec", "configuration", "restSpecs"));
130+
project.getDependencies().add(specConfig.getName(), restSpecDependency);
131+
132+
Dependency restXpackSpecDependency = project.getDependencies()
133+
.project(Map.of("path", ":x-pack:plugin", "configuration", "restXpackSpecs"));
134+
project.getDependencies().add(xpackSpecConfig.getName(), restXpackSpecDependency);
135+
} else {
136+
Dependency dependency = project.getDependencies()
137+
.create("org.elasticsearch:rest-api-spec:" + VersionProperties.getElasticsearch());
138+
project.getDependencies().add(specConfig.getName(), dependency);
139+
}
140+
123141
project.getConfigurations().create("restSpecs");
124142
project.getConfigurations().create("restXpackSpecs");
143+
125144
Provider<CopyRestApiTask> copyRestYamlApiTask = project.getTasks()
126145
.register(COPY_REST_API_SPECS_TASK, CopyRestApiTask.class, task -> {
146+
if (BuildParams.isInternal()) {
147+
task.dependsOn(xpackSpecConfig);
148+
task.setXpackConfig(xpackSpecConfig);
149+
}
127150
task.dependsOn(copyRestYamlTestTask);
128151
task.getIncludeCore().set(extension.restApi.getIncludeCore());
129152
task.getIncludeXpack().set(extension.restApi.getIncludeXpack());
@@ -138,20 +161,6 @@ public void apply(Project project) {
138161
.findFirst()
139162
.orElse(null)
140163
);
141-
if (BuildParams.isInternal()) {
142-
Dependency restSpecDependency = project.getDependencies()
143-
.project(Map.of("path", ":rest-api-spec", "configuration", "restSpecs"));
144-
project.getDependencies().add(specConfig.getName(), restSpecDependency);
145-
task.setXpackConfig(xpackSpecConfig);
146-
Dependency restXpackSpecDependency = project.getDependencies()
147-
.project(Map.of("path", ":x-pack:plugin", "configuration", "restXpackSpecs"));
148-
project.getDependencies().add(xpackSpecConfig.getName(), restXpackSpecDependency);
149-
task.dependsOn(task.getXpackConfig());
150-
} else {
151-
Dependency dependency = project.getDependencies()
152-
.create("org.elasticsearch:rest-api-spec:" + VersionProperties.getElasticsearch());
153-
project.getDependencies().add(specConfig.getName(), dependency);
154-
}
155164
task.dependsOn(xpackSpecConfig);
156165
});
157166

0 commit comments

Comments
 (0)