@@ -73,26 +73,14 @@ func (r *CollectorReconciler) Reconcile(ctx context.Context, req ctrl.Request) (
73
73
collectorManager .Info (fmt .Sprintf ("reconciling collector: %q" , collector .Name ))
74
74
75
75
err := handleCollectorCreation (ctx , collectorManager , collector , r .Scheme )
76
- switch {
77
- case errors .Is (err , manager .ErrTenantFailed ):
78
- return ctrl.Result {RequeueAfter : requeueDelayOnFailedTenant }, err
79
-
80
- case errors .Is (err , manager .ErrNoResources ):
81
- return ctrl.Result {}, nil
82
-
83
- case err != nil :
84
- collector .Status .State = state .StateFailed
85
- if updateErr := r .updateStatus (ctx , collector ); updateErr != nil {
86
- collectorManager .Error (errors .WithStack (updateErr ), "failed updating collector status" )
87
- return ctrl.Result {}, errors .Append (err , updateErr )
88
- }
89
- return ctrl.Result {}, err
76
+ if err != nil {
77
+ return r .handleCollectorReconcileError (ctx , & collectorManager .BaseManager , collector , err )
90
78
}
91
79
80
+ collector .Status .State = state .StateReady
92
81
if ! reflect .DeepEqual (originalCollectorStatus , collector .Status ) {
93
82
collectorManager .Info ("collector status changed" )
94
-
95
- if updateErr := r .updateStatus (ctx , collector ); updateErr != nil {
83
+ if updateErr := r .Status ().Update (ctx , collector ); updateErr != nil {
96
84
collectorManager .Error (errors .WithStack (updateErr ), "failed updating collector status" )
97
85
return ctrl.Result {}, updateErr
98
86
}
@@ -143,19 +131,38 @@ func (r *CollectorReconciler) SetupWithManager(mgr ctrl.Manager) error {
143
131
Complete (r )
144
132
}
145
133
146
- func (r * CollectorReconciler ) updateStatus (ctx context.Context , obj client.Object ) error {
147
- return r .Status ().Update (ctx , obj )
134
+ // handleTenantReconcileError handles errors that occur during reconciliation steps
135
+ func (r * CollectorReconciler ) handleCollectorReconcileError (ctx context.Context , baseManager * manager.BaseManager , collector * v1alpha1.Collector , err error ) (ctrl.Result , error ) {
136
+ switch {
137
+ case errors .Is (err , manager .ErrTenantFailed ): // This error indicates that the tenant is in a failed state, and we should requeue after a delay.
138
+ return ctrl.Result {RequeueAfter : requeueDelayOnFailedTenant }, err
139
+
140
+ case errors .Is (err , manager .ErrNoResources ): // This error indicates that there are no resources to reconcile, which is not a failure state.
141
+ return ctrl.Result {}, nil
142
+ }
143
+
144
+ collector .Status .Problems = append (collector .Status .Problems , err .Error ())
145
+ collector .Status .ProblemsCount = len (collector .Status .Problems )
146
+ collector .Status .State = state .StateFailed
147
+
148
+ baseManager .Error (errors .WithStack (err ), "failed reconciling collector" , "collector" , collector .Name )
149
+ if updateErr := r .Status ().Update (ctx , collector ); updateErr != nil {
150
+ baseManager .Error (errors .WithStack (updateErr ), "failed updating collector status" , "collector" , collector .Name )
151
+ return ctrl.Result {}, errors .Append (err , updateErr )
152
+ }
153
+
154
+ return ctrl.Result {}, err
148
155
}
149
156
150
157
func handleCollectorCreation (ctx context.Context , collectorManager * manager.CollectorManager , collector * v1alpha1.Collector , scheme * runtime.Scheme ) error {
151
158
collectorConfigInput , err := collectorManager .BuildConfigInputForCollector (ctx , collector )
152
159
if err != nil {
153
- return err
160
+ return fmt . Errorf ( "failed to build config input for collector %s: %w" , collector . Name , err )
154
161
}
155
162
156
163
if err := collectorManager .ValidateConfigInput (collectorConfigInput ); err != nil {
157
164
if errors .Is (err , manager .ErrNoResources ) {
158
- collectorManager .Info (err . Error () )
165
+ collectorManager .Info ("no resources to reconcile for collector, skipping creation" )
159
166
}
160
167
collectorManager .Error (errors .WithStack (err ), "invalid otel config input" )
161
168
@@ -192,7 +199,6 @@ func handleCollectorCreation(ctx context.Context, collectorManager *manager.Coll
192
199
tenantNames = append (tenantNames , tenant .Name )
193
200
}
194
201
collector .Status .Tenants = utils .NormalizeStringSlice (tenantNames )
195
- collector .Status .State = state .StateReady
196
202
197
203
return nil
198
204
}
0 commit comments