Skip to content

Commit a520624

Browse files
committed
feat: collector problem enhancements
Signed-off-by: Bence Csati <bence.csati@axoflow.com>
1 parent 8624d7a commit a520624

File tree

3 files changed

+27
-32
lines changed

3 files changed

+27
-32
lines changed

controllers/telemetry/collector_controller.go

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -73,26 +73,15 @@ 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
81+
collector.ClearProblems()
9282
if !reflect.DeepEqual(originalCollectorStatus, collector.Status) {
9383
collectorManager.Info("collector status changed")
94-
95-
if updateErr := r.updateStatus(ctx, collector); updateErr != nil {
84+
if updateErr := r.Status().Update(ctx, collector); updateErr != nil {
9685
collectorManager.Error(errors.WithStack(updateErr), "failed updating collector status")
9786
return ctrl.Result{}, updateErr
9887
}
@@ -143,19 +132,37 @@ func (r *CollectorReconciler) SetupWithManager(mgr ctrl.Manager) error {
143132
Complete(r)
144133
}
145134

146-
func (r *CollectorReconciler) updateStatus(ctx context.Context, obj client.Object) error {
147-
return r.Status().Update(ctx, obj)
135+
// handleTenantReconcileError handles errors that occur during reconciliation steps
136+
func (r *CollectorReconciler) handleCollectorReconcileError(ctx context.Context, baseManager *manager.BaseManager, collector *v1alpha1.Collector, err error) (ctrl.Result, error) {
137+
switch {
138+
case errors.Is(err, manager.ErrTenantFailed): // This error indicates that the tenant is in a failed state, and we should requeue after a delay.
139+
return ctrl.Result{RequeueAfter: requeueDelayOnFailedTenant}, nil
140+
141+
case errors.Is(err, manager.ErrNoResources): // This error indicates that there are no resources to reconcile, which is not a failure state.
142+
return ctrl.Result{}, nil
143+
}
144+
145+
collector.AddProblem(err.Error())
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/manager/tenant_resource_manager.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@ func (t *TenantResourceManager) GetResourceOwnedByTenant(ctx context.Context, re
6565
return nil, nil, fmt.Errorf("failed to get namespaces: %w", err)
6666
}
6767

68-
// Create the appropriate list type based on the resource type
6968
var resourceList model.ResourceList
7069
switch resource.(type) {
7170
case *v1alpha1.Subscription:
@@ -76,7 +75,6 @@ func (t *TenantResourceManager) GetResourceOwnedByTenant(ctx context.Context, re
7675
return nil, nil, fmt.Errorf("unsupported resource type: %T", resource)
7776
}
7877

79-
// Collect resources from all namespaces
8078
var allResources []model.ResourceOwnedByTenant
8179
for _, ns := range namespaces {
8280
listOpts := &client.ListOptions{
@@ -93,7 +91,6 @@ func (t *TenantResourceManager) GetResourceOwnedByTenant(ctx context.Context, re
9391
allResources = append(allResources, resourceList.GetItems()...)
9492
}
9593

96-
// Categorize resources
9794
for _, res := range allResources {
9895
currentTenant := res.GetTenant()
9996
if currentTenant != "" && currentTenant != tenant.Name {
@@ -139,8 +136,6 @@ func (t *TenantResourceManager) UpdateResourcesForTenant(ctx context.Context, te
139136
} else {
140137
updatedResources = append(updatedResources, res)
141138
}
142-
143-
res.SetState(state.StateReady)
144139
}
145140

146141
return

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)