mirror of
https://github.com/kemko/nomad.git
synced 2026-01-10 20:35:42 +03:00
Add periodic index to job table
This commit is contained in:
@@ -118,6 +118,14 @@ func jobTableSchema() *memdb.TableSchema {
|
||||
Lowercase: true,
|
||||
},
|
||||
},
|
||||
"periodic": &memdb.IndexSchema{
|
||||
Name: "periodic",
|
||||
AllowMissing: false,
|
||||
Unique: false,
|
||||
Indexer: &memdb.FieldSetIndex{
|
||||
Field: "Periodic",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -371,6 +371,18 @@ func (s *StateStore) ChildJobs(id string) (memdb.ResultIterator, error) {
|
||||
return iter, nil
|
||||
}
|
||||
|
||||
// JobsByPeriodic returns an iterator over all the periodic or non-periodic jobs.
|
||||
func (s *StateStore) JobsByPeriodic(periodic bool) (memdb.ResultIterator, error) {
|
||||
txn := s.db.Txn(false)
|
||||
|
||||
// Scan all jobs whose parent is the passed id.
|
||||
iter, err := txn.Get("jobs", "periodic", periodic)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return iter, nil
|
||||
}
|
||||
|
||||
// JobsByScheduler returns an iterator over all the jobs with the specific
|
||||
// scheduler type.
|
||||
func (s *StateStore) JobsByScheduler(schedulerType string) (memdb.ResultIterator, error) {
|
||||
|
||||
@@ -446,6 +446,72 @@ func TestStateStore_ChildJobs(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestStateStore_JobsByPeriodic(t *testing.T) {
|
||||
state := testStateStore(t)
|
||||
var periodic, nonPeriodic []*structs.Job
|
||||
|
||||
for i := 0; i < 10; i++ {
|
||||
job := mock.Job()
|
||||
nonPeriodic = append(nonPeriodic, job)
|
||||
|
||||
err := state.UpsertJob(1000+uint64(i), job)
|
||||
if err != nil {
|
||||
t.Fatalf("err: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
for i := 0; i < 10; i++ {
|
||||
job := mock.PeriodicJob()
|
||||
periodic = append(periodic, job)
|
||||
|
||||
err := state.UpsertJob(2000+uint64(i), job)
|
||||
if err != nil {
|
||||
t.Fatalf("err: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
iter, err := state.JobsByPeriodic(true)
|
||||
if err != nil {
|
||||
t.Fatalf("err: %v", err)
|
||||
}
|
||||
|
||||
var outPeriodic []*structs.Job
|
||||
for {
|
||||
raw := iter.Next()
|
||||
if raw == nil {
|
||||
break
|
||||
}
|
||||
outPeriodic = append(outPeriodic, raw.(*structs.Job))
|
||||
}
|
||||
|
||||
iter, err = state.JobsByPeriodic(false)
|
||||
if err != nil {
|
||||
t.Fatalf("err: %v", err)
|
||||
}
|
||||
|
||||
var outNonPeriodic []*structs.Job
|
||||
for {
|
||||
raw := iter.Next()
|
||||
if raw == nil {
|
||||
break
|
||||
}
|
||||
outNonPeriodic = append(outNonPeriodic, raw.(*structs.Job))
|
||||
}
|
||||
|
||||
sort.Sort(JobIDSort(periodic))
|
||||
sort.Sort(JobIDSort(nonPeriodic))
|
||||
sort.Sort(JobIDSort(outPeriodic))
|
||||
sort.Sort(JobIDSort(outNonPeriodic))
|
||||
|
||||
if !reflect.DeepEqual(periodic, outPeriodic) {
|
||||
t.Fatalf("bad: %#v %#v", periodic, outPeriodic)
|
||||
}
|
||||
|
||||
if !reflect.DeepEqual(nonPeriodic, outNonPeriodic) {
|
||||
t.Fatalf("bad: %#v %#v", nonPeriodic, outNonPeriodic)
|
||||
}
|
||||
}
|
||||
|
||||
func TestStateStore_JobsByScheduler(t *testing.T) {
|
||||
state := testStateStore(t)
|
||||
var serviceJobs []*structs.Job
|
||||
|
||||
Reference in New Issue
Block a user