From c7243443f67620ef5fec4c11ae4b16e68fc671d5 Mon Sep 17 00:00:00 2001 From: "Pedro D. Bello-Maldonado" <metalcycling@gmail.com> Date: Mon, 14 Aug 2023 14:11:03 -0400 Subject: [PATCH 1/4] Fixed logic to give the correct AppWrapper status transition from Running->RunningHoldCompletion->Completed --- pkg/controller/queuejob/queuejob_controller_ex.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/controller/queuejob/queuejob_controller_ex.go b/pkg/controller/queuejob/queuejob_controller_ex.go index d28120c2..cc00ec5c 100644 --- a/pkg/controller/queuejob/queuejob_controller_ex.go +++ b/pkg/controller/queuejob/queuejob_controller_ex.go @@ -550,7 +550,7 @@ func (qjm *XController) getAppWrapperCompletionStatus(caw *arbv1.AppWrapper) arb if !status { klog.V(4).Infof("[getAppWrapperCompletionStatus] Item %d named %s not completed for appwrapper: '%s/%s'", i+1, name, caw.Namespace, caw.Name) // early termination because a required item is not completed - return caw.Status.State + continue } // only consider count completion required for valid items @@ -566,7 +566,7 @@ func (qjm *XController) getAppWrapperCompletionStatus(caw *arbv1.AppWrapper) arb return arbv1.AppWrapperStateCompleted } - if caw.Status.Pending > 0 || caw.Status.Running > 0 { + if caw.Status.Running > 0 || caw.Status.Pending > 0 { return arbv1.AppWrapperStateRunningHoldCompletion } } From 7457a2fe3ec997ac27944c1130606120658cf68c Mon Sep 17 00:00:00 2001 From: "Pedro D. Bello-Maldonado" <metalcycling@gmail.com> Date: Mon, 14 Aug 2023 16:36:36 -0400 Subject: [PATCH 2/4] Count all generic items with completion status, and mark the AppWrapper state 'Completed' if all of them reache their specified conditions --- pkg/controller/queuejob/queuejob_controller_ex.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pkg/controller/queuejob/queuejob_controller_ex.go b/pkg/controller/queuejob/queuejob_controller_ex.go index cc00ec5c..5c7fa280 100644 --- a/pkg/controller/queuejob/queuejob_controller_ex.go +++ b/pkg/controller/queuejob/queuejob_controller_ex.go @@ -523,10 +523,13 @@ func (qjm *XController) GetAggregatedResourcesPerGenericItem(cqj *arbv1.AppWrapp // Gets all objects owned by AW from API server, check user supplied status and set whole AW status func (qjm *XController) getAppWrapperCompletionStatus(caw *arbv1.AppWrapper) arbv1.AppWrapperState { - // Get all pods and related resources + // Count how many generic items specify a 'completionstatus'. For those that do specify it, check to see if the + // generic item reached any of the condition states provided in the YAML + totalCompletionsRequired := 0 countCompletionRequired := 0 for i, genericItem := range caw.Spec.AggrResources.GenericItems { if len(genericItem.CompletionStatus) > 0 { + totalCompletionsRequired += 1 objectName := genericItem.GenericTemplate var unstruct unstructured.Unstructured unstruct.Object = make(map[string]interface{}) @@ -562,7 +565,7 @@ func (qjm *XController) getAppWrapperCompletionStatus(caw *arbv1.AppWrapper) arb // Set new status only when completion required flag is present in genericitems array if countCompletionRequired > 0 { - if caw.Status.Running == 0 && caw.Status.Pending == 0 { + if caw.Status.Running == 0 && caw.Status.Pending == 0 || countCompletionRequired == totalCompletionsRequired { return arbv1.AppWrapperStateCompleted } From 569ecb012d83b29fb8e0c8c7d33ed205119fd9e0 Mon Sep 17 00:00:00 2001 From: "Pedro D. Bello-Maldonado" <metalcycling@gmail.com> Date: Mon, 14 Aug 2023 21:45:25 -0400 Subject: [PATCH 3/4] Added missing 'completionstatus' to second generic item in test --- test/e2e-kuttl-deployment-01/steps/03-install.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/test/e2e-kuttl-deployment-01/steps/03-install.yaml b/test/e2e-kuttl-deployment-01/steps/03-install.yaml index 63ef37e2..b072c2f6 100644 --- a/test/e2e-kuttl-deployment-01/steps/03-install.yaml +++ b/test/e2e-kuttl-deployment-01/steps/03-install.yaml @@ -63,6 +63,7 @@ spec: nvidia.com/gpu: 0 memory: 1Gi - replicas: 1 + completionstatus: Complete custompodresources: - replicas: 1 requests: From 8bf42fffbe25e90f120893553606971e36465a36 Mon Sep 17 00:00:00 2001 From: "Pedro D. Bello-Maldonado" <metalcycling@gmail.com> Date: Mon, 14 Aug 2023 23:03:00 -0400 Subject: [PATCH 4/4] Added missing 'completionstatus' to second generic item in test --- test/e2e/util.go | 1 + 1 file changed, 1 insertion(+) diff --git a/test/e2e/util.go b/test/e2e/util.go index 2bd56694..24b2f8b8 100644 --- a/test/e2e/util.go +++ b/test/e2e/util.go @@ -1694,6 +1694,7 @@ func createGenericDeploymentAWWithMultipleItems(context *context, name string) * GenericTemplate: runtime.RawExtension{ Raw: rb1, }, + CompletionStatus: "Completed", }, }, },