From cf64966dc2a89f2a292d4f902be2bb6351b5d76e Mon Sep 17 00:00:00 2001 From: Ryan Uber Date: Wed, 9 Sep 2015 18:39:24 -0700 Subject: [PATCH] api: support force-eval --- api/jobs.go | 10 ++++++++++ api/jobs_test.go | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/api/jobs.go b/api/jobs.go index 36b2898d5..6898b6278 100644 --- a/api/jobs.go +++ b/api/jobs.go @@ -82,6 +82,16 @@ func (j *Jobs) Delete(jobID string, q *WriteOptions) (*WriteMeta, error) { return wm, nil } +// ForceEvaluate is used to force-evaluate an existing job. +func (j *Jobs) ForceEvaluate(jobID string, q *WriteOptions) (string, *WriteMeta, error) { + var resp registerJobResponse + wm, err := j.client.write("/v1/job/"+jobID+"/evaluate", nil, &resp, q) + if err != nil { + return "", nil, err + } + return resp.EvalID, wm, nil +} + // Job is used to serialize a job. type Job struct { ID string diff --git a/api/jobs_test.go b/api/jobs_test.go index 5ff3e5166..8b9d1366c 100644 --- a/api/jobs_test.go +++ b/api/jobs_test.go @@ -179,6 +179,45 @@ func TestJobs_Delete(t *testing.T) { } } +func TestJobs_ForceEvaluate(t *testing.T) { + c, s := makeClient(t, nil, nil) + defer s.Stop() + jobs := c.Jobs() + + // Force-eval on a non-existent job fails + _, _, err := jobs.ForceEvaluate("job1", nil) + if err == nil || !strings.Contains(err.Error(), "not found") { + t.Fatalf("expected not found error, got: %#v", err) + } + + // Create a new job + _, wm, err := jobs.Register(testJob(), nil) + if err != nil { + t.Fatalf("err: %s", err) + } + assertWriteMeta(t, wm) + + // Try force-eval again + evalID, wm, err := jobs.ForceEvaluate("job1", nil) + if err != nil { + t.Fatalf("err: %s", err) + } + assertWriteMeta(t, wm) + + // Retrieve the evals and see if we get a matching one + evals, qm, err := jobs.Evaluations("job1", nil) + if err != nil { + t.Fatalf("err: %s", err) + } + assertQueryMeta(t, qm) + for _, eval := range evals { + if eval.ID == evalID { + return + } + } + t.Fatalf("evaluation %q missing", evalID) +} + func TestJobs_NewBatchJob(t *testing.T) { job := NewBatchJob("job1", "myjob", 5) expect := &Job{