This is an automated email from the ASF dual-hosted git repository.
bstoyanov pushed a commit to branch 4.20
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/4.20 by this push:
new 95de88a8ffe Usage server should takeover immediately if the other
Usage server has been stopped gracefully (#12507)
95de88a8ffe is described below
commit 95de88a8ffee115a98fd34818394d420b01f8cdf
Author: Abhisar Sinha <[email protected]>
AuthorDate: Wed Jan 28 19:38:25 2026 +0530
Usage server should takeover immediately if the other Usage server has been
stopped gracefully (#12507)
---
engine/schema/src/main/java/com/cloud/usage/dao/UsageJobDao.java | 2 ++
engine/schema/src/main/java/com/cloud/usage/dao/UsageJobDaoImpl.java | 3 ++-
usage/src/main/java/com/cloud/usage/UsageManagerImpl.java | 5 +++++
3 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/engine/schema/src/main/java/com/cloud/usage/dao/UsageJobDao.java
b/engine/schema/src/main/java/com/cloud/usage/dao/UsageJobDao.java
index d4038d4ceeb..b22ce69d94e 100644
--- a/engine/schema/src/main/java/com/cloud/usage/dao/UsageJobDao.java
+++ b/engine/schema/src/main/java/com/cloud/usage/dao/UsageJobDao.java
@@ -28,6 +28,8 @@ public interface UsageJobDao extends GenericDao<UsageJobVO,
Long> {
UsageJobVO getLastJob();
+ UsageJobVO getNextRecurringJob();
+
UsageJobVO getNextImmediateJob();
long getLastJobSuccessDateMillis();
diff --git
a/engine/schema/src/main/java/com/cloud/usage/dao/UsageJobDaoImpl.java
b/engine/schema/src/main/java/com/cloud/usage/dao/UsageJobDaoImpl.java
index 44a7d1a8b72..6f340501cf1 100644
--- a/engine/schema/src/main/java/com/cloud/usage/dao/UsageJobDaoImpl.java
+++ b/engine/schema/src/main/java/com/cloud/usage/dao/UsageJobDaoImpl.java
@@ -156,7 +156,8 @@ public class UsageJobDaoImpl extends
GenericDaoBase<UsageJobVO, Long> implements
return jobs.get(0);
}
- private UsageJobVO getNextRecurringJob() {
+ @Override
+ public UsageJobVO getNextRecurringJob() {
Filter filter = new Filter(UsageJobVO.class, "id", false,
Long.valueOf(0), Long.valueOf(1));
SearchCriteria<UsageJobVO> sc = createSearchCriteria();
sc.addAnd("endMillis", SearchCriteria.Op.EQ, Long.valueOf(0));
diff --git a/usage/src/main/java/com/cloud/usage/UsageManagerImpl.java
b/usage/src/main/java/com/cloud/usage/UsageManagerImpl.java
index 99de98f56e4..30cdfcf21f0 100644
--- a/usage/src/main/java/com/cloud/usage/UsageManagerImpl.java
+++ b/usage/src/main/java/com/cloud/usage/UsageManagerImpl.java
@@ -2257,6 +2257,11 @@ public class UsageManagerImpl extends ManagerBase
implements UsageManager, Runna
}
}
+ if (_usageJobDao.getNextRecurringJob() == null) {
+ // Own the usage processing immediately if no other
node is owning it
+ _usageJobDao.createNewJob(_hostname, _pid,
UsageJobVO.JOB_TYPE_RECURRING);
+ }
+
Long jobId = _usageJobDao.checkHeartbeat(_hostname, _pid,
_aggregationDuration);
if (jobId != null) {
// if I'm taking over the job...see how long it's been
since the last job, and if it's more than the