Skip to content

Commit a2d88d8

Browse files
authored
use newCachedThreadPool rather than ForkJoinPool (#56)
Signed-off-by: David BRAQUART <[email protected]>
1 parent d6e7cb7 commit a2d88d8

File tree

3 files changed

+57
-12
lines changed

3 files changed

+57
-12
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/**
2+
* Copyright (c) 2023, RTE (http://www.rte-france.com)
3+
* This Source Code Form is subject to the terms of the Mozilla Public
4+
* License, v. 2.0. If a copy of the MPL was not distributed with this
5+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
6+
*/
7+
8+
package org.gridsuite.shortcircuit.server.service;
9+
10+
import com.powsybl.computation.ComputationManager;
11+
import com.powsybl.computation.local.LocalComputationManager;
12+
import jakarta.annotation.PostConstruct;
13+
import jakarta.annotation.PreDestroy;
14+
import lombok.Getter;
15+
import lombok.SneakyThrows;
16+
import org.springframework.stereotype.Service;
17+
18+
import java.util.concurrent.ExecutorService;
19+
import java.util.concurrent.Executors;
20+
21+
/**
22+
* @author David Braquart <david.braquart at rte-france.com>
23+
*/
24+
@Service
25+
@Getter
26+
public class ShortCircuitExecutionService {
27+
28+
private ExecutorService executorService;
29+
30+
private ComputationManager computationManager;
31+
32+
@SneakyThrows
33+
@PostConstruct
34+
private void postConstruct() {
35+
executorService = Executors.newCachedThreadPool();
36+
computationManager = new LocalComputationManager(getExecutorService());
37+
}
38+
39+
@PreDestroy
40+
private void preDestroy() {
41+
executorService.shutdown();
42+
}
43+
}

src/main/java/org/gridsuite/shortcircuit/server/service/ShortCircuitWorkerService.java

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import com.powsybl.commons.PowsyblException;
1212
import com.powsybl.commons.reporter.Reporter;
1313
import com.powsybl.commons.reporter.ReporterModel;
14-
import com.powsybl.computation.local.LocalComputationManager;
1514
import com.powsybl.iidm.network.*;
1615
import com.powsybl.iidm.network.extensions.IdentifiableShortCircuit;
1716
import com.powsybl.network.store.client.NetworkStoreService;
@@ -52,27 +51,29 @@ public class ShortCircuitWorkerService {
5251
private static final String SHORTCIRCUIT_ALL_BUSES_DEFAULT_TYPE_REPORT = "AllBusesShortCircuitAnalysis";
5352
private static final String SHORTCIRCUIT_ONE_BUS_DEFAULT_TYPE_REPORT = "OneBusShortCircuitAnalysis";
5453

55-
private NetworkStoreService networkStoreService;
56-
private ReportService reportService;
57-
private ShortCircuitAnalysisResultRepository resultRepository;
58-
private NotificationService notificationService;
59-
private ObjectMapper objectMapper;
54+
private final NetworkStoreService networkStoreService;
55+
private final ReportService reportService;
56+
private final ShortCircuitAnalysisResultRepository resultRepository;
57+
private final NotificationService notificationService;
58+
private final ShortCircuitExecutionService shortCircuitExecutionService;
59+
private final ObjectMapper objectMapper;
6060
private final Collection<AbstractReportMapper> reportMappers;
6161

62-
private Map<UUID, CompletableFuture<ShortCircuitAnalysisResult>> futures = new ConcurrentHashMap<>();
62+
private final Map<UUID, CompletableFuture<ShortCircuitAnalysisResult>> futures = new ConcurrentHashMap<>();
6363

64-
private Map<UUID, ShortCircuitCancelContext> cancelComputationRequests = new ConcurrentHashMap<>();
64+
private final Map<UUID, ShortCircuitCancelContext> cancelComputationRequests = new ConcurrentHashMap<>();
6565

66-
private Set<UUID> runRequests = Sets.newConcurrentHashSet();
66+
private final Set<UUID> runRequests = Sets.newConcurrentHashSet();
6767

6868
private final Lock lockRunAndCancelShortCircuitAnalysis = new ReentrantLock();
6969

7070
@Autowired
71-
public ShortCircuitWorkerService(NetworkStoreService networkStoreService, ReportService reportService,
71+
public ShortCircuitWorkerService(NetworkStoreService networkStoreService, ReportService reportService, ShortCircuitExecutionService shortCircuitExecutionService,
7272
NotificationService notificationService, ShortCircuitAnalysisResultRepository resultRepository,
7373
ObjectMapper objectMapper, Collection<AbstractReportMapper> reportMappers) {
7474
this.networkStoreService = Objects.requireNonNull(networkStoreService);
7575
this.reportService = Objects.requireNonNull(reportService);
76+
this.shortCircuitExecutionService = Objects.requireNonNull(shortCircuitExecutionService);
7677
this.notificationService = Objects.requireNonNull(notificationService);
7778
this.resultRepository = Objects.requireNonNull(resultRepository);
7879
this.objectMapper = Objects.requireNonNull(objectMapper);
@@ -183,7 +184,7 @@ private CompletableFuture<ShortCircuitAnalysisResult> runShortCircuitAnalysisAsy
183184
network,
184185
faults,
185186
context.getParameters(),
186-
LocalComputationManager.getDefault(),
187+
shortCircuitExecutionService.getComputationManager(),
187188
List.of(),
188189
reporter);
189190
if (resultUuid != null) {

src/test/java/org/gridsuite/shortcircuit/server/service/ShortCircuitServiceTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ void testLogsMappersIsCalled() throws Exception {
4646
final AbstractReportMapper reportMapperMocked = Mockito.mock(AbstractReportMapper.class);
4747
final NetworkStoreService networkStoreServiceMocked = Mockito.mock(NetworkStoreService.class);
4848
final ReportService reportServiceMocked = Mockito.mock(ReportService.class);
49+
final ShortCircuitExecutionService shortCircuitExecutionService = Mockito.mock(ShortCircuitExecutionService.class);
4950
final NotificationService notificationServiceMocked = Mockito.mock(NotificationService.class);
5051
final ShortCircuitAnalysisResultRepository resultRepositoryMocked = Mockito.mock(ShortCircuitAnalysisResultRepository.class);
5152
final ObjectMapper objectMapperMocked = Mockito.mock(ObjectMapper.class);
@@ -77,7 +78,7 @@ void testLogsMappersIsCalled() throws Exception {
7778
Mockito.when(networkMocked.getBusView()).thenReturn(busViewMocked);
7879
Mockito.when(busViewMocked.getBusStream()).thenAnswer(invocation -> Stream.empty());
7980
Mockito.when(reportMapperMocked.processReporter(any(Reporter.class))).thenReturn(reporter);
80-
final ShortCircuitWorkerService workerService = new ShortCircuitWorkerService(networkStoreServiceMocked, reportServiceMocked, notificationServiceMocked, resultRepositoryMocked, objectMapperMocked, List.of(reportMapperMocked));
81+
final ShortCircuitWorkerService workerService = new ShortCircuitWorkerService(networkStoreServiceMocked, reportServiceMocked, shortCircuitExecutionService, notificationServiceMocked, resultRepositoryMocked, objectMapperMocked, List.of(reportMapperMocked));
8182
workerService.consumeRun().accept(message);
8283
shortCircuitAnalysisMockedStatic.verify(ShortCircuitAnalysis::find, atLeastOnce());
8384
Mockito.verify(reportMapperMocked, times(1)).processReporter(any(ReporterModel.class));

0 commit comments

Comments
 (0)