Skip to content

Commit 3ca7587

Browse files
committed
add: logic to reduce logging loops, addressed feedback
1 parent 0fac784 commit 3ca7587

File tree

2 files changed

+61
-26
lines changed

2 files changed

+61
-26
lines changed

controllers/appwrapper_controller.go

Lines changed: 37 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -90,24 +90,15 @@ const (
9090
func (r *AppWrapperReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
9191
_ = log.FromContext(ctx)
9292

93-
// todo: Move the "machineCheck" locic out of reconcile loop.
93+
// todo: Move the "machineCheck" logic out of reconcile loop.
9494
// Only reason we are calling it here is that the client is not able to make
9595
// calls until it is started, so SetupWithManager is not working.
9696
if r.machineCheck == false {
97-
if r.MachineType != MachineTypeMachineSet && r.ocmClusterID == "" {
98-
if err := r.getOCMClusterID(); err != nil {
99-
return ctrl.Result{}, err
100-
}
101-
}
102-
hypershiftEnabled, err := r.checkHypershiftEnabled(ctx)
103-
if err != nil {
104-
return ctrl.Result{}, fmt.Errorf("error checking if hypershift is enabled: %w", err)
105-
}
106-
if hypershiftEnabled {
107-
r.MachineType = MachineTypeNodePool
97+
if err := r.setMachineType(ctx); err != nil {
98+
return ctrl.Result{}, err
10899
}
109-
r.machineCheck = true
110100
}
101+
111102
var appwrapper arbv1.AppWrapper
112103

113104
if err := r.Get(ctx, req.NamespacedName, &appwrapper); err != nil {
@@ -129,8 +120,10 @@ func (r *AppWrapperReconciler) Reconcile(ctx context.Context, req ctrl.Request)
129120
}
130121

131122
if !appwrapper.ObjectMeta.DeletionTimestamp.IsZero() || appwrapper.Status.State == arbv1.AppWrapperStateCompleted {
132-
if err := r.finalizeScalingDownMachines(ctx, &appwrapper); err != nil {
133-
return ctrl.Result{}, err
123+
if !r.annotationExists(&appwrapper, "scaledownComplete") && len(getInstanceRequired(appwrapper.Labels)) > 0 {
124+
if err := r.finalizeScalingDownMachines(ctx, &appwrapper); err != nil {
125+
return ctrl.Result{}, err
126+
}
134127
}
135128
controllerutil.RemoveFinalizer(&appwrapper, finalizerName)
136129
if err := r.Update(ctx, &appwrapper); err != nil {
@@ -159,12 +152,30 @@ func (r *AppWrapperReconciler) Reconcile(ctx context.Context, req ctrl.Request)
159152
return ctrl.Result{}, nil
160153
}
161154

155+
func (r *AppWrapperReconciler) setMachineType(ctx context.Context) error {
156+
if r.MachineType != MachineTypeMachineSet && r.ocmClusterID == "" {
157+
if err := r.getOCMClusterID(); err != nil {
158+
return err
159+
}
160+
}
161+
hypershiftEnabled, err := r.checkHypershiftEnabled(ctx)
162+
if err != nil {
163+
return fmt.Errorf("error checking if hypershift is enabled: %w", err)
164+
}
165+
if hypershiftEnabled {
166+
r.MachineType = MachineTypeNodePool
167+
}
168+
r.machineCheck = true
169+
return nil
170+
}
171+
162172
func (r *AppWrapperReconciler) finalizeScalingDownMachines(ctx context.Context, appwrapper *arbv1.AppWrapper) error {
163173
if appwrapper.Status.State == arbv1.AppWrapperStateCompleted {
164174
deletionMessage = "completed"
165175
} else {
166176
deletionMessage = "deleted"
167177
}
178+
168179
switch r.MachineType {
169180
case MachineTypeMachineSet:
170181
switch strings.ToLower(r.Config.MachineSetsStrategy) {
@@ -173,33 +184,39 @@ func (r *AppWrapperReconciler) finalizeScalingDownMachines(ctx context.Context,
173184
if matchedAw != nil {
174185
klog.Infof("Appwrapper %s %s, swapping machines to %s", appwrapper.Name, deletionMessage, matchedAw.Name)
175186
if err := r.swapNodeLabels(ctx, appwrapper, matchedAw); err != nil {
187+
klog.Errorf("Error swapping node labels for AppWrapper %s: %v", appwrapper.Name, err)
176188
return err
177189
}
178190
} else {
179191
klog.Infof("Appwrapper %s %s, scaling down machines", appwrapper.Name, deletionMessage)
180192
if err := r.annotateToDeleteMachine(ctx, appwrapper); err != nil {
193+
klog.Errorf("Error annotating to delete machine for AppWrapper %s: %v", appwrapper.Name, err)
181194
return err
182195
}
183196
}
184197
case "duplicate":
185198
klog.Infof("Appwrapper %s scale-down machineset: %s ", deletionMessage, appwrapper.Name)
186199
if err := r.deleteMachineSet(ctx, appwrapper); err != nil {
200+
klog.Errorf("Error deleting MachineSet for AppWrapper %s: %v", appwrapper.Name, err)
187201
return err
188202
}
189203
}
190204

191205
case MachineTypeNodePool:
192206
klog.Infof("Appwrapper %s scale-down node pool: %s ", deletionMessage, appwrapper.Name)
193207
if _, err := r.deleteNodePool(ctx, appwrapper); err != nil {
208+
klog.Errorf("Error deleting NodePool for AppWrapper %s: %v", appwrapper.Name, err)
194209
return err
195210
}
196211

197212
case MachineTypeMachinePool:
198213
klog.Infof("Appwrapper %s scale-down machine pool: %s ", deletionMessage, appwrapper.Name)
199214
if _, err := r.deleteMachinePool(ctx, appwrapper); err != nil {
215+
klog.Errorf("Error deleting MachinePool for AppWrapper %s: %v", appwrapper.Name, err)
200216
return err
201217
}
202218
}
219+
r.setAnnotation(appwrapper, "scaledownComplete", "true")
203220
return nil
204221
}
205222

@@ -237,15 +254,12 @@ func (r *AppWrapperReconciler) getOCMSecret(ctx context.Context, secretRef *core
237254

238255
func (r *AppWrapperReconciler) discoverInstanceTypes(aw *arbv1.AppWrapper) map[string]int {
239256
demandMapPerInstanceType := make(map[string]int)
240-
var instanceRequired []string
241-
for k, v := range aw.Labels {
242-
if k == "orderedinstance" {
243-
instanceRequired = strings.Split(v, "_")
244-
}
245-
}
246-
257+
instanceRequired := getInstanceRequired(aw.Labels)
247258
if len(instanceRequired) < 1 {
248-
klog.Infof("Found AW %s that cannot be scaled due to missing orderedinstance label", aw.ObjectMeta.Name)
259+
if _, exists := aw.Annotations["loggedNoInstances"]; !exists {
260+
klog.Infof("Found AW %s that cannot be scaled due to missing orderedinstance label", aw.ObjectMeta.Name)
261+
r.setAnnotation(aw, "loggedNoInstances", "true")
262+
}
249263
return demandMapPerInstanceType
250264
}
251265

controllers/utils.go

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,35 @@ package controllers
33
import (
44
"encoding/json"
55
"fmt"
6-
"math/rand"
7-
"time"
8-
96
machinev1 "github.com/openshift/api/machine/v1beta1"
7+
arbv1 "github.com/project-codeflare/multi-cluster-app-dispatcher/pkg/apis/controller/v1beta1"
108
"k8s.io/apimachinery/pkg/runtime"
119
"k8s.io/klog"
10+
11+
"math/rand"
12+
"strings"
13+
"time"
1214
)
1315

16+
func getInstanceRequired(labels map[string]string) []string {
17+
if value, exists := labels["orderedinstance"]; exists {
18+
return strings.Split(value, "_")
19+
}
20+
return []string{}
21+
}
22+
23+
func (r *AppWrapperReconciler) annotationExists(appwrapper *arbv1.AppWrapper, key string) bool {
24+
_, exists := appwrapper.Annotations[key]
25+
return exists
26+
}
27+
28+
func (r *AppWrapperReconciler) setAnnotation(appwrapper *arbv1.AppWrapper, key, value string) {
29+
if appwrapper.Annotations == nil {
30+
appwrapper.Annotations = make(map[string]string)
31+
}
32+
appwrapper.Annotations[key] = value
33+
}
34+
1435
func resyncPeriod() func() time.Duration {
1536
return func() time.Duration {
1637
factor := rand.Float64() + 1

0 commit comments

Comments
 (0)