diff --git a/authorizer/authorize_find.go b/authorizer/authorize_find.go index 70b1980eff1..63d430f14f4 100644 --- a/authorizer/authorize_find.go +++ b/authorizer/authorize_find.go @@ -2,6 +2,7 @@ package authorizer import ( "context" + "github.com/influxdata/influxdb/v2/task" "github.com/influxdata/influxdb/v2/kit/platform/errors" @@ -129,7 +130,7 @@ func AuthorizeFindSources(ctx context.Context, rs []*influxdb.Source) ([]*influx } // AuthorizeFindTasks takes the given items and returns only the ones that the user is authorized to read. -func AuthorizeFindTasks(ctx context.Context, rs []*influxdb.Task) ([]*influxdb.Task, int, error) { +func AuthorizeFindTasks(ctx context.Context, rs []*task.Task) ([]*task.Task, int, error) { // This filters without allocating // https://github.com/golang/go/wiki/SliceTricks#filtering-without-allocating rrs := rs[:0] diff --git a/authorizer/check.go b/authorizer/check.go index e68675998f4..657f6b0110e 100644 --- a/authorizer/check.go +++ b/authorizer/check.go @@ -2,6 +2,7 @@ package authorizer import ( "context" + "github.com/influxdata/influxdb/v2/task" "github.com/influxdata/influxdb/v2/kit/platform" @@ -16,7 +17,7 @@ type CheckService struct { s influxdb.CheckService influxdb.UserResourceMappingService influxdb.OrganizationService - influxdb.TaskService + task.TaskService } // NewCheckService constructs an instance of an authorizing check service. diff --git a/authorizer/task.go b/authorizer/task.go index 685cf45f610..61bad510ba8 100644 --- a/authorizer/task.go +++ b/authorizer/task.go @@ -3,6 +3,7 @@ package authorizer import ( "context" "fmt" + "github.com/influxdata/influxdb/v2/task" "github.com/influxdata/influxdb/v2/kit/platform" "github.com/influxdata/influxdb/v2/kit/platform/errors" @@ -35,13 +36,13 @@ var ( ) type taskServiceValidator struct { - influxdb.TaskService + task.TaskService log *zap.Logger } // TaskService wraps ts and checks appropriate permissions before calling requested methods on ts. // Authorization failures are logged to the logger. -func NewTaskService(log *zap.Logger, ts influxdb.TaskService) influxdb.TaskService { +func NewTaskService(log *zap.Logger, ts task.TaskService) task.TaskService { return &taskServiceValidator{ TaskService: ts, log: log, @@ -61,7 +62,7 @@ func (ts *taskServiceValidator) processPermissionError(a influxdb.Authorizer, p return err } -func (ts *taskServiceValidator) FindTaskByID(ctx context.Context, id platform.ID) (*influxdb.Task, error) { +func (ts *taskServiceValidator) FindTaskByID(ctx context.Context, id platform.ID) (*task.Task, error) { span, ctx := tracing.StartSpanFromContext(ctx) defer span.Finish() @@ -79,7 +80,7 @@ func (ts *taskServiceValidator) FindTaskByID(ctx context.Context, id platform.ID return task, nil } -func (ts *taskServiceValidator) FindTasks(ctx context.Context, filter influxdb.TaskFilter) ([]*influxdb.Task, int, error) { +func (ts *taskServiceValidator) FindTasks(ctx context.Context, filter task.TaskFilter) ([]*task.Task, int, error) { span, ctx := tracing.StartSpanFromContext(ctx) defer span.Finish() // Get the tasks in the organization, without authentication. @@ -90,12 +91,12 @@ func (ts *taskServiceValidator) FindTasks(ctx context.Context, filter influxdb.T return AuthorizeFindTasks(ctx, unauthenticatedTasks) } -func (ts *taskServiceValidator) CreateTask(ctx context.Context, t influxdb.TaskCreate) (*influxdb.Task, error) { +func (ts *taskServiceValidator) CreateTask(ctx context.Context, t task.TaskCreate) (*task.Task, error) { span, ctx := tracing.StartSpanFromContext(ctx) defer span.Finish() if !t.OwnerID.Valid() { - return nil, influxdb.ErrInvalidOwnerID + return nil, task.ErrInvalidOwnerID } a, p, err := AuthorizeCreate(ctx, influxdb.TasksResourceType, t.OrganizationID) @@ -106,7 +107,7 @@ func (ts *taskServiceValidator) CreateTask(ctx context.Context, t influxdb.TaskC return ts.TaskService.CreateTask(ctx, t) } -func (ts *taskServiceValidator) UpdateTask(ctx context.Context, id platform.ID, upd influxdb.TaskUpdate) (*influxdb.Task, error) { +func (ts *taskServiceValidator) UpdateTask(ctx context.Context, id platform.ID, upd task.TaskUpdate) (*task.Task, error) { span, ctx := tracing.StartSpanFromContext(ctx) defer span.Finish() @@ -142,7 +143,7 @@ func (ts *taskServiceValidator) DeleteTask(ctx context.Context, id platform.ID) return ts.TaskService.DeleteTask(ctx, id) } -func (ts *taskServiceValidator) FindLogs(ctx context.Context, filter influxdb.LogFilter) ([]*influxdb.Log, int, error) { +func (ts *taskServiceValidator) FindLogs(ctx context.Context, filter task.LogFilter) ([]*task.Log, int, error) { span, ctx := tracing.StartSpanFromContext(ctx) defer span.Finish() @@ -155,7 +156,7 @@ func (ts *taskServiceValidator) FindLogs(ctx context.Context, filter influxdb.Lo return ts.TaskService.FindLogs(ctx, filter) } -func (ts *taskServiceValidator) FindRuns(ctx context.Context, filter influxdb.RunFilter) ([]*influxdb.Run, int, error) { +func (ts *taskServiceValidator) FindRuns(ctx context.Context, filter task.RunFilter) ([]*task.Run, int, error) { span, ctx := tracing.StartSpanFromContext(ctx) defer span.Finish() @@ -174,7 +175,7 @@ func (ts *taskServiceValidator) FindRuns(ctx context.Context, filter influxdb.Ru return ts.TaskService.FindRuns(ctx, filter) } -func (ts *taskServiceValidator) FindRunByID(ctx context.Context, taskID, runID platform.ID) (*influxdb.Run, error) { +func (ts *taskServiceValidator) FindRunByID(ctx context.Context, taskID, runID platform.ID) (*task.Run, error) { span, ctx := tracing.StartSpanFromContext(ctx) defer span.Finish() @@ -210,7 +211,7 @@ func (ts *taskServiceValidator) CancelRun(ctx context.Context, taskID, runID pla return ts.TaskService.CancelRun(ctx, taskID, runID) } -func (ts *taskServiceValidator) RetryRun(ctx context.Context, taskID, runID platform.ID) (*influxdb.Run, error) { +func (ts *taskServiceValidator) RetryRun(ctx context.Context, taskID, runID platform.ID) (*task.Run, error) { span, ctx := tracing.StartSpanFromContext(ctx) defer span.Finish() @@ -220,7 +221,7 @@ func (ts *taskServiceValidator) RetryRun(ctx context.Context, taskID, runID plat return nil, err } - if task.Status != string(influxdb.TaskActive) { + if task.Status != string(task.TaskActive) { return nil, ErrInactiveTask } @@ -232,7 +233,7 @@ func (ts *taskServiceValidator) RetryRun(ctx context.Context, taskID, runID plat return ts.TaskService.RetryRun(ctx, taskID, runID) } -func (ts *taskServiceValidator) ForceRun(ctx context.Context, taskID platform.ID, scheduledFor int64) (*influxdb.Run, error) { +func (ts *taskServiceValidator) ForceRun(ctx context.Context, taskID platform.ID, scheduledFor int64) (*task.Run, error) { span, ctx := tracing.StartSpanFromContext(ctx) defer span.Finish() @@ -242,7 +243,7 @@ func (ts *taskServiceValidator) ForceRun(ctx context.Context, taskID platform.ID return nil, err } - if task.Status != string(influxdb.TaskActive) { + if task.Status != string(task.TaskActive) { return nil, ErrInactiveTask } diff --git a/authorizer/task_test.go b/authorizer/task_test.go index c0b7721f092..9adc051b2aa 100644 --- a/authorizer/task_test.go +++ b/authorizer/task_test.go @@ -3,6 +3,7 @@ package authorizer_test import ( "context" "github.com/influxdata/influxdb/v2/kit/platform" + task2 "github.com/influxdata/influxdb/v2/task" "testing" "time" @@ -39,7 +40,7 @@ func TestOnboardingValidation(t *testing.T) { ctx := pctx.SetAuthorizer(context.Background(), r.Auth) - _, err = ts.CreateTask(ctx, influxdb.TaskCreate{ + _, err = ts.CreateTask(ctx, task2.TaskCreate{ OrganizationID: r.Org.ID, OwnerID: r.Auth.GetUserID(), Flux: `option task = { @@ -53,12 +54,12 @@ from(bucket:"holder") |> range(start:-5m) |> to(bucket:"holder", org:"thing")`, } } -func mockTaskService(orgID, taskID, runID platform.ID) influxdb.TaskService { - task := influxdb.Task{ +func mockTaskService(orgID, taskID, runID platform.ID) task2.TaskService { + task := task2.Task{ ID: taskID, OrganizationID: orgID, Name: "cows", - Status: string(influxdb.TaskActive), + Status: string(task2.TaskActive), Flux: `option task = { name: "my_task", every: 1s, @@ -67,51 +68,51 @@ from(bucket:"holder") |> range(start:-5m) |> to(bucket:"holder", org:"thing")`, Every: "1s", } - log := influxdb.Log{Message: "howdy partner"} + log := task2.Log{Message: "howdy partner"} - run := influxdb.Run{ + run := task2.Run{ ID: runID, TaskID: taskID, Status: "completed", ScheduledFor: time.Now().UTC(), StartedAt: time.Now().UTC().Add(time.Second * 3), FinishedAt: time.Now().UTC().Add(time.Second * 10), - Log: []influxdb.Log{log}, + Log: []task2.Log{log}, } return &mock.TaskService{ - FindTaskByIDFn: func(context.Context, platform.ID) (*influxdb.Task, error) { + FindTaskByIDFn: func(context.Context, platform.ID) (*task2.Task, error) { return &task, nil }, - FindTasksFn: func(context.Context, influxdb.TaskFilter) ([]*influxdb.Task, int, error) { - return []*influxdb.Task{&task}, 1, nil + FindTasksFn: func(context.Context, task2.TaskFilter) ([]*task2.Task, int, error) { + return []*task2.Task{&task}, 1, nil }, - CreateTaskFn: func(_ context.Context, tc influxdb.TaskCreate) (*influxdb.Task, error) { + CreateTaskFn: func(_ context.Context, tc task2.TaskCreate) (*task2.Task, error) { taskCopy := task return &taskCopy, nil }, - UpdateTaskFn: func(context.Context, platform.ID, influxdb.TaskUpdate) (*influxdb.Task, error) { + UpdateTaskFn: func(context.Context, platform.ID, task2.TaskUpdate) (*task2.Task, error) { return &task, nil }, DeleteTaskFn: func(context.Context, platform.ID) error { return nil }, - FindLogsFn: func(context.Context, influxdb.LogFilter) ([]*influxdb.Log, int, error) { - return []*influxdb.Log{&log}, 1, nil + FindLogsFn: func(context.Context, task2.LogFilter) ([]*task2.Log, int, error) { + return []*task2.Log{&log}, 1, nil }, - FindRunsFn: func(context.Context, influxdb.RunFilter) ([]*influxdb.Run, int, error) { - return []*influxdb.Run{&run}, 1, nil + FindRunsFn: func(context.Context, task2.RunFilter) ([]*task2.Run, int, error) { + return []*task2.Run{&run}, 1, nil }, - FindRunByIDFn: func(context.Context, platform.ID, platform.ID) (*influxdb.Run, error) { + FindRunByIDFn: func(context.Context, platform.ID, platform.ID) (*task2.Run, error) { return &run, nil }, CancelRunFn: func(context.Context, platform.ID, platform.ID) error { return nil }, - RetryRunFn: func(context.Context, platform.ID, platform.ID) (*influxdb.Run, error) { + RetryRunFn: func(context.Context, platform.ID, platform.ID) (*task2.Run, error) { return &run, nil }, - ForceRunFn: func(context.Context, platform.ID, int64) (*influxdb.Run, error) { + ForceRunFn: func(context.Context, platform.ID, int64) (*task2.Run, error) { return &run, nil }, } @@ -196,13 +197,13 @@ func TestValidations(t *testing.T) { tests := []struct { name string - check func(context.Context, influxdb.TaskService) error + check func(context.Context, task2.TaskService) error auth *influxdb.Authorization }{ { name: "create failure", - check: func(ctx context.Context, svc influxdb.TaskService) error { - _, err := svc.CreateTask(ctx, influxdb.TaskCreate{ + check: func(ctx context.Context, svc task2.TaskService) error { + _, err := svc.CreateTask(ctx, task2.TaskCreate{ OrganizationID: r.Org.ID, Flux: `option task = { name: "my_task", @@ -220,8 +221,8 @@ from(bucket:"holder") |> range(start:-5m) |> to(bucket:"holder", org:"thing")`, { name: "create success", auth: r.Auth, - check: func(ctx context.Context, svc influxdb.TaskService) error { - _, err := svc.CreateTask(ctx, influxdb.TaskCreate{ + check: func(ctx context.Context, svc task2.TaskService) error { + _, err := svc.CreateTask(ctx, task2.TaskCreate{ OrganizationID: r.Org.ID, OwnerID: r.Auth.GetUserID(), Flux: `option task = { @@ -236,7 +237,7 @@ from(bucket:"holder") |> range(start:-5m) |> to(bucket:"holder", org:"thing")`, { name: "FindTaskByID missing auth", auth: &influxdb.Authorization{Permissions: []influxdb.Permission{}}, - check: func(ctx context.Context, svc influxdb.TaskService) error { + check: func(ctx context.Context, svc task2.TaskService) error { _, err := svc.FindTaskByID(ctx, taskID) if err == nil { return errors.New("returned without error without permission") @@ -247,7 +248,7 @@ from(bucket:"holder") |> range(start:-5m) |> to(bucket:"holder", org:"thing")`, { name: "FindTaskByID with org auth", auth: &influxdb.Authorization{Status: "active", Permissions: orgReadAllTaskPermissions}, - check: func(ctx context.Context, svc influxdb.TaskService) error { + check: func(ctx context.Context, svc task2.TaskService) error { _, err := svc.FindTaskByID(ctx, taskID) return err }, @@ -255,7 +256,7 @@ from(bucket:"holder") |> range(start:-5m) |> to(bucket:"holder", org:"thing")`, { name: "FindTaskByID with task auth", auth: &influxdb.Authorization{Status: "active", Permissions: orgReadTaskPermissions}, - check: func(ctx context.Context, svc influxdb.TaskService) error { + check: func(ctx context.Context, svc task2.TaskService) error { _, err := svc.FindTaskByID(ctx, taskID) return err }, @@ -263,8 +264,8 @@ from(bucket:"holder") |> range(start:-5m) |> to(bucket:"holder", org:"thing")`, { name: "FindTasks with bad auth", auth: &influxdb.Authorization{Status: "active", Permissions: wrongOrgReadAllTaskPermissions}, - check: func(ctx context.Context, svc influxdb.TaskService) error { - ts, _, err := svc.FindTasks(ctx, influxdb.TaskFilter{ + check: func(ctx context.Context, svc task2.TaskService) error { + ts, _, err := svc.FindTasks(ctx, task2.TaskFilter{ OrganizationID: &orgID, }) if err == nil && len(ts) > 0 { @@ -276,8 +277,8 @@ from(bucket:"holder") |> range(start:-5m) |> to(bucket:"holder", org:"thing")`, { name: "FindTasks with org auth", auth: &influxdb.Authorization{Status: "active", Permissions: orgReadAllTaskPermissions}, - check: func(ctx context.Context, svc influxdb.TaskService) error { - _, _, err := svc.FindTasks(ctx, influxdb.TaskFilter{ + check: func(ctx context.Context, svc task2.TaskService) error { + _, _, err := svc.FindTasks(ctx, task2.TaskFilter{ OrganizationID: &orgID, }) return err @@ -286,8 +287,8 @@ from(bucket:"holder") |> range(start:-5m) |> to(bucket:"holder", org:"thing")`, { name: "FindTasks with task auth", auth: &influxdb.Authorization{Status: "active", Permissions: orgReadTaskPermissions}, - check: func(ctx context.Context, svc influxdb.TaskService) error { - _, _, err := svc.FindTasks(ctx, influxdb.TaskFilter{ + check: func(ctx context.Context, svc task2.TaskService) error { + _, _, err := svc.FindTasks(ctx, task2.TaskFilter{ OrganizationID: &orgID, }) return err @@ -296,21 +297,21 @@ from(bucket:"holder") |> range(start:-5m) |> to(bucket:"holder", org:"thing")`, { name: "FindTasks without org filter", auth: &influxdb.Authorization{Status: "active", Permissions: orgReadAllTaskPermissions}, - check: func(ctx context.Context, svc influxdb.TaskService) error { - _, _, err := svc.FindTasks(ctx, influxdb.TaskFilter{}) + check: func(ctx context.Context, svc task2.TaskService) error { + _, _, err := svc.FindTasks(ctx, task2.TaskFilter{}) return err }, }, { name: "UpdateTask with readonly auth", auth: &influxdb.Authorization{Status: "active", Permissions: orgReadAllTaskPermissions}, - check: func(ctx context.Context, svc influxdb.TaskService) error { + check: func(ctx context.Context, svc task2.TaskService) error { flux := `option task = { name: "my_task", every: 1s, } from(bucket:"holder") |> range(start:-5m) |> to(bucket:"holder", org:"thing")` - _, err := svc.UpdateTask(ctx, taskID, influxdb.TaskUpdate{ + _, err := svc.UpdateTask(ctx, taskID, task2.TaskUpdate{ Flux: &flux, }) if err == nil { @@ -322,13 +323,13 @@ from(bucket:"holder") |> range(start:-5m) |> to(bucket:"holder", org:"thing")` { name: "UpdateTask with org auth", auth: &influxdb.Authorization{Status: "active", Permissions: orgWriteAllTaskBucketPermissions}, - check: func(ctx context.Context, svc influxdb.TaskService) error { + check: func(ctx context.Context, svc task2.TaskService) error { flux := `option task = { name: "my_task", every: 1s, } from(bucket:"holder") |> range(start:-5m) |> to(bucket:"holder", org:"thing")` - _, err := svc.UpdateTask(ctx, taskID, influxdb.TaskUpdate{ + _, err := svc.UpdateTask(ctx, taskID, task2.TaskUpdate{ Flux: &flux, }) return err @@ -337,13 +338,13 @@ from(bucket:"holder") |> range(start:-5m) |> to(bucket:"holder", org:"thing")` { name: "UpdateTask with task auth", auth: &influxdb.Authorization{Status: "active", Permissions: orgWriteTaskBucketPermissions}, - check: func(ctx context.Context, svc influxdb.TaskService) error { + check: func(ctx context.Context, svc task2.TaskService) error { flux := `option task = { name: "my_task", every: 1s, } from(bucket:"holder") |> range(start:-5m) |> to(bucket:"holder", org:"thing")` - _, err := svc.UpdateTask(ctx, taskID, influxdb.TaskUpdate{ + _, err := svc.UpdateTask(ctx, taskID, task2.TaskUpdate{ Flux: &flux, }) return err @@ -352,7 +353,7 @@ from(bucket:"holder") |> range(start:-5m) |> to(bucket:"holder", org:"thing")` { name: "DeleteTask missing auth", auth: &influxdb.Authorization{Permissions: []influxdb.Permission{}}, - check: func(ctx context.Context, svc influxdb.TaskService) error { + check: func(ctx context.Context, svc task2.TaskService) error { err := svc.DeleteTask(ctx, taskID) if err == nil { return errors.New("returned without error without permission") @@ -363,7 +364,7 @@ from(bucket:"holder") |> range(start:-5m) |> to(bucket:"holder", org:"thing")` { name: "DeleteTask readonly auth", auth: &influxdb.Authorization{Permissions: orgReadAllTaskPermissions}, - check: func(ctx context.Context, svc influxdb.TaskService) error { + check: func(ctx context.Context, svc task2.TaskService) error { err := svc.DeleteTask(ctx, taskID) if err == nil { return errors.New("returned without error without permission") @@ -374,7 +375,7 @@ from(bucket:"holder") |> range(start:-5m) |> to(bucket:"holder", org:"thing")` { name: "DeleteTask with org auth", auth: &influxdb.Authorization{Status: "active", Permissions: orgWriteAllTaskPermissions}, - check: func(ctx context.Context, svc influxdb.TaskService) error { + check: func(ctx context.Context, svc task2.TaskService) error { err := svc.DeleteTask(ctx, taskID) return err }, @@ -382,7 +383,7 @@ from(bucket:"holder") |> range(start:-5m) |> to(bucket:"holder", org:"thing")` { name: "DeleteTask with task auth", auth: &influxdb.Authorization{Status: "active", Permissions: orgWriteTaskPermissions}, - check: func(ctx context.Context, svc influxdb.TaskService) error { + check: func(ctx context.Context, svc task2.TaskService) error { err := svc.DeleteTask(ctx, taskID) return err }, @@ -390,8 +391,8 @@ from(bucket:"holder") |> range(start:-5m) |> to(bucket:"holder", org:"thing")` { name: "FindLogs with bad auth", auth: &influxdb.Authorization{Status: "active", Permissions: wrongOrgReadAllTaskPermissions}, - check: func(ctx context.Context, svc influxdb.TaskService) error { - _, _, err := svc.FindLogs(ctx, influxdb.LogFilter{ + check: func(ctx context.Context, svc task2.TaskService) error { + _, _, err := svc.FindLogs(ctx, task2.LogFilter{ Task: taskID, }) if err == nil { @@ -403,8 +404,8 @@ from(bucket:"holder") |> range(start:-5m) |> to(bucket:"holder", org:"thing")` { name: "FindLogs with org auth", auth: &influxdb.Authorization{Status: "active", Permissions: orgReadAllTaskPermissions}, - check: func(ctx context.Context, svc influxdb.TaskService) error { - _, _, err := svc.FindLogs(ctx, influxdb.LogFilter{ + check: func(ctx context.Context, svc task2.TaskService) error { + _, _, err := svc.FindLogs(ctx, task2.LogFilter{ Task: taskID, }) return err @@ -413,8 +414,8 @@ from(bucket:"holder") |> range(start:-5m) |> to(bucket:"holder", org:"thing")` { name: "FindLogs with task auth", auth: &influxdb.Authorization{Status: "active", Permissions: orgReadTaskPermissions}, - check: func(ctx context.Context, svc influxdb.TaskService) error { - _, _, err := svc.FindLogs(ctx, influxdb.LogFilter{ + check: func(ctx context.Context, svc task2.TaskService) error { + _, _, err := svc.FindLogs(ctx, task2.LogFilter{ Task: taskID, }) return err @@ -423,8 +424,8 @@ from(bucket:"holder") |> range(start:-5m) |> to(bucket:"holder", org:"thing")` { name: "FindRuns with bad auth", auth: &influxdb.Authorization{Status: "active", Permissions: wrongOrgReadAllTaskPermissions}, - check: func(ctx context.Context, svc influxdb.TaskService) error { - _, _, err := svc.FindRuns(ctx, influxdb.RunFilter{ + check: func(ctx context.Context, svc task2.TaskService) error { + _, _, err := svc.FindRuns(ctx, task2.RunFilter{ Task: taskID, }) if err == nil { @@ -436,8 +437,8 @@ from(bucket:"holder") |> range(start:-5m) |> to(bucket:"holder", org:"thing")` { name: "FindRuns with org auth", auth: &influxdb.Authorization{Status: "active", Permissions: orgReadAllTaskPermissions}, - check: func(ctx context.Context, svc influxdb.TaskService) error { - _, _, err := svc.FindRuns(ctx, influxdb.RunFilter{ + check: func(ctx context.Context, svc task2.TaskService) error { + _, _, err := svc.FindRuns(ctx, task2.RunFilter{ Task: taskID, }) return err @@ -446,8 +447,8 @@ from(bucket:"holder") |> range(start:-5m) |> to(bucket:"holder", org:"thing")` { name: "FindRuns with task auth", auth: &influxdb.Authorization{Status: "active", Permissions: orgReadTaskPermissions}, - check: func(ctx context.Context, svc influxdb.TaskService) error { - _, _, err := svc.FindRuns(ctx, influxdb.RunFilter{ + check: func(ctx context.Context, svc task2.TaskService) error { + _, _, err := svc.FindRuns(ctx, task2.RunFilter{ Task: taskID, }) return err @@ -456,7 +457,7 @@ from(bucket:"holder") |> range(start:-5m) |> to(bucket:"holder", org:"thing")` { name: "FindRunByID missing auth", auth: &influxdb.Authorization{Permissions: []influxdb.Permission{}}, - check: func(ctx context.Context, svc influxdb.TaskService) error { + check: func(ctx context.Context, svc task2.TaskService) error { _, err := svc.FindRunByID(ctx, taskID, 10) if err == nil { return errors.New("returned without error without permission") @@ -467,7 +468,7 @@ from(bucket:"holder") |> range(start:-5m) |> to(bucket:"holder", org:"thing")` { name: "FindRunByID with org auth", auth: &influxdb.Authorization{Status: "active", Permissions: orgReadAllTaskPermissions}, - check: func(ctx context.Context, svc influxdb.TaskService) error { + check: func(ctx context.Context, svc task2.TaskService) error { _, err := svc.FindRunByID(ctx, taskID, 10) return err }, @@ -475,7 +476,7 @@ from(bucket:"holder") |> range(start:-5m) |> to(bucket:"holder", org:"thing")` { name: "FindRunByID with task auth", auth: &influxdb.Authorization{Status: "active", Permissions: orgReadTaskPermissions}, - check: func(ctx context.Context, svc influxdb.TaskService) error { + check: func(ctx context.Context, svc task2.TaskService) error { _, err := svc.FindRunByID(ctx, taskID, 10) return err }, @@ -483,7 +484,7 @@ from(bucket:"holder") |> range(start:-5m) |> to(bucket:"holder", org:"thing")` { name: "CancelRun with bad auth", auth: &influxdb.Authorization{Status: "active", Permissions: wrongOrgReadAllTaskPermissions}, - check: func(ctx context.Context, svc influxdb.TaskService) error { + check: func(ctx context.Context, svc task2.TaskService) error { err := svc.CancelRun(ctx, taskID, 10) if err == nil { return errors.New("returned no error with a invalid auth") @@ -494,7 +495,7 @@ from(bucket:"holder") |> range(start:-5m) |> to(bucket:"holder", org:"thing")` { name: "CancelRun with org auth", auth: &influxdb.Authorization{Status: "active", Permissions: orgWriteAllTaskPermissions}, - check: func(ctx context.Context, svc influxdb.TaskService) error { + check: func(ctx context.Context, svc task2.TaskService) error { err := svc.CancelRun(ctx, taskID, 10) return err }, @@ -502,7 +503,7 @@ from(bucket:"holder") |> range(start:-5m) |> to(bucket:"holder", org:"thing")` { name: "CancelRun with task auth", auth: &influxdb.Authorization{Status: "active", Permissions: orgWriteTaskPermissions}, - check: func(ctx context.Context, svc influxdb.TaskService) error { + check: func(ctx context.Context, svc task2.TaskService) error { err := svc.CancelRun(ctx, taskID, 10) return err }, @@ -510,7 +511,7 @@ from(bucket:"holder") |> range(start:-5m) |> to(bucket:"holder", org:"thing")` { name: "RetryRun with bad auth", auth: &influxdb.Authorization{Status: "active", Permissions: wrongOrgReadAllTaskPermissions}, - check: func(ctx context.Context, svc influxdb.TaskService) error { + check: func(ctx context.Context, svc task2.TaskService) error { _, err := svc.RetryRun(ctx, taskID, 10) if err == nil { return errors.New("returned no error with a invalid auth") @@ -521,7 +522,7 @@ from(bucket:"holder") |> range(start:-5m) |> to(bucket:"holder", org:"thing")` { name: "RetryRun with org auth", auth: &influxdb.Authorization{Status: "active", Permissions: orgWriteAllTaskPermissions}, - check: func(ctx context.Context, svc influxdb.TaskService) error { + check: func(ctx context.Context, svc task2.TaskService) error { _, err := svc.RetryRun(ctx, taskID, 10) return err }, @@ -529,7 +530,7 @@ from(bucket:"holder") |> range(start:-5m) |> to(bucket:"holder", org:"thing")` { name: "RetryRun with task auth", auth: &influxdb.Authorization{Status: "active", Permissions: orgWriteTaskPermissions}, - check: func(ctx context.Context, svc influxdb.TaskService) error { + check: func(ctx context.Context, svc task2.TaskService) error { _, err := svc.RetryRun(ctx, taskID, 10) return err }, @@ -537,7 +538,7 @@ from(bucket:"holder") |> range(start:-5m) |> to(bucket:"holder", org:"thing")` { name: "ForceRun with bad auth", auth: &influxdb.Authorization{Status: "active", Permissions: wrongOrgReadAllTaskPermissions}, - check: func(ctx context.Context, svc influxdb.TaskService) error { + check: func(ctx context.Context, svc task2.TaskService) error { _, err := svc.ForceRun(ctx, taskID, 10000) if err == nil { return errors.New("returned no error with a invalid auth") @@ -548,7 +549,7 @@ from(bucket:"holder") |> range(start:-5m) |> to(bucket:"holder", org:"thing")` { name: "ForceRun with org auth", auth: &influxdb.Authorization{Status: "active", Permissions: orgWriteAllTaskPermissions}, - check: func(ctx context.Context, svc influxdb.TaskService) error { + check: func(ctx context.Context, svc task2.TaskService) error { _, err := svc.ForceRun(ctx, taskID, 10000) return err }, @@ -556,7 +557,7 @@ from(bucket:"holder") |> range(start:-5m) |> to(bucket:"holder", org:"thing")` { name: "ForceRun with task auth", auth: &influxdb.Authorization{Status: "active", Permissions: orgWriteTaskPermissions}, - check: func(ctx context.Context, svc influxdb.TaskService) error { + check: func(ctx context.Context, svc task2.TaskService) error { _, err := svc.ForceRun(ctx, taskID, 10000) return err }, diff --git a/checks/service.go b/checks/service.go index 02e658057ee..be2c0ac80b1 100644 --- a/checks/service.go +++ b/checks/service.go @@ -3,6 +3,7 @@ package checks import ( "context" "fmt" + "github.com/influxdata/influxdb/v2/task" "github.com/influxdata/influxdb/v2/kit/platform" "github.com/influxdata/influxdb/v2/kit/platform/errors" @@ -26,7 +27,7 @@ type Service struct { log *zap.Logger orgs influxdb.OrganizationService - tasks influxdb.TaskService + tasks task.TaskService timeGenerator influxdb.TimeGenerator idGenerator platform.IDGenerator @@ -35,7 +36,7 @@ type Service struct { } // NewService constructs and configures a new checks.Service -func NewService(logger *zap.Logger, store kv.Store, orgs influxdb.OrganizationService, tasks influxdb.TaskService) *Service { +func NewService(logger *zap.Logger, store kv.Store, orgs influxdb.OrganizationService, tasks task.TaskService) *Service { return &Service{ kv: store, log: logger, @@ -330,7 +331,7 @@ func (s *Service) CreateCheck(ctx context.Context, c influxdb.CheckCreate, userI // update task to be in matching state to check if influxdb.Status(t.Status) != c.Status { - _, err = s.tasks.UpdateTask(ctx, t.ID, influxdb.TaskUpdate{ + _, err = s.tasks.UpdateTask(ctx, t.ID, task.TaskUpdate{ Status: strPtr(string(c.Status)), }) } @@ -338,13 +339,13 @@ func (s *Service) CreateCheck(ctx context.Context, c influxdb.CheckCreate, userI return err } -func (s *Service) createCheckTask(ctx context.Context, c influxdb.CheckCreate) (*influxdb.Task, error) { +func (s *Service) createCheckTask(ctx context.Context, c influxdb.CheckCreate) (*task.Task, error) { script, err := c.GenerateFlux(fluxlang.DefaultService) if err != nil { return nil, err } - tc := influxdb.TaskCreate{ + tc := task.TaskCreate{ Type: c.Type(), Flux: script, OwnerID: c.GetOwnerID(), @@ -440,7 +441,7 @@ func (s *Service) updateCheckTask(ctx context.Context, chk influxdb.CheckCreate) return err } - tu := influxdb.TaskUpdate{ + tu := task.TaskUpdate{ Flux: &flux, Description: strPtr(chk.GetDescription()), } @@ -457,7 +458,7 @@ func (s *Service) updateCheckTask(ctx context.Context, chk influxdb.CheckCreate) } func (s *Service) patchCheckTask(ctx context.Context, taskID platform.ID, upd influxdb.CheckUpdate) error { - tu := influxdb.TaskUpdate{ + tu := task.TaskUpdate{ Description: upd.Description, } diff --git a/checks/service_external_test.go b/checks/service_external_test.go index b361ef47292..b8d91d80f57 100644 --- a/checks/service_external_test.go +++ b/checks/service_external_test.go @@ -3,6 +3,7 @@ package checks import ( "bytes" "context" + "github.com/influxdata/influxdb/v2/task" "sort" "strings" "testing" @@ -160,14 +161,14 @@ var taskCmpOptions = cmp.Options{ }), // skip comparing permissions cmpopts.IgnoreFields( - influxdb.Task{}, + task.Task{}, "LatestCompleted", "LatestScheduled", "CreatedAt", "UpdatedAt", ), - cmp.Transformer("Sort", func(in []*influxdb.Task) []*influxdb.Task { - out := append([]*influxdb.Task{}, in...) // Copy input to avoid mutating it + cmp.Transformer("Sort", func(in []*task.Task) []*task.Task { + out := append([]*task.Task{}, in...) // Copy input to avoid mutating it sort.Slice(out, func(i, j int) bool { return out[i].ID > out[j].ID }) @@ -179,13 +180,13 @@ var taskCmpOptions = cmp.Options{ type CheckFields struct { IDGenerator platform.IDGenerator TimeGenerator influxdb.TimeGenerator - TaskService influxdb.TaskService + TaskService task.TaskService Checks []influxdb.Check Organizations []*influxdb.Organization - Tasks []influxdb.TaskCreate + Tasks []task.TaskCreate } -type checkServiceFactory func(CheckFields, *testing.T) (influxdb.CheckService, influxdb.TaskService, string, func()) +type checkServiceFactory func(CheckFields, *testing.T) (influxdb.CheckService, task.TaskService, string, func()) type checkServiceF func( init checkServiceFactory, @@ -249,7 +250,7 @@ func CreateCheck( type wants struct { err *errors.Error checks []influxdb.Check - tasks []*influxdb.Task + tasks []*task.Task } tests := []struct { @@ -308,7 +309,7 @@ func CreateCheck( }, }, wants: wants{ - tasks: []*influxdb.Task{ + tasks: []*task.Task{ { ID: MustIDBase16("020f755c3c082000"), Name: "name1", @@ -437,7 +438,7 @@ func CreateCheck( deadman1, threshold1, }, - tasks: []*influxdb.Task{ + tasks: []*task.Task{ { ID: MustIDBase16("020f755c3c082001"), Name: "name2", @@ -574,7 +575,7 @@ func CreateCheck( }, }, wants: wants{ - tasks: []*influxdb.Task{ + tasks: []*task.Task{ { ID: MustIDBase16("020f755c3c082001"), Name: "name1", @@ -701,7 +702,7 @@ func CreateCheck( t.Errorf("checks are different -got/+want\ndiff %s", diff) } - foundTasks, _, err := tasks.FindTasks(ctx, influxdb.TaskFilter{}) + foundTasks, _, err := tasks.FindTasks(ctx, task.TaskFilter{}) if err != nil { t.Fatal(err) } @@ -1060,7 +1061,7 @@ func DeleteCheck( ID: MustIDBase16(orgOneID), }, }, - Tasks: []influxdb.TaskCreate{ + Tasks: []task.TaskCreate{ { Flux: `option task = { every: 10s, name: "foo" } data = from(bucket: "telegraf") |> range(start: -1m)`, @@ -1093,7 +1094,7 @@ data = from(bucket: "telegraf") |> range(start: -1m)`, ID: MustIDBase16(orgOneID), }, }, - Tasks: []influxdb.TaskCreate{ + Tasks: []task.TaskCreate{ { Flux: `option task = { every: 10s, name: "foo" } data = from(bucket: "telegraf") |> range(start: -1m)`, @@ -1293,7 +1294,7 @@ func UpdateCheck( ID: MustIDBase16(orgOneID), }, }, - Tasks: []influxdb.TaskCreate{ + Tasks: []task.TaskCreate{ { Flux: `option task = { every: 10s, name: "foo" } data = from(bucket: "telegraf") |> range(start: -1m)`, @@ -1551,7 +1552,7 @@ func PatchCheck( fields: CheckFields{ IDGenerator: mock.NewIDGenerator("0000000000000001", t), TimeGenerator: mock.TimeGenerator{FakeValue: time.Date(2007, 5, 4, 1, 2, 3, 0, time.UTC)}, - Tasks: []influxdb.TaskCreate{ + Tasks: []task.TaskCreate{ { Flux: `option task = { every: 10s, name: "foo" } data = from(bucket: "telegraf") |> range(start: -1m)`, diff --git a/checks/service_test.go b/checks/service_test.go index 26ade32fb55..f7ad50c835e 100644 --- a/checks/service_test.go +++ b/checks/service_test.go @@ -2,6 +2,7 @@ package checks import ( "context" + "github.com/influxdata/influxdb/v2/task" "testing" "github.com/influxdata/influxdb/v2" @@ -31,7 +32,7 @@ func TestCheckService(t *testing.T) { CheckService(initCheckService, t) } -func initCheckService(f CheckFields, t *testing.T) (influxdb.CheckService, influxdb.TaskService, string, func()) { +func initCheckService(f CheckFields, t *testing.T) (influxdb.CheckService, task.TaskService, string, func()) { store, closeKVStore := NewKVTestStore(t) logger := zaptest.NewLogger(t) diff --git a/cmd/influx/task.go b/cmd/influx/task.go index 744c591c19e..73f5f9448f4 100644 --- a/cmd/influx/task.go +++ b/cmd/influx/task.go @@ -3,6 +3,7 @@ package main import ( "context" "fmt" + "github.com/influxdata/influxdb/v2/task" "time" "github.com/influxdata/influxdb/v2/kit/platform" @@ -13,9 +14,9 @@ import ( "github.com/spf13/cobra" ) -type taskSVCsFn func() (influxdb.TaskService, influxdb.OrganizationService, error) +type taskSVCsFn func() (task.TaskService, influxdb.OrganizationService, error) -func newTaskSVCs() (influxdb.TaskService, influxdb.OrganizationService, error) { +func newTaskSVCs() (task.TaskService, influxdb.OrganizationService, error) { httpClient, err := newHTTPClient() if err != nil { return nil, nil, err @@ -116,7 +117,7 @@ func (b *cmdTaskBuilder) taskCreateF(_ *cobra.Command, args []string) error { return fmt.Errorf("error parsing flux script: %s", err) } - tc := influxdb.TaskCreate{ + tc := task.TaskCreate{ Flux: flux, Organization: b.org.name, } @@ -152,7 +153,7 @@ func (b *cmdTaskBuilder) taskFindCmd() *cobra.Command { registerPrintOptions(b.opts.viper, cmd, &b.taskPrintFlags.hideHeaders, &b.taskPrintFlags.json) cmd.Flags().StringVarP(&b.taskID, "id", "i", "", "task ID") cmd.Flags().StringVarP(&b.taskFindFlags.user, "user-id", "n", "", "task owner ID") - cmd.Flags().IntVarP(&b.taskFindFlags.limit, "limit", "", influxdb.TaskDefaultPageSize, "the number of tasks to find") + cmd.Flags().IntVarP(&b.taskFindFlags.limit, "limit", "", task.TaskDefaultPageSize, "the number of tasks to find") cmd.Flags().BoolVar(&b.taskFindFlags.headers, "headers", true, "To print the table headers; defaults true") return cmd @@ -169,7 +170,7 @@ func (b *cmdTaskBuilder) taskFindF(cmd *cobra.Command, args []string) error { return err } - filter := influxdb.TaskFilter{} + filter := task.TaskFilter{} if b.taskFindFlags.user != "" { id, err := platform.IDFromString(b.taskFindFlags.user) if err != nil { @@ -189,12 +190,12 @@ func (b *cmdTaskBuilder) taskFindF(cmd *cobra.Command, args []string) error { filter.OrganizationID = id } - if b.taskFindFlags.limit < 1 || b.taskFindFlags.limit > influxdb.TaskMaxPageSize { - return fmt.Errorf("limit must be between 1 and %d", influxdb.TaskMaxPageSize) + if b.taskFindFlags.limit < 1 || b.taskFindFlags.limit > task.TaskMaxPageSize { + return fmt.Errorf("limit must be between 1 and %d", task.TaskMaxPageSize) } filter.Limit = b.taskFindFlags.limit - var tasks []*influxdb.Task + var tasks []*task.Task if b.taskID != "" { id, err := platform.IDFromString(b.taskID) @@ -262,7 +263,7 @@ func (b *cmdTaskBuilder) taskRetryFailedF(*cobra.Command, []string) error { return err } - var failedRuns []*influxdb.Run + var failedRuns []*task.Run if b.taskID == "" { failedRuns, err = b.getFailedRunsForOrg(b.taskRerunFailedFlags.taskLimit, b.taskRerunFailedFlags.runLimit) } else { @@ -295,13 +296,13 @@ func (b *cmdTaskBuilder) taskRetryFailedF(*cobra.Command, []string) error { return nil } -func (b *cmdTaskBuilder) getFailedRunsForTaskID(limit int) ([]*influxdb.Run, error) { +func (b *cmdTaskBuilder) getFailedRunsForTaskID(limit int) ([]*task.Run, error) { // use RunFilter to search for failed runs tskSvc, _, err := b.svcFn() if err != nil { return nil, err } - runFilter := influxdb.RunFilter{Limit: limit} + runFilter := task.RunFilter{Limit: limit} id, err := platform.IDFromString(b.taskID) if err != nil { return nil, err @@ -313,7 +314,7 @@ func (b *cmdTaskBuilder) getFailedRunsForTaskID(limit int) ([]*influxdb.Run, err if err != nil { return nil, err } - var allFailedRuns []*influxdb.Run + var allFailedRuns []*task.Run for _, run := range allRuns { if run.Status == "failed" { allFailedRuns = append(allFailedRuns, run) @@ -323,10 +324,10 @@ func (b *cmdTaskBuilder) getFailedRunsForTaskID(limit int) ([]*influxdb.Run, err } -func (b *cmdTaskBuilder) getFailedRunsForOrg(taskLimit int, runLimit int) ([]*influxdb.Run, error) { +func (b *cmdTaskBuilder) getFailedRunsForOrg(taskLimit int, runLimit int) ([]*task.Run, error) { // use TaskFilter to get all Tasks in org then search for failed runs in each task - taskFilter := influxdb.TaskFilter{Limit: taskLimit} - runFilter := influxdb.RunFilter{Limit: runLimit} + taskFilter := task.TaskFilter{Limit: taskLimit} + runFilter := task.RunFilter{Limit: runLimit} runFilter.BeforeTime = b.taskRerunFailedFlags.before runFilter.AfterTime = b.taskRerunFailedFlags.after tskSvc, _, err := b.svcFn() @@ -350,11 +351,11 @@ func (b *cmdTaskBuilder) getFailedRunsForOrg(taskLimit int, runLimit int) ([]*in return nil, err } - var allFailedRuns []*influxdb.Run + var allFailedRuns []*task.Run for _, t := range allTasks { runFilter.Task = t.ID runsPerTask, _, err := tskSvc.FindRuns(context.Background(), runFilter) - var failedRunsPerTask []*influxdb.Run + var failedRunsPerTask []*task.Run for _, r := range runsPerTask { if r.Status == "failed" { failedRunsPerTask = append(failedRunsPerTask, r) @@ -399,7 +400,7 @@ func (b *cmdTaskBuilder) taskUpdateF(cmd *cobra.Command, args []string) error { return err } - var update influxdb.TaskUpdate + var update task.TaskUpdate if b.taskUpdateFlags.status != "" { update.Status = &b.taskUpdateFlags.status } @@ -460,8 +461,8 @@ func (b *cmdTaskBuilder) taskDeleteF(cmd *cobra.Command, args []string) error { } type taskPrintOpts struct { - task *influxdb.Task - tasks []*influxdb.Task + task *task.Task + tasks []*task.Task } func (b *cmdTaskBuilder) printTasks(printOpts taskPrintOpts) error { @@ -537,7 +538,7 @@ func (b *cmdTaskBuilder) taskLogFindF(cmd *cobra.Command, args []string) error { return err } - var filter influxdb.LogFilter + var filter task.LogFilter id, err := platform.IDFromString(b.taskID) if err != nil { return err @@ -621,7 +622,7 @@ func (b *cmdTaskBuilder) taskRunFindF(cmd *cobra.Command, args []string) error { return err } - filter := influxdb.RunFilter{ + filter := task.RunFilter{ Limit: b.taskRunFindFlags.limit, AfterTime: b.taskRunFindFlags.afterTime, BeforeTime: b.taskRunFindFlags.beforeTime, @@ -632,7 +633,7 @@ func (b *cmdTaskBuilder) taskRunFindF(cmd *cobra.Command, args []string) error { } filter.Task = *taskID - var runs []*influxdb.Run + var runs []*task.Run if b.runID != "" { id, err := platform.IDFromString(b.runID) if err != nil { @@ -653,7 +654,7 @@ func (b *cmdTaskBuilder) taskRunFindF(cmd *cobra.Command, args []string) error { if b.taskPrintFlags.json { if runs == nil { // guarantee we never return a null value from CLI - runs = make([]*influxdb.Run, 0) + runs = make([]*task.Run, 0) } return b.opts.writeJSON(runs) } diff --git a/cmd/influx/task_test.go b/cmd/influx/task_test.go index 37e030d3ebe..e8722642774 100644 --- a/cmd/influx/task_test.go +++ b/cmd/influx/task_test.go @@ -4,6 +4,7 @@ import ( "bytes" "context" "fmt" + "github.com/influxdata/influxdb/v2/task" "io/ioutil" "testing" @@ -21,8 +22,8 @@ import ( func TestCmdTask(t *testing.T) { orgID := platform.ID(9000) - fakeSVCFn := func(svc influxdb.TaskService) taskSVCsFn { - return func() (influxdb.TaskService, influxdb.OrganizationService, error) { + fakeSVCFn := func(svc task.TaskService) taskSVCsFn { + return func() (task.TaskService, influxdb.OrganizationService, error) { return svc, &mock.OrganizationService{ FindOrganizationF: func(ctx context.Context, filter influxdb.OrganizationFilter) (*influxdb.Organization, error) { return &influxdb.Organization{ID: orgID, Name: "influxdata"}, nil @@ -36,7 +37,7 @@ func TestCmdTask(t *testing.T) { // todo: add more test cases tests := []struct { name string - expectedTask influxdb.Task + expectedTask task.Task flags []string envVars map[string]string }{ @@ -45,17 +46,17 @@ func TestCmdTask(t *testing.T) { flags: []string{ "--org=influxdata", }, - expectedTask: influxdb.Task{ + expectedTask: task.Task{ OrganizationID: 9000, Organization: "influxdata", }, }, } - cmdFn := func(expectedTsk influxdb.Task) func(*globalFlags, genericCLIOpts) *cobra.Command { + cmdFn := func(expectedTsk task.Task) func(*globalFlags, genericCLIOpts) *cobra.Command { svc := mock.NewTaskService() - svc.CreateTaskFn = func(ctx context.Context, task influxdb.TaskCreate) (*influxdb.Task, error) { - tmpTsk := influxdb.Task{ + svc.CreateTaskFn = func(ctx context.Context, task task.TaskCreate) (*task.Task, error) { + tmpTsk := task.Task{ Type: task.Type, OrganizationID: task.OrganizationID, Organization: task.Organization, diff --git a/cmd/influxd/launcher/launcher.go b/cmd/influxd/launcher/launcher.go index 2e8828c5165..49aefaf156d 100644 --- a/cmd/influxd/launcher/launcher.go +++ b/cmd/influxd/launcher/launcher.go @@ -5,6 +5,7 @@ import ( "crypto/tls" "errors" "fmt" + "github.com/influxdata/influxdb/v2/task" "io" "net" nethttp "net/http" @@ -446,7 +447,7 @@ func (m *Launcher) run(ctx context.Context, opts *InfluxdOpts) (err error) { m.reg.MustRegister(m.queryController.PrometheusCollectors()...) var storageQueryService = readservice.NewProxyQueryService(m.queryController) - var taskSvc platform.TaskService + var taskSvc task.TaskService { // create the task stack combinedTaskService := taskbackend.NewAnalyticalStorage( @@ -1138,7 +1139,7 @@ func (m *Launcher) SecretService() platform.SecretService { } // TaskService returns the internal task service. -func (m *Launcher) TaskService() platform.TaskService { +func (m *Launcher) TaskService() task.TaskService { return m.apibackend.TaskService } diff --git a/cmd/influxd/launcher/launcher_helpers.go b/cmd/influxd/launcher/launcher_helpers.go index 8afb9234cfb..ecf8cd508fd 100644 --- a/cmd/influxd/launcher/launcher_helpers.go +++ b/cmd/influxd/launcher/launcher_helpers.go @@ -4,6 +4,7 @@ import ( "bytes" "context" "fmt" + "github.com/influxdata/influxdb/v2/task" "io/ioutil" nethttp "net/http" "os" @@ -448,7 +449,7 @@ func (tl *TestLauncher) PkgerService(tb testing.TB) pkger.SVC { return &pkger.HTTPRemoteService{Client: tl.HTTPClient(tb)} } -func (tl *TestLauncher) TaskServiceKV(tb testing.TB) influxdb.TaskService { +func (tl *TestLauncher) TaskServiceKV(tb testing.TB) task.TaskService { return tl.kvService } @@ -467,7 +468,7 @@ func (tl *TestLauncher) AuthorizationService(tb testing.TB) *http.AuthorizationS return &http.AuthorizationService{Client: tl.HTTPClient(tb)} } -func (tl *TestLauncher) TaskService(tb testing.TB) influxdb.TaskService { +func (tl *TestLauncher) TaskService(tb testing.TB) task.TaskService { tb.Helper() return &http.TaskService{Client: tl.HTTPClient(tb)} } diff --git a/cmd/influxd/launcher/pkger_test.go b/cmd/influxd/launcher/pkger_test.go index ed3b201e8d8..188d432202e 100644 --- a/cmd/influxd/launcher/pkger_test.go +++ b/cmd/influxd/launcher/pkger_test.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "github.com/influxdata/influxdb/v2/task" "io/ioutil" nethttp "net/http" "net/http/httptest" @@ -220,7 +221,7 @@ func TestLauncher_Pkger(t *testing.T) { } newTaskObject := func(pkgName, name, description string) pkger.Object { - obj := pkger.TaskToObject("", influxdb.Task{ + obj := pkger.TaskToObject("", task.Task{ Name: name, Description: description, Flux: "buckets()", @@ -2359,7 +2360,7 @@ func TestLauncher_Pkger(t *testing.T) { require.NoError(t, err) assert.Empty(t, rules) - tasks, _, err := l.TaskServiceKV(t).FindTasks(ctx, influxdb.TaskFilter{ + tasks, _, err := l.TaskServiceKV(t).FindTasks(ctx, task.TaskFilter{ OrganizationID: &l.Org.ID, }) require.NoError(t, err) @@ -2948,7 +2949,7 @@ spec: assert.NotZero(t, endpoints[0].NotificationEndpoint.GetID()) assert.Equal(t, "no auth endpoint", endpoints[0].NotificationEndpoint.GetName()) assert.Equal(t, "http none auth desc", endpoints[0].NotificationEndpoint.GetDescription()) - assert.Equal(t, influxdb.TaskStatusInactive, string(endpoints[0].NotificationEndpoint.GetStatus())) + assert.Equal(t, task.TaskStatusInactive, string(endpoints[0].NotificationEndpoint.GetStatus())) hasLabelAssociations(t, endpoints[0].LabelAssociations, 1, "label-1") require.Len(t, sum1.NotificationRules, 1) @@ -3080,7 +3081,7 @@ spec: require.Len(t, endpoints, 1) assert.Equal(t, "no auth endpoint", endpoints[0].NotificationEndpoint.GetName()) assert.Equal(t, "http none auth desc", endpoints[0].NotificationEndpoint.GetDescription()) - assert.Equal(t, influxdb.TaskStatusInactive, string(endpoints[0].NotificationEndpoint.GetStatus())) + assert.Equal(t, task.TaskStatusInactive, string(endpoints[0].NotificationEndpoint.GetStatus())) hasLabelAssociations(t, endpoints[0].LabelAssociations, 1, "label-1") require.Len(t, sum.NotificationRules, 1) @@ -4944,23 +4945,23 @@ func (r resourceChecker) mustDeleteRule(t *testing.T, id platform.ID) { require.NoError(t, r.tl.NotificationRuleService(t).DeleteNotificationRule(ctx, id)) } -func (r resourceChecker) getTask(t *testing.T, getOpt getResourceOptFn) (influxdb.Task, error) { +func (r resourceChecker) getTask(t *testing.T, getOpt getResourceOptFn) (task.Task, error) { t.Helper() taskSVC := r.tl.TaskService(t) var ( - task *influxdb.Task + task *task.Task err error ) switch opt := getOpt(); { case opt.name != "": - tasks, _, err := taskSVC.FindTasks(ctx, influxdb.TaskFilter{ + tasks, _, err := taskSVC.FindTasks(ctx, task.TaskFilter{ Name: &opt.name, OrganizationID: &r.tl.Org.ID, }) if err != nil { - return influxdb.Task{}, err + return task.Task{}, err } for _, tt := range tasks { if tt.Name == opt.name { @@ -4974,13 +4975,13 @@ func (r resourceChecker) getTask(t *testing.T, getOpt getResourceOptFn) (influxd require.Fail(t, "did not provide a valid get option") } if task == nil { - return influxdb.Task{}, errors.New("did not find expected task by name") + return task.Task{}, errors.New("did not find expected task by name") } return *task, err } -func (r resourceChecker) mustGetTask(t *testing.T, getOpt getResourceOptFn) influxdb.Task { +func (r resourceChecker) mustGetTask(t *testing.T, getOpt getResourceOptFn) task.Task { t.Helper() task, err := r.getTask(t, getOpt) diff --git a/dbrp/error.go b/dbrp/error.go index d71344c0175..40743c1baf3 100644 --- a/dbrp/error.go +++ b/dbrp/error.go @@ -2,10 +2,9 @@ package dbrp import ( "fmt" + "github.com/influxdata/influxdb/v2/task" "github.com/influxdata/influxdb/v2/kit/platform/errors" - - "github.com/influxdata/influxdb/v2" ) var ( @@ -39,7 +38,7 @@ func ErrOrgNotFound(org string) error { return &errors.Error{ Code: errors.ENotFound, Msg: fmt.Sprintf("invalid org %q", org), - Err: influxdb.ErrOrgNotFound, + Err: task.ErrOrgNotFound, } } diff --git a/http/api_handler.go b/http/api_handler.go index ad36f3553e7..881d15d2b85 100644 --- a/http/api_handler.go +++ b/http/api_handler.go @@ -2,6 +2,7 @@ package http import ( "context" + "github.com/influxdata/influxdb/v2/task" "net/http" "github.com/go-chi/chi" @@ -86,7 +87,7 @@ type APIBackend struct { InfluxqldService influxql.ProxyQueryService FluxService query.ProxyQueryService FluxLanguageService fluxlang.FluxLanguageService - TaskService influxdb.TaskService + TaskService task.TaskService CheckService influxdb.CheckService TelegrafService influxdb.TelegrafConfigStore ScraperTargetStoreService influxdb.ScraperTargetStoreService diff --git a/http/check_service.go b/http/check_service.go index 895b412b3fe..c394cdd5c75 100644 --- a/http/check_service.go +++ b/http/check_service.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "fmt" + "github.com/influxdata/influxdb/v2/task" "io/ioutil" "net/http" "path" @@ -28,7 +29,7 @@ type CheckBackend struct { log *zap.Logger AlgoWProxy FeatureProxyHandler - TaskService influxdb.TaskService + TaskService task.TaskService CheckService influxdb.CheckService UserResourceMappingService influxdb.UserResourceMappingService LabelService influxdb.LabelService @@ -59,7 +60,7 @@ type CheckHandler struct { errors.HTTPErrorHandler log *zap.Logger - TaskService influxdb.TaskService + TaskService task.TaskService CheckService influxdb.CheckService UserResourceMappingService influxdb.UserResourceMappingService LabelService influxdb.LabelService diff --git a/http/check_test.go b/http/check_test.go index 8cd5674cb26..be45d8d64b1 100644 --- a/http/check_test.go +++ b/http/check_test.go @@ -5,6 +5,7 @@ import ( "context" "encoding/json" "fmt" + "github.com/influxdata/influxdb/v2/task" "io/ioutil" "net/http" "net/http/httptest" @@ -284,8 +285,8 @@ func TestService_handleGetChecks(t *testing.T) { checkBackend.CheckService = tt.fields.CheckService checkBackend.LabelService = tt.fields.LabelService checkBackend.TaskService = &mock.TaskService{ - FindTaskByIDFn: func(ctx context.Context, id platform.ID) (*influxdb.Task, error) { - return &influxdb.Task{Status: "active"}, nil + FindTaskByIDFn: func(ctx context.Context, id platform.ID) (*task.Task, error) { + return &task.Task{Status: "active"}, nil }, } h := NewCheckHandler(zaptest.NewLogger(t), checkBackend) @@ -426,8 +427,8 @@ func TestService_handleGetCheckQuery(t *testing.T) { checkBackend.HTTPErrorHandler = kithttp.ErrorHandler(0) checkBackend.CheckService = tt.fields.CheckService checkBackend.TaskService = &mock.TaskService{ - FindTaskByIDFn: func(ctx context.Context, id platform.ID) (*influxdb.Task, error) { - return &influxdb.Task{}, nil + FindTaskByIDFn: func(ctx context.Context, id platform.ID) (*task.Task, error) { + return &task.Task{}, nil }, } @@ -567,8 +568,8 @@ func TestService_handleGetCheck(t *testing.T) { checkBackend.HTTPErrorHandler = kithttp.ErrorHandler(0) checkBackend.CheckService = tt.fields.CheckService checkBackend.TaskService = &mock.TaskService{ - FindTaskByIDFn: func(ctx context.Context, id platform.ID) (*influxdb.Task, error) { - return &influxdb.Task{Status: "active"}, nil + FindTaskByIDFn: func(ctx context.Context, id platform.ID) (*task.Task, error) { + return &task.Task{Status: "active"}, nil }, } h := NewCheckHandler(zaptest.NewLogger(t), checkBackend) @@ -734,8 +735,8 @@ func TestService_handlePostCheck(t *testing.T) { checkBackend.CheckService = tt.fields.CheckService checkBackend.OrganizationService = tt.fields.OrganizationService checkBackend.TaskService = &mock.TaskService{ - FindTaskByIDFn: func(ctx context.Context, id platform.ID) (*influxdb.Task, error) { - return &influxdb.Task{Status: "active"}, nil + FindTaskByIDFn: func(ctx context.Context, id platform.ID) (*task.Task, error) { + return &task.Task{Status: "active"}, nil }, } h := NewCheckHandler(zaptest.NewLogger(t), checkBackend) @@ -837,8 +838,8 @@ func TestService_handleDeleteCheck(t *testing.T) { checkBackend.HTTPErrorHandler = kithttp.ErrorHandler(0) checkBackend.CheckService = tt.fields.CheckService checkBackend.TaskService = &mock.TaskService{ - FindTaskByIDFn: func(ctx context.Context, id platform.ID) (*influxdb.Task, error) { - return &influxdb.Task{}, nil + FindTaskByIDFn: func(ctx context.Context, id platform.ID) (*task.Task, error) { + return &task.Task{}, nil }, } h := NewCheckHandler(zaptest.NewLogger(t), checkBackend) @@ -1003,8 +1004,8 @@ func TestService_handlePatchCheck(t *testing.T) { checkBackend.HTTPErrorHandler = kithttp.ErrorHandler(0) checkBackend.CheckService = tt.fields.CheckService checkBackend.TaskService = &mock.TaskService{ - FindTaskByIDFn: func(ctx context.Context, id platform.ID) (*influxdb.Task, error) { - return &influxdb.Task{Status: "active"}, nil + FindTaskByIDFn: func(ctx context.Context, id platform.ID) (*task.Task, error) { + return &task.Task{Status: "active"}, nil }, } h := NewCheckHandler(zaptest.NewLogger(t), checkBackend) @@ -1197,8 +1198,8 @@ func TestService_handleUpdateCheck(t *testing.T) { checkBackend.HTTPErrorHandler = kithttp.ErrorHandler(0) checkBackend.CheckService = tt.fields.CheckService checkBackend.TaskService = &mock.TaskService{ - FindTaskByIDFn: func(ctx context.Context, id platform.ID) (*influxdb.Task, error) { - return &influxdb.Task{Status: "active"}, nil + FindTaskByIDFn: func(ctx context.Context, id platform.ID) (*task.Task, error) { + return &task.Task{Status: "active"}, nil }, } h := NewCheckHandler(zaptest.NewLogger(t), checkBackend) @@ -1308,8 +1309,8 @@ func TestService_handlePostCheckMember(t *testing.T) { checkBackend := NewMockCheckBackend(t) checkBackend.UserService = tt.fields.UserService checkBackend.TaskService = &mock.TaskService{ - FindTaskByIDFn: func(ctx context.Context, id platform.ID) (*influxdb.Task, error) { - return &influxdb.Task{}, nil + FindTaskByIDFn: func(ctx context.Context, id platform.ID) (*task.Task, error) { + return &task.Task{}, nil }, } h := NewCheckHandler(zaptest.NewLogger(t), checkBackend) diff --git a/http/notification_rule.go b/http/notification_rule.go index eff9df37773..939ab7d4446 100644 --- a/http/notification_rule.go +++ b/http/notification_rule.go @@ -5,6 +5,7 @@ import ( "context" "encoding/json" "fmt" + "github.com/influxdata/influxdb/v2/task" "net/http" "path" "time" @@ -39,7 +40,7 @@ type NotificationRuleBackend struct { LabelService influxdb.LabelService UserService influxdb.UserService OrganizationService influxdb.OrganizationService - TaskService influxdb.TaskService + TaskService task.TaskService } // NewNotificationRuleBackend returns a new instance of NotificationRuleBackend. @@ -71,7 +72,7 @@ type NotificationRuleHandler struct { LabelService influxdb.LabelService UserService influxdb.UserService OrganizationService influxdb.OrganizationService - TaskService influxdb.TaskService + TaskService task.TaskService } const ( diff --git a/http/notification_rule_test.go b/http/notification_rule_test.go index 62123d0419b..4b0baad347a 100644 --- a/http/notification_rule_test.go +++ b/http/notification_rule_test.go @@ -3,6 +3,7 @@ package http import ( "context" "encoding/json" + "github.com/influxdata/influxdb/v2/task" "testing" "github.com/influxdata/influxdb/v2/kit/platform" @@ -25,8 +26,8 @@ func NewMockNotificationRuleBackend(t *testing.T) *NotificationRuleBackend { UserService: mock.NewUserService(), OrganizationService: mock.NewOrganizationService(), TaskService: &mock.TaskService{ - FindTaskByIDFn: func(ctx context.Context, id platform.ID) (*influxdb.Task, error) { - return &influxdb.Task{Status: "active"}, nil + FindTaskByIDFn: func(ctx context.Context, id platform.ID) (*task.Task, error) { + return &task.Task{Status: "active"}, nil }, }, } diff --git a/http/task_service.go b/http/task_service.go index 5651d509057..512539e8c7c 100644 --- a/http/task_service.go +++ b/http/task_service.go @@ -5,6 +5,7 @@ import ( "encoding/json" "errors" "fmt" + "github.com/influxdata/influxdb/v2/task" "net/http" "net/url" "path" @@ -31,7 +32,7 @@ type TaskBackend struct { log *zap.Logger AlgoWProxy FeatureProxyHandler - TaskService influxdb.TaskService + TaskService task.TaskService AuthorizationService influxdb.AuthorizationService OrganizationService influxdb.OrganizationService UserResourceMappingService influxdb.UserResourceMappingService @@ -62,7 +63,7 @@ type TaskHandler struct { errors2.HTTPErrorHandler log *zap.Logger - TaskService influxdb.TaskService + TaskService task.TaskService AuthorizationService influxdb.AuthorizationService OrganizationService influxdb.OrganizationService UserResourceMappingService influxdb.UserResourceMappingService @@ -185,7 +186,7 @@ type taskResponse struct { } // NewFrontEndTask converts a internal task type to a task that we want to display to users -func NewFrontEndTask(t influxdb.Task) Task { +func NewFrontEndTask(t task.Task) Task { latestCompleted := "" if !t.LatestCompleted.IsZero() { latestCompleted = t.LatestCompleted.Format(time.RFC3339) @@ -224,7 +225,7 @@ func NewFrontEndTask(t influxdb.Task) Task { } } -func convertTask(t Task) *influxdb.Task { +func convertTask(t Task) *task.Task { var ( latestCompleted time.Time createdAt time.Time @@ -251,7 +252,7 @@ func convertTask(t Task) *influxdb.Task { } } - return &influxdb.Task{ + return &task.Task{ ID: t.ID, OrganizationID: t.OrganizationID, Organization: t.Organization, @@ -308,7 +309,7 @@ func customParseDuration(d time.Duration) string { return str } -func newTaskResponse(t influxdb.Task, labels []*influxdb.Label) taskResponse { +func newTaskResponse(t task.Task, labels []*influxdb.Label) taskResponse { response := taskResponse{ Links: map[string]string{ "self": fmt.Sprintf("/api/v2/tasks/%s", t.ID), @@ -329,7 +330,7 @@ func newTaskResponse(t influxdb.Task, labels []*influxdb.Label) taskResponse { return response } -func newTasksPagingLinks(basePath string, ts []*influxdb.Task, f influxdb.TaskFilter) *influxdb.PagingLinks { +func newTasksPagingLinks(basePath string, ts []*task.Task, f task.TaskFilter) *influxdb.PagingLinks { var self, next string u := url.URL{ Path: basePath, @@ -366,7 +367,7 @@ type tasksResponse struct { Tasks []taskResponse `json:"tasks"` } -func newTasksResponse(ctx context.Context, ts []*influxdb.Task, f influxdb.TaskFilter, labelService influxdb.LabelService) tasksResponse { +func newTasksResponse(ctx context.Context, ts []*task.Task, f task.TaskFilter, labelService influxdb.LabelService) tasksResponse { rs := tasksResponse{ Links: newTasksPagingLinks(prefixTasks, ts, f), Tasks: make([]taskResponse, len(ts)), @@ -388,17 +389,17 @@ type runResponse struct { // it uses a pointer to a time.Time instead of a time.Time so that we can pass a nil // value for empty time values type httpRun struct { - ID platform.ID `json:"id,omitempty"` - TaskID platform.ID `json:"taskID"` - Status string `json:"status"` - ScheduledFor *time.Time `json:"scheduledFor"` - StartedAt *time.Time `json:"startedAt,omitempty"` - FinishedAt *time.Time `json:"finishedAt,omitempty"` - RequestedAt *time.Time `json:"requestedAt,omitempty"` - Log []influxdb.Log `json:"log,omitempty"` + ID platform.ID `json:"id,omitempty"` + TaskID platform.ID `json:"taskID"` + Status string `json:"status"` + ScheduledFor *time.Time `json:"scheduledFor"` + StartedAt *time.Time `json:"startedAt,omitempty"` + FinishedAt *time.Time `json:"finishedAt,omitempty"` + RequestedAt *time.Time `json:"requestedAt,omitempty"` + Log []task.Log `json:"log,omitempty"` } -func newRunResponse(r influxdb.Run) runResponse { +func newRunResponse(r task.Run) runResponse { run := httpRun{ ID: r.ID, TaskID: r.TaskID, @@ -428,8 +429,8 @@ func newRunResponse(r influxdb.Run) runResponse { } } -func convertRun(r httpRun) *influxdb.Run { - run := &influxdb.Run{ +func convertRun(r httpRun) *task.Run { + run := &task.Run{ ID: r.ID, TaskID: r.TaskID, Status: r.Status, @@ -460,7 +461,7 @@ type runsResponse struct { Runs []*runResponse `json:"runs"` } -func newRunsResponse(rs []*influxdb.Run, taskID platform.ID) runsResponse { +func newRunsResponse(rs []*task.Run, taskID platform.ID) runsResponse { r := runsResponse{ Links: map[string]string{ "self": fmt.Sprintf("/api/v2/tasks/%s/runs", taskID), @@ -502,7 +503,7 @@ func (h *TaskHandler) handleGetTasks(w http.ResponseWriter, r *http.Request) { } type getTasksRequest struct { - filter influxdb.TaskFilter + filter task.TaskFilter } func decodeGetTasksRequest(ctx context.Context, r *http.Request, orgs influxdb.OrganizationService) (*getTasksRequest, error) { @@ -554,15 +555,15 @@ func decodeGetTasksRequest(ctx context.Context, r *http.Request, orgs influxdb.O if err != nil { return nil, err } - if lim < 1 || lim > influxdb.TaskMaxPageSize { + if lim < 1 || lim > task.TaskMaxPageSize { return nil, &errors2.Error{ Code: errors2.EUnprocessableEntity, - Msg: fmt.Sprintf("limit must be between 1 and %d", influxdb.TaskMaxPageSize), + Msg: fmt.Sprintf("limit must be between 1 and %d", task.TaskMaxPageSize), } } req.filter.Limit = lim } else { - req.filter.Limit = influxdb.TaskDefaultPageSize + req.filter.Limit = task.TaskDefaultPageSize } if status := qp.Get("status"); status == "active" { @@ -572,7 +573,7 @@ func decodeGetTasksRequest(ctx context.Context, r *http.Request, orgs influxdb.O } // the task api can only create or lookup system tasks. - req.filter.Type = &influxdb.TaskSystemType + req.filter.Type = &task.TaskSystemType if name := qp.Get("name"); name != "" { req.filter.Name = &name @@ -643,11 +644,11 @@ func (h *TaskHandler) handlePostTask(w http.ResponseWriter, r *http.Request) { } type postTaskRequest struct { - TaskCreate influxdb.TaskCreate + TaskCreate task.TaskCreate } func decodePostTaskRequest(ctx context.Context, r *http.Request) (*postTaskRequest, error) { - var tc influxdb.TaskCreate + var tc task.TaskCreate if err := json.NewDecoder(r.Body).Decode(&tc); err != nil { return nil, err } @@ -659,7 +660,7 @@ func decodePostTaskRequest(ctx context.Context, r *http.Request) (*postTaskReque } tc.OwnerID = auth.GetUserID() // when creating a task we set the type so we can filter later. - tc.Type = influxdb.TaskSystemType + tc.Type = task.TaskSystemType if err := tc.Validate(); err != nil { return nil, err @@ -754,7 +755,7 @@ func (h *TaskHandler) handleUpdateTask(w http.ResponseWriter, r *http.Request) { Err: err, Msg: "failed to update task", } - if err.Err == influxdb.ErrTaskNotFound { + if err.Err == task.ErrTaskNotFound { err.Code = errors2.ENotFound } h.HandleHTTPError(ctx, err, w) @@ -778,7 +779,7 @@ func (h *TaskHandler) handleUpdateTask(w http.ResponseWriter, r *http.Request) { } type updateTaskRequest struct { - Update influxdb.TaskUpdate + Update task.TaskUpdate TaskID platform.ID } @@ -797,7 +798,7 @@ func decodeUpdateTaskRequest(ctx context.Context, r *http.Request) (*updateTaskR return nil, err } - var upd influxdb.TaskUpdate + var upd task.TaskUpdate if err := json.NewDecoder(r.Body).Decode(&upd); err != nil { return nil, err } @@ -830,7 +831,7 @@ func (h *TaskHandler) handleDeleteTask(w http.ResponseWriter, r *http.Request) { Err: err, Msg: "failed to delete task", } - if err.Err == influxdb.ErrTaskNotFound { + if err.Err == task.ErrTaskNotFound { err.Code = errors2.ENotFound } h.HandleHTTPError(ctx, err, w) @@ -907,7 +908,7 @@ func (h *TaskHandler) handleGetLogs(w http.ResponseWriter, r *http.Request) { Err: err, Msg: "failed to find task logs", } - if err.Err == influxdb.ErrTaskNotFound || err.Err == influxdb.ErrNoRunsFound { + if err.Err == task.ErrTaskNotFound || err.Err == task.ErrNoRunsFound { err.Code = errors2.ENotFound } h.HandleHTTPError(ctx, err, w) @@ -921,11 +922,11 @@ func (h *TaskHandler) handleGetLogs(w http.ResponseWriter, r *http.Request) { } type getLogsRequest struct { - filter influxdb.LogFilter + filter task.LogFilter } type getLogsResponse struct { - Events []*influxdb.Log `json:"events"` + Events []*task.Log `json:"events"` } func decodeGetLogsRequest(ctx context.Context, r *http.Request) (*getLogsRequest, error) { @@ -999,7 +1000,7 @@ func (h *TaskHandler) handleGetRuns(w http.ResponseWriter, r *http.Request) { Err: err, Msg: "failed to find runs", } - if err.Err == influxdb.ErrTaskNotFound || err.Err == influxdb.ErrNoRunsFound { + if err.Err == task.ErrTaskNotFound || err.Err == task.ErrNoRunsFound { err.Code = errors2.ENotFound } h.HandleHTTPError(ctx, err, w) @@ -1013,7 +1014,7 @@ func (h *TaskHandler) handleGetRuns(w http.ResponseWriter, r *http.Request) { } type getRunsRequest struct { - filter influxdb.RunFilter + filter task.RunFilter } func decodeGetRunsRequest(ctx context.Context, r *http.Request) (*getRunsRequest, error) { @@ -1049,8 +1050,8 @@ func decodeGetRunsRequest(ctx context.Context, r *http.Request) (*getRunsRequest return nil, err } - if i < 1 || i > influxdb.TaskMaxPageSize { - return nil, influxdb.ErrOutOfBoundsLimit + if i < 1 || i > task.TaskMaxPageSize { + return nil, task.ErrOutOfBoundsLimit } req.filter.Limit = i } @@ -1103,7 +1104,7 @@ func (h *TaskHandler) handleForceRun(w http.ResponseWriter, r *http.Request) { Err: err, Msg: "failed to force run", } - if err.Err == influxdb.ErrTaskNotFound { + if err.Err == task.ErrTaskNotFound { err.Code = errors2.ENotFound } h.HandleHTTPError(ctx, err, w) @@ -1205,7 +1206,7 @@ func (h *TaskHandler) handleGetRun(w http.ResponseWriter, r *http.Request) { Err: err, Msg: "failed to find run", } - if err.Err == influxdb.ErrTaskNotFound || err.Err == influxdb.ErrRunNotFound { + if err.Err == task.ErrTaskNotFound || err.Err == task.ErrRunNotFound { err.Code = errors2.ENotFound } h.HandleHTTPError(ctx, err, w) @@ -1311,7 +1312,7 @@ func (h *TaskHandler) handleCancelRun(w http.ResponseWriter, r *http.Request) { Err: err, Msg: "failed to cancel run", } - if err.Err == influxdb.ErrTaskNotFound || err.Err == influxdb.ErrRunNotFound { + if err.Err == task.ErrTaskNotFound || err.Err == task.ErrRunNotFound { err.Code = errors2.ENotFound } h.HandleHTTPError(ctx, err, w) @@ -1362,7 +1363,7 @@ func (h *TaskHandler) handleRetryRun(w http.ResponseWriter, r *http.Request) { Err: err, Msg: "failed to retry run", } - if err.Err == influxdb.ErrTaskNotFound || err.Err == influxdb.ErrRunNotFound { + if err.Err == task.ErrTaskNotFound || err.Err == task.ErrRunNotFound { err.Code = errors2.ENotFound } h.HandleHTTPError(ctx, err, w) @@ -1409,7 +1410,7 @@ func decodeRetryRunRequest(ctx context.Context, r *http.Request) (*retryRunReque }, nil } -func (h *TaskHandler) populateTaskCreateOrg(ctx context.Context, tc *influxdb.TaskCreate) error { +func (h *TaskHandler) populateTaskCreateOrg(ctx context.Context, tc *task.TaskCreate) error { if tc.OrganizationID.Valid() && tc.Organization != "" { return nil } @@ -1466,7 +1467,7 @@ type TaskService struct { } // FindTaskByID returns a single task -func (t TaskService) FindTaskByID(ctx context.Context, id platform.ID) (*influxdb.Task, error) { +func (t TaskService) FindTaskByID(ctx context.Context, id platform.ID) (*task.Task, error) { span, _ := tracing.StartSpanFromContext(ctx) defer span.Finish() @@ -1481,7 +1482,7 @@ func (t TaskService) FindTaskByID(ctx context.Context, id platform.ID) (*influxd // FindTasks returns a list of tasks that match a filter (limit 100) and the total count // of matching tasks. -func (t TaskService) FindTasks(ctx context.Context, filter influxdb.TaskFilter) ([]*influxdb.Task, int, error) { +func (t TaskService) FindTasks(ctx context.Context, filter task.TaskFilter) ([]*task.Task, int, error) { span, _ := tracing.StartSpanFromContext(ctx) defer span.Finish() @@ -1522,7 +1523,7 @@ func (t TaskService) FindTasks(ctx context.Context, filter influxdb.TaskFilter) return nil, 0, err } - tasks := make([]*influxdb.Task, len(tr.Tasks)) + tasks := make([]*task.Task, len(tr.Tasks)) for i := range tr.Tasks { tasks[i] = convertTask(tr.Tasks[i].Task) } @@ -1530,7 +1531,7 @@ func (t TaskService) FindTasks(ctx context.Context, filter influxdb.TaskFilter) } // CreateTask creates a new task. -func (t TaskService) CreateTask(ctx context.Context, tc influxdb.TaskCreate) (*influxdb.Task, error) { +func (t TaskService) CreateTask(ctx context.Context, tc task.TaskCreate) (*task.Task, error) { span, _ := tracing.StartSpanFromContext(ctx) defer span.Finish() var tr taskResponse @@ -1547,7 +1548,7 @@ func (t TaskService) CreateTask(ctx context.Context, tc influxdb.TaskCreate) (*i } // UpdateTask updates a single task with changeset. -func (t TaskService) UpdateTask(ctx context.Context, id platform.ID, upd influxdb.TaskUpdate) (*influxdb.Task, error) { +func (t TaskService) UpdateTask(ctx context.Context, id platform.ID, upd task.TaskUpdate) (*task.Task, error) { span, _ := tracing.StartSpanFromContext(ctx) defer span.Finish() @@ -1573,7 +1574,7 @@ func (t TaskService) DeleteTask(ctx context.Context, id platform.ID) error { } // FindLogs returns logs for a run. -func (t TaskService) FindLogs(ctx context.Context, filter influxdb.LogFilter) ([]*influxdb.Log, int, error) { +func (t TaskService) FindLogs(ctx context.Context, filter task.LogFilter) ([]*task.Log, int, error) { span, _ := tracing.StartSpanFromContext(ctx) defer span.Finish() @@ -1602,7 +1603,7 @@ func (t TaskService) FindLogs(ctx context.Context, filter influxdb.LogFilter) ([ } // FindRuns returns a list of runs that match a filter and the total count of returned runs. -func (t TaskService) FindRuns(ctx context.Context, filter influxdb.RunFilter) ([]*influxdb.Run, int, error) { +func (t TaskService) FindRuns(ctx context.Context, filter task.RunFilter) ([]*task.Run, int, error) { span, _ := tracing.StartSpanFromContext(ctx) defer span.Finish() @@ -1616,8 +1617,8 @@ func (t TaskService) FindRuns(ctx context.Context, filter influxdb.RunFilter) ([ params = append(params, [2]string{"after", filter.After.String()}) } - if filter.Limit < 0 || filter.Limit > influxdb.TaskMaxPageSize { - return nil, 0, influxdb.ErrOutOfBoundsLimit + if filter.Limit < 0 || filter.Limit > task.TaskMaxPageSize { + return nil, 0, task.ErrOutOfBoundsLimit } params = append(params, [2]string{"limit", strconv.Itoa(filter.Limit)}) @@ -1632,7 +1633,7 @@ func (t TaskService) FindRuns(ctx context.Context, filter influxdb.RunFilter) ([ return nil, 0, err } - runs := make([]*influxdb.Run, len(rs.Runs)) + runs := make([]*task.Run, len(rs.Runs)) for i := range rs.Runs { runs[i] = convertRun(rs.Runs[i].httpRun) } @@ -1641,7 +1642,7 @@ func (t TaskService) FindRuns(ctx context.Context, filter influxdb.RunFilter) ([ } // FindRunByID returns a single run of a specific task. -func (t TaskService) FindRunByID(ctx context.Context, taskID, runID platform.ID) (*influxdb.Run, error) { +func (t TaskService) FindRunByID(ctx context.Context, taskID, runID platform.ID) (*task.Run, error) { span, _ := tracing.StartSpanFromContext(ctx) defer span.Finish() @@ -1656,7 +1657,7 @@ func (t TaskService) FindRunByID(ctx context.Context, taskID, runID platform.ID) // ErrRunNotFound is expected as part of the FindRunByID contract, // so return that actual error instead of a different error that looks like it. // TODO cleanup backend error implementation - return nil, influxdb.ErrRunNotFound + return nil, task.ErrRunNotFound } return nil, err @@ -1666,7 +1667,7 @@ func (t TaskService) FindRunByID(ctx context.Context, taskID, runID platform.ID) } // RetryRun creates and returns a new run (which is a retry of another run). -func (t TaskService) RetryRun(ctx context.Context, taskID, runID platform.ID) (*influxdb.Run, error) { +func (t TaskService) RetryRun(ctx context.Context, taskID, runID platform.ID) (*task.Run, error) { span, _ := tracing.StartSpanFromContext(ctx) defer span.Finish() @@ -1681,10 +1682,10 @@ func (t TaskService) RetryRun(ctx context.Context, taskID, runID platform.ID) (* // ErrRunNotFound is expected as part of the RetryRun contract, // so return that actual error instead of a different error that looks like it. // TODO cleanup backend task error implementation - return nil, influxdb.ErrRunNotFound + return nil, task.ErrRunNotFound } // RequestStillQueuedError is also part of the contract. - if e := influxdb.ParseRequestStillQueuedError(err.Error()); e != nil { + if e := task.ParseRequestStillQueuedError(err.Error()); e != nil { return nil, *e } @@ -1695,7 +1696,7 @@ func (t TaskService) RetryRun(ctx context.Context, taskID, runID platform.ID) (* } // ForceRun starts a run manually right now. -func (t TaskService) ForceRun(ctx context.Context, taskID platform.ID, scheduledFor int64) (*influxdb.Run, error) { +func (t TaskService) ForceRun(ctx context.Context, taskID platform.ID, scheduledFor int64) (*task.Run, error) { span, _ := tracing.StartSpanFromContext(ctx) defer span.Finish() @@ -1714,11 +1715,11 @@ func (t TaskService) ForceRun(ctx context.Context, taskID platform.ID, scheduled if errors2.ErrorCode(err) == errors2.ENotFound { // ErrRunNotFound is expected as part of the RetryRun contract, // so return that actual error instead of a different error that looks like it. - return nil, influxdb.ErrRunNotFound + return nil, task.ErrRunNotFound } // RequestStillQueuedError is also part of the contract. - if e := influxdb.ParseRequestStillQueuedError(err.Error()); e != nil { + if e := task.ParseRequestStillQueuedError(err.Error()); e != nil { return nil, *e } diff --git a/http/task_service_test.go b/http/task_service_test.go index cc3cfaed5c6..2c60afeebbf 100644 --- a/http/task_service_test.go +++ b/http/task_service_test.go @@ -6,6 +6,7 @@ import ( "encoding/json" "errors" "fmt" + "github.com/influxdata/influxdb/v2/task" "io/ioutil" "net/http" "net/http/httptest" @@ -73,7 +74,7 @@ func NewMockTaskBackend(t *testing.T) *TaskBackend { func TestTaskHandler_handleGetTasks(t *testing.T) { type fields struct { - taskService influxdb.TaskService + taskService task.TaskService labelService influxdb.LabelService } type wants struct { @@ -92,8 +93,8 @@ func TestTaskHandler_handleGetTasks(t *testing.T) { name: "get tasks", fields: fields{ taskService: &mock.TaskService{ - FindTasksFn: func(ctx context.Context, f influxdb.TaskFilter) ([]*influxdb.Task, int, error) { - tasks := []*influxdb.Task{ + FindTasksFn: func(ctx context.Context, f task.TaskFilter) ([]*task.Task, int, error) { + tasks := []*task.Task{ { ID: 1, Name: "task1", @@ -199,8 +200,8 @@ func TestTaskHandler_handleGetTasks(t *testing.T) { getParams: "after=0000000000000001&limit=1", fields: fields{ taskService: &mock.TaskService{ - FindTasksFn: func(ctx context.Context, f influxdb.TaskFilter) ([]*influxdb.Task, int, error) { - tasks := []*influxdb.Task{ + FindTasksFn: func(ctx context.Context, f task.TaskFilter) ([]*task.Task, int, error) { + tasks := []*task.Task{ { ID: 2, Name: "task2", @@ -272,8 +273,8 @@ func TestTaskHandler_handleGetTasks(t *testing.T) { getParams: "org=test2", fields: fields{ taskService: &mock.TaskService{ - FindTasksFn: func(ctx context.Context, f influxdb.TaskFilter) ([]*influxdb.Task, int, error) { - tasks := []*influxdb.Task{ + FindTasksFn: func(ctx context.Context, f task.TaskFilter) ([]*task.Task, int, error) { + tasks := []*task.Task{ { ID: 2, Name: "task2", @@ -344,8 +345,8 @@ func TestTaskHandler_handleGetTasks(t *testing.T) { getParams: "org=non-existent-org", fields: fields{ taskService: &mock.TaskService{ - FindTasksFn: func(ctx context.Context, f influxdb.TaskFilter) ([]*influxdb.Task, int, error) { - tasks := []*influxdb.Task{ + FindTasksFn: func(ctx context.Context, f task.TaskFilter) ([]*task.Task, int, error) { + tasks := []*task.Task{ { ID: 1, Name: "task1", @@ -425,10 +426,10 @@ func TestTaskHandler_handleGetTasks(t *testing.T) { func TestTaskHandler_handlePostTasks(t *testing.T) { type args struct { - taskCreate influxdb.TaskCreate + taskCreate task.TaskCreate } type fields struct { - taskService influxdb.TaskService + taskService task.TaskService } type wants struct { statusCode int @@ -445,15 +446,15 @@ func TestTaskHandler_handlePostTasks(t *testing.T) { { name: "create task", args: args{ - taskCreate: influxdb.TaskCreate{ + taskCreate: task.TaskCreate{ OrganizationID: 1, Flux: "abc", }, }, fields: fields{ taskService: &mock.TaskService{ - CreateTaskFn: func(ctx context.Context, tc influxdb.TaskCreate) (*influxdb.Task, error) { - return &influxdb.Task{ + CreateTaskFn: func(ctx context.Context, tc task.TaskCreate) (*task.Task, error) { + return &task.Task{ ID: 1, Name: "task1", Description: "Brand New Task", @@ -494,14 +495,14 @@ func TestTaskHandler_handlePostTasks(t *testing.T) { { name: "create task - influxdb error creating task", args: args{ - taskCreate: influxdb.TaskCreate{ + taskCreate: task.TaskCreate{ OrganizationID: 1, Flux: "abc", }, }, fields: fields{ taskService: &mock.TaskService{ - CreateTaskFn: func(ctx context.Context, tc influxdb.TaskCreate) (*influxdb.Task, error) { + CreateTaskFn: func(ctx context.Context, tc task.TaskCreate) (*task.Task, error) { return nil, errors2.NewError( errors2.WithErrorErr(errors.New("something went wrong")), errors2.WithErrorMsg("something really went wrong"), @@ -524,14 +525,14 @@ func TestTaskHandler_handlePostTasks(t *testing.T) { { name: "create task - error creating task", args: args{ - taskCreate: influxdb.TaskCreate{ + taskCreate: task.TaskCreate{ OrganizationID: 1, Flux: "abc", }, }, fields: fields{ taskService: &mock.TaskService{ - CreateTaskFn: func(ctx context.Context, tc influxdb.TaskCreate) (*influxdb.Task, error) { + CreateTaskFn: func(ctx context.Context, tc task.TaskCreate) (*task.Task, error) { return nil, errors.New("something bad happened") }, }, @@ -591,7 +592,7 @@ func TestTaskHandler_handlePostTasks(t *testing.T) { func TestTaskHandler_handleGetRun(t *testing.T) { type fields struct { - taskService influxdb.TaskService + taskService task.TaskService } type args struct { taskID platform.ID @@ -613,12 +614,12 @@ func TestTaskHandler_handleGetRun(t *testing.T) { name: "get a run by id", fields: fields{ taskService: &mock.TaskService{ - FindRunByIDFn: func(ctx context.Context, taskID platform.ID, runID platform.ID) (*influxdb.Run, error) { + FindRunByIDFn: func(ctx context.Context, taskID platform.ID, runID platform.ID) (*task.Run, error) { scheduledFor, _ := time.Parse(time.RFC3339, "2018-12-01T17:00:13Z") startedAt, _ := time.Parse(time.RFC3339Nano, "2018-12-01T17:00:03.155645Z") finishedAt, _ := time.Parse(time.RFC3339Nano, "2018-12-01T17:00:13.155645Z") requestedAt, _ := time.Parse(time.RFC3339, "2018-12-01T17:00:13Z") - run := influxdb.Run{ + run := task.Run{ ID: runID, TaskID: taskID, Status: "success", @@ -705,7 +706,7 @@ func TestTaskHandler_handleGetRun(t *testing.T) { func TestTaskHandler_handleGetRuns(t *testing.T) { type fields struct { - taskService influxdb.TaskService + taskService task.TaskService } type args struct { taskID platform.ID @@ -726,12 +727,12 @@ func TestTaskHandler_handleGetRuns(t *testing.T) { name: "get runs by task id", fields: fields{ taskService: &mock.TaskService{ - FindRunsFn: func(ctx context.Context, f influxdb.RunFilter) ([]*influxdb.Run, int, error) { + FindRunsFn: func(ctx context.Context, f task.RunFilter) ([]*task.Run, int, error) { scheduledFor, _ := time.Parse(time.RFC3339, "2018-12-01T17:00:13Z") startedAt, _ := time.Parse(time.RFC3339Nano, "2018-12-01T17:00:03.155645Z") finishedAt, _ := time.Parse(time.RFC3339Nano, "2018-12-01T17:00:13.155645Z") requestedAt, _ := time.Parse(time.RFC3339, "2018-12-01T17:00:13Z") - runs := []*influxdb.Run{ + runs := []*task.Run{ { ID: platform.ID(2), TaskID: f.Task, @@ -875,12 +876,12 @@ func TestTaskHandler_NotFoundStatus(t *testing.T) { { name: "get task", svc: &mock.TaskService{ - FindTaskByIDFn: func(_ context.Context, id platform.ID) (*influxdb.Task, error) { + FindTaskByIDFn: func(_ context.Context, id platform.ID) (*task.Task, error) { if id == taskID { - return &influxdb.Task{ID: taskID, Organization: "o"}, nil + return &task.Task{ID: taskID, Organization: "o"}, nil } - return nil, influxdb.ErrTaskNotFound + return nil, task.ErrTaskNotFound }, }, method: http.MethodGet, @@ -891,12 +892,12 @@ func TestTaskHandler_NotFoundStatus(t *testing.T) { { name: "update task", svc: &mock.TaskService{ - UpdateTaskFn: func(_ context.Context, id platform.ID, _ influxdb.TaskUpdate) (*influxdb.Task, error) { + UpdateTaskFn: func(_ context.Context, id platform.ID, _ task.TaskUpdate) (*task.Task, error) { if id == taskID { - return &influxdb.Task{ID: taskID, Organization: "o"}, nil + return &task.Task{ID: taskID, Organization: "o"}, nil } - return nil, influxdb.ErrTaskNotFound + return nil, task.ErrTaskNotFound }, }, method: http.MethodPatch, @@ -913,7 +914,7 @@ func TestTaskHandler_NotFoundStatus(t *testing.T) { return nil } - return influxdb.ErrTaskNotFound + return task.ErrTaskNotFound }, }, method: http.MethodDelete, @@ -924,12 +925,12 @@ func TestTaskHandler_NotFoundStatus(t *testing.T) { { name: "get task logs", svc: &mock.TaskService{ - FindLogsFn: func(_ context.Context, f influxdb.LogFilter) ([]*influxdb.Log, int, error) { + FindLogsFn: func(_ context.Context, f task.LogFilter) ([]*task.Log, int, error) { if f.Task == taskID { return nil, 0, nil } - return nil, 0, influxdb.ErrTaskNotFound + return nil, 0, task.ErrTaskNotFound }, }, method: http.MethodGet, @@ -940,12 +941,12 @@ func TestTaskHandler_NotFoundStatus(t *testing.T) { { name: "get run logs", svc: &mock.TaskService{ - FindLogsFn: func(_ context.Context, f influxdb.LogFilter) ([]*influxdb.Log, int, error) { + FindLogsFn: func(_ context.Context, f task.LogFilter) ([]*task.Log, int, error) { if f.Task != taskID { - return nil, 0, influxdb.ErrTaskNotFound + return nil, 0, task.ErrTaskNotFound } if *f.Run != runID { - return nil, 0, influxdb.ErrNoRunsFound + return nil, 0, task.ErrNoRunsFound } return nil, 0, nil @@ -959,9 +960,9 @@ func TestTaskHandler_NotFoundStatus(t *testing.T) { { name: "get runs: task not found", svc: &mock.TaskService{ - FindRunsFn: func(_ context.Context, f influxdb.RunFilter) ([]*influxdb.Run, int, error) { + FindRunsFn: func(_ context.Context, f task.RunFilter) ([]*task.Run, int, error) { if f.Task != taskID { - return nil, 0, influxdb.ErrTaskNotFound + return nil, 0, task.ErrTaskNotFound } return nil, 0, nil @@ -975,9 +976,9 @@ func TestTaskHandler_NotFoundStatus(t *testing.T) { { name: "get runs: task found but no runs found", svc: &mock.TaskService{ - FindRunsFn: func(_ context.Context, f influxdb.RunFilter) ([]*influxdb.Run, int, error) { + FindRunsFn: func(_ context.Context, f task.RunFilter) ([]*task.Run, int, error) { if f.Task != taskID { - return nil, 0, influxdb.ErrNoRunsFound + return nil, 0, task.ErrNoRunsFound } return nil, 0, nil @@ -991,12 +992,12 @@ func TestTaskHandler_NotFoundStatus(t *testing.T) { { name: "force run", svc: &mock.TaskService{ - ForceRunFn: func(_ context.Context, tid platform.ID, _ int64) (*influxdb.Run, error) { + ForceRunFn: func(_ context.Context, tid platform.ID, _ int64) (*task.Run, error) { if tid != taskID { - return nil, influxdb.ErrTaskNotFound + return nil, task.ErrTaskNotFound } - return &influxdb.Run{ID: runID, TaskID: taskID, Status: influxdb.RunScheduled.String()}, nil + return &task.Run{ID: runID, TaskID: taskID, Status: task.RunScheduled.String()}, nil }, }, method: http.MethodPost, @@ -1008,15 +1009,15 @@ func TestTaskHandler_NotFoundStatus(t *testing.T) { { name: "get run", svc: &mock.TaskService{ - FindRunByIDFn: func(_ context.Context, tid, rid platform.ID) (*influxdb.Run, error) { + FindRunByIDFn: func(_ context.Context, tid, rid platform.ID) (*task.Run, error) { if tid != taskID { - return nil, influxdb.ErrTaskNotFound + return nil, task.ErrTaskNotFound } if rid != runID { - return nil, influxdb.ErrRunNotFound + return nil, task.ErrRunNotFound } - return &influxdb.Run{ID: runID, TaskID: taskID, Status: influxdb.RunScheduled.String()}, nil + return &task.Run{ID: runID, TaskID: taskID, Status: task.RunScheduled.String()}, nil }, }, method: http.MethodGet, @@ -1027,15 +1028,15 @@ func TestTaskHandler_NotFoundStatus(t *testing.T) { { name: "retry run", svc: &mock.TaskService{ - RetryRunFn: func(_ context.Context, tid, rid platform.ID) (*influxdb.Run, error) { + RetryRunFn: func(_ context.Context, tid, rid platform.ID) (*task.Run, error) { if tid != taskID { - return nil, influxdb.ErrTaskNotFound + return nil, task.ErrTaskNotFound } if rid != runID { - return nil, influxdb.ErrRunNotFound + return nil, task.ErrRunNotFound } - return &influxdb.Run{ID: runID, TaskID: taskID, Status: influxdb.RunScheduled.String()}, nil + return &task.Run{ID: runID, TaskID: taskID, Status: task.RunScheduled.String()}, nil }, }, method: http.MethodPost, @@ -1048,10 +1049,10 @@ func TestTaskHandler_NotFoundStatus(t *testing.T) { svc: &mock.TaskService{ CancelRunFn: func(_ context.Context, tid, rid platform.ID) error { if tid != taskID { - return influxdb.ErrTaskNotFound + return task.ErrTaskNotFound } if rid != runID { - return influxdb.ErrRunNotFound + return task.ErrRunNotFound } return nil @@ -1252,12 +1253,12 @@ func TestTaskHandler_CreateTaskWithOrgName(t *testing.T) { } taskSvc := &mock.TaskService{ - CreateTaskFn: func(_ context.Context, tc influxdb.TaskCreate) (*influxdb.Task, error) { + CreateTaskFn: func(_ context.Context, tc task.TaskCreate) (*task.Task, error) { if tc.OrganizationID != o.ID { t.Fatalf("expected task to be created with org ID %s, got %s", o.ID, tc.OrganizationID) } - return &influxdb.Task{ID: 9, OrganizationID: o.ID, OwnerID: o.ID, Name: "x", Flux: tc.Flux}, nil + return &task.Task{ID: 9, OrganizationID: o.ID, OwnerID: o.ID, Name: "x", Flux: tc.Flux}, nil }, } @@ -1278,7 +1279,7 @@ func TestTaskHandler_CreateTaskWithOrgName(t *testing.T) { url := "http://localhost:8086/api/v2/tasks" - b, err := json.Marshal(influxdb.TaskCreate{ + b, err := json.Marshal(task.TaskCreate{ Flux: script, Organization: o.Name, }) @@ -1305,7 +1306,7 @@ func TestTaskHandler_CreateTaskWithOrgName(t *testing.T) { } // The task should have been created with a valid token. - var createdTask influxdb.Task + var createdTask task.Task if err := json.Unmarshal([]byte(body), &createdTask); err != nil { t.Fatal(err) } @@ -1399,23 +1400,23 @@ func TestTaskHandler_Sessions(t *testing.T) { var findRunsCtx context.Context ts := &mock.TaskService{ - FindRunsFn: func(ctx context.Context, f influxdb.RunFilter) ([]*influxdb.Run, int, error) { + FindRunsFn: func(ctx context.Context, f task.RunFilter) ([]*task.Run, int, error) { findRunsCtx = ctx if f.Task != taskID { t.Fatalf("expected task ID %v, got %v", taskID, f.Task) } - return []*influxdb.Run{ + return []*task.Run{ {ID: runID, TaskID: taskID}, }, 1, nil }, - FindTaskByIDFn: func(ctx context.Context, id platform.ID) (*influxdb.Task, error) { + FindTaskByIDFn: func(ctx context.Context, id platform.ID) (*task.Task, error) { if id != taskID { - return nil, influxdb.ErrTaskNotFound + return nil, task.ErrTaskNotFound } - return &influxdb.Task{ + return &task.Task{ ID: taskID, OrganizationID: o.ID, }, nil @@ -1491,7 +1492,7 @@ func TestTaskHandler_Sessions(t *testing.T) { var findRunByIDCtx context.Context ts := &mock.TaskService{ - FindRunByIDFn: func(ctx context.Context, tid, rid platform.ID) (*influxdb.Run, error) { + FindRunByIDFn: func(ctx context.Context, tid, rid platform.ID) (*task.Run, error) { findRunByIDCtx = ctx if tid != taskID { t.Fatalf("expected task ID %v, got %v", taskID, tid) @@ -1500,15 +1501,15 @@ func TestTaskHandler_Sessions(t *testing.T) { t.Fatalf("expected run ID %v, got %v", runID, rid) } - return &influxdb.Run{ID: runID, TaskID: taskID}, nil + return &task.Run{ID: runID, TaskID: taskID}, nil }, - FindTaskByIDFn: func(ctx context.Context, id platform.ID) (*influxdb.Task, error) { + FindTaskByIDFn: func(ctx context.Context, id platform.ID) (*task.Task, error) { if id != taskID { - return nil, influxdb.ErrTaskNotFound + return nil, task.ErrTaskNotFound } - return &influxdb.Task{ + return &task.Task{ ID: taskID, OrganizationID: o.ID, }, nil @@ -1585,7 +1586,7 @@ func TestTaskHandler_Sessions(t *testing.T) { var findLogsCtx context.Context ts := &mock.TaskService{ - FindLogsFn: func(ctx context.Context, f influxdb.LogFilter) ([]*influxdb.Log, int, error) { + FindLogsFn: func(ctx context.Context, f task.LogFilter) ([]*task.Log, int, error) { findLogsCtx = ctx if f.Task != taskID { t.Fatalf("expected task ID %v, got %v", taskID, f.Task) @@ -1594,16 +1595,16 @@ func TestTaskHandler_Sessions(t *testing.T) { t.Fatalf("expected run ID %v, got %v", runID, *f.Run) } - line := influxdb.Log{Time: "time", Message: "a log line"} - return []*influxdb.Log{&line}, 1, nil + line := task.Log{Time: "time", Message: "a log line"} + return []*task.Log{&line}, 1, nil }, - FindTaskByIDFn: func(ctx context.Context, id platform.ID) (*influxdb.Task, error) { + FindTaskByIDFn: func(ctx context.Context, id platform.ID) (*task.Task, error) { if id != taskID { - return nil, influxdb.ErrTaskNotFound + return nil, task.ErrTaskNotFound } - return &influxdb.Task{ + return &task.Task{ ID: taskID, OrganizationID: o.ID, }, nil @@ -1680,7 +1681,7 @@ func TestTaskHandler_Sessions(t *testing.T) { var retryRunCtx context.Context ts := &mock.TaskService{ - RetryRunFn: func(ctx context.Context, tid, rid platform.ID) (*influxdb.Run, error) { + RetryRunFn: func(ctx context.Context, tid, rid platform.ID) (*task.Run, error) { retryRunCtx = ctx if tid != taskID { t.Fatalf("expected task ID %v, got %v", taskID, tid) @@ -1689,15 +1690,15 @@ func TestTaskHandler_Sessions(t *testing.T) { t.Fatalf("expected run ID %v, got %v", runID, rid) } - return &influxdb.Run{ID: 10 * runID, TaskID: taskID}, nil + return &task.Run{ID: 10 * runID, TaskID: taskID}, nil }, - FindTaskByIDFn: func(ctx context.Context, id platform.ID) (*influxdb.Task, error) { + FindTaskByIDFn: func(ctx context.Context, id platform.ID) (*task.Task, error) { if id != taskID { - return nil, influxdb.ErrTaskNotFound + return nil, task.ErrTaskNotFound } - return &influxdb.Task{ + return &task.Task{ ID: taskID, OrganizationID: o.ID, }, nil diff --git a/internal/resource/resolve.go b/internal/resource/resolve.go index baff55a56be..8f962783204 100644 --- a/internal/resource/resolve.go +++ b/internal/resource/resolve.go @@ -3,6 +3,7 @@ package resource import ( "context" "fmt" + "github.com/influxdata/influxdb/v2/task" "github.com/influxdata/influxdb/v2/kit/platform" "github.com/influxdata/influxdb/v2/kit/platform/errors" @@ -32,7 +33,7 @@ type Resolver struct { FindSourceByID(context.Context, platform.ID) (*influxdb.Source, error) } TaskFinder interface { - FindTaskByID(context.Context, platform.ID) (*influxdb.Task, error) + FindTaskByID(context.Context, platform.ID) (*task.Task, error) } TelegrafConfigFinder interface { FindTelegrafConfigByID(context.Context, platform.ID) (*influxdb.TelegrafConfig, error) diff --git a/kv/migration/all/0003_task_owners.go b/kv/migration/all/0003_task_owners.go index 0aa9f5f44fc..643845f6c70 100644 --- a/kv/migration/all/0003_task_owners.go +++ b/kv/migration/all/0003_task_owners.go @@ -3,6 +3,7 @@ package all import ( "context" "encoding/json" + "github.com/influxdata/influxdb/v2/task" "time" "github.com/influxdata/influxdb/v2/kit/platform" @@ -18,23 +19,23 @@ var taskBucket = []byte("tasksv1") var Migration0003_TaskOwnerIDUpMigration = UpOnlyMigration( "migrate task owner id", func(ctx context.Context, store kv.SchemaStore) error { - var ownerlessTasks []*influxdb.Task + var ownerlessTasks []*task.Task // loop through the tasks and collect a set of tasks that are missing the owner id. err := store.View(ctx, func(tx kv.Tx) error { taskBucket, err := tx.Bucket(taskBucket) if err != nil { - return influxdb.ErrUnexpectedTaskBucketErr(err) + return task.ErrUnexpectedTaskBucketErr(err) } c, err := taskBucket.ForwardCursor([]byte{}) if err != nil { - return influxdb.ErrUnexpectedTaskBucketErr(err) + return task.ErrUnexpectedTaskBucketErr(err) } for k, v := c.Next(); k != nil; k, v = c.Next() { kvTask := &kvTask{} if err := json.Unmarshal(v, kvTask); err != nil { - return influxdb.ErrInternalTaskServiceError(err) + return task.ErrInternalTaskServiceError(err) } t := kvToInfluxTask(kvTask) @@ -63,19 +64,19 @@ var Migration0003_TaskOwnerIDUpMigration = UpOnlyMigration( } b, err := tx.Bucket(taskBucket) if err != nil { - return influxdb.ErrUnexpectedTaskBucketErr(err) + return task.ErrUnexpectedTaskBucketErr(err) } if !t.OwnerID.Valid() { v, err := b.Get(taskKey) if kv.IsNotFound(err) { - return influxdb.ErrTaskNotFound + return task.ErrTaskNotFound } authType := struct { AuthorizationID platform.ID `json:"authorizationID"` }{} if err := json.Unmarshal(v, &authType); err != nil { - return influxdb.ErrInternalTaskServiceError(err) + return task.ErrInternalTaskServiceError(err) } // try populating the owner from auth @@ -143,12 +144,12 @@ var Migration0003_TaskOwnerIDUpMigration = UpOnlyMigration( // save task taskBytes, err := json.Marshal(t) if err != nil { - return influxdb.ErrInternalTaskServiceError(err) + return task.ErrInternalTaskServiceError(err) } err = b.Put(taskKey, taskBytes) if err != nil { - return influxdb.ErrUnexpectedTaskBucketErr(err) + return task.ErrUnexpectedTaskBucketErr(err) } return nil }) @@ -182,8 +183,8 @@ type kvTask struct { Metadata map[string]interface{} `json:"metadata,omitempty"` } -func kvToInfluxTask(k *kvTask) *influxdb.Task { - return &influxdb.Task{ +func kvToInfluxTask(k *kvTask) *task.Task { + return &task.Task{ ID: k.ID, Type: k.Type, OrganizationID: k.OrganizationID, @@ -209,7 +210,7 @@ func kvToInfluxTask(k *kvTask) *influxdb.Task { func taskKey(taskID platform.ID) ([]byte, error) { encodedID, err := taskID.Encode() if err != nil { - return nil, influxdb.ErrInvalidTaskID + return nil, task.ErrInvalidTaskID } return encodedID, nil } diff --git a/kv/task.go b/kv/task.go index 2ee241fcd13..8d6373109ef 100644 --- a/kv/task.go +++ b/kv/task.go @@ -5,6 +5,7 @@ import ( "encoding/json" "errors" "fmt" + "github.com/influxdata/influxdb/v2/task" "strings" "time" @@ -34,7 +35,7 @@ var ( taskIndexBucket = []byte("taskIndexsv1") ) -var _ influxdb.TaskService = (*Service)(nil) +var _ task.TaskService = (*Service)(nil) type kvTask struct { ID platform.ID `json:"id"` @@ -60,8 +61,8 @@ type kvTask struct { Metadata map[string]interface{} `json:"metadata,omitempty"` } -func kvToInfluxTask(k *kvTask) *influxdb.Task { - return &influxdb.Task{ +func kvToInfluxTask(k *kvTask) *task.Task { + return &task.Task{ ID: k.ID, Type: k.Type, OrganizationID: k.OrganizationID, @@ -87,8 +88,8 @@ func kvToInfluxTask(k *kvTask) *influxdb.Task { } // FindTaskByID returns a single task -func (s *Service) FindTaskByID(ctx context.Context, id platform.ID) (*influxdb.Task, error) { - var t *influxdb.Task +func (s *Service) FindTaskByID(ctx context.Context, id platform.ID) (*task.Task, error) { + var t *task.Task err := s.kv.View(ctx, func(tx Tx) error { task, err := s.findTaskByID(ctx, tx, id) if err != nil { @@ -106,7 +107,7 @@ func (s *Service) FindTaskByID(ctx context.Context, id platform.ID) (*influxdb.T // findTaskByID is an internal method used to do any action with tasks internally // that do not require authorization. -func (s *Service) findTaskByID(ctx context.Context, tx Tx, id platform.ID) (*influxdb.Task, error) { +func (s *Service) findTaskByID(ctx context.Context, tx Tx, id platform.ID) (*task.Task, error) { taskKey, err := taskKey(id) if err != nil { return nil, err @@ -114,19 +115,19 @@ func (s *Service) findTaskByID(ctx context.Context, tx Tx, id platform.ID) (*inf b, err := tx.Bucket(taskBucket) if err != nil { - return nil, influxdb.ErrUnexpectedTaskBucketErr(err) + return nil, task.ErrUnexpectedTaskBucketErr(err) } v, err := b.Get(taskKey) if IsNotFound(err) { - return nil, influxdb.ErrTaskNotFound + return nil, task.ErrTaskNotFound } if err != nil { return nil, err } kvTask := &kvTask{} if err := json.Unmarshal(v, kvTask); err != nil { - return nil, influxdb.ErrInternalTaskServiceError(err) + return nil, task.ErrInternalTaskServiceError(err) } t := kvToInfluxTask(kvTask) @@ -140,7 +141,7 @@ func (s *Service) findTaskByID(ctx context.Context, tx Tx, id platform.ID) (*inf // FindTasks returns a list of tasks that match a filter (limit 100) and the total count // of matching tasks. -func (s *Service) FindTasks(ctx context.Context, filter influxdb.TaskFilter) ([]*influxdb.Task, int, error) { +func (s *Service) FindTasks(ctx context.Context, filter task.TaskFilter) ([]*task.Task, int, error) { if filter.Organization != "" { org, err := s.orgs.FindOrganization(ctx, influxdb.OrganizationFilter{ Name: &filter.Organization, @@ -152,7 +153,7 @@ func (s *Service) FindTasks(ctx context.Context, filter influxdb.TaskFilter) ([] filter.OrganizationID = &org.ID } - var ts []*influxdb.Task + var ts []*task.Task err := s.kv.View(ctx, func(tx Tx) error { tasks, _, err := s.findTasks(ctx, tx, filter) if err != nil { @@ -168,16 +169,16 @@ func (s *Service) FindTasks(ctx context.Context, filter influxdb.TaskFilter) ([] return ts, len(ts), nil } -func (s *Service) findTasks(ctx context.Context, tx Tx, filter influxdb.TaskFilter) ([]*influxdb.Task, int, error) { +func (s *Service) findTasks(ctx context.Context, tx Tx, filter task.TaskFilter) ([]*task.Task, int, error) { // complain about limits if filter.Limit < 0 { - return nil, 0, influxdb.ErrPageSizeTooSmall + return nil, 0, task.ErrPageSizeTooSmall } - if filter.Limit > influxdb.TaskMaxPageSize { - return nil, 0, influxdb.ErrPageSizeTooLarge + if filter.Limit > task.TaskMaxPageSize { + return nil, 0, task.ErrPageSizeTooLarge } if filter.Limit == 0 { - filter.Limit = influxdb.TaskDefaultPageSize + filter.Limit = task.TaskDefaultPageSize } // if no user or organization is passed, assume contexts auth is the user we are looking for. @@ -203,12 +204,12 @@ func (s *Service) findTasks(ctx context.Context, tx Tx, filter influxdb.TaskFilt } // findTasksByUser is a subset of the find tasks function. Used for cleanliness -func (s *Service) findTasksByUser(ctx context.Context, tx Tx, filter influxdb.TaskFilter) ([]*influxdb.Task, int, error) { - var ts []*influxdb.Task +func (s *Service) findTasksByUser(ctx context.Context, tx Tx, filter task.TaskFilter) ([]*task.Task, int, error) { + var ts []*task.Task taskBucket, err := tx.Bucket(taskBucket) if err != nil { - return nil, 0, influxdb.ErrUnexpectedTaskBucketErr(err) + return nil, 0, task.ErrUnexpectedTaskBucketErr(err) } var ( @@ -227,7 +228,7 @@ func (s *Service) findTasksByUser(ctx context.Context, tx Tx, filter influxdb.Ta c, err := taskBucket.ForwardCursor(seek, opts...) if err != nil { - return nil, 0, influxdb.ErrUnexpectedTaskBucketErr(err) + return nil, 0, task.ErrUnexpectedTaskBucketErr(err) } matchFn := newTaskMatchFn(filter, nil) @@ -235,7 +236,7 @@ func (s *Service) findTasksByUser(ctx context.Context, tx Tx, filter influxdb.Ta for k, v := c.Next(); k != nil; k, v = c.Next() { kvTask := &kvTask{} if err := json.Unmarshal(v, kvTask); err != nil { - return nil, 0, influxdb.ErrInternalTaskServiceError(err) + return nil, 0, task.ErrInternalTaskServiceError(err) } t := kvToInfluxTask(kvTask) @@ -255,22 +256,22 @@ func (s *Service) findTasksByUser(ctx context.Context, tx Tx, filter influxdb.Ta } // findTasksByOrg is a subset of the find tasks function. Used for cleanliness -func (s *Service) findTasksByOrg(ctx context.Context, tx Tx, orgID platform.ID, filter influxdb.TaskFilter) ([]*influxdb.Task, int, error) { +func (s *Service) findTasksByOrg(ctx context.Context, tx Tx, orgID platform.ID, filter task.TaskFilter) ([]*task.Task, int, error) { var err error if !orgID.Valid() { return nil, 0, fmt.Errorf("finding tasks by organization ID: %w", platform.ErrInvalidID) } - var ts []*influxdb.Task + var ts []*task.Task indexBucket, err := tx.Bucket(taskIndexBucket) if err != nil { - return nil, 0, influxdb.ErrUnexpectedTaskBucketErr(err) + return nil, 0, task.ErrUnexpectedTaskBucketErr(err) } prefix, err := orgID.Encode() if err != nil { - return nil, 0, influxdb.ErrInvalidTaskID + return nil, 0, task.ErrInvalidTaskID } var ( @@ -292,7 +293,7 @@ func (s *Service) findTasksByOrg(ctx context.Context, tx Tx, orgID platform.ID, append(opts, WithCursorPrefix(prefix))..., ) if err != nil { - return nil, 0, influxdb.ErrUnexpectedTaskBucketErr(err) + return nil, 0, task.ErrUnexpectedTaskBucketErr(err) } // free cursor resources @@ -303,12 +304,12 @@ func (s *Service) findTasksByOrg(ctx context.Context, tx Tx, orgID platform.ID, for k, v := c.Next(); k != nil; k, v = c.Next() { id, err := platform.IDFromString(string(v)) if err != nil { - return nil, 0, influxdb.ErrInvalidTaskID + return nil, 0, task.ErrInvalidTaskID } t, err := s.findTaskByID(ctx, tx, *id) if err != nil { - if err == influxdb.ErrTaskNotFound { + if err == task.ErrTaskNotFound { // we might have some crufty index's err = nil continue @@ -333,18 +334,18 @@ func (s *Service) findTasksByOrg(ctx context.Context, tx Tx, orgID platform.ID, return ts, len(ts), c.Err() } -type taskMatchFn func(*influxdb.Task) bool +type taskMatchFn func(*task.Task) bool // newTaskMatchFn returns a function for validating // a task matches the filter. Will return nil if // the filter should match all tasks. -func newTaskMatchFn(f influxdb.TaskFilter, org *influxdb.Organization) func(t *influxdb.Task) bool { +func newTaskMatchFn(f task.TaskFilter, org *influxdb.Organization) func(t *task.Task) bool { var fn taskMatchFn if org != nil { expected := org.ID prevFn := fn - fn = func(t *influxdb.Task) bool { + fn = func(t *task.Task) bool { res := prevFn == nil || prevFn(t) return res && expected == t.OrganizationID } @@ -353,17 +354,17 @@ func newTaskMatchFn(f influxdb.TaskFilter, org *influxdb.Organization) func(t *i if f.Type != nil { expected := *f.Type prevFn := fn - fn = func(t *influxdb.Task) bool { + fn = func(t *task.Task) bool { res := prevFn == nil || prevFn(t) return res && - ((expected == influxdb.TaskSystemType && (t.Type == influxdb.TaskSystemType || t.Type == "")) || expected == t.Type) + ((expected == task.TaskSystemType && (t.Type == task.TaskSystemType || t.Type == "")) || expected == t.Type) } } if f.Name != nil { expected := *f.Name prevFn := fn - fn = func(t *influxdb.Task) bool { + fn = func(t *task.Task) bool { res := prevFn == nil || prevFn(t) return res && (expected == t.Name) } @@ -371,7 +372,7 @@ func newTaskMatchFn(f influxdb.TaskFilter, org *influxdb.Organization) func(t *i if f.Status != nil { prevFn := fn - fn = func(t *influxdb.Task) bool { + fn = func(t *task.Task) bool { res := prevFn == nil || prevFn(t) return res && (t.Status == *f.Status) } @@ -379,7 +380,7 @@ func newTaskMatchFn(f influxdb.TaskFilter, org *influxdb.Organization) func(t *i if f.User != nil { prevFn := fn - fn = func(t *influxdb.Task) bool { + fn = func(t *task.Task) bool { res := prevFn == nil || prevFn(t) return res && t.OwnerID == *f.User } @@ -391,11 +392,11 @@ func newTaskMatchFn(f influxdb.TaskFilter, org *influxdb.Organization) func(t *i // findAllTasks is a subset of the find tasks function. Used for cleanliness. // This function should only be executed internally because it doesn't force organization or user filtering. // Enforcing filters should be done in a validation layer. -func (s *Service) findAllTasks(ctx context.Context, tx Tx, filter influxdb.TaskFilter) ([]*influxdb.Task, int, error) { - var ts []*influxdb.Task +func (s *Service) findAllTasks(ctx context.Context, tx Tx, filter task.TaskFilter) ([]*task.Task, int, error) { + var ts []*task.Task taskBucket, err := tx.Bucket(taskBucket) if err != nil { - return nil, 0, influxdb.ErrUnexpectedTaskBucketErr(err) + return nil, 0, task.ErrUnexpectedTaskBucketErr(err) } var ( @@ -414,7 +415,7 @@ func (s *Service) findAllTasks(ctx context.Context, tx Tx, filter influxdb.TaskF c, err := taskBucket.ForwardCursor(seek, opts...) if err != nil { - return nil, 0, influxdb.ErrUnexpectedTaskBucketErr(err) + return nil, 0, task.ErrUnexpectedTaskBucketErr(err) } // free cursor resources @@ -425,7 +426,7 @@ func (s *Service) findAllTasks(ctx context.Context, tx Tx, filter influxdb.TaskF for k, v := c.Next(); k != nil; k, v = c.Next() { kvTask := &kvTask{} if err := json.Unmarshal(v, kvTask); err != nil { - return nil, 0, influxdb.ErrInternalTaskServiceError(err) + return nil, 0, task.ErrInternalTaskServiceError(err) } t := kvToInfluxTask(kvTask) @@ -448,7 +449,7 @@ func (s *Service) findAllTasks(ctx context.Context, tx Tx, filter influxdb.TaskF // CreateTask creates a new task. // The owner of the task is inferred from the authorizer associated with ctx. -func (s *Service) CreateTask(ctx context.Context, tc influxdb.TaskCreate) (*influxdb.Task, error) { +func (s *Service) CreateTask(ctx context.Context, tc task.TaskCreate) (*task.Task, error) { var orgFilter influxdb.OrganizationFilter if tc.Organization != "" { @@ -465,7 +466,7 @@ func (s *Service) CreateTask(ctx context.Context, tc influxdb.TaskCreate) (*infl return nil, err } - var t *influxdb.Task + var t *task.Task err = s.kv.Update(ctx, func(tx Tx) error { task, err := s.createTask(ctx, tx, org, tc) if err != nil { @@ -478,7 +479,7 @@ func (s *Service) CreateTask(ctx context.Context, tc influxdb.TaskCreate) (*infl return t, err } -func (s *Service) createTask(ctx context.Context, tx Tx, org *influxdb.Organization, tc influxdb.TaskCreate) (*influxdb.Task, error) { +func (s *Service) createTask(ctx context.Context, tx Tx, org *influxdb.Organization, tc task.TaskCreate) (*task.Task, error) { // TODO: Uncomment this once the checks/notifications no longer create tasks in kv // confirm the owner is a real user. // if _, err = s.findUserByID(ctx, tx, tc.OwnerID); err != nil { @@ -487,15 +488,15 @@ func (s *Service) createTask(ctx context.Context, tx Tx, org *influxdb.Organizat opts, err := options.FromScriptAST(s.FluxLanguageService, tc.Flux) if err != nil { - return nil, influxdb.ErrTaskOptionParse(err) + return nil, task.ErrTaskOptionParse(err) } if tc.Status == "" { - tc.Status = string(influxdb.TaskActive) + tc.Status = string(task.TaskActive) } createdAt := s.clock.Now().Truncate(time.Second).UTC() - task := &influxdb.Task{ + task := &task.Task{ ID: s.IDGenerator.ID(), Type: tc.Type, OrganizationID: org.ID, @@ -516,7 +517,7 @@ func (s *Service) createTask(ctx context.Context, tx Tx, org *influxdb.Organizat if opts.Offset != nil { off, err := time.ParseDuration(opts.Offset.String()) if err != nil { - return nil, influxdb.ErrTaskTimeParse(err) + return nil, task.ErrTaskTimeParse(err) } task.Offset = off @@ -524,17 +525,17 @@ func (s *Service) createTask(ctx context.Context, tx Tx, org *influxdb.Organizat taskBucket, err := tx.Bucket(taskBucket) if err != nil { - return nil, influxdb.ErrUnexpectedTaskBucketErr(err) + return nil, task.ErrUnexpectedTaskBucketErr(err) } indexBucket, err := tx.Bucket(taskIndexBucket) if err != nil { - return nil, influxdb.ErrUnexpectedTaskBucketErr(err) + return nil, task.ErrUnexpectedTaskBucketErr(err) } taskBytes, err := json.Marshal(task) if err != nil { - return nil, influxdb.ErrInternalTaskServiceError(err) + return nil, task.ErrInternalTaskServiceError(err) } taskKey, err := taskKey(task.ID) @@ -550,13 +551,13 @@ func (s *Service) createTask(ctx context.Context, tx Tx, org *influxdb.Organizat // write the task err = taskBucket.Put(taskKey, taskBytes) if err != nil { - return nil, influxdb.ErrUnexpectedTaskBucketErr(err) + return nil, task.ErrUnexpectedTaskBucketErr(err) } // write the org index err = indexBucket.Put(orgKey, taskKey) if err != nil { - return nil, influxdb.ErrUnexpectedTaskBucketErr(err) + return nil, task.ErrUnexpectedTaskBucketErr(err) } uid, _ := icontext.GetUserID(ctx) @@ -576,8 +577,8 @@ func (s *Service) createTask(ctx context.Context, tx Tx, org *influxdb.Organizat } // UpdateTask updates a single task with changeset. -func (s *Service) UpdateTask(ctx context.Context, id platform.ID, upd influxdb.TaskUpdate) (*influxdb.Task, error) { - var t *influxdb.Task +func (s *Service) UpdateTask(ctx context.Context, id platform.ID, upd task.TaskUpdate) (*task.Task, error) { + var t *task.Task err := s.kv.Update(ctx, func(tx Tx) error { task, err := s.updateTask(ctx, tx, id, upd) if err != nil { @@ -593,7 +594,7 @@ func (s *Service) UpdateTask(ctx context.Context, id platform.ID, upd influxdb.T return t, nil } -func (s *Service) updateTask(ctx context.Context, tx Tx, id platform.ID, upd influxdb.TaskUpdate) (*influxdb.Task, error) { +func (s *Service) updateTask(ctx context.Context, tx Tx, id platform.ID, upd task.TaskUpdate) (*task.Task, error) { // retrieve the task task, err := s.findTaskByID(ctx, tx, id) if err != nil { @@ -611,7 +612,7 @@ func (s *Service) updateTask(ctx context.Context, tx Tx, id platform.ID, upd inf opts, err := options.FromScriptAST(s.FluxLanguageService, *upd.Flux) if err != nil { - return nil, influxdb.ErrTaskOptionParse(err) + return nil, task.ErrTaskOptionParse(err) } task.Name = opts.Name task.Every = opts.Every.String() @@ -621,7 +622,7 @@ func (s *Service) updateTask(ctx context.Context, tx Tx, id platform.ID, upd inf if opts.Offset != nil { off, err = time.ParseDuration(opts.Offset.String()) if err != nil { - return nil, influxdb.ErrTaskTimeParse(err) + return nil, task.ErrTaskTimeParse(err) } } task.Offset = off @@ -638,7 +639,7 @@ func (s *Service) updateTask(ctx context.Context, tx Tx, id platform.ID, upd inf task.UpdatedAt = updatedAt // task is transitioning from inactive to active, ensure scheduled and completed are updated - if task.Status == influxdb.TaskStatusActive { + if task.Status == task.TaskStatusActive { updatedAtTrunc := updatedAt.Truncate(time.Second).UTC() task.LatestCompleted = updatedAtTrunc task.LatestScheduled = updatedAtTrunc @@ -699,7 +700,7 @@ func (s *Service) updateTask(ctx context.Context, tx Tx, id platform.ID, upd inf // save the updated task bucket, err := tx.Bucket(taskBucket) if err != nil { - return nil, influxdb.ErrUnexpectedTaskBucketErr(err) + return nil, task.ErrUnexpectedTaskBucketErr(err) } key, err := taskKey(id) if err != nil { @@ -708,12 +709,12 @@ func (s *Service) updateTask(ctx context.Context, tx Tx, id platform.ID, upd inf taskBytes, err := json.Marshal(task) if err != nil { - return nil, influxdb.ErrInternalTaskServiceError(err) + return nil, task.ErrInternalTaskServiceError(err) } err = bucket.Put(key, taskBytes) if err != nil { - return nil, influxdb.ErrUnexpectedTaskBucketErr(err) + return nil, task.ErrUnexpectedTaskBucketErr(err) } uid, _ := icontext.GetUserID(ctx) @@ -751,17 +752,17 @@ func (s *Service) DeleteTask(ctx context.Context, id platform.ID) error { func (s *Service) deleteTask(ctx context.Context, tx Tx, id platform.ID) error { taskBucket, err := tx.Bucket(taskBucket) if err != nil { - return influxdb.ErrUnexpectedTaskBucketErr(err) + return task.ErrUnexpectedTaskBucketErr(err) } runBucket, err := tx.Bucket(taskRunBucket) if err != nil { - return influxdb.ErrUnexpectedTaskBucketErr(err) + return task.ErrUnexpectedTaskBucketErr(err) } indexBucket, err := tx.Bucket(taskIndexBucket) if err != nil { - return influxdb.ErrUnexpectedTaskBucketErr(err) + return task.ErrUnexpectedTaskBucketErr(err) } // retrieve the task @@ -777,7 +778,7 @@ func (s *Service) deleteTask(ctx context.Context, tx Tx, id platform.ID) error { } if err := indexBucket.Delete(orgKey); err != nil { - return influxdb.ErrUnexpectedTaskBucketErr(err) + return task.ErrUnexpectedTaskBucketErr(err) } // remove latest completed @@ -787,11 +788,11 @@ func (s *Service) deleteTask(ctx context.Context, tx Tx, id platform.ID) error { } if err := runBucket.Delete(lastCompletedKey); err != nil { - return influxdb.ErrUnexpectedTaskBucketErr(err) + return task.ErrUnexpectedTaskBucketErr(err) } // remove the runs - runs, _, err := s.findRuns(ctx, tx, influxdb.RunFilter{Task: task.ID}) + runs, _, err := s.findRuns(ctx, tx, task.RunFilter{Task: task.ID}) if err != nil { return err } @@ -803,7 +804,7 @@ func (s *Service) deleteTask(ctx context.Context, tx Tx, id platform.ID) error { } if err := runBucket.Delete(key); err != nil { - return influxdb.ErrUnexpectedTaskBucketErr(err) + return task.ErrUnexpectedTaskBucketErr(err) } } // remove the task @@ -813,7 +814,7 @@ func (s *Service) deleteTask(ctx context.Context, tx Tx, id platform.ID) error { } if err := taskBucket.Delete(key); err != nil { - return influxdb.ErrUnexpectedTaskBucketErr(err) + return task.ErrUnexpectedTaskBucketErr(err) } uid, _ := icontext.GetUserID(ctx) @@ -828,8 +829,8 @@ func (s *Service) deleteTask(ctx context.Context, tx Tx, id platform.ID) error { } // FindLogs returns logs for a run. -func (s *Service) FindLogs(ctx context.Context, filter influxdb.LogFilter) ([]*influxdb.Log, int, error) { - var logs []*influxdb.Log +func (s *Service) FindLogs(ctx context.Context, filter task.LogFilter) ([]*task.Log, int, error) { + var logs []*task.Log err := s.kv.View(ctx, func(tx Tx) error { ls, _, err := s.findLogs(ctx, tx, filter) if err != nil { @@ -845,24 +846,24 @@ func (s *Service) FindLogs(ctx context.Context, filter influxdb.LogFilter) ([]*i return logs, len(logs), nil } -func (s *Service) findLogs(ctx context.Context, tx Tx, filter influxdb.LogFilter) ([]*influxdb.Log, int, error) { +func (s *Service) findLogs(ctx context.Context, tx Tx, filter task.LogFilter) ([]*task.Log, int, error) { if filter.Run != nil { r, err := s.findRunByID(ctx, tx, filter.Task, *filter.Run) if err != nil { return nil, 0, err } - rtn := make([]*influxdb.Log, len(r.Log)) + rtn := make([]*task.Log, len(r.Log)) for i := 0; i < len(r.Log); i++ { rtn[i] = &r.Log[i] } return rtn, len(rtn), nil } - runs, _, err := s.findRuns(ctx, tx, influxdb.RunFilter{Task: filter.Task}) + runs, _, err := s.findRuns(ctx, tx, task.RunFilter{Task: filter.Task}) if err != nil { return nil, 0, err } - var logs []*influxdb.Log + var logs []*task.Log for _, run := range runs { for i := 0; i < len(run.Log); i++ { logs = append(logs, &run.Log[i]) @@ -873,8 +874,8 @@ func (s *Service) findLogs(ctx context.Context, tx Tx, filter influxdb.LogFilter } // FindRuns returns a list of runs that match a filter and the total count of returned runs. -func (s *Service) FindRuns(ctx context.Context, filter influxdb.RunFilter) ([]*influxdb.Run, int, error) { - var runs []*influxdb.Run +func (s *Service) FindRuns(ctx context.Context, filter task.RunFilter) ([]*task.Run, int, error) { + var runs []*task.Run err := s.kv.View(ctx, func(tx Tx) error { rs, _, err := s.findRuns(ctx, tx, filter) if err != nil { @@ -890,13 +891,13 @@ func (s *Service) FindRuns(ctx context.Context, filter influxdb.RunFilter) ([]*i return runs, len(runs), nil } -func (s *Service) findRuns(ctx context.Context, tx Tx, filter influxdb.RunFilter) ([]*influxdb.Run, int, error) { +func (s *Service) findRuns(ctx context.Context, tx Tx, filter task.RunFilter) ([]*task.Run, int, error) { if filter.Limit == 0 { - filter.Limit = influxdb.TaskDefaultPageSize + filter.Limit = task.TaskDefaultPageSize } - if filter.Limit < 0 || filter.Limit > influxdb.TaskMaxPageSize { - return nil, 0, influxdb.ErrOutOfBoundsLimit + if filter.Limit < 0 || filter.Limit > task.TaskMaxPageSize { + return nil, 0, task.ErrOutOfBoundsLimit } parsedFilterAfterTime := time.Time{} parsedFilterBeforeTime := time.Now().UTC() @@ -914,7 +915,7 @@ func (s *Service) findRuns(ctx context.Context, tx Tx, filter influxdb.RunFilter } } - var runs []*influxdb.Run + var runs []*task.Run // manual runs manualRuns, err := s.manualRuns(ctx, tx, filter.Task) if err != nil { @@ -947,8 +948,8 @@ func (s *Service) findRuns(ctx context.Context, tx Tx, filter influxdb.RunFilter } // FindRunByID returns a single run. -func (s *Service) FindRunByID(ctx context.Context, taskID, runID platform.ID) (*influxdb.Run, error) { - var run *influxdb.Run +func (s *Service) FindRunByID(ctx context.Context, taskID, runID platform.ID) (*task.Run, error) { + var run *task.Run err := s.kv.View(ctx, func(tx Tx) error { r, err := s.findRunByID(ctx, tx, taskID, runID) if err != nil { @@ -964,10 +965,10 @@ func (s *Service) FindRunByID(ctx context.Context, taskID, runID platform.ID) (* return run, nil } -func (s *Service) findRunByID(ctx context.Context, tx Tx, taskID, runID platform.ID) (*influxdb.Run, error) { +func (s *Service) findRunByID(ctx context.Context, tx Tx, taskID, runID platform.ID) (*task.Run, error) { bucket, err := tx.Bucket(taskRunBucket) if err != nil { - return nil, influxdb.ErrUnexpectedTaskBucketErr(err) + return nil, task.ErrUnexpectedTaskBucketErr(err) } key, err := taskRunKey(taskID, runID) @@ -977,14 +978,14 @@ func (s *Service) findRunByID(ctx context.Context, tx Tx, taskID, runID platform runBytes, err := bucket.Get(key) if err != nil { if IsNotFound(err) { - return nil, influxdb.ErrRunNotFound + return nil, task.ErrRunNotFound } - return nil, influxdb.ErrUnexpectedTaskBucketErr(err) + return nil, task.ErrUnexpectedTaskBucketErr(err) } - run := &influxdb.Run{} + run := &task.Run{} err = json.Unmarshal(runBytes, run) if err != nil { - return nil, influxdb.ErrInternalTaskServiceError(err) + return nil, task.ErrInternalTaskServiceError(err) } return run, nil @@ -1015,12 +1016,12 @@ func (s *Service) cancelRun(ctx context.Context, tx Tx, taskID, runID platform.I // save bucket, err := tx.Bucket(taskRunBucket) if err != nil { - return influxdb.ErrUnexpectedTaskBucketErr(err) + return task.ErrUnexpectedTaskBucketErr(err) } runBytes, err := json.Marshal(run) if err != nil { - return influxdb.ErrInternalTaskServiceError(err) + return task.ErrInternalTaskServiceError(err) } runKey, err := taskRunKey(taskID, runID) @@ -1029,15 +1030,15 @@ func (s *Service) cancelRun(ctx context.Context, tx Tx, taskID, runID platform.I } if err := bucket.Put(runKey, runBytes); err != nil { - return influxdb.ErrUnexpectedTaskBucketErr(err) + return task.ErrUnexpectedTaskBucketErr(err) } return nil } // RetryRun creates and returns a new run (which is a retry of another run). -func (s *Service) RetryRun(ctx context.Context, taskID, runID platform.ID) (*influxdb.Run, error) { - var r *influxdb.Run +func (s *Service) RetryRun(ctx context.Context, taskID, runID platform.ID) (*task.Run, error) { + var r *task.Run err := s.kv.Update(ctx, func(tx Tx) error { run, err := s.retryRun(ctx, tx, taskID, runID) if err != nil { @@ -1049,7 +1050,7 @@ func (s *Service) RetryRun(ctx context.Context, taskID, runID platform.ID) (*inf return r, err } -func (s *Service) retryRun(ctx context.Context, tx Tx, taskID, runID platform.ID) (*influxdb.Run, error) { +func (s *Service) retryRun(ctx context.Context, tx Tx, taskID, runID platform.ID) (*task.Run, error) { // find the run r, err := s.findRunByID(ctx, tx, taskID, runID) if err != nil { @@ -1057,7 +1058,7 @@ func (s *Service) retryRun(ctx context.Context, tx Tx, taskID, runID platform.ID } r.ID = s.IDGenerator.ID() - r.Status = influxdb.RunScheduled.String() + r.Status = task.RunScheduled.String() r.StartedAt = time.Time{} r.FinishedAt = time.Time{} r.RequestedAt = time.Time{} @@ -1065,7 +1066,7 @@ func (s *Service) retryRun(ctx context.Context, tx Tx, taskID, runID platform.ID // add a clean copy of the run to the manual runs bucket, err := tx.Bucket(taskRunBucket) if err != nil { - return nil, influxdb.ErrUnexpectedTaskBucketErr(err) + return nil, task.ErrUnexpectedTaskBucketErr(err) } key, err := taskManualRunKey(taskID) @@ -1073,19 +1074,19 @@ func (s *Service) retryRun(ctx context.Context, tx Tx, taskID, runID platform.ID return nil, err } - runs := []*influxdb.Run{} + runs := []*task.Run{} runsBytes, err := bucket.Get(key) if err != nil { if err != ErrKeyNotFound { - return nil, influxdb.ErrRunNotFound + return nil, task.ErrRunNotFound } - return nil, influxdb.ErrUnexpectedTaskBucketErr(err) + return nil, task.ErrUnexpectedTaskBucketErr(err) } if runsBytes != nil { if err := json.Unmarshal(runsBytes, &runs); err != nil { - return nil, influxdb.ErrInternalTaskServiceError(err) + return nil, task.ErrInternalTaskServiceError(err) } } @@ -1094,11 +1095,11 @@ func (s *Service) retryRun(ctx context.Context, tx Tx, taskID, runID platform.ID // save manual runs runsBytes, err = json.Marshal(runs) if err != nil { - return nil, influxdb.ErrInternalTaskServiceError(err) + return nil, task.ErrInternalTaskServiceError(err) } if err := bucket.Put(key, runsBytes); err != nil { - return nil, influxdb.ErrUnexpectedTaskBucketErr(err) + return nil, task.ErrUnexpectedTaskBucketErr(err) } return r, nil @@ -1106,8 +1107,8 @@ func (s *Service) retryRun(ctx context.Context, tx Tx, taskID, runID platform.ID // ForceRun forces a run to occur with unix timestamp scheduledFor, to be executed as soon as possible. // The value of scheduledFor may or may not align with the task's schedule. -func (s *Service) ForceRun(ctx context.Context, taskID platform.ID, scheduledFor int64) (*influxdb.Run, error) { - var r *influxdb.Run +func (s *Service) ForceRun(ctx context.Context, taskID platform.ID, scheduledFor int64) (*task.Run, error) { + var r *task.Run err := s.kv.Update(ctx, func(tx Tx) error { run, err := s.forceRun(ctx, tx, taskID, scheduledFor) if err != nil { @@ -1119,22 +1120,22 @@ func (s *Service) ForceRun(ctx context.Context, taskID platform.ID, scheduledFor return r, err } -func (s *Service) forceRun(ctx context.Context, tx Tx, taskID platform.ID, scheduledFor int64) (*influxdb.Run, error) { +func (s *Service) forceRun(ctx context.Context, tx Tx, taskID platform.ID, scheduledFor int64) (*task.Run, error) { // create a run t := time.Unix(scheduledFor, 0).UTC() - r := &influxdb.Run{ + r := &task.Run{ ID: s.IDGenerator.ID(), TaskID: taskID, - Status: influxdb.RunScheduled.String(), + Status: task.RunScheduled.String(), RequestedAt: time.Now().UTC(), ScheduledFor: t, - Log: []influxdb.Log{}, + Log: []task.Log{}, } // add a clean copy of the run to the manual runs bucket, err := tx.Bucket(taskRunBucket) if err != nil { - return nil, influxdb.ErrUnexpectedTaskBucketErr(err) + return nil, task.ErrUnexpectedTaskBucketErr(err) } runs, err := s.manualRuns(ctx, tx, taskID) @@ -1145,7 +1146,7 @@ func (s *Service) forceRun(ctx context.Context, tx Tx, taskID platform.ID, sched // check to see if this run is already queued for _, run := range runs { if run.ScheduledFor == r.ScheduledFor { - return nil, influxdb.ErrTaskRunAlreadyQueued + return nil, task.ErrTaskRunAlreadyQueued } } runs = append(runs, r) @@ -1153,7 +1154,7 @@ func (s *Service) forceRun(ctx context.Context, tx Tx, taskID platform.ID, sched // save manual runs runsBytes, err := json.Marshal(runs) if err != nil { - return nil, influxdb.ErrInternalTaskServiceError(err) + return nil, task.ErrInternalTaskServiceError(err) } key, err := taskManualRunKey(taskID) @@ -1162,15 +1163,15 @@ func (s *Service) forceRun(ctx context.Context, tx Tx, taskID platform.ID, sched } if err := bucket.Put(key, runsBytes); err != nil { - return nil, influxdb.ErrUnexpectedTaskBucketErr(err) + return nil, task.ErrUnexpectedTaskBucketErr(err) } return r, nil } // CreateRun creates a run with a scheduledFor time as now. -func (s *Service) CreateRun(ctx context.Context, taskID platform.ID, scheduledFor time.Time, runAt time.Time) (*influxdb.Run, error) { - var r *influxdb.Run +func (s *Service) CreateRun(ctx context.Context, taskID platform.ID, scheduledFor time.Time, runAt time.Time) (*task.Run, error) { + var r *task.Run err := s.kv.Update(ctx, func(tx Tx) error { run, err := s.createRun(ctx, tx, taskID, scheduledFor, runAt) if err != nil { @@ -1181,27 +1182,27 @@ func (s *Service) CreateRun(ctx context.Context, taskID platform.ID, scheduledFo }) return r, err } -func (s *Service) createRun(ctx context.Context, tx Tx, taskID platform.ID, scheduledFor time.Time, runAt time.Time) (*influxdb.Run, error) { +func (s *Service) createRun(ctx context.Context, tx Tx, taskID platform.ID, scheduledFor time.Time, runAt time.Time) (*task.Run, error) { id := s.IDGenerator.ID() t := time.Unix(scheduledFor.Unix(), 0).UTC() - run := influxdb.Run{ + run := task.Run{ ID: id, TaskID: taskID, ScheduledFor: t, RunAt: runAt, - Status: influxdb.RunScheduled.String(), - Log: []influxdb.Log{}, + Status: task.RunScheduled.String(), + Log: []task.Log{}, } b, err := tx.Bucket(taskRunBucket) if err != nil { - return nil, influxdb.ErrUnexpectedTaskBucketErr(err) + return nil, task.ErrUnexpectedTaskBucketErr(err) } runBytes, err := json.Marshal(run) if err != nil { - return nil, influxdb.ErrInternalTaskServiceError(err) + return nil, task.ErrInternalTaskServiceError(err) } runKey, err := taskRunKey(taskID, run.ID) @@ -1209,14 +1210,14 @@ func (s *Service) createRun(ctx context.Context, tx Tx, taskID platform.ID, sche return nil, err } if err := b.Put(runKey, runBytes); err != nil { - return nil, influxdb.ErrUnexpectedTaskBucketErr(err) + return nil, task.ErrUnexpectedTaskBucketErr(err) } return &run, nil } -func (s *Service) CurrentlyRunning(ctx context.Context, taskID platform.ID) ([]*influxdb.Run, error) { - var runs []*influxdb.Run +func (s *Service) CurrentlyRunning(ctx context.Context, taskID platform.ID) ([]*task.Run, error) { + var runs []*task.Run err := s.kv.View(ctx, func(tx Tx) error { rs, err := s.currentlyRunning(ctx, tx, taskID) if err != nil { @@ -1232,17 +1233,17 @@ func (s *Service) CurrentlyRunning(ctx context.Context, taskID platform.ID) ([]* return runs, nil } -func (s *Service) currentlyRunning(ctx context.Context, tx Tx, taskID platform.ID) ([]*influxdb.Run, error) { +func (s *Service) currentlyRunning(ctx context.Context, tx Tx, taskID platform.ID) ([]*task.Run, error) { bucket, err := tx.Bucket(taskRunBucket) if err != nil { - return nil, influxdb.ErrUnexpectedTaskBucketErr(err) + return nil, task.ErrUnexpectedTaskBucketErr(err) } c, err := bucket.Cursor(WithCursorHintPrefix(taskID.String())) if err != nil { - return nil, influxdb.ErrUnexpectedTaskBucketErr(err) + return nil, task.ErrUnexpectedTaskBucketErr(err) } - var runs []*influxdb.Run + var runs []*task.Run taskKey, err := taskKey(taskID) if err != nil { @@ -1258,9 +1259,9 @@ func (s *Service) currentlyRunning(ctx context.Context, tx Tx, taskID platform.I k, v = c.Next() continue } - r := &influxdb.Run{} + r := &task.Run{} if err := json.Unmarshal(v, r); err != nil { - return nil, influxdb.ErrInternalTaskServiceError(err) + return nil, task.ErrInternalTaskServiceError(err) } // if the run no longer belongs to the task we are done @@ -1273,8 +1274,8 @@ func (s *Service) currentlyRunning(ctx context.Context, tx Tx, taskID platform.I return runs, nil } -func (s *Service) ManualRuns(ctx context.Context, taskID platform.ID) ([]*influxdb.Run, error) { - var runs []*influxdb.Run +func (s *Service) ManualRuns(ctx context.Context, taskID platform.ID) ([]*task.Run, error) { + var runs []*task.Run err := s.kv.View(ctx, func(tx Tx) error { rs, err := s.manualRuns(ctx, tx, taskID) if err != nil { @@ -1290,32 +1291,32 @@ func (s *Service) ManualRuns(ctx context.Context, taskID platform.ID) ([]*influx return runs, nil } -func (s *Service) manualRuns(ctx context.Context, tx Tx, taskID platform.ID) ([]*influxdb.Run, error) { +func (s *Service) manualRuns(ctx context.Context, tx Tx, taskID platform.ID) ([]*task.Run, error) { b, err := tx.Bucket(taskRunBucket) if err != nil { - return nil, influxdb.ErrUnexpectedTaskBucketErr(err) + return nil, task.ErrUnexpectedTaskBucketErr(err) } key, err := taskManualRunKey(taskID) if err != nil { return nil, err } - runs := []*influxdb.Run{} + runs := []*task.Run{} val, err := b.Get(key) if err != nil { if err == ErrKeyNotFound { return runs, nil } - return nil, influxdb.ErrUnexpectedTaskBucketErr(err) + return nil, task.ErrUnexpectedTaskBucketErr(err) } if err := json.Unmarshal(val, &runs); err != nil { - return nil, influxdb.ErrInternalTaskServiceError(err) + return nil, task.ErrInternalTaskServiceError(err) } return runs, nil } -func (s *Service) StartManualRun(ctx context.Context, taskID, runID platform.ID) (*influxdb.Run, error) { - var r *influxdb.Run +func (s *Service) StartManualRun(ctx context.Context, taskID, runID platform.ID) (*task.Run, error) { + var r *task.Run err := s.kv.Update(ctx, func(tx Tx) error { run, err := s.startManualRun(ctx, tx, taskID, runID) if err != nil { @@ -1327,18 +1328,18 @@ func (s *Service) StartManualRun(ctx context.Context, taskID, runID platform.ID) return r, err } -func (s *Service) startManualRun(ctx context.Context, tx Tx, taskID, runID platform.ID) (*influxdb.Run, error) { +func (s *Service) startManualRun(ctx context.Context, tx Tx, taskID, runID platform.ID) (*task.Run, error) { mRuns, err := s.manualRuns(ctx, tx, taskID) if err != nil { - return nil, influxdb.ErrRunNotFound + return nil, task.ErrRunNotFound } if len(mRuns) < 1 { - return nil, influxdb.ErrRunNotFound + return nil, task.ErrRunNotFound } - var run *influxdb.Run + var run *task.Run for i, r := range mRuns { if r.ID == runID { run = r @@ -1346,13 +1347,13 @@ func (s *Service) startManualRun(ctx context.Context, tx Tx, taskID, runID platf } } if run == nil { - return nil, influxdb.ErrRunNotFound + return nil, task.ErrRunNotFound } // save manual runs mRunsBytes, err := json.Marshal(mRuns) if err != nil { - return nil, influxdb.ErrInternalTaskServiceError(err) + return nil, task.ErrInternalTaskServiceError(err) } runsKey, err := taskManualRunKey(taskID) @@ -1362,17 +1363,17 @@ func (s *Service) startManualRun(ctx context.Context, tx Tx, taskID, runID platf b, err := tx.Bucket(taskRunBucket) if err != nil { - return nil, influxdb.ErrUnexpectedTaskBucketErr(err) + return nil, task.ErrUnexpectedTaskBucketErr(err) } if err := b.Put(runsKey, mRunsBytes); err != nil { - return nil, influxdb.ErrUnexpectedTaskBucketErr(err) + return nil, task.ErrUnexpectedTaskBucketErr(err) } // add mRun to the list of currently running mRunBytes, err := json.Marshal(run) if err != nil { - return nil, influxdb.ErrInternalTaskServiceError(err) + return nil, task.ErrInternalTaskServiceError(err) } runKey, err := taskRunKey(taskID, run.ID) @@ -1381,15 +1382,15 @@ func (s *Service) startManualRun(ctx context.Context, tx Tx, taskID, runID platf } if err := b.Put(runKey, mRunBytes); err != nil { - return nil, influxdb.ErrUnexpectedTaskBucketErr(err) + return nil, task.ErrUnexpectedTaskBucketErr(err) } return run, nil } // FinishRun removes runID from the list of running tasks and if its `now` is later then last completed update it. -func (s *Service) FinishRun(ctx context.Context, taskID, runID platform.ID) (*influxdb.Run, error) { - var run *influxdb.Run +func (s *Service) FinishRun(ctx context.Context, taskID, runID platform.ID) (*task.Run, error) { + var run *task.Run err := s.kv.Update(ctx, func(tx Tx) error { r, err := s.finishRun(ctx, tx, taskID, runID) if err != nil { @@ -1401,7 +1402,7 @@ func (s *Service) FinishRun(ctx context.Context, taskID, runID platform.ID) (*in return run, err } -func (s *Service) finishRun(ctx context.Context, tx Tx, taskID, runID platform.ID) (*influxdb.Run, error) { +func (s *Service) finishRun(ctx context.Context, tx Tx, taskID, runID platform.ID) (*task.Run, error) { // get the run r, err := s.findRunByID(ctx, tx, taskID, runID) if err != nil { @@ -1419,7 +1420,7 @@ func (s *Service) finishRun(ctx context.Context, tx Tx, taskID, runID platform.I latestSuccess = &scheduled } - _, err = s.updateTask(ctx, tx, taskID, influxdb.TaskUpdate{ + _, err = s.updateTask(ctx, tx, taskID, task.TaskUpdate{ LatestCompleted: &scheduled, LatestSuccess: latestSuccess, LatestFailure: latestFailure, @@ -1444,21 +1445,21 @@ func (s *Service) finishRun(ctx context.Context, tx Tx, taskID, runID platform.I // remove run bucket, err := tx.Bucket(taskRunBucket) if err != nil { - return nil, influxdb.ErrUnexpectedTaskBucketErr(err) + return nil, task.ErrUnexpectedTaskBucketErr(err) } key, err := taskRunKey(taskID, runID) if err != nil { return nil, err } if err := bucket.Delete(key); err != nil { - return nil, influxdb.ErrUnexpectedTaskBucketErr(err) + return nil, task.ErrUnexpectedTaskBucketErr(err) } return r, nil } // UpdateRunState sets the run state at the respective time. -func (s *Service) UpdateRunState(ctx context.Context, taskID, runID platform.ID, when time.Time, state influxdb.RunStatus) error { +func (s *Service) UpdateRunState(ctx context.Context, taskID, runID platform.ID, when time.Time, state task.RunStatus) error { err := s.kv.Update(ctx, func(tx Tx) error { err := s.updateRunState(ctx, tx, taskID, runID, when, state) if err != nil { @@ -1469,7 +1470,7 @@ func (s *Service) UpdateRunState(ctx context.Context, taskID, runID platform.ID, return err } -func (s *Service) updateRunState(ctx context.Context, tx Tx, taskID, runID platform.ID, when time.Time, state influxdb.RunStatus) error { +func (s *Service) updateRunState(ctx context.Context, tx Tx, taskID, runID platform.ID, when time.Time, state task.RunStatus) error { // find run run, err := s.findRunByID(ctx, tx, taskID, runID) if err != nil { @@ -1479,21 +1480,21 @@ func (s *Service) updateRunState(ctx context.Context, tx Tx, taskID, runID platf // update state run.Status = state.String() switch state { - case influxdb.RunStarted: + case task.RunStarted: run.StartedAt = when - case influxdb.RunSuccess, influxdb.RunFail, influxdb.RunCanceled: + case task.RunSuccess, task.RunFail, task.RunCanceled: run.FinishedAt = when } // save run b, err := tx.Bucket(taskRunBucket) if err != nil { - return influxdb.ErrUnexpectedTaskBucketErr(err) + return task.ErrUnexpectedTaskBucketErr(err) } runBytes, err := json.Marshal(run) if err != nil { - return influxdb.ErrInternalTaskServiceError(err) + return task.ErrInternalTaskServiceError(err) } runKey, err := taskRunKey(taskID, run.ID) @@ -1501,7 +1502,7 @@ func (s *Service) updateRunState(ctx context.Context, tx Tx, taskID, runID platf return err } if err := b.Put(runKey, runBytes); err != nil { - return influxdb.ErrUnexpectedTaskBucketErr(err) + return task.ErrUnexpectedTaskBucketErr(err) } return nil @@ -1526,17 +1527,17 @@ func (s *Service) addRunLog(ctx context.Context, tx Tx, taskID, runID platform.I return err } // update log - l := influxdb.Log{RunID: runID, Time: when.Format(time.RFC3339Nano), Message: log} + l := task.Log{RunID: runID, Time: when.Format(time.RFC3339Nano), Message: log} run.Log = append(run.Log, l) // save run b, err := tx.Bucket(taskRunBucket) if err != nil { - return influxdb.ErrUnexpectedTaskBucketErr(err) + return task.ErrUnexpectedTaskBucketErr(err) } runBytes, err := json.Marshal(run) if err != nil { - return influxdb.ErrInternalTaskServiceError(err) + return task.ErrInternalTaskServiceError(err) } runKey, err := taskRunKey(taskID, run.ID) @@ -1545,7 +1546,7 @@ func (s *Service) addRunLog(ctx context.Context, tx Tx, taskID, runID platform.I } if err := b.Put(runKey, runBytes); err != nil { - return influxdb.ErrUnexpectedTaskBucketErr(err) + return task.ErrUnexpectedTaskBucketErr(err) } return nil @@ -1554,7 +1555,7 @@ func (s *Service) addRunLog(ctx context.Context, tx Tx, taskID, runID platform.I func taskKey(taskID platform.ID) ([]byte, error) { encodedID, err := taskID.Encode() if err != nil { - return nil, influxdb.ErrInvalidTaskID + return nil, task.ErrInvalidTaskID } return encodedID, nil } @@ -1562,7 +1563,7 @@ func taskKey(taskID platform.ID) ([]byte, error) { func taskLatestCompletedKey(taskID platform.ID) ([]byte, error) { encodedID, err := taskID.Encode() if err != nil { - return nil, influxdb.ErrInvalidTaskID + return nil, task.ErrInvalidTaskID } return []byte(string(encodedID) + "/latestCompleted"), nil } @@ -1570,7 +1571,7 @@ func taskLatestCompletedKey(taskID platform.ID) ([]byte, error) { func taskManualRunKey(taskID platform.ID) ([]byte, error) { encodedID, err := taskID.Encode() if err != nil { - return nil, influxdb.ErrInvalidTaskID + return nil, task.ErrInvalidTaskID } return []byte(string(encodedID) + "/manualRuns"), nil } @@ -1578,11 +1579,11 @@ func taskManualRunKey(taskID platform.ID) ([]byte, error) { func taskOrgKey(orgID, taskID platform.ID) ([]byte, error) { encodedOrgID, err := orgID.Encode() if err != nil { - return nil, influxdb.ErrInvalidTaskID + return nil, task.ErrInvalidTaskID } encodedID, err := taskID.Encode() if err != nil { - return nil, influxdb.ErrInvalidTaskID + return nil, task.ErrInvalidTaskID } return []byte(string(encodedOrgID) + "/" + string(encodedID)), nil @@ -1591,11 +1592,11 @@ func taskOrgKey(orgID, taskID platform.ID) ([]byte, error) { func taskRunKey(taskID, runID platform.ID) ([]byte, error) { encodedID, err := taskID.Encode() if err != nil { - return nil, influxdb.ErrInvalidTaskID + return nil, task.ErrInvalidTaskID } encodedRunID, err := runID.Encode() if err != nil { - return nil, influxdb.ErrInvalidTaskID + return nil, task.ErrInvalidTaskID } return []byte(string(encodedID) + "/" + string(encodedRunID)), nil diff --git a/kv/task_private_test.go b/kv/task_private_test.go index 3aea01ec797..bf6893f9d02 100644 --- a/kv/task_private_test.go +++ b/kv/task_private_test.go @@ -1,6 +1,7 @@ package kv import ( + "github.com/influxdata/influxdb/v2/task" "testing" "github.com/influxdata/influxdb/v2/kit/platform" @@ -10,8 +11,8 @@ import ( ) func Test_newTaskMatchFN(t *testing.T) { - ct := func(typ string, name string) *influxdb.Task { - return &influxdb.Task{ + ct := func(typ string, name string) *task.Task { + return &task.Task{ Type: typ, OrganizationID: 1, Name: name, @@ -27,7 +28,7 @@ func Test_newTaskMatchFN(t *testing.T) { newMatch := func(orgID platform.ID, typ string, name string) taskMatchFn { var ( org *influxdb.Organization - fil influxdb.TaskFilter + fil task.TaskFilter ) if orgID != NoOrg { @@ -47,7 +48,7 @@ func Test_newTaskMatchFN(t *testing.T) { type test struct { name string - task *influxdb.Task + task *task.Task fn taskMatchFn exp bool } @@ -61,13 +62,13 @@ func Test_newTaskMatchFN(t *testing.T) { []test{ { name: "equal", - task: ct(influxdb.TaskSystemType, "Foo"), + task: ct(task.TaskSystemType, "Foo"), fn: newMatch(1, NoTyp, NoNam), exp: true, }, { name: "not org", - task: ct(influxdb.TaskSystemType, "Foo"), + task: ct(task.TaskSystemType, "Foo"), fn: newMatch(2, NoTyp, NoNam), exp: false, }, @@ -79,13 +80,13 @@ func Test_newTaskMatchFN(t *testing.T) { { name: "empty with system type", task: ct("", "Foo"), - fn: newMatch(NoOrg, influxdb.TaskSystemType, NoNam), + fn: newMatch(NoOrg, task.TaskSystemType, NoNam), exp: true, }, { name: "system with system type", - task: ct(influxdb.TaskSystemType, "Foo"), - fn: newMatch(NoOrg, influxdb.TaskSystemType, NoNam), + task: ct(task.TaskSystemType, "Foo"), + fn: newMatch(NoOrg, task.TaskSystemType, NoNam), exp: true, }, { @@ -96,7 +97,7 @@ func Test_newTaskMatchFN(t *testing.T) { }, { name: "not type", - task: ct(influxdb.TaskSystemType, "Foo"), + task: ct(task.TaskSystemType, "Foo"), fn: newMatch(NoOrg, "other type", NoNam), exp: false, }, @@ -107,13 +108,13 @@ func Test_newTaskMatchFN(t *testing.T) { []test{ { name: "equal", - task: ct(influxdb.TaskSystemType, "Foo"), + task: ct(task.TaskSystemType, "Foo"), fn: newMatch(NoOrg, NoTyp, "Foo"), exp: true, }, { name: "not name", - task: ct(influxdb.TaskSystemType, "Foo"), + task: ct(task.TaskSystemType, "Foo"), fn: newMatch(NoOrg, NoTyp, "Bar"), exp: false, }, @@ -124,26 +125,26 @@ func Test_newTaskMatchFN(t *testing.T) { []test{ { name: "equal", - task: ct(influxdb.TaskSystemType, "Foo"), - fn: newMatch(1, influxdb.TaskSystemType, NoNam), + task: ct(task.TaskSystemType, "Foo"), + fn: newMatch(1, task.TaskSystemType, NoNam), exp: true, }, { name: "not type", - task: ct(influxdb.TaskSystemType, "Foo"), + task: ct(task.TaskSystemType, "Foo"), fn: newMatch(1, "wrong type", NoNam), exp: false, }, { name: "not org", - task: ct(influxdb.TaskSystemType, "Foo"), - fn: newMatch(2, influxdb.TaskSystemType, NoNam), + task: ct(task.TaskSystemType, "Foo"), + fn: newMatch(2, task.TaskSystemType, NoNam), exp: false, }, { name: "not org and type", task: ct("check", "Foo"), - fn: newMatch(2, influxdb.TaskSystemType, NoNam), + fn: newMatch(2, task.TaskSystemType, NoNam), exp: false, }, }, @@ -153,13 +154,13 @@ func Test_newTaskMatchFN(t *testing.T) { []test{ { name: "equal", - task: ct(influxdb.TaskSystemType, "Foo"), + task: ct(task.TaskSystemType, "Foo"), fn: newMatch(1, NoTyp, "Foo"), exp: true, }, { name: "not org", - task: ct(influxdb.TaskSystemType, "Foo"), + task: ct(task.TaskSystemType, "Foo"), fn: newMatch(2, NoTyp, "Foo"), exp: false, }, @@ -208,7 +209,7 @@ func Test_newTaskMatchFN(t *testing.T) { } t.Run("match returns nil for no filter", func(t *testing.T) { - fn := newTaskMatchFn(influxdb.TaskFilter{}, nil) + fn := newTaskMatchFn(task.TaskFilter{}, nil) if fn != nil { t.Error("expected nil") } diff --git a/kv/task_test.go b/kv/task_test.go index baa647558cf..0d73bc33884 100644 --- a/kv/task_test.go +++ b/kv/task_test.go @@ -5,6 +5,7 @@ import ( "context" "encoding/json" "github.com/influxdata/influxdb/v2/kit/platform" + task2 "github.com/influxdata/influxdb/v2/task" "testing" "time" @@ -150,11 +151,11 @@ func TestRetrieveTaskWithBadAuth(t *testing.T) { ctx = icontext.SetAuthorizer(ctx, &ts.Auth) - task, err := ts.Service.CreateTask(ctx, influxdb.TaskCreate{ + task, err := ts.Service.CreateTask(ctx, task2.TaskCreate{ Flux: `option task = {name: "a task",every: 1h} from(bucket:"test") |> range(start:-1h)`, OrganizationID: ts.Org.ID, OwnerID: ts.User.ID, - Status: string(influxdb.TaskActive), + Status: string(task2.TaskActive), }) if err != nil { t.Fatal(err) @@ -196,7 +197,7 @@ func TestRetrieveTaskWithBadAuth(t *testing.T) { t.Fatal("miss matching taskID's") } - tasks, _, err := ts.Service.FindTasks(context.Background(), influxdb.TaskFilter{}) + tasks, _, err := ts.Service.FindTasks(context.Background(), task2.TaskFilter{}) if err != nil { t.Fatal(err) } @@ -205,8 +206,8 @@ func TestRetrieveTaskWithBadAuth(t *testing.T) { } // test status filter - active := string(influxdb.TaskActive) - tasksWithActiveFilter, _, err := ts.Service.FindTasks(context.Background(), influxdb.TaskFilter{Status: &active}) + active := string(task2.TaskActive) + tasksWithActiveFilter, _, err := ts.Service.FindTasks(context.Background(), task2.TaskFilter{Status: &active}) if err != nil { t.Fatal("could not find tasks") } @@ -227,20 +228,20 @@ func TestService_UpdateTask_InactiveToActive(t *testing.T) { ctx = icontext.SetAuthorizer(ctx, &ts.Auth) - originalTask, err := ts.Service.CreateTask(ctx, influxdb.TaskCreate{ + originalTask, err := ts.Service.CreateTask(ctx, task2.TaskCreate{ Flux: `option task = {name: "a task",every: 1h} from(bucket:"test") |> range(start:-1h)`, OrganizationID: ts.Org.ID, OwnerID: ts.User.ID, - Status: string(influxdb.TaskActive), + Status: string(task2.TaskActive), }) if err != nil { t.Fatal("CreateTask", err) } - v := influxdb.TaskStatusInactive + v := task2.TaskStatusInactive c.Add(1 * time.Second) exp := c.Now() - updatedTask, err := ts.Service.UpdateTask(ctx, originalTask.ID, influxdb.TaskUpdate{Status: &v, LatestCompleted: &exp, LatestScheduled: &exp}) + updatedTask, err := ts.Service.UpdateTask(ctx, originalTask.ID, task2.TaskUpdate{Status: &v, LatestCompleted: &exp, LatestScheduled: &exp}) if err != nil { t.Fatal("UpdateTask", err) } @@ -254,8 +255,8 @@ func TestService_UpdateTask_InactiveToActive(t *testing.T) { c.Add(10 * time.Second) exp = c.Now() - v = influxdb.TaskStatusActive - updatedTask, err = ts.Service.UpdateTask(ctx, originalTask.ID, influxdb.TaskUpdate{Status: &v}) + v = task2.TaskStatusActive + updatedTask, err = ts.Service.UpdateTask(ctx, originalTask.ID, task2.TaskUpdate{Status: &v}) if err != nil { t.Fatal("UpdateTask", err) } @@ -315,7 +316,7 @@ func TestTaskRunCancellation(t *testing.T) { ctx = icontext.SetAuthorizer(ctx, &authz) - task, err := service.CreateTask(ctx, influxdb.TaskCreate{ + task, err := service.CreateTask(ctx, task2.TaskCreate{ Flux: `option task = {name: "a task",cron: "0 * * * *", offset: 20s} from(bucket:"test") |> range(start:-1h)`, OrganizationID: o.ID, OwnerID: u.ID, @@ -338,7 +339,7 @@ func TestTaskRunCancellation(t *testing.T) { t.Fatal(err) } - if canceled.Status != influxdb.RunCanceled.String() { + if canceled.Status != task2.RunCanceled.String() { t.Fatalf("expected task run to be cancelled") } } @@ -355,11 +356,11 @@ func TestService_UpdateTask_RecordLatestSuccessAndFailure(t *testing.T) { ctx = icontext.SetAuthorizer(ctx, &ts.Auth) - originalTask, err := ts.Service.CreateTask(ctx, influxdb.TaskCreate{ + originalTask, err := ts.Service.CreateTask(ctx, task2.TaskCreate{ Flux: `option task = {name: "a task",every: 1h} from(bucket:"test") |> range(start:-1h)`, OrganizationID: ts.Org.ID, OwnerID: ts.User.ID, - Status: string(influxdb.TaskActive), + Status: string(task2.TaskActive), }) if err != nil { t.Fatal("CreateTask", err) @@ -367,7 +368,7 @@ func TestService_UpdateTask_RecordLatestSuccessAndFailure(t *testing.T) { c.Add(1 * time.Second) exp := c.Now() - updatedTask, err := ts.Service.UpdateTask(ctx, originalTask.ID, influxdb.TaskUpdate{ + updatedTask, err := ts.Service.UpdateTask(ctx, originalTask.ID, task2.TaskUpdate{ LatestCompleted: &exp, LatestScheduled: &exp, @@ -395,7 +396,7 @@ func TestService_UpdateTask_RecordLatestSuccessAndFailure(t *testing.T) { c.Add(5 * time.Second) exp = c.Now() - updatedTask, err = ts.Service.UpdateTask(ctx, originalTask.ID, influxdb.TaskUpdate{ + updatedTask, err = ts.Service.UpdateTask(ctx, originalTask.ID, task2.TaskUpdate{ LatestCompleted: &exp, LatestScheduled: &exp, diff --git a/mock/task_service.go b/mock/task_service.go index b2d18e951ce..b7bf9140523 100644 --- a/mock/task_service.go +++ b/mock/task_service.go @@ -2,96 +2,96 @@ package mock import ( "context" + "github.com/influxdata/influxdb/v2/task" "time" "github.com/influxdata/influxdb/v2/kit/platform" - "github.com/influxdata/influxdb/v2" "github.com/influxdata/influxdb/v2/task/backend" ) -var _ influxdb.TaskService = (*TaskService)(nil) +var _ task.TaskService = (*TaskService)(nil) var _ backend.TaskControlService = (*TaskControlService)(nil) type TaskService struct { - FindTaskByIDFn func(context.Context, platform.ID) (*influxdb.Task, error) + FindTaskByIDFn func(context.Context, platform.ID) (*task.Task, error) FindTaskByIDCalls SafeCount - FindTasksFn func(context.Context, influxdb.TaskFilter) ([]*influxdb.Task, int, error) + FindTasksFn func(context.Context, task.TaskFilter) ([]*task.Task, int, error) FindTasksCalls SafeCount - CreateTaskFn func(context.Context, influxdb.TaskCreate) (*influxdb.Task, error) + CreateTaskFn func(context.Context, task.TaskCreate) (*task.Task, error) CreateTaskCalls SafeCount - UpdateTaskFn func(context.Context, platform.ID, influxdb.TaskUpdate) (*influxdb.Task, error) + UpdateTaskFn func(context.Context, platform.ID, task.TaskUpdate) (*task.Task, error) UpdateTaskCalls SafeCount DeleteTaskFn func(context.Context, platform.ID) error DeleteTaskCalls SafeCount - FindLogsFn func(context.Context, influxdb.LogFilter) ([]*influxdb.Log, int, error) + FindLogsFn func(context.Context, task.LogFilter) ([]*task.Log, int, error) FindLogsCalls SafeCount - FindRunsFn func(context.Context, influxdb.RunFilter) ([]*influxdb.Run, int, error) + FindRunsFn func(context.Context, task.RunFilter) ([]*task.Run, int, error) FindRunsCalls SafeCount - FindRunByIDFn func(context.Context, platform.ID, platform.ID) (*influxdb.Run, error) + FindRunByIDFn func(context.Context, platform.ID, platform.ID) (*task.Run, error) FindRunByIDCalls SafeCount CancelRunFn func(context.Context, platform.ID, platform.ID) error CancelRunCalls SafeCount - RetryRunFn func(context.Context, platform.ID, platform.ID) (*influxdb.Run, error) + RetryRunFn func(context.Context, platform.ID, platform.ID) (*task.Run, error) RetryRunCalls SafeCount - ForceRunFn func(context.Context, platform.ID, int64) (*influxdb.Run, error) + ForceRunFn func(context.Context, platform.ID, int64) (*task.Run, error) ForceRunCalls SafeCount } func NewTaskService() *TaskService { return &TaskService{ - FindTaskByIDFn: func(ctx context.Context, id platform.ID) (*influxdb.Task, error) { + FindTaskByIDFn: func(ctx context.Context, id platform.ID) (*task.Task, error) { return nil, nil }, - FindTasksFn: func(ctx context.Context, f influxdb.TaskFilter) ([]*influxdb.Task, int, error) { + FindTasksFn: func(ctx context.Context, f task.TaskFilter) ([]*task.Task, int, error) { return nil, 0, nil }, - CreateTaskFn: func(ctx context.Context, taskCreate influxdb.TaskCreate) (*influxdb.Task, error) { + CreateTaskFn: func(ctx context.Context, taskCreate task.TaskCreate) (*task.Task, error) { return nil, nil }, - UpdateTaskFn: func(ctx context.Context, id platform.ID, update influxdb.TaskUpdate) (*influxdb.Task, error) { + UpdateTaskFn: func(ctx context.Context, id platform.ID, update task.TaskUpdate) (*task.Task, error) { return nil, nil }, DeleteTaskFn: func(ctx context.Context, id platform.ID) error { return nil }, - FindLogsFn: func(ctx context.Context, f influxdb.LogFilter) ([]*influxdb.Log, int, error) { + FindLogsFn: func(ctx context.Context, f task.LogFilter) ([]*task.Log, int, error) { return nil, 0, nil }, - FindRunsFn: func(ctx context.Context, f influxdb.RunFilter) ([]*influxdb.Run, int, error) { + FindRunsFn: func(ctx context.Context, f task.RunFilter) ([]*task.Run, int, error) { return nil, 0, nil }, - FindRunByIDFn: func(ctx context.Context, id platform.ID, id2 platform.ID) (*influxdb.Run, error) { + FindRunByIDFn: func(ctx context.Context, id platform.ID, id2 platform.ID) (*task.Run, error) { return nil, nil }, CancelRunFn: func(ctx context.Context, id platform.ID, id2 platform.ID) error { return nil }, - RetryRunFn: func(ctx context.Context, id platform.ID, id2 platform.ID) (*influxdb.Run, error) { + RetryRunFn: func(ctx context.Context, id platform.ID, id2 platform.ID) (*task.Run, error) { return nil, nil }, - ForceRunFn: func(ctx context.Context, id platform.ID, i int64) (*influxdb.Run, error) { + ForceRunFn: func(ctx context.Context, id platform.ID, i int64) (*task.Run, error) { return nil, nil }, } } -func (s *TaskService) FindTaskByID(ctx context.Context, id platform.ID) (*influxdb.Task, error) { +func (s *TaskService) FindTaskByID(ctx context.Context, id platform.ID) (*task.Task, error) { defer s.FindTaskByIDCalls.IncrFn()() return s.FindTaskByIDFn(ctx, id) } -func (s *TaskService) FindTasks(ctx context.Context, filter influxdb.TaskFilter) ([]*influxdb.Task, int, error) { +func (s *TaskService) FindTasks(ctx context.Context, filter task.TaskFilter) ([]*task.Task, int, error) { defer s.FindTasksCalls.IncrFn()() return s.FindTasksFn(ctx, filter) } -func (s *TaskService) CreateTask(ctx context.Context, t influxdb.TaskCreate) (*influxdb.Task, error) { +func (s *TaskService) CreateTask(ctx context.Context, t task.TaskCreate) (*task.Task, error) { defer s.CreateTaskCalls.IncrFn()() return s.CreateTaskFn(ctx, t) } -func (s *TaskService) UpdateTask(ctx context.Context, id platform.ID, upd influxdb.TaskUpdate) (*influxdb.Task, error) { +func (s *TaskService) UpdateTask(ctx context.Context, id platform.ID, upd task.TaskUpdate) (*task.Task, error) { defer s.UpdateTaskCalls.IncrFn()() return s.UpdateTaskFn(ctx, id, upd) } @@ -101,17 +101,17 @@ func (s *TaskService) DeleteTask(ctx context.Context, id platform.ID) error { return s.DeleteTaskFn(ctx, id) } -func (s *TaskService) FindLogs(ctx context.Context, filter influxdb.LogFilter) ([]*influxdb.Log, int, error) { +func (s *TaskService) FindLogs(ctx context.Context, filter task.LogFilter) ([]*task.Log, int, error) { defer s.FindLogsCalls.IncrFn()() return s.FindLogsFn(ctx, filter) } -func (s *TaskService) FindRuns(ctx context.Context, filter influxdb.RunFilter) ([]*influxdb.Run, int, error) { +func (s *TaskService) FindRuns(ctx context.Context, filter task.RunFilter) ([]*task.Run, int, error) { defer s.FindRunsCalls.IncrFn()() return s.FindRunsFn(ctx, filter) } -func (s *TaskService) FindRunByID(ctx context.Context, taskID, runID platform.ID) (*influxdb.Run, error) { +func (s *TaskService) FindRunByID(ctx context.Context, taskID, runID platform.ID) (*task.Run, error) { defer s.FindRunByIDCalls.IncrFn()() return s.FindRunByIDFn(ctx, taskID, runID) } @@ -121,42 +121,42 @@ func (s *TaskService) CancelRun(ctx context.Context, taskID, runID platform.ID) return s.CancelRunFn(ctx, taskID, runID) } -func (s *TaskService) RetryRun(ctx context.Context, taskID, runID platform.ID) (*influxdb.Run, error) { +func (s *TaskService) RetryRun(ctx context.Context, taskID, runID platform.ID) (*task.Run, error) { defer s.RetryRunCalls.IncrFn()() return s.RetryRunFn(ctx, taskID, runID) } -func (s *TaskService) ForceRun(ctx context.Context, taskID platform.ID, scheduledFor int64) (*influxdb.Run, error) { +func (s *TaskService) ForceRun(ctx context.Context, taskID platform.ID, scheduledFor int64) (*task.Run, error) { defer s.ForceRunCalls.IncrFn()() return s.ForceRunFn(ctx, taskID, scheduledFor) } type TaskControlService struct { - CreateRunFn func(ctx context.Context, taskID platform.ID, scheduledFor time.Time, runAt time.Time) (*influxdb.Run, error) - CurrentlyRunningFn func(ctx context.Context, taskID platform.ID) ([]*influxdb.Run, error) - ManualRunsFn func(ctx context.Context, taskID platform.ID) ([]*influxdb.Run, error) - StartManualRunFn func(ctx context.Context, taskID, runID platform.ID) (*influxdb.Run, error) - FinishRunFn func(ctx context.Context, taskID, runID platform.ID) (*influxdb.Run, error) - UpdateRunStateFn func(ctx context.Context, taskID, runID platform.ID, when time.Time, state influxdb.RunStatus) error + CreateRunFn func(ctx context.Context, taskID platform.ID, scheduledFor time.Time, runAt time.Time) (*task.Run, error) + CurrentlyRunningFn func(ctx context.Context, taskID platform.ID) ([]*task.Run, error) + ManualRunsFn func(ctx context.Context, taskID platform.ID) ([]*task.Run, error) + StartManualRunFn func(ctx context.Context, taskID, runID platform.ID) (*task.Run, error) + FinishRunFn func(ctx context.Context, taskID, runID platform.ID) (*task.Run, error) + UpdateRunStateFn func(ctx context.Context, taskID, runID platform.ID, when time.Time, state task.RunStatus) error AddRunLogFn func(ctx context.Context, taskID, runID platform.ID, when time.Time, log string) error } -func (tcs *TaskControlService) CreateRun(ctx context.Context, taskID platform.ID, scheduledFor time.Time, runAt time.Time) (*influxdb.Run, error) { +func (tcs *TaskControlService) CreateRun(ctx context.Context, taskID platform.ID, scheduledFor time.Time, runAt time.Time) (*task.Run, error) { return tcs.CreateRunFn(ctx, taskID, scheduledFor, runAt) } -func (tcs *TaskControlService) CurrentlyRunning(ctx context.Context, taskID platform.ID) ([]*influxdb.Run, error) { +func (tcs *TaskControlService) CurrentlyRunning(ctx context.Context, taskID platform.ID) ([]*task.Run, error) { return tcs.CurrentlyRunningFn(ctx, taskID) } -func (tcs *TaskControlService) ManualRuns(ctx context.Context, taskID platform.ID) ([]*influxdb.Run, error) { +func (tcs *TaskControlService) ManualRuns(ctx context.Context, taskID platform.ID) ([]*task.Run, error) { return tcs.ManualRunsFn(ctx, taskID) } -func (tcs *TaskControlService) StartManualRun(ctx context.Context, taskID, runID platform.ID) (*influxdb.Run, error) { +func (tcs *TaskControlService) StartManualRun(ctx context.Context, taskID, runID platform.ID) (*task.Run, error) { return tcs.StartManualRunFn(ctx, taskID, runID) } -func (tcs *TaskControlService) FinishRun(ctx context.Context, taskID, runID platform.ID) (*influxdb.Run, error) { +func (tcs *TaskControlService) FinishRun(ctx context.Context, taskID, runID platform.ID) (*task.Run, error) { return tcs.FinishRunFn(ctx, taskID, runID) } -func (tcs *TaskControlService) UpdateRunState(ctx context.Context, taskID, runID platform.ID, when time.Time, state influxdb.RunStatus) error { +func (tcs *TaskControlService) UpdateRunState(ctx context.Context, taskID, runID platform.ID, when time.Time, state task.RunStatus) error { return tcs.UpdateRunStateFn(ctx, taskID, runID, when, state) } func (tcs *TaskControlService) AddRunLog(ctx context.Context, taskID, runID platform.ID, when time.Time, log string) error { diff --git a/notification/rule/service/service.go b/notification/rule/service/service.go index a2dd88393dd..2fb78b91f0c 100644 --- a/notification/rule/service/service.go +++ b/notification/rule/service/service.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "fmt" + "github.com/influxdata/influxdb/v2/task" "github.com/influxdata/influxdb/v2/kit/platform" "github.com/influxdata/influxdb/v2/kit/platform/errors" @@ -39,7 +40,7 @@ type RuleService struct { log *zap.Logger kv kv.Store - tasks influxdb.TaskService + tasks task.TaskService orgs influxdb.OrganizationService endpoints influxdb.NotificationEndpointService @@ -48,7 +49,7 @@ type RuleService struct { } // New constructs and configures a notification rule service -func New(logger *zap.Logger, store kv.Store, tasks influxdb.TaskService, orgs influxdb.OrganizationService, endpoints influxdb.NotificationEndpointService) (*RuleService, error) { +func New(logger *zap.Logger, store kv.Store, tasks task.TaskService, orgs influxdb.OrganizationService, endpoints influxdb.NotificationEndpointService) (*RuleService, error) { s := &RuleService{ log: logger, kv: store, @@ -138,7 +139,7 @@ func (s *RuleService) CreateNotificationRule(ctx context.Context, nr influxdb.No } // set task to notification rule create status - _, err = s.tasks.UpdateTask(ctx, t.ID, influxdb.TaskUpdate{Status: pointer.String(string(nr.Status))}) + _, err = s.tasks.UpdateTask(ctx, t.ID, task.TaskUpdate{Status: pointer.String(string(nr.Status))}) return err } @@ -154,7 +155,7 @@ func (s *RuleService) createNotificationRule(ctx context.Context, tx kv.Tx, nr i return s.putNotificationRule(ctx, tx, nr.NotificationRule) } -func (s *RuleService) createNotificationTask(ctx context.Context, r influxdb.NotificationRuleCreate) (*influxdb.Task, error) { +func (s *RuleService) createNotificationTask(ctx context.Context, r influxdb.NotificationRuleCreate) (*task.Task, error) { ep, err := s.endpoints.FindNotificationEndpointByID(ctx, r.GetEndpointID()) if err != nil { return nil, err @@ -165,7 +166,7 @@ func (s *RuleService) createNotificationTask(ctx context.Context, r influxdb.Not return nil, err } - tc := influxdb.TaskCreate{ + tc := task.TaskCreate{ Type: r.Type(), Flux: script, OwnerID: r.GetOwnerID(), @@ -218,7 +219,7 @@ func (s *RuleService) UpdateNotificationRule(ctx context.Context, id platform.ID return nr.NotificationRule, err } -func (s *RuleService) updateNotificationTask(ctx context.Context, r influxdb.NotificationRule, status *string) (*influxdb.Task, error) { +func (s *RuleService) updateNotificationTask(ctx context.Context, r influxdb.NotificationRule, status *string) (*task.Task, error) { ep, err := s.endpoints.FindNotificationEndpointByID(ctx, r.GetEndpointID()) if err != nil { return nil, err @@ -229,7 +230,7 @@ func (s *RuleService) updateNotificationTask(ctx context.Context, r influxdb.Not return nil, err } - tu := influxdb.TaskUpdate{ + tu := task.TaskUpdate{ Flux: &script, Description: pointer.String(r.GetDescription()), Status: status, diff --git a/notification/rule/service/service_external_test.go b/notification/rule/service/service_external_test.go index 835ff531c58..db9e3df4ce3 100644 --- a/notification/rule/service/service_external_test.go +++ b/notification/rule/service/service_external_test.go @@ -3,6 +3,7 @@ package service import ( "bytes" "context" + "github.com/influxdata/influxdb/v2/task" "reflect" "sort" "testing" @@ -45,7 +46,7 @@ type NotificationRuleFields struct { TimeGenerator influxdb.TimeGenerator NotificationRules []influxdb.NotificationRule Orgs []*influxdb.Organization - Tasks []influxdb.TaskCreate + Tasks []task.TaskCreate Endpoints []influxdb.NotificationEndpoint } @@ -66,14 +67,14 @@ var taskCmpOptions = cmp.Options{ }), // skip comparing permissions cmpopts.IgnoreFields( - influxdb.Task{}, + task.Task{}, "LatestCompleted", "LatestScheduled", "CreatedAt", "UpdatedAt", ), - cmp.Transformer("Sort", func(in []*influxdb.Task) []*influxdb.Task { - out := append([]*influxdb.Task{}, in...) // Copy input to avoid mutating it + cmp.Transformer("Sort", func(in []*task.Task) []*task.Task { + out := append([]*task.Task{}, in...) // Copy input to avoid mutating it sort.Slice(out, func(i, j int) bool { return out[i].ID > out[j].ID }) @@ -81,7 +82,7 @@ var taskCmpOptions = cmp.Options{ }), } -type notificationRuleFactory func(NotificationRuleFields, *testing.T) (influxdb.NotificationRuleStore, influxdb.TaskService, func()) +type notificationRuleFactory func(NotificationRuleFields, *testing.T) (influxdb.NotificationRuleStore, task.TaskService, func()) // NotificationRuleStore tests all the service functions. func NotificationRuleStore( @@ -135,7 +136,7 @@ func CreateNotificationRule( type wants struct { err error notificationRule influxdb.NotificationRule - task *influxdb.Task + task *task.Task } tests := []struct { @@ -287,7 +288,7 @@ func CreateNotificationRule( }, MessageTemplate: "msg1", }, - task: &influxdb.Task{ + task: &task.Task{ ID: MustIDBase16("020f755c3c082001"), Type: "slack", OrganizationID: MustIDBase16("020f755c3c082003"), @@ -453,7 +454,7 @@ func CreateNotificationRule( if tt.wants.task == nil || !tt.wants.task.ID.Valid() { // if not tasks or a task with an invalid ID is provided (0) then assume // no tasks should be persisted - _, n, err := tasks.FindTasks(ctx, influxdb.TaskFilter{}) + _, n, err := tasks.FindTasks(ctx, task.TaskFilter{}) if err != nil { t.Fatal(err) } @@ -1323,7 +1324,7 @@ func UpdateNotificationRule( fields: NotificationRuleFields{ TimeGenerator: fakeGenerator, IDGenerator: mock.NewIDGenerator(twoID, t), - Tasks: []influxdb.TaskCreate{ + Tasks: []task.TaskCreate{ { OwnerID: MustIDBase16(sixID), OrganizationID: MustIDBase16(fourID), @@ -1558,7 +1559,7 @@ func PatchNotificationRule( fields: NotificationRuleFields{ TimeGenerator: fakeGenerator, IDGenerator: mock.NewIDGenerator(twoID, t), - Tasks: []influxdb.TaskCreate{ + Tasks: []task.TaskCreate{ { OwnerID: MustIDBase16(sixID), OrganizationID: MustIDBase16(fourID), @@ -1683,7 +1684,7 @@ func PatchNotificationRule( fields: NotificationRuleFields{ TimeGenerator: fakeGenerator, IDGenerator: mock.NewIDGenerator(twoID, t), - Tasks: []influxdb.TaskCreate{ + Tasks: []task.TaskCreate{ { OwnerID: MustIDBase16(sixID), OrganizationID: MustIDBase16(fourID), @@ -1933,7 +1934,7 @@ func DeleteNotificationRule( name: "none existing config", fields: NotificationRuleFields{ IDGenerator: mock.NewIDGenerator(twoID, t), - Tasks: []influxdb.TaskCreate{ + Tasks: []task.TaskCreate{ { OwnerID: MustIDBase16(sixID), OrganizationID: MustIDBase16(fourID), @@ -2038,7 +2039,7 @@ func DeleteNotificationRule( { name: "regular delete", fields: NotificationRuleFields{ - Tasks: []influxdb.TaskCreate{ + Tasks: []task.TaskCreate{ { OwnerID: MustIDBase16(sixID), OrganizationID: MustIDBase16(fourID), diff --git a/notification/rule/service/service_test.go b/notification/rule/service/service_test.go index d1d69a9518d..dd68c6b3047 100644 --- a/notification/rule/service/service_test.go +++ b/notification/rule/service/service_test.go @@ -3,6 +3,7 @@ package service import ( "context" "errors" + "github.com/influxdata/influxdb/v2/task" "io/ioutil" "os" "testing" @@ -28,7 +29,7 @@ func TestInmemNotificationRuleStore(t *testing.T) { NotificationRuleStore(initInmemNotificationRuleStore, t) } -func initInmemNotificationRuleStore(f NotificationRuleFields, t *testing.T) (influxdb.NotificationRuleStore, influxdb.TaskService, func()) { +func initInmemNotificationRuleStore(f NotificationRuleFields, t *testing.T) (influxdb.NotificationRuleStore, task.TaskService, func()) { store := inmem.NewKVStore() if err := all.Up(context.Background(), zaptest.NewLogger(t), store); err != nil { t.Fatal(err) @@ -40,7 +41,7 @@ func initInmemNotificationRuleStore(f NotificationRuleFields, t *testing.T) (inf } } -func initBoltNotificationRuleStore(f NotificationRuleFields, t *testing.T) (influxdb.NotificationRuleStore, influxdb.TaskService, func()) { +func initBoltNotificationRuleStore(f NotificationRuleFields, t *testing.T) (influxdb.NotificationRuleStore, task.TaskService, func()) { store, closeBolt, err := newTestBoltStore(t) if err != nil { t.Fatal(err) @@ -57,7 +58,7 @@ func TestBoltNotificationRuleStore(t *testing.T) { NotificationRuleStore(initBoltNotificationRuleStore, t) } -func initNotificationRuleStore(s kv.Store, f NotificationRuleFields, t *testing.T) (influxdb.NotificationRuleStore, influxdb.TaskService, func()) { +func initNotificationRuleStore(s kv.Store, f NotificationRuleFields, t *testing.T) (influxdb.NotificationRuleStore, task.TaskService, func()) { logger := zaptest.NewLogger(t) var ( diff --git a/pkger/clone_resource.go b/pkger/clone_resource.go index efdeeb72bdc..47ac812076f 100644 --- a/pkger/clone_resource.go +++ b/pkger/clone_resource.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + task2 "github.com/influxdata/influxdb/v2/task" "regexp" "sort" "strings" @@ -90,7 +91,7 @@ type resourceExporter struct { labelSVC influxdb.LabelService endpointSVC influxdb.NotificationEndpointService ruleSVC influxdb.NotificationRuleStore - taskSVC influxdb.TaskService + taskSVC task2.TaskService teleSVC influxdb.TelegrafConfigStore varSVC influxdb.VariableService @@ -401,7 +402,7 @@ func (ex *resourceExporter) resourceCloneToKind(ctx context.Context, r ResourceT } mapResource(t.OrganizationID, t.ID, KindTask, TaskToObject(r.Name, *t)) case len(r.Name) > 0: - tasks, n, err := ex.taskSVC.FindTasks(ctx, influxdb.TaskFilter{Name: &r.Name}) + tasks, n, err := ex.taskSVC.FindTasks(ctx, task2.TaskFilter{Name: &r.Name}) if err != nil { return err } @@ -625,7 +626,7 @@ func CheckToObject(name string, ch influxdb.Check) Object { o := newObject(KindCheck, name) assignNonZeroStrings(o.Spec, map[string]string{ fieldDescription: ch.GetDescription(), - fieldStatus: influxdb.TaskStatusActive, + fieldStatus: task2.TaskStatusActive, }) assignBase := func(base icheck.Base) { @@ -1333,7 +1334,7 @@ func NotificationRuleToObject(name, endpointPkgName string, iRule influxdb.Notif var taskFluxRegex = regexp.MustCompile(`option task = {(.|\n)*?}`) // TaskToObject converts an influxdb.Task into a pkger.Object. -func TaskToObject(name string, t influxdb.Task) Object { +func TaskToObject(name string, t task2.Task) Object { if name == "" { name = t.Name } diff --git a/pkger/parser_test.go b/pkger/parser_test.go index fec7d8aeb6f..82e33bce528 100644 --- a/pkger/parser_test.go +++ b/pkger/parser_test.go @@ -4,6 +4,7 @@ import ( "bytes" "errors" "fmt" + task2 "github.com/influxdata/influxdb/v2/task" "net/url" "path/filepath" "sort" @@ -2709,7 +2710,7 @@ spec: Base: endpoint.Base{ Name: "basic endpoint name", Description: "http basic auth desc", - Status: influxdb.TaskStatusInactive, + Status: task2.TaskStatusInactive, }, URL: "https://www.example.com/endpoint/basicauth", AuthMethod: "basic", @@ -2727,7 +2728,7 @@ spec: Base: endpoint.Base{ Name: "http-bearer-auth-notification-endpoint", Description: "http bearer auth desc", - Status: influxdb.TaskStatusActive, + Status: task2.TaskStatusActive, }, URL: "https://www.example.com/endpoint/bearerauth", AuthMethod: "bearer", @@ -2744,7 +2745,7 @@ spec: Base: endpoint.Base{ Name: "http-none-auth-notification-endpoint", Description: "http none auth desc", - Status: influxdb.TaskStatusActive, + Status: task2.TaskStatusActive, }, URL: "https://www.example.com/endpoint/noneauth", AuthMethod: "none", @@ -2760,7 +2761,7 @@ spec: Base: endpoint.Base{ Name: "pager duty name", Description: "pager duty desc", - Status: influxdb.TaskStatusActive, + Status: task2.TaskStatusActive, }, ClientURL: "http://localhost:8080/orgs/7167eb6719fa34e5/alert-history", RoutingKey: influxdb.SecretField{Value: strPtr("secret routing-key")}, @@ -2775,7 +2776,7 @@ spec: Base: endpoint.Base{ Name: "slack name", Description: "slack desc", - Status: influxdb.TaskStatusActive, + Status: task2.TaskStatusActive, }, URL: "https://hooks.slack.com/services/bip/piddy/boppidy", Token: influxdb.SecretField{Value: strPtr("tokenval")}, @@ -4245,7 +4246,7 @@ spec: expected := &endpoint.PagerDuty{ Base: endpoint.Base{ Name: "pager-duty-notification-endpoint", - Status: influxdb.TaskStatusActive, + Status: task2.TaskStatusActive, }, ClientURL: "http://localhost:8080/orgs/7167eb6719fa34e5/alert-history", RoutingKey: influxdb.SecretField{Key: "-routing-key", Value: strPtr("not empty")}, diff --git a/pkger/service.go b/pkger/service.go index 4395cbdee42..4d70ddd6e95 100644 --- a/pkger/service.go +++ b/pkger/service.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + task2 "github.com/influxdata/influxdb/v2/task" "net/url" "path" "regexp" @@ -162,7 +163,7 @@ type serviceOpt struct { orgSVC influxdb.OrganizationService ruleSVC influxdb.NotificationRuleStore secretSVC influxdb.SecretService - taskSVC influxdb.TaskService + taskSVC task2.TaskService teleSVC influxdb.TelegrafConfigStore varSVC influxdb.VariableService } @@ -261,7 +262,7 @@ func WithSecretSVC(secretSVC influxdb.SecretService) ServiceSetterFn { } // WithTaskSVC sets the task service. -func WithTaskSVC(taskSVC influxdb.TaskService) ServiceSetterFn { +func WithTaskSVC(taskSVC task2.TaskService) ServiceSetterFn { return func(opt *serviceOpt) { opt.taskSVC = taskSVC } @@ -311,7 +312,7 @@ type Service struct { orgSVC influxdb.OrganizationService ruleSVC influxdb.NotificationRuleStore secretSVC influxdb.SecretService - taskSVC influxdb.TaskService + taskSVC task2.TaskService teleSVC influxdb.TelegrafConfigStore varSVC influxdb.VariableService } @@ -822,10 +823,10 @@ func (s *Service) cloneOrgTasks(ctx context.Context, orgID platform.ID) ([]Resou return nil, err } - mTasks := make(map[platform.ID]*influxdb.Task) + mTasks := make(map[platform.ID]*task2.Task) for i := range tasks { t := tasks[i] - if t.Type != influxdb.TaskSystemType { + if t.Type != task2.TaskSystemType { continue } mTasks[t.ID] = t @@ -1191,7 +1192,7 @@ func (s *Service) dryRunSecrets(ctx context.Context, orgID platform.ID, template func (s *Service) dryRunTasks(ctx context.Context, orgID platform.ID, tasks map[string]*stateTask) { for _, stateTask := range tasks { stateTask.orgID = orgID - var existing *influxdb.Task + var existing *task2.Task if stateTask.ID() != 0 { existing, _ = s.taskSVC.FindTaskByID(ctx, stateTask.ID()) } @@ -2530,7 +2531,7 @@ func (s *Service) applyTasks(ctx context.Context, tasks []*stateTask) applier { } } -func (s *Service) applyTask(ctx context.Context, userID platform.ID, t *stateTask) (influxdb.Task, error) { +func (s *Service) applyTask(ctx context.Context, userID platform.ID, t *stateTask) (task2.Task, error) { if isRestrictedTask(t.existing) { return *t.existing, nil } @@ -2538,9 +2539,9 @@ func (s *Service) applyTask(ctx context.Context, userID platform.ID, t *stateTas case IsRemoval(t.stateStatus): if err := s.taskSVC.DeleteTask(ctx, t.ID()); err != nil { if errors2.ErrorCode(err) == errors2.ENotFound { - return influxdb.Task{}, nil + return task2.Task{}, nil } - return influxdb.Task{}, applyFailErr("delete", t.stateIdentity(), err) + return task2.Task{}, applyFailErr("delete", t.stateIdentity(), err) } return *t.existing, nil case IsExisting(t.stateStatus) && t.existing != nil: @@ -2560,19 +2561,19 @@ func (s *Service) applyTask(ctx context.Context, userID platform.ID, t *stateTas } } - updatedTask, err := s.taskSVC.UpdateTask(ctx, t.ID(), influxdb.TaskUpdate{ + updatedTask, err := s.taskSVC.UpdateTask(ctx, t.ID(), task2.TaskUpdate{ Flux: &newFlux, Status: &newStatus, Description: &t.parserTask.description, Options: opt, }) if err != nil { - return influxdb.Task{}, applyFailErr("update", t.stateIdentity(), err) + return task2.Task{}, applyFailErr("update", t.stateIdentity(), err) } return *updatedTask, nil default: - newTask, err := s.taskSVC.CreateTask(ctx, influxdb.TaskCreate{ - Type: influxdb.TaskSystemType, + newTask, err := s.taskSVC.CreateTask(ctx, task2.TaskCreate{ + Type: task2.TaskSystemType, Flux: t.parserTask.flux(), OwnerID: userID, Description: t.parserTask.description, @@ -2580,7 +2581,7 @@ func (s *Service) applyTask(ctx context.Context, userID platform.ID, t *stateTas OrganizationID: t.orgID, }) if err != nil { - return influxdb.Task{}, applyFailErr("create", t.stateIdentity(), err) + return task2.Task{}, applyFailErr("create", t.stateIdentity(), err) } return *newTask, nil } @@ -2595,7 +2596,7 @@ func (s *Service) rollbackTasks(ctx context.Context, tasks []*stateTask) error { var err error switch t.stateStatus { case StateStatusRemove: - newTask, err := s.taskSVC.CreateTask(ctx, influxdb.TaskCreate{ + newTask, err := s.taskSVC.CreateTask(ctx, task2.TaskCreate{ Type: t.existing.Type, Flux: t.existing.Flux, OwnerID: t.existing.OwnerID, @@ -2623,7 +2624,7 @@ func (s *Service) rollbackTasks(ctx context.Context, tasks []*stateTask) error { } } - _, err = s.taskSVC.UpdateTask(ctx, t.ID(), influxdb.TaskUpdate{ + _, err = s.taskSVC.UpdateTask(ctx, t.ID(), task2.TaskUpdate{ Flux: &t.existing.Flux, Status: &t.existing.Status, Description: &t.existing.Description, @@ -3412,15 +3413,15 @@ func (s *Service) getNotificationRules(ctx context.Context, orgID platform.ID) ( } -func (s *Service) getAllTasks(ctx context.Context, orgID platform.ID) ([]*influxdb.Task, error) { +func (s *Service) getAllTasks(ctx context.Context, orgID platform.ID) ([]*task2.Task, error) { var ( - out []*influxdb.Task + out []*task2.Task afterID *platform.ID ) for { - f := influxdb.TaskFilter{ + f := task2.TaskFilter{ OrganizationID: &orgID, - Limit: influxdb.TaskMaxPageSize, + Limit: task2.TaskMaxPageSize, } if afterID != nil { f.After = afterID @@ -3688,8 +3689,8 @@ func validURLs(urls []string) error { return nil } -func isRestrictedTask(t *influxdb.Task) bool { - return t != nil && t.Type != influxdb.TaskSystemType +func isRestrictedTask(t *task2.Task) bool { + return t != nil && t.Type != task2.TaskSystemType } func isSystemBucket(b *influxdb.Bucket) bool { diff --git a/pkger/service_models.go b/pkger/service_models.go index a348b9ab68e..e8ff8771495 100644 --- a/pkger/service_models.go +++ b/pkger/service_models.go @@ -1,6 +1,7 @@ package pkger import ( + task2 "github.com/influxdata/influxdb/v2/task" "reflect" "sort" @@ -1347,7 +1348,7 @@ type stateTask struct { labelAssociations []*stateLabel parserTask *task - existing *influxdb.Task + existing *task2.Task } func (t *stateTask) ID() platform.ID { diff --git a/pkger/service_test.go b/pkger/service_test.go index 32806ba2323..f87d2144915 100644 --- a/pkger/service_test.go +++ b/pkger/service_test.go @@ -5,6 +5,7 @@ import ( "context" "errors" "fmt" + task2 "github.com/influxdata/influxdb/v2/task" "math/rand" "net/url" "regexp" @@ -453,7 +454,7 @@ func TestService(t *testing.T) { ID: &id, Name: "http-none-auth-notification-endpoint", Description: "old desc", - Status: influxdb.TaskStatusInactive, + Status: task2.TaskStatusInactive, }, Method: "POST", AuthMethod: "none", @@ -500,7 +501,7 @@ func TestService(t *testing.T) { ID: &id, Name: "http-none-auth-notification-endpoint", Description: "http none auth desc", - Status: influxdb.TaskStatusActive, + Status: task2.TaskStatusActive, }, AuthMethod: "none", Method: "GET", @@ -561,7 +562,7 @@ func TestService(t *testing.T) { // This name here matches the endpoint identified in the template notification rule Name: "endpoint-0", Description: "old desc", - Status: influxdb.TaskStatusInactive, + Status: task2.TaskStatusInactive, }, Method: "POST", AuthMethod: "none", @@ -1330,13 +1331,13 @@ func TestService(t *testing.T) { t.Run("maps tasks with labels", func(t *testing.T) { opts := func() []ServiceSetterFn { fakeTaskSVC := mock.NewTaskService() - fakeTaskSVC.CreateTaskFn = func(ctx context.Context, tc influxdb.TaskCreate) (*influxdb.Task, error) { + fakeTaskSVC.CreateTaskFn = func(ctx context.Context, tc task2.TaskCreate) (*task2.Task, error) { reg := regexp.MustCompile(`name: "(.+)",`) names := reg.FindStringSubmatch(tc.Flux) if len(names) < 2 { return nil, errors.New("bad flux query provided: " + tc.Flux) } - return &influxdb.Task{ + return &task2.Task{ ID: platform.ID(rand.Int()), Type: tc.Type, OrganizationID: tc.OrganizationID, @@ -1546,13 +1547,13 @@ func TestService(t *testing.T) { orgID := platform.ID(9000) fakeTaskSVC := mock.NewTaskService() - fakeTaskSVC.CreateTaskFn = func(ctx context.Context, tc influxdb.TaskCreate) (*influxdb.Task, error) { + fakeTaskSVC.CreateTaskFn = func(ctx context.Context, tc task2.TaskCreate) (*task2.Task, error) { reg := regexp.MustCompile(`name: "(.+)",`) names := reg.FindStringSubmatch(tc.Flux) if len(names) < 2 { return nil, errors.New("bad flux query provided: " + tc.Flux) } - return &influxdb.Task{ + return &task2.Task{ ID: platform.ID(fakeTaskSVC.CreateTaskCalls.Count() + 1), Type: tc.Type, OrganizationID: tc.OrganizationID, @@ -1586,11 +1587,11 @@ func TestService(t *testing.T) { t.Run("rolls back all created tasks on an error", func(t *testing.T) { testfileRunner(t, "testdata/tasks.yml", func(t *testing.T, template *Template) { fakeTaskSVC := mock.NewTaskService() - fakeTaskSVC.CreateTaskFn = func(ctx context.Context, tc influxdb.TaskCreate) (*influxdb.Task, error) { + fakeTaskSVC.CreateTaskFn = func(ctx context.Context, tc task2.TaskCreate) (*task2.Task, error) { if fakeTaskSVC.CreateTaskCalls.Count() == 1 { return nil, errors.New("expected error") } - return &influxdb.Task{ + return &task2.Task{ ID: platform.ID(fakeTaskSVC.CreateTaskCalls.Count() + 1), }, nil } @@ -3275,7 +3276,7 @@ func TestService(t *testing.T) { Base: endpoint.Base{ Name: "pd-endpoint", Description: "desc", - Status: influxdb.TaskStatusActive, + Status: task2.TaskStatusActive, }, ClientURL: "http://example.com", RoutingKey: influxdb.SecretField{Key: "-routing-key"}, @@ -3288,7 +3289,7 @@ func TestService(t *testing.T) { Base: endpoint.Base{ Name: "pd-endpoint", Description: "desc", - Status: influxdb.TaskStatusActive, + Status: task2.TaskStatusActive, }, ClientURL: "http://example.com", RoutingKey: influxdb.SecretField{Key: "-routing-key"}, @@ -3300,7 +3301,7 @@ func TestService(t *testing.T) { Base: endpoint.Base{ Name: "pd-endpoint", Description: "desc", - Status: influxdb.TaskStatusInactive, + Status: task2.TaskStatusInactive, }, URL: "http://example.com", Token: influxdb.SecretField{Key: "tokne"}, @@ -3312,7 +3313,7 @@ func TestService(t *testing.T) { Base: endpoint.Base{ Name: "pd-endpoint", Description: "desc", - Status: influxdb.TaskStatusInactive, + Status: task2.TaskStatusInactive, }, AuthMethod: "basic", Method: "POST", @@ -3327,7 +3328,7 @@ func TestService(t *testing.T) { Base: endpoint.Base{ Name: "pd-endpoint", Description: "desc", - Status: influxdb.TaskStatusInactive, + Status: task2.TaskStatusInactive, }, AuthMethod: "bearer", Method: "GET", @@ -3341,7 +3342,7 @@ func TestService(t *testing.T) { Base: endpoint.Base{ Name: "pd-endpoint", Description: "desc", - Status: influxdb.TaskStatusInactive, + Status: task2.TaskStatusInactive, }, AuthMethod: "none", Method: "GET", @@ -3404,7 +3405,7 @@ func TestService(t *testing.T) { ID: newTestIDPtr(1), Name: "pd endpoint", Description: "desc", - Status: influxdb.TaskStatusActive, + Status: task2.TaskStatusActive, }, ClientURL: "http://example.com", RoutingKey: influxdb.SecretField{Key: "-routing-key"}, @@ -3414,7 +3415,7 @@ func TestService(t *testing.T) { ID: newTestIDPtr(2), Name: "pd-endpoint", Description: "desc pd", - Status: influxdb.TaskStatusActive, + Status: task2.TaskStatusActive, }, ClientURL: "http://example.com", RoutingKey: influxdb.SecretField{Key: "-routing-key"}, @@ -3424,7 +3425,7 @@ func TestService(t *testing.T) { ID: newTestIDPtr(3), Name: "slack endpoint", Description: "desc slack", - Status: influxdb.TaskStatusInactive, + Status: task2.TaskStatusInactive, }, URL: "http://example.com", Token: influxdb.SecretField{Key: "tokne"}, @@ -3559,7 +3560,7 @@ func TestService(t *testing.T) { ID: newTestIDPtr(13), Name: "endpoint_0", Description: "desc", - Status: influxdb.TaskStatusActive, + Status: task2.TaskStatusActive, }, ClientURL: "http://example.com", RoutingKey: influxdb.SecretField{Key: "-routing-key"}, @@ -3576,7 +3577,7 @@ func TestService(t *testing.T) { ID: newTestIDPtr(13), Name: "endpoint_0", Description: "desc", - Status: influxdb.TaskStatusInactive, + Status: task2.TaskStatusInactive, }, URL: "http://example.com", Token: influxdb.SecretField{Key: "tokne"}, @@ -3594,7 +3595,7 @@ func TestService(t *testing.T) { ID: newTestIDPtr(13), Name: "endpoint_0", Description: "desc", - Status: influxdb.TaskStatusInactive, + Status: task2.TaskStatusInactive, }, AuthMethod: "none", Method: "GET", @@ -3705,7 +3706,7 @@ func TestService(t *testing.T) { ID: &id, Name: "endpoint_0", Description: "desc", - Status: influxdb.TaskStatusInactive, + Status: task2.TaskStatusInactive, }, AuthMethod: "none", Method: "GET", @@ -3950,27 +3951,27 @@ func TestService(t *testing.T) { tests := []struct { name string newName string - task influxdb.Task + task task2.Task }{ { name: "every offset is set", newName: "new name", - task: influxdb.Task{ + task: task2.Task{ ID: 1, Name: "name_9000", Every: time.Minute.String(), Offset: 10 * time.Second, - Type: influxdb.TaskSystemType, + Type: task2.TaskSystemType, Flux: `option task = { name: "larry" } from(bucket: "rucket") |> yield()`, }, }, { name: "cron is set", - task: influxdb.Task{ + task: task2.Task{ ID: 1, Name: "name_0", Cron: "2 * * * *", - Type: influxdb.TaskSystemType, + Type: task2.TaskSystemType, Flux: `option task = { name: "larry" } from(bucket: "rucket") |> yield()`, }, }, @@ -3979,14 +3980,14 @@ func TestService(t *testing.T) { for _, tt := range tests { fn := func(t *testing.T) { taskSVC := mock.NewTaskService() - taskSVC.FindTaskByIDFn = func(ctx context.Context, id platform.ID) (*influxdb.Task, error) { + taskSVC.FindTaskByIDFn = func(ctx context.Context, id platform.ID) (*task2.Task, error) { if id != tt.task.ID { return nil, errors.New("wrong id provided: " + id.String()) } return &tt.task, nil } - taskSVC.FindTasksFn = func(ctx context.Context, filter influxdb.TaskFilter) ([]*influxdb.Task, int, error) { - return []*influxdb.Task{&tt.task}, 1, nil + taskSVC.FindTasksFn = func(ctx context.Context, filter task2.TaskFilter) ([]*task2.Task, int, error) { + return []*task2.Task{&tt.task}, 1, nil } svc := newTestService(WithTaskSVC(taskSVC)) @@ -4026,13 +4027,13 @@ func TestService(t *testing.T) { t.Run("handles multiple tasks of same name", func(t *testing.T) { taskSVC := mock.NewTaskService() - taskSVC.FindTaskByIDFn = func(ctx context.Context, id platform.ID) (*influxdb.Task, error) { - return &influxdb.Task{ + taskSVC.FindTaskByIDFn = func(ctx context.Context, id platform.ID) (*task2.Task, error) { + return &task2.Task{ ID: id, - Type: influxdb.TaskSystemType, + Type: task2.TaskSystemType, Name: "same name", Description: "desc", - Status: influxdb.TaskStatusActive, + Status: task2.TaskStatusActive, Flux: `from(bucket: "foo")`, Every: "5m0s", }, nil @@ -4071,14 +4072,14 @@ func TestService(t *testing.T) { }) t.Run("tasks by name", func(t *testing.T) { - knownTasks := []*influxdb.Task{ + knownTasks := []*task2.Task{ { ID: 1, Name: "task", Description: "task 1", Every: time.Minute.String(), Offset: 10 * time.Second, - Type: influxdb.TaskSystemType, + Type: task2.TaskSystemType, Flux: `option task = { name: "larry" } from(bucket: "rucket") |> yield()`, }, { @@ -4086,7 +4087,7 @@ func TestService(t *testing.T) { Name: "taskCopy", Description: "task 2", Cron: "2 * * * *", - Type: influxdb.TaskSystemType, + Type: task2.TaskSystemType, Flux: `option task = { name: "curly" } from(bucket: "rucket") |> yield()`, }, { @@ -4094,7 +4095,7 @@ func TestService(t *testing.T) { Name: "taskCopy", Description: "task 3", Cron: "2 3 4 5 *", - Type: influxdb.TaskSystemType, + Type: task2.TaskSystemType, Flux: `option task = { name: "moe" } from(bucket: "rucket") |> yield()`, }, } @@ -4103,17 +4104,17 @@ func TestService(t *testing.T) { name string findName string findID platform.ID - expected []*influxdb.Task + expected []*task2.Task }{ { name: "find task with unique name", findName: "task", - expected: []*influxdb.Task{knownTasks[0]}, + expected: []*task2.Task{knownTasks[0]}, }, { name: "find multiple tasks with shared name", findName: "taskCopy", - expected: []*influxdb.Task{knownTasks[1], knownTasks[2]}, + expected: []*task2.Task{knownTasks[1], knownTasks[2]}, }, { name: "find no tasks", @@ -4123,20 +4124,20 @@ func TestService(t *testing.T) { { name: "find task by id", findID: platform.ID(2), - expected: []*influxdb.Task{knownTasks[1]}, + expected: []*task2.Task{knownTasks[1]}, }, { name: "find by id, set new name", findID: platform.ID(2), findName: "renamedTask", - expected: []*influxdb.Task{knownTasks[1]}, + expected: []*task2.Task{knownTasks[1]}, }, } for _, tt := range tests { fn := func(t *testing.T) { taskSVC := mock.NewTaskService() - taskSVC.FindTaskByIDFn = func(ctx context.Context, id platform.ID) (*influxdb.Task, error) { + taskSVC.FindTaskByIDFn = func(ctx context.Context, id platform.ID) (*task2.Task, error) { for i := range knownTasks { if knownTasks[i].ID == id { return knownTasks[i], nil @@ -4145,8 +4146,8 @@ func TestService(t *testing.T) { return nil, errors.New("wrong id provided: " + id.String()) } - taskSVC.FindTasksFn = func(ctx context.Context, filter influxdb.TaskFilter) ([]*influxdb.Task, int, error) { - tasks := []*influxdb.Task{} + taskSVC.FindTasksFn = func(ctx context.Context, filter task2.TaskFilter) ([]*task2.Task, int, error) { + tasks := []*task2.Task{} for i := range knownTasks { if knownTasks[i].Name == *filter.Name { tasks = append(tasks, knownTasks[i]) @@ -4850,27 +4851,27 @@ func TestService(t *testing.T) { } taskSVC := mock.NewTaskService() - taskSVC.FindTasksFn = func(ctx context.Context, f influxdb.TaskFilter) ([]*influxdb.Task, int, error) { + taskSVC.FindTasksFn = func(ctx context.Context, f task2.TaskFilter) ([]*task2.Task, int, error) { if f.After != nil { return nil, 0, nil } - return []*influxdb.Task{ - {ID: 31, Type: influxdb.TaskSystemType}, - {ID: expectedCheck.TaskID, Type: influxdb.TaskSystemType}, // this one should be ignored in the return - {ID: expectedRule.TaskID, Type: influxdb.TaskSystemType}, // this one should be ignored in the return as well + return []*task2.Task{ + {ID: 31, Type: task2.TaskSystemType}, + {ID: expectedCheck.TaskID, Type: task2.TaskSystemType}, // this one should be ignored in the return + {ID: expectedRule.TaskID, Type: task2.TaskSystemType}, // this one should be ignored in the return as well {ID: 99}, // this one should be skipped since it is not a system task }, 3, nil } - taskSVC.FindTaskByIDFn = func(ctx context.Context, id platform.ID) (*influxdb.Task, error) { + taskSVC.FindTaskByIDFn = func(ctx context.Context, id platform.ID) (*task2.Task, error) { if id != 31 { return nil, errors.New("wrong id: " + id.String()) } - return &influxdb.Task{ + return &task2.Task{ ID: id, Name: "task_0", Every: time.Minute.String(), Offset: 10 * time.Second, - Type: influxdb.TaskSystemType, + Type: task2.TaskSystemType, Flux: `option task = { name: "larry" } from(bucket: "rucket") |> yield()`, }, nil } diff --git a/task/backend/analytical_storage.go b/task/backend/analytical_storage.go index cb66c8eb68f..e38c6b505fd 100644 --- a/task/backend/analytical_storage.go +++ b/task/backend/analytical_storage.go @@ -5,6 +5,7 @@ import ( "context" "encoding/json" "fmt" + task2 "github.com/influxdata/influxdb/v2/task" "time" "github.com/influxdata/influxdb/v2/kit/platform" @@ -34,11 +35,11 @@ const ( // RunRecorder is a type which records runs into an influxdb // backed storage mechanism type RunRecorder interface { - Record(ctx context.Context, orgID platform.ID, org string, bucketID platform.ID, bucket string, run *influxdb.Run) error + Record(ctx context.Context, orgID platform.ID, org string, bucketID platform.ID, bucket string, run *task2.Run) error } // NewAnalyticalStorage creates a new analytical store with access to the necessary systems for storing data and to act as a middleware (deprecated) -func NewAnalyticalStorage(log *zap.Logger, ts influxdb.TaskService, bs influxdb.BucketService, tcs TaskControlService, pw storage.PointsWriter, qs query.QueryService) *AnalyticalStorage { +func NewAnalyticalStorage(log *zap.Logger, ts task2.TaskService, bs influxdb.BucketService, tcs TaskControlService, pw storage.PointsWriter, qs query.QueryService) *AnalyticalStorage { return &AnalyticalStorage{ log: log, TaskService: ts, @@ -50,7 +51,7 @@ func NewAnalyticalStorage(log *zap.Logger, ts influxdb.TaskService, bs influxdb. } type AnalyticalStorage struct { - influxdb.TaskService + task2.TaskService influxdb.BucketService TaskControlService @@ -59,7 +60,7 @@ type AnalyticalStorage struct { log *zap.Logger } -func (as *AnalyticalStorage) FinishRun(ctx context.Context, taskID, runID platform.ID) (*influxdb.Run, error) { +func (as *AnalyticalStorage) FinishRun(ctx context.Context, taskID, runID platform.ID) (*task2.Run, error) { run, err := as.TaskControlService.FinishRun(ctx, taskID, runID) if run != nil && run.ID.String() != "" { task, err := as.TaskService.FindTaskByID(ctx, run.TaskID) @@ -80,8 +81,8 @@ func (as *AnalyticalStorage) FinishRun(ctx context.Context, taskID, runID platfo // FindLogs returns logs for a run. // First attempt to use the TaskService, then append additional analytical's logs to the list -func (as *AnalyticalStorage) FindLogs(ctx context.Context, filter influxdb.LogFilter) ([]*influxdb.Log, int, error) { - var logs []*influxdb.Log +func (as *AnalyticalStorage) FindLogs(ctx context.Context, filter task2.LogFilter) ([]*task2.Log, int, error) { + var logs []*task2.Log if filter.Run != nil { run, err := as.FindRunByID(ctx, filter.Task, *filter.Run) if err != nil { @@ -94,7 +95,7 @@ func (as *AnalyticalStorage) FindLogs(ctx context.Context, filter influxdb.LogFi } // add historical logs to the transactional logs. - runs, n, err := as.FindRuns(ctx, influxdb.RunFilter{Task: filter.Task}) + runs, n, err := as.FindRuns(ctx, task2.RunFilter{Task: filter.Task}) if err != nil { return nil, 0, err } @@ -110,13 +111,13 @@ func (as *AnalyticalStorage) FindLogs(ctx context.Context, filter influxdb.LogFi // FindRuns returns a list of runs that match a filter and the total count of returned runs. // First attempt to use the TaskService, then append additional analytical's runs to the list -func (as *AnalyticalStorage) FindRuns(ctx context.Context, filter influxdb.RunFilter) ([]*influxdb.Run, int, error) { +func (as *AnalyticalStorage) FindRuns(ctx context.Context, filter task2.RunFilter) ([]*task2.Run, int, error) { if filter.Limit == 0 { - filter.Limit = influxdb.TaskDefaultPageSize + filter.Limit = task2.TaskDefaultPageSize } - if filter.Limit < 0 || filter.Limit > influxdb.TaskMaxPageSize { - return nil, 0, influxdb.ErrOutOfBoundsLimit + if filter.Limit < 0 || filter.Limit > task2.TaskMaxPageSize { + return nil, 0, task2.ErrOutOfBoundsLimit } runs, n, err := as.TaskService.FindRuns(ctx, filter) @@ -230,7 +231,7 @@ func (as *AnalyticalStorage) FindRuns(ctx context.Context, filter influxdb.RunFi } // remove any kv runs that exist in the list of completed runs -func (as *AnalyticalStorage) combineRuns(currentRuns, completeRuns []*influxdb.Run) []*influxdb.Run { +func (as *AnalyticalStorage) combineRuns(currentRuns, completeRuns []*task2.Run) []*task2.Run { crMap := map[platform.ID]int{} // track the current runs @@ -251,7 +252,7 @@ func (as *AnalyticalStorage) combineRuns(currentRuns, completeRuns []*influxdb.R // FindRunByID returns a single run. // First see if it is in the existing TaskService. If not pull it from analytical storage. -func (as *AnalyticalStorage) FindRunByID(ctx context.Context, taskID, runID platform.ID) (*influxdb.Run, error) { +func (as *AnalyticalStorage) FindRunByID(ctx context.Context, taskID, runID platform.ID) (*task2.Run, error) { // check the taskService to see if the run is on its list run, err := as.TaskService.FindRunByID(ctx, taskID, runID) if err != nil { @@ -322,7 +323,7 @@ func (as *AnalyticalStorage) FindRunByID(ctx context.Context, taskID, runID plat } if len(re.runs) == 0 { - return nil, influxdb.ErrRunNotFound + return nil, task2.ErrRunNotFound } @@ -336,7 +337,7 @@ func (as *AnalyticalStorage) FindRunByID(ctx context.Context, taskID, runID plat return re.runs[0], err } -func (as *AnalyticalStorage) RetryRun(ctx context.Context, taskID, runID platform.ID) (*influxdb.Run, error) { +func (as *AnalyticalStorage) RetryRun(ctx context.Context, taskID, runID platform.ID) (*task2.Run, error) { run, err := as.TaskService.RetryRun(ctx, taskID, runID) if err != nil { if err, ok := err.(*errors2.Error); !ok || err.Msg != "run not found" { @@ -360,7 +361,7 @@ func (as *AnalyticalStorage) RetryRun(ctx context.Context, taskID, runID platfor } type runReader struct { - runs []*influxdb.Run + runs []*task2.Run log *zap.Logger } @@ -370,7 +371,7 @@ func (re *runReader) readTable(tbl flux.Table) error { func (re *runReader) readRuns(cr flux.ColReader) error { for i := 0; i < cr.Len(); i++ { - var r influxdb.Run + var r task2.Run for j, col := range cr.Cols() { switch col.Label { case runIDField: diff --git a/task/backend/analytical_storage_test.go b/task/backend/analytical_storage_test.go index 3b747a3bd84..4417bf4ab4f 100644 --- a/task/backend/analytical_storage_test.go +++ b/task/backend/analytical_storage_test.go @@ -3,6 +3,7 @@ package backend_test import ( "context" "github.com/influxdata/influxdb/v2/kit/platform" + "github.com/influxdata/influxdb/v2/task" "io/ioutil" "os" "testing" @@ -110,18 +111,18 @@ func TestDeduplicateRuns(t *testing.T) { defer ab.Close(t) mockTS := &mock.TaskService{ - FindTaskByIDFn: func(context.Context, platform.ID) (*influxdb.Task, error) { - return &influxdb.Task{ID: 1, OrganizationID: 20}, nil + FindTaskByIDFn: func(context.Context, platform.ID) (*task.Task, error) { + return &task.Task{ID: 1, OrganizationID: 20}, nil }, - FindRunsFn: func(context.Context, influxdb.RunFilter) ([]*influxdb.Run, int, error) { - return []*influxdb.Run{ - &influxdb.Run{ID: 2, Status: "started"}, + FindRunsFn: func(context.Context, task.RunFilter) ([]*task.Run, int, error) { + return []*task.Run{ + &task.Run{ID: 2, Status: "started"}, }, 1, nil }, } mockTCS := &mock.TaskControlService{ - FinishRunFn: func(ctx context.Context, taskID, runID platform.ID) (*influxdb.Run, error) { - return &influxdb.Run{ID: 2, TaskID: 1, Status: "success", ScheduledFor: time.Now(), StartedAt: time.Now().Add(1), FinishedAt: time.Now().Add(2)}, nil + FinishRunFn: func(ctx context.Context, taskID, runID platform.ID) (*task.Run, error) { + return &task.Run{ID: 2, TaskID: 1, Status: "success", ScheduledFor: time.Now(), StartedAt: time.Now().Add(1), FinishedAt: time.Now().Add(2)}, nil }, } mockBS := mock.NewBucketService() @@ -133,7 +134,7 @@ func TestDeduplicateRuns(t *testing.T) { t.Fatal(err) } - runs, _, err := svcStack.FindRuns(context.Background(), influxdb.RunFilter{Task: 1}) + runs, _, err := svcStack.FindRuns(context.Background(), task.RunFilter{Task: 1}) if err != nil { t.Fatal(err) } diff --git a/task/backend/coordinator.go b/task/backend/coordinator.go index bacc520e528..a38f34dfcfd 100644 --- a/task/backend/coordinator.go +++ b/task/backend/coordinator.go @@ -2,11 +2,11 @@ package backend import ( "context" + "github.com/influxdata/influxdb/v2/task" "time" "github.com/influxdata/influxdb/v2/kit/platform" - "github.com/influxdata/influxdb/v2" "go.uber.org/zap" ) @@ -16,21 +16,21 @@ var now = func() time.Time { // TaskService is a type on which tasks can be listed type TaskService interface { - FindTasks(context.Context, influxdb.TaskFilter) ([]*influxdb.Task, int, error) - UpdateTask(context.Context, platform.ID, influxdb.TaskUpdate) (*influxdb.Task, error) + FindTasks(context.Context, task.TaskFilter) ([]*task.Task, int, error) + UpdateTask(context.Context, platform.ID, task.TaskUpdate) (*task.Task, error) } // Coordinator is a type with a single method which // is called when a task has been created type Coordinator interface { - TaskCreated(context.Context, *influxdb.Task) error + TaskCreated(context.Context, *task.Task) error } // NotifyCoordinatorOfExisting lists all tasks by the provided task service and for // each task it calls the provided coordinators task created method func NotifyCoordinatorOfExisting(ctx context.Context, log *zap.Logger, ts TaskService, coord Coordinator) error { // If we missed a Create Action - tasks, _, err := ts.FindTasks(ctx, influxdb.TaskFilter{}) + tasks, _, err := ts.FindTasks(ctx, task.TaskFilter{}) if err != nil { return err } @@ -38,11 +38,11 @@ func NotifyCoordinatorOfExisting(ctx context.Context, log *zap.Logger, ts TaskSe latestCompleted := now() for len(tasks) > 0 { for _, task := range tasks { - if task.Status != string(influxdb.TaskActive) { + if task.Status != string(task.TaskActive) { continue } - task, err := ts.UpdateTask(context.Background(), task.ID, influxdb.TaskUpdate{ + task, err := ts.UpdateTask(context.Background(), task.ID, task.TaskUpdate{ LatestCompleted: &latestCompleted, LatestScheduled: &latestCompleted, }) @@ -54,7 +54,7 @@ func NotifyCoordinatorOfExisting(ctx context.Context, log *zap.Logger, ts TaskSe coord.TaskCreated(ctx, task) } - tasks, _, err = ts.FindTasks(ctx, influxdb.TaskFilter{ + tasks, _, err = ts.FindTasks(ctx, task.TaskFilter{ After: &tasks[len(tasks)-1].ID, }) if err != nil { @@ -72,7 +72,7 @@ type TaskResumer func(ctx context.Context, id platform.ID, runID platform.ID) er // TODO(docmerlin): this is temporary untill the executor queue is persistent func TaskNotifyCoordinatorOfExisting(ctx context.Context, ts TaskService, tcs TaskControlService, coord Coordinator, exec TaskResumer, log *zap.Logger) error { // If we missed a Create Action - tasks, _, err := ts.FindTasks(ctx, influxdb.TaskFilter{}) + tasks, _, err := ts.FindTasks(ctx, task.TaskFilter{}) if err != nil { return err } @@ -80,11 +80,11 @@ func TaskNotifyCoordinatorOfExisting(ctx context.Context, ts TaskService, tcs Ta latestCompleted := now() for len(tasks) > 0 { for _, task := range tasks { - if task.Status != string(influxdb.TaskActive) { + if task.Status != string(task.TaskActive) { continue } - task, err := ts.UpdateTask(context.Background(), task.ID, influxdb.TaskUpdate{ + task, err := ts.UpdateTask(context.Background(), task.ID, task.TaskUpdate{ LatestCompleted: &latestCompleted, LatestScheduled: &latestCompleted, }) @@ -105,7 +105,7 @@ func TaskNotifyCoordinatorOfExisting(ctx context.Context, ts TaskService, tcs Ta } } - tasks, _, err = ts.FindTasks(ctx, influxdb.TaskFilter{ + tasks, _, err = ts.FindTasks(ctx, task.TaskFilter{ After: &tasks[len(tasks)-1].ID, }) if err != nil { diff --git a/task/backend/coordinator/coordinator.go b/task/backend/coordinator/coordinator.go index 2d6de259302..52bd18b6e17 100644 --- a/task/backend/coordinator/coordinator.go +++ b/task/backend/coordinator/coordinator.go @@ -3,11 +3,11 @@ package coordinator import ( "context" "errors" + task2 "github.com/influxdata/influxdb/v2/task" "time" "github.com/influxdata/influxdb/v2/kit/platform" - "github.com/influxdata/influxdb/v2" "github.com/influxdata/influxdb/v2/task/backend/executor" "github.com/influxdata/influxdb/v2/task/backend/middleware" "github.com/influxdata/influxdb/v2/task/backend/scheduler" @@ -39,7 +39,7 @@ type CoordinatorOption func(*Coordinator) // SchedulableTask is a wrapper around the Task struct, giving it methods to make it compatible with the Scheduler type SchedulableTask struct { - *influxdb.Task + *task2.Task sch scheduler.Schedule lsc time.Time } @@ -70,7 +70,7 @@ func WithLimitOpt(i int) CoordinatorOption { } // NewSchedulableTask transforms an influxdb task to a schedulable task type -func NewSchedulableTask(task *influxdb.Task) (SchedulableTask, error) { +func NewSchedulableTask(task *task2.Task) (SchedulableTask, error) { if task.Cron == "" && task.Every == "" { return SchedulableTask{}, errors.New("invalid cron or every") @@ -108,7 +108,7 @@ func NewCoordinator(log *zap.Logger, scheduler scheduler.Scheduler, executor Exe } // TaskCreated asks the Scheduler to schedule the newly created task -func (c *Coordinator) TaskCreated(ctx context.Context, task *influxdb.Task) error { +func (c *Coordinator) TaskCreated(ctx context.Context, task *task2.Task) error { t, err := NewSchedulableTask(task) if err != nil { @@ -124,7 +124,7 @@ func (c *Coordinator) TaskCreated(ctx context.Context, task *influxdb.Task) erro } // TaskUpdated releases the task if it is being disabled, and schedules it otherwise -func (c *Coordinator) TaskUpdated(ctx context.Context, from, to *influxdb.Task) error { +func (c *Coordinator) TaskUpdated(ctx context.Context, from, to *task2.Task) error { sid := scheduler.ID(to.ID) t, err := NewSchedulableTask(to) if err != nil { @@ -132,8 +132,8 @@ func (c *Coordinator) TaskUpdated(ctx context.Context, from, to *influxdb.Task) } // if disabling the task, release it before schedule update - if to.Status != from.Status && to.Status == string(influxdb.TaskInactive) { - if err := c.sch.Release(sid); err != nil && err != influxdb.ErrTaskNotClaimed { + if to.Status != from.Status && to.Status == string(task2.TaskInactive) { + if err := c.sch.Release(sid); err != nil && err != task2.ErrTaskNotClaimed { return err } } else { @@ -148,7 +148,7 @@ func (c *Coordinator) TaskUpdated(ctx context.Context, from, to *influxdb.Task) //TaskDeleted asks the Scheduler to release the deleted task func (c *Coordinator) TaskDeleted(ctx context.Context, id platform.ID) error { tid := scheduler.ID(id) - if err := c.sch.Release(tid); err != nil && err != influxdb.ErrTaskNotClaimed { + if err := c.sch.Release(tid); err != nil && err != task2.ErrTaskNotClaimed { return err } @@ -163,10 +163,10 @@ func (c *Coordinator) RunCancelled(ctx context.Context, runID platform.ID) error } // RunRetried speaks directly to the executor to re-try a task run immediately -func (c *Coordinator) RunRetried(ctx context.Context, task *influxdb.Task, run *influxdb.Run) error { +func (c *Coordinator) RunRetried(ctx context.Context, task *task2.Task, run *task2.Run) error { promise, err := c.ex.ManualRun(ctx, task.ID, run.ID) if err != nil { - return influxdb.ErrRunExecutionError(err) + return task2.ErrRunExecutionError(err) } <-promise.Done() @@ -178,10 +178,10 @@ func (c *Coordinator) RunRetried(ctx context.Context, task *influxdb.Task, run * } // RunForced speaks directly to the Executor to run a task immediately -func (c *Coordinator) RunForced(ctx context.Context, task *influxdb.Task, run *influxdb.Run) error { +func (c *Coordinator) RunForced(ctx context.Context, task *task2.Task, run *task2.Run) error { promise, err := c.ex.ManualRun(ctx, task.ID, run.ID) if err != nil { - return influxdb.ErrRunExecutionError(err) + return task2.ErrRunExecutionError(err) } <-promise.Done() diff --git a/task/backend/coordinator/coordinator_test.go b/task/backend/coordinator/coordinator_test.go index 05f2292ccf8..e32d25437e5 100644 --- a/task/backend/coordinator/coordinator_test.go +++ b/task/backend/coordinator/coordinator_test.go @@ -3,6 +3,7 @@ package coordinator import ( "context" "fmt" + "github.com/influxdata/influxdb/v2/task" "testing" "time" @@ -10,7 +11,6 @@ import ( "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" - "github.com/influxdata/influxdb/v2" "github.com/influxdata/influxdb/v2/task/backend/scheduler" "go.uber.org/zap/zaptest" ) @@ -18,9 +18,9 @@ import ( func Test_Coordinator_Executor_Methods(t *testing.T) { var ( one = platform.ID(1) - taskOne = &influxdb.Task{ID: one} + taskOne = &task.Task{ID: one} - runOne = &influxdb.Run{ + runOne = &task.Run{ ID: one, TaskID: one, ScheduledFor: time.Now(), @@ -99,7 +99,7 @@ func Test_Coordinator_Executor_Methods(t *testing.T) { func TestNewSchedulableTask(t *testing.T) { now := time.Now().UTC() one := platform.ID(1) - taskOne := &influxdb.Task{ID: one, CreatedAt: now, Cron: "* * * * *", LatestCompleted: now} + taskOne := &task.Task{ID: one, CreatedAt: now, Cron: "* * * * *", LatestCompleted: now} schedulableT, err := NewSchedulableTask(taskOne) if err != nil { t.Fatal(err) @@ -109,7 +109,7 @@ func TestNewSchedulableTask(t *testing.T) { t.Fatalf("expected SchedulableTask's LatestScheduled to equal %s but it was %s", now.Truncate(time.Second), schedulableT.LastScheduled()) } - taskTwo := &influxdb.Task{ID: one, CreatedAt: now, Cron: "* * * * *", LatestCompleted: now, LatestScheduled: now.Add(-10 * time.Second)} + taskTwo := &task.Task{ID: one, CreatedAt: now, Cron: "* * * * *", LatestCompleted: now, LatestScheduled: now.Add(-10 * time.Second)} schedulableT, err = NewSchedulableTask(taskTwo) if err != nil { t.Fatal(err) @@ -128,17 +128,17 @@ func Test_Coordinator_Scheduler_Methods(t *testing.T) { three = platform.ID(3) now = time.Now().UTC() - taskOne = &influxdb.Task{ID: one, CreatedAt: now, Cron: "* * * * *"} - taskTwo = &influxdb.Task{ID: two, Status: "active", CreatedAt: now, Cron: "* * * * *"} - taskTwoInactive = &influxdb.Task{ID: two, Status: "inactive", CreatedAt: now, Cron: "* * * * *"} - taskThreeOriginal = &influxdb.Task{ + taskOne = &task.Task{ID: one, CreatedAt: now, Cron: "* * * * *"} + taskTwo = &task.Task{ID: two, Status: "active", CreatedAt: now, Cron: "* * * * *"} + taskTwoInactive = &task.Task{ID: two, Status: "inactive", CreatedAt: now, Cron: "* * * * *"} + taskThreeOriginal = &task.Task{ ID: three, Status: "active", Name: "Previous", CreatedAt: now, Cron: "* * * * *", } - taskThreeNew = &influxdb.Task{ + taskThreeNew = &task.Task{ ID: three, Status: "active", Name: "Renamed", @@ -161,7 +161,7 @@ func Test_Coordinator_Scheduler_Methods(t *testing.T) { t.Fatal(err) } - runOne := &influxdb.Run{ + runOne := &task.Run{ ID: one, TaskID: one, ScheduledFor: time.Now().UTC(), diff --git a/task/backend/coordinator/support_test.go b/task/backend/coordinator/support_test.go index 0154cef16b6..0f649183c4e 100644 --- a/task/backend/coordinator/support_test.go +++ b/task/backend/coordinator/support_test.go @@ -2,10 +2,10 @@ package coordinator import ( "context" + "github.com/influxdata/influxdb/v2/task" "github.com/influxdata/influxdb/v2/kit/platform" - "github.com/influxdata/influxdb/v2" "github.com/influxdata/influxdb/v2/task/backend/executor" "github.com/influxdata/influxdb/v2/task/backend/scheduler" ) @@ -45,7 +45,7 @@ type ( type ( promise struct { - run *influxdb.Run + run *task.Run done chan struct{} err error diff --git a/task/backend/coordinator_test.go b/task/backend/coordinator_test.go index 49afc2f506c..cf4f4eae91d 100644 --- a/task/backend/coordinator_test.go +++ b/task/backend/coordinator_test.go @@ -2,13 +2,13 @@ package backend import ( "context" + "github.com/influxdata/influxdb/v2/task" "testing" "time" "github.com/influxdata/influxdb/v2/kit/platform" "github.com/google/go-cmp/cmp" - "github.com/influxdata/influxdb/v2" "go.uber.org/zap/zaptest" ) @@ -20,12 +20,12 @@ var ( aTime = time.Now().UTC() - taskOne = &influxdb.Task{ID: one} - taskTwo = &influxdb.Task{ID: two, Status: "active"} - taskThree = &influxdb.Task{ID: three, Status: "inactive"} - taskFour = &influxdb.Task{ID: four} + taskOne = &task.Task{ID: one} + taskTwo = &task.Task{ID: two, Status: "active"} + taskThree = &task.Task{ID: three, Status: "inactive"} + taskFour = &task.Task{ID: four} - allTasks = map[platform.ID]*influxdb.Task{ + allTasks = map[platform.ID]*task.Task{ one: taskOne, two: taskTwo, three: taskThree, @@ -38,8 +38,8 @@ func Test_NotifyCoordinatorOfCreated(t *testing.T) { coordinator = &coordinator{} tasks = &taskService{ // paginated responses - pageOne: []*influxdb.Task{taskOne}, - otherPages: map[platform.ID][]*influxdb.Task{ + pageOne: []*task.Task{taskOne}, + otherPages: map[platform.ID][]*task.Task{ one: {taskTwo, taskThree}, three: {taskFour}, }, @@ -57,12 +57,12 @@ func Test_NotifyCoordinatorOfCreated(t *testing.T) { } if diff := cmp.Diff([]update{ - {two, influxdb.TaskUpdate{LatestCompleted: &aTime, LatestScheduled: &aTime}}, + {two, task.TaskUpdate{LatestCompleted: &aTime, LatestScheduled: &aTime}}, }, tasks.updates); diff != "" { t.Errorf("unexpected updates to task service %v", diff) } - if diff := cmp.Diff([]*influxdb.Task{ + if diff := cmp.Diff([]*task.Task{ taskTwo, }, coordinator.tasks); diff != "" { t.Errorf("unexpected tasks sent to coordinator %v", diff) @@ -70,10 +70,10 @@ func Test_NotifyCoordinatorOfCreated(t *testing.T) { } type coordinator struct { - tasks []*influxdb.Task + tasks []*task.Task } -func (c *coordinator) TaskCreated(_ context.Context, task *influxdb.Task) error { +func (c *coordinator) TaskCreated(_ context.Context, task *task.Task) error { c.tasks = append(c.tasks, task) return nil @@ -82,27 +82,27 @@ func (c *coordinator) TaskCreated(_ context.Context, task *influxdb.Task) error // TasksService mocking type taskService struct { // paginated tasks - pageOne []*influxdb.Task - otherPages map[platform.ID][]*influxdb.Task + pageOne []*task.Task + otherPages map[platform.ID][]*task.Task // find tasks call - filter influxdb.TaskFilter + filter task.TaskFilter // update call updates []update } type update struct { ID platform.ID - Update influxdb.TaskUpdate + Update task.TaskUpdate } -func (t *taskService) UpdateTask(_ context.Context, id platform.ID, upd influxdb.TaskUpdate) (*influxdb.Task, error) { +func (t *taskService) UpdateTask(_ context.Context, id platform.ID, upd task.TaskUpdate) (*task.Task, error) { t.updates = append(t.updates, update{id, upd}) return allTasks[id], nil } -func (t *taskService) FindTasks(_ context.Context, filter influxdb.TaskFilter) ([]*influxdb.Task, int, error) { +func (t *taskService) FindTasks(_ context.Context, filter task.TaskFilter) ([]*task.Task, int, error) { t.filter = filter if filter.After == nil { diff --git a/task/backend/executor/executor.go b/task/backend/executor/executor.go index abdf8650276..7855ae35115 100644 --- a/task/backend/executor/executor.go +++ b/task/backend/executor/executor.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "fmt" + "github.com/influxdata/influxdb/v2/task" "sync" "time" @@ -45,7 +46,7 @@ type Promise interface { // MultiLimit allows us to create a single limit func that applies more then one limit. func MultiLimit(limits ...LimitFunc) LimitFunc { - return func(task *influxdb.Task, run *influxdb.Run) error { + return func(task *task.Task, run *task.Run) error { for _, lf := range limits { if err := lf(task, run); err != nil { return err @@ -56,7 +57,7 @@ func MultiLimit(limits ...LimitFunc) LimitFunc { } // LimitFunc is a function the executor will use to -type LimitFunc func(*influxdb.Task, *influxdb.Run) error +type LimitFunc func(*task.Task, *task.Run) error type executorConfig struct { maxWorkers int @@ -127,7 +128,7 @@ func WithFlagger(flagger feature.Flagger) executorOption { } // NewExecutor creates a new task executor -func NewExecutor(log *zap.Logger, qs query.QueryService, us PermissionService, ts influxdb.TaskService, tcs backend.TaskControlService, opts ...executorOption) (*Executor, *ExecutorMetrics) { +func NewExecutor(log *zap.Logger, qs query.QueryService, us PermissionService, ts task.TaskService, tcs backend.TaskControlService, opts ...executorOption) (*Executor, *ExecutorMetrics) { cfg := &executorConfig{ maxWorkers: defaultMaxWorkers, systemBuildCompiler: NewASTCompiler, @@ -147,7 +148,7 @@ func NewExecutor(log *zap.Logger, qs query.QueryService, us PermissionService, t currentPromises: sync.Map{}, promiseQueue: make(chan *promise, maxPromises), workerLimit: make(chan struct{}, cfg.maxWorkers), - limitFunc: func(*influxdb.Task, *influxdb.Run) error { return nil }, // noop + limitFunc: func(*task.Task, *task.Run) error { return nil }, // noop systemBuildCompiler: cfg.systemBuildCompiler, nonSystemBuildCompiler: cfg.nonSystemBuildCompiler, flagger: cfg.flagger, @@ -166,7 +167,7 @@ func NewExecutor(log *zap.Logger, qs query.QueryService, us PermissionService, t // Executor it a task specific executor that works with the new scheduler system. type Executor struct { log *zap.Logger - ts influxdb.TaskService + ts task.TaskService tcs backend.TaskControlService qs query.QueryService @@ -251,7 +252,7 @@ func (e *Executor) ResumeCurrentRun(ctx context.Context, id platform.ID, runID p return p, err } } - return nil, influxdb.ErrRunNotFound + return nil, task.ErrRunNotFound } func (e *Executor) createRun(ctx context.Context, id platform.ID, scheduledFor time.Time, runAt time.Time) (*promise, error) { @@ -264,7 +265,7 @@ func (e *Executor) createRun(ctx context.Context, id platform.ID, scheduledFor t if err := e.tcs.AddRunLog(ctx, id, r.ID, time.Now().UTC(), fmt.Sprintf("Failed to enqueue run: %s", err.Error())); err != nil { e.log.Error("failed to fail create run: AddRunLog:", zap.Error(err)) } - if err := e.tcs.UpdateRunState(ctx, id, r.ID, time.Now().UTC(), influxdb.RunFail); err != nil { + if err := e.tcs.UpdateRunState(ctx, id, r.ID, time.Now().UTC(), task.RunFail); err != nil { e.log.Error("failed to fail create run: UpdateRunState:", zap.Error(err)) } if _, err := e.tcs.FinishRun(ctx, id, r.ID); err != nil { @@ -313,7 +314,7 @@ func (e *Executor) Cancel(ctx context.Context, runID platform.ID) error { return nil } -func (e *Executor) createPromise(ctx context.Context, run *influxdb.Run) (*promise, error) { +func (e *Executor) createPromise(ctx context.Context, run *task.Run) (*promise, error) { span, ctx := tracing.StartSpanFromContext(ctx) defer span.Finish() @@ -411,8 +412,8 @@ func (w *worker) work() { // If done the promise was canceled case <-prom.ctx.Done(): w.e.tcs.AddRunLog(prom.ctx, prom.task.ID, prom.run.ID, time.Now().UTC(), "Run canceled") - w.e.tcs.UpdateRunState(prom.ctx, prom.task.ID, prom.run.ID, time.Now().UTC(), influxdb.RunCanceled) - prom.err = influxdb.ErrRunCanceled + w.e.tcs.UpdateRunState(prom.ctx, prom.task.ID, prom.run.ID, time.Now().UTC(), task.RunCanceled) + prom.err = task.ErrRunCanceled close(prom.done) return case <-time.After(time.Second): @@ -438,14 +439,14 @@ func (w *worker) start(p *promise) { // add to run log w.e.tcs.AddRunLog(p.ctx, p.task.ID, p.run.ID, time.Now().UTC(), fmt.Sprintf("Started task from script: %q", p.task.Flux)) // update run status - w.e.tcs.UpdateRunState(ctx, p.task.ID, p.run.ID, time.Now().UTC(), influxdb.RunStarted) + w.e.tcs.UpdateRunState(ctx, p.task.ID, p.run.ID, time.Now().UTC(), task.RunStarted) // add to metrics w.e.metrics.StartRun(p.task, time.Since(p.createdAt), time.Since(p.run.RunAt)) p.startedAt = time.Now() } -func (w *worker) finish(p *promise, rs influxdb.RunStatus, err error) { +func (w *worker) finish(p *promise, rs task.RunStatus, err error) { span, ctx := tracing.StartSpanFromContext(p.ctx) defer span.Finish() @@ -496,7 +497,7 @@ func (w *worker) executeQuery(p *promise) { ctx = icontext.SetAuthorizer(ctx, p.auth) buildCompiler := w.systemBuildCompiler - if p.task.Type != influxdb.TaskSystemType { + if p.task.Type != task.TaskSystemType { buildCompiler = w.nonSystemBuildCompiler } compiler, err := buildCompiler(ctx, p.task.Flux, CompilerBuilderTimestamps{ @@ -504,7 +505,7 @@ func (w *worker) executeQuery(p *promise) { LatestSuccess: p.task.LatestSuccess, }) if err != nil { - w.finish(p, influxdb.RunFail, influxdb.ErrFluxParseError(err)) + w.finish(p, task.RunFail, task.ErrFluxParseError(err)) return } @@ -517,7 +518,7 @@ func (w *worker) executeQuery(p *promise) { it, err := w.e.qs.Query(ctx, req) if err != nil { // Assume the error should not be part of the runResult. - w.finish(p, influxdb.RunFail, influxdb.ErrQueryError(err)) + w.finish(p, task.RunFail, task.ErrQueryError(err)) return } @@ -540,16 +541,16 @@ func (w *worker) executeQuery(p *promise) { } if runErr != nil { - w.finish(p, influxdb.RunFail, influxdb.ErrRunExecutionError(runErr)) + w.finish(p, task.RunFail, task.ErrRunExecutionError(runErr)) return } if it.Err() != nil { - w.finish(p, influxdb.RunFail, influxdb.ErrResultIteratorError(it.Err())) + w.finish(p, task.RunFail, task.ErrResultIteratorError(it.Err())) return } - w.finish(p, influxdb.RunSuccess, nil) + w.finish(p, task.RunSuccess, nil) } // RunsActive returns the current number of workers, which is equivalent to @@ -570,8 +571,8 @@ func (e *Executor) PromiseQueueUsage() float64 { // promise represents a promise the executor makes to finish a run's execution asynchronously. type promise struct { - run *influxdb.Run - task *influxdb.Task + run *task.Run + task *task.Task auth *influxdb.Authorization done chan struct{} diff --git a/task/backend/executor/executor_metrics.go b/task/backend/executor/executor_metrics.go index c3d9b4a54b8..11e8d3969e6 100644 --- a/task/backend/executor/executor_metrics.go +++ b/task/backend/executor/executor_metrics.go @@ -1,12 +1,12 @@ package executor import ( + "github.com/influxdata/influxdb/v2/task" "time" "github.com/influxdata/influxdb/v2/kit/platform" "github.com/influxdata/influxdb/v2/kit/platform/errors" - "github.com/influxdata/influxdb/v2" "github.com/prometheus/client_golang/prometheus" ) @@ -137,7 +137,7 @@ func (em *ExecutorMetrics) PrometheusCollectors() []prometheus.Collector { } // StartRun store the delta time between when a run is due to start and actually starting. -func (em *ExecutorMetrics) StartRun(task *influxdb.Task, queueDelta time.Duration, runLatency time.Duration) { +func (em *ExecutorMetrics) StartRun(task *task.Task, queueDelta time.Duration, runLatency time.Duration) { em.queueDelta.WithLabelValues(task.Type, "all").Observe(queueDelta.Seconds()) em.queueDelta.WithLabelValues("", task.ID.String()).Observe(queueDelta.Seconds()) @@ -146,7 +146,7 @@ func (em *ExecutorMetrics) StartRun(task *influxdb.Task, queueDelta time.Duratio } // FinishRun adjusts the metrics to indicate a run is no longer in progress for the given task ID. -func (em *ExecutorMetrics) FinishRun(task *influxdb.Task, status influxdb.RunStatus, runDuration time.Duration) { +func (em *ExecutorMetrics) FinishRun(task *task.Task, status task.RunStatus, runDuration time.Duration) { em.totalRunsComplete.WithLabelValues(task.Type, status.String()).Inc() em.runDuration.WithLabelValues(task.Type, "all").Observe(runDuration.Seconds()) diff --git a/task/backend/executor/executor_test.go b/task/backend/executor/executor_test.go index e4eddb0723b..bef5a25f605 100644 --- a/task/backend/executor/executor_test.go +++ b/task/backend/executor/executor_test.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + task2 "github.com/influxdata/influxdb/v2/task" "os" "strings" "sync" @@ -123,7 +124,7 @@ func testQuerySuccess(t *testing.T) { ) ctx = opentracing.ContextWithSpan(ctx, span) - task, err := tes.i.CreateTask(ctx, influxdb.TaskCreate{OrganizationID: tes.tc.OrgID, OwnerID: tes.tc.Auth.GetUserID(), Flux: script}) + task, err := tes.i.CreateTask(ctx, task2.TaskCreate{OrganizationID: tes.tc.OrgID, OwnerID: tes.tc.Auth.GetUserID(), Flux: script}) if err != nil { t.Fatal(err) } @@ -185,7 +186,7 @@ func testQueryFailure(t *testing.T) { script := fmt.Sprintf(fmtTestScript, t.Name()) ctx := icontext.SetAuthorizer(context.Background(), tes.tc.Auth) - task, err := tes.i.CreateTask(ctx, influxdb.TaskCreate{OrganizationID: tes.tc.OrgID, OwnerID: tes.tc.Auth.GetUserID(), Flux: script}) + task, err := tes.i.CreateTask(ctx, task2.TaskCreate{OrganizationID: tes.tc.OrgID, OwnerID: tes.tc.Auth.GetUserID(), Flux: script}) if err != nil { t.Fatal(err) } @@ -221,7 +222,7 @@ func testManualRun(t *testing.T) { script := fmt.Sprintf(fmtTestScript, t.Name()) ctx := icontext.SetAuthorizer(context.Background(), tes.tc.Auth) - task, err := tes.i.CreateTask(ctx, influxdb.TaskCreate{OrganizationID: tes.tc.OrgID, OwnerID: tes.tc.Auth.GetUserID(), Flux: script}) + task, err := tes.i.CreateTask(ctx, task2.TaskCreate{OrganizationID: tes.tc.OrgID, OwnerID: tes.tc.Auth.GetUserID(), Flux: script}) if err != nil { t.Fatal(err) } @@ -268,7 +269,7 @@ func testResumingRun(t *testing.T) { script := fmt.Sprintf(fmtTestScript, t.Name()) ctx := icontext.SetAuthorizer(context.Background(), tes.tc.Auth) - task, err := tes.i.CreateTask(ctx, influxdb.TaskCreate{OrganizationID: tes.tc.OrgID, OwnerID: tes.tc.Auth.GetUserID(), Flux: script}) + task, err := tes.i.CreateTask(ctx, task2.TaskCreate{OrganizationID: tes.tc.OrgID, OwnerID: tes.tc.Auth.GetUserID(), Flux: script}) if err != nil { t.Fatal(err) } @@ -284,7 +285,7 @@ func testResumingRun(t *testing.T) { } // ensure that it doesn't recreate a promise - if _, err := tes.ex.ResumeCurrentRun(ctx, task.ID, stalledRun.ID); err != influxdb.ErrRunNotFound { + if _, err := tes.ex.ResumeCurrentRun(ctx, task.ID, stalledRun.ID); err != task2.ErrRunNotFound { t.Fatal("failed to error when run has already been resumed") } @@ -311,7 +312,7 @@ func testWorkerLimit(t *testing.T) { script := fmt.Sprintf(fmtTestScript, t.Name()) ctx := icontext.SetAuthorizer(context.Background(), tes.tc.Auth) - task, err := tes.i.CreateTask(ctx, influxdb.TaskCreate{OrganizationID: tes.tc.OrgID, OwnerID: tes.tc.Auth.GetUserID(), Flux: script}) + task, err := tes.i.CreateTask(ctx, task2.TaskCreate{OrganizationID: tes.tc.OrgID, OwnerID: tes.tc.Auth.GetUserID(), Flux: script}) if err != nil { t.Fatal(err) } @@ -341,16 +342,16 @@ func testLimitFunc(t *testing.T) { script := fmt.Sprintf(fmtTestScript, t.Name()) ctx := icontext.SetAuthorizer(context.Background(), tes.tc.Auth) - task, err := tes.i.CreateTask(ctx, influxdb.TaskCreate{OrganizationID: tes.tc.OrgID, OwnerID: tes.tc.Auth.GetUserID(), Flux: script}) + task, err := tes.i.CreateTask(ctx, task2.TaskCreate{OrganizationID: tes.tc.OrgID, OwnerID: tes.tc.Auth.GetUserID(), Flux: script}) if err != nil { t.Fatal(err) } forcedErr := errors.New("forced") - forcedQueryErr := influxdb.ErrQueryError(forcedErr) + forcedQueryErr := task2.ErrQueryError(forcedErr) tes.svc.FailNextQuery(forcedErr) count := 0 - tes.ex.SetLimitFunc(func(*influxdb.Task, *influxdb.Run) error { + tes.ex.SetLimitFunc(func(*task2.Task, *task2.Run) error { count++ if count < 2 { return errors.New("not there yet") @@ -387,7 +388,7 @@ func testMetrics(t *testing.T) { script := fmt.Sprintf(fmtTestScript, t.Name()) ctx := icontext.SetAuthorizer(context.Background(), tes.tc.Auth) - task, err := tes.i.CreateTask(ctx, influxdb.TaskCreate{OrganizationID: tes.tc.OrgID, OwnerID: tes.tc.Auth.GetUserID(), Flux: script}) + task, err := tes.i.CreateTask(ctx, task2.TaskCreate{OrganizationID: tes.tc.OrgID, OwnerID: tes.tc.Auth.GetUserID(), Flux: script}) assert.NoError(t, err) promise, err := tes.ex.PromisedExecute(ctx, scheduler.ID(task.ID), time.Unix(123, 0), time.Unix(126, 0)) @@ -425,7 +426,7 @@ func testMetrics(t *testing.T) { assert.NoError(t, promise.Error()) // manual runs metrics - mt, err := tes.i.CreateTask(ctx, influxdb.TaskCreate{OrganizationID: tes.tc.OrgID, OwnerID: tes.tc.Auth.GetUserID(), Flux: script}) + mt, err := tes.i.CreateTask(ctx, task2.TaskCreate{OrganizationID: tes.tc.OrgID, OwnerID: tes.tc.Auth.GetUserID(), Flux: script}) assert.NoError(t, err) scheduledFor := int64(123) @@ -463,7 +464,7 @@ func testIteratorFailure(t *testing.T) { script := fmt.Sprintf(fmtTestScript, t.Name()) ctx := icontext.SetAuthorizer(context.Background(), tes.tc.Auth) - task, err := tes.i.CreateTask(ctx, influxdb.TaskCreate{OrganizationID: tes.tc.OrgID, OwnerID: tes.tc.Auth.GetUserID(), Flux: script}) + task, err := tes.i.CreateTask(ctx, task2.TaskCreate{OrganizationID: tes.tc.OrgID, OwnerID: tes.tc.Auth.GetUserID(), Flux: script}) if err != nil { t.Fatal(err) } @@ -503,7 +504,7 @@ func testErrorHandling(t *testing.T) { script := fmt.Sprintf(fmtTestScript, t.Name()) ctx := icontext.SetAuthorizer(context.Background(), tes.tc.Auth) - task, err := tes.i.CreateTask(ctx, influxdb.TaskCreate{OrganizationID: tes.tc.OrgID, OwnerID: tes.tc.Auth.GetUserID(), Flux: script, Status: "active"}) + task, err := tes.i.CreateTask(ctx, task2.TaskCreate{OrganizationID: tes.tc.OrgID, OwnerID: tes.tc.Auth.GetUserID(), Flux: script, Status: "active"}) if err != nil { t.Fatal(err) } @@ -551,7 +552,7 @@ func TestPromiseFailure(t *testing.T) { ) ctx = opentracing.ContextWithSpan(ctx, span) - task, err := tes.i.CreateTask(ctx, influxdb.TaskCreate{OrganizationID: tes.tc.OrgID, OwnerID: tes.tc.Auth.GetUserID(), Flux: script}) + task, err := tes.i.CreateTask(ctx, task2.TaskCreate{OrganizationID: tes.tc.OrgID, OwnerID: tes.tc.Auth.GetUserID(), Flux: script}) if err != nil { t.Fatal(err) } @@ -569,7 +570,7 @@ func TestPromiseFailure(t *testing.T) { t.Fatalf("expected no promise but received one: %+v", promise) } - runs, _, err := tes.i.FindRuns(context.Background(), influxdb.RunFilter{Task: task.ID}) + runs, _, err := tes.i.FindRuns(context.Background(), task2.RunFilter{Task: task.ID}) if err != nil { t.Fatal(err) } @@ -587,10 +588,10 @@ func TestPromiseFailure(t *testing.T) { type taskControlService struct { backend.TaskControlService - run *influxdb.Run + run *task2.Run } -func (t *taskControlService) FinishRun(ctx context.Context, taskID platform.ID, runID platform.ID) (*influxdb.Run, error) { +func (t *taskControlService) FinishRun(ctx context.Context, taskID platform.ID, runID platform.ID) (*task2.Run, error) { // ensure auth set on context _, err := icontext.GetAuthorizer(ctx) if err != nil { diff --git a/task/backend/executor/limits.go b/task/backend/executor/limits.go index 68264b84db1..86df04b37a3 100644 --- a/task/backend/executor/limits.go +++ b/task/backend/executor/limits.go @@ -2,9 +2,9 @@ package executor import ( "context" + "github.com/influxdata/influxdb/v2/task" "sort" - "github.com/influxdata/influxdb/v2" "github.com/influxdata/influxdb/v2/query/fluxlang" "github.com/influxdata/influxdb/v2/task/options" ) @@ -12,7 +12,7 @@ import ( // ConcurrencyLimit creates a concurrency limit func that uses the executor to determine // if the task has exceeded the concurrency limit. func ConcurrencyLimit(exec *Executor, lang fluxlang.FluxLanguageService) LimitFunc { - return func(t *influxdb.Task, r *influxdb.Run) error { + return func(t *task.Task, r *task.Run) error { o, err := options.FromScriptAST(lang, t.Flux) if err != nil { return err @@ -40,13 +40,13 @@ func ConcurrencyLimit(exec *Executor, lang fluxlang.FluxLanguageService) LimitFu for i, run := range runs { if run.ID == r.ID { if i >= int(*o.Concurrency) { - return influxdb.ErrTaskConcurrencyLimitReached(i - int(*o.Concurrency)) + return task.ErrTaskConcurrencyLimitReached(i - int(*o.Concurrency)) } return nil // no need to keep looping. } } // this run isn't currently running. but we have more run's then the concurrency allows - return influxdb.ErrTaskConcurrencyLimitReached(len(runs) - int(*o.Concurrency)) + return task.ErrTaskConcurrencyLimitReached(len(runs) - int(*o.Concurrency)) } return nil } diff --git a/task/backend/executor/limits_test.go b/task/backend/executor/limits_test.go index 2578154e74d..033d9d487ad 100644 --- a/task/backend/executor/limits_test.go +++ b/task/backend/executor/limits_test.go @@ -2,16 +2,16 @@ package executor import ( "context" + "github.com/influxdata/influxdb/v2/task" "testing" "time" - "github.com/influxdata/influxdb/v2" "github.com/influxdata/influxdb/v2/query/fluxlang" ) var ( - taskWith1Concurrency = &influxdb.Task{ID: 1, Flux: `option task = {concurrency: 1, name:"x", every:1m} from(bucket:"b-src") |> range(start:-1m) |> to(bucket:"b-dst", org:"o")`} - taskWith10Concurrency = &influxdb.Task{ID: 1, Flux: `option task = {concurrency: 10, name:"x", every:1m} from(bucket:"b-src") |> range(start:-1m) |> to(bucket:"b-dst", org:"o")`} + taskWith1Concurrency = &task.Task{ID: 1, Flux: `option task = {concurrency: 1, name:"x", every:1m} from(bucket:"b-src") |> range(start:-1m) |> to(bucket:"b-dst", org:"o")`} + taskWith10Concurrency = &task.Task{ID: 1, Flux: `option task = {concurrency: 10, name:"x", every:1m} from(bucket:"b-src") |> range(start:-1m) |> to(bucket:"b-dst", org:"o")`} ) func TestTaskConcurrency(t *testing.T) { @@ -30,7 +30,7 @@ func TestTaskConcurrency(t *testing.T) { t.Fatal(err) } - r4 := &influxdb.Run{ + r4 := &task.Run{ ID: 3, ScheduledFor: time.Now(), } diff --git a/task/backend/middleware/check_middleware.go b/task/backend/middleware/check_middleware.go index 4a4097512ed..11cd9126618 100644 --- a/task/backend/middleware/check_middleware.go +++ b/task/backend/middleware/check_middleware.go @@ -3,6 +3,7 @@ package middleware import ( "context" "fmt" + "github.com/influxdata/influxdb/v2/task" "time" "github.com/influxdata/influxdb/v2/kit/platform" @@ -15,12 +16,12 @@ import ( type CoordinatingCheckService struct { influxdb.CheckService coordinator Coordinator - taskService influxdb.TaskService + taskService task.TaskService Now func() time.Time } // NewCheckService constructs a new coordinating check service -func NewCheckService(cs influxdb.CheckService, ts influxdb.TaskService, coordinator Coordinator) *CoordinatingCheckService { +func NewCheckService(cs influxdb.CheckService, ts task.TaskService, coordinator Coordinator) *CoordinatingCheckService { c := &CoordinatingCheckService{ CheckService: cs, taskService: ts, @@ -80,7 +81,7 @@ func (cs *CoordinatingCheckService) UpdateCheck(ctx context.Context, id platform // if the update is to activate and the previous task was inactive we should add a "latest completed" update // this allows us to see not run the task for inactive time - if fromTask.Status == string(influxdb.TaskInactive) && toTask.Status == string(influxdb.TaskActive) { + if fromTask.Status == string(task.TaskInactive) && toTask.Status == string(task.TaskActive) { toTask.LatestCompleted = cs.Now() } @@ -111,7 +112,7 @@ func (cs *CoordinatingCheckService) PatchCheck(ctx context.Context, id platform. // if the update is to activate and the previous task was inactive we should add a "latest completed" update // this allows us to see not run the task for inactive time - if fromTask.Status == string(influxdb.TaskInactive) && toTask.Status == string(influxdb.TaskActive) { + if fromTask.Status == string(task.TaskInactive) && toTask.Status == string(task.TaskActive) { toTask.LatestCompleted = cs.Now() } diff --git a/task/backend/middleware/check_middleware_test.go b/task/backend/middleware/check_middleware_test.go index 030110d936f..28f964e76b4 100644 --- a/task/backend/middleware/check_middleware_test.go +++ b/task/backend/middleware/check_middleware_test.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "github.com/influxdata/influxdb/v2/kit/platform" + "github.com/influxdata/influxdb/v2/task" "testing" "time" @@ -16,20 +17,20 @@ import ( type pipingCoordinator struct { err error - taskCreatedPipe chan *influxdb.Task - taskUpdatedPipe chan *influxdb.Task + taskCreatedPipe chan *task.Task + taskUpdatedPipe chan *task.Task taskDeletedPipe chan platform.ID } -func (p *pipingCoordinator) taskCreatedChan() <-chan *influxdb.Task { +func (p *pipingCoordinator) taskCreatedChan() <-chan *task.Task { if p.taskCreatedPipe == nil { - p.taskCreatedPipe = make(chan *influxdb.Task, 1) + p.taskCreatedPipe = make(chan *task.Task, 1) } return p.taskCreatedPipe } -func (p *pipingCoordinator) taskUpdatedChan() <-chan *influxdb.Task { +func (p *pipingCoordinator) taskUpdatedChan() <-chan *task.Task { if p.taskUpdatedPipe == nil { - p.taskUpdatedPipe = make(chan *influxdb.Task, 1) + p.taskUpdatedPipe = make(chan *task.Task, 1) } return p.taskUpdatedPipe } @@ -40,13 +41,13 @@ func (p *pipingCoordinator) taskDeletedChan() <-chan platform.ID { return p.taskDeletedPipe } -func (p *pipingCoordinator) TaskCreated(_ context.Context, t *influxdb.Task) error { +func (p *pipingCoordinator) TaskCreated(_ context.Context, t *task.Task) error { if p.taskCreatedPipe != nil { p.taskCreatedPipe <- t } return p.err } -func (p *pipingCoordinator) TaskUpdated(_ context.Context, from, to *influxdb.Task) error { +func (p *pipingCoordinator) TaskUpdated(_ context.Context, from, to *task.Task) error { if p.taskUpdatedPipe != nil { p.taskUpdatedPipe <- to } @@ -61,10 +62,10 @@ func (p *pipingCoordinator) TaskDeleted(_ context.Context, id platform.ID) error func (p *pipingCoordinator) RunCancelled(ctx context.Context, runID platform.ID) error { return p.err } -func (p *pipingCoordinator) RunRetried(ctx context.Context, task *influxdb.Task, run *influxdb.Run) error { +func (p *pipingCoordinator) RunRetried(ctx context.Context, task *task.Task, run *task.Run) error { return p.err } -func (p *pipingCoordinator) RunForced(ctx context.Context, task *influxdb.Task, run *influxdb.Run) error { +func (p *pipingCoordinator) RunForced(ctx context.Context, task *task.Task, run *task.Run) error { return p.err } @@ -78,10 +79,10 @@ type mockedSvc struct { func newMockServices() mockedSvc { return mockedSvc{ taskSvc: &mock.TaskService{ - FindTaskByIDFn: func(_ context.Context, id platform.ID) (*influxdb.Task, error) { return &influxdb.Task{ID: id}, nil }, - CreateTaskFn: func(context.Context, influxdb.TaskCreate) (*influxdb.Task, error) { return &influxdb.Task{ID: 1}, nil }, - UpdateTaskFn: func(_ context.Context, id platform.ID, _ influxdb.TaskUpdate) (*influxdb.Task, error) { - return &influxdb.Task{ID: id}, nil + FindTaskByIDFn: func(_ context.Context, id platform.ID) (*task.Task, error) { return &task.Task{ID: id}, nil }, + CreateTaskFn: func(context.Context, task.TaskCreate) (*task.Task, error) { return &task.Task{ID: 1}, nil }, + UpdateTaskFn: func(_ context.Context, id platform.ID, _ task.TaskUpdate) (*task.Task, error) { + return &task.Task{ID: id}, nil }, DeleteTaskFn: func(context.Context, platform.ID) error { return nil }, }, @@ -189,13 +190,13 @@ func TestCheckUpdateFromInactive(t *testing.T) { return c, nil } - mocks.taskSvc.FindTaskByIDFn = func(_ context.Context, id platform.ID) (*influxdb.Task, error) { + mocks.taskSvc.FindTaskByIDFn = func(_ context.Context, id platform.ID) (*task.Task, error) { if id == 1 { - return &influxdb.Task{ID: id, Status: string(influxdb.TaskInactive)}, nil + return &task.Task{ID: id, Status: string(task.TaskInactive)}, nil } else if id == 10 { - return &influxdb.Task{ID: id, Status: string(influxdb.TaskActive)}, nil + return &task.Task{ID: id, Status: string(task.TaskActive)}, nil } - return &influxdb.Task{ID: id}, nil + return &task.Task{ID: id}, nil } deadman := &check.Deadman{} diff --git a/task/backend/middleware/middleware.go b/task/backend/middleware/middleware.go index 6ddb7d28f8b..f66542a2c78 100644 --- a/task/backend/middleware/middleware.go +++ b/task/backend/middleware/middleware.go @@ -3,35 +3,34 @@ package middleware import ( "context" "fmt" + "github.com/influxdata/influxdb/v2/task" "time" "github.com/influxdata/influxdb/v2/kit/platform" - - "github.com/influxdata/influxdb/v2" ) // Coordinator is a type which is used to react to // task related actions type Coordinator interface { - TaskCreated(context.Context, *influxdb.Task) error - TaskUpdated(ctx context.Context, from, to *influxdb.Task) error + TaskCreated(context.Context, *task.Task) error + TaskUpdated(ctx context.Context, from, to *task.Task) error TaskDeleted(context.Context, platform.ID) error RunCancelled(ctx context.Context, runID platform.ID) error - RunRetried(ctx context.Context, task *influxdb.Task, run *influxdb.Run) error - RunForced(ctx context.Context, task *influxdb.Task, run *influxdb.Run) error + RunRetried(ctx context.Context, task *task.Task, run *task.Run) error + RunForced(ctx context.Context, task *task.Task, run *task.Run) error } // CoordinatingTaskService acts as a TaskService decorator that handles coordinating the api request // with the required task control actions asynchronously via a message dispatcher type CoordinatingTaskService struct { - influxdb.TaskService + task.TaskService coordinator Coordinator now func() time.Time } // New constructs a new coordinating task service -func New(service influxdb.TaskService, coordinator Coordinator, opts ...Option) *CoordinatingTaskService { +func New(service task.TaskService, coordinator Coordinator, opts ...Option) *CoordinatingTaskService { c := &CoordinatingTaskService{ TaskService: service, coordinator: coordinator, @@ -48,7 +47,7 @@ func New(service influxdb.TaskService, coordinator Coordinator, opts ...Option) } // CreateTask Creates a task in the existing task service and Publishes the change so any TaskD service can lease it. -func (s *CoordinatingTaskService) CreateTask(ctx context.Context, tc influxdb.TaskCreate) (*influxdb.Task, error) { +func (s *CoordinatingTaskService) CreateTask(ctx context.Context, tc task.TaskCreate) (*task.Task, error) { t, err := s.TaskService.CreateTask(ctx, tc) if err != nil { return t, err @@ -66,7 +65,7 @@ func (s *CoordinatingTaskService) CreateTask(ctx context.Context, tc influxdb.Ta } // UpdateTask Updates a task and publishes the change so the task owner can act on the update -func (s *CoordinatingTaskService) UpdateTask(ctx context.Context, id platform.ID, upd influxdb.TaskUpdate) (*influxdb.Task, error) { +func (s *CoordinatingTaskService) UpdateTask(ctx context.Context, id platform.ID, upd task.TaskUpdate) (*task.Task, error) { from, err := s.TaskService.FindTaskByID(ctx, id) if err != nil { return nil, err @@ -99,7 +98,7 @@ func (s *CoordinatingTaskService) CancelRun(ctx context.Context, taskID, runID p } // RetryRun calls retry on the task service and publishes the retry. -func (s *CoordinatingTaskService) RetryRun(ctx context.Context, taskID, runID platform.ID) (*influxdb.Run, error) { +func (s *CoordinatingTaskService) RetryRun(ctx context.Context, taskID, runID platform.ID) (*task.Run, error) { t, err := s.TaskService.FindTaskByID(ctx, taskID) if err != nil { return nil, err @@ -114,7 +113,7 @@ func (s *CoordinatingTaskService) RetryRun(ctx context.Context, taskID, runID pl } // ForceRun create the forced run in the task system and publish to the pubSub. -func (s *CoordinatingTaskService) ForceRun(ctx context.Context, taskID platform.ID, scheduledFor int64) (*influxdb.Run, error) { +func (s *CoordinatingTaskService) ForceRun(ctx context.Context, taskID platform.ID, scheduledFor int64) (*task.Run, error) { t, err := s.TaskService.FindTaskByID(ctx, taskID) if err != nil { return nil, err diff --git a/task/backend/middleware/middleware_test.go b/task/backend/middleware/middleware_test.go index 77d6fdb1f39..4d20f80f00b 100644 --- a/task/backend/middleware/middleware_test.go +++ b/task/backend/middleware/middleware_test.go @@ -4,11 +4,11 @@ import ( "context" "errors" "github.com/influxdata/influxdb/v2/kit/platform" + "github.com/influxdata/influxdb/v2/task" "sync" "testing" "time" - "github.com/influxdata/influxdb/v2" _ "github.com/influxdata/influxdb/v2/fluxinit/static" pmock "github.com/influxdata/influxdb/v2/mock" "github.com/influxdata/influxdb/v2/snowflake" @@ -31,19 +31,19 @@ func timeoutSelector(ch <-chan scheduler.ID) (scheduler.ID, error) { const script = `option task = {name: "a task",cron: "* * * * *"} from(bucket:"test") |> range(start:-1h)` -func inmemTaskService() influxdb.TaskService { +func inmemTaskService() task.TaskService { gen := snowflake.NewDefaultIDGenerator() - tasks := map[platform.ID]*influxdb.Task{} + tasks := map[platform.ID]*task.Task{} mu := sync.Mutex{} ts := &pmock.TaskService{ - CreateTaskFn: func(ctx context.Context, tc influxdb.TaskCreate) (*influxdb.Task, error) { + CreateTaskFn: func(ctx context.Context, tc task.TaskCreate) (*task.Task, error) { mu.Lock() defer mu.Unlock() id := gen.ID() - task := &influxdb.Task{ID: id, Flux: tc.Flux, Cron: "* * * * *", Status: tc.Status, OrganizationID: tc.OrganizationID, Organization: tc.Organization} + task := &task.Task{ID: id, Flux: tc.Flux, Cron: "* * * * *", Status: tc.Status, OrganizationID: tc.OrganizationID, Organization: tc.Organization} if task.Status == "" { - task.Status = string(influxdb.TaskActive) + task.Status = string(task.TaskActive) } tasks[id] = task @@ -55,12 +55,12 @@ func inmemTaskService() influxdb.TaskService { delete(tasks, id) return nil }, - UpdateTaskFn: func(ctx context.Context, id platform.ID, upd influxdb.TaskUpdate) (*influxdb.Task, error) { + UpdateTaskFn: func(ctx context.Context, id platform.ID, upd task.TaskUpdate) (*task.Task, error) { mu.Lock() defer mu.Unlock() t, ok := tasks[id] if !ok { - return nil, influxdb.ErrTaskNotFound + return nil, task.ErrTaskNotFound } if upd.Flux != nil { t.Flux = *upd.Flux @@ -75,37 +75,37 @@ func inmemTaskService() influxdb.TaskService { return t, nil }, - FindTaskByIDFn: func(ctx context.Context, id platform.ID) (*influxdb.Task, error) { + FindTaskByIDFn: func(ctx context.Context, id platform.ID) (*task.Task, error) { mu.Lock() defer mu.Unlock() t, ok := tasks[id] if !ok { - return nil, influxdb.ErrTaskNotFound + return nil, task.ErrTaskNotFound } newt := *t return &newt, nil }, - FindTasksFn: func(ctx context.Context, tf influxdb.TaskFilter) ([]*influxdb.Task, int, error) { + FindTasksFn: func(ctx context.Context, tf task.TaskFilter) ([]*task.Task, int, error) { mu.Lock() defer mu.Unlock() if tf.After != nil { - return []*influxdb.Task{}, 0, nil + return []*task.Task{}, 0, nil } - rtn := []*influxdb.Task{} + rtn := []*task.Task{} for _, task := range tasks { rtn = append(rtn, task) } return rtn, len(rtn), nil }, - ForceRunFn: func(ctx context.Context, id platform.ID, scheduledFor int64) (*influxdb.Run, error) { + ForceRunFn: func(ctx context.Context, id platform.ID, scheduledFor int64) (*task.Run, error) { mu.Lock() defer mu.Unlock() t, ok := tasks[id] if !ok { - return nil, influxdb.ErrTaskNotFound + return nil, task.ErrTaskNotFound } - return &influxdb.Run{ID: id, TaskID: t.ID, ScheduledFor: time.Unix(scheduledFor, 0)}, nil + return &task.Run{ID: id, TaskID: t.ID, ScheduledFor: time.Unix(scheduledFor, 0)}, nil }, } return ts @@ -121,7 +121,7 @@ func TestCoordinatingTaskService(t *testing.T) { middleware = middleware.New(ts, coord) ) - task, err := middleware.CreateTask(context.Background(), influxdb.TaskCreate{OrganizationID: 1, Flux: script}) + task, err := middleware.CreateTask(context.Background(), task.TaskCreate{OrganizationID: 1, Flux: script}) if err != nil { t.Fatal(err) } @@ -147,13 +147,13 @@ func TestCoordinatingTaskService(t *testing.T) { t.Fatal("task sent to scheduler doesn't match task created") } - task, err = middleware.CreateTask(context.Background(), influxdb.TaskCreate{OrganizationID: 1, Flux: script}) + task, err = middleware.CreateTask(context.Background(), task.TaskCreate{OrganizationID: 1, Flux: script}) if err != nil { t.Fatal(err) } - inactive := string(influxdb.TaskInactive) - res, err := middleware.UpdateTask(context.Background(), task.ID, influxdb.TaskUpdate{Status: &inactive}) + inactive := string(task.TaskInactive) + res, err := middleware.UpdateTask(context.Background(), task.ID, task.TaskUpdate{Status: &inactive}) if err != nil { t.Fatal(err) } @@ -172,8 +172,8 @@ func TestCoordinatingTaskService(t *testing.T) { t.Fatal("task sent to scheduler doesnt match task created") } - active := string(influxdb.TaskActive) - if _, err := middleware.UpdateTask(context.Background(), task.ID, influxdb.TaskUpdate{Status: &active}); err != nil { + active := string(task.TaskActive) + if _, err := middleware.UpdateTask(context.Background(), task.ID, task.TaskUpdate{Status: &active}); err != nil { t.Fatal(err) } @@ -182,7 +182,7 @@ func TestCoordinatingTaskService(t *testing.T) { } newScript := `option task = {name: "a task",cron: "1 * * * *"} from(bucket:"test") |> range(start:-2h)` - if _, err := middleware.UpdateTask(context.Background(), task.ID, influxdb.TaskUpdate{Flux: &newScript}); err != nil { + if _, err := middleware.UpdateTask(context.Background(), task.ID, task.TaskUpdate{Flux: &newScript}); err != nil { t.Fatal(err) } @@ -201,7 +201,7 @@ func TestCoordinatingTaskService_ForceRun(t *testing.T) { ) // Create an isolated task directly through the store so the coordinator doesn't know about it. - task, err := middleware.CreateTask(context.Background(), influxdb.TaskCreate{OrganizationID: 1, Flux: script}) + task, err := middleware.CreateTask(context.Background(), task.TaskCreate{OrganizationID: 1, Flux: script}) if err != nil { t.Fatal(err) } diff --git a/task/backend/middleware/notification_middleware.go b/task/backend/middleware/notification_middleware.go index 176c3b1bb4c..41de6127715 100644 --- a/task/backend/middleware/notification_middleware.go +++ b/task/backend/middleware/notification_middleware.go @@ -3,6 +3,7 @@ package middleware import ( "context" "fmt" + "github.com/influxdata/influxdb/v2/task" "time" "github.com/influxdata/influxdb/v2/kit/platform" @@ -15,12 +16,12 @@ import ( type CoordinatingNotificationRuleStore struct { influxdb.NotificationRuleStore coordinator Coordinator - taskService influxdb.TaskService + taskService task.TaskService Now func() time.Time } // NewNotificationRuleStore constructs a new coordinating notification service -func NewNotificationRuleStore(ns influxdb.NotificationRuleStore, ts influxdb.TaskService, coordinator Coordinator) *CoordinatingNotificationRuleStore { +func NewNotificationRuleStore(ns influxdb.NotificationRuleStore, ts task.TaskService, coordinator Coordinator) *CoordinatingNotificationRuleStore { c := &CoordinatingNotificationRuleStore{ NotificationRuleStore: ns, taskService: ts, @@ -79,7 +80,7 @@ func (ns *CoordinatingNotificationRuleStore) UpdateNotificationRule(ctx context. } // if the update is to activate and the previous task was inactive we should add a "latest completed" update // this allows us to see not run the task for inactive time - if fromTask.Status == string(influxdb.TaskInactive) && toTask.Status == string(influxdb.TaskActive) { + if fromTask.Status == string(task.TaskInactive) && toTask.Status == string(task.TaskActive) { toTask.LatestCompleted = ns.Now() } @@ -110,7 +111,7 @@ func (ns *CoordinatingNotificationRuleStore) PatchNotificationRule(ctx context.C // if the update is to activate and the previous task was inactive we should add a "latest completed" update // this allows us to see not run the task for inactive time - if fromTask.Status == string(influxdb.TaskInactive) && toTask.Status == string(influxdb.TaskActive) { + if fromTask.Status == string(task.TaskInactive) && toTask.Status == string(task.TaskActive) { toTask.LatestCompleted = ns.Now() } diff --git a/task/backend/middleware/notification_middleware_test.go b/task/backend/middleware/notification_middleware_test.go index 26379218275..dcd188f014c 100644 --- a/task/backend/middleware/notification_middleware_test.go +++ b/task/backend/middleware/notification_middleware_test.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "github.com/influxdata/influxdb/v2/kit/platform" + "github.com/influxdata/influxdb/v2/task" "testing" "time" @@ -80,13 +81,13 @@ func TestNotificationRuleUpdateFromInactive(t *testing.T) { return c, nil } - mocks.taskSvc.FindTaskByIDFn = func(_ context.Context, id platform.ID) (*influxdb.Task, error) { + mocks.taskSvc.FindTaskByIDFn = func(_ context.Context, id platform.ID) (*task.Task, error) { if id == 1 { - return &influxdb.Task{ID: id, Status: string(influxdb.TaskInactive)}, nil + return &task.Task{ID: id, Status: string(task.TaskInactive)}, nil } else if id == 10 { - return &influxdb.Task{ID: id, Status: string(influxdb.TaskActive)}, nil + return &task.Task{ID: id, Status: string(task.TaskActive)}, nil } - return &influxdb.Task{ID: id}, nil + return &task.Task{ID: id}, nil } deadman := &rule.HTTP{} diff --git a/task/backend/run_recorder.go b/task/backend/run_recorder.go index 0de15cd17d3..f327cf0db04 100644 --- a/task/backend/run_recorder.go +++ b/task/backend/run_recorder.go @@ -4,11 +4,11 @@ import ( "context" "encoding/json" "fmt" + "github.com/influxdata/influxdb/v2/task" "time" "github.com/influxdata/influxdb/v2/kit/platform" - "github.com/influxdata/influxdb/v2" "github.com/influxdata/influxdb/v2/models" "github.com/influxdata/influxdb/v2/storage" "go.uber.org/zap" @@ -29,7 +29,7 @@ func NewStoragePointsWriterRecorder(log *zap.Logger, pw storage.PointsWriter) *S // Record formats the provided run as a models.Point and writes the resulting // point to an underlying storage.PointsWriter -func (s *StoragePointsWriterRecorder) Record(ctx context.Context, orgID platform.ID, org string, bucketID platform.ID, bucket string, run *influxdb.Run) error { +func (s *StoragePointsWriterRecorder) Record(ctx context.Context, orgID platform.ID, org string, bucketID platform.ID, bucket string, run *task.Run) error { tags := models.NewTags(map[string]string{ statusTag: run.Status, taskIDTag: run.TaskID.String(), diff --git a/task/backend/schedulable_task_service.go b/task/backend/schedulable_task_service.go index cce2f77f271..94d207ce291 100644 --- a/task/backend/schedulable_task_service.go +++ b/task/backend/schedulable_task_service.go @@ -3,11 +3,11 @@ package backend import ( "context" "fmt" + "github.com/influxdata/influxdb/v2/task" "time" "github.com/influxdata/influxdb/v2/kit/platform" - "github.com/influxdata/influxdb/v2" "github.com/influxdata/influxdb/v2/task/backend/scheduler" ) @@ -15,7 +15,7 @@ var _ scheduler.SchedulableService = (*SchedulableTaskService)(nil) // UpdateTaskService provides an API to update the LatestScheduled time of a task type UpdateTaskService interface { - UpdateTask(ctx context.Context, id platform.ID, upd influxdb.TaskUpdate) (*influxdb.Task, error) + UpdateTask(ctx context.Context, id platform.ID, upd task.TaskUpdate) (*task.Task, error) } // SchedulableTaskService implements the SchedulableService interface @@ -30,7 +30,7 @@ func NewSchedulableTaskService(ts UpdateTaskService) SchedulableTaskService { // UpdateLastScheduled uses the task service to store the latest time a task was scheduled to run func (s SchedulableTaskService) UpdateLastScheduled(ctx context.Context, id scheduler.ID, t time.Time) error { - _, err := s.UpdateTask(ctx, platform.ID(id), influxdb.TaskUpdate{ + _, err := s.UpdateTask(ctx, platform.ID(id), task.TaskUpdate{ LatestScheduled: &t, }) diff --git a/task/backend/schedulable_task_service_test.go b/task/backend/schedulable_task_service_test.go index 2a0277ed08c..b28d05c5586 100644 --- a/task/backend/schedulable_task_service_test.go +++ b/task/backend/schedulable_task_service_test.go @@ -2,12 +2,12 @@ package backend import ( "context" + "github.com/influxdata/influxdb/v2/task" "testing" "time" "github.com/influxdata/influxdb/v2/kit/platform" - "github.com/influxdata/influxdb/v2" "github.com/influxdata/influxdb/v2/task/backend/scheduler" ) @@ -16,8 +16,8 @@ var ( mockTimeNow = time.Now() ) -func (m MockTaskService) UpdateTask(_ context.Context, id platform.ID, _ influxdb.TaskUpdate) (*influxdb.Task, error) { - return &influxdb.Task{ID: id, UpdatedAt: mockTimeNow}, nil +func (m MockTaskService) UpdateTask(_ context.Context, id platform.ID, _ task.TaskUpdate) (*task.Task, error) { + return &task.Task{ID: id, UpdatedAt: mockTimeNow}, nil } type MockTaskService struct{} @@ -26,7 +26,7 @@ func Test_Schedulable_Task_Service(t *testing.T) { for _, test := range []struct { name string - task *influxdb.Task + task *task.Task }{ { name: "Create New Schedulable Task Service", diff --git a/task/backend/task.go b/task/backend/task.go index 05d4c257738..fc9171ec8e4 100644 --- a/task/backend/task.go +++ b/task/backend/task.go @@ -2,11 +2,10 @@ package backend import ( "context" + "github.com/influxdata/influxdb/v2/task" "time" "github.com/influxdata/influxdb/v2/kit/platform" - - "github.com/influxdata/influxdb/v2" ) // TaskControlService is a low-level controller interface, intended to be passed to @@ -14,19 +13,19 @@ import ( type TaskControlService interface { // CreateRun creates a run with a scheduled for time. - CreateRun(ctx context.Context, taskID platform.ID, scheduledFor time.Time, runAt time.Time) (*influxdb.Run, error) + CreateRun(ctx context.Context, taskID platform.ID, scheduledFor time.Time, runAt time.Time) (*task.Run, error) - CurrentlyRunning(ctx context.Context, taskID platform.ID) ([]*influxdb.Run, error) - ManualRuns(ctx context.Context, taskID platform.ID) ([]*influxdb.Run, error) + CurrentlyRunning(ctx context.Context, taskID platform.ID) ([]*task.Run, error) + ManualRuns(ctx context.Context, taskID platform.ID) ([]*task.Run, error) // StartManualRun pulls a manual run from the list and moves it to currently running. - StartManualRun(ctx context.Context, taskID, runID platform.ID) (*influxdb.Run, error) + StartManualRun(ctx context.Context, taskID, runID platform.ID) (*task.Run, error) // FinishRun removes runID from the list of running tasks and if its `ScheduledFor` is later then last completed update it. - FinishRun(ctx context.Context, taskID, runID platform.ID) (*influxdb.Run, error) + FinishRun(ctx context.Context, taskID, runID platform.ID) (*task.Run, error) // UpdateRunState sets the run state at the respective time. - UpdateRunState(ctx context.Context, taskID, runID platform.ID, when time.Time, state influxdb.RunStatus) error + UpdateRunState(ctx context.Context, taskID, runID platform.ID, when time.Time, state task.RunStatus) error // AddRunLog adds a log line to the run. AddRunLog(ctx context.Context, taskID, runID platform.ID, when time.Time, log string) error diff --git a/task/mock/executor.go b/task/mock/executor.go index d52e86c4943..5197840aa3a 100644 --- a/task/mock/executor.go +++ b/task/mock/executor.go @@ -4,18 +4,18 @@ package mock import ( "context" "errors" + "github.com/influxdata/influxdb/v2/task" "sync" "time" "github.com/influxdata/influxdb/v2/kit/platform" - "github.com/influxdata/influxdb/v2" "github.com/influxdata/influxdb/v2/task/backend/executor" "github.com/influxdata/influxdb/v2/task/backend/scheduler" ) type promise struct { - run *influxdb.Run + run *task.Run hangingFor time.Duration done chan struct{} @@ -54,7 +54,7 @@ func (p *promise) Error() error { return p.err } -func (e *Executor) createPromise(ctx context.Context, run *influxdb.Run) (*promise, error) { +func (e *Executor) createPromise(ctx context.Context, run *task.Run) (*promise, error) { ctx, cancel := context.WithCancel(ctx) p := &promise{ run: run, @@ -104,7 +104,7 @@ func (e *Executor) Execute(ctx context.Context, id scheduler.ID, scheduledAt tim } func (e *Executor) ManualRun(ctx context.Context, id platform.ID, runID platform.ID) (executor.Promise, error) { - run := &influxdb.Run{ID: runID, TaskID: id, StartedAt: time.Now().UTC()} + run := &task.Run{ID: runID, TaskID: id, StartedAt: time.Now().UTC()} p, err := e.createPromise(ctx, run) return p, err } diff --git a/task/mock/task_control_service.go b/task/mock/task_control_service.go index 30e4f4c937a..670c24f8dbd 100644 --- a/task/mock/task_control_service.go +++ b/task/mock/task_control_service.go @@ -3,13 +3,13 @@ package mock import ( "context" "fmt" + "github.com/influxdata/influxdb/v2/task" "sort" "sync" "time" "github.com/influxdata/influxdb/v2/kit/platform" - "github.com/influxdata/influxdb/v2" "github.com/influxdata/influxdb/v2/snowflake" "github.com/influxdata/influxdb/v2/task/backend" ) @@ -20,54 +20,54 @@ var idgen = snowflake.NewDefaultIDGenerator() type TaskControlService struct { mu sync.Mutex // Map of stringified task ID to last ID used for run. - runs map[platform.ID]map[platform.ID]*influxdb.Run + runs map[platform.ID]map[platform.ID]*task.Run // Map of stringified, concatenated task and platform ID, to runs that have been created. - created map[string]*influxdb.Run + created map[string]*task.Run // Map of stringified task ID to task meta. - tasks map[platform.ID]*influxdb.Task - manualRuns []*influxdb.Run + tasks map[platform.ID]*task.Task + manualRuns []*task.Run // Map of task ID to total number of runs created for that task. totalRunsCreated map[platform.ID]int - finishedRuns map[platform.ID]*influxdb.Run + finishedRuns map[platform.ID]*task.Run } var _ backend.TaskControlService = (*TaskControlService)(nil) func NewTaskControlService() *TaskControlService { return &TaskControlService{ - runs: make(map[platform.ID]map[platform.ID]*influxdb.Run), - finishedRuns: make(map[platform.ID]*influxdb.Run), - tasks: make(map[platform.ID]*influxdb.Task), - created: make(map[string]*influxdb.Run), + runs: make(map[platform.ID]map[platform.ID]*task.Run), + finishedRuns: make(map[platform.ID]*task.Run), + tasks: make(map[platform.ID]*task.Task), + created: make(map[string]*task.Run), totalRunsCreated: make(map[platform.ID]int), } } // SetTask sets the task. // SetTask must be called before CreateNextRun, for a given task ID. -func (d *TaskControlService) SetTask(task *influxdb.Task) { +func (d *TaskControlService) SetTask(task *task.Task) { d.mu.Lock() defer d.mu.Unlock() d.tasks[task.ID] = task } -func (d *TaskControlService) SetManualRuns(runs []*influxdb.Run) { +func (d *TaskControlService) SetManualRuns(runs []*task.Run) { d.manualRuns = runs } -func (t *TaskControlService) CreateRun(_ context.Context, taskID platform.ID, scheduledFor time.Time, runAt time.Time) (*influxdb.Run, error) { +func (t *TaskControlService) CreateRun(_ context.Context, taskID platform.ID, scheduledFor time.Time, runAt time.Time) (*task.Run, error) { t.mu.Lock() defer t.mu.Unlock() runID := idgen.ID() runs, ok := t.runs[taskID] if !ok { - runs = make(map[platform.ID]*influxdb.Run) + runs = make(map[platform.ID]*task.Run) } - runs[runID] = &influxdb.Run{ + runs[runID] = &task.Run{ ID: runID, ScheduledFor: scheduledFor, } @@ -75,11 +75,11 @@ func (t *TaskControlService) CreateRun(_ context.Context, taskID platform.ID, sc return runs[runID], nil } -func (t *TaskControlService) StartManualRun(_ context.Context, taskID, runID platform.ID) (*influxdb.Run, error) { +func (t *TaskControlService) StartManualRun(_ context.Context, taskID, runID platform.ID) (*task.Run, error) { t.mu.Lock() defer t.mu.Unlock() - var run *influxdb.Run + var run *task.Run for i, r := range t.manualRuns { if r.ID == runID { run = r @@ -87,12 +87,12 @@ func (t *TaskControlService) StartManualRun(_ context.Context, taskID, runID pla } } if run == nil { - return nil, influxdb.ErrRunNotFound + return nil, task.ErrRunNotFound } return run, nil } -func (d *TaskControlService) FinishRun(_ context.Context, taskID, runID platform.ID) (*influxdb.Run, error) { +func (d *TaskControlService) FinishRun(_ context.Context, taskID, runID platform.ID) (*task.Run, error) { d.mu.Lock() defer d.mu.Unlock() @@ -111,28 +111,28 @@ func (d *TaskControlService) FinishRun(_ context.Context, taskID, runID platform return r, nil } -func (t *TaskControlService) CurrentlyRunning(ctx context.Context, taskID platform.ID) ([]*influxdb.Run, error) { +func (t *TaskControlService) CurrentlyRunning(ctx context.Context, taskID platform.ID) ([]*task.Run, error) { t.mu.Lock() defer t.mu.Unlock() - rtn := []*influxdb.Run{} + rtn := []*task.Run{} for _, run := range t.runs[taskID] { rtn = append(rtn, run) } return rtn, nil } -func (t *TaskControlService) ManualRuns(ctx context.Context, taskID platform.ID) ([]*influxdb.Run, error) { +func (t *TaskControlService) ManualRuns(ctx context.Context, taskID platform.ID) ([]*task.Run, error) { t.mu.Lock() defer t.mu.Unlock() if t.manualRuns != nil { return t.manualRuns, nil } - return []*influxdb.Run{}, nil + return []*task.Run{}, nil } // UpdateRunState sets the run state at the respective time. -func (d *TaskControlService) UpdateRunState(ctx context.Context, taskID, runID platform.ID, when time.Time, state influxdb.RunStatus) error { +func (d *TaskControlService) UpdateRunState(ctx context.Context, taskID, runID platform.ID, when time.Time, state task.RunStatus) error { d.mu.Lock() defer d.mu.Unlock() @@ -141,11 +141,11 @@ func (d *TaskControlService) UpdateRunState(ctx context.Context, taskID, runID p panic("run state called without a run") } switch state { - case influxdb.RunStarted: + case task.RunStarted: run.StartedAt = when - case influxdb.RunSuccess, influxdb.RunFail, influxdb.RunCanceled: + case task.RunSuccess, task.RunFail, task.RunCanceled: run.FinishedAt = when - case influxdb.RunScheduled: + case task.RunScheduled: // nothing default: panic("invalid status") @@ -163,15 +163,15 @@ func (d *TaskControlService) AddRunLog(ctx context.Context, taskID, runID platfo if run == nil { panic("cannot add a log to a non existent run") } - run.Log = append(run.Log, influxdb.Log{RunID: runID, Time: when.Format(time.RFC3339Nano), Message: log}) + run.Log = append(run.Log, task.Log{RunID: runID, Time: when.Format(time.RFC3339Nano), Message: log}) return nil } -func (d *TaskControlService) CreatedFor(taskID platform.ID) []*influxdb.Run { +func (d *TaskControlService) CreatedFor(taskID platform.ID) []*task.Run { d.mu.Lock() defer d.mu.Unlock() - var qrs []*influxdb.Run + var qrs []*task.Run for _, qr := range d.created { if qr.TaskID == taskID { qrs = append(qrs, qr) @@ -193,10 +193,10 @@ func (d *TaskControlService) TotalRunsCreatedForTask(taskID platform.ID) int { // If the expected number isn't found in time, it returns an error. // // Because the scheduler and executor do a lot of state changes asynchronously, this is useful in test. -func (d *TaskControlService) PollForNumberCreated(taskID platform.ID, count int) ([]*influxdb.Run, error) { +func (d *TaskControlService) PollForNumberCreated(taskID platform.ID, count int) ([]*task.Run, error) { const numAttempts = 50 actualCount := 0 - var created []*influxdb.Run + var created []*task.Run for i := 0; i < numAttempts; i++ { time.Sleep(2 * time.Millisecond) // we sleep even on first so it becomes more likely that we catch when too many are produced. created = d.CreatedFor(taskID) @@ -208,15 +208,15 @@ func (d *TaskControlService) PollForNumberCreated(taskID platform.ID, count int) return created, fmt.Errorf("did not see count of %d created run(s) for task with ID %s in time, instead saw %d", count, taskID, actualCount) // we return created anyways, to make it easier to debug } -func (d *TaskControlService) FinishedRun(runID platform.ID) *influxdb.Run { +func (d *TaskControlService) FinishedRun(runID platform.ID) *task.Run { d.mu.Lock() defer d.mu.Unlock() return d.finishedRuns[runID] } -func (d *TaskControlService) FinishedRuns() []*influxdb.Run { - rtn := []*influxdb.Run{} +func (d *TaskControlService) FinishedRuns() []*task.Run { + rtn := []*task.Run{} for _, run := range d.finishedRuns { rtn = append(rtn, run) } diff --git a/task/servicetest/servicetest.go b/task/servicetest/servicetest.go index e7827d9bd29..74255dd87b7 100644 --- a/task/servicetest/servicetest.go +++ b/task/servicetest/servicetest.go @@ -8,6 +8,7 @@ package servicetest import ( "context" "fmt" + "github.com/influxdata/influxdb/v2/task" "math" "reflect" "runtime" @@ -173,7 +174,7 @@ type System struct { Ctx context.Context // TaskService is the task service we would like to test - TaskService influxdb.TaskService + TaskService task.TaskService // Override for accessing credentials for an individual test. // Callers can leave this nil and the test will create its own random IDs for each test. @@ -190,11 +191,11 @@ func testTaskCRUD(t *testing.T, sys *System) { cr := creds(t, sys) // Create a task. - tc := influxdb.TaskCreate{ + tc := task.TaskCreate{ OrganizationID: cr.OrgID, Flux: fmt.Sprintf(scriptFmt, 0), OwnerID: cr.UserID, - Type: influxdb.TaskSystemType, + Type: task.TaskSystemType, } authorizedCtx := icontext.SetAuthorizer(sys.Ctx, cr.Authorizer()) @@ -207,7 +208,7 @@ func testTaskCRUD(t *testing.T, sys *System) { t.Fatal("no task ID set") } - findTask := func(tasks []*influxdb.Task, id platform.ID) (*influxdb.Task, error) { + findTask := func(tasks []*task.Task, id platform.ID) (*task.Task, error) { for _, t := range tasks { if t.ID == id { return t, nil @@ -216,8 +217,8 @@ func testTaskCRUD(t *testing.T, sys *System) { return nil, fmt.Errorf("failed to find task by id %s", id) } - findTasksByStatus := func(tasks []*influxdb.Task, status string) []*influxdb.Task { - var foundTasks = []*influxdb.Task{} + findTasksByStatus := func(tasks []*task.Task, status string) []*task.Task { + var foundTasks = []*task.Task{} for _, t := range tasks { if t.Status == status { foundTasks = append(foundTasks, t) @@ -241,7 +242,7 @@ func testTaskCRUD(t *testing.T, sys *System) { // Look up a task the different ways we can. // Map of method name to found task. - found := map[string]*influxdb.Task{ + found := map[string]*task.Task{ "Created": tsk, } @@ -252,7 +253,7 @@ func testTaskCRUD(t *testing.T, sys *System) { } found["FindTaskByID"] = f - fs, _, err := sys.TaskService.FindTasks(sys.Ctx, influxdb.TaskFilter{OrganizationID: &cr.OrgID}) + fs, _, err := sys.TaskService.FindTasks(sys.Ctx, task.TaskFilter{OrganizationID: &cr.OrgID}) if err != nil { t.Fatal(err) } @@ -262,7 +263,7 @@ func testTaskCRUD(t *testing.T, sys *System) { } found["FindTasks with Organization filter"] = f - fs, _, err = sys.TaskService.FindTasks(sys.Ctx, influxdb.TaskFilter{Organization: cr.Org}) + fs, _, err = sys.TaskService.FindTasks(sys.Ctx, task.TaskFilter{Organization: cr.Org}) if err != nil { t.Fatal(err) } @@ -272,7 +273,7 @@ func testTaskCRUD(t *testing.T, sys *System) { } found["FindTasks with Organization name filter"] = f - fs, _, err = sys.TaskService.FindTasks(sys.Ctx, influxdb.TaskFilter{User: &cr.UserID}) + fs, _, err = sys.TaskService.FindTasks(sys.Ctx, task.TaskFilter{User: &cr.UserID}) if err != nil { t.Fatal(err) } @@ -282,7 +283,7 @@ func testTaskCRUD(t *testing.T, sys *System) { } found["FindTasks with User filter"] = f - want := &influxdb.Task{ + want := &task.Task{ ID: tsk.ID, CreatedAt: tsk.CreatedAt, LatestCompleted: tsk.LatestCompleted, @@ -293,9 +294,9 @@ func testTaskCRUD(t *testing.T, sys *System) { Name: "task #0", Cron: "* * * * *", Offset: 5 * time.Second, - Status: string(influxdb.DefaultTaskStatus), + Status: string(task.DefaultTaskStatus), Flux: fmt.Sprintf(scriptFmt, 0), - Type: influxdb.TaskSystemType, + Type: task.TaskSystemType, } for fn, f := range found { @@ -306,11 +307,11 @@ func testTaskCRUD(t *testing.T, sys *System) { } // Check limits - tc2 := influxdb.TaskCreate{ + tc2 := task.TaskCreate{ OrganizationID: cr.OrgID, Flux: fmt.Sprintf(scriptFmt, 1), OwnerID: cr.UserID, - Status: string(influxdb.TaskInactive), + Status: string(task.TaskInactive), } if _, err := sys.TaskService.CreateTask(authorizedCtx, tc2); err != nil { @@ -319,7 +320,7 @@ func testTaskCRUD(t *testing.T, sys *System) { if !tsk.ID.Valid() { t.Fatal("no task ID set") } - tasks, _, err := sys.TaskService.FindTasks(sys.Ctx, influxdb.TaskFilter{OrganizationID: &cr.OrgID, Limit: 1}) + tasks, _, err := sys.TaskService.FindTasks(sys.Ctx, task.TaskFilter{OrganizationID: &cr.OrgID, Limit: 1}) if err != nil { t.Fatal(err) } @@ -329,7 +330,7 @@ func testTaskCRUD(t *testing.T, sys *System) { // Check after first := tasks[0] - tasks, _, err = sys.TaskService.FindTasks(sys.Ctx, influxdb.TaskFilter{OrganizationID: &cr.OrgID, After: &first.ID}) + tasks, _, err = sys.TaskService.FindTasks(sys.Ctx, task.TaskFilter{OrganizationID: &cr.OrgID, After: &first.ID}) if err != nil { t.Fatal(err) } @@ -345,24 +346,24 @@ func testTaskCRUD(t *testing.T, sys *System) { } // Check task status filter - active := string(influxdb.TaskActive) - fs, _, err = sys.TaskService.FindTasks(sys.Ctx, influxdb.TaskFilter{Status: &active}) + active := string(task.TaskActive) + fs, _, err = sys.TaskService.FindTasks(sys.Ctx, task.TaskFilter{Status: &active}) if err != nil { t.Fatal(err) } - activeTasks := findTasksByStatus(fs, string(influxdb.TaskActive)) + activeTasks := findTasksByStatus(fs, string(task.TaskActive)) if len(fs) != len(activeTasks) { t.Fatalf("expected to find %d active tasks, found: %d", len(activeTasks), len(fs)) } - inactive := string(influxdb.TaskInactive) - fs, _, err = sys.TaskService.FindTasks(sys.Ctx, influxdb.TaskFilter{Status: &inactive}) + inactive := string(task.TaskInactive) + fs, _, err = sys.TaskService.FindTasks(sys.Ctx, task.TaskFilter{Status: &inactive}) if err != nil { t.Fatal(err) } - inactiveTasks := findTasksByStatus(fs, string(influxdb.TaskInactive)) + inactiveTasks := findTasksByStatus(fs, string(task.TaskInactive)) if len(fs) != len(inactiveTasks) { t.Fatalf("expected to find %d inactive tasks, found: %d", len(inactiveTasks), len(fs)) } @@ -370,7 +371,7 @@ func testTaskCRUD(t *testing.T, sys *System) { // Update task: script only. newFlux := fmt.Sprintf(scriptFmt, 99) origID := f.ID - f, err = sys.TaskService.UpdateTask(authorizedCtx, origID, influxdb.TaskUpdate{Flux: &newFlux}) + f, err = sys.TaskService.UpdateTask(authorizedCtx, origID, task.TaskUpdate{Flux: &newFlux}) if err != nil { t.Fatal(err) } @@ -382,13 +383,13 @@ func testTaskCRUD(t *testing.T, sys *System) { if f.Flux != newFlux { t.Fatalf("wrong flux from update; want %q, got %q", newFlux, f.Flux) } - if f.Status != string(influxdb.TaskActive) { + if f.Status != string(task.TaskActive) { t.Fatalf("expected task to be created active, got %q", f.Status) } // Update task: status only. - newStatus := string(influxdb.TaskInactive) - f, err = sys.TaskService.UpdateTask(authorizedCtx, origID, influxdb.TaskUpdate{Status: &newStatus}) + newStatus := string(task.TaskInactive) + f, err = sys.TaskService.UpdateTask(authorizedCtx, origID, task.TaskUpdate{Status: &newStatus}) if err != nil { t.Fatal(err) } @@ -400,9 +401,9 @@ func testTaskCRUD(t *testing.T, sys *System) { } // Update task: reactivate status and update script. - newStatus = string(influxdb.TaskActive) + newStatus = string(task.TaskActive) newFlux = fmt.Sprintf(scriptFmt, 98) - f, err = sys.TaskService.UpdateTask(authorizedCtx, origID, influxdb.TaskUpdate{Flux: &newFlux, Status: &newStatus}) + f, err = sys.TaskService.UpdateTask(authorizedCtx, origID, task.TaskUpdate{Flux: &newFlux, Status: &newStatus}) if err != nil { t.Fatal(err) } @@ -414,9 +415,9 @@ func testTaskCRUD(t *testing.T, sys *System) { } // Update task: just update an option. - newStatus = string(influxdb.TaskActive) + newStatus = string(task.TaskActive) newFlux = "option task = {\n\tname: \"task-changed #98\",\n\tcron: \"* * * * *\",\n\toffset: 5s,\n\tconcurrency: 100,\n}\n\nfrom(bucket: \"b\")\n\t|> to(bucket: \"two\", orgID: \"000000000000000\")" - f, err = sys.TaskService.UpdateTask(authorizedCtx, origID, influxdb.TaskUpdate{Options: options.Options{Name: "task-changed #98"}}) + f, err = sys.TaskService.UpdateTask(authorizedCtx, origID, task.TaskUpdate{Options: options.Options{Name: "task-changed #98"}}) if err != nil { t.Fatal(err) } @@ -429,9 +430,9 @@ func testTaskCRUD(t *testing.T, sys *System) { } // Update task: switch to every. - newStatus = string(influxdb.TaskActive) + newStatus = string(task.TaskActive) newFlux = "option task = {\n\tname: \"task-changed #98\",\n\tevery: 30s,\n\toffset: 5s,\n\tconcurrency: 100,\n}\n\nfrom(bucket: \"b\")\n\t|> to(bucket: \"two\", orgID: \"000000000000000\")" - f, err = sys.TaskService.UpdateTask(authorizedCtx, origID, influxdb.TaskUpdate{Options: options.Options{Every: *(options.MustParseDuration("30s"))}}) + f, err = sys.TaskService.UpdateTask(authorizedCtx, origID, task.TaskUpdate{Options: options.Options{Every: *(options.MustParseDuration("30s"))}}) if err != nil { t.Fatal(err) } @@ -444,9 +445,9 @@ func testTaskCRUD(t *testing.T, sys *System) { } // Update task: just cron. - newStatus = string(influxdb.TaskActive) + newStatus = string(task.TaskActive) newFlux = fmt.Sprintf(scriptDifferentName, 98) - f, err = sys.TaskService.UpdateTask(authorizedCtx, origID, influxdb.TaskUpdate{Options: options.Options{Cron: "* * * * *"}}) + f, err = sys.TaskService.UpdateTask(authorizedCtx, origID, task.TaskUpdate{Options: options.Options{Cron: "* * * * *"}}) if err != nil { t.Fatal(err) } @@ -491,8 +492,8 @@ func testTaskCRUD(t *testing.T, sys *System) { } // Task should not be returned. - if _, err := sys.TaskService.FindTaskByID(sys.Ctx, origID); err != influxdb.ErrTaskNotFound { - t.Fatalf("expected %v, got %v", influxdb.ErrTaskNotFound, err) + if _, err := sys.TaskService.FindTaskByID(sys.Ctx, origID); err != task.ErrTaskNotFound { + t.Fatalf("expected %v, got %v", task.ErrTaskNotFound, err) } } @@ -509,15 +510,15 @@ from(bucket: "b") cr := creds(t, sys) - tc := influxdb.TaskCreate{ + tc := task.TaskCreate{ OrganizationID: cr.OrgID, OwnerID: cr.UserID, - Type: influxdb.TaskSystemType, + Type: task.TaskSystemType, } authorizedCtx := icontext.SetAuthorizer(sys.Ctx, cr.Authorizer()) - created := make([]*influxdb.Task, 50) + created := make([]*task.Task, 50) for i := 0; i < 50; i++ { tc.Flux = fmt.Sprintf(script, i/10) tsk, err := sys.TaskService.CreateTask(authorizedCtx, tc) @@ -531,7 +532,7 @@ from(bucket: "b") created[i] = tsk } - tasks, _, err := sys.TaskService.FindTasks(sys.Ctx, influxdb.TaskFilter{Limit: 5}) + tasks, _, err := sys.TaskService.FindTasks(sys.Ctx, task.TaskFilter{Limit: 5}) if err != nil { t.Fatalf("FindTasks: %v", err) } @@ -542,7 +543,7 @@ from(bucket: "b") // find tasks using name which are after first 10 name := "Task 004" - tasks, _, err = sys.TaskService.FindTasks(sys.Ctx, influxdb.TaskFilter{Limit: 5, Name: &name}) + tasks, _, err = sys.TaskService.FindTasks(sys.Ctx, task.TaskFilter{Limit: 5, Name: &name}) if err != nil { t.Fatalf("FindTasks: %v", err) } @@ -564,14 +565,14 @@ func testTaskFindTasksAfterPaging(t *testing.T, sys *System) { from(bucket: "b") |> to(bucket: "two", orgID: "000000000000000")` cr = creds(t, sys) - tc = influxdb.TaskCreate{ + tc = task.TaskCreate{ OrganizationID: cr.OrgID, OwnerID: cr.UserID, - Type: influxdb.TaskSystemType, + Type: task.TaskSystemType, Flux: script, } authorizedCtx = icontext.SetAuthorizer(sys.Ctx, cr.Authorizer()) - created = make([]*influxdb.Task, 10) + created = make([]*task.Task, 10) taskName = "some-unique-task-name" ) @@ -603,7 +604,7 @@ from(bucket: "b") // one more than expected pages for i := 0; i < 6; i++ { - tasks, _, err := sys.TaskService.FindTasks(sys.Ctx, influxdb.TaskFilter{ + tasks, _, err := sys.TaskService.FindTasks(sys.Ctx, task.TaskFilter{ Limit: 2, After: after, Name: &taskName, @@ -648,7 +649,7 @@ from(bucket: "b") cr := creds(t, sys) - ct := influxdb.TaskCreate{ + ct := task.TaskCreate{ OrganizationID: cr.OrgID, Flux: script, OwnerID: cr.UserID, @@ -663,7 +664,7 @@ from(bucket: "b") from(bucket: "b") |> to(bucket: "two", orgID: "000000000000000")` - f, err := sys.TaskService.UpdateTask(authorizedCtx, task.ID, influxdb.TaskUpdate{Options: options.Options{Offset: &options.Duration{}, Every: *(options.MustParseDuration("10s"))}}) + f, err := sys.TaskService.UpdateTask(authorizedCtx, task.ID, task.TaskUpdate{Options: options.Options{Offset: &options.Duration{}, Every: *(options.MustParseDuration("10s"))}}) if err != nil { t.Fatal(err) } @@ -686,7 +687,7 @@ from(bucket: "b") from(bucket: "b") |> to(bucket: "two", orgID: "000000000000000")` - f, err := sys.TaskService.UpdateTask(authorizedCtx, task.ID, influxdb.TaskUpdate{Options: options.Options{Offset: options.MustParseDuration("10s")}}) + f, err := sys.TaskService.UpdateTask(authorizedCtx, task.ID, task.TaskUpdate{Options: options.Options{Offset: options.MustParseDuration("10s")}}) if err != nil { t.Fatal(err) } @@ -707,7 +708,7 @@ from(bucket: "b") from(bucket: "b") |> to(bucket: "two", orgID: "000000000000000")` - fNoOffset, err := sys.TaskService.UpdateTask(authorizedCtx, task.ID, influxdb.TaskUpdate{Flux: &withoutOffset}) + fNoOffset, err := sys.TaskService.UpdateTask(authorizedCtx, task.ID, task.TaskUpdate{Flux: &withoutOffset}) if err != nil { t.Fatal(err) } @@ -725,7 +726,7 @@ func testUpdate(t *testing.T, sys *System) { now := time.Now() earliestCA := now.Add(-time.Second) - ct := influxdb.TaskCreate{ + ct := task.TaskCreate{ OrganizationID: cr.OrgID, Flux: fmt.Sprintf(scriptFmt, 0), OwnerID: cr.UserID, @@ -767,11 +768,11 @@ func testUpdate(t *testing.T, sys *System) { t.Fatal(err) } - if err := sys.TaskControlService.UpdateRunState(sys.Ctx, task.ID, rc.ID, time.Now(), influxdb.RunStarted); err != nil { + if err := sys.TaskControlService.UpdateRunState(sys.Ctx, task.ID, rc.ID, time.Now(), task.RunStarted); err != nil { t.Fatal(err) } - if err := sys.TaskControlService.UpdateRunState(sys.Ctx, task.ID, rc.ID, time.Now(), influxdb.RunSuccess); err != nil { + if err := sys.TaskControlService.UpdateRunState(sys.Ctx, task.ID, rc.ID, time.Now(), task.RunSuccess); err != nil { t.Fatal(err) } @@ -801,7 +802,7 @@ func testUpdate(t *testing.T, sys *System) { t.Fatal(err) } - if err := sys.TaskControlService.UpdateRunState(sys.Ctx, task.ID, rc2.ID, time.Now(), influxdb.RunStarted); err != nil { + if err := sys.TaskControlService.UpdateRunState(sys.Ctx, task.ID, rc2.ID, time.Now(), task.RunStarted); err != nil { t.Fatal(err) } @@ -809,7 +810,7 @@ func testUpdate(t *testing.T, sys *System) { t.Fatal(err) } - if err := sys.TaskControlService.UpdateRunState(sys.Ctx, task.ID, rc2.ID, time.Now(), influxdb.RunFail); err != nil { + if err := sys.TaskControlService.UpdateRunState(sys.Ctx, task.ID, rc2.ID, time.Now(), task.RunFail); err != nil { t.Fatal(err) } @@ -840,7 +841,7 @@ func testUpdate(t *testing.T, sys *System) { now = time.Now() flux := fmt.Sprintf(scriptFmt, 1) - task, err = sys.TaskService.UpdateTask(authorizedCtx, task.ID, influxdb.TaskUpdate{Flux: &flux}) + task, err = sys.TaskService.UpdateTask(authorizedCtx, task.ID, task.TaskUpdate{Flux: &flux}) if err != nil { t.Fatal(err) } @@ -867,7 +868,7 @@ func testUpdate(t *testing.T, sys *System) { } ls := time.Now().Round(time.Second) // round to remove monotonic clock - task, err = sys.TaskService.UpdateTask(authorizedCtx, task.ID, influxdb.TaskUpdate{LatestScheduled: &ls}) + task, err = sys.TaskService.UpdateTask(authorizedCtx, task.ID, task.TaskUpdate{LatestScheduled: &ls}) if err != nil { t.Fatal(err) } @@ -890,7 +891,7 @@ func testTaskRuns(t *testing.T, sys *System) { // Script is set to run every minute. The platform adapter is currently hardcoded to schedule after "now", // which makes timing of runs somewhat difficult. - ct := influxdb.TaskCreate{ + ct := task.TaskCreate{ OrganizationID: cr.OrgID, Flux: fmt.Sprintf(scriptFmt, 0), OwnerID: cr.UserID, @@ -901,14 +902,14 @@ func testTaskRuns(t *testing.T, sys *System) { } // check run filter errors - _, _, err0 := sys.TaskService.FindRuns(sys.Ctx, influxdb.RunFilter{Task: task.ID, Limit: -1}) - if err0 != influxdb.ErrOutOfBoundsLimit { + _, _, err0 := sys.TaskService.FindRuns(sys.Ctx, task.RunFilter{Task: task.ID, Limit: -1}) + if err0 != task.ErrOutOfBoundsLimit { t.Fatalf("failed to error with out of bounds run limit: %d", -1) } - _, _, err1 := sys.TaskService.FindRuns(sys.Ctx, influxdb.RunFilter{Task: task.ID, Limit: influxdb.TaskMaxPageSize + 1}) - if err1 != influxdb.ErrOutOfBoundsLimit { - t.Fatalf("failed to error with out of bounds run limit: %d", influxdb.TaskMaxPageSize+1) + _, _, err1 := sys.TaskService.FindRuns(sys.Ctx, task.RunFilter{Task: task.ID, Limit: task.TaskMaxPageSize + 1}) + if err1 != task.ErrOutOfBoundsLimit { + t.Fatalf("failed to error with out of bounds run limit: %d", task.TaskMaxPageSize+1) } requestedAt := time.Now().Add(time.Hour * -1).UTC() // This should guarantee we can make two runs. @@ -924,7 +925,7 @@ func testTaskRuns(t *testing.T, sys *System) { startedAt := time.Now().UTC() // Update the run state to Started; normally the scheduler would do this. - if err := sys.TaskControlService.UpdateRunState(sys.Ctx, task.ID, rc0.ID, startedAt, influxdb.RunStarted); err != nil { + if err := sys.TaskControlService.UpdateRunState(sys.Ctx, task.ID, rc0.ID, startedAt, task.RunStarted); err != nil { t.Fatal(err) } @@ -937,11 +938,11 @@ func testTaskRuns(t *testing.T, sys *System) { } // Update the run state to Started; normally the scheduler would do this. - if err := sys.TaskControlService.UpdateRunState(sys.Ctx, task.ID, rc1.ID, startedAt, influxdb.RunStarted); err != nil { + if err := sys.TaskControlService.UpdateRunState(sys.Ctx, task.ID, rc1.ID, startedAt, task.RunStarted); err != nil { t.Fatal(err) } - runs, _, err := sys.TaskService.FindRuns(sys.Ctx, influxdb.RunFilter{Task: task.ID, Limit: 1}) + runs, _, err := sys.TaskService.FindRuns(sys.Ctx, task.RunFilter{Task: task.ID, Limit: 1}) if err != nil { t.Fatal(err) } @@ -951,7 +952,7 @@ func testTaskRuns(t *testing.T, sys *System) { } // Mark the second run finished. - if err := sys.TaskControlService.UpdateRunState(sys.Ctx, task.ID, rc1.ID, startedAt.Add(time.Second), influxdb.RunSuccess); err != nil { + if err := sys.TaskControlService.UpdateRunState(sys.Ctx, task.ID, rc1.ID, startedAt.Add(time.Second), task.RunSuccess); err != nil { t.Fatal(err) } @@ -960,7 +961,7 @@ func testTaskRuns(t *testing.T, sys *System) { } // Limit 1 should only return the earlier run. - runs, _, err = sys.TaskService.FindRuns(sys.Ctx, influxdb.RunFilter{Task: task.ID, Limit: 1}) + runs, _, err = sys.TaskService.FindRuns(sys.Ctx, task.RunFilter{Task: task.ID, Limit: 1}) if err != nil { t.Fatal(err) } @@ -973,8 +974,8 @@ func testTaskRuns(t *testing.T, sys *System) { if runs[0].StartedAt != startedAt { t.Fatalf("unexpectedStartedAt; want %s, got %s", startedAt, runs[0].StartedAt) } - if runs[0].Status != influxdb.RunStarted.String() { - t.Fatalf("unexpected run status; want %s, got %s", influxdb.RunStarted.String(), runs[0].Status) + if runs[0].Status != task.RunStarted.String() { + t.Fatalf("unexpected run status; want %s, got %s", task.RunStarted.String(), runs[0].Status) } if !runs[0].FinishedAt.IsZero() { @@ -984,13 +985,13 @@ func testTaskRuns(t *testing.T, sys *System) { // Look for a run that doesn't exist. _, err = sys.TaskService.FindRunByID(sys.Ctx, task.ID, platform.ID(math.MaxUint64)) if err == nil { - t.Fatalf("expected %s but got %s instead", influxdb.ErrRunNotFound, err) + t.Fatalf("expected %s but got %s instead", task.ErrRunNotFound, err) } // look for a taskID that doesn't exist. _, err = sys.TaskService.FindRunByID(sys.Ctx, platform.ID(math.MaxUint64), runs[0].ID) if err == nil { - t.Fatalf("expected %s but got %s instead", influxdb.ErrRunNotFound, err) + t.Fatalf("expected %s but got %s instead", task.ErrRunNotFound, err) } foundRun0, err := sys.TaskService.FindRunByID(sys.Ctx, task.ID, runs[0].ID) @@ -1014,7 +1015,7 @@ func testTaskRuns(t *testing.T, sys *System) { // Script is set to run every minute. The platform adapter is currently hardcoded to schedule after "now", // which makes timing of runs somewhat difficult. - ct := influxdb.TaskCreate{ + ct := task.TaskCreate{ OrganizationID: cr.OrgID, Flux: fmt.Sprintf(scriptFmt, 0), OwnerID: cr.UserID, @@ -1026,18 +1027,18 @@ func testTaskRuns(t *testing.T, sys *System) { // set to one hour before now because of bucket retention policy scheduledFor := time.Now().Add(time.Hour * -1).UTC() - runs := make([]*influxdb.Run, 0, 5) + runs := make([]*task.Run, 0, 5) // create runs to put into Context for i := 5; i > 0; i-- { run, err := sys.TaskControlService.CreateRun(ctx, task.ID, scheduledFor.Add(time.Second*time.Duration(i)), scheduledFor.Add(time.Second*time.Duration(i))) if err != nil { t.Fatal(err) } - err = sys.TaskControlService.UpdateRunState(ctx, task.ID, run.ID, scheduledFor.Add(time.Second*time.Duration(i+1)), influxdb.RunStarted) + err = sys.TaskControlService.UpdateRunState(ctx, task.ID, run.ID, scheduledFor.Add(time.Second*time.Duration(i+1)), task.RunStarted) if err != nil { t.Fatal(err) } - err = sys.TaskControlService.UpdateRunState(ctx, task.ID, run.ID, scheduledFor.Add(time.Second*time.Duration(i+2)), influxdb.RunSuccess) + err = sys.TaskControlService.UpdateRunState(ctx, task.ID, run.ID, scheduledFor.Add(time.Second*time.Duration(i+2)), task.RunSuccess) if err != nil { t.Fatal(err) } @@ -1045,7 +1046,7 @@ func testTaskRuns(t *testing.T, sys *System) { run.StartedAt = scheduledFor.Add(time.Second * time.Duration(i+1)) run.FinishedAt = scheduledFor.Add(time.Second * time.Duration(i+2)) run.RunAt = scheduledFor.Add(time.Second * time.Duration(i)) - run.Status = influxdb.RunSuccess.String() + run.Status = task.RunSuccess.String() run.Log = nil if sys.CallFinishRun { @@ -1061,7 +1062,7 @@ func testTaskRuns(t *testing.T, sys *System) { } found, _, err := sys.TaskService.FindRuns(ctx, - influxdb.RunFilter{ + task.RunFilter{ Task: task.ID, Limit: 2, AfterTime: scheduledFor.Add(time.Second * time.Duration(1)).Format(time.RFC3339), @@ -1078,7 +1079,7 @@ func testTaskRuns(t *testing.T, sys *System) { t.Run("ForceRun", func(t *testing.T) { t.Parallel() - ct := influxdb.TaskCreate{ + ct := task.TaskCreate{ OrganizationID: cr.OrgID, Flux: fmt.Sprintf(scriptFmt, 0), OwnerID: cr.UserID, @@ -1107,7 +1108,7 @@ func testTaskRuns(t *testing.T, sys *System) { t.Run("FindLogs", func(t *testing.T) { t.Parallel() - ct := influxdb.TaskCreate{ + ct := task.TaskCreate{ OrganizationID: cr.OrgID, Flux: fmt.Sprintf(scriptFmt, 0), OwnerID: cr.UserID, @@ -1124,7 +1125,7 @@ func testTaskRuns(t *testing.T, sys *System) { if err != nil { t.Fatal(err) } - if err := sys.TaskControlService.UpdateRunState(sys.Ctx, task.ID, rc1.ID, time.Now(), influxdb.RunStarted); err != nil { + if err := sys.TaskControlService.UpdateRunState(sys.Ctx, task.ID, rc1.ID, time.Now(), task.RunStarted); err != nil { t.Fatal(err) } @@ -1132,7 +1133,7 @@ func testTaskRuns(t *testing.T, sys *System) { if err != nil { t.Fatal(err) } - if err := sys.TaskControlService.UpdateRunState(sys.Ctx, task.ID, rc2.ID, time.Now(), influxdb.RunStarted); err != nil { + if err := sys.TaskControlService.UpdateRunState(sys.Ctx, task.ID, rc2.ID, time.Now(), task.RunStarted); err != nil { t.Fatal(err) } // Add a log for the first run. @@ -1142,7 +1143,7 @@ func testTaskRuns(t *testing.T, sys *System) { } // Ensure it is returned when filtering logs by run ID. - logs, _, err := sys.TaskService.FindLogs(sys.Ctx, influxdb.LogFilter{ + logs, _, err := sys.TaskService.FindLogs(sys.Ctx, task.LogFilter{ Task: task.ID, Run: &rc1.ID, }) @@ -1150,8 +1151,8 @@ func testTaskRuns(t *testing.T, sys *System) { t.Fatal(err) } - expLine1 := &influxdb.Log{RunID: rc1.ID, Time: log1Time.Format(time.RFC3339Nano), Message: "entry 1"} - exp := []*influxdb.Log{expLine1} + expLine1 := &task.Log{RunID: rc1.ID, Time: log1Time.Format(time.RFC3339Nano), Message: "entry 1"} + exp := []*task.Log{expLine1} if diff := cmp.Diff(logs, exp); diff != "" { t.Fatalf("unexpected log: -got/+want: %s", diff) } @@ -1163,14 +1164,14 @@ func testTaskRuns(t *testing.T, sys *System) { } // Ensure both returned when filtering logs by task ID. - logs, _, err = sys.TaskService.FindLogs(sys.Ctx, influxdb.LogFilter{ + logs, _, err = sys.TaskService.FindLogs(sys.Ctx, task.LogFilter{ Task: task.ID, }) if err != nil { t.Fatal(err) } - expLine2 := &influxdb.Log{RunID: rc2.ID, Time: log2Time.Format(time.RFC3339Nano), Message: "entry 2"} - exp = []*influxdb.Log{expLine1, expLine2} + expLine2 := &task.Log{RunID: rc2.ID, Time: log2Time.Format(time.RFC3339Nano), Message: "entry 2"} + exp = []*task.Log{expLine1, expLine2} if diff := cmp.Diff(logs, exp); diff != "" { t.Fatalf("unexpected log: -got/+want: %s", diff) } @@ -1181,7 +1182,7 @@ func testTaskConcurrency(t *testing.T, sys *System) { cr := creds(t, sys) const numTasks = 450 // Arbitrarily chosen to get a reasonable count of concurrent creates and deletes. - createTaskCh := make(chan influxdb.TaskCreate, numTasks) + createTaskCh := make(chan task.TaskCreate, numTasks) // Since this test is run in parallel with other tests, // we need to keep a whitelist of IDs that are okay to delete. @@ -1234,7 +1235,7 @@ func testTaskConcurrency(t *testing.T, sys *System) { } // Get all the tasks. - tasks, _, err := sys.TaskService.FindTasks(sys.Ctx, influxdb.TaskFilter{OrganizationID: &cr.OrgID}) + tasks, _, err := sys.TaskService.FindTasks(sys.Ctx, task.TaskFilter{OrganizationID: &cr.OrgID}) if err != nil { t.Errorf("error finding tasks: %v", err) return @@ -1292,7 +1293,7 @@ func testTaskConcurrency(t *testing.T, sys *System) { } // Get all the tasks. - tasks, _, err := sys.TaskService.FindTasks(sys.Ctx, influxdb.TaskFilter{OrganizationID: &cr.OrgID}) + tasks, _, err := sys.TaskService.FindTasks(sys.Ctx, task.TaskFilter{OrganizationID: &cr.OrgID}) if err != nil { t.Errorf("error finding tasks: %v", err) return @@ -1326,7 +1327,7 @@ func testTaskConcurrency(t *testing.T, sys *System) { if _, err := sys.TaskControlService.CreateRun(sys.Ctx, tid, time.Unix(253339232461, 0), time.Unix(253339232469, 1)); err != nil { // This may have errored due to the task being deleted. Check if the task still exists. - if _, err2 := sys.TaskService.FindTaskByID(sys.Ctx, tid); err2 == influxdb.ErrTaskNotFound { + if _, err2 := sys.TaskService.FindTaskByID(sys.Ctx, tid); err2 == task.ErrTaskNotFound { // It was deleted. Just continue. continue } @@ -1343,7 +1344,7 @@ func testTaskConcurrency(t *testing.T, sys *System) { // Start adding tasks. for i := 0; i < numTasks; i++ { - createTaskCh <- influxdb.TaskCreate{ + createTaskCh <- task.TaskCreate{ OrganizationID: cr.OrgID, Flux: fmt.Sprintf(scriptFmt, i), OwnerID: cr.UserID, @@ -1360,7 +1361,7 @@ func testManualRun(t *testing.T, s *System) { cr := creds(t, s) // Create a task. - tc := influxdb.TaskCreate{ + tc := task.TaskCreate{ OrganizationID: cr.OrgID, Flux: fmt.Sprintf(scriptFmt, 0), OwnerID: cr.UserID, @@ -1405,7 +1406,7 @@ func testRunStorage(t *testing.T, sys *System) { // Script is set to run every minute. The platform adapter is currently hardcoded to schedule after "now", // which makes timing of runs somewhat difficult. - ct := influxdb.TaskCreate{ + ct := task.TaskCreate{ OrganizationID: cr.OrgID, Flux: fmt.Sprintf(scriptFmt, 0), OwnerID: cr.UserID, @@ -1416,14 +1417,14 @@ func testRunStorage(t *testing.T, sys *System) { } // check run filter errors - _, _, err0 := sys.TaskService.FindRuns(sys.Ctx, influxdb.RunFilter{Task: task.ID, Limit: -1}) - if err0 != influxdb.ErrOutOfBoundsLimit { + _, _, err0 := sys.TaskService.FindRuns(sys.Ctx, task.RunFilter{Task: task.ID, Limit: -1}) + if err0 != task.ErrOutOfBoundsLimit { t.Fatalf("failed to error with out of bounds run limit: %d", -1) } - _, _, err1 := sys.TaskService.FindRuns(sys.Ctx, influxdb.RunFilter{Task: task.ID, Limit: influxdb.TaskMaxPageSize + 1}) - if err1 != influxdb.ErrOutOfBoundsLimit { - t.Fatalf("failed to error with out of bounds run limit: %d", influxdb.TaskMaxPageSize+1) + _, _, err1 := sys.TaskService.FindRuns(sys.Ctx, task.RunFilter{Task: task.ID, Limit: task.TaskMaxPageSize + 1}) + if err1 != task.ErrOutOfBoundsLimit { + t.Fatalf("failed to error with out of bounds run limit: %d", task.TaskMaxPageSize+1) } requestedAt := time.Now().Add(time.Hour * -1).UTC() // This should guarantee we can make two runs. @@ -1439,7 +1440,7 @@ func testRunStorage(t *testing.T, sys *System) { startedAt := time.Now().UTC().Add(time.Second * -10) // Update the run state to Started; normally the scheduler would do this. - if err := sys.TaskControlService.UpdateRunState(sys.Ctx, task.ID, rc0.ID, startedAt, influxdb.RunStarted); err != nil { + if err := sys.TaskControlService.UpdateRunState(sys.Ctx, task.ID, rc0.ID, startedAt, task.RunStarted); err != nil { t.Fatal(err) } @@ -1452,12 +1453,12 @@ func testRunStorage(t *testing.T, sys *System) { } // Update the run state to Started; normally the scheduler would do this. - if err := sys.TaskControlService.UpdateRunState(sys.Ctx, task.ID, rc1.ID, startedAt.Add(time.Second), influxdb.RunStarted); err != nil { + if err := sys.TaskControlService.UpdateRunState(sys.Ctx, task.ID, rc1.ID, startedAt.Add(time.Second), task.RunStarted); err != nil { t.Fatal(err) } // Mark the second run finished. - if err := sys.TaskControlService.UpdateRunState(sys.Ctx, task.ID, rc1.ID, startedAt.Add(time.Second*2), influxdb.RunFail); err != nil { + if err := sys.TaskControlService.UpdateRunState(sys.Ctx, task.ID, rc1.ID, startedAt.Add(time.Second*2), task.RunFail); err != nil { t.Fatal(err) } @@ -1466,7 +1467,7 @@ func testRunStorage(t *testing.T, sys *System) { } // Limit 1 should only return the earlier run. - runs, _, err := sys.TaskService.FindRuns(sys.Ctx, influxdb.RunFilter{Task: task.ID, Limit: 1}) + runs, _, err := sys.TaskService.FindRuns(sys.Ctx, task.RunFilter{Task: task.ID, Limit: 1}) if err != nil { t.Fatal(err) } @@ -1479,8 +1480,8 @@ func testRunStorage(t *testing.T, sys *System) { if runs[0].StartedAt != startedAt { t.Fatalf("unexpectedStartedAt; want %s, got %s", startedAt, runs[0].StartedAt) } - if runs[0].Status != influxdb.RunStarted.String() { - t.Fatalf("unexpected run status; want %s, got %s", influxdb.RunStarted.String(), runs[0].Status) + if runs[0].Status != task.RunStarted.String() { + t.Fatalf("unexpected run status; want %s, got %s", task.RunStarted.String(), runs[0].Status) } if !runs[0].FinishedAt.IsZero() { @@ -1492,18 +1493,18 @@ func testRunStorage(t *testing.T, sys *System) { if err != nil { t.Fatal(err) } - if err := sys.TaskControlService.UpdateRunState(sys.Ctx, task.ID, rc2.ID, startedAt.Add(time.Second*3), influxdb.RunStarted); err != nil { + if err := sys.TaskControlService.UpdateRunState(sys.Ctx, task.ID, rc2.ID, startedAt.Add(time.Second*3), task.RunStarted); err != nil { t.Fatal(err) } - if err := sys.TaskControlService.UpdateRunState(sys.Ctx, task.ID, rc2.ID, startedAt.Add(time.Second*4), influxdb.RunSuccess); err != nil { + if err := sys.TaskControlService.UpdateRunState(sys.Ctx, task.ID, rc2.ID, startedAt.Add(time.Second*4), task.RunSuccess); err != nil { t.Fatal(err) } if _, err := sys.TaskControlService.FinishRun(sys.Ctx, task.ID, rc2.ID); err != nil { t.Fatal(err) } - runsLimit2, _, err := sys.TaskService.FindRuns(sys.Ctx, influxdb.RunFilter{Task: task.ID, Limit: 2}) + runsLimit2, _, err := sys.TaskService.FindRuns(sys.Ctx, task.RunFilter{Task: task.ID, Limit: 2}) if err != nil { t.Fatal(err) } @@ -1515,7 +1516,7 @@ func testRunStorage(t *testing.T, sys *System) { } // Unspecified limit returns all three runs, sorted by most recently scheduled first. - runs, _, err = sys.TaskService.FindRuns(sys.Ctx, influxdb.RunFilter{Task: task.ID}) + runs, _, err = sys.TaskService.FindRuns(sys.Ctx, task.RunFilter{Task: task.ID}) if err != nil { t.Fatal(err) @@ -1529,8 +1530,8 @@ func testRunStorage(t *testing.T, sys *System) { if runs[0].StartedAt != startedAt { t.Fatalf("unexpectedStartedAt; want %s, got %s", startedAt, runs[0].StartedAt) } - if runs[0].Status != influxdb.RunStarted.String() { - t.Fatalf("unexpected run status; want %s, got %s", influxdb.RunStarted.String(), runs[0].Status) + if runs[0].Status != task.RunStarted.String() { + t.Fatalf("unexpected run status; want %s, got %s", task.RunStarted.String(), runs[0].Status) } // TODO (al): handle empty finishedAt // if runs[0].FinishedAt != "" { @@ -1544,8 +1545,8 @@ func testRunStorage(t *testing.T, sys *System) { if exp := startedAt.Add(time.Second); runs[2].StartedAt != exp { t.Fatalf("unexpected StartedAt; want %s, got %s", exp, runs[2].StartedAt) } - if runs[2].Status != influxdb.RunFail.String() { - t.Fatalf("unexpected run status; want %s, got %s", influxdb.RunSuccess.String(), runs[2].Status) + if runs[2].Status != task.RunFail.String() { + t.Fatalf("unexpected run status; want %s, got %s", task.RunSuccess.String(), runs[2].Status) } if exp := startedAt.Add(time.Second * 2); runs[2].FinishedAt != exp { t.Fatalf("unexpected FinishedAt; want %s, got %s", exp, runs[2].FinishedAt) @@ -1554,13 +1555,13 @@ func testRunStorage(t *testing.T, sys *System) { // Look for a run that doesn't exist. _, err = sys.TaskService.FindRunByID(sys.Ctx, task.ID, platform.ID(math.MaxUint64)) if err == nil { - t.Fatalf("expected %s but got %s instead", influxdb.ErrRunNotFound, err) + t.Fatalf("expected %s but got %s instead", task.ErrRunNotFound, err) } // look for a taskID that doesn't exist. _, err = sys.TaskService.FindRunByID(sys.Ctx, platform.ID(math.MaxUint64), runs[0].ID) if err == nil { - t.Fatalf("expected %s but got %s instead", influxdb.ErrRunNotFound, err) + t.Fatalf("expected %s but got %s instead", task.ErrRunNotFound, err) } foundRun0, err := sys.TaskService.FindRunByID(sys.Ctx, task.ID, runs[0].ID) @@ -1585,7 +1586,7 @@ func testRetryAcrossStorage(t *testing.T, sys *System) { cr := creds(t, sys) // Script is set to run every minute. - ct := influxdb.TaskCreate{ + ct := task.TaskCreate{ OrganizationID: cr.OrgID, Flux: fmt.Sprintf(scriptFmt, 0), OwnerID: cr.UserID, @@ -1597,7 +1598,7 @@ func testRetryAcrossStorage(t *testing.T, sys *System) { // Non-existent ID should return the right error. _, err = sys.TaskService.RetryRun(sys.Ctx, task.ID, platform.ID(math.MaxUint64)) if !strings.Contains(err.Error(), "run not found") { - t.Errorf("expected retrying run that doesn't exist to return %v, got %v", influxdb.ErrRunNotFound, err) + t.Errorf("expected retrying run that doesn't exist to return %v, got %v", task.ErrRunNotFound, err) } requestedAt := time.Now().Add(time.Hour * -1).UTC() // This should guarantee we can make a run. @@ -1613,10 +1614,10 @@ func testRetryAcrossStorage(t *testing.T, sys *System) { startedAt := time.Now().UTC() // Update the run state to Started then Failed; normally the scheduler would do this. - if err := sys.TaskControlService.UpdateRunState(sys.Ctx, task.ID, rc.ID, startedAt, influxdb.RunStarted); err != nil { + if err := sys.TaskControlService.UpdateRunState(sys.Ctx, task.ID, rc.ID, startedAt, task.RunStarted); err != nil { t.Fatal(err) } - if err := sys.TaskControlService.UpdateRunState(sys.Ctx, task.ID, rc.ID, startedAt.Add(time.Second), influxdb.RunFail); err != nil { + if err := sys.TaskControlService.UpdateRunState(sys.Ctx, task.ID, rc.ID, startedAt.Add(time.Second), task.RunFail); err != nil { t.Fatal(err) } if _, err := sys.TaskControlService.FinishRun(sys.Ctx, task.ID, rc.ID); err != nil { @@ -1639,7 +1640,7 @@ func testRetryAcrossStorage(t *testing.T, sys *System) { t.Fatalf("wrong scheduledFor on task: got %s, want %s", m.ScheduledFor, rc.ScheduledFor) } - exp := influxdb.RequestStillQueuedError{Start: rc.ScheduledFor.Unix(), End: rc.ScheduledFor.Unix()} + exp := task.RequestStillQueuedError{Start: rc.ScheduledFor.Unix(), End: rc.ScheduledFor.Unix()} // Retrying a run which has been queued but not started, should be rejected. if _, err = sys.TaskService.RetryRun(sys.Ctx, task.ID, rc.ID); err != exp && err.Error() != "run already queued" { @@ -1652,7 +1653,7 @@ func testLogsAcrossStorage(t *testing.T, sys *System) { // Script is set to run every minute. The platform adapter is currently hardcoded to schedule after "now", // which makes timing of runs somewhat difficult. - ct := influxdb.TaskCreate{ + ct := task.TaskCreate{ OrganizationID: cr.OrgID, Flux: fmt.Sprintf(scriptFmt, 0), OwnerID: cr.UserID, @@ -1675,7 +1676,7 @@ func testLogsAcrossStorage(t *testing.T, sys *System) { startedAt := time.Now().UTC() // Update the run state to Started; normally the scheduler would do this. - if err := sys.TaskControlService.UpdateRunState(sys.Ctx, task.ID, rc0.ID, startedAt, influxdb.RunStarted); err != nil { + if err := sys.TaskControlService.UpdateRunState(sys.Ctx, task.ID, rc0.ID, startedAt, task.RunStarted); err != nil { t.Fatal(err) } @@ -1688,12 +1689,12 @@ func testLogsAcrossStorage(t *testing.T, sys *System) { } // Update the run state to Started; normally the scheduler would do this. - if err := sys.TaskControlService.UpdateRunState(sys.Ctx, task.ID, rc1.ID, startedAt, influxdb.RunStarted); err != nil { + if err := sys.TaskControlService.UpdateRunState(sys.Ctx, task.ID, rc1.ID, startedAt, task.RunStarted); err != nil { t.Fatal(err) } // Mark the second run finished. - if err := sys.TaskControlService.UpdateRunState(sys.Ctx, task.ID, rc1.ID, startedAt.Add(time.Second), influxdb.RunSuccess); err != nil { + if err := sys.TaskControlService.UpdateRunState(sys.Ctx, task.ID, rc1.ID, startedAt.Add(time.Second), task.RunSuccess); err != nil { t.Fatal(err) } @@ -1710,7 +1711,7 @@ func testLogsAcrossStorage(t *testing.T, sys *System) { t.Fatal(err) } - logs, _, err := sys.TaskService.FindLogs(sys.Ctx, influxdb.LogFilter{Task: task.ID}) + logs, _, err := sys.TaskService.FindLogs(sys.Ctx, task.LogFilter{Task: task.ID}) if err != nil { t.Fatal(err) } @@ -1720,7 +1721,7 @@ func testLogsAcrossStorage(t *testing.T, sys *System) { } t.Fatalf("failed to get all logs: expected: 7 got: %d", len(logs)) } - smash := func(logs []*influxdb.Log) string { + smash := func(logs []*task.Log) string { smashed := "" for _, log := range logs { smashed = smashed + log.Message @@ -1731,7 +1732,7 @@ func testLogsAcrossStorage(t *testing.T, sys *System) { t.Fatalf("log contents not acceptable, expected: %q, got: %q", "0-00-10-21-01-11-21-3", smash(logs)) } - logs, _, err = sys.TaskService.FindLogs(sys.Ctx, influxdb.LogFilter{Task: task.ID, Run: &rc1.ID}) + logs, _, err = sys.TaskService.FindLogs(sys.Ctx, task.LogFilter{Task: task.ID, Run: &rc1.ID}) if err != nil { t.Fatal(err) } @@ -1743,7 +1744,7 @@ func testLogsAcrossStorage(t *testing.T, sys *System) { t.Fatalf("log contents not acceptable, expected: %q, got: %q", "1-01-11-21-3", smash(logs)) } - logs, _, err = sys.TaskService.FindLogs(sys.Ctx, influxdb.LogFilter{Task: task.ID, Run: &rc0.ID}) + logs, _, err = sys.TaskService.FindLogs(sys.Ctx, task.LogFilter{Task: task.ID, Run: &rc0.ID}) if err != nil { t.Fatal(err) } @@ -1830,7 +1831,7 @@ func testTaskType(t *testing.T, sys *System) { authorizedCtx := icontext.SetAuthorizer(sys.Ctx, cr.Authorizer()) // Create a tasks - ts := influxdb.TaskCreate{ + ts := task.TaskCreate{ OrganizationID: cr.OrgID, Flux: fmt.Sprintf(scriptFmt, 0), OwnerID: cr.UserID, @@ -1844,7 +1845,7 @@ func testTaskType(t *testing.T, sys *System) { t.Fatal("no task ID set") } - tc := influxdb.TaskCreate{ + tc := task.TaskCreate{ Type: "cows", OrganizationID: cr.OrgID, Flux: fmt.Sprintf(scriptFmt, 0), @@ -1859,7 +1860,7 @@ func testTaskType(t *testing.T, sys *System) { t.Fatal("no task ID set") } - tp := influxdb.TaskCreate{ + tp := task.TaskCreate{ Type: "pigs", OrganizationID: cr.OrgID, Flux: fmt.Sprintf(scriptFmt, 0), @@ -1875,19 +1876,19 @@ func testTaskType(t *testing.T, sys *System) { } // get system tasks (or task's with no type) - tasks, _, err := sys.TaskService.FindTasks(sys.Ctx, influxdb.TaskFilter{OrganizationID: &cr.OrgID, Type: &influxdb.TaskSystemType}) + tasks, _, err := sys.TaskService.FindTasks(sys.Ctx, task.TaskFilter{OrganizationID: &cr.OrgID, Type: &task.TaskSystemType}) if err != nil { t.Fatal(err) } for _, task := range tasks { - if task.Type != "" && task.Type != influxdb.TaskSystemType { + if task.Type != "" && task.Type != task.TaskSystemType { t.Fatal("received a task with a type when sending no type restriction") } } // get filtered tasks - tasks, _, err = sys.TaskService.FindTasks(sys.Ctx, influxdb.TaskFilter{OrganizationID: &cr.OrgID, Type: &tc.Type}) + tasks, _, err = sys.TaskService.FindTasks(sys.Ctx, task.TaskFilter{OrganizationID: &cr.OrgID, Type: &tc.Type}) if err != nil { t.Fatal(err) } @@ -1898,7 +1899,7 @@ func testTaskType(t *testing.T, sys *System) { } // get all tasks - tasks, _, err = sys.TaskService.FindTasks(sys.Ctx, influxdb.TaskFilter{OrganizationID: &cr.OrgID}) + tasks, _, err = sys.TaskService.FindTasks(sys.Ctx, task.TaskFilter{OrganizationID: &cr.OrgID}) if err != nil { t.Fatal(err) } diff --git a/task.go b/task/task.go similarity index 99% rename from task.go rename to task/task.go index db5c3490c03..e8431c3e7a3 100644 --- a/task.go +++ b/task/task.go @@ -1,4 +1,4 @@ -package influxdb +package task import ( "context" diff --git a/task_errors.go b/task/task_errors.go similarity index 99% rename from task_errors.go rename to task/task_errors.go index f90bb0fe20f..6f9b797fee4 100644 --- a/task_errors.go +++ b/task/task_errors.go @@ -1,4 +1,4 @@ -package influxdb +package task import ( "fmt" diff --git a/task_test.go b/task/task_test.go similarity index 92% rename from task_test.go rename to task/task_test.go index 6d8602d053f..4c6e4539639 100644 --- a/task_test.go +++ b/task/task_test.go @@ -1,18 +1,18 @@ -package influxdb_test +package task_test import ( "encoding/json" + "github.com/influxdata/influxdb/v2/task" "testing" "github.com/google/go-cmp/cmp" - platform "github.com/influxdata/influxdb/v2" _ "github.com/influxdata/influxdb/v2/fluxinit/static" "github.com/influxdata/influxdb/v2/query/fluxlang" "github.com/influxdata/influxdb/v2/task/options" ) func TestUpdateValidate(t *testing.T) { - tu := &platform.TaskUpdate{} + tu := &task.TaskUpdate{} // this is to make sure that string durations are properly marshaled into durations if err := json.Unmarshal([]byte(`{"every":"3d2h", "offset":"1h"}`), tu); err != nil { t.Fatal(err) @@ -30,7 +30,7 @@ func TestUpdateValidate(t *testing.T) { } func TestOptionsMarshal(t *testing.T) { - tu := &platform.TaskUpdate{} + tu := &task.TaskUpdate{} // this is to make sure that string durations are properly marshaled into durations if err := json.Unmarshal([]byte(`{"every":"10s", "offset":"1h"}`), tu); err != nil { t.Fatal(err) @@ -42,7 +42,7 @@ func TestOptionsMarshal(t *testing.T) { t.Fatalf("option.every not properly unmarshaled, expected 1h got %s", tu.Options.Offset) } - tu = &platform.TaskUpdate{} + tu = &task.TaskUpdate{} // this is to make sure that string durations are properly marshaled into durations if err := json.Unmarshal([]byte(`{"flux":"option task = {\n\tname: \"task #99\",\n\tcron: \"* * * * *\",\n\toffset: 5s,\n\tconcurrency: 100,\n}\nfrom(bucket:\"b\") |\u003e toHTTP(url:\"http://example.com\")"}`), tu); err != nil { t.Fatal(err) @@ -54,7 +54,7 @@ func TestOptionsMarshal(t *testing.T) { } func TestOptionsEditWithAST(t *testing.T) { - tu := &platform.TaskUpdate{} + tu := &task.TaskUpdate{} tu.Options.Every = *(options.MustParseDuration("10s")) if err := tu.UpdateFlux(fluxlang.DefaultService, `option task = {every: 20s, name: "foo"} from(bucket:"x") |> range(start:-1h)`); err != nil { t.Fatal(err) @@ -84,7 +84,7 @@ from(bucket: "x") } }) t.Run("add new option", func(t *testing.T) { - tu := &platform.TaskUpdate{} + tu := &task.TaskUpdate{} tu.Options.Offset = options.MustParseDuration("30s") if err := tu.UpdateFlux(fluxlang.DefaultService, `option task = {every: 20s, name: "foo"} from(bucket:"x") |> range(start:-1h)`); err != nil { t.Fatal(err) @@ -98,7 +98,7 @@ from(bucket: "x") } }) t.Run("switching from every to cron", func(t *testing.T) { - tu := &platform.TaskUpdate{} + tu := &task.TaskUpdate{} tu.Options.Cron = "* * * * *" if err := tu.UpdateFlux(fluxlang.DefaultService, `option task = {every: 20s, name: "foo"} from(bucket:"x") |> range(start:-1h)`); err != nil { t.Fatal(err) @@ -115,7 +115,7 @@ from(bucket: "x") } }) t.Run("switching from cron to every", func(t *testing.T) { - tu := &platform.TaskUpdate{} + tu := &task.TaskUpdate{} tu.Options.Every = *(options.MustParseDuration("10s")) if err := tu.UpdateFlux(fluxlang.DefaultService, `option task = {cron: "* * * * *", name: "foo"} from(bucket:"x") |> range(start:-1h)`); err != nil { t.Fatal(err) @@ -132,7 +132,7 @@ from(bucket: "x") } }) t.Run("delete deletable option", func(t *testing.T) { - tu := &platform.TaskUpdate{} + tu := &task.TaskUpdate{} tu.Options.Offset = &options.Duration{} expscript := `option task = {cron: "* * * * *", name: "foo"} @@ -159,10 +159,10 @@ from(bucket: "x") } func TestParseRequestStillQueuedError(t *testing.T) { - e := platform.RequestStillQueuedError{Start: 1000, End: 2000} + e := task.RequestStillQueuedError{Start: 1000, End: 2000} validMsg := e.Error() - if err := platform.ParseRequestStillQueuedError(validMsg); err == nil || *err != e { + if err := task.ParseRequestStillQueuedError(validMsg); err == nil || *err != e { t.Fatalf("%q should have parsed to %v, but got %v", validMsg, e, err) } }