Skip to content

Commit

Permalink
fix(backend): modelToCRDTrigger was not including periodic schedule c…
Browse files Browse the repository at this point in the history
…orrectly (#11475)

* fix(backend): modelToCRDTrigger was not including periodic schedule correctly

Signed-off-by: Helber Belmiro <[email protected]>

* Added copyright headers

Signed-off-by: Helber Belmiro <[email protected]>

* Fixed IsEmpty

Signed-off-by: Helber Belmiro <[email protected]>

---------

Signed-off-by: Helber Belmiro <[email protected]>
  • Loading branch information
hbelmiro authored Dec 20, 2024
1 parent 54b9a25 commit 97acacb
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 30 deletions.
34 changes: 34 additions & 0 deletions backend/src/apiserver/model/cron_schedule.go
Original file line number Diff line number Diff line change
@@ -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 == "")
}
28 changes: 0 additions & 28 deletions backend/src/apiserver/model/job.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand Down
34 changes: 34 additions & 0 deletions backend/src/apiserver/model/periodic_schedule.go
Original file line number Diff line number Diff line change
@@ -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)
}
4 changes: 2 additions & 2 deletions backend/src/apiserver/template/template.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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 {
Expand Down

0 comments on commit 97acacb

Please sign in to comment.