package managed_job import ( "encoding/json" "errors" "time" "github.com/dgraph-io/badger/v4" ) // get state of job from local db func (job *ManagedJob) loadState() { err := job.db.View( func(tx *badger.Txn) error { if val, err := tx.Get([]byte(job.def.Key)); err != nil { return err } else if val != nil { val.Value(func(val []byte) error { job.state = &jobState{} return json.Unmarshal(val, job.state) }) } return nil }) if errors.Is(err, badger.ErrKeyNotFound) { err = nil } } // save state of job to local db func (job *ManagedJob) updateState(state jobState) { job.state = &state value, _ := json.Marshal(job.state) job.db.Update(func(txn *badger.Txn) error { err := txn.Set([]byte(job.def.Key), value) if err != nil { return err } return txn.Commit() }) } func (job *ManagedJob) setError(errMsg string) { job.state.Error = &errMsg job.state.Status = JobStatusError job.updateState(*job.state) } func (job *ManagedJob) setSavepointLocation(savepointId string) { job.state.LastSavepointLocation = &savepointId job.state.SavepointTriggerId = nil n := time.Now() job.state.LastSavepointDate = &n job.updateState(*job.state) } func (job *ManagedJob) setSavepointTriggerId(savepointReqId string) { job.state.SavepointTriggerId = &savepointReqId job.updateState(*job.state) } func (job *ManagedJob) removeSavepointTriggerId() { job.state.SavepointTriggerId = nil job.updateState(*job.state) } func (job *ManagedJob) setStatus(status JobStatus) { job.state.Status = status job.updateState(*job.state) }