package managed_job import ( "encoding/json" "errors" "time" "github.com/dgraph-io/badger/v4" "github.com/tidwall/buntdb" ) // get state of job from local db func (job *ManagedJob) loadState() { err := job.db.View( func(tx *buntdb.Tx) error { if val, err := tx.Get(string(job.def.GetUID())); err != nil { return err } else { return json.Unmarshal([]byte(val), job.state) } }) 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(tx *buntdb.Tx) error { _, _, err := tx.Set(string(job.def.GetUID()), string(value), nil) return err }) } func (job *ManagedJob) setError(errMsg string) { if job.state == nil { job.state = &jobState{} } job.state.Error = &errMsg job.state.Status = JobStatusError job.updateState(*job.state) } func (job *ManagedJob) setSavepointLocation(savepointId string) { job.state.LastSavepointPath = &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) }