Skip to content

Commit cf79583

Browse files
committed
fix: close running scheduledExecutor when closing client
1 parent b574997 commit cf79583

4 files changed

Lines changed: 15 additions & 10 deletions

File tree

src/main/java/fr/maif/IzanamiClient.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,7 @@ public IzanamiClient(
9292
* @return a CompletableFuture that complete when SSE client is closed, or immediately if there is no SSE client
9393
*/
9494
public CompletableFuture<Void> close() {
95-
if(this.featureService instanceof SSEFeatureService) {
96-
return ((SSEFeatureService)this.featureService).disconnect();
97-
} else {
98-
return CompletableFuture.completedFuture(null);
99-
}
95+
return this.featureService.disconnect();
10096
}
10197

10298
/**

src/main/java/fr/maif/requests/FeatureService.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
public interface FeatureService {
1212
ClientConfiguration configuration();
13+
CompletableFuture<Void> disconnect();
1314

1415
@Deprecated
1516
default CompletableFuture<Map<String, Boolean>> featureStates(

src/main/java/fr/maif/requests/FetchFeatureService.java

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,7 @@
1616
import org.slf4j.LoggerFactory;
1717

1818
import java.util.*;
19-
import java.util.concurrent.CompletableFuture;
20-
import java.util.concurrent.Executors;
21-
import java.util.concurrent.ScheduledExecutorService;
22-
import java.util.concurrent.TimeUnit;
19+
import java.util.concurrent.*;
2320
import java.util.stream.Collectors;
2421

2522
import static fr.maif.requests.FeatureRequest.newFeatureRequest;
@@ -29,6 +26,7 @@ public class FetchFeatureService implements FeatureService {
2926
protected ClientConfiguration configuration;
3027
private static final Logger LOGGER = LoggerFactory.getLogger(FetchFeatureService.class);
3128
private final Cache<String, Feature<?>> cache;
29+
private final Optional<ScheduledExecutorService> refreshScheduler;
3230

3331
public FetchFeatureService(ClientConfiguration configuration) {
3432
this.configuration = configuration;
@@ -37,12 +35,15 @@ public FetchFeatureService(ClientConfiguration configuration) {
3735

3836

3937
if(configuration.cacheConfiguration.enabled) {
40-
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
38+
var scheduler = Executors.newScheduledThreadPool(1);
4139
scheduler.scheduleAtFixedRate(
4240
this::refreshCache,
4341
0,
4442
configuration.cacheConfiguration.refreshInterval.getSeconds(), TimeUnit.SECONDS
4543
);
44+
refreshScheduler = Optional.of(scheduler);
45+
} else {
46+
refreshScheduler = Optional.empty();
4647
}
4748
}
4849

@@ -76,6 +77,12 @@ public ClientConfiguration configuration() {
7677
return configuration;
7778
}
7879

80+
@Override
81+
public CompletableFuture<Void> disconnect() {
82+
refreshScheduler.ifPresent(ExecutorService::shutdown);
83+
return CompletableFuture.completedFuture(null);
84+
}
85+
7986
@Override
8087
public CompletableFuture<IzanamiResult> featureValues(FeatureRequest request) {
8188
LOGGER.debug("Feature activation request for {}", String.join(",", request.features.keySet()));

src/main/java/fr/maif/requests/SSEFeatureService.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ private void processEvent(IzanamiEvent event) {
5656
}
5757
}
5858

59+
@Override
5960
public CompletableFuture<Void> disconnect() {
6061
return this.sseClient.close();
6162
}

0 commit comments

Comments
 (0)