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",
 					},
 				},
 			},