Skip to content

Commit f56fdcb

Browse files
abh1sarLocharla, Sandeep
authored andcommitted
Usage: Heartbeat should not schedule usage job when a job is already running (apache#12616)
1 parent caa5b1b commit f56fdcb

File tree

1 file changed

+16
-4
lines changed

1 file changed

+16
-4
lines changed

usage/src/main/java/com/cloud/usage/UsageManagerImpl.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import java.util.concurrent.Future;
3232
import java.util.concurrent.ScheduledExecutorService;
3333
import java.util.concurrent.TimeUnit;
34+
import java.util.concurrent.atomic.AtomicBoolean;
3435

3536
import com.cloud.network.Network;
3637
import com.cloud.usage.dao.UsageNetworksDao;
@@ -179,6 +180,7 @@ public class UsageManagerImpl extends ManagerBase implements UsageManager, Runna
179180
private final List<UsageVmDiskVO> usageVmDisks = new ArrayList<UsageVmDiskVO>();
180181

181182
private final ScheduledExecutorService _executor = Executors.newSingleThreadScheduledExecutor(new NamedThreadFactory("Usage-Job"));
183+
private final AtomicBoolean isParsingJobRunning = new AtomicBoolean(false);
182184
private final ScheduledExecutorService _heartbeatExecutor = Executors.newSingleThreadScheduledExecutor(new NamedThreadFactory("Usage-HB"));
183185
private final ScheduledExecutorService _sanityExecutor = Executors.newSingleThreadScheduledExecutor(new NamedThreadFactory("Usage-Sanity"));
184186
private Future _scheduledFuture = null;
@@ -354,7 +356,12 @@ public void run() {
354356
(new ManagedContextRunnable() {
355357
@Override
356358
protected void runInContext() {
357-
runInContextInternal();
359+
isParsingJobRunning.set(true);
360+
try {
361+
runInContextInternal();
362+
} finally {
363+
isParsingJobRunning.set(false);
364+
}
358365
}
359366
}).run();
360367
}
@@ -2177,9 +2184,14 @@ protected void runInContext() {
21772184

21782185
if ((timeSinceLastSuccessJob > 0) && (timeSinceLastSuccessJob > (aggregationDurationMillis - 100))) {
21792186
if (timeToJob > (aggregationDurationMillis / 2)) {
2180-
logger.debug("it's been {} ms since last usage job and {} ms until next job, scheduling an immediate job to catch up (aggregation duration is {} minutes)"
2181-
, timeSinceLastSuccessJob, timeToJob, _aggregationDuration);
2182-
scheduleParse();
2187+
logger.debug("Heartbeat: it's been {} ms since last finished usage job and {} ms until next job (aggregation duration is {} minutes)",
2188+
timeSinceLastSuccessJob, timeToJob, _aggregationDuration);
2189+
if (isParsingJobRunning.get()) {
2190+
logger.debug("Heartbeat: A parsing job is already running");
2191+
} else {
2192+
logger.debug("Heartbeat: Scheduling an immediate job to catch up");
2193+
scheduleParse();
2194+
}
21832195
}
21842196
}
21852197

0 commit comments

Comments
 (0)