Skip to content

Commit 9041a24

Browse files
shwstpprdhslove
authored andcommitted
server: prevent vm schedule update failure for time when not changed (apache#11314)
Fixes apache#11175 Behaviour introduced in apache#7397 always validates start-end times during update even when they are not changed which leads to failure to enable/disable schedule if the start time has passed. Signed-off-by: Abhishek Kumar <[email protected]>
1 parent aa3264d commit 9041a24

File tree

1 file changed

+34
-21
lines changed

1 file changed

+34
-21
lines changed

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

Lines changed: 34 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,30 @@
1818
*/
1919
package org.apache.cloudstack.vm.schedule;
2020

21+
import java.time.ZonedDateTime;
22+
import java.util.ArrayList;
23+
import java.util.Date;
24+
import java.util.List;
25+
import java.util.Objects;
26+
import java.util.TimeZone;
27+
28+
import javax.inject.Inject;
29+
30+
import org.apache.cloudstack.api.ApiCommandResourceType;
31+
import org.apache.cloudstack.api.command.user.vm.CreateVMScheduleCmd;
32+
import org.apache.cloudstack.api.command.user.vm.DeleteVMScheduleCmd;
33+
import org.apache.cloudstack.api.command.user.vm.ListVMScheduleCmd;
34+
import org.apache.cloudstack.api.command.user.vm.UpdateVMScheduleCmd;
35+
import org.apache.cloudstack.api.response.ListResponse;
36+
import org.apache.cloudstack.api.response.VMScheduleResponse;
37+
import org.apache.cloudstack.context.CallContext;
38+
import org.apache.cloudstack.vm.schedule.dao.VMScheduleDao;
39+
import org.apache.commons.lang.time.DateUtils;
40+
import org.apache.commons.lang3.ObjectUtils;
41+
import org.apache.commons.lang3.StringUtils;
42+
import org.apache.log4j.Logger;
43+
import org.springframework.scheduling.support.CronExpression;
44+
2145
import com.cloud.api.query.MutualExclusiveIdsManagerBase;
2246
import com.cloud.event.ActionEvent;
2347
import com.cloud.event.EventTypes;
@@ -32,26 +56,6 @@
3256
import com.cloud.utils.exception.CloudRuntimeException;
3357
import com.cloud.vm.UserVmManager;
3458
import com.cloud.vm.VirtualMachine;
35-
import org.apache.cloudstack.api.ApiCommandResourceType;
36-
import org.apache.cloudstack.api.command.user.vm.CreateVMScheduleCmd;
37-
import org.apache.cloudstack.api.command.user.vm.DeleteVMScheduleCmd;
38-
import org.apache.cloudstack.api.command.user.vm.ListVMScheduleCmd;
39-
import org.apache.cloudstack.api.command.user.vm.UpdateVMScheduleCmd;
40-
import org.apache.cloudstack.api.response.ListResponse;
41-
import org.apache.cloudstack.api.response.VMScheduleResponse;
42-
import org.apache.cloudstack.context.CallContext;
43-
import org.apache.cloudstack.vm.schedule.dao.VMScheduleDao;
44-
import org.apache.commons.lang.time.DateUtils;
45-
import org.apache.commons.lang3.StringUtils;
46-
import org.springframework.scheduling.support.CronExpression;
47-
48-
import javax.inject.Inject;
49-
import java.time.ZonedDateTime;
50-
import java.util.ArrayList;
51-
import java.util.Date;
52-
import java.util.List;
53-
import java.util.Objects;
54-
import java.util.TimeZone;
5559

5660
public class VMScheduleManagerImpl extends MutualExclusiveIdsManagerBase implements VMScheduleManager, PluggableService {
5761

@@ -205,6 +209,9 @@ public VMScheduleResponse updateSchedule(UpdateVMScheduleCmd cmd) {
205209
Date cmdStartDate = cmd.getStartDate();
206210
Date cmdEndDate = cmd.getEndDate();
207211
Boolean enabled = cmd.getEnabled();
212+
final String originalTimeZone = vmSchedule.getTimeZone();
213+
final Date originalStartDate = vmSchedule.getStartDate();
214+
final Date originalEndDate = vmSchedule.getEndDate();
208215

209216
TimeZone timeZone;
210217
String timeZoneId;
@@ -231,7 +238,13 @@ public VMScheduleResponse updateSchedule(UpdateVMScheduleCmd cmd) {
231238
startDate = Date.from(DateUtil.getZoneDateTime(cmdStartDate, timeZone.toZoneId()).toInstant());
232239
}
233240

234-
validateStartDateEndDate(Objects.requireNonNullElse(startDate, DateUtils.addMinutes(new Date(), 1)), endDate, timeZone);
241+
if (ObjectUtils.anyNotNull(cmdStartDate, cmdEndDate, cmdTimeZone) &&
242+
(!Objects.equals(originalTimeZone, timeZoneId) ||
243+
!Objects.equals(originalStartDate, startDate) ||
244+
!Objects.equals(originalEndDate, endDate))) {
245+
validateStartDateEndDate(Objects.requireNonNullElse(startDate, DateUtils.addMinutes(new Date(), 1)),
246+
endDate, timeZone);
247+
}
235248

236249
if (enabled != null) {
237250
vmSchedule.setEnabled(enabled);

0 commit comments

Comments
 (0)