Unverified Commit a62f0589 authored by Wenkai Yin(尹文开)'s avatar Wenkai Yin(尹文开) Committed by GitHub
Browse files

Merge pull request #13129 from ywk253100/200917_task_mgr

Tiny improvement for the task manager
parents 20d4e86e 1a4106a9
...@@ -34,7 +34,7 @@ type preheatSuite struct { ...@@ -34,7 +34,7 @@ type preheatSuite struct {
fakePolicyMgr *pmocks.FakeManager fakePolicyMgr *pmocks.FakeManager
fakeScheduler *smocks.Scheduler fakeScheduler *smocks.Scheduler
mockInstanceServer *httptest.Server mockInstanceServer *httptest.Server
fakeExecutionMgr *tmocks.FakeExecutionManager fakeExecutionMgr *tmocks.ExecutionManager
} }
func TestPreheatSuite(t *testing.T) { func TestPreheatSuite(t *testing.T) {
...@@ -42,7 +42,7 @@ func TestPreheatSuite(t *testing.T) { ...@@ -42,7 +42,7 @@ func TestPreheatSuite(t *testing.T) {
fakeInstanceMgr := &instance.FakeManager{} fakeInstanceMgr := &instance.FakeManager{}
fakePolicyMgr := &pmocks.FakeManager{} fakePolicyMgr := &pmocks.FakeManager{}
fakeScheduler := &smocks.Scheduler{} fakeScheduler := &smocks.Scheduler{}
fakeExecutionMgr := &tmocks.FakeExecutionManager{} fakeExecutionMgr := &tmocks.ExecutionManager{}
var c = &controller{ var c = &controller{
iManager: fakeInstanceMgr, iManager: fakeInstanceMgr,
......
...@@ -78,7 +78,7 @@ func (suite *EnforcerTestSuite) SetupSuite() { ...@@ -78,7 +78,7 @@ func (suite *EnforcerTestSuite) SetupSuite() {
mock.AnythingOfType("*q.Query"), mock.AnythingOfType("*q.Query"),
).Return(fakePolicies, nil) ).Return(fakePolicies, nil)
fakeExecManager := &task.FakeExecutionManager{} fakeExecManager := &task.ExecutionManager{}
fakeExecManager.On("Create", fakeExecManager.On("Create",
context.TODO(), context.TODO(),
mock.AnythingOfType("string"), mock.AnythingOfType("string"),
...@@ -87,7 +87,7 @@ func (suite *EnforcerTestSuite) SetupSuite() { ...@@ -87,7 +87,7 @@ func (suite *EnforcerTestSuite) SetupSuite() {
mock.AnythingOfType("map[string]interface {}"), mock.AnythingOfType("map[string]interface {}"),
).Return(time.Now().Unix(), nil) ).Return(time.Now().Unix(), nil)
fakeTaskManager := &task.FakeManager{} fakeTaskManager := &task.Manager{}
fakeTaskManager.On("Create", fakeTaskManager.On("Create",
context.TODO(), context.TODO(),
mock.AnythingOfType("int64"), mock.AnythingOfType("int64"),
......
...@@ -28,7 +28,7 @@ import ( ...@@ -28,7 +28,7 @@ import (
type controllerTestSuite struct { type controllerTestSuite struct {
suite.Suite suite.Suite
ctl *controller ctl *controller
mgr *task.FakeManager mgr *task.Manager
} }
// TestControllerTestSuite tests controller. // TestControllerTestSuite tests controller.
...@@ -38,7 +38,7 @@ func TestControllerTestSuite(t *testing.T) { ...@@ -38,7 +38,7 @@ func TestControllerTestSuite(t *testing.T) {
// SetupTest setups the testing env. // SetupTest setups the testing env.
func (c *controllerTestSuite) SetupTest() { func (c *controllerTestSuite) SetupTest() {
c.mgr = &task.FakeManager{} c.mgr = &task.Manager{}
c.ctl = &controller{mgr: c.mgr} c.ctl = &controller{mgr: c.mgr}
} }
......
...@@ -28,7 +28,7 @@ import ( ...@@ -28,7 +28,7 @@ import (
type executionControllerTestSuite struct { type executionControllerTestSuite struct {
suite.Suite suite.Suite
ctl *executionController ctl *executionController
mgr *task.FakeExecutionManager mgr *task.ExecutionManager
} }
// TestExecutionControllerTestSuite tests controller. // TestExecutionControllerTestSuite tests controller.
...@@ -38,7 +38,7 @@ func TestExecutionControllerTestSuite(t *testing.T) { ...@@ -38,7 +38,7 @@ func TestExecutionControllerTestSuite(t *testing.T) {
// SetupTest setups the testing env. // SetupTest setups the testing env.
func (ec *executionControllerTestSuite) SetupTest() { func (ec *executionControllerTestSuite) SetupTest() {
ec.mgr = &task.FakeExecutionManager{} ec.mgr = &task.ExecutionManager{}
ec.ctl = &executionController{ ec.ctl = &executionController{
mgr: ec.mgr, mgr: ec.mgr,
} }
......
...@@ -201,27 +201,10 @@ func (s *scheduler) UnScheduleByID(ctx context.Context, id int64) error { ...@@ -201,27 +201,10 @@ func (s *scheduler) UnScheduleByID(ctx context.Context, id int64) error {
} }
if len(executions) > 0 { if len(executions) > 0 {
executionID := executions[0].ID executionID := executions[0].ID
if err = s.execMgr.Stop(ctx, executionID); err != nil { // stop the execution
if err = s.execMgr.StopAndWait(ctx, executionID, 10*time.Second); err != nil {
return err return err
} }
final := false
// after the stop called, the execution cannot be stopped immediately, and the execution
// cannot be deleted if it's status isn't in final status, so use the for loop to make
// sure the execution be in final status before deleting it
for t := 100 * time.Microsecond; t < 5*time.Second; t = t * 2 {
exec, err := s.execMgr.Get(ctx, executionID)
if err != nil {
return err
}
if job.Status(exec.Status).Final() {
final = true
break
}
time.Sleep(t)
}
if !final {
return fmt.Errorf("failed to unschedule the schedule %d: the execution %d isn't in final status", id, executionID)
}
// delete execution // delete execution
if err = s.execMgr.Delete(ctx, executionID); err != nil { if err = s.execMgr.Delete(ctx, executionID); err != nil {
return err return err
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
package scheduler package scheduler
import ( import (
"fmt"
"github.com/goharbor/harbor/src/jobservice/job" "github.com/goharbor/harbor/src/jobservice/job"
"github.com/goharbor/harbor/src/pkg/task" "github.com/goharbor/harbor/src/pkg/task"
"github.com/goharbor/harbor/src/testing/mock" "github.com/goharbor/harbor/src/testing/mock"
...@@ -27,8 +28,8 @@ type schedulerTestSuite struct { ...@@ -27,8 +28,8 @@ type schedulerTestSuite struct {
suite.Suite suite.Suite
scheduler *scheduler scheduler *scheduler
dao *mockDAO dao *mockDAO
execMgr *tasktesting.FakeExecutionManager execMgr *tasktesting.ExecutionManager
taskMgr *tasktesting.FakeManager taskMgr *tasktesting.Manager
} }
func (s *schedulerTestSuite) SetupTest() { func (s *schedulerTestSuite) SetupTest() {
...@@ -37,8 +38,8 @@ func (s *schedulerTestSuite) SetupTest() { ...@@ -37,8 +38,8 @@ func (s *schedulerTestSuite) SetupTest() {
s.Require().Nil(err) s.Require().Nil(err)
s.dao = &mockDAO{} s.dao = &mockDAO{}
s.execMgr = &tasktesting.FakeExecutionManager{} s.execMgr = &tasktesting.ExecutionManager{}
s.taskMgr = &tasktesting.FakeManager{} s.taskMgr = &tasktesting.Manager{}
s.scheduler = &scheduler{ s.scheduler = &scheduler{
dao: s.dao, dao: s.dao,
...@@ -97,17 +98,13 @@ func (s *schedulerTestSuite) TestSchedule() { ...@@ -97,17 +98,13 @@ func (s *schedulerTestSuite) TestSchedule() {
} }
func (s *schedulerTestSuite) TestUnScheduleByID() { func (s *schedulerTestSuite) TestUnScheduleByID() {
// the underlying task isn't stopped // the execution isn't stopped
s.execMgr.On("List", mock.Anything, mock.Anything).Return([]*task.Execution{ s.execMgr.On("List", mock.Anything, mock.Anything).Return([]*task.Execution{
{ {
ID: 1, ID: 1,
}, },
}, nil) }, nil)
s.execMgr.On("Stop", mock.Anything, mock.Anything).Return(nil) s.execMgr.On("StopAndWait", mock.Anything, mock.Anything, mock.Anything).Return(fmt.Errorf("error"))
s.execMgr.On("Get", mock.Anything, mock.Anything).Return(&task.Execution{
ID: 1,
Status: job.RunningStatus.String(),
}, nil)
err := s.scheduler.UnScheduleByID(nil, 1) err := s.scheduler.UnScheduleByID(nil, 1)
s.NotNil(err) s.NotNil(err)
s.dao.AssertExpectations(s.T()) s.dao.AssertExpectations(s.T())
...@@ -122,11 +119,7 @@ func (s *schedulerTestSuite) TestUnScheduleByID() { ...@@ -122,11 +119,7 @@ func (s *schedulerTestSuite) TestUnScheduleByID() {
ID: 1, ID: 1,
}, },
}, nil) }, nil)
s.execMgr.On("Stop", mock.Anything, mock.Anything).Return(nil) s.execMgr.On("StopAndWait", mock.Anything, mock.Anything, mock.Anything).Return(nil)
s.execMgr.On("Get", mock.Anything, mock.Anything).Return(&task.Execution{
ID: 1,
Status: job.StoppedStatus.String(),
}, nil)
s.dao.On("Delete", mock.Anything, mock.Anything).Return(nil) s.dao.On("Delete", mock.Anything, mock.Anything).Return(nil)
s.execMgr.On("Delete", mock.Anything, mock.Anything).Return(nil) s.execMgr.On("Delete", mock.Anything, mock.Anything).Return(nil)
err = s.scheduler.UnScheduleByID(nil, 1) err = s.scheduler.UnScheduleByID(nil, 1)
...@@ -146,11 +139,7 @@ func (s *schedulerTestSuite) TestUnScheduleByVendor() { ...@@ -146,11 +139,7 @@ func (s *schedulerTestSuite) TestUnScheduleByVendor() {
ID: 1, ID: 1,
}, },
}, nil) }, nil)
s.execMgr.On("Stop", mock.Anything, mock.Anything).Return(nil) s.execMgr.On("StopAndWait", mock.Anything, mock.Anything, mock.Anything).Return(nil)
s.execMgr.On("Get", mock.Anything, mock.Anything).Return(&task.Execution{
ID: 1,
Status: job.StoppedStatus.String(),
}, nil)
s.dao.On("Delete", mock.Anything, mock.Anything).Return(nil) s.dao.On("Delete", mock.Anything, mock.Anything).Return(nil)
s.execMgr.On("Delete", mock.Anything, mock.Anything).Return(nil) s.execMgr.On("Delete", mock.Anything, mock.Anything).Return(nil)
err := s.scheduler.UnScheduleByVendor(nil, "vendor", 1) err := s.scheduler.UnScheduleByVendor(nil, "vendor", 1)
......
...@@ -17,6 +17,8 @@ package task ...@@ -17,6 +17,8 @@ package task
import ( import (
"context" "context"
"encoding/json" "encoding/json"
"fmt"
"sync"
"time" "time"
"github.com/goharbor/harbor/src/jobservice/job" "github.com/goharbor/harbor/src/jobservice/job"
...@@ -52,6 +54,9 @@ type ExecutionManager interface { ...@@ -52,6 +54,9 @@ type ExecutionManager interface {
MarkError(ctx context.Context, id int64, message string) (err error) MarkError(ctx context.Context, id int64, message string) (err error)
// Stop all linked tasks of the specified execution // Stop all linked tasks of the specified execution
Stop(ctx context.Context, id int64) (err error) Stop(ctx context.Context, id int64) (err error)
// StopAndWait stops all linked tasks of the specified execution and waits until all tasks are stopped
// or get an error
StopAndWait(ctx context.Context, id int64, timeout time.Duration) (err error)
// Delete the specified execution and its tasks // Delete the specified execution and its tasks
Delete(ctx context.Context, id int64) (err error) Delete(ctx context.Context, id int64) (err error)
// Get the specified execution // Get the specified execution
...@@ -121,6 +126,13 @@ func (e *executionManager) MarkError(ctx context.Context, id int64, message stri ...@@ -121,6 +126,13 @@ func (e *executionManager) MarkError(ctx context.Context, id int64, message stri
} }
func (e *executionManager) Stop(ctx context.Context, id int64) error { func (e *executionManager) Stop(ctx context.Context, id int64) error {
execution, err := e.executionDAO.Get(ctx, id)
if err != nil {
return err
}
// when an execution is in final status, if it contains task that is a periodic or retrying job it will
// run again in the near future, so we must operate the stop action
tasks, err := e.taskDAO.List(ctx, &q.Query{ tasks, err := e.taskDAO.List(ctx, &q.Query{
Keywords: map[string]interface{}{ Keywords: map[string]interface{}{
"ExecutionID": id, "ExecutionID": id,
...@@ -129,6 +141,15 @@ func (e *executionManager) Stop(ctx context.Context, id int64) error { ...@@ -129,6 +141,15 @@ func (e *executionManager) Stop(ctx context.Context, id int64) error {
if err != nil { if err != nil {
return err return err
} }
// contains no task and the status isn't final, update the status to stop directly
if len(tasks) == 0 && !job.Status(execution.Status).Final() {
return e.executionDAO.Update(ctx, &dao.Execution{
ID: id,
Status: job.StoppedStatus.String(),
EndTime: time.Now(),
}, "Status", "EndTime")
}
for _, task := range tasks { for _, task := range tasks {
if err = e.taskMgr.Stop(ctx, task.ID); err != nil { if err = e.taskMgr.Stop(ctx, task.ID); err != nil {
log.Errorf("failed to stop task %d: %v", task.ID, err) log.Errorf("failed to stop task %d: %v", task.ID, err)
...@@ -138,6 +159,53 @@ func (e *executionManager) Stop(ctx context.Context, id int64) error { ...@@ -138,6 +159,53 @@ func (e *executionManager) Stop(ctx context.Context, id int64) error {
return nil return nil
} }
func (e *executionManager) StopAndWait(ctx context.Context, id int64, timeout time.Duration) error {
var (
overtime bool
errChan = make(chan error)
lock = sync.RWMutex{}
)
go func() {
// stop the execution
if err := e.Stop(ctx, id); err != nil {
errChan <- err
return
}
// check the status of the execution
interval := 100 * time.Millisecond
stop := false
for !stop {
execution, err := e.executionDAO.Get(ctx, id)
if err != nil {
errChan <- err
return
}
// if the status is final, return
if job.Status(execution.Status).Final() {
errChan <- nil
return
}
time.Sleep(interval)
if interval < 1*time.Second {
interval = interval * 2
}
lock.RLock()
stop = overtime
lock.RUnlock()
}
}()
select {
case <-time.After(timeout):
lock.Lock()
overtime = true
lock.Unlock()
return fmt.Errorf("stopping the execution %d timeout", id)
case err := <-errChan:
return err
}
}
func (e *executionManager) Delete(ctx context.Context, id int64) error { func (e *executionManager) Delete(ctx context.Context, id int64) error {
tasks, err := e.taskDAO.List(ctx, &q.Query{ tasks, err := e.taskDAO.List(ctx, &q.Query{
Keywords: map[string]interface{}{ Keywords: map[string]interface{}{
......
...@@ -16,6 +16,7 @@ package task ...@@ -16,6 +16,7 @@ package task
import ( import (
"testing" "testing"
"time"
"github.com/goharbor/harbor/src/jobservice/job" "github.com/goharbor/harbor/src/jobservice/job"
"github.com/goharbor/harbor/src/lib/errors" "github.com/goharbor/harbor/src/lib/errors"
...@@ -76,6 +77,26 @@ func (e *executionManagerTestSuite) TestMarkError() { ...@@ -76,6 +77,26 @@ func (e *executionManagerTestSuite) TestMarkError() {
} }
func (e *executionManagerTestSuite) TestStop() { func (e *executionManagerTestSuite) TestStop() {
// the execution contains no tasks and the status isn't final
e.execDAO.On("Get", mock.Anything, mock.Anything).Return(&dao.Execution{
ID: 1,
Status: job.RunningStatus.String(),
}, nil)
e.taskDAO.On("List", mock.Anything, mock.Anything).Return(nil, nil)
e.execDAO.On("Update", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil)
err := e.execMgr.Stop(nil, 1)
e.Require().Nil(err)
e.taskDAO.AssertExpectations(e.T())
e.execDAO.AssertExpectations(e.T())
// reset the mocks
e.SetupTest()
// the execution contains tasks
e.execDAO.On("Get", mock.Anything, mock.Anything).Return(&dao.Execution{
ID: 1,
Status: job.RunningStatus.String(),
}, nil)
e.taskDAO.On("List", mock.Anything, mock.Anything).Return([]*dao.Task{ e.taskDAO.On("List", mock.Anything, mock.Anything).Return([]*dao.Task{
{ {
ID: 1, ID: 1,
...@@ -83,9 +104,51 @@ func (e *executionManagerTestSuite) TestStop() { ...@@ -83,9 +104,51 @@ func (e *executionManagerTestSuite) TestStop() {
}, },
}, nil) }, nil)
e.taskMgr.On("Stop", mock.Anything, mock.Anything).Return(nil) e.taskMgr.On("Stop", mock.Anything, mock.Anything).Return(nil)
err := e.execMgr.Stop(nil, 1) err = e.execMgr.Stop(nil, 1)
e.Require().Nil(err)
e.taskDAO.AssertExpectations(e.T())
e.execDAO.AssertExpectations(e.T())
e.taskMgr.AssertExpectations(e.T())
}
func (e *executionManagerTestSuite) TestStopAndWait() {
// timeout
e.execDAO.On("Get", mock.Anything, mock.Anything).Return(&dao.Execution{
ID: 1,
Status: job.RunningStatus.String(),
}, nil)
e.taskDAO.On("List", mock.Anything, mock.Anything).Return([]*dao.Task{
{
ID: 1,
ExecutionID: 1,
},
}, nil)
e.taskMgr.On("Stop", mock.Anything, mock.Anything).Return(nil)
err := e.execMgr.StopAndWait(nil, 1, 1*time.Second)
e.Require().NotNil(err)
e.taskDAO.AssertExpectations(e.T())
e.execDAO.AssertExpectations(e.T())
e.taskMgr.AssertExpectations(e.T())
// reset mocks
e.SetupTest()
// pass
e.execDAO.On("Get", mock.Anything, mock.Anything).Return(&dao.Execution{
ID: 1,
Status: job.StoppedStatus.String(),
}, nil)
e.taskDAO.On("List", mock.Anything, mock.Anything).Return([]*dao.Task{
{
ID: 1,
ExecutionID: 1,
},
}, nil)
e.taskMgr.On("Stop", mock.Anything, mock.Anything).Return(nil)
err = e.execMgr.StopAndWait(nil, 1, 1*time.Second)
e.Require().Nil(err) e.Require().Nil(err)
e.taskDAO.AssertExpectations(e.T()) e.taskDAO.AssertExpectations(e.T())
e.execDAO.AssertExpectations(e.T())
e.taskMgr.AssertExpectations(e.T()) e.taskMgr.AssertExpectations(e.T())
} }
......
...@@ -25,5 +25,7 @@ package pkg ...@@ -25,5 +25,7 @@ package pkg
//go:generate mockery --case snake --dir ../../pkg/scan/rest/v1 --all --output ./scan/rest/v1 --outpkg v1 //go:generate mockery --case snake --dir ../../pkg/scan/rest/v1 --all --output ./scan/rest/v1 --outpkg v1
//go:generate mockery --case snake --dir ../../pkg/scan/scanner --all --output ./scan/scanner --outpkg scanner //go:generate mockery --case snake --dir ../../pkg/scan/scanner --all --output ./scan/scanner --outpkg scanner
//go:generate mockery --case snake --dir ../../pkg/scheduler --name Scheduler --output ./scheduler --outpkg scheduler //go:generate mockery --case snake --dir ../../pkg/scheduler --name Scheduler --output ./scheduler --outpkg scheduler
//go:generate mockery --case snake --dir ../../pkg/task --name Manager --output ./task --outpkg task
//go:generate mockery --case snake --dir ../../pkg/task --name ExecutionManager --output ./task --outpkg task
//go:generate mockery --case snake --dir ../../pkg/user --name Manager --output ./user --outpkg user //go:generate mockery --case snake --dir ../../pkg/user --name Manager --output ./user --outpkg user
//go:generate mockery --case snake --dir ../../pkg/robot/dao --name RobotAccountDao --output ./robot/dao --outpkg dao //go:generate mockery --case snake --dir ../../pkg/robot/dao --name RobotAccountDao --output ./robot/dao --outpkg dao
// Code generated by mockery v2.0.3. DO NOT EDIT. // Code generated by mockery v2.1.0. DO NOT EDIT.
package task package task
...@@ -9,15 +9,17 @@ import ( ...@@ -9,15 +9,17 @@ import (
mock "github.com/stretchr/testify/mock" mock "github.com/stretchr/testify/mock"
task "github.com/goharbor/harbor/src/pkg/task" task "github.com/goharbor/harbor/src/pkg/task"
time "time"
) )
// FakeExecutionManager is an autogenerated mock type for the ExecutionManager type // ExecutionManager is an autogenerated mock type for the ExecutionManager type
type FakeExecutionManager struct { type ExecutionManager struct {
mock.Mock mock.Mock
} }
// Count provides a mock function with given fields: ctx, query // Count provides a mock function with given fields: ctx, query
func (_m *FakeExecutionManager) Count(ctx context.Context, query *q.Query) (int64, error) { func (_m *ExecutionManager) Count(ctx context.Context, query *q.Query) (int64, error) {
ret := _m.Called(ctx, query) ret := _m.Called(ctx, query)
var r0 int64 var r0 int64
...@@ -38,7 +40,7 @@ func (_m *FakeExecutionManager) Count(ctx context.Context, query *q.Query) (int6 ...@@ -38,7 +40,7 @@ func (_m *FakeExecutionManager) Count(ctx context.Context, query *q.Query) (int6
} }
// Create provides a mock function with given fields: ctx, vendorType, vendorID, trigger, extraAttrs // Create provides a mock function with given fields: ctx, vendorType, vendorID, trigger, extraAttrs
func (_m *FakeExecutionManager) Create(ctx context.Context, vendorType string, vendorID int64, trigger string, extraAttrs ...map[string]interface{}) (int64, error) { func (_m *ExecutionManager) Create(ctx context.Context, vendorType string, vendorID int64, trigger string, extraAttrs ...map[string]interface{}) (int64, error) {
_va := make([]interface{}, len(extraAttrs)) _va := make([]interface{}, len(extraAttrs))
for _i := range extraAttrs { for _i := range extraAttrs {
_va[_i] = extraAttrs[_i] _va[_i] = extraAttrs[_i]
...@@ -66,7 +68,7 @@ func (_m *FakeExecutionManager) Create(ctx context.Context, vendorType string, v ...@@ -66,7 +68,7 @@ func (_m *FakeExecutionManager) Create(ctx context.Context, vendorType string, v
} }
// Delete provides a mock function with given fields: ctx, id // Delete provides a mock function with given fields: ctx, id
func (_m *FakeExecutionManager) Delete(ctx context.Context, id int64) error { func (_m *ExecutionManager) Delete(ctx context.Context, id int64) error {
ret := _m.Called(ctx, id) ret := _m.Called(ctx, id)
var r0 error var r0 error
...@@ -80,7 +82,7 @@ func (_m *FakeExecutionManager) Delete(ctx context.Context, id int64) error { ...@@ -80,7 +82,7 @@ func (_m *FakeExecutionManager) Delete(ctx context.Context, id int64) error {
} }
// Get provides a mock function with given fields: ctx, id // Get provides a mock function with given fields: ctx, id
func (_m *FakeExecutionManager) Get(ctx context.Context, id int64) (*task.Execution, error) { func (_m *ExecutionManager) Get(ctx context.Context, id int64) (*task.Execution, error) {
ret := _m.Called(ctx, id) ret := _m.Called(ctx, id)
var r0 *task.Execution var r0 *task.Execution
...@@ -103,7 +105,7 @@ func (_m *FakeExecutionManager) Get(ctx context.Context, id int64) (*task.Execut ...@@ -103,7 +105,7 @@ func (_m *FakeExecutionManager) Get(ctx context.Context, id int64) (*task.Execut
} }
// List provides a mock function with given fields: ctx, query // List provides a mock function with given fields: ctx, query
func (_m *FakeExecutionManager) List(ctx context.Context, query *q.Query) ([]*task.Execution, error) { func (_m *ExecutionManager) List(ctx context.Context, query *q.Query) ([]*task.Execution, error) {
ret := _m.Called(ctx, query) ret := _m.Called(ctx, query)
var r0 []*task.Execution var r0 []*task.Execution
...@@ -126,7 +128,7 @@ func (_m *FakeExecutionManager) List(ctx context.Context, query *q.Query) ([]*ta ...@@ -126,7 +128,7 @@ func (_m *FakeExecutionManager) List(ctx context.Context, query *q.Query) ([]*ta
} }
// MarkDone provides a mock function with given fields: ctx, id, message // MarkDone provides a mock function with given fields: ctx, id, message
func (_m *FakeExecutionManager) MarkDone(ctx context.Context, id int64, message string) error { func (_m *ExecutionManager) MarkDone(ctx context.Context, id int64, message string) error {
ret := _m.Called(ctx, id, message) ret := _m.Called(ctx, id, message)