@@ -168,7 +168,20 @@ func (c *Controller) GarbageCollectRefs(ctx context.Context) error {
168168 return err
169169 }
170170
171+ storedRefsLen := len (storedRefs )
172+ var i int
171173 for _ , ref := range storedRefs {
174+ i ++
175+ log .WithFields (log.Fields {"progress" : i , "total" : storedRefsLen }).Debug ("ongoing 'refs' garbage collection" )
176+ if c .Store .HasRefExpired (ctx , ref .Key ()) {
177+ if err = deleteRef (ctx , c .Store , ref , "expired" ); err != nil {
178+ return err
179+ }
180+
181+ continue
182+ }
183+
184+ // Check Project Still Exist
172185 projectExists , err := c .Store .ProjectExists (ctx , ref .Project .Key ())
173186 if err != nil {
174187 return err
@@ -275,23 +288,28 @@ func (c *Controller) GarbageCollectMetrics(ctx context.Context) error {
275288 return err
276289 }
277290
291+ storedMetricsLen := len (storedMetrics )
292+ var i int
278293 for k , m := range storedMetrics {
294+ i ++
295+ log .WithFields (log.Fields {"progress" : i , "total" : storedMetricsLen }).Debug ("ongoing 'metrics' garbage collection" )
296+ if c .Store .HasMetricExpired (ctx , m .Key ()) {
297+ if err = deleteMetric (ctx , c .Store , m , "expired" ); err != nil {
298+ return err
299+ }
300+
301+ continue
302+ }
279303 // In order to save some memory space we chose to have to recompose
280304 // the Ref the metric belongs to
281305 metricLabelProject , metricLabelProjectExists := m .Labels ["project" ]
282306 metricLabelRef , metricLabelRefExists := m .Labels ["ref" ]
283307 metricLabelEnvironment , metricLabelEnvironmentExists := m .Labels ["environment" ]
284308
285309 if ! metricLabelProjectExists || (! metricLabelRefExists && ! metricLabelEnvironmentExists ) {
286- if err = c .Store . DelMetric ( ctx , k ); err != nil {
310+ if err = deleteMetric ( ctx , c .Store , m , "project-or-ref-and-environment-label-undefined" ); err != nil {
287311 return err
288312 }
289-
290- log .WithFields (log.Fields {
291- "metric-kind" : m .Kind ,
292- "metric-labels" : m .Labels ,
293- "reason" : "project-or-ref-and-environment-label-undefined" ,
294- }).Info ("deleted metric from the store" )
295313 }
296314
297315 if metricLabelRefExists && ! metricLabelEnvironmentExists {
@@ -374,33 +392,21 @@ func (c *Controller) GarbageCollectMetrics(ctx context.Context) error {
374392
375393 // If the ref does not exist anymore, delete the metric
376394 if ! envExists {
377- if err = c .Store . DelMetric ( ctx , k ); err != nil {
395+ if err = deleteMetric ( ctx , c .Store , m , "non-existent-environment" ); err != nil {
378396 return err
379397 }
380398
381- log .WithFields (log.Fields {
382- "metric-kind" : m .Kind ,
383- "metric-labels" : m .Labels ,
384- "reason" : "non-existent-environment" ,
385- }).Info ("deleted metric from the store" )
386-
387399 continue
388400 }
389401
390402 // Check if 'output sparse statuses metrics' has been enabled
391403 switch m .Kind {
392404 case schemas .MetricKindEnvironmentDeploymentStatus :
393405 if env .OutputSparseStatusMetrics && m .Value != 1 {
394- if err = c .Store . DelMetric ( ctx , k ); err != nil {
406+ if err = deleteMetric ( ctx , c .Store , m , "output-sparse-metrics-enabled-on-environment" ); err != nil {
395407 return err
396408 }
397409
398- log .WithFields (log.Fields {
399- "metric-kind" : m .Kind ,
400- "metric-labels" : m .Labels ,
401- "reason" : "output-sparse-metrics-enabled-on-environment" ,
402- }).Info ("deleted metric from the store" )
403-
404410 continue
405411 }
406412 }
@@ -438,3 +444,17 @@ func deleteRef(ctx context.Context, s store.Store, ref schemas.Ref, reason strin
438444
439445 return
440446}
447+
448+ func deleteMetric (ctx context.Context , s store.Store , m schemas.Metric , reason string ) (err error ) {
449+ if err = s .DelMetric (ctx , m .Key ()); err != nil {
450+ return
451+ }
452+
453+ log .WithFields (log.Fields {
454+ "metric-kind" : m .Kind ,
455+ "metric-labels" : m .Labels ,
456+ "reason" : reason ,
457+ }).Info ("deleted metric from the store" )
458+
459+ return
460+ }
0 commit comments