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 SonarrApiGateway sonarrApiGateway;
private final FailedImportFixer.Factory fixerFactory; private final FailedImportFixer.Factory fixerFactory;
private final SonarrDeferredRefresher sonarrDeferredRefresher; private final SonarrDeferredRefresher.Factory seriesRefresherFactory;
QueueFixer(SonarrApiGateway sonarGateway) { QueueFixer(SonarrApiGateway sonarGateway) {
sonarrApiGateway = sonarGateway; sonarrApiGateway = sonarGateway;
fixerFactory = FailedImportFixer.factory(); fixerFactory = FailedImportFixer.factory();
sonarrDeferredRefresher = new SonarrDeferredRefresher(); seriesRefresherFactory = SonarrDeferredRefresher.factory();
} }
void fix() { void fix() {
@ -98,7 +98,10 @@ public class QueueFixer {
Set<Integer> seriesToRefresh = recordsToFix.stream() Set<Integer> seriesToRefresh = recordsToFix.stream()
.map(Record::getSeriesId) .map(Record::getSeriesId)
.collect(Collectors.toSet()); .collect(Collectors.toSet());
System.out.printf("** going to refresh the following series %s%n", seriesToRefresh); 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; import java.util.concurrent.TimeUnit;
public class SonarrDeferredRefresher { public class SonarrDeferredRefresher {
private static final ScheduledExecutorService deferredRefresher = new ScheduledThreadPoolExecutor(1); private final SonarrApiGateway sonarrApiGateway;
private final SonarrApiGateway sonarrApiGateway = Sonarr.api(); private final ScheduledExecutorService deferredRefresher;
public void refreshSeries(Set<Integer> seriesToRefresh) { 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) { for (var serieId : seriesToRefresh) {
Runnable refreshTask = () -> sonarrApiGateway.refreshSerie(serieId); Runnable refreshTask = () -> sonarrApiGateway.refreshSerie(serieId);
if (!ConfigLoader.isTestMode()) if (!ConfigLoader.isTestMode())
deferredRefresher.schedule(refreshTask, 5, TimeUnit.SECONDS); deferredRefresher.schedule(refreshTask, 5, TimeUnit.SECONDS);
} }
deferredRefresher.shutdown();
} }
} }