@@ -842,7 +842,7 @@ public BackupSchedule configureBackupSchedule(CreateBackupScheduleCmd cmd) {
842842 validateQuiesceAndIsolated (offering , quiesceVm , isolated );
843843
844844 validateMaxScheduleForIntervalType (offering , intervalType , vm );
845- validateDifferentScheduleFromExistingSchedules (vm , intervalType , scheduleString );
845+ validateDifferentScheduleFromExistingSchedules (vm , intervalType , scheduleString , null );
846846
847847 final String timezoneId = timeZone .getID ();
848848 if (!timezoneId .equals (cmd .getTimezone ())) {
@@ -894,10 +894,12 @@ public BackupSchedule configureBackupSchedule(UpdateBackupScheduleCmd cmd) {
894894 boolean isolated = ObjectUtils .defaultIfNull (cmd .isIsolated (), schedule .isIsolated ());
895895 validateQuiesceAndIsolated (offering , quiesceVm , isolated );
896896
897+ String scheduleString = ObjectUtils .defaultIfNull (cmd .getSchedule (), schedule .getSchedule ());
898+ validateDifferentScheduleFromExistingSchedules (vm , intervalType , scheduleString , schedule );
899+
897900 String timeZoneString = ObjectUtils .defaultIfNull (cmd .getTimezone (), schedule .getTimezone ());
898901 TimeZone timeZone = TimeZone .getTimeZone (timeZoneString );
899902 intervalType = ObjectUtils .defaultIfNull (intervalType , schedule .getScheduleType ());
900- String scheduleString = ObjectUtils .defaultIfNull (cmd .getSchedule (), schedule .getSchedule ());
901903
902904 Date nextDateTime ;
903905 try {
@@ -2708,8 +2710,11 @@ protected void validateMaxScheduleForIntervalType(BackupOffering offering, DateU
27082710 }
27092711 }
27102712
2711- private void validateDifferentScheduleFromExistingSchedules (VMInstanceVO vm , DateUtil .IntervalType intervalType , String schedule ) {
2713+ private void validateDifferentScheduleFromExistingSchedules (VMInstanceVO vm , DateUtil .IntervalType intervalType , String schedule , BackupScheduleVO scheduleBeingValidated ) {
27122714 List <BackupScheduleVO > existingBackupSchedules = backupScheduleDao .listByVMAndIntervalType (vm .getId (), intervalType );
2715+ if (scheduleBeingValidated != null ) {
2716+ existingBackupSchedules .removeIf (sched -> sched .getId () == scheduleBeingValidated .getId ());
2717+ }
27132718 if (existingBackupSchedules .stream ().anyMatch (existingSchedule -> existingSchedule .getSchedule ().equals (schedule ))) {
27142719 throw new CloudRuntimeException (String .format ("VM [%s] already has a [%s] schedule at [%s]. Cannot have multiple schedules of the same type at the same time." ,
27152720 vm .getUuid (), intervalType .name (), schedule ));
0 commit comments