Skip to content

Commit fff6c35

Browse files
committed
Harden concurrent logic in gh-481-command-length integration test prebuild.groovy
1 parent 9034c8b commit fff6c35

1 file changed

Lines changed: 15 additions & 10 deletions

File tree

protobuf-maven-plugin/src/it/gh-481-command-length/prebuild.groovy

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import groovy.transform.Field
1919
import java.nio.charset.StandardCharsets
2020
import java.nio.file.Files
2121
import java.nio.file.Path
22+
import java.util.concurrent.CompletableFuture
2223
import java.util.concurrent.ExecutorService
2324
import java.util.concurrent.Executors
2425
import java.util.concurrent.Future
@@ -119,27 +120,31 @@ String randomFileName(int index) {
119120
}
120121

121122
@SuppressWarnings('GroovyAssignabilityCheck')
122-
Future<Void> generateRandomFile(int index, Path baseDir, ExecutorService executor) {
123+
CompletableFuture<Void> generateRandomFile(int index, Path baseDir, ExecutorService executor) {
124+
CompletableFuture<Void> completableFuture = new CompletableFuture<>();
123125
executor.submit {
124-
Path path = baseDir.resolve(randomFileName(index))
125-
try (BufferedWriter writer = Files.newBufferedWriter(path, StandardCharsets.UTF_8)) {
126-
addRandomProtoFile(index, writer)
126+
try {
127+
Path path = baseDir.resolve(randomFileName(index))
128+
try (BufferedWriter writer = Files.newBufferedWriter(path, StandardCharsets.UTF_8)) {
129+
addRandomProtoFile(index, writer)
130+
}
131+
completableFuture.complete(null);
132+
} catch (Exception ex) {
133+
completableFuture.completeExceptionally(ex);
127134
}
128-
return null
129135
}
136+
return completableFuture
130137
}
131138

132139
void generateRandomFiles(int count, ExecutorService executor) {
133140
println("Generating ${count} random proto files files for this test...")
134141
Path baseDir = basedir.toPath().resolve("src").resolve("main").resolve("protobuf")
135142
Files.createDirectories(baseDir)
136-
List<Future<Void>> futures = []
143+
CompletableFuture[] futures = new CompletableFuture[count]
137144
for (int i = 0; i < count; ++i) {
138-
futures.add(generateRandomFile(i, baseDir, executor))
139-
}
140-
for (Future<Void> future : futures) {
141-
future.get()
145+
futures[i] = generateRandomFile(i, baseDir, executor)
142146
}
147+
CompletableFuture.allOf(futures).join()
143148
}
144149

145150
ExecutorService executor = Executors.newFixedThreadPool(30)

0 commit comments

Comments
 (0)