From: Aleksander Mistewicz Date: Wed, 29 Nov 2017 15:32:38 +0000 (+0100) Subject: Add Config argument to Create of DryadJobManager X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=14333f67017b6228ac09db9013e9460582845c9b;p=tools%2Fweles.git Add Config argument to Create of DryadJobManager Change-Id: I85354ad5e1580d69a1d6ecb31e6e3cbfc567c00c Signed-off-by: Aleksander Mistewicz --- diff --git a/controller/dryaderimpl.go b/controller/dryaderimpl.go index 289be3c..ac5b1d3 100644 --- a/controller/dryaderimpl.go +++ b/controller/dryaderimpl.go @@ -141,9 +141,15 @@ func (h *DryaderImpl) StartJob(j weles.JobID) { return } + config, err := h.jobs.GetConfig(j) + if err != nil { + h.SendFail(j, fmt.Sprintf("Internal Weles error while getting Job config : %s", err.Error())) + return + } + h.add(j) - err = h.djm.Create(j, d, h.listener) + err = h.djm.Create(j, d, config, h.listener) if err != nil { h.remove(j) h.SendFail(j, fmt.Sprintf("Cannot delegate Job to Dryad : %s", err.Error())) diff --git a/controller/dryaderimpl_test.go b/controller/dryaderimpl_test.go index c980f5f..4e11997 100644 --- a/controller/dryaderimpl_test.go +++ b/controller/dryaderimpl_test.go @@ -39,6 +39,7 @@ var _ = Describe("DryaderImpl", func() { j := weles.JobID(0xCAFE) dryad := weles.Dryad{Addr: &net.IPNet{IP: net.IPv4(1, 2, 3, 4), Mask: net.IPv4Mask(5, 6, 7, 8)}} err := errors.New("test error") + conf := weles.Config{JobName: "test123"} expectRegistered := func(offset int) { h.(*DryaderImpl).mutex.Lock() @@ -93,14 +94,16 @@ var _ = Describe("DryaderImpl", func() { Describe("StartJob", func() { It("should register job successfully", func() { jc.EXPECT().GetDryad(j).Return(dryad, nil) - djm.EXPECT().Create(j, dryad, (chan<- weles.DryadJobStatusChange)(h.(*DryaderImpl).listener)) + jc.EXPECT().GetConfig(j).Return(conf, nil) + djm.EXPECT().Create(j, dryad, conf, (chan<- weles.DryadJobStatusChange)(h.(*DryaderImpl).listener)) h.StartJob(j) expectRegistered(1) }) It("should fail if DryadJobManager.Create fails", func() { jc.EXPECT().GetDryad(j).Return(dryad, nil) - djm.EXPECT().Create(j, dryad, (chan<- weles.DryadJobStatusChange)(h.(*DryaderImpl).listener)).Return(err) + jc.EXPECT().GetConfig(j).Return(conf, nil) + djm.EXPECT().Create(j, dryad, conf, (chan<- weles.DryadJobStatusChange)(h.(*DryaderImpl).listener)).Return(err) h.StartJob(j) @@ -132,7 +135,8 @@ var _ = Describe("DryaderImpl", func() { } BeforeEach(func() { jc.EXPECT().GetDryad(j).Return(dryad, nil) - djm.EXPECT().Create(j, dryad, (chan<- weles.DryadJobStatusChange)(h.(*DryaderImpl).listener)) + jc.EXPECT().GetConfig(j).Return(conf, nil) + djm.EXPECT().Create(j, dryad, conf, (chan<- weles.DryadJobStatusChange)(h.(*DryaderImpl).listener)) h.StartJob(j) diff --git a/dryadjobmanager.go b/dryadjobmanager.go index ec732f5..ee6a5c3 100644 --- a/dryadjobmanager.go +++ b/dryadjobmanager.go @@ -18,6 +18,8 @@ package weles +//go:generate mockgen -package mock -destination=mock/dryadjobmanager.go git.tizen.org/tools/weles DryadJobManager + import ( "crypto/rsa" "net" @@ -74,9 +76,12 @@ type DryadJobFilter struct { // DryadJobManager organizes running Jobs on allocated Dryad. type DryadJobManager interface { // Create starts execution of Job definition on allocated Dryad. + // Job's config is passed in order to avoid need to fetch it from Job Manager. + // + // JobID is used only to reference currently executing Jobs. // // Slow read from a channel may miss some events. - Create(JobID, Dryad, chan<- DryadJobStatusChange) error + Create(JobID, Dryad, Config, chan<- DryadJobStatusChange) error // Cancel stops DryadJob associated with Job. // diff --git a/manager/dryad_job.go b/manager/dryad_job.go index e5ac2c9..f54404a 100644 --- a/manager/dryad_job.go +++ b/manager/dryad_job.go @@ -54,13 +54,13 @@ func newDryadJobWithCancel(job JobID, changes chan<- DryadJobStatusChange, // newDryadJob creates an instance of dryadJob and starts a goroutine // executing phases of given job implemented by provider of DryadJobRunner interface. -func newDryadJob(job JobID, rusalka Dryad, changes chan<- DryadJobStatusChange) *dryadJob { +func newDryadJob(job JobID, rusalka Dryad, conf Config, changes chan<- DryadJobStatusChange) *dryadJob { // FIXME: It should use the proper path to the artifactory. session := dryad.NewSessionProvider(rusalka, "") device := dryad.NewDeviceCommunicationProvider(session) ctx, cancel := context.WithCancel(context.Background()) - runner := newDryadJobRunner(ctx, session, device) + runner := newDryadJobRunner(ctx, session, device, conf) dJob := newDryadJobWithCancel(job, changes, runner, cancel) diff --git a/manager/dryad_job_manager.go b/manager/dryad_job_manager.go index 3e0dcdb..530261a 100644 --- a/manager/dryad_job_manager.go +++ b/manager/dryad_job_manager.go @@ -40,7 +40,7 @@ func NewDryadJobManager() DryadJobManager { } // Create is part of DryadJobManager interface. -func (d *DryadJobs) Create(job JobID, rusalka Dryad, changes chan<- DryadJobStatusChange) error { +func (d *DryadJobs) Create(job JobID, rusalka Dryad, conf Config, changes chan<- DryadJobStatusChange) error { _, ok := d.jobs[job] if ok { return ErrDuplicated @@ -48,7 +48,7 @@ func (d *DryadJobs) Create(job JobID, rusalka Dryad, changes chan<- DryadJobStat d.jobsMutex.Lock() defer d.jobsMutex.Unlock() // FIXME(amistewicz): dryadJobs should not be stored indefinitely. - d.jobs[job] = newDryadJob(job, rusalka, changes) + d.jobs[job] = newDryadJob(job, rusalka, conf, changes) return nil } diff --git a/manager/dryad_job_manager_test.go b/manager/dryad_job_manager_test.go index a543289..795c99c 100644 --- a/manager/dryad_job_manager_test.go +++ b/manager/dryad_job_manager_test.go @@ -35,7 +35,7 @@ var _ = Describe("DryadJobManager", func() { }) create := func() { - err := djm.Create(jobID, Dryad{}, nil) + err := djm.Create(jobID, Dryad{}, Config{}, nil) Expect(err).ToNot(HaveOccurred()) } @@ -51,7 +51,7 @@ var _ = Describe("DryadJobManager", func() { It("should fail to duplicate jobs", func() { create() - err := djm.Create(jobID, Dryad{}, nil) + err := djm.Create(jobID, Dryad{}, Config{}, nil) Expect(err).To(Equal(ErrDuplicated)) }) diff --git a/manager/dryad_job_runner.go b/manager/dryad_job_runner.go index 41df01c..79fc4d7 100644 --- a/manager/dryad_job_runner.go +++ b/manager/dryad_job_runner.go @@ -21,6 +21,7 @@ package manager import ( "context" + "git.tizen.org/tools/weles" "git.tizen.org/tools/weles/manager/dryad" ) @@ -30,15 +31,18 @@ type dryadJobRunner struct { ctx context.Context rusalka dryad.SessionProvider device dryad.DeviceCommunicationProvider + conf weles.Config } // newDryadJobRunner prepares a new instance of dryadJobRunner // and returns DryadJobRunner interface to it. -func newDryadJobRunner(ctx context.Context, rusalka dryad.SessionProvider, device dryad.DeviceCommunicationProvider) DryadJobRunner { +func newDryadJobRunner(ctx context.Context, rusalka dryad.SessionProvider, + device dryad.DeviceCommunicationProvider, conf weles.Config) DryadJobRunner { return &dryadJobRunner{ ctx: ctx, rusalka: rusalka, device: device, + conf: conf, } } diff --git a/manager/dryad_job_runner_test.go b/manager/dryad_job_runner_test.go index d74a027..88980bb 100644 --- a/manager/dryad_job_runner_test.go +++ b/manager/dryad_job_runner_test.go @@ -22,6 +22,8 @@ import ( "context" "errors" + "git.tizen.org/tools/weles" + "github.com/golang/mock/gomock" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" @@ -39,7 +41,7 @@ var _ = Describe("DryadJobRunner", func() { ctrl = gomock.NewController(GinkgoT()) mockSession = NewMockSessionProvider(ctrl) mockDevice = NewMockDeviceCommunicationProvider(ctrl) - djr = newDryadJobRunner(context.Background(), mockSession, mockDevice) + djr = newDryadJobRunner(context.Background(), mockSession, mockDevice, weles.Config{}) }) AfterEach(func() { diff --git a/mock/dryadjobmanager.go b/mock/dryadjobmanager.go index 2e93a12..32efb27 100644 --- a/mock/dryadjobmanager.go +++ b/mock/dryadjobmanager.go @@ -46,15 +46,15 @@ func (mr *MockDryadJobManagerMockRecorder) Cancel(arg0 interface{}) *gomock.Call } // Create mocks base method -func (m *MockDryadJobManager) Create(arg0 weles.JobID, arg1 weles.Dryad, arg2 chan<- weles.DryadJobStatusChange) error { - ret := m.ctrl.Call(m, "Create", arg0, arg1, arg2) +func (m *MockDryadJobManager) Create(arg0 weles.JobID, arg1 weles.Dryad, arg2 weles.Config, arg3 chan<- weles.DryadJobStatusChange) error { + ret := m.ctrl.Call(m, "Create", arg0, arg1, arg2, arg3) ret0, _ := ret[0].(error) return ret0 } // Create indicates an expected call of Create -func (mr *MockDryadJobManagerMockRecorder) Create(arg0, arg1, arg2 interface{}) *gomock.Call { - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Create", reflect.TypeOf((*MockDryadJobManager)(nil).Create), arg0, arg1, arg2) +func (mr *MockDryadJobManagerMockRecorder) Create(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Create", reflect.TypeOf((*MockDryadJobManager)(nil).Create), arg0, arg1, arg2, arg3) } // List mocks base method