Skip to content

Commit 5cef8e9

Browse files
abh1sardhslove
authored andcommitted
Usage: Heartbeat should not schedule usage job when a job is already running (apache#12616)
1 parent 5036c09 commit 5cef8e9

1 file changed

Lines changed: 16 additions & 4 deletions

File tree

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
}
@@ -2172,9 +2179,14 @@ protected void runInContext() {
21722179

21732180
if ((timeSinceLastSuccessJob > 0) && (timeSinceLastSuccessJob > (aggregationDurationMillis - 100))) {
21742181
if (timeToJob > (aggregationDurationMillis / 2)) {
2175-
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)"
2176-
, timeSinceLastSuccessJob, timeToJob, _aggregationDuration);
2177-
scheduleParse();
2182+
logger.debug("Heartbeat: it's been {} ms since last finished usage job and {} ms until next job (aggregation duration is {} minutes)",
2183+
timeSinceLastSuccessJob, timeToJob, _aggregationDuration);
2184+
if (isParsingJobRunning.get()) {
2185+
logger.debug("Heartbeat: A parsing job is already running");
2186+
} else {
2187+
logger.debug("Heartbeat: Scheduling an immediate job to catch up");
2188+
scheduleParse();
2189+
}
21782190
}
21792191
}
21802192

0 commit comments

Comments
 (0)