@@ -18,6 +18,7 @@ package multiclusterservice
18
18
19
19
import (
20
20
"context"
21
+ "errors"
21
22
"fmt"
22
23
"reflect"
23
24
"strings"
@@ -84,7 +85,7 @@ const EndpointSliceCollectControllerName = "endpointslice-collect-controller"
84
85
85
86
// Reconcile performs a full reconciliation for the object referred to by the Request.
86
87
func (c * EndpointSliceCollectController ) Reconcile (ctx context.Context , req controllerruntime.Request ) (controllerruntime.Result , error ) {
87
- klog .V (4 ).Infof ("Reconciling Work %s" , req .NamespacedName . String () )
88
+ klog .V (4 ).InfoS ("Reconciling Work" , "namespace" , req .Namespace , "name" , req . Name )
88
89
89
90
work := & workv1alpha1.Work {}
90
91
if err := c .Client .Get (ctx , req .NamespacedName , work ); err != nil {
@@ -105,7 +106,7 @@ func (c *EndpointSliceCollectController) Reconcile(ctx context.Context, req cont
105
106
106
107
clusterName , err := names .GetClusterName (work .Namespace )
107
108
if err != nil {
108
- klog .Errorf ( "Failed to get cluster name for work %s/%s" , work .Namespace , work .Name )
109
+ klog .ErrorS ( err , "Failed to get cluster name for work" , "namespace" , work .Namespace , "name" , work .Name )
109
110
return controllerruntime.Result {}, err
110
111
}
111
112
@@ -144,14 +145,15 @@ func (c *EndpointSliceCollectController) collectEndpointSlice(key util.QueueKey)
144
145
ctx := context .Background ()
145
146
fedKey , ok := key .(keys.FederatedKey )
146
147
if ! ok {
147
- klog .Errorf ("Failed to collect endpointslice as invalid key: %v" , key )
148
+ var ErrInvalidKey = errors .New ("invalid key" )
149
+ klog .ErrorS (ErrInvalidKey , "Failed to collect endpointslice as invalid key" , "key" , key )
148
150
return fmt .Errorf ("invalid key" )
149
151
}
150
152
151
- klog .V (4 ).Infof ("Begin to collect %s %s." , fedKey .Kind , fedKey .NamespaceKey ())
153
+ klog .V (4 ).InfoS ("Begin to collect" , "kind" , fedKey .Kind , "namespaceKey" , fedKey .NamespaceKey ())
152
154
if err := c .handleEndpointSliceEvent (ctx , fedKey ); err != nil {
153
- klog .Errorf ( "Failed to handle endpointSlice(%s) event, Error: %v " ,
154
- fedKey .NamespaceKey (), err )
155
+ klog .ErrorS ( err , "Failed to handle endpointSlice event" , "namespaceKey " ,
156
+ fedKey .NamespaceKey ())
155
157
return err
156
158
}
157
159
@@ -161,17 +163,18 @@ func (c *EndpointSliceCollectController) collectEndpointSlice(key util.QueueKey)
161
163
func (c * EndpointSliceCollectController ) buildResourceInformers (clusterName string ) error {
162
164
cluster , err := util .GetCluster (c .Client , clusterName )
163
165
if err != nil {
164
- klog .Errorf ( "Failed to get the given member cluster %s " , clusterName )
166
+ klog .ErrorS ( err , "Failed to get the given member cluster" , "cluster " , clusterName )
165
167
return err
166
168
}
167
169
168
170
if ! util .IsClusterReady (& cluster .Status ) {
169
- klog .Errorf ("Stop collect endpointslice for cluster(%s) as cluster not ready." , cluster .Name )
171
+ var ErrClusterNotReady = errors .New ("cluster not ready" )
172
+ klog .ErrorS (ErrClusterNotReady , "Stop collect endpointslice for cluster as cluster not ready." , "cluster" , cluster .Name )
170
173
return fmt .Errorf ("cluster(%s) not ready" , cluster .Name )
171
174
}
172
175
173
176
if err := c .registerInformersAndStart (cluster ); err != nil {
174
- klog .Errorf ( "Failed to register informer for Cluster %s. Error: %v." , cluster .Name , err )
177
+ klog .ErrorS ( err , "Failed to register informer for Cluster" , "cluster" , cluster .Name )
175
178
return err
176
179
}
177
180
@@ -185,7 +188,7 @@ func (c *EndpointSliceCollectController) registerInformersAndStart(cluster *clus
185
188
if singleClusterInformerManager == nil {
186
189
dynamicClusterClient , err := c .ClusterDynamicClientSetFunc (cluster .Name , c .Client , c .ClusterClientOption )
187
190
if err != nil {
188
- klog .Errorf ( "Failed to build dynamic cluster client for cluster %s. " , cluster .Name )
191
+ klog .ErrorS ( err , "Failed to build dynamic cluster client for cluster" , "cluster " , cluster .Name )
189
192
return err
190
193
}
191
194
singleClusterInformerManager = c .InformerManager .ForCluster (dynamicClusterClient .ClusterName , dynamicClusterClient .DynamicClientSet , 0 )
@@ -220,7 +223,7 @@ func (c *EndpointSliceCollectController) registerInformersAndStart(cluster *clus
220
223
}
221
224
return nil
222
225
}(); err != nil {
223
- klog .Errorf ( "Failed to sync cache for cluster: %s, error: %v" , cluster .Name , err )
226
+ klog .ErrorS ( err , "Failed to sync cache for cluster" , "cluster" , cluster .Name )
224
227
c .InformerManager .Stop (cluster .Name )
225
228
return err
226
229
}
@@ -245,7 +248,7 @@ func (c *EndpointSliceCollectController) genHandlerAddFunc(clusterName string) f
245
248
curObj := obj .(runtime.Object )
246
249
key , err := keys .FederatedKeyFunc (clusterName , curObj )
247
250
if err != nil {
248
- klog .Warningf ( "Failed to generate key for obj: %s " , curObj .GetObjectKind ().GroupVersionKind ())
251
+ klog .ErrorS ( err , "Failed to generate key for obj" , "gvk " , curObj .GetObjectKind ().GroupVersionKind ())
249
252
return
250
253
}
251
254
c .worker .Add (key )
@@ -258,7 +261,7 @@ func (c *EndpointSliceCollectController) genHandlerUpdateFunc(clusterName string
258
261
if ! reflect .DeepEqual (oldObj , newObj ) {
259
262
key , err := keys .FederatedKeyFunc (clusterName , curObj )
260
263
if err != nil {
261
- klog .Warningf ( "Failed to generate key for obj: %s " , curObj .GetObjectKind ().GroupVersionKind ())
264
+ klog .ErrorS ( err , "Failed to generate key for obj" , "gvk " , curObj .GetObjectKind ().GroupVersionKind ())
262
265
return
263
266
}
264
267
c .worker .Add (key )
@@ -278,7 +281,7 @@ func (c *EndpointSliceCollectController) genHandlerDeleteFunc(clusterName string
278
281
oldObj := obj .(runtime.Object )
279
282
key , err := keys .FederatedKeyFunc (clusterName , oldObj )
280
283
if err != nil {
281
- klog .Warningf ( "Failed to generate key for obj: %s " , oldObj .GetObjectKind ().GroupVersionKind ())
284
+ klog .ErrorS ( err , "Failed to generate key for obj" , "gvk " , oldObj .GetObjectKind ().GroupVersionKind ())
282
285
return
283
286
}
284
287
c .worker .Add (key )
@@ -308,7 +311,7 @@ func (c *EndpointSliceCollectController) handleEndpointSliceEvent(ctx context.Co
308
311
util .MultiClusterServiceNamespaceLabel : endpointSliceKey .Namespace ,
309
312
util .MultiClusterServiceNameLabel : util .GetLabelValue (endpointSliceObj .GetLabels (), discoveryv1 .LabelServiceName ),
310
313
})}); err != nil {
311
- klog .Errorf ( "Failed to list workList reported by endpointSlice(%s/%s), error: %v" , endpointSliceKey .Namespace , endpointSliceKey .Name , err )
314
+ klog .ErrorS ( err , "Failed to list workList reported by endpointSlice" , "namespace" , endpointSliceKey .Namespace , "name" , endpointSliceKey .Name )
312
315
return err
313
316
}
314
317
@@ -324,8 +327,8 @@ func (c *EndpointSliceCollectController) handleEndpointSliceEvent(ctx context.Co
324
327
}
325
328
326
329
if err = c .reportEndpointSliceWithEndpointSliceCreateOrUpdate (ctx , endpointSliceKey .Cluster , endpointSliceObj ); err != nil {
327
- klog .Errorf ( "Failed to handle endpointSlice(%s) event, Error: %v " ,
328
- endpointSliceKey .NamespaceKey (), err )
330
+ klog .ErrorS ( err , "Failed to handle endpointSlice event" , "namespaceKey " ,
331
+ endpointSliceKey .NamespaceKey ())
329
332
return err
330
333
}
331
334
@@ -336,7 +339,7 @@ func (c *EndpointSliceCollectController) collectTargetEndpointSlice(ctx context.
336
339
manager := c .InformerManager .GetSingleClusterManager (clusterName )
337
340
if manager == nil {
338
341
err := fmt .Errorf ("failed to get informer manager for cluster %s" , clusterName )
339
- klog .Errorf ( "%v" , err )
342
+ klog .ErrorS ( err , "Failed to get informer manager for cluster" )
340
343
return err
341
344
}
342
345
@@ -347,21 +350,21 @@ func (c *EndpointSliceCollectController) collectTargetEndpointSlice(ctx context.
347
350
})
348
351
epsList , err := manager .Lister (discoveryv1 .SchemeGroupVersion .WithResource ("endpointslices" )).ByNamespace (svcNamespace ).List (selector )
349
352
if err != nil {
350
- klog .Errorf ( "Failed to list EndpointSlice for Service(%s/%s) in cluster(%s), Error: %v" , svcNamespace , svcName , clusterName , err )
353
+ klog .ErrorS ( err , "Failed to list EndpointSlice for Service in a cluster" , "namespace" , svcNamespace , "name" , svcName , "cluster" , clusterName )
351
354
return err
352
355
}
353
356
for _ , epsObj := range epsList {
354
357
eps := & discoveryv1.EndpointSlice {}
355
358
if err = helper .ConvertToTypedObject (epsObj , eps ); err != nil {
356
- klog .Errorf ( "Failed to convert object to EndpointSlice, error: %v" , err )
359
+ klog .ErrorS ( err , "Failed to convert object to EndpointSlice" )
357
360
return err
358
361
}
359
362
if util .GetLabelValue (eps .GetLabels (), discoveryv1 .LabelManagedBy ) == util .EndpointSliceDispatchControllerLabelValue {
360
363
continue
361
364
}
362
365
epsUnstructured , err := helper .ToUnstructured (eps )
363
366
if err != nil {
364
- klog .Errorf ( "Failed to convert EndpointSlice %s/%s to unstructured, error: %v" , eps .GetNamespace (), eps .GetName (), err )
367
+ klog .ErrorS ( err , "Failed to convert EndpointSlice to unstructured" , "namespace" , eps .GetNamespace (), "name" , eps .GetName ())
365
368
return err
366
369
}
367
370
if err = c .reportEndpointSliceWithEndpointSliceCreateOrUpdate (ctx , clusterName , epsUnstructured ); err != nil {
@@ -394,7 +397,7 @@ func reportEndpointSlice(ctx context.Context, c client.Client, endpointSlice *un
394
397
395
398
// indicate the Work should be not propagated since it's collected resource.
396
399
if err := ctrlutil .CreateOrUpdateWork (ctx , c , workMeta , endpointSlice , ctrlutil .WithSuspendDispatching (true )); err != nil {
397
- klog .Errorf ( "Failed to create or update work(%s/%s), Error: %v" , workMeta .Namespace , workMeta .Name , err )
400
+ klog .ErrorS ( err , "Failed to create or update work" , "namespace" , workMeta .Namespace , "name" , workMeta .Name )
398
401
return err
399
402
}
400
403
@@ -408,7 +411,7 @@ func getEndpointSliceWorkMeta(ctx context.Context, c client.Client, ns string, w
408
411
Namespace : ns ,
409
412
Name : workName ,
410
413
}, existWork ); err != nil && ! apierrors .IsNotFound (err ) {
411
- klog .Errorf ( "Get EndpointSlice work(%s/%s) error:%v" , ns , workName , err )
414
+ klog .ErrorS ( err , "Get EndpointSlice work" , "namespace" , ns , "name" , workName )
412
415
return metav1.ObjectMeta {}, err
413
416
}
414
417
@@ -449,7 +452,7 @@ func cleanupWorkWithEndpointSliceDelete(ctx context.Context, c client.Client, en
449
452
if apierrors .IsNotFound (err ) {
450
453
return nil
451
454
}
452
- klog .Errorf ( "Failed to get work(%s) in executionSpace(%s): %v" , workNamespaceKey .String (), executionSpace , err )
455
+ klog .ErrorS ( err , "Failed to get work in executionSpace" , "namespaceKey" , workNamespaceKey .String (), " executionSpace" , executionSpace )
453
456
return err
454
457
}
455
458
@@ -472,14 +475,14 @@ func cleanProviderClustersEndpointSliceWork(ctx context.Context, c client.Client
472
475
work .Labels [util .EndpointSliceWorkManagedByLabel ] = strings .Join (controllerSet .UnsortedList (), "." )
473
476
474
477
if err := c .Update (ctx , work ); err != nil {
475
- klog .Errorf ( "Failed to update work(%s/%s): %v" , work .Namespace , work .Name , err )
478
+ klog .ErrorS ( err , "Failed to update work" , "namespace" , work .Namespace , "name" , work .Name )
476
479
return err
477
480
}
478
481
return nil
479
482
}
480
483
481
484
if err := c .Delete (ctx , work ); err != nil {
482
- klog .Errorf ( "Failed to delete work(%s/%s): %v" , work .Namespace , work .Name , err )
485
+ klog .ErrorS ( err , "Failed to delete work" , "namespace" , work .Namespace , "name" , work .Name )
483
486
return err
484
487
}
485
488
0 commit comments