kubernetes/kubernetes · #140447

Rename endpoint_slice_controller_changes to add _total suffix

cipheraxat · merged Aug 31, 20266 files · 63 + / 2
hack/tools/instrumentation/documentation/documentation-list.yaml11 + / 0
@@ -2772,6 +2772,17 @@   - component: kube-scheduler     endpoint: /metrics - name: changes+  subsystem: endpoint_slice_controller+  help: Number of EndpointSlice changes. Deprecated in favor of endpoint_slice_controller_changes_total.+  type: Counter+  deprecatedVersion: 1.38.0+  stabilityLevel: ALPHA+  labels:+  - operation+  componentEndpoints:+  - component: kube-controller-manager+    endpoint: /metrics+- name: changes_total   subsystem: endpoint_slice_controller   help: Number of EndpointSlice changes   type: Counter
hack/tools/instrumentation/documentation/documentation.md7 + / 0
@@ -1983,6 +1983,13 @@ Alpha metrics do not have any API guarantees. These metrics must be used at your 	<ul> 	<li><label class="metric_detail">Stability Level:</label><span class="metric_stability_level">ALPHA</span></li> 	<li data-type="counter"><label class="metric_detail">Type:</label> <span class="metric_type">Counter</span></li>+	<li class="metric_labels_varying"><label class="metric_detail">Labels:</label><span class="metric_label">operation</span></li><li class="metric_component_endpoints"><label class="metric_detail">Components:</label><ul><li>kube-controller-manager (/metrics)</li></ul></li><li class="metric_deprecated_version"><label class="metric_detail">Deprecated Versions:</label><span>1.38.0</span></li></ul>+	</div><div class="metric" data-stability="alpha">+	<div class="metric_name">endpoint_slice_controller_changes_total</div>+	<div class="metric_help">Number of EndpointSlice changes</div>+	<ul>+	<li><label class="metric_detail">Stability Level:</label><span class="metric_stability_level">ALPHA</span></li>+	<li data-type="counter"><label class="metric_detail">Type:</label> <span class="metric_type">Counter</span></li> 	<li class="metric_labels_varying"><label class="metric_detail">Labels:</label><span class="metric_label">operation</span></li><li class="metric_component_endpoints"><label class="metric_detail">Components:</label><ul><li>kube-controller-manager (/metrics)</li></ul></li></ul> 	</div><div class="metric" data-stability="alpha"> 	<div class="metric_name">endpoint_slice_controller_endpointslices_changed_per_sync</div>
staging/src/k8s.io/component-base/metrics/testutil/promlint.go1 + / 1
@@ -57,7 +57,7 @@ var exceptionMetrics = []string{  	// attach-detach controller 	"attach_detach_controller_attachdetach_controller_forced_detaches", // counter metrics should have "_total" suffix-	"endpoint_slice_controller_changes",                                // counter metrics should have "_total" suffix+	"endpoint_slice_controller_changes",                                // counter metrics should have "_total" suffix; renamed to endpoint_slice_controller_changes_total 	"endpoint_slice_controller_syncs",                                  // counter metrics should have "_total" suffix 	"endpoint_slice_mirroring_controller_changes",                      // counter metrics should have "_total" suffix 
staging/src/k8s.io/endpointslice/metrics/metrics.go17 + / 1
@@ -84,10 +84,25 @@ var ( 	)  	// EndpointSliceChanges tracks the number of changes to Endpoint Slices.+	//+	// Deprecated: use EndpointSliceChangesTotal. The old name lacks the+	// conventional _total suffix required for counters. 	EndpointSliceChanges = metrics.NewCounterVec(+		&metrics.CounterOpts{+			Subsystem:         EndpointSliceSubsystem,+			Name:              "changes",+			Help:              "Number of EndpointSlice changes. Deprecated in favor of endpoint_slice_controller_changes_total.",+			StabilityLevel:    metrics.ALPHA,+			DeprecatedVersion: "1.38.0",+		},+		[]string{"operation"},+	)++	// EndpointSliceChangesTotal tracks the number of changes to Endpoint Slices.+	EndpointSliceChangesTotal = metrics.NewCounterVec( 		&metrics.CounterOpts{ 			Subsystem:      EndpointSliceSubsystem,-			Name:           "changes",+			Name:           "changes_total", 			Help:           "Number of EndpointSlice changes", 			StabilityLevel: metrics.ALPHA, 		},@@ -144,6 +159,7 @@ func RegisterMetrics() { 		legacyregistry.MustRegister(NumEndpointSlices) 		legacyregistry.MustRegister(DesiredEndpointSlices) 		legacyregistry.MustRegister(EndpointSliceChanges)+		legacyregistry.MustRegister(EndpointSliceChangesTotal) 		legacyregistry.MustRegister(EndpointSlicesChangedPerSync) 		legacyregistry.MustRegister(EndpointSliceSyncs) 		legacyregistry.MustRegister(ServicesCountByTrafficDistribution)
staging/src/k8s.io/endpointslice/reconciler.go3 + / 0
@@ -165,6 +165,7 @@ func (r *Reconciler) deleteEndpointSlice(service *corev1.Service, endpointSlice  	r.endpointSliceTracker.ExpectDeletion(endpointSlice) 	metrics.EndpointSliceChanges.WithLabelValues("delete").Inc()+	metrics.EndpointSliceChangesTotal.WithLabelValues("delete").Inc() 	return nil } @@ -456,6 +457,7 @@ func (r *Reconciler) finalize( 			} 			r.endpointSliceTracker.Update(createdSlice) 			metrics.EndpointSliceChanges.WithLabelValues("create").Inc()+			metrics.EndpointSliceChangesTotal.WithLabelValues("create").Inc() 		} 	} @@ -467,6 +469,7 @@ func (r *Reconciler) finalize( 		} 		r.endpointSliceTracker.Update(updatedSlice) 		metrics.EndpointSliceChanges.WithLabelValues("update").Inc()+		metrics.EndpointSliceChangesTotal.WithLabelValues("update").Inc() 	}  	for _, endpointSlice := range slicesToDelete {
staging/src/k8s.io/endpointslice/reconciler_test.go24 + / 0
@@ -1210,13 +1210,21 @@ func TestReconcilerDeleteEndpointSlice(t *testing.T) { 					} 					expectTrackedGeneration(t, r.endpointSliceTracker, cachedSlice, expectedGeneration) +					//nolint:staticcheck // intentionally asserting the deprecated metric during the deprecation period 					deleted, err := testutil.GetCounterMetricValue(metrics.EndpointSliceChanges.WithLabelValues("delete")) 					if err != nil { 						t.Fatalf("Failed to get EndpointSlice deletion metric: %v", err) 					} 					if deleted != testCase.wantDeleteMetric { 						t.Errorf("Expected EndpointSlice deletion metric %v, got %v", testCase.wantDeleteMetric, deleted) 					}+					deletedTotal, err := testutil.GetCounterMetricValue(metrics.EndpointSliceChangesTotal.WithLabelValues("delete"))+					if err != nil {+						t.Fatalf("Failed to get EndpointSlice deletion total metric: %v", err)+					}+					if deletedTotal != testCase.wantDeleteMetric {+						t.Errorf("Expected EndpointSlice deletion total metric %v, got %v", testCase.wantDeleteMetric, deletedTotal)+					} 					if deletePath.name == "finalize" { 						changed, err := testutil.GetHistogramMetricValue(metrics.EndpointSlicesChangedPerSync.WithLabelValues("Disabled", "")) 						if err != nil {@@ -2692,18 +2700,33 @@ func expectMetrics(t *testing.T, em expectedMetrics) { 	if actualCreated != float64(em.numCreated) { 		t.Errorf("Expected endpointSliceChangesCreated to be %d, got %v", em.numCreated, actualCreated) 	}+	actualCreatedTotal, err := testutil.GetCounterMetricValue(metrics.EndpointSliceChangesTotal.WithLabelValues("create"))+	handleErr(t, err, "endpointSliceChangesTotalCreated")+	if actualCreatedTotal != float64(em.numCreated) {+		t.Errorf("Expected endpointSliceChangesTotalCreated to be %d, got %v", em.numCreated, actualCreatedTotal)+	}  	actualUpdated, err := testutil.GetCounterMetricValue(metrics.EndpointSliceChanges.WithLabelValues("update")) 	handleErr(t, err, "endpointSliceChangesUpdated") 	if actualUpdated != float64(em.numUpdated) { 		t.Errorf("Expected endpointSliceChangesUpdated to be %d, got %v", em.numUpdated, actualUpdated) 	}+	actualUpdatedTotal, err := testutil.GetCounterMetricValue(metrics.EndpointSliceChangesTotal.WithLabelValues("update"))+	handleErr(t, err, "endpointSliceChangesTotalUpdated")+	if actualUpdatedTotal != float64(em.numUpdated) {+		t.Errorf("Expected endpointSliceChangesTotalUpdated to be %d, got %v", em.numUpdated, actualUpdatedTotal)+	}  	actualDeleted, err := testutil.GetCounterMetricValue(metrics.EndpointSliceChanges.WithLabelValues("delete")) 	handleErr(t, err, "desiredEndpointSlices") 	if actualDeleted != float64(em.numDeleted) { 		t.Errorf("Expected endpointSliceChangesDeleted to be %d, got %v", em.numDeleted, actualDeleted) 	}+	actualDeletedTotal, err := testutil.GetCounterMetricValue(metrics.EndpointSliceChangesTotal.WithLabelValues("delete"))+	handleErr(t, err, "endpointSliceChangesTotalDeleted")+	if actualDeletedTotal != float64(em.numDeleted) {+		t.Errorf("Expected endpointSliceChangesTotalDeleted to be %d, got %v", em.numDeleted, actualDeletedTotal)+	}  	actualSlicesChangedPerSync, err := testutil.GetHistogramMetricValue(metrics.EndpointSlicesChangedPerSync.WithLabelValues("Disabled", "")) 	handleErr(t, err, "slicesChangedPerSync")@@ -2771,6 +2794,7 @@ func resetMetrics() { 	metrics.EndpointsAddedPerSync.Reset() 	metrics.EndpointsRemovedPerSync.Reset() 	metrics.EndpointSliceChanges.Reset()+	metrics.EndpointSliceChangesTotal.Reset() 	metrics.EndpointSlicesChangedPerSync.Reset() 	metrics.EndpointSliceSyncs.Reset() 	metrics.ServicesCountByTrafficDistribution.Reset()