@@ -97,11 +97,11 @@ func (r *WorkloadReconciler) Reconcile(ctx context.Context, req ctrl.Request) (c
97
97
}
98
98
99
99
log := ctrl .LoggerFrom (ctx )
100
- log .V (2 ).Info ("Reconcile Workload" )
100
+ log .V (3 ).Info ("Reconcile Workload" )
101
101
102
102
if r .shouldFinalize (wl ) {
103
103
if controllerutil .ContainsFinalizer (wl , SliceControllerName ) {
104
- err = r .client .Delete (ctx , r . newEmptySlice (wl ))
104
+ err = r .client .Delete (ctx , core . SliceWithMetadata (wl ))
105
105
if client .IgnoreNotFound (err ) != nil {
106
106
return ctrl.Result {}, err
107
107
}
@@ -112,50 +112,51 @@ func (r *WorkloadReconciler) Reconcile(ctx context.Context, req ctrl.Request) (c
112
112
}
113
113
return ctrl.Result {}, client .IgnoreNotFound (err )
114
114
}
115
- log .V (5 ).Info ("Removed finalizer" )
115
+ log .V (3 ).Info ("Removed finalizer" )
116
116
}
117
117
return ctrl.Result {}, nil
118
118
}
119
119
120
+ if ! r .isRelevantWorkload (wl , log ) {
121
+ return ctrl.Result {}, nil
122
+ }
123
+
120
124
ac , err := r .sliceAC (ctx , wl )
121
125
if err != nil {
122
126
return reconcile.Result {}, err
123
127
}
124
128
if ac == nil {
125
- log .V (5 ).Info ("Admission check not found – ignoring reconciliation for now " )
129
+ log .V (3 ).Info ("Admission check not found - skipping reconciliation" )
126
130
return reconcile.Result {}, nil
127
131
}
128
132
129
133
log = log .WithValues ("admissionCheck" , ac .Name )
130
134
ctrl .LoggerInto (ctx , log )
131
135
132
- if ! r .isRelevantWorkload (wl , log ) {
133
- return ctrl.Result {}, nil
134
- }
135
-
136
136
if controllerutil .AddFinalizer (wl , SliceControllerName ) {
137
137
if err = r .client .Update (ctx , wl ); err != nil {
138
138
if ! apierrors .IsNotFound (err ) {
139
139
log .Error (err , "Failed to add finalizer" )
140
140
}
141
141
return ctrl.Result {}, client .IgnoreNotFound (err )
142
142
}
143
- log .V (5 ).Info ("Added finalizer" )
143
+ log .V (3 ).Info ("Added finalizer" )
144
144
return ctrl.Result {}, nil
145
145
}
146
146
147
- slice := r .newEmptySlice (wl )
148
-
149
- err = r .client .Get (ctx , client .ObjectKeyFromObject (slice ), slice )
150
- if client .IgnoreNotFound (err ) != nil {
147
+ slice := v1alpha1.Slice {}
148
+ err = r .client .Get (ctx , core .SliceKeyFromWorkload (wl ), & slice )
149
+ if apierrors .IsNotFound (err ) {
150
+ // slice not found, create it and exit.
151
+ err = r .createSlice (ctx , log , wl , ac )
152
+ return ctrl.Result {}, err
153
+ } else if err != nil {
154
+ // error fetching slice
151
155
log .Error (err , "Failed to fetch the Slice" )
152
156
return ctrl.Result {}, err
153
157
}
154
- if err != nil {
155
- return ctrl.Result {}, r .createSlice (ctx , wl , ac )
156
- }
157
158
158
- err = r .syncAdmissionCheckStatus (ctx , wl , ac , slice )
159
+ err = r .syncAdmissionCheckStatus (ctx , wl , ac , & slice )
159
160
return ctrl.Result {}, client .IgnoreNotFound (err )
160
161
}
161
162
@@ -214,22 +215,7 @@ func (r *WorkloadReconciler) sliceAC(ctx context.Context, wl *kueue.Workload) (*
214
215
return workload .FindAdmissionCheck (wl .Status .AdmissionChecks , relevantChecks [0 ]), nil
215
216
}
216
217
217
- func (r * WorkloadReconciler ) newEmptySlice (wl * kueue.Workload ) * v1alpha1.Slice {
218
- return & v1alpha1.Slice {
219
- ObjectMeta : metav1.ObjectMeta {
220
- Name : wl .Name ,
221
- Namespace : wl .Namespace ,
222
- },
223
- }
224
- }
225
-
226
- func (r * WorkloadReconciler ) newSlice (wl * kueue.Workload ) (* v1alpha1.Slice , error ) {
227
- slice := r .newEmptySlice (wl )
228
-
229
- if err := controllerutil .SetControllerReference (wl , slice , r .client .Scheme ()); err != nil {
230
- return nil , err
231
- }
232
-
218
+ func parseTopologyAssignmentIntoNodeSelector (slice * v1alpha1.Slice , wl * kueue.Workload ) {
233
219
nodeSelectors := sets .New [string ]()
234
220
for _ , psa := range wl .Status .Admission .PodSetAssignments {
235
221
// we already validated that all assignments have a valid level,
@@ -242,21 +228,19 @@ func (r *WorkloadReconciler) newSlice(wl *kueue.Workload) (*v1alpha1.Slice, erro
242
228
slice .Spec .NodeSelector = map [string ][]string {
243
229
TPUReservationSubblockLabel : sets .List (nodeSelectors ),
244
230
}
245
- return slice , nil
246
231
}
247
232
248
- func (r * WorkloadReconciler ) createSlice (ctx context.Context , wl * kueue.Workload , ac * kueue.AdmissionCheckState ) error {
249
- log := ctrl .LoggerFrom (ctx )
233
+ func (r * WorkloadReconciler ) createSlice (ctx context.Context , log logr.Logger , wl * kueue.Workload , ac * kueue.AdmissionCheckState ) error {
234
+ slice := core .SliceWithMetadata (wl )
235
+ log = log .WithValues ("slice" , klog .KObj (slice ))
236
+ log .V (3 ).Info ("Creating Slice" )
250
237
251
- slice , err := r .newSlice (wl )
252
- if err != nil {
238
+ if err := controllerutil .SetControllerReference (wl , slice , r .client .Scheme ()); err != nil {
253
239
return err
254
240
}
241
+ parseTopologyAssignmentIntoNodeSelector (slice , wl )
255
242
256
- log = log .WithValues ("slice" , klog .KObj (slice ))
257
-
258
- err = r .client .Create (ctx , slice )
259
- if err != nil {
243
+ if err := r .client .Create (ctx , slice ); err != nil {
260
244
msg := fmt .Sprintf ("Error creating Slice %q: %v" , slice .Name , err )
261
245
log .Error (err , msg )
262
246
r .record .Event (wl , corev1 .EventTypeWarning , FailedCreateSliceEventType , api .TruncateEventMessage (msg ))
@@ -265,8 +249,8 @@ func (r *WorkloadReconciler) createSlice(ctx context.Context, wl *kueue.Workload
265
249
return errors .Join (err , patchErr )
266
250
}
267
251
268
- msg := fmt .Sprintf ("The Slice %q has been created" , slice . Name )
269
- log .V (5 ).Info (msg )
252
+ msg := fmt .Sprintf ("The Slice %s has been created" , client . ObjectKeyFromObject ( slice ) )
253
+ log .V (3 ).Info (msg )
270
254
r .record .Event (wl , corev1 .EventTypeNormal , SliceCreatedEventType , msg )
271
255
ac .Message = msg
272
256
@@ -356,11 +340,11 @@ func (h *sliceHandler) handleEvent(ctx context.Context, obj client.Object, q wor
356
340
357
341
owner := metav1 .GetControllerOf (slice )
358
342
if owner == nil {
359
- log .V (5 ).Info ("Owner not found" )
343
+ log .V (3 ).Info ("Owner not found" )
360
344
return
361
345
}
362
346
363
- log .V (5 ).Info ("Handle Slice event" , "workload" , klog .KRef (slice .Namespace , slice .Name ))
347
+ log .V (3 ).Info ("Handle Slice event" , "workload" , klog .KRef (slice .Namespace , slice .Name ))
364
348
365
349
req := reconcile.Request {
366
350
NamespacedName : types.NamespacedName {
0 commit comments