diff --git a/database.go b/database.go index 0bde58478fb4231e9878dd707743fff802d227bb..00fb684e774fdd09bbd71bd6e2b11d42ece87d5e 100644 --- a/database.go +++ b/database.go @@ -1,6 +1,7 @@ package jobqueue import ( + "errors" "gorm.io/gorm" "sync" ) @@ -100,14 +101,23 @@ func (s *DBSaver) Start() error { memLogs := permJob.Logs permJob.Logs = nil - result := tx.FirstOrCreate(&permJob, map[string]interface{}{"id": permJob.GetID()}). - Assign(permJob) - - err := result.Error - - // Find or create JobMeta - if err != nil { - s.logError("Error while saving job", "error", err) + var existingJob GenericJob + result := tx.Where("id = ?", permJob.GetID()).First(&existingJob) + + if result.Error != nil { + if errors.Is(result.Error, gorm.ErrRecordNotFound) { + err := tx.Create(&permJob).Error + if err != nil { + return err + } + } else { + return result.Error + } + } else { + err := tx.Model(&existingJob).Updates(permJob).Error + if err != nil { + return err + } } if result.RowsAffected == 0 { diff --git a/persistence.go b/persistence.go index f5bb440668f7a77747dda1c0f3a5c07a0934699c..67b84a4b1cb9dfcc3307d01037b24e63e8c61219 100644 --- a/persistence.go +++ b/persistence.go @@ -265,8 +265,8 @@ func CreateJobAndSchedulerFromPersistence(jobImport JobPersistence, manager *Man } case "delay": - scheduler = &DelayScheduler{Delay: jobImport.Scheduler.Delay} + scheduler = &DelayScheduler{Delay: jobImport.Scheduler.Delay} case "event": scheduler = &EventScheduler{Event: EventName(jobImport.Scheduler.Event)}