Skip to content

Commit 4da69ec

Browse files
committed
feat: collector problem enhancements
Signed-off-by: Bence Csati <[email protected]>
1 parent 93ebe3a commit 4da69ec

File tree

2 files changed

+27
-27
lines changed

2 files changed

+27
-27
lines changed

controllers/telemetry/collector_controller.go

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -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

150157
func 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
}

pkg/resources/otel_conf_gen/otel_conf_gen.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -287,17 +287,11 @@ func (cfgInput *OtelColConfigInput) generateTelemetry() map[string]any {
287287

288288
func (cfgInput *OtelColConfigInput) AssembleConfig(ctx context.Context) (otelv1beta1.Config, map[string]string) {
289289
exporters := cfgInput.generateExporters(ctx)
290-
291290
processors := cfgInput.generateProcessors()
292-
293291
extensions, extensionNames := cfgInput.generateExtensions()
294-
295292
receivers := cfgInput.generateReceivers()
296-
297293
connectors := cfgInput.generateConnectors()
298-
299294
pipelines := cfgInput.generateNamedPipelines()
300-
301295
telemetry := cfgInput.generateTelemetry()
302296

303297
if _, ok := processors["memory_limiter"]; ok {

0 commit comments

Comments
 (0)