From 7902d4aca630baa563c3e74a2ba5e062787636da Mon Sep 17 00:00:00 2001 From: Xavier Fontanet Date: Sat, 25 May 2024 18:53:51 +0200 Subject: [PATCH] Executors threads never ends unless shutdown --- .../java/tv/mangrana/worker/QueueFixer.java | 9 +++++--- .../worker/SonarrDeferredRefresher.java | 23 ++++++++++++++++--- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/main/java/tv/mangrana/worker/QueueFixer.java b/src/main/java/tv/mangrana/worker/QueueFixer.java index 69f8109..d207ea5 100644 --- a/src/main/java/tv/mangrana/worker/QueueFixer.java +++ b/src/main/java/tv/mangrana/worker/QueueFixer.java @@ -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 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(); } } diff --git a/src/main/java/tv/mangrana/worker/SonarrDeferredRefresher.java b/src/main/java/tv/mangrana/worker/SonarrDeferredRefresher.java index 77611c5..b6b171c 100644 --- a/src/main/java/tv/mangrana/worker/SonarrDeferredRefresher.java +++ b/src/main/java/tv/mangrana/worker/SonarrDeferredRefresher.java @@ -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 seriesToRefresh) { + private final SonarrApiGateway sonarrApiGateway; + private final ScheduledExecutorService deferredRefresher; + private final Set seriesToRefresh; + + static Factory factory() { + return new Factory(); + } + static class Factory { + SonarrDeferredRefresher forSeriesSet(Set seriesToRefresh) { + return new SonarrDeferredRefresher(seriesToRefresh); + } + } + private SonarrDeferredRefresher(Set 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(); } }