@@ -73,26 +73,14 @@ func (r *CollectorReconciler) Reconcile(ctx context.Context, req ctrl.Request) (
7373 collectorManager .Info (fmt .Sprintf ("reconciling collector: %q" , collector .Name ))
7474
7575 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 )
9078 }
9179
80+ collector .Status .State = state .StateReady
9281 if ! reflect .DeepEqual (originalCollectorStatus , collector .Status ) {
9382 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 {
9684 collectorManager .Error (errors .WithStack (updateErr ), "failed updating collector status" )
9785 return ctrl.Result {}, updateErr
9886 }
@@ -143,19 +131,38 @@ func (r *CollectorReconciler) SetupWithManager(mgr ctrl.Manager) error {
143131 Complete (r )
144132}
145133
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
148155}
149156
150157func handleCollectorCreation (ctx context.Context , collectorManager * manager.CollectorManager , collector * v1alpha1.Collector , scheme * runtime.Scheme ) error {
151158 collectorConfigInput , err := collectorManager .BuildConfigInputForCollector (ctx , collector )
152159 if err != nil {
153- return err
160+ return fmt . Errorf ( "failed to build config input for collector %s: %w" , collector . Name , err )
154161 }
155162
156163 if err := collectorManager .ValidateConfigInput (collectorConfigInput ); err != nil {
157164 if errors .Is (err , manager .ErrNoResources ) {
158- collectorManager .Info (err . Error () )
165+ collectorManager .Info ("no resources to reconcile for collector, skipping creation" )
159166 }
160167 collectorManager .Error (errors .WithStack (err ), "invalid otel config input" )
161168
@@ -192,7 +199,6 @@ func handleCollectorCreation(ctx context.Context, collectorManager *manager.Coll
192199 tenantNames = append (tenantNames , tenant .Name )
193200 }
194201 collector .Status .Tenants = utils .NormalizeStringSlice (tenantNames )
195- collector .Status .State = state .StateReady
196202
197203 return nil
198204}
0 commit comments