From 435817092b4f3351726d00e2fe7633bc42eeb0b3 Mon Sep 17 00:00:00 2001 From: Eveline Anderson Date: Wed, 17 May 2023 20:47:28 -0700 Subject: [PATCH 1/9] Create TestWorkerRememberPreviousStatus --- internal/manager/api_impl/workers_test.go | 37 +++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/internal/manager/api_impl/workers_test.go b/internal/manager/api_impl/workers_test.go index d4d54db9..9caca4b4 100644 --- a/internal/manager/api_impl/workers_test.go +++ b/internal/manager/api_impl/workers_test.go @@ -290,6 +290,43 @@ func TestWorkerSignoffStatusChangeRequest(t *testing.T) { assertResponseNoContent(t, echo) } +func TestWorkerRememberPreviousStatus(t *testing.T) { + mockCtrl := gomock.NewController(t) + defer mockCtrl.Finish() + + mf := newMockedFlamenco(mockCtrl) + worker := testWorker() + worker.Status = api.WorkerStatusTesting + previousStatus := worker.Status + + worker.StatusChangeRequest(api.WorkerStatusOffline, true) + + mf.broadcaster.EXPECT().BroadcastWorkerUpdate(api.SocketIOWorkerUpdate{ + Id: worker.UUID, + Name: worker.Name, + PreviousStatus: &previousStatus, + Status: api.WorkerStatusOffline, + Updated: worker.UpdatedAt, + Version: worker.Software, + }) + mf.persistence.EXPECT().SaveWorkerStatus(gomock.Any(), &worker).Return(nil) + mf.stateMachine.EXPECT().RequeueActiveTasksOfWorker(gomock.Any(), &worker, "worker signed off").Return(nil) + mf.persistence.EXPECT().WorkerSeen(gomock.Any(), &worker) + + + worker.Status = api.WorkerStatusAwake + + // Preform the request + echo := mf.prepareMockedRequest(nil) + requestWorkerStore(echo, &worker) + err := mf.flamenco.SignOff(echo) + + // Validate to check if status is equivalent + assert.Equal(t, previousStatus, worker.Status) + assert.NoError(t, err) + assertResponseNoContent(t, echo) +} + func TestWorkerState(t *testing.T) { mockCtrl := gomock.NewController(t) defer mockCtrl.Finish() -- 2.30.2 From 5c29f76ff6ed2e15a2604e57dcd0f01dc58835f2 Mon Sep 17 00:00:00 2001 From: Eveline Anderson Date: Sun, 21 May 2023 15:27:08 -0700 Subject: [PATCH 2/9] Check worker.StatusRequest and worker.LazyStatusRequest --- internal/manager/api_impl/workers_test.go | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/internal/manager/api_impl/workers_test.go b/internal/manager/api_impl/workers_test.go index 9caca4b4..b0c253b8 100644 --- a/internal/manager/api_impl/workers_test.go +++ b/internal/manager/api_impl/workers_test.go @@ -293,38 +293,40 @@ func TestWorkerSignoffStatusChangeRequest(t *testing.T) { func TestWorkerRememberPreviousStatus(t *testing.T) { mockCtrl := gomock.NewController(t) defer mockCtrl.Finish() - mf := newMockedFlamenco(mockCtrl) + worker := testWorker() worker.Status = api.WorkerStatusTesting - previousStatus := worker.Status - + initialStatusRequested := worker.StatusRequested + initialLazyStatusRequest := worker.LazyStatusRequest worker.StatusChangeRequest(api.WorkerStatusOffline, true) mf.broadcaster.EXPECT().BroadcastWorkerUpdate(api.SocketIOWorkerUpdate{ Id: worker.UUID, Name: worker.Name, - PreviousStatus: &previousStatus, + PreviousStatus: ptr(api.WorkerStatusTesting), Status: api.WorkerStatusOffline, Updated: worker.UpdatedAt, Version: worker.Software, }) - mf.persistence.EXPECT().SaveWorkerStatus(gomock.Any(), &worker).Return(nil) + + savedWorker := worker + savedWorker.Status = api.WorkerStatusOffline + savedWorker.StatusChangeClear() + mf.persistence.EXPECT().SaveWorkerStatus(gomock.Any(), &savedWorker).Return(nil) mf.stateMachine.EXPECT().RequeueActiveTasksOfWorker(gomock.Any(), &worker, "worker signed off").Return(nil) mf.persistence.EXPECT().WorkerSeen(gomock.Any(), &worker) - worker.Status = api.WorkerStatusAwake - // Preform the request echo := mf.prepareMockedRequest(nil) requestWorkerStore(echo, &worker) err := mf.flamenco.SignOff(echo) - - // Validate to check if status is equivalent - assert.Equal(t, previousStatus, worker.Status) assert.NoError(t, err) assertResponseNoContent(t, echo) + + assert.Equal(t, initialStatusRequested, worker.StatusRequested) + assert.Equal(t, initialLazyStatusRequest, worker.LazyStatusRequest) } func TestWorkerState(t *testing.T) { -- 2.30.2 From 15625ea001f9900843ccb62bf48995dcae919193 Mon Sep 17 00:00:00 2001 From: Eveline Anderson Date: Fri, 26 May 2023 11:15:50 -0700 Subject: [PATCH 3/9] Fix #99549: When sending Workers offline, remember their previous status --- internal/manager/api_impl/workers.go | 5 +++++ internal/manager/api_impl/workers_test.go | 19 +++++++++++-------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/internal/manager/api_impl/workers.go b/internal/manager/api_impl/workers.go index 99dbe7a4..6626992d 100644 --- a/internal/manager/api_impl/workers.go +++ b/internal/manager/api_impl/workers.go @@ -163,6 +163,11 @@ func (f *Flamenco) SignOff(e echo.Context) error { w.StatusChangeClear() } + // Remember the previous status if an initial status exists + if w.StatusRequested == "" { + w.StatusChangeRequest(prevStatus, false) + } + // Pass a generic background context, as these changes should be stored even // when the HTTP connection is aborted. bgCtx, bgCtxCancel := bgContext() diff --git a/internal/manager/api_impl/workers_test.go b/internal/manager/api_impl/workers_test.go index b0c253b8..99766c6a 100644 --- a/internal/manager/api_impl/workers_test.go +++ b/internal/manager/api_impl/workers_test.go @@ -297,25 +297,28 @@ func TestWorkerRememberPreviousStatus(t *testing.T) { worker := testWorker() worker.Status = api.WorkerStatusTesting - initialStatusRequested := worker.StatusRequested - initialLazyStatusRequest := worker.LazyStatusRequest worker.StatusChangeRequest(api.WorkerStatusOffline, true) mf.broadcaster.EXPECT().BroadcastWorkerUpdate(api.SocketIOWorkerUpdate{ Id: worker.UUID, Name: worker.Name, - PreviousStatus: ptr(api.WorkerStatusTesting), + PreviousStatus: ptr(api.WorkerStatusAwake), Status: api.WorkerStatusOffline, + StatusChange: &api.WorkerStatusChangeRequest{ + IsLazy: false, + Status: api.WorkerStatusAwake, + }, Updated: worker.UpdatedAt, Version: worker.Software, }) savedWorker := worker savedWorker.Status = api.WorkerStatusOffline - savedWorker.StatusChangeClear() + savedWorker.StatusRequested = api.WorkerStatusAwake + savedWorker.LazyStatusRequest = false mf.persistence.EXPECT().SaveWorkerStatus(gomock.Any(), &savedWorker).Return(nil) - mf.stateMachine.EXPECT().RequeueActiveTasksOfWorker(gomock.Any(), &worker, "worker signed off").Return(nil) - mf.persistence.EXPECT().WorkerSeen(gomock.Any(), &worker) + mf.stateMachine.EXPECT().RequeueActiveTasksOfWorker(gomock.Any(), gomock.Eq(&worker), "worker signed off").Return(nil) + mf.persistence.EXPECT().WorkerSeen(gomock.Any(), gomock.Eq(&worker)) worker.Status = api.WorkerStatusAwake @@ -325,8 +328,8 @@ func TestWorkerRememberPreviousStatus(t *testing.T) { assert.NoError(t, err) assertResponseNoContent(t, echo) - assert.Equal(t, initialStatusRequested, worker.StatusRequested) - assert.Equal(t, initialLazyStatusRequest, worker.LazyStatusRequest) + assert.Equal(t, api.WorkerStatusAwake, worker.StatusRequested) + assert.Equal(t, false, worker.LazyStatusRequest) } func TestWorkerState(t *testing.T) { -- 2.30.2 From 15366e6dab3db0f25b5be7b71b4ae4d849175208 Mon Sep 17 00:00:00 2001 From: Eveline Anderson Date: Mon, 29 May 2023 11:25:48 -0700 Subject: [PATCH 4/9] Merge remote changes into web-api-upgrade --- .vscode/settings.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 0856495c..0800dfa2 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -13,9 +13,10 @@ }, "[yaml]": { "editor.autoIndent": "keep", - "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.defaultFormatter": "esbenp.prettier-vscode" }, "[vue]": { - "editor.defaultFormatter": "Vue.volar", + "editor.defaultFormatter": "Vue.volar" }, + "editor.formatOnSave": true } -- 2.30.2 From 7cb484967cafca8a4396608417ec0c3b3af76359 Mon Sep 17 00:00:00 2001 From: Eveline Anderson Date: Thu, 1 Jun 2023 14:37:55 -0700 Subject: [PATCH 5/9] Fix errors of TestWprkerSignoffStatusChangeRequest and TestWorkerSignoffTaskRequeue --- internal/manager/api_impl/workers_test.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/internal/manager/api_impl/workers_test.go b/internal/manager/api_impl/workers_test.go index 99766c6a..ffb6f904 100644 --- a/internal/manager/api_impl/workers_test.go +++ b/internal/manager/api_impl/workers_test.go @@ -244,6 +244,10 @@ func TestWorkerSignoffTaskRequeue(t *testing.T) { Name: worker.Name, PreviousStatus: &prevStatus, Status: api.WorkerStatusOffline, + StatusChange: &api.WorkerStatusChangeRequest{ + IsLazy: false, + Status: api.WorkerStatusAwake, + }, Updated: worker.UpdatedAt, Version: worker.Software, }) @@ -269,6 +273,10 @@ func TestWorkerSignoffStatusChangeRequest(t *testing.T) { Name: worker.Name, PreviousStatus: ptr(api.WorkerStatusAwake), Status: api.WorkerStatusOffline, + StatusChange: &api.WorkerStatusChangeRequest{ + IsLazy: false, + Status: api.WorkerStatusAwake, + }, Updated: worker.UpdatedAt, Version: worker.Software, }) @@ -277,7 +285,7 @@ func TestWorkerSignoffStatusChangeRequest(t *testing.T) { savedWorker := worker savedWorker.Status = api.WorkerStatusOffline savedWorker.StatusChangeClear() - mf.persistence.EXPECT().SaveWorkerStatus(gomock.Any(), &savedWorker).Return(nil) + mf.persistence.EXPECT().SaveWorkerStatus(gomock.Any(), gomock.Any()).Return(nil) mf.stateMachine.EXPECT().RequeueActiveTasksOfWorker(gomock.Any(), &worker, "worker signed off").Return(nil) mf.persistence.EXPECT().WorkerSeen(gomock.Any(), &worker) -- 2.30.2 From bae036673eafbcf61b17cc04ff0ad0d65c627b7d Mon Sep 17 00:00:00 2001 From: Eveline Anderson Date: Fri, 2 Jun 2023 07:21:09 -0700 Subject: [PATCH 6/9] Revert SaveWorkerStatus in TestWorkerSignoffStatusChangeRequest --- internal/manager/api_impl/workers_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/manager/api_impl/workers_test.go b/internal/manager/api_impl/workers_test.go index ffb6f904..49fd20d5 100644 --- a/internal/manager/api_impl/workers_test.go +++ b/internal/manager/api_impl/workers_test.go @@ -285,7 +285,7 @@ func TestWorkerSignoffStatusChangeRequest(t *testing.T) { savedWorker := worker savedWorker.Status = api.WorkerStatusOffline savedWorker.StatusChangeClear() - mf.persistence.EXPECT().SaveWorkerStatus(gomock.Any(), gomock.Any()).Return(nil) + mf.persistence.EXPECT().SaveWorkerStatus(gomock.Any(), &savedWorker).Return(nil) mf.stateMachine.EXPECT().RequeueActiveTasksOfWorker(gomock.Any(), &worker, "worker signed off").Return(nil) mf.persistence.EXPECT().WorkerSeen(gomock.Any(), &worker) -- 2.30.2 From 8b041d777f86ec97d59e861868f44c66385c1fdc Mon Sep 17 00:00:00 2001 From: Eveline Anderson Date: Fri, 2 Jun 2023 07:39:23 -0700 Subject: [PATCH 7/9] Remove TestWorkerSignoffStatusChangeRequest --- internal/manager/api_impl/workers_test.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/internal/manager/api_impl/workers_test.go b/internal/manager/api_impl/workers_test.go index 49fd20d5..2e9508ed 100644 --- a/internal/manager/api_impl/workers_test.go +++ b/internal/manager/api_impl/workers_test.go @@ -304,7 +304,7 @@ func TestWorkerRememberPreviousStatus(t *testing.T) { mf := newMockedFlamenco(mockCtrl) worker := testWorker() - worker.Status = api.WorkerStatusTesting + worker.Status = api.WorkerStatusAwake worker.StatusChangeRequest(api.WorkerStatusOffline, true) mf.broadcaster.EXPECT().BroadcastWorkerUpdate(api.SocketIOWorkerUpdate{ @@ -328,8 +328,6 @@ func TestWorkerRememberPreviousStatus(t *testing.T) { mf.stateMachine.EXPECT().RequeueActiveTasksOfWorker(gomock.Any(), gomock.Eq(&worker), "worker signed off").Return(nil) mf.persistence.EXPECT().WorkerSeen(gomock.Any(), gomock.Eq(&worker)) - worker.Status = api.WorkerStatusAwake - echo := mf.prepareMockedRequest(nil) requestWorkerStore(echo, &worker) err := mf.flamenco.SignOff(echo) -- 2.30.2 From 8dbb12e507daf4c85034871440b2bfd5e316435d Mon Sep 17 00:00:00 2001 From: Eveline Anderson Date: Fri, 2 Jun 2023 07:42:17 -0700 Subject: [PATCH 8/9] Remove TestWorkerSignoffStatusChangeRequest --- internal/manager/api_impl/workers_test.go | 39 ----------------------- 1 file changed, 39 deletions(-) diff --git a/internal/manager/api_impl/workers_test.go b/internal/manager/api_impl/workers_test.go index 2e9508ed..6147dce6 100644 --- a/internal/manager/api_impl/workers_test.go +++ b/internal/manager/api_impl/workers_test.go @@ -259,45 +259,6 @@ func TestWorkerSignoffTaskRequeue(t *testing.T) { assert.Equal(t, http.StatusNoContent, resp.StatusCode) } -func TestWorkerSignoffStatusChangeRequest(t *testing.T) { - mockCtrl := gomock.NewController(t) - defer mockCtrl.Finish() - - mf := newMockedFlamenco(mockCtrl) - worker := testWorker() - worker.Status = api.WorkerStatusAwake - worker.StatusChangeRequest(api.WorkerStatusOffline, true) - - mf.broadcaster.EXPECT().BroadcastWorkerUpdate(api.SocketIOWorkerUpdate{ - Id: worker.UUID, - Name: worker.Name, - PreviousStatus: ptr(api.WorkerStatusAwake), - Status: api.WorkerStatusOffline, - StatusChange: &api.WorkerStatusChangeRequest{ - IsLazy: false, - Status: api.WorkerStatusAwake, - }, - Updated: worker.UpdatedAt, - Version: worker.Software, - }) - - // Expect the Worker to be saved with the status change removed. - savedWorker := worker - savedWorker.Status = api.WorkerStatusOffline - savedWorker.StatusChangeClear() - mf.persistence.EXPECT().SaveWorkerStatus(gomock.Any(), &savedWorker).Return(nil) - - mf.stateMachine.EXPECT().RequeueActiveTasksOfWorker(gomock.Any(), &worker, "worker signed off").Return(nil) - mf.persistence.EXPECT().WorkerSeen(gomock.Any(), &worker) - - // Perform the request - echo := mf.prepareMockedRequest(nil) - requestWorkerStore(echo, &worker) - err := mf.flamenco.SignOff(echo) - assert.NoError(t, err) - assertResponseNoContent(t, echo) -} - func TestWorkerRememberPreviousStatus(t *testing.T) { mockCtrl := gomock.NewController(t) defer mockCtrl.Finish() -- 2.30.2 From f4bbda0fdc075b31006889b3057cb41c3833ecfc Mon Sep 17 00:00:00 2001 From: Eveline Anderson Date: Fri, 2 Jun 2023 07:47:49 -0700 Subject: [PATCH 9/9] Change RequeueActiveTasksOfWork and WorkerSeen --- internal/manager/api_impl/workers_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/manager/api_impl/workers_test.go b/internal/manager/api_impl/workers_test.go index 6147dce6..439fba41 100644 --- a/internal/manager/api_impl/workers_test.go +++ b/internal/manager/api_impl/workers_test.go @@ -286,8 +286,8 @@ func TestWorkerRememberPreviousStatus(t *testing.T) { savedWorker.StatusRequested = api.WorkerStatusAwake savedWorker.LazyStatusRequest = false mf.persistence.EXPECT().SaveWorkerStatus(gomock.Any(), &savedWorker).Return(nil) - mf.stateMachine.EXPECT().RequeueActiveTasksOfWorker(gomock.Any(), gomock.Eq(&worker), "worker signed off").Return(nil) - mf.persistence.EXPECT().WorkerSeen(gomock.Any(), gomock.Eq(&worker)) + mf.stateMachine.EXPECT().RequeueActiveTasksOfWorker(gomock.Any(), &worker, "worker signed off").Return(nil) + mf.persistence.EXPECT().WorkerSeen(gomock.Any(), &worker) echo := mf.prepareMockedRequest(nil) requestWorkerStore(echo, &worker) -- 2.30.2