69 lines
1.5 KiB
Go

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.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)
}