1
0
Fork 0

Executors threads never ends unless shutdown

This commit is contained in:
Xavier Fontanet 2024-05-25 18:53:51 +02:00
parent bda5b11814
commit 7902d4aca6
2 changed files with 26 additions and 6 deletions

View File

@ -18,12 +18,12 @@ public class QueueFixer {
private final SonarrApiGateway sonarrApiGateway;
private final FailedImportFixer.Factory fixerFactory;
private final SonarrDeferredRefresher sonarrDeferredRefresher;
private final SonarrDeferredRefresher.Factory seriesRefresherFactory;
QueueFixer(SonarrApiGateway sonarGateway) {
sonarrApiGateway = sonarGateway;
fixerFactory = FailedImportFixer.factory();
sonarrDeferredRefresher = new SonarrDeferredRefresher();
seriesRefresherFactory = SonarrDeferredRefresher.factory();
}
void fix() {
@ -98,7 +98,10 @@ public class QueueFixer {
Set<Integer> seriesToRefresh = recordsToFix.stream()
.map(Record::getSeriesId)
.collect(Collectors.toSet());
System.out.printf("** going to refresh the following series %s%n", seriesToRefresh);
sonarrDeferredRefresher.refreshSeries(seriesToRefresh);
seriesRefresherFactory
.forSeriesSet(seriesToRefresh)
.refresh();
}
}

View File

@ -10,13 +10,30 @@ import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class SonarrDeferredRefresher {
private static final ScheduledExecutorService deferredRefresher = new ScheduledThreadPoolExecutor(1);
private final SonarrApiGateway sonarrApiGateway = Sonarr.api();
public void refreshSeries(Set<Integer> seriesToRefresh) {
private final SonarrApiGateway sonarrApiGateway;
private final ScheduledExecutorService deferredRefresher;
private final Set<Integer> seriesToRefresh;
static Factory factory() {
return new Factory();
}
static class Factory {
SonarrDeferredRefresher forSeriesSet(Set<Integer> seriesToRefresh) {
return new SonarrDeferredRefresher(seriesToRefresh);
}
}
private SonarrDeferredRefresher(Set<Integer> seriesToRefresh) {
sonarrApiGateway = Sonarr.api();
deferredRefresher = new ScheduledThreadPoolExecutor(1);
this.seriesToRefresh = seriesToRefresh;
}
public void refresh() {
for (var serieId : seriesToRefresh) {
Runnable refreshTask = () -> sonarrApiGateway.refreshSerie(serieId);
if (!ConfigLoader.isTestMode())
deferredRefresher.schedule(refreshTask, 5, TimeUnit.SECONDS);
}
deferredRefresher.shutdown();
}
}