diff --git a/xds/internal/balancer/cdsbalancer/aggregate_cluster_test.go b/xds/internal/balancer/cdsbalancer/aggregate_cluster_test.go index c95f0ff63..a37b1609f 100644 --- a/xds/internal/balancer/cdsbalancer/aggregate_cluster_test.go +++ b/xds/internal/balancer/cdsbalancer/aggregate_cluster_test.go @@ -33,6 +33,7 @@ import ( "google.golang.org/grpc/internal/testutils/xds/e2e" "google.golang.org/grpc/serviceconfig" "google.golang.org/grpc/status" + "google.golang.org/grpc/xds/internal" "google.golang.org/grpc/xds/internal/balancer/clusterresolver" v3clusterpb "github.com/envoyproxy/go-control-plane/envoy/config/cluster/v3" @@ -85,6 +86,7 @@ func (s) TestAggregateClusterSuccess_LeafNode(t *testing.T) { Type: clusterresolver.DiscoveryMechanismTypeEDS, EDSServiceName: serviceName, OutlierDetection: json.RawMessage(`{}`), + TelemetryLabels: internal.UnknownCSMLabels, }}, XDSLBPolicy: json.RawMessage(`[{"xds_wrr_locality_experimental": {"childPolicy": [{"round_robin": {}}]}}]`), }, @@ -94,6 +96,7 @@ func (s) TestAggregateClusterSuccess_LeafNode(t *testing.T) { Type: clusterresolver.DiscoveryMechanismTypeEDS, EDSServiceName: serviceName + "-new", OutlierDetection: json.RawMessage(`{}`), + TelemetryLabels: internal.UnknownCSMLabels, }}, XDSLBPolicy: json.RawMessage(`[{"xds_wrr_locality_experimental": {"childPolicy": [{"round_robin": {}}]}}]`), }, @@ -108,6 +111,7 @@ func (s) TestAggregateClusterSuccess_LeafNode(t *testing.T) { Type: clusterresolver.DiscoveryMechanismTypeLogicalDNS, DNSHostname: "dns_host:8080", OutlierDetection: json.RawMessage(`{}`), + TelemetryLabels: internal.UnknownCSMLabels, }}, XDSLBPolicy: json.RawMessage(`[{"xds_wrr_locality_experimental": {"childPolicy": [{"round_robin": {}}]}}]`), }, @@ -117,6 +121,7 @@ func (s) TestAggregateClusterSuccess_LeafNode(t *testing.T) { Type: clusterresolver.DiscoveryMechanismTypeLogicalDNS, DNSHostname: "dns_host_new:8080", OutlierDetection: json.RawMessage(`{}`), + TelemetryLabels: internal.UnknownCSMLabels, }}, XDSLBPolicy: json.RawMessage(`[{"xds_wrr_locality_experimental": {"childPolicy": [{"round_robin": {}}]}}]`), }, @@ -211,12 +216,14 @@ func (s) TestAggregateClusterSuccess_ThenUpdateChildClusters(t *testing.T) { Type: clusterresolver.DiscoveryMechanismTypeEDS, EDSServiceName: serviceName, OutlierDetection: json.RawMessage(`{}`), + TelemetryLabels: internal.UnknownCSMLabels, }, { Cluster: dnsClusterName, Type: clusterresolver.DiscoveryMechanismTypeLogicalDNS, DNSHostname: fmt.Sprintf("%s:%d", dnsHostName, dnsPort), OutlierDetection: json.RawMessage(`{}`), + TelemetryLabels: internal.UnknownCSMLabels, }, }, XDSLBPolicy: json.RawMessage(`[{"xds_wrr_locality_experimental": {"childPolicy": [{"round_robin": {}}]}}]`), @@ -247,12 +254,14 @@ func (s) TestAggregateClusterSuccess_ThenUpdateChildClusters(t *testing.T) { Type: clusterresolver.DiscoveryMechanismTypeEDS, EDSServiceName: serviceName, OutlierDetection: json.RawMessage(`{}`), + TelemetryLabels: internal.UnknownCSMLabels, }, { Cluster: dnsClusterNameNew, Type: clusterresolver.DiscoveryMechanismTypeLogicalDNS, DNSHostname: fmt.Sprintf("%s:%d", dnsHostNameNew, dnsPort), OutlierDetection: json.RawMessage(`{}`), + TelemetryLabels: internal.UnknownCSMLabels, }, }, XDSLBPolicy: json.RawMessage(`[{"xds_wrr_locality_experimental": {"childPolicy": [{"round_robin": {}}]}}]`), @@ -298,12 +307,14 @@ func (s) TestAggregateClusterSuccess_ThenChangeRootToEDS(t *testing.T) { Type: clusterresolver.DiscoveryMechanismTypeEDS, EDSServiceName: serviceName, OutlierDetection: json.RawMessage(`{}`), + TelemetryLabels: internal.UnknownCSMLabels, }, { Cluster: dnsClusterName, Type: clusterresolver.DiscoveryMechanismTypeLogicalDNS, DNSHostname: fmt.Sprintf("%s:%d", dnsHostName, dnsPort), OutlierDetection: json.RawMessage(`{}`), + TelemetryLabels: internal.UnknownCSMLabels, }, }, XDSLBPolicy: json.RawMessage(`[{"xds_wrr_locality_experimental": {"childPolicy": [{"round_robin": {}}]}}]`), @@ -329,6 +340,7 @@ func (s) TestAggregateClusterSuccess_ThenChangeRootToEDS(t *testing.T) { Type: clusterresolver.DiscoveryMechanismTypeEDS, EDSServiceName: serviceName, OutlierDetection: json.RawMessage(`{}`), + TelemetryLabels: internal.UnknownCSMLabels, }}, XDSLBPolicy: json.RawMessage(`[{"xds_wrr_locality_experimental": {"childPolicy": [{"round_robin": {}}]}}]`), } @@ -363,6 +375,7 @@ func (s) TestAggregatedClusterSuccess_SwitchBetweenLeafAndAggregate(t *testing.T Type: clusterresolver.DiscoveryMechanismTypeEDS, EDSServiceName: serviceName, OutlierDetection: json.RawMessage(`{}`), + TelemetryLabels: internal.UnknownCSMLabels, }}, XDSLBPolicy: json.RawMessage(`[{"xds_wrr_locality_experimental": {"childPolicy": [{"round_robin": {}}]}}]`), } @@ -391,12 +404,14 @@ func (s) TestAggregatedClusterSuccess_SwitchBetweenLeafAndAggregate(t *testing.T Type: clusterresolver.DiscoveryMechanismTypeEDS, EDSServiceName: serviceName, OutlierDetection: json.RawMessage(`{}`), + TelemetryLabels: internal.UnknownCSMLabels, }, { Cluster: dnsClusterName, Type: clusterresolver.DiscoveryMechanismTypeLogicalDNS, DNSHostname: fmt.Sprintf("%s:%d", dnsHostName, dnsPort), OutlierDetection: json.RawMessage(`{}`), + TelemetryLabels: internal.UnknownCSMLabels, }, }, XDSLBPolicy: json.RawMessage(`[{"xds_wrr_locality_experimental": {"childPolicy": [{"round_robin": {}}]}}]`), @@ -420,6 +435,7 @@ func (s) TestAggregatedClusterSuccess_SwitchBetweenLeafAndAggregate(t *testing.T Type: clusterresolver.DiscoveryMechanismTypeEDS, EDSServiceName: serviceName, OutlierDetection: json.RawMessage(`{}`), + TelemetryLabels: internal.UnknownCSMLabels, }}, XDSLBPolicy: json.RawMessage(`[{"xds_wrr_locality_experimental": {"childPolicy": [{"round_robin": {}}]}}]`), } @@ -572,6 +588,7 @@ func (s) TestAggregatedClusterSuccess_DiamondDependency(t *testing.T) { Type: clusterresolver.DiscoveryMechanismTypeEDS, EDSServiceName: serviceName, OutlierDetection: json.RawMessage(`{}`), + TelemetryLabels: internal.UnknownCSMLabels, }}, XDSLBPolicy: json.RawMessage(`[{"xds_wrr_locality_experimental": {"childPolicy": [{"round_robin": {}}]}}]`), } @@ -639,12 +656,14 @@ func (s) TestAggregatedClusterSuccess_IgnoreDups(t *testing.T) { Type: clusterresolver.DiscoveryMechanismTypeEDS, EDSServiceName: serviceName, OutlierDetection: json.RawMessage(`{}`), + TelemetryLabels: internal.UnknownCSMLabels, }, { Cluster: clusterNameD, Type: clusterresolver.DiscoveryMechanismTypeEDS, EDSServiceName: serviceName, OutlierDetection: json.RawMessage(`{}`), + TelemetryLabels: internal.UnknownCSMLabels, }, }, XDSLBPolicy: json.RawMessage(`[{"xds_wrr_locality_experimental": {"childPolicy": [{"round_robin": {}}]}}]`), @@ -727,6 +746,7 @@ func (s) TestAggregatedCluster_NodeChildOfItself(t *testing.T) { Type: clusterresolver.DiscoveryMechanismTypeEDS, EDSServiceName: serviceName, OutlierDetection: json.RawMessage(`{}`), + TelemetryLabels: internal.UnknownCSMLabels, }}, XDSLBPolicy: json.RawMessage(`[{"xds_wrr_locality_experimental": {"childPolicy": [{"round_robin": {}}]}}]`), } @@ -832,6 +852,7 @@ func (s) TestAggregatedCluster_CycleWithLeafNode(t *testing.T) { Type: clusterresolver.DiscoveryMechanismTypeEDS, EDSServiceName: serviceName, OutlierDetection: json.RawMessage(`{}`), + TelemetryLabels: internal.UnknownCSMLabels, }}, XDSLBPolicy: json.RawMessage(`[{"xds_wrr_locality_experimental": {"childPolicy": [{"round_robin": {}}]}}]`), } diff --git a/xds/internal/balancer/cdsbalancer/cdsbalancer_test.go b/xds/internal/balancer/cdsbalancer/cdsbalancer_test.go index 5a6546382..20588bbcb 100644 --- a/xds/internal/balancer/cdsbalancer/cdsbalancer_test.go +++ b/xds/internal/balancer/cdsbalancer/cdsbalancer_test.go @@ -42,6 +42,7 @@ import ( "google.golang.org/grpc/resolver/manual" "google.golang.org/grpc/serviceconfig" "google.golang.org/grpc/status" + xdsinternal "google.golang.org/grpc/xds/internal" "google.golang.org/grpc/xds/internal/balancer/clusterresolver" "google.golang.org/grpc/xds/internal/xdsclient" "google.golang.org/grpc/xds/internal/xdsclient/xdsresource" @@ -456,6 +457,7 @@ func (s) TestClusterUpdate_Success(t *testing.T) { EDSServiceName: serviceName, MaxConcurrentRequests: newUint32(512), OutlierDetection: json.RawMessage(`{}`), + TelemetryLabels: xdsinternal.UnknownCSMLabels, }}, XDSLBPolicy: json.RawMessage(`[{"xds_wrr_locality_experimental": {"childPolicy": [{"round_robin": {}}]}}]`), }, @@ -483,6 +485,7 @@ func (s) TestClusterUpdate_Success(t *testing.T) { Type: clusterresolver.DiscoveryMechanismTypeEDS, EDSServiceName: serviceName, OutlierDetection: json.RawMessage(`{}`), + TelemetryLabels: xdsinternal.UnknownCSMLabels, }}, XDSLBPolicy: json.RawMessage(`[{"ring_hash_experimental": {"minRingSize":100, "maxRingSize":1000}}]`), }, @@ -505,6 +508,7 @@ func (s) TestClusterUpdate_Success(t *testing.T) { Type: clusterresolver.DiscoveryMechanismTypeEDS, EDSServiceName: serviceName, OutlierDetection: json.RawMessage(`{"successRateEjection":{}}`), + TelemetryLabels: xdsinternal.UnknownCSMLabels, }}, XDSLBPolicy: json.RawMessage(`[{"ring_hash_experimental": {"minRingSize":1024, "maxRingSize":8388608}}]`), }, @@ -557,6 +561,7 @@ func (s) TestClusterUpdate_Success(t *testing.T) { "requestVolume": 50 } }`), + TelemetryLabels: xdsinternal.UnknownCSMLabels, }}, XDSLBPolicy: json.RawMessage(`[{"ring_hash_experimental": {"minRingSize":1024, "maxRingSize":8388608}}]`), }, @@ -609,6 +614,7 @@ func (s) TestClusterUpdate_SuccessWithLRS(t *testing.T) { EDSServiceName: serviceName, LoadReportingServer: lrsServerCfg, OutlierDetection: json.RawMessage(`{}`), + TelemetryLabels: xdsinternal.UnknownCSMLabels, }}, XDSLBPolicy: json.RawMessage(`[{"xds_wrr_locality_experimental": {"childPolicy": [{"round_robin": {}}]}}]`), } diff --git a/xds/internal/balancer/clusterresolver/e2e_test/balancer_test.go b/xds/internal/balancer/clusterresolver/e2e_test/balancer_test.go index e04dbe1c3..7ac6306cc 100644 --- a/xds/internal/balancer/clusterresolver/e2e_test/balancer_test.go +++ b/xds/internal/balancer/clusterresolver/e2e_test/balancer_test.go @@ -41,6 +41,7 @@ import ( "google.golang.org/grpc/resolver/manual" "google.golang.org/grpc/serviceconfig" "google.golang.org/grpc/status" + xdsinternal "google.golang.org/grpc/xds/internal" "google.golang.org/grpc/xds/internal/balancer/clusterimpl" "google.golang.org/grpc/xds/internal/balancer/outlierdetection" "google.golang.org/grpc/xds/internal/balancer/priority" @@ -400,8 +401,9 @@ func (s) TestOutlierDetectionConfigPropagationToChildPolicy(t *testing.T) { ChildPolicy: &iserviceconfig.BalancerConfig{ Name: clusterimpl.Name, Config: &clusterimpl.LBConfig{ - Cluster: clusterName, - EDSServiceName: edsServiceName, + Cluster: clusterName, + EDSServiceName: edsServiceName, + TelemetryLabels: xdsinternal.UnknownCSMLabels, ChildPolicy: &iserviceconfig.BalancerConfig{ Name: wrrlocality.Name, Config: &wrrlocality.LBConfig{ diff --git a/xds/internal/internal.go b/xds/internal/internal.go index fda4c7f56..709199050 100644 --- a/xds/internal/internal.go +++ b/xds/internal/internal.go @@ -83,3 +83,10 @@ func SetLocalityID(addr resolver.Address, l LocalityID) resolver.Address { // ResourceTypeMapForTesting maps TypeUrl to corresponding ResourceType. var ResourceTypeMapForTesting map[string]any + +// UnknownCSMLabels are TelemetryLabels emitted from CDS if CSM Telemetry Label +// data is not present in the CDS Resource. +var UnknownCSMLabels = map[string]string{ + "csm.service_name": "unknown", + "csm.service_namespace_name": "unknown", +} diff --git a/xds/internal/xdsclient/tests/cds_watchers_test.go b/xds/internal/xdsclient/tests/cds_watchers_test.go index ace15d8df..c77808895 100644 --- a/xds/internal/xdsclient/tests/cds_watchers_test.go +++ b/xds/internal/xdsclient/tests/cds_watchers_test.go @@ -103,7 +103,7 @@ func verifyClusterUpdate(ctx context.Context, updateCh *testutils.Channel, wantU return fmt.Errorf("received update with error type %v, want %v", gotType, wantType) } } - cmpOpts := []cmp.Option{cmpopts.EquateEmpty(), cmpopts.IgnoreFields(xdsresource.ClusterUpdate{}, "Raw", "LBPolicy")} + cmpOpts := []cmp.Option{cmpopts.EquateEmpty(), cmpopts.IgnoreFields(xdsresource.ClusterUpdate{}, "Raw", "LBPolicy", "TelemetryLabels")} if diff := cmp.Diff(wantUpdate.update, got.update, cmpOpts...); diff != "" { return fmt.Errorf("received unexpected diff in the cluster resource update: (-want, got):\n%s", diff) } diff --git a/xds/internal/xdsclient/tests/resource_update_test.go b/xds/internal/xdsclient/tests/resource_update_test.go index 7451e67ab..5ac0ab42c 100644 --- a/xds/internal/xdsclient/tests/resource_update_test.go +++ b/xds/internal/xdsclient/tests/resource_update_test.go @@ -875,7 +875,7 @@ func (s) TestHandleClusterResponseFromManagementServer(t *testing.T) { } cmpOpts := []cmp.Option{ cmpopts.EquateEmpty(), - cmpopts.IgnoreFields(xdsresource.ClusterUpdate{}, "Raw", "LBPolicy"), + cmpopts.IgnoreFields(xdsresource.ClusterUpdate{}, "Raw", "LBPolicy", "TelemetryLabels"), } if diff := cmp.Diff(test.wantUpdate, gotUpdate, cmpOpts...); diff != "" { t.Fatalf("Unexpected diff in metadata, diff (-want +got):\n%s", diff) diff --git a/xds/internal/xdsclient/xdsresource/tests/unmarshal_cds_test.go b/xds/internal/xdsclient/xdsresource/tests/unmarshal_cds_test.go index dde89b272..75ca714c8 100644 --- a/xds/internal/xdsclient/xdsresource/tests/unmarshal_cds_test.go +++ b/xds/internal/xdsclient/xdsresource/tests/unmarshal_cds_test.go @@ -34,6 +34,7 @@ import ( "google.golang.org/grpc/internal/testutils/xds/e2e" "google.golang.org/grpc/internal/xds/bootstrap" "google.golang.org/grpc/serviceconfig" + "google.golang.org/grpc/xds/internal" "google.golang.org/grpc/xds/internal/balancer/ringhash" "google.golang.org/grpc/xds/internal/balancer/wrrlocality" "google.golang.org/grpc/xds/internal/xdsclient/xdsresource" @@ -141,9 +142,10 @@ func (s) TestValidateCluster_Success(t *testing.T) { }, }, wantUpdate: xdsresource.ClusterUpdate{ - ClusterName: clusterName, - ClusterType: xdsresource.ClusterTypeLogicalDNS, - DNSHostName: "dns_host:8080", + ClusterName: clusterName, + ClusterType: xdsresource.ClusterTypeLogicalDNS, + DNSHostName: "dns_host:8080", + TelemetryLabels: internal.UnknownCSMLabels, }, wantLBConfig: &iserviceconfig.BalancerConfig{ Name: wrrlocality.Name, @@ -172,6 +174,7 @@ func (s) TestValidateCluster_Success(t *testing.T) { ClusterName: clusterName, ClusterType: xdsresource.ClusterTypeAggregate, PrioritizedClusterNames: []string{"a", "b", "c"}, + TelemetryLabels: internal.UnknownCSMLabels, }, wantLBConfig: &iserviceconfig.BalancerConfig{ Name: wrrlocality.Name, @@ -183,9 +186,12 @@ func (s) TestValidateCluster_Success(t *testing.T) { }, }, { - name: "happy-case-no-service-name-no-lrs", - cluster: e2e.DefaultCluster(clusterName, "", e2e.SecurityLevelNone), - wantUpdate: xdsresource.ClusterUpdate{ClusterName: clusterName}, + name: "happy-case-no-service-name-no-lrs", + cluster: e2e.DefaultCluster(clusterName, "", e2e.SecurityLevelNone), + wantUpdate: xdsresource.ClusterUpdate{ + ClusterName: clusterName, + TelemetryLabels: internal.UnknownCSMLabels, + }, wantLBConfig: &iserviceconfig.BalancerConfig{ Name: wrrlocality.Name, Config: &wrrlocality.LBConfig{ @@ -199,8 +205,9 @@ func (s) TestValidateCluster_Success(t *testing.T) { name: "happy-case-no-lrs", cluster: e2e.DefaultCluster(clusterName, serviceName, e2e.SecurityLevelNone), wantUpdate: xdsresource.ClusterUpdate{ - ClusterName: clusterName, - EDSServiceName: serviceName, + ClusterName: clusterName, + EDSServiceName: serviceName, + TelemetryLabels: internal.UnknownCSMLabels, }, wantLBConfig: &iserviceconfig.BalancerConfig{ Name: wrrlocality.Name, @@ -223,6 +230,7 @@ func (s) TestValidateCluster_Success(t *testing.T) { ClusterName: clusterName, EDSServiceName: serviceName, LRSServerConfig: serverCfg, + TelemetryLabels: internal.UnknownCSMLabels, }, wantLBConfig: &iserviceconfig.BalancerConfig{ Name: wrrlocality.Name, @@ -261,6 +269,7 @@ func (s) TestValidateCluster_Success(t *testing.T) { EDSServiceName: serviceName, LRSServerConfig: serverCfg, MaxRequests: func() *uint32 { i := uint32(512); return &i }(), + TelemetryLabels: internal.UnknownCSMLabels, }, wantLBConfig: &iserviceconfig.BalancerConfig{ Name: wrrlocality.Name, @@ -279,8 +288,9 @@ func (s) TestValidateCluster_Success(t *testing.T) { return c }(), wantUpdate: xdsresource.ClusterUpdate{ - ClusterName: clusterName, - EDSServiceName: serviceName, + ClusterName: clusterName, + EDSServiceName: serviceName, + TelemetryLabels: internal.UnknownCSMLabels, }, wantLBConfig: &iserviceconfig.BalancerConfig{ Name: "ring_hash_experimental", @@ -306,8 +316,9 @@ func (s) TestValidateCluster_Success(t *testing.T) { LbPolicy: v3clusterpb.Cluster_LEAST_REQUEST, }, wantUpdate: xdsresource.ClusterUpdate{ - ClusterName: clusterName, - EDSServiceName: serviceName, + ClusterName: clusterName, + EDSServiceName: serviceName, + TelemetryLabels: internal.UnknownCSMLabels, }, wantLBConfig: &iserviceconfig.BalancerConfig{ Name: "least_request_experimental", @@ -330,8 +341,9 @@ func (s) TestValidateCluster_Success(t *testing.T) { return c }(), wantUpdate: xdsresource.ClusterUpdate{ - ClusterName: clusterName, - EDSServiceName: serviceName, + ClusterName: clusterName, + EDSServiceName: serviceName, + TelemetryLabels: internal.UnknownCSMLabels, }, wantLBConfig: &iserviceconfig.BalancerConfig{ Name: "ring_hash_experimental", @@ -362,8 +374,9 @@ func (s) TestValidateCluster_Success(t *testing.T) { }, }, wantUpdate: xdsresource.ClusterUpdate{ - ClusterName: clusterName, - EDSServiceName: serviceName, + ClusterName: clusterName, + EDSServiceName: serviceName, + TelemetryLabels: internal.UnknownCSMLabels, }, wantLBConfig: &iserviceconfig.BalancerConfig{ Name: "least_request_experimental", @@ -400,8 +413,9 @@ func (s) TestValidateCluster_Success(t *testing.T) { }, }, wantUpdate: xdsresource.ClusterUpdate{ - ClusterName: clusterName, - EDSServiceName: serviceName, + ClusterName: clusterName, + EDSServiceName: serviceName, + TelemetryLabels: internal.UnknownCSMLabels, }, wantLBConfig: &iserviceconfig.BalancerConfig{ Name: "ring_hash_experimental", @@ -435,8 +449,9 @@ func (s) TestValidateCluster_Success(t *testing.T) { }, }, wantUpdate: xdsresource.ClusterUpdate{ - ClusterName: clusterName, - EDSServiceName: serviceName, + ClusterName: clusterName, + EDSServiceName: serviceName, + TelemetryLabels: internal.UnknownCSMLabels, }, wantLBConfig: &iserviceconfig.BalancerConfig{ Name: wrrlocality.Name, @@ -474,8 +489,9 @@ func (s) TestValidateCluster_Success(t *testing.T) { }, }, wantUpdate: xdsresource.ClusterUpdate{ - ClusterName: clusterName, - EDSServiceName: serviceName, + ClusterName: clusterName, + EDSServiceName: serviceName, + TelemetryLabels: internal.UnknownCSMLabels, }, wantLBConfig: &iserviceconfig.BalancerConfig{ Name: wrrlocality.Name, @@ -522,8 +538,9 @@ func (s) TestValidateCluster_Success(t *testing.T) { }, }, wantUpdate: xdsresource.ClusterUpdate{ - ClusterName: clusterName, - EDSServiceName: serviceName, + ClusterName: clusterName, + EDSServiceName: serviceName, + TelemetryLabels: internal.UnknownCSMLabels, }, wantLBConfig: &iserviceconfig.BalancerConfig{ Name: "ring_hash_experimental", diff --git a/xds/internal/xdsclient/xdsresource/unmarshal_cds.go b/xds/internal/xdsclient/xdsresource/unmarshal_cds.go index 9eaef4d9b..8ede639ab 100644 --- a/xds/internal/xdsclient/xdsresource/unmarshal_cds.go +++ b/xds/internal/xdsclient/xdsresource/unmarshal_cds.go @@ -100,6 +100,15 @@ func validateClusterAndConstructClusterUpdate(cluster *v3clusterpb.Cluster, serv } } } + // "The values for the service labels csm.service_name and + // csm.service_namespace_name come from xDS, “unknown” if not present." - + // CSM Design. + if _, ok := telemetryLabels["csm.service_name"]; !ok { + telemetryLabels["csm.service_name"] = "unknown" + } + if _, ok := telemetryLabels["csm.service_namespace_name"]; !ok { + telemetryLabels["csm.service_namespace_name"] = "unknown" + } var lbPolicy json.RawMessage var err error diff --git a/xds/internal/xdsclient/xdsresource/unmarshal_cds_test.go b/xds/internal/xdsclient/xdsresource/unmarshal_cds_test.go index eeea3d580..5f2858674 100644 --- a/xds/internal/xdsclient/xdsresource/unmarshal_cds_test.go +++ b/xds/internal/xdsclient/xdsresource/unmarshal_cds_test.go @@ -29,6 +29,7 @@ import ( "google.golang.org/grpc/internal/testutils" "google.golang.org/grpc/internal/xds/bootstrap" "google.golang.org/grpc/internal/xds/matcher" + "google.golang.org/grpc/xds/internal" "google.golang.org/grpc/xds/internal/xdsclient/xdsresource/version" v3clusterpb "github.com/envoyproxy/go-control-plane/envoy/config/cluster/v3" @@ -873,6 +874,7 @@ func (s) TestValidateClusterWithSecurityConfig(t *testing.T) { RootInstanceName: rootPluginInstance, RootCertName: rootCertName, }, + TelemetryLabels: internal.UnknownCSMLabels, }, }, { @@ -914,6 +916,7 @@ func (s) TestValidateClusterWithSecurityConfig(t *testing.T) { RootInstanceName: rootPluginInstance, RootCertName: rootCertName, }, + TelemetryLabels: internal.UnknownCSMLabels, }, }, { @@ -959,6 +962,7 @@ func (s) TestValidateClusterWithSecurityConfig(t *testing.T) { IdentityInstanceName: identityPluginInstance, IdentityCertName: identityCertName, }, + TelemetryLabels: internal.UnknownCSMLabels, }, }, { @@ -1006,6 +1010,7 @@ func (s) TestValidateClusterWithSecurityConfig(t *testing.T) { IdentityInstanceName: identityPluginInstance, IdentityCertName: identityCertName, }, + TelemetryLabels: internal.UnknownCSMLabels, }, }, { @@ -1072,6 +1077,7 @@ func (s) TestValidateClusterWithSecurityConfig(t *testing.T) { matcher.StringMatcherForTesting(nil, nil, nil, newStringP(sanContains), nil, false), }, }, + TelemetryLabels: internal.UnknownCSMLabels, }, }, { @@ -1138,6 +1144,7 @@ func (s) TestValidateClusterWithSecurityConfig(t *testing.T) { matcher.StringMatcherForTesting(nil, nil, nil, newStringP(sanContains), nil, false), }, }, + TelemetryLabels: internal.UnknownCSMLabels, }, }, } @@ -1331,6 +1338,7 @@ func (s) TestUnmarshalCluster(t *testing.T) { EDSServiceName: v3Service, LRSServerConfig: serverCfg, Raw: v3ClusterAny, + TelemetryLabels: internal.UnknownCSMLabels, }, }, { @@ -1343,6 +1351,7 @@ func (s) TestUnmarshalCluster(t *testing.T) { EDSServiceName: v3Service, LRSServerConfig: serverCfg, Raw: v3ClusterAny, + TelemetryLabels: internal.UnknownCSMLabels, }, }, { @@ -1355,6 +1364,7 @@ func (s) TestUnmarshalCluster(t *testing.T) { EDSServiceName: v3Service, LRSServerConfig: serverCfg, Raw: v3ClusterAnyWithEDSConfigSourceSelf, + TelemetryLabels: internal.UnknownCSMLabels, }, }, { @@ -1384,7 +1394,8 @@ func (s) TestUnmarshalCluster(t *testing.T) { LRSServerConfig: serverCfg, Raw: v3ClusterAnyWithTelemetryLabelsIgnoreSome, TelemetryLabels: map[string]string{ - "csm.service_name": "grpc-service", + "csm.service_name": "grpc-service", + "csm.service_namespace_name": "unknown", }, }, },