69 lines
1.5 KiB
Go
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(job.def.Key); 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(job.def.Key, string(value), nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return tx.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)
|
|
}
|