Skip to content

Commit ea3ee5e

Browse files
authored
Merge pull request #55 from yma96/1.1.x
Change generation executor to CompletableFuture async
2 parents 72e75d3 + 0324103 commit ea3ee5e

File tree

1 file changed

+12
-24
lines changed

1 file changed

+12
-24
lines changed

src/main/java/org/commonjava/indy/service/archive/controller/ArchiveController.java

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -59,14 +59,13 @@
5959
import java.util.Optional;
6060
import java.util.Set;
6161
import java.util.concurrent.Callable;
62+
import java.util.concurrent.CompletableFuture;
6263
import java.util.concurrent.ConcurrentHashMap;
6364
import java.util.concurrent.ExecutionException;
6465
import java.util.concurrent.ExecutorCompletionService;
6566
import java.util.concurrent.ExecutorService;
6667
import java.util.concurrent.Executors;
67-
import java.util.concurrent.Future;
6868
import java.util.concurrent.TimeUnit;
69-
import java.util.concurrent.TimeoutException;
7069
import java.util.stream.Collectors;
7170
import java.util.zip.ZipEntry;
7271
import java.util.zip.ZipInputStream;
@@ -171,7 +170,7 @@ public void generate( HistoricalContentDTO content )
171170
}
172171

173172
recordInProgress( buildConfigId );
174-
Future<?> future = generateExecutor.submit( () -> {
173+
CompletableFuture<Void> future = CompletableFuture.runAsync( () -> {
175174
try
176175
{
177176
doGenerate( content );
@@ -189,27 +188,16 @@ public void generate( HistoricalContentDTO content )
189188
buildConfigLocks.remove( buildConfigId );
190189
logger.info( "<<<Lock released for buildConfigId {}", buildConfigId );
191190
}
192-
} );
193-
try
194-
{
195-
future.get( preSeedConfig.generationTimeoutMinutes().orElse( 60 ), TimeUnit.MINUTES );
196-
}
197-
catch ( TimeoutException e )
198-
{
199-
// If timeout happens on generation, cancel and remove the status to make sure following generation
200-
future.cancel( true );
201-
removeStatus( buildConfigId );
202-
cleanupBCWorkspace( buildConfigId );
203-
logger.error( "Generation timeout for buildConfigId {}", buildConfigId, e );
204-
}
205-
catch ( InterruptedException | ExecutionException e )
206-
{
207-
// If future task level error happens on generation, cancel and remove the status to make sure following generation
208-
future.cancel( true );
209-
removeStatus( buildConfigId );
210-
cleanupBCWorkspace( buildConfigId );
211-
logger.error( "Generation future task level failed for buildConfigId {}", buildConfigId, e );
212-
}
191+
}, generateExecutor );
192+
193+
future.orTimeout( preSeedConfig.generationTimeoutMinutes().orElse( 60 ), TimeUnit.MINUTES )
194+
.exceptionally( ex -> {
195+
// If timeout happens on generation, cancel and remove the status to make sure following generation
196+
removeStatus( buildConfigId );
197+
cleanupBCWorkspace( buildConfigId );
198+
logger.error( "Generation timeout for buildConfigId {}", buildConfigId );
199+
return null;
200+
} );
213201
}
214202
}
215203

0 commit comments

Comments
 (0)