Skip to content

Commit 99ab23a

Browse files
committed
Remove redundant Exceptions from logs for vm schedules
1 parent 5c1f931 commit 99ab23a

3 files changed

Lines changed: 27 additions & 2 deletions

File tree

engine/schema/src/main/java/org/apache/cloudstack/vm/schedule/dao/VMScheduledJobDao.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,6 @@ public interface VMScheduledJobDao extends GenericDao<VMScheduledJobVO, Long> {
3131
int expungeJobsForSchedules(List<Long> scheduleId, Date dateAfter);
3232

3333
int expungeJobsBefore(Date currentTimestamp);
34+
35+
VMScheduledJobVO findByScheduleAndTimestamp(long scheduleId, Date scheduledTimestamp);
3436
}

engine/schema/src/main/java/org/apache/cloudstack/vm/schedule/dao/VMScheduledJobDaoImpl.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ public class VMScheduledJobDaoImpl extends GenericDaoBase<VMScheduledJobVO, Long
3939

4040
private final SearchBuilder<VMScheduledJobVO> expungeJobForScheduleSearch;
4141

42+
private final SearchBuilder<VMScheduledJobVO> scheduleAndTimestampSearch;
43+
4244
static final String SCHEDULED_TIMESTAMP = "scheduled_timestamp";
4345

4446
static final String VM_SCHEDULE_ID = "vm_schedule_id";
@@ -58,6 +60,11 @@ public VMScheduledJobDaoImpl() {
5860
expungeJobForScheduleSearch.and(VM_SCHEDULE_ID, expungeJobForScheduleSearch.entity().getVmScheduleId(), SearchCriteria.Op.IN);
5961
expungeJobForScheduleSearch.and(SCHEDULED_TIMESTAMP, expungeJobForScheduleSearch.entity().getScheduledTime(), SearchCriteria.Op.GTEQ);
6062
expungeJobForScheduleSearch.done();
63+
64+
scheduleAndTimestampSearch = createSearchBuilder();
65+
scheduleAndTimestampSearch.and(VM_SCHEDULE_ID, scheduleAndTimestampSearch.entity().getVmScheduleId(), SearchCriteria.Op.EQ);
66+
scheduleAndTimestampSearch.and(SCHEDULED_TIMESTAMP, scheduleAndTimestampSearch.entity().getScheduledTime(), SearchCriteria.Op.EQ);
67+
scheduleAndTimestampSearch.done();
6168
}
6269

6370
/**
@@ -92,4 +99,12 @@ public int expungeJobsBefore(Date date) {
9299
sc.setParameters(SCHEDULED_TIMESTAMP, date);
93100
return expunge(sc);
94101
}
102+
103+
@Override
104+
public VMScheduledJobVO findByScheduleAndTimestamp(long scheduleId, Date scheduledTimestamp) {
105+
SearchCriteria<VMScheduledJobVO> sc = scheduleAndTimestampSearch.create();
106+
sc.setParameters(VM_SCHEDULE_ID, scheduleId);
107+
sc.setParameters(SCHEDULED_TIMESTAMP, scheduledTimestamp);
108+
return findOneBy(sc);
109+
}
95110
}

server/src/main/java/org/apache/cloudstack/vm/schedule/VMSchedulerImpl.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@
4747

4848
import javax.inject.Inject;
4949
import javax.persistence.EntityExistsException;
50+
import java.sql.SQLException;
51+
import java.sql.SQLIntegrityConstraintViolationException;
5052
import java.time.ZonedDateTime;
5153
import java.util.ArrayList;
5254
import java.util.Arrays;
@@ -162,13 +164,19 @@ public Date scheduleNextJob(VMScheduleVO vmSchedule, Date timestamp) {
162164
}
163165

164166
Date scheduledDateTime = Date.from(ts.toInstant());
165-
VMScheduledJobVO scheduledJob = new VMScheduledJobVO(vmSchedule.getVmId(), vmSchedule.getId(), vmSchedule.getAction(), scheduledDateTime);
167+
VMScheduledJobVO scheduledJob = vmScheduledJobDao.findByScheduleAndTimestamp(vmSchedule.getId(), scheduledDateTime);
168+
if (scheduledJob != null) {
169+
logger.trace("Job is already scheduled for schedule {} at {}", vmSchedule, scheduledDateTime);
170+
return scheduledDateTime;
171+
}
172+
173+
scheduledJob = new VMScheduledJobVO(vmSchedule.getVmId(), vmSchedule.getId(), vmSchedule.getAction(), scheduledDateTime);
166174
try {
167175
vmScheduledJobDao.persist(scheduledJob);
168176
ActionEventUtils.onScheduledActionEvent(User.UID_SYSTEM, vm.getAccountId(), actionEventMap.get(vmSchedule.getAction()),
169177
String.format("Scheduled action (%s) [vm: %s, schedule: %s] at %s", vmSchedule.getAction(), vm, vmSchedule, scheduledDateTime),
170178
vm.getId(), ApiCommandResourceType.VirtualMachine.toString(), true, 0);
171-
} catch (EntityExistsException exception) {
179+
} catch (EntityExistsException) {
172180
logger.debug("Job is already scheduled.");
173181
}
174182
return scheduledDateTime;

0 commit comments

Comments
 (0)