Add Config argument to Create of DryadJobManager 24/182924/1
authorAleksander Mistewicz <a.mistewicz@samsung.com>
Wed, 29 Nov 2017 15:32:38 +0000 (16:32 +0100)
committerAleksander Mistewicz <a.mistewicz@samsung.com>
Thu, 28 Jun 2018 14:50:17 +0000 (16:50 +0200)
Change-Id: I85354ad5e1580d69a1d6ecb31e6e3cbfc567c00c
Signed-off-by: Aleksander Mistewicz <a.mistewicz@samsung.com>
controller/dryaderimpl.go
controller/dryaderimpl_test.go
dryadjobmanager.go
manager/dryad_job.go
manager/dryad_job_manager.go
manager/dryad_job_manager_test.go
manager/dryad_job_runner.go
manager/dryad_job_runner_test.go
mock/dryadjobmanager.go

index 289be3c..ac5b1d3 100644 (file)
@@ -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()))
index c980f5f..4e11997 100644 (file)
@@ -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)
 
index ec732f5..ee6a5c3 100644 (file)
@@ -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.
        //
index e5ac2c9..f54404a 100644 (file)
@@ -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)
 
index 3e0dcdb..530261a 100644 (file)
@@ -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
 }
 
index a543289..795c99c 100644 (file)
@@ -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))
        })
 
index 41df01c..79fc4d7 100644 (file)
@@ -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,
        }
 }
 
index d74a027..88980bb 100644 (file)
@@ -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() {
index 2e93a12..32efb27 100644 (file)
@@ -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