diff --git a/CHANGELOG.md b/CHANGELOG.md index b8539089..44ead62a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.6.1] - 2020-09-16 + +### Changed + +- Delete the reconcile time metric for orphaned `PrometheusRule` in advance, + regardless of the cleanup error status. + +### Fixed + +- Use a single loop for controller worker. + ## [0.6.0] - 2020-08-26 ### Added @@ -63,7 +74,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Initial release. -[unreleased]: https://github.com/sapcc/absent-metrics-operator/compare/v0.6.0...HEAD +[unreleased]: https://github.com/sapcc/absent-metrics-operator/compare/v0.6.1...HEAD +[0.6.1]: https://github.com/sapcc/absent-metrics-operator/compare/v0.6.0...v0.6.1 [0.6.0]: https://github.com/sapcc/absent-metrics-operator/compare/v0.5.2...v0.6.0 [0.5.2]: https://github.com/sapcc/absent-metrics-operator/compare/v0.5.1...v0.5.2 [0.5.1]: https://github.com/sapcc/absent-metrics-operator/compare/v0.5.0...v0.5.1 diff --git a/internal/controller/absent_prometheusrule.go b/internal/controller/absent_prometheusrule.go index 75d84612..82333e52 100644 --- a/internal/controller/absent_prometheusrule.go +++ b/internal/controller/absent_prometheusrule.go @@ -149,6 +149,7 @@ OuterLoop: // This RuleGroup should be carried over as is. new = append(new, oldG) } + // Add the pending RuleGroups. for _, g := range absentAlertRuleGroups { if !updated[g.Name] { diff --git a/internal/controller/cleanup.go b/internal/controller/cleanup.go index 54ac268a..0619425a 100644 --- a/internal/controller/cleanup.go +++ b/internal/controller/cleanup.go @@ -84,10 +84,10 @@ func (c *Controller) cleanUpOrphanedAbsentAlertsCluster() error { aPR := &absentPrometheusRule{PrometheusRule: pr} for n := range cleanup { + c.metrics.SuccessfulPrometheusRuleReconcileTime.DeleteLabelValues(namespace, n) if err := c.cleanUpOrphanedAbsentAlerts(n, aPR); err != nil { return err } - c.metrics.SuccessfulPrometheusRuleReconcileTime.DeleteLabelValues(namespace, n) } } } diff --git a/internal/controller/controller.go b/internal/controller/controller.go index ff97de53..eb7c9ca9 100644 --- a/internal/controller/controller.go +++ b/internal/controller/controller.go @@ -235,27 +235,21 @@ func (c *Controller) runWorker() { defer reconcileT.Stop() maintenanceT := time.NewTicker(maintenancePeriod) defer maintenanceT.Stop() - done := make(chan struct{}) - go func() { - for { - select { - case <-done: + for { + select { + case <-reconcileT.C: + c.enqueueAllObjects() + case <-maintenanceT.C: + if err := c.cleanUpOrphanedAbsentAlertsCluster(); err != nil { + c.logger.ErrorWithBackoff("msg", "could not cleanup orphaned absent alerts from cluster", + "err", err) + } + default: + if ok := c.processNextWorkItem(); !ok { return - case <-reconcileT.C: - c.enqueueAllObjects() - case <-maintenanceT.C: - if err := c.cleanUpOrphanedAbsentAlertsCluster(); err != nil { - c.logger.ErrorWithBackoff("msg", "could not cleanup orphaned absent alerts from cluster", - "err", err) - } } } - }() - - for c.processNextWorkItem() { } - - done <- struct{}{} } // processNextWorkItem will read a single work item off the workqueue and @@ -315,10 +309,8 @@ func (c *Controller) syncHandler(key string) error { // The resource may no longer exist, in which case we clean up any // orphaned absent alerts. c.logger.Debug("msg", "PrometheusRule no longer exists", "key", key) + c.metrics.SuccessfulPrometheusRuleReconcileTime.DeleteLabelValues(namespace, name) err = c.cleanUpOrphanedAbsentAlertsNamespace(name, namespace) - if err == nil { - c.metrics.SuccessfulPrometheusRuleReconcileTime.DeleteLabelValues(namespace, name) - } default: // Requeue object for later processing. return err