From 2a802c659e2e75c9dcb7e53e9dc6e0393db0804c Mon Sep 17 00:00:00 2001 From: ymlam Date: Mon, 17 Oct 2022 23:57:52 -0400 Subject: [PATCH] Fix bug of at times getting stuck at PAUSING state on reaching daily limit --- src/main/java/altk/comm/engine/Broadcast.java | 14 ++++++++++---- src/main/java/altk/comm/engine/Postback.java | 11 ++++++++--- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/main/java/altk/comm/engine/Broadcast.java b/src/main/java/altk/comm/engine/Broadcast.java index ee2ba90..61a692e 100644 --- a/src/main/java/altk/comm/engine/Broadcast.java +++ b/src/main/java/altk/comm/engine/Broadcast.java @@ -381,7 +381,8 @@ public abstract class Broadcast } finally { - updateServiceActivityCount(-batch.size()); + updateServiceActivityCount(-batch.size()); + if (serviceActivityCount == 0) postback.wakeOneUp(); } if (sleepBetweenJobs > 0) { @@ -1242,6 +1243,7 @@ public abstract class Broadcast synchronized (readyQueue) { serviceActivityCount += increment; + myLogger.debug("serviceActivityCount = " + serviceActivityCount ); if (increment < 0 && serviceActivityCount <= 0) { if (state == BroadcastState.RUNNING @@ -1249,9 +1251,6 @@ public abstract class Broadcast || state == BroadcastState.CANCELING ) { - // TODO: investigate possibility that 0 remainingJobCount may - // not be final. It may still change because a finishing job - // may cause a job to be scheduled. if (getRemainingJobCount() == 0) { setState(BroadcastState.COMPLETED); } @@ -1404,6 +1403,13 @@ public abstract class Broadcast return broadcastType; } + /** + * To be invoked only when postQueue is empty. + * Side effect: sets broadcast state from PAUSING to PAUSE + * when there are no active jobs being processed. + * Similarly from CANCELING to CANCELED, from ABORTING to ABORTED, from COMPLETED to ALLDONE + * @return + */ public PostbackThreadActionOnEmpty getPostbackThreadActionOnEmpty() { myLogger.debug("getPostbackThreadActionOnEmpty(): broadcast state " + state); if (state.isFinal) return PostbackThreadActionOnEmpty.STOP; diff --git a/src/main/java/altk/comm/engine/Postback.java b/src/main/java/altk/comm/engine/Postback.java index 1193bea..af6772a 100644 --- a/src/main/java/altk/comm/engine/Postback.java +++ b/src/main/java/altk/comm/engine/Postback.java @@ -455,16 +455,21 @@ public class Postback { sender.join(); } - // Close postback connections. httpclient.close(); } catch (Exception e) { myLogger.error("Caught when closing HttpClient: " + e.getMessage()); } - - broadcast = null; } + + public void wakeOneUp() + { + synchronized (postQueue) + { + postQueue.notify(); + } + } }