package managed_job import ( "errors" "time" "gitea.com/logicamp/lc" "go.uber.org/zap" ) func (job *ManagedJob) startCycle() { ticker := time.NewTicker(5 * time.Second) quit := make(chan struct{}) // load job state from db job.loadState() go func() { for { select { case <-ticker.C: job.cycle() case <-quit: ticker.Stop() return } } }() } func (job *ManagedJob) cycle() { lc.Logger.Debug("[managed-job] [new] check cycle", zap.String("jobKey", string(job.def.UID))) // Init job if job.state == nil { err := job.upload() if err != nil { job.setError("[upload-error] " + err.Error()) return } err = job.run() if err != nil { job.setError("[run-error] " + err.Error()) return } return } job.crd.SetJobStatus(job.def.UID, string(job.state.Status)) // Check for set running or error state if job.state.Status == JobStatusCreating || job.state.Status == JobStatusFailing { err := job.checkStatus() if errors.Is(err, ErrNoJobId) { job.state = nil } return } if job.state.Status == JobStatusRunning { err := job.checkStatus() if errors.Is(err, ErrNoJobId) { job.state = nil } lc.Logger.Debug("savepoint interval", zap.Any("savepoint duration", job.def.Spec.SavepointInterval)) if (job.def.Spec.SavepointInterval.Duration != 0) && ((job.state.LastSavepointDate == nil) || time.Now().Add(-job.def.Spec.SavepointInterval.Duration).After(*job.state.LastSavepointDate)) { if job.state.SavepointTriggerId == nil { job.createSavepoint() } else { job.trackSavepoint() } } return } if job.state.Status == JobStatusFailed { job.restore() return } lc.Logger.Warn("[managed-job] [cycle]", zap.String("unhanded job status", string(job.state.Status))) }