This is an automated email from the ASF dual-hosted git repository.

dahn 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 d1eb2822d9d Remove redundant Exceptions from logs for vm schedules 
(#12428)
d1eb2822d9d is described below

commit d1eb2822d9d5b346840851cf21611345454ed734
Author: Vishesh <[email protected]>
AuthorDate: Thu Jan 22 18:59:35 2026 +0530

    Remove redundant Exceptions from logs for vm schedules (#12428)
---
 .../cloudstack/vm/schedule/dao/VMScheduledJobDao.java     |  2 ++
 .../cloudstack/vm/schedule/dao/VMScheduledJobDaoImpl.java | 15 +++++++++++++++
 .../apache/cloudstack/vm/schedule/VMSchedulerImpl.java    |  8 +++++++-
 3 files changed, 24 insertions(+), 1 deletion(-)

diff --git 
a/engine/schema/src/main/java/org/apache/cloudstack/vm/schedule/dao/VMScheduledJobDao.java
 
b/engine/schema/src/main/java/org/apache/cloudstack/vm/schedule/dao/VMScheduledJobDao.java
index 7b8c01aae6a..835ac696f26 100644
--- 
a/engine/schema/src/main/java/org/apache/cloudstack/vm/schedule/dao/VMScheduledJobDao.java
+++ 
b/engine/schema/src/main/java/org/apache/cloudstack/vm/schedule/dao/VMScheduledJobDao.java
@@ -31,4 +31,6 @@ public interface VMScheduledJobDao extends 
GenericDao<VMScheduledJobVO, Long> {
     int expungeJobsForSchedules(List<Long> scheduleId, Date dateAfter);
 
     int expungeJobsBefore(Date currentTimestamp);
+
+    VMScheduledJobVO findByScheduleAndTimestamp(long scheduleId, Date 
scheduledTimestamp);
 }
diff --git 
a/engine/schema/src/main/java/org/apache/cloudstack/vm/schedule/dao/VMScheduledJobDaoImpl.java
 
b/engine/schema/src/main/java/org/apache/cloudstack/vm/schedule/dao/VMScheduledJobDaoImpl.java
index 50a2b12fd77..2f08a41b92e 100644
--- 
a/engine/schema/src/main/java/org/apache/cloudstack/vm/schedule/dao/VMScheduledJobDaoImpl.java
+++ 
b/engine/schema/src/main/java/org/apache/cloudstack/vm/schedule/dao/VMScheduledJobDaoImpl.java
@@ -39,6 +39,8 @@ public class VMScheduledJobDaoImpl extends 
GenericDaoBase<VMScheduledJobVO, Long
 
     private final SearchBuilder<VMScheduledJobVO> expungeJobForScheduleSearch;
 
+    private final SearchBuilder<VMScheduledJobVO> scheduleAndTimestampSearch;
+
     static final String SCHEDULED_TIMESTAMP = "scheduled_timestamp";
 
     static final String VM_SCHEDULE_ID = "vm_schedule_id";
@@ -58,6 +60,11 @@ public class VMScheduledJobDaoImpl extends 
GenericDaoBase<VMScheduledJobVO, Long
         expungeJobForScheduleSearch.and(VM_SCHEDULE_ID, 
expungeJobForScheduleSearch.entity().getVmScheduleId(), SearchCriteria.Op.IN);
         expungeJobForScheduleSearch.and(SCHEDULED_TIMESTAMP, 
expungeJobForScheduleSearch.entity().getScheduledTime(), 
SearchCriteria.Op.GTEQ);
         expungeJobForScheduleSearch.done();
+
+        scheduleAndTimestampSearch = createSearchBuilder();
+        scheduleAndTimestampSearch.and(VM_SCHEDULE_ID, 
scheduleAndTimestampSearch.entity().getVmScheduleId(), SearchCriteria.Op.EQ);
+        scheduleAndTimestampSearch.and(SCHEDULED_TIMESTAMP, 
scheduleAndTimestampSearch.entity().getScheduledTime(), SearchCriteria.Op.EQ);
+        scheduleAndTimestampSearch.done();
     }
 
     /**
@@ -92,4 +99,12 @@ public class VMScheduledJobDaoImpl extends 
GenericDaoBase<VMScheduledJobVO, Long
         sc.setParameters(SCHEDULED_TIMESTAMP, date);
         return expunge(sc);
     }
+
+    @Override
+    public VMScheduledJobVO findByScheduleAndTimestamp(long scheduleId, Date 
scheduledTimestamp) {
+        SearchCriteria<VMScheduledJobVO> sc = 
scheduleAndTimestampSearch.create();
+        sc.setParameters(VM_SCHEDULE_ID, scheduleId);
+        sc.setParameters(SCHEDULED_TIMESTAMP, scheduledTimestamp);
+        return findOneBy(sc);
+    }
 }
diff --git 
a/server/src/main/java/org/apache/cloudstack/vm/schedule/VMSchedulerImpl.java 
b/server/src/main/java/org/apache/cloudstack/vm/schedule/VMSchedulerImpl.java
index 7410fb1c265..56d794fa5c2 100644
--- 
a/server/src/main/java/org/apache/cloudstack/vm/schedule/VMSchedulerImpl.java
+++ 
b/server/src/main/java/org/apache/cloudstack/vm/schedule/VMSchedulerImpl.java
@@ -162,7 +162,13 @@ public class VMSchedulerImpl extends ManagerBase 
implements VMScheduler, Configu
         }
 
         Date scheduledDateTime = Date.from(ts.toInstant());
-        VMScheduledJobVO scheduledJob = new 
VMScheduledJobVO(vmSchedule.getVmId(), vmSchedule.getId(), 
vmSchedule.getAction(), scheduledDateTime);
+        VMScheduledJobVO scheduledJob = 
vmScheduledJobDao.findByScheduleAndTimestamp(vmSchedule.getId(), 
scheduledDateTime);
+        if (scheduledJob != null) {
+            logger.trace("Job is already scheduled for schedule {} at {}", 
vmSchedule, scheduledDateTime);
+            return scheduledDateTime;
+        }
+
+        scheduledJob = new VMScheduledJobVO(vmSchedule.getVmId(), 
vmSchedule.getId(), vmSchedule.getAction(), scheduledDateTime);
         try {
             vmScheduledJobDao.persist(scheduledJob);
             ActionEventUtils.onScheduledActionEvent(User.UID_SYSTEM, 
vm.getAccountId(), actionEventMap.get(vmSchedule.getAction()),

Reply via email to