diff --git a/backend/src/apiserver/model/cron_schedule.go b/backend/src/apiserver/model/cron_schedule.go new file mode 100644 index 00000000000..1ee535acaa3 --- /dev/null +++ b/backend/src/apiserver/model/cron_schedule.go @@ -0,0 +1,34 @@ +// Copyright 2024 The Kubeflow Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package model + +type CronSchedule struct { + // Time at which scheduling starts. + // If no start time is specified, the StartTime is the creation time of the schedule. + CronScheduleStartTimeInSec *int64 `gorm:"column:CronScheduleStartTimeInSec;"` + + // Time at which scheduling ends. + // If no end time is specified, the EndTime is the end of time. + CronScheduleEndTimeInSec *int64 `gorm:"column:CronScheduleEndTimeInSec;"` + + // Cron string describing when a workflow should be created within the + // time interval defined by StartTime and EndTime. + Cron *string `gorm:"column:Schedule;"` +} + +func (c CronSchedule) IsEmpty() bool { + return (c.CronScheduleStartTimeInSec == nil || *c.CronScheduleStartTimeInSec == 0) && + (c.CronScheduleEndTimeInSec == nil || *c.CronScheduleEndTimeInSec == 0) && + (c.Cron == nil || *c.Cron == "") +} diff --git a/backend/src/apiserver/model/job.go b/backend/src/apiserver/model/job.go index c47576cbb80..3871e050b7e 100644 --- a/backend/src/apiserver/model/job.go +++ b/backend/src/apiserver/model/job.go @@ -189,34 +189,6 @@ type Trigger struct { PeriodicSchedule } -type CronSchedule struct { - // Time at which scheduling starts. - // If no start time is specified, the StartTime is the creation time of the schedule. - CronScheduleStartTimeInSec *int64 `gorm:"column:CronScheduleStartTimeInSec;"` - - // Time at which scheduling ends. - // If no end time is specified, the EndTime is the end of time. - CronScheduleEndTimeInSec *int64 `gorm:"column:CronScheduleEndTimeInSec;"` - - // Cron string describing when a workflow should be created within the - // time interval defined by StartTime and EndTime. - Cron *string `gorm:"column:Schedule;"` -} - -type PeriodicSchedule struct { - // Time at which scheduling starts. - // If no start time is specified, the StartTime is the creation time of the schedule. - PeriodicScheduleStartTimeInSec *int64 `gorm:"column:PeriodicScheduleStartTimeInSec;"` - - // Time at which scheduling ends. - // If no end time is specified, the EndTime is the end of time. - PeriodicScheduleEndTimeInSec *int64 `gorm:"column:PeriodicScheduleEndTimeInSec;"` - - // Interval describing when a workflow should be created within the - // time interval defined by StartTime and EndTime. - IntervalSecond *int64 `gorm:"column:IntervalSecond;"` -} - func (j Job) GetValueOfPrimaryKey() string { return fmt.Sprint(j.UUID) } diff --git a/backend/src/apiserver/model/periodic_schedule.go b/backend/src/apiserver/model/periodic_schedule.go new file mode 100644 index 00000000000..af28ca61cff --- /dev/null +++ b/backend/src/apiserver/model/periodic_schedule.go @@ -0,0 +1,34 @@ +// Copyright 2024 The Kubeflow Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package model + +type PeriodicSchedule struct { + // Time at which scheduling starts. + // If no start time is specified, the StartTime is the creation time of the schedule. + PeriodicScheduleStartTimeInSec *int64 `gorm:"column:PeriodicScheduleStartTimeInSec;"` + + // Time at which scheduling ends. + // If no end time is specified, the EndTime is the end of time. + PeriodicScheduleEndTimeInSec *int64 `gorm:"column:PeriodicScheduleEndTimeInSec;"` + + // Interval describing when a workflow should be created within the + // time interval defined by StartTime and EndTime. + IntervalSecond *int64 `gorm:"column:IntervalSecond;"` +} + +func (p PeriodicSchedule) IsEmpty() bool { + return (p.PeriodicScheduleStartTimeInSec == nil || *p.PeriodicScheduleStartTimeInSec == 0) && + (p.PeriodicScheduleEndTimeInSec == nil || *p.PeriodicScheduleEndTimeInSec == 0) && + (p.IntervalSecond == nil || *p.IntervalSecond == 0) +} diff --git a/backend/src/apiserver/template/template.go b/backend/src/apiserver/template/template.go index 611b05b3f3f..738838c1651 100644 --- a/backend/src/apiserver/template/template.go +++ b/backend/src/apiserver/template/template.go @@ -232,7 +232,7 @@ func modelToParametersMap(modelParameters string) (map[string]string, error) { func modelToCRDTrigger(modelTrigger model.Trigger) (scheduledworkflow.Trigger, error) { crdTrigger := scheduledworkflow.Trigger{} // CronSchedule and PeriodicSchedule can have at most one being non-empty - if modelTrigger.CronSchedule != (model.CronSchedule{}) { + if !modelTrigger.CronSchedule.IsEmpty() { // Check if CronSchedule is non-empty crdCronSchedule := scheduledworkflow.CronSchedule{} if modelTrigger.Cron != nil { @@ -247,7 +247,7 @@ func modelToCRDTrigger(modelTrigger model.Trigger) (scheduledworkflow.Trigger, e crdCronSchedule.EndTime = &endTime } crdTrigger.CronSchedule = &crdCronSchedule - } else if modelTrigger.PeriodicSchedule != (model.PeriodicSchedule{}) { + } else if !modelTrigger.PeriodicSchedule.IsEmpty() { // Check if PeriodicSchedule is non-empty crdPeriodicSchedule := scheduledworkflow.PeriodicSchedule{} if modelTrigger.IntervalSecond != nil {