Set ReqsCollection as WorkerChange listener
authorLukasz Wojciechowski <l.wojciechow@partner.samsung.com>
Tue, 24 Oct 2017 09:59:52 +0000 (11:59 +0200)
committerLukasz Wojciechowski <l.wojciechow@partner.samsung.com>
Fri, 27 Apr 2018 15:43:52 +0000 (17:43 +0200)
WorkerChange listener is notified about changes of worker state:
* when worker becomes IDLE;
* when worker's work has been broken by entering FAIL
 or MAINTENANCE state.

The ReqsCollection implementing WorkerChange interface reacts by:
* matching new pending request to IDLE worker;
* finishing request execution with FAILED state if worker's job has
 been broken.

Change-Id: Icff6a91e3173712243bf6d8ee382d1f1222b4735
Signed-off-by: Lukasz Wojciechowski <l.wojciechow@partner.samsung.com>
requests/requests.go
requests/requests_requestsmanager_test.go
requests/requests_test.go
requests/requests_workerchange_test.go

index ec4c596..c343f22 100644 (file)
@@ -63,6 +63,10 @@ func NewRequestQueue(w matcher.WorkersManager, j matcher.JobsManager) *ReqsColle
        r.deadlineTimes.setMatcher(r.deadlineMatcher)
        r.timeoutTimes.setMatcher(r.timeoutMatcher)
 
+       if w != nil {
+               w.SetChangeListener(r)
+       }
+
        return r
 }
 
index 42e44fd..305bd5f 100644 (file)
@@ -39,6 +39,7 @@ var _ = Describe("Requests as RequestsManager", func() {
                        ctrl = gomock.NewController(GinkgoT())
                        wm = NewMockWorkersManager(ctrl)
                        jm = NewMockJobsManager(ctrl)
+                       wm.EXPECT().SetChangeListener(gomock.Any())
                        R = NewRequestQueue(wm, jm)
                })
                AfterEach(func() {
index 6c414f6..2226ffb 100644 (file)
@@ -71,6 +71,7 @@ func initTest(t *testing.T) (*assert.Assertions, *ReqsCollection, *gomock.Contro
        jm := NewMockJobsManager(ctrl)
        testErr := errors.New("Test Error")
        wm.EXPECT().TakeBestMatchingWorker(gomock.Any(), gomock.Any()).Return(WorkerUUID(""), testErr).AnyTimes()
+       wm.EXPECT().SetChangeListener(gomock.Any())
        return assert.New(t), NewRequestQueue(wm, jm), ctrl, jm
 }
 
index 9090e15..1ce2eb8 100644 (file)
@@ -62,6 +62,7 @@ var _ = Describe("Requests as WorkerChange", func() {
                ctrl = gomock.NewController(GinkgoT())
                wm = NewMockWorkersManager(ctrl)
                jm = NewMockJobsManager(ctrl)
+               wm.EXPECT().SetChangeListener(gomock.Any())
                R = NewRequestQueue(wm, jm)
        })
        AfterEach(func() {