From 524e973df9a926e6aaacfba9317f0de16b9d3281 Mon Sep 17 00:00:00 2001 From: Helber Belmiro Date: Thu, 19 Dec 2024 10:52:25 -0300 Subject: [PATCH 1/3] fix(backend): modelToCRDTrigger was not including periodic schedule correctly Signed-off-by: Helber Belmiro --- backend/src/apiserver/model/cron_schedule.go | 21 ++++++++++++++ backend/src/apiserver/model/job.go | 28 ------------------- .../src/apiserver/model/periodic_schedule.go | 21 ++++++++++++++ backend/src/apiserver/template/template.go | 4 +-- 4 files changed, 44 insertions(+), 30 deletions(-) create mode 100644 backend/src/apiserver/model/cron_schedule.go create mode 100644 backend/src/apiserver/model/periodic_schedule.go diff --git a/backend/src/apiserver/model/cron_schedule.go b/backend/src/apiserver/model/cron_schedule.go new file mode 100644 index 00000000000..0d7e6f81bad --- /dev/null +++ b/backend/src/apiserver/model/cron_schedule.go @@ -0,0 +1,21 @@ +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.CronScheduleEndTimeInSec == nil && + (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..56826cc0e99 --- /dev/null +++ b/backend/src/apiserver/model/periodic_schedule.go @@ -0,0 +1,21 @@ +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.PeriodicScheduleEndTimeInSec == nil && + (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 { From 0738ce1a444643715425852812730d4d71db8942 Mon Sep 17 00:00:00 2001 From: Helber Belmiro Date: Thu, 19 Dec 2024 12:24:04 -0300 Subject: [PATCH 2/3] Added copyright headers Signed-off-by: Helber Belmiro --- backend/src/apiserver/model/cron_schedule.go | 13 +++++++++++++ backend/src/apiserver/model/periodic_schedule.go | 13 +++++++++++++ 2 files changed, 26 insertions(+) diff --git a/backend/src/apiserver/model/cron_schedule.go b/backend/src/apiserver/model/cron_schedule.go index 0d7e6f81bad..5b5b583b544 100644 --- a/backend/src/apiserver/model/cron_schedule.go +++ b/backend/src/apiserver/model/cron_schedule.go @@ -1,3 +1,16 @@ +// 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 { diff --git a/backend/src/apiserver/model/periodic_schedule.go b/backend/src/apiserver/model/periodic_schedule.go index 56826cc0e99..0cfca85d336 100644 --- a/backend/src/apiserver/model/periodic_schedule.go +++ b/backend/src/apiserver/model/periodic_schedule.go @@ -1,3 +1,16 @@ +// 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 { From d45c6037472dccfb4602c05da8b9ce41482518fd Mon Sep 17 00:00:00 2001 From: Helber Belmiro Date: Thu, 19 Dec 2024 16:30:07 -0300 Subject: [PATCH 3/3] Fixed IsEmpty Signed-off-by: Helber Belmiro --- backend/src/apiserver/model/cron_schedule.go | 4 ++-- backend/src/apiserver/model/periodic_schedule.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/backend/src/apiserver/model/cron_schedule.go b/backend/src/apiserver/model/cron_schedule.go index 5b5b583b544..1ee535acaa3 100644 --- a/backend/src/apiserver/model/cron_schedule.go +++ b/backend/src/apiserver/model/cron_schedule.go @@ -28,7 +28,7 @@ type CronSchedule struct { } func (c CronSchedule) IsEmpty() bool { - return c.CronScheduleStartTimeInSec == nil && - c.CronScheduleEndTimeInSec == nil && + 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/periodic_schedule.go b/backend/src/apiserver/model/periodic_schedule.go index 0cfca85d336..af28ca61cff 100644 --- a/backend/src/apiserver/model/periodic_schedule.go +++ b/backend/src/apiserver/model/periodic_schedule.go @@ -28,7 +28,7 @@ type PeriodicSchedule struct { } func (p PeriodicSchedule) IsEmpty() bool { - return p.PeriodicScheduleStartTimeInSec == nil && - p.PeriodicScheduleEndTimeInSec == nil && + return (p.PeriodicScheduleStartTimeInSec == nil || *p.PeriodicScheduleStartTimeInSec == 0) && + (p.PeriodicScheduleEndTimeInSec == nil || *p.PeriodicScheduleEndTimeInSec == 0) && (p.IntervalSecond == nil || *p.IntervalSecond == 0) }