diff --git a/admin/test/utils.go b/admin/test/utils.go index e85ab9240e1a..0ff3d00279ea 100644 --- a/admin/test/utils.go +++ b/admin/test/utils.go @@ -55,7 +55,6 @@ type ExpectedStatusCodes struct { func RunRegisterTests(t *testing.T, ec ExpectedStatusCodes) { nodeID := uuid.New().String() bootstrapCleanup, err := bootstrap.CreateFile(bootstrap.Options{ - Version: bootstrap.TransportV3, NodeID: nodeID, ServerURI: "no.need.for.a.server", }) diff --git a/internal/testutils/xds/bootstrap/bootstrap.go b/internal/testutils/xds/bootstrap/bootstrap.go index 195f1bea0c6e..88790716bf2a 100644 --- a/internal/testutils/xds/bootstrap/bootstrap.go +++ b/internal/testutils/xds/bootstrap/bootstrap.go @@ -30,20 +30,8 @@ import ( var logger = grpclog.Component("internal/xds") -// TransportAPI refers to the API version for xDS transport protocol. -type TransportAPI int - -const ( - // TransportV2 refers to the v2 xDS transport protocol. - TransportV2 TransportAPI = iota - // TransportV3 refers to the v3 xDS transport protocol. - TransportV3 -) - // Options wraps the parameters used to generate bootstrap configuration. type Options struct { - // Version is the xDS transport protocol version. - Version TransportAPI // NodeID is the node identifier of the gRPC client/server node in the // proxyless service mesh. NodeID string @@ -119,14 +107,7 @@ func Contents(opts Options) ([]byte, error) { ClientDefaultListenerResourceNameTemplate: opts.ClientDefaultListenerResourceNameTemplate, ServerListenerResourceNameTemplate: opts.ServerListenerResourceNameTemplate, } - switch opts.Version { - case TransportV2: - // TODO: Add any v2 specific fields. - case TransportV3: - cfg.XdsServers[0].ServerFeatures = append(cfg.XdsServers[0].ServerFeatures, "xds_v3") - default: - return nil, fmt.Errorf("unsupported xDS transport protocol version: %v", opts.Version) - } + cfg.XdsServers[0].ServerFeatures = append(cfg.XdsServers[0].ServerFeatures, "xds_v3") auths := make(map[string]authority) if envconfig.XDSFederation { diff --git a/internal/testutils/xds/e2e/setup_management_server.go b/internal/testutils/xds/e2e/setup_management_server.go index 5ba730722401..877cdea2c58d 100644 --- a/internal/testutils/xds/e2e/setup_management_server.go +++ b/internal/testutils/xds/e2e/setup_management_server.go @@ -79,7 +79,6 @@ func SetupManagementServer(t *testing.T, opts ManagementServerOptions) (*Managem // Create a bootstrap file in a temporary directory. nodeID := uuid.New().String() bootstrapContents, err := bootstrap.Contents(bootstrap.Options{ - Version: bootstrap.TransportV3, NodeID: nodeID, ServerURI: server.Address, CertificateProviders: cpc, diff --git a/test/xds/xds_client_federation_test.go b/test/xds/xds_client_federation_test.go index b6d99de34ea8..0bd16779e1e1 100644 --- a/test/xds/xds_client_federation_test.go +++ b/test/xds/xds_client_federation_test.go @@ -74,7 +74,6 @@ func (s) TestClientSideFederation(t *testing.T) { // Create a bootstrap file in a temporary directory. nodeID := uuid.New().String() bootstrapContents, err := bootstrap.Contents(bootstrap.Options{ - Version: bootstrap.TransportV3, NodeID: nodeID, ServerURI: serverDefaultAuth.Address, ServerListenerResourceNameTemplate: e2e.ServerListenerResourceNameTemplate, @@ -220,7 +219,6 @@ func (s) TestFederation_UnknownAuthorityInReceivedResponse(t *testing.T) { nodeID := uuid.New().String() bootstrapContents, err := bootstrap.Contents(bootstrap.Options{ - Version: bootstrap.TransportV3, NodeID: nodeID, ServerURI: mgmtServer.Address, ServerListenerResourceNameTemplate: e2e.ServerListenerResourceNameTemplate, diff --git a/xds/csds/csds.go b/xds/csds/csds.go index 551757b80069..8d03124811a4 100644 --- a/xds/csds/csds.go +++ b/xds/csds/csds.go @@ -29,7 +29,6 @@ import ( "io" "sync" - "github.com/golang/protobuf/proto" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" internalgrpclog "google.golang.org/grpc/internal/grpclog" @@ -39,8 +38,6 @@ import ( "google.golang.org/protobuf/types/known/timestamppb" v3adminpb "github.com/envoyproxy/go-control-plane/envoy/admin/v3" - v2corepb "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" - v3corepb "github.com/envoyproxy/go-control-plane/envoy/config/core/v3" v3statusgrpc "github.com/envoyproxy/go-control-plane/envoy/service/status/v3" v3statuspb "github.com/envoyproxy/go-control-plane/envoy/service/status/v3" ) @@ -126,7 +123,7 @@ func (s *ClientStatusDiscoveryServer) buildClientStatusRespForReq(req *v3statusp ret := &v3statuspb.ClientStatusResponse{ Config: []*v3statuspb.ClientConfig{ { - Node: nodeProtoToV3(s.xdsClient.BootstrapConfig().XDSServer.NodeProto, s.logger), + Node: s.xdsClient.BootstrapConfig().NodeProto, GenericXdsConfigs: dumpToGenericXdsConfig(dump), }, }, @@ -141,37 +138,6 @@ func (s *ClientStatusDiscoveryServer) Close() { } } -// nodeProtoToV3 converts the given proto into a v3.Node. n is from bootstrap -// config, it can be either v2.Node or v3.Node. -// -// If n is already a v3.Node, return it. -// If n is v2.Node, marshal and unmarshal it to v3. -// Otherwise, return nil. -// -// The default case (not v2 or v3) is nil, instead of error, because the -// resources in the response are more important than the node. The worst case is -// that the user will receive no Node info, but will still get resources. -func nodeProtoToV3(n proto.Message, logger *internalgrpclog.PrefixLogger) *v3corepb.Node { - var node *v3corepb.Node - switch nn := n.(type) { - case *v3corepb.Node: - node = nn - case *v2corepb.Node: - v2, err := proto.Marshal(nn) - if err != nil { - logger.Warningf("Failed to marshal node (%v): %v", n, err) - break - } - node = new(v3corepb.Node) - if err := proto.Unmarshal(v2, node); err != nil { - logger.Warningf("Failed to unmarshal node (%v): %v", v2, err) - } - default: - logger.Warningf("node from bootstrap is %#v, only v2.Node and v3.Node are supported", nn) - } - return node -} - func dumpToGenericXdsConfig(dump map[string]map[string]xdsresource.UpdateWithMD) []*v3statuspb.ClientConfig_GenericXdsConfig { var ret []*v3statuspb.ClientConfig_GenericXdsConfig for typeURL, updates := range dump { diff --git a/xds/csds/csds_e2e_test.go b/xds/csds/csds_e2e_test.go index ba3e58399f60..481e93929fa2 100644 --- a/xds/csds/csds_e2e_test.go +++ b/xds/csds/csds_e2e_test.go @@ -125,7 +125,6 @@ func (s) TestCSDS(t *testing.T) { // Create a bootstrap file in a temporary directory. bootstrapCleanup, err := bootstrap.CreateFile(bootstrap.Options{ - Version: bootstrap.TransportV3, NodeID: nodeID, ServerURI: mgmtServer.Address, }) diff --git a/xds/csds/csds_test.go b/xds/csds/csds_test.go deleted file mode 100644 index 48002b8501e0..000000000000 --- a/xds/csds/csds_test.go +++ /dev/null @@ -1,92 +0,0 @@ -/* - * - * Copyright 2021 gRPC authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package csds - -import ( - "testing" - - "github.com/golang/protobuf/proto" - "github.com/google/go-cmp/cmp" - "google.golang.org/grpc/internal/grpctest" - "google.golang.org/protobuf/testing/protocmp" - - v2corepb "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" - v3corepb "github.com/envoyproxy/go-control-plane/envoy/config/core/v3" -) - -type s struct { - grpctest.Tester -} - -func Test(t *testing.T) { - grpctest.RunSubTests(t, s{}) -} - -func (s) Test_nodeProtoToV3(t *testing.T) { - const ( - testID = "test-id" - testCluster = "test-cluster" - testZone = "test-zone" - ) - tests := []struct { - name string - n proto.Message - want *v3corepb.Node - }{ - { - name: "v3", - n: &v3corepb.Node{ - Id: testID, - Cluster: testCluster, - Locality: &v3corepb.Locality{Zone: testZone}, - }, - want: &v3corepb.Node{ - Id: testID, - Cluster: testCluster, - Locality: &v3corepb.Locality{Zone: testZone}, - }, - }, - { - name: "v2", - n: &v2corepb.Node{ - Id: testID, - Cluster: testCluster, - Locality: &v2corepb.Locality{Zone: testZone}, - }, - want: &v3corepb.Node{ - Id: testID, - Cluster: testCluster, - Locality: &v3corepb.Locality{Zone: testZone}, - }, - }, - { - name: "not node", - n: &v2corepb.Locality{Zone: testZone}, - want: nil, // Input is not a node, should return nil. - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got := nodeProtoToV3(tt.n, nil) - if diff := cmp.Diff(got, tt.want, protocmp.Transform()); diff != "" { - t.Errorf("nodeProtoToV3() got unexpected result, diff (-got, +want): %v", diff) - } - }) - } -} diff --git a/xds/googledirectpath/googlec2p.go b/xds/googledirectpath/googlec2p.go index 5bc17b03e5b2..c8989c87bf49 100644 --- a/xds/googledirectpath/googlec2p.go +++ b/xds/googledirectpath/googlec2p.go @@ -41,7 +41,6 @@ import ( _ "google.golang.org/grpc/xds" // To register xds resolvers and balancers. "google.golang.org/grpc/xds/internal/xdsclient" "google.golang.org/grpc/xds/internal/xdsclient/bootstrap" - "google.golang.org/grpc/xds/internal/xdsclient/xdsresource/version" "google.golang.org/protobuf/types/known/structpb" v3corepb "github.com/envoyproxy/go-control-plane/envoy/config/core/v3" @@ -118,10 +117,8 @@ func (c2pResolverBuilder) Build(t resolver.Target, cc resolver.ClientConn, opts balancerName = tdURL } serverConfig := &bootstrap.ServerConfig{ - ServerURI: balancerName, - Creds: grpc.WithCredentialsBundle(google.NewDefaultCredentials()), - TransportAPI: version.TransportV3, - NodeProto: newNode(<-zoneCh, <-ipv6CapableCh), + ServerURI: balancerName, + Creds: grpc.WithCredentialsBundle(google.NewDefaultCredentials()), } config := &bootstrap.Config{ XDSServer: serverConfig, @@ -131,6 +128,7 @@ func (c2pResolverBuilder) Build(t resolver.Target, cc resolver.ClientConn, opts XDSServer: serverConfig, }, }, + NodeProto: newNode(<-zoneCh, <-ipv6CapableCh), } // Create singleton xds client with this config. The xds client will be diff --git a/xds/googledirectpath/googlec2p_test.go b/xds/googledirectpath/googlec2p_test.go index 1eb1b18cf760..f5e8f2d93c71 100644 --- a/xds/googledirectpath/googlec2p_test.go +++ b/xds/googledirectpath/googlec2p_test.go @@ -32,7 +32,6 @@ import ( "google.golang.org/grpc/resolver" "google.golang.org/grpc/xds/internal/xdsclient" "google.golang.org/grpc/xds/internal/xdsclient/bootstrap" - "google.golang.org/grpc/xds/internal/xdsclient/xdsresource/version" "google.golang.org/protobuf/testing/protocmp" "google.golang.org/protobuf/types/known/structpb" @@ -214,9 +213,7 @@ func TestBuildXDS(t *testing.T) { } } serverConfig := &bootstrap.ServerConfig{ - ServerURI: tdURL, - TransportAPI: version.TransportV3, - NodeProto: wantNode, + ServerURI: tdURL, } wantConfig := &bootstrap.Config{ XDSServer: serverConfig, @@ -226,6 +223,7 @@ func TestBuildXDS(t *testing.T) { XDSServer: serverConfig, }, }, + NodeProto: wantNode, } if tt.tdURI != "" { wantConfig.XDSServer.ServerURI = tt.tdURI diff --git a/xds/internal/httpfilter/fault/fault_test.go b/xds/internal/httpfilter/fault/fault_test.go index 6bf00771f413..beeaf43321ad 100644 --- a/xds/internal/httpfilter/fault/fault_test.go +++ b/xds/internal/httpfilter/fault/fault_test.go @@ -106,7 +106,6 @@ func clientSetup(t *testing.T) (*e2e.ManagementServer, string, uint32, func()) { // Create a bootstrap file in a temporary directory. bootstrapCleanup, err := bootstrap.CreateFile(bootstrap.Options{ - Version: bootstrap.TransportV3, NodeID: nodeID, ServerURI: fs.Address, ServerListenerResourceNameTemplate: "grpc/server", diff --git a/xds/internal/resolver/xds_resolver_test.go b/xds/internal/resolver/xds_resolver_test.go index 952a7f67f9cc..d97993d86e1f 100644 --- a/xds/internal/resolver/xds_resolver_test.go +++ b/xds/internal/resolver/xds_resolver_test.go @@ -209,9 +209,8 @@ func (s) TestResolverBuilder_DifferentBootstrapConfigs(t *testing.T) { // Add top-level xDS server config corresponding to the above // management server. test.bootstrapCfg.XDSServer = &bootstrap.ServerConfig{ - ServerURI: mgmtServer.Address, - Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), - TransportAPI: version.TransportV3, + ServerURI: mgmtServer.Address, + Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), } // Override xDS client creation to use bootstrap configuration @@ -418,7 +417,6 @@ func (s) TestResolverResourceName(t *testing.T) { // Create a bootstrap configuration with test options. opts := xdsbootstrap.Options{ ServerURI: mgmtServer.Address, - Version: xdsbootstrap.TransportV3, ClientDefaultListenerResourceNameTemplate: tt.listenerResourceNameTemplate, } if tt.extraAuthority != "" { @@ -481,7 +479,6 @@ func (s) TestResolverWatchCallbackAfterClose(t *testing.T) { cleanup, err := xdsbootstrap.CreateFile(xdsbootstrap.Options{ NodeID: nodeID, ServerURI: mgmtServer.Address, - Version: xdsbootstrap.TransportV3, }) if err != nil { t.Fatal(err) @@ -534,9 +531,8 @@ func (s) TestResolverWatchCallbackAfterClose(t *testing.T) { func (s) TestResolverCloseClosesXDSClient(t *testing.T) { bootstrapCfg := &bootstrap.Config{ XDSServer: &bootstrap.ServerConfig{ - ServerURI: "dummy-management-server-address", - Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), - TransportAPI: version.TransportV3, + ServerURI: "dummy-management-server-address", + Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), }, } @@ -583,7 +579,6 @@ func (s) TestResolverBadServiceUpdate(t *testing.T) { cleanup, err := xdsbootstrap.CreateFile(xdsbootstrap.Options{ NodeID: nodeID, ServerURI: mgmtServer.Address, - Version: xdsbootstrap.TransportV3, }) if err != nil { t.Fatal(err) @@ -694,7 +689,6 @@ func (s) TestResolverGoodServiceUpdate(t *testing.T) { cleanup, err := xdsbootstrap.CreateFile(xdsbootstrap.Options{ NodeID: nodeID, ServerURI: mgmtServer.Address, - Version: xdsbootstrap.TransportV3, }) if err != nil { t.Fatal(err) @@ -941,7 +935,6 @@ func (s) TestResolverRequestHash(t *testing.T) { cleanup, err := xdsbootstrap.CreateFile(xdsbootstrap.Options{ NodeID: nodeID, ServerURI: mgmtServer.Address, - Version: xdsbootstrap.TransportV3, }) if err != nil { t.Fatal(err) @@ -1040,7 +1033,6 @@ func (s) TestResolverRemovedWithRPCs(t *testing.T) { cleanup, err := xdsbootstrap.CreateFile(xdsbootstrap.Options{ NodeID: nodeID, ServerURI: mgmtServer.Address, - Version: xdsbootstrap.TransportV3, }) if err != nil { t.Fatal(err) @@ -1174,7 +1166,6 @@ func (s) TestResolverRemovedResource(t *testing.T) { cleanup, err := xdsbootstrap.CreateFile(xdsbootstrap.Options{ NodeID: nodeID, ServerURI: mgmtServer.Address, - Version: xdsbootstrap.TransportV3, }) if err != nil { t.Fatal(err) @@ -1314,7 +1305,6 @@ func (s) TestResolverWRR(t *testing.T) { cleanup, err := xdsbootstrap.CreateFile(xdsbootstrap.Options{ NodeID: nodeID, ServerURI: mgmtServer.Address, - Version: xdsbootstrap.TransportV3, }) if err != nil { t.Fatal(err) @@ -1411,7 +1401,6 @@ func (s) TestResolverMaxStreamDuration(t *testing.T) { cleanup, err := xdsbootstrap.CreateFile(xdsbootstrap.Options{ NodeID: nodeID, ServerURI: mgmtServer.Address, - Version: xdsbootstrap.TransportV3, }) if err != nil { t.Fatal(err) @@ -1580,7 +1569,6 @@ func (s) TestResolverDelayedOnCommitted(t *testing.T) { cleanup, err := xdsbootstrap.CreateFile(xdsbootstrap.Options{ NodeID: nodeID, ServerURI: mgmtServer.Address, - Version: xdsbootstrap.TransportV3, }) if err != nil { t.Fatal(err) @@ -1777,7 +1765,6 @@ func (s) TestResolverMultipleLDSUpdates(t *testing.T) { cleanup, err := xdsbootstrap.CreateFile(xdsbootstrap.Options{ NodeID: nodeID, ServerURI: mgmtServer.Address, - Version: xdsbootstrap.TransportV3, }) if err != nil { t.Fatal(err) diff --git a/xds/internal/test/e2e/controlplane.go b/xds/internal/test/e2e/controlplane.go index eee2b13819ea..98030dd448f5 100644 --- a/xds/internal/test/e2e/controlplane.go +++ b/xds/internal/test/e2e/controlplane.go @@ -40,7 +40,6 @@ func newControlPlane() (*controlPlane, error) { nodeID := uuid.New().String() bootstrapContentBytes, err := bootstrap.Contents(bootstrap.Options{ - Version: bootstrap.TransportV3, NodeID: nodeID, ServerURI: server.Address, ServerListenerResourceNameTemplate: e2e.ServerListenerResourceNameTemplate, diff --git a/xds/internal/xdsclient/authority.go b/xds/internal/xdsclient/authority.go index 8e53bd824d68..173edd9d1278 100644 --- a/xds/internal/xdsclient/authority.go +++ b/xds/internal/xdsclient/authority.go @@ -120,6 +120,7 @@ func newAuthority(args authorityArgs) (*authority, error) { UpdateHandler: ret.handleResourceUpdate, StreamErrorHandler: ret.newConnectionError, Logger: args.logger, + NodeProto: args.bootstrapCfg.NodeProto, }) if err != nil { return nil, fmt.Errorf("creating new transport to %q: %v", args.serverCfg, err) diff --git a/xds/internal/xdsclient/bootstrap/bootstrap.go b/xds/internal/xdsclient/bootstrap/bootstrap.go index 989ec4999748..2a920b94a312 100644 --- a/xds/internal/xdsclient/bootstrap/bootstrap.go +++ b/xds/internal/xdsclient/bootstrap/bootstrap.go @@ -28,8 +28,8 @@ import ( "os" "strings" + v3corepb "github.com/envoyproxy/go-control-plane/envoy/config/core/v3" "github.com/golang/protobuf/jsonpb" - "github.com/golang/protobuf/proto" "google.golang.org/grpc" "google.golang.org/grpc/credentials" "google.golang.org/grpc/credentials/google" @@ -39,10 +39,6 @@ import ( "google.golang.org/grpc/internal/envconfig" "google.golang.org/grpc/internal/pretty" "google.golang.org/grpc/xds/bootstrap" - "google.golang.org/grpc/xds/internal/xdsclient/xdsresource/version" - - v2corepb "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" - v3corepb "github.com/envoyproxy/go-control-plane/envoy/config/core/v3" ) const ( @@ -61,8 +57,6 @@ func init() { bootstrap.RegisterCredentials(&googleDefaultCredsBuilder{}) } -var gRPCVersion = fmt.Sprintf("%s %s", gRPCUserAgentName, grpc.Version) - // For overriding in unit tests. var bootstrapFileReadFunc = os.ReadFile @@ -103,17 +97,6 @@ type ServerConfig struct { Creds grpc.DialOption // CredsType is the type of the creds. It will be used to dedup servers. CredsType string - // TransportAPI indicates the API version of xDS transport protocol to use. - // This describes the xDS gRPC endpoint and version of - // DiscoveryRequest/Response used on the wire. - TransportAPI version.TransportAPI - // NodeProto contains the Node proto to be used in xDS requests. The actual - // type depends on the transport protocol version used. - // - // Note that it's specified in the bootstrap globally for all the servers, - // but we keep it in each server config so that its type (e.g. *v2pb.Node or - // *v3pb.Node) is consistent with the transport API version. - NodeProto proto.Message } // String returns the string representation of the ServerConfig. @@ -126,13 +109,7 @@ type ServerConfig struct { // content. It doesn't cover NodeProto because NodeProto isn't used by // federation. func (sc *ServerConfig) String() string { - var ver string - switch sc.TransportAPI { - case version.TransportV3: - ver = "xDSv3" - case version.TransportV2: - ver = "xDSv2" - } + var ver = "xDSv3" return strings.Join([]string{sc.ServerURI, sc.CredsType, ver}, "-") } @@ -142,9 +119,7 @@ func (sc ServerConfig) MarshalJSON() ([]byte, error) { ServerURI: sc.ServerURI, ChannelCreds: []channelCreds{{Type: sc.CredsType, Config: nil}}, } - if sc.TransportAPI == version.TransportV3 { - server.ServerFeatures = []string{serverFeaturesV3} - } + server.ServerFeatures = []string{serverFeaturesV3} return json.Marshal(server) } @@ -169,11 +144,6 @@ func (sc *ServerConfig) UnmarshalJSON(data []byte) error { sc.Creds = grpc.WithCredentialsBundle(bundle) break } - for _, f := range server.ServerFeatures { - if f == serverFeaturesV3 { - sc.TransportAPI = version.TransportV3 - } - } return nil } @@ -277,7 +247,6 @@ type Config struct { // // Defaults to "%s". ClientDefaultListenerResourceNameTemplate string - // Authorities is a map of authority name to corresponding configuration. // // This is used in the following cases: @@ -292,6 +261,9 @@ type Config struct { // In any of those cases, it is an error if the specified authority is // not present in this map. Authorities map[string]*Authority + // NodeProto contains the Node proto to be used in xDS requests. This will be + // of type *v3corepb.Node. + NodeProto *v3corepb.Node } type channelCreds struct { @@ -373,12 +345,6 @@ func newConfigFromContents(data []byte) (*Config, error) { for k, v := range jsonData { switch k { case "node": - // We unconditionally convert the JSON into a v3.Node proto. The v3 - // proto does not contain the deprecated field "build_version" from - // the v2 proto. We do not expect the bootstrap file to contain the - // "build_version" field. In any case, the unmarshal will succeed - // because we have set the `AllowUnknownFields` option on the - // unmarshaler. node = &v3corepb.Node{} if err := m.Unmarshal(bytes.NewReader(v), node); err != nil { return nil, fmt.Errorf("xds: jsonpb.Unmarshal(%v) for field %q failed during bootstrap: %v", string(v), k, err) @@ -473,66 +439,16 @@ func newConfigFromContents(data []byte) (*Config, error) { } } - if err := config.updateNodeProto(node); err != nil { - return nil, err + // Performing post-production on the node information. Some additional fields + // which are not expected to be set in the bootstrap file are populated here. + if node == nil { + node = &v3corepb.Node{} } + node.UserAgentName = gRPCUserAgentName + node.UserAgentVersionType = &v3corepb.Node_UserAgentVersion{UserAgentVersion: grpc.Version} + node.ClientFeatures = append(node.ClientFeatures, clientFeatureNoOverprovisioning, clientFeatureResourceWrapper) + config.NodeProto = node + logger.Debugf("Bootstrap config for creating xds-client: %v", pretty.ToJSON(config)) return config, nil } - -// updateNodeProto updates the node proto read from the bootstrap file. -// -// The input node is a v3.Node protobuf message corresponding to the JSON -// contents found in the bootstrap file. This method performs some post -// processing on it: -// 1. If the node is nil, we create an empty one here. That way, callers of this -// function can always expect that the NodeProto field is non-nil. -// 2. Some additional fields which are not expected to be set in the bootstrap -// file are populated here. -// 3. For each server config (both top level and in each authority), we set its -// node field to the v3.Node, or a v2.Node with the same content, depending on -// the server's transport API version. -func (c *Config) updateNodeProto(node *v3corepb.Node) error { - v3 := node - if v3 == nil { - v3 = &v3corepb.Node{} - } - v3.UserAgentName = gRPCUserAgentName - v3.UserAgentVersionType = &v3corepb.Node_UserAgentVersion{UserAgentVersion: grpc.Version} - v3.ClientFeatures = append(v3.ClientFeatures, clientFeatureNoOverprovisioning, clientFeatureResourceWrapper) - - v3bytes, err := proto.Marshal(v3) - if err != nil { - return fmt.Errorf("xds: proto.Marshal(%v): %v", v3, err) - } - v2 := &v2corepb.Node{} - if err := proto.Unmarshal(v3bytes, v2); err != nil { - return fmt.Errorf("xds: proto.Unmarshal(%v): %v", v3bytes, err) - } - // BuildVersion is deprecated, and is replaced by user_agent_name and - // user_agent_version. But the management servers are still using the old - // field, so we will keep both set. - v2.BuildVersion = gRPCVersion - v2.UserAgentVersionType = &v2corepb.Node_UserAgentVersion{UserAgentVersion: grpc.Version} - - switch c.XDSServer.TransportAPI { - case version.TransportV2: - c.XDSServer.NodeProto = v2 - case version.TransportV3: - c.XDSServer.NodeProto = v3 - } - - for _, a := range c.Authorities { - if a.XDSServer == nil { - continue - } - switch a.XDSServer.TransportAPI { - case version.TransportV2: - a.XDSServer.NodeProto = v2 - case version.TransportV3: - a.XDSServer.NodeProto = v3 - } - } - - return nil -} diff --git a/xds/internal/xdsclient/bootstrap/bootstrap_test.go b/xds/internal/xdsclient/bootstrap/bootstrap_test.go index 6aa047d6ddbc..0ff7813f493b 100644 --- a/xds/internal/xdsclient/bootstrap/bootstrap_test.go +++ b/xds/internal/xdsclient/bootstrap/bootstrap_test.go @@ -28,23 +28,53 @@ import ( "github.com/golang/protobuf/proto" "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" + "google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc" "google.golang.org/grpc/credentials/google" - "google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/credentials/tls/certprovider" "google.golang.org/grpc/internal" "google.golang.org/grpc/internal/envconfig" "google.golang.org/grpc/xds/bootstrap" - "google.golang.org/grpc/xds/internal/xdsclient/xdsresource/version" - v2corepb "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" v3corepb "github.com/envoyproxy/go-control-plane/envoy/config/core/v3" structpb "github.com/golang/protobuf/ptypes/struct" ) var ( - v2BootstrapFileMap = map[string]string{ + v3BootstrapFileMap = map[string]string{ + "serverFeaturesIncludesXDSV3": ` + { + "node": { + "id": "ENVOY_NODE_ID", + "metadata": { + "TRAFFICDIRECTOR_GRPC_HOSTNAME": "trafficdirector" + } + }, + "xds_servers" : [{ + "server_uri": "trafficdirector.googleapis.com:443", + "channel_creds": [ + { "type": "google_default" } + ], + "server_features" : ["foo", "bar"] + }] + }`, + "serverFeaturesExcludesXDSV3": ` + { + "node": { + "id": "ENVOY_NODE_ID", + "metadata": { + "TRAFFICDIRECTOR_GRPC_HOSTNAME": "trafficdirector" + } + }, + "xds_servers" : [{ + "server_uri": "trafficdirector.googleapis.com:443", + "channel_creds": [ + { "type": "google_default" } + ], + "server_features" : ["foo", "bar", "xds_v3"] + }] + }`, "emptyNodeProto": ` { "xds_servers" : [{ @@ -153,40 +183,6 @@ var ( ] }`, } - v3BootstrapFileMap = map[string]string{ - "serverDoesNotSupportsV3": ` - { - "node": { - "id": "ENVOY_NODE_ID", - "metadata": { - "TRAFFICDIRECTOR_GRPC_HOSTNAME": "trafficdirector" - } - }, - "xds_servers" : [{ - "server_uri": "trafficdirector.googleapis.com:443", - "channel_creds": [ - { "type": "google_default" } - ], - "server_features" : ["foo", "bar"] - }] - }`, - "serverSupportsV3": ` - { - "node": { - "id": "ENVOY_NODE_ID", - "metadata": { - "TRAFFICDIRECTOR_GRPC_HOSTNAME": "trafficdirector" - } - }, - "xds_servers" : [{ - "server_uri": "trafficdirector.googleapis.com:443", - "channel_creds": [ - { "type": "google_default" } - ], - "server_features" : ["foo", "bar", "xds_v3"] - }] - }`, - } metadata = &structpb.Struct{ Fields: map[string]*structpb.Value{ "TRAFFICDIRECTOR_GRPC_HOSTNAME": { @@ -194,14 +190,6 @@ var ( }, }, } - v2NodeProto = &v2corepb.Node{ - Id: "ENVOY_NODE_ID", - Metadata: metadata, - BuildVersion: gRPCVersion, - UserAgentName: gRPCUserAgentName, - UserAgentVersionType: &v2corepb.Node_UserAgentVersion{UserAgentVersion: grpc.Version}, - ClientFeatures: []string{clientFeatureNoOverprovisioning, clientFeatureResourceWrapper}, - } v3NodeProto = &v3corepb.Node{ Id: "ENVOY_NODE_ID", Metadata: metadata, @@ -209,32 +197,22 @@ var ( UserAgentVersionType: &v3corepb.Node_UserAgentVersion{UserAgentVersion: grpc.Version}, ClientFeatures: []string{clientFeatureNoOverprovisioning, clientFeatureResourceWrapper}, } - nilCredsConfigV2 = &Config{ + nilCredsConfigV3 = &Config{ XDSServer: &ServerConfig{ ServerURI: "trafficdirector.googleapis.com:443", Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), CredsType: "insecure", - NodeProto: v2NodeProto, }, + NodeProto: v3NodeProto, ClientDefaultListenerResourceNameTemplate: "%s", } - nonNilCredsConfigV2 = &Config{ + nonNilCredsConfigV3 = &Config{ XDSServer: &ServerConfig{ ServerURI: "trafficdirector.googleapis.com:443", Creds: grpc.WithCredentialsBundle(google.NewComputeEngineCredentials()), CredsType: "google_default", - NodeProto: v2NodeProto, - }, - ClientDefaultListenerResourceNameTemplate: "%s", - } - nonNilCredsConfigV3 = &Config{ - XDSServer: &ServerConfig{ - ServerURI: "trafficdirector.googleapis.com:443", - Creds: grpc.WithCredentialsBundle(google.NewComputeEngineCredentials()), - CredsType: "google_default", - TransportAPI: version.TransportV3, - NodeProto: v3NodeProto, }, + NodeProto: v3NodeProto, ClientDefaultListenerResourceNameTemplate: "%s", } ) @@ -314,9 +292,9 @@ func testNewConfigWithFileContentEnv(t *testing.T, fileName string, wantError bo } } -// TestNewConfigV2ProtoFailure exercises the functionality in NewConfig with +// TestNewConfigV3ProtoFailure exercises the functionality in NewConfig with // different bootstrap file contents which are expected to fail. -func TestNewConfigV2ProtoFailure(t *testing.T) { +func TestNewConfigV3ProtoFailure(t *testing.T) { bootstrapFileMap := map[string]string{ "empty": "", "badJSON": `["test": 123]`, @@ -380,11 +358,11 @@ func TestNewConfigV2ProtoFailure(t *testing.T) { } } -// TestNewConfigV2ProtoSuccess exercises the functionality in NewConfig with +// TestNewConfigV3ProtoSuccess exercises the functionality in NewConfig with // different bootstrap file contents. It overrides the fileReadFunc by returning // bootstrap file contents defined in this test, instead of reading from a file. -func TestNewConfigV2ProtoSuccess(t *testing.T) { - cancel := setupBootstrapOverride(v2BootstrapFileMap) +func TestNewConfigV3ProtoSuccess(t *testing.T) { + cancel := setupBootstrapOverride(v3BootstrapFileMap) defer cancel() tests := []struct { @@ -397,22 +375,21 @@ func TestNewConfigV2ProtoSuccess(t *testing.T) { ServerURI: "trafficdirector.googleapis.com:443", Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), CredsType: "insecure", - NodeProto: &v2corepb.Node{ - BuildVersion: gRPCVersion, - UserAgentName: gRPCUserAgentName, - UserAgentVersionType: &v2corepb.Node_UserAgentVersion{UserAgentVersion: grpc.Version}, - ClientFeatures: []string{clientFeatureNoOverprovisioning, clientFeatureResourceWrapper}, - }, + }, + NodeProto: &v3corepb.Node{ + UserAgentName: gRPCUserAgentName, + UserAgentVersionType: &v3corepb.Node_UserAgentVersion{UserAgentVersion: grpc.Version}, + ClientFeatures: []string{clientFeatureNoOverprovisioning, clientFeatureResourceWrapper}, }, ClientDefaultListenerResourceNameTemplate: "%s", }, }, - {"unknownTopLevelFieldInFile", nilCredsConfigV2}, - {"unknownFieldInNodeProto", nilCredsConfigV2}, - {"unknownFieldInXdsServer", nilCredsConfigV2}, - {"multipleChannelCreds", nonNilCredsConfigV2}, - {"goodBootstrap", nonNilCredsConfigV2}, - {"multipleXDSServers", nonNilCredsConfigV2}, + {"unknownTopLevelFieldInFile", nilCredsConfigV3}, + {"unknownFieldInNodeProto", nilCredsConfigV3}, + {"unknownFieldInXdsServer", nilCredsConfigV3}, + {"multipleChannelCreds", nonNilCredsConfigV3}, + {"goodBootstrap", nonNilCredsConfigV3}, + {"multipleXDSServers", nonNilCredsConfigV3}, } for _, test := range tests { @@ -434,8 +411,8 @@ func TestNewConfigV3Support(t *testing.T) { name string wantConfig *Config }{ - {"serverDoesNotSupportsV3", nonNilCredsConfigV2}, - {"serverSupportsV3", nonNilCredsConfigV3}, + {"serverFeaturesIncludesXDSV3", nonNilCredsConfigV3}, + {"serverFeaturesExcludesXDSV3", nonNilCredsConfigV3}, } for _, test := range tests { @@ -454,14 +431,14 @@ func TestNewConfigV3Support(t *testing.T) { func TestNewConfigBootstrapEnvPriority(t *testing.T) { oldFileReadFunc := bootstrapFileReadFunc bootstrapFileReadFunc = func(filename string) ([]byte, error) { - return fileReadFromFileMap(v2BootstrapFileMap, filename) + return fileReadFromFileMap(v3BootstrapFileMap, filename) } defer func() { bootstrapFileReadFunc = oldFileReadFunc }() - goodFileName1 := "goodBootstrap" - goodConfig1 := nonNilCredsConfigV2 + goodFileName1 := "serverFeaturesIncludesXDSV3" + goodConfig1 := nonNilCredsConfigV3 - goodFileName2 := "serverSupportsV3" + goodFileName2 := "serverFeaturesExcludesXDSV3" goodFileContent2 := v3BootstrapFileMap[goodFileName2] goodConfig2 := nonNilCredsConfigV3 @@ -664,12 +641,11 @@ func TestNewConfigWithCertificateProviders(t *testing.T) { goodConfig := &Config{ XDSServer: &ServerConfig{ - ServerURI: "trafficdirector.googleapis.com:443", - Creds: grpc.WithCredentialsBundle(google.NewComputeEngineCredentials()), - CredsType: "google_default", - TransportAPI: version.TransportV3, - NodeProto: v3NodeProto, + ServerURI: "trafficdirector.googleapis.com:443", + Creds: grpc.WithCredentialsBundle(google.NewComputeEngineCredentials()), + CredsType: "google_default", }, + NodeProto: v3NodeProto, CertProviderConfigs: map[string]*certprovider.BuildableConfig{ "fakeProviderInstance": wantCfg, }, @@ -758,12 +734,11 @@ func TestNewConfigWithServerListenerResourceNameTemplate(t *testing.T) { name: "goodServerListenerResourceNameTemplate", wantConfig: &Config{ XDSServer: &ServerConfig{ - ServerURI: "trafficdirector.googleapis.com:443", - Creds: grpc.WithCredentialsBundle(google.NewComputeEngineCredentials()), - CredsType: "google_default", - TransportAPI: version.TransportV2, - NodeProto: v2NodeProto, + ServerURI: "trafficdirector.googleapis.com:443", + Creds: grpc.WithCredentialsBundle(google.NewComputeEngineCredentials()), + CredsType: "google_default", }, + NodeProto: v3NodeProto, ServerListenerResourceNameTemplate: "grpc/server?xds.resource.listening_address=%s", ClientDefaultListenerResourceNameTemplate: "%s", }, @@ -908,23 +883,20 @@ func TestNewConfigWithFederation(t *testing.T) { name: "good", wantConfig: &Config{ XDSServer: &ServerConfig{ - ServerURI: "trafficdirector.googleapis.com:443", - Creds: grpc.WithCredentialsBundle(google.NewComputeEngineCredentials()), - CredsType: "google_default", - TransportAPI: version.TransportV2, - NodeProto: v2NodeProto, + ServerURI: "trafficdirector.googleapis.com:443", + Creds: grpc.WithCredentialsBundle(google.NewComputeEngineCredentials()), + CredsType: "google_default", }, + NodeProto: v3NodeProto, ServerListenerResourceNameTemplate: "xdstp://xds.example.com/envoy.config.listener.v3.Listener/grpc/server?listening_address=%s", ClientDefaultListenerResourceNameTemplate: "xdstp://xds.example.com/envoy.config.listener.v3.Listener/%s", Authorities: map[string]*Authority{ "xds.td.com": { ClientListenerResourceNameTemplate: "xdstp://xds.td.com/envoy.config.listener.v3.Listener/%s", XDSServer: &ServerConfig{ - ServerURI: "td.com", - Creds: grpc.WithCredentialsBundle(google.NewComputeEngineCredentials()), - CredsType: "google_default", - TransportAPI: version.TransportV3, - NodeProto: v3NodeProto, + ServerURI: "td.com", + Creds: grpc.WithCredentialsBundle(google.NewComputeEngineCredentials()), + CredsType: "google_default", }, }, }, @@ -934,12 +906,11 @@ func TestNewConfigWithFederation(t *testing.T) { name: "goodWithDefaultDefaultClientListenerTemplate", wantConfig: &Config{ XDSServer: &ServerConfig{ - ServerURI: "trafficdirector.googleapis.com:443", - Creds: grpc.WithCredentialsBundle(google.NewComputeEngineCredentials()), - CredsType: "google_default", - TransportAPI: version.TransportV2, - NodeProto: v2NodeProto, + ServerURI: "trafficdirector.googleapis.com:443", + Creds: grpc.WithCredentialsBundle(google.NewComputeEngineCredentials()), + CredsType: "google_default", }, + NodeProto: v3NodeProto, ClientDefaultListenerResourceNameTemplate: "%s", }, }, @@ -947,12 +918,11 @@ func TestNewConfigWithFederation(t *testing.T) { name: "goodWithDefaultClientListenerTemplatePerAuthority", wantConfig: &Config{ XDSServer: &ServerConfig{ - ServerURI: "trafficdirector.googleapis.com:443", - Creds: grpc.WithCredentialsBundle(google.NewComputeEngineCredentials()), - CredsType: "google_default", - TransportAPI: version.TransportV2, - NodeProto: v2NodeProto, + ServerURI: "trafficdirector.googleapis.com:443", + Creds: grpc.WithCredentialsBundle(google.NewComputeEngineCredentials()), + CredsType: "google_default", }, + NodeProto: v3NodeProto, ClientDefaultListenerResourceNameTemplate: "xdstp://xds.example.com/envoy.config.listener.v3.Listener/%s", Authorities: map[string]*Authority{ "xds.td.com": { @@ -968,12 +938,11 @@ func TestNewConfigWithFederation(t *testing.T) { name: "goodWithNoServerPerAuthority", wantConfig: &Config{ XDSServer: &ServerConfig{ - ServerURI: "trafficdirector.googleapis.com:443", - Creds: grpc.WithCredentialsBundle(google.NewComputeEngineCredentials()), - CredsType: "google_default", - TransportAPI: version.TransportV2, - NodeProto: v2NodeProto, + ServerURI: "trafficdirector.googleapis.com:443", + Creds: grpc.WithCredentialsBundle(google.NewComputeEngineCredentials()), + CredsType: "google_default", }, + NodeProto: v3NodeProto, ClientDefaultListenerResourceNameTemplate: "xdstp://xds.example.com/envoy.config.listener.v3.Listener/%s", Authorities: map[string]*Authority{ "xds.td.com": { @@ -998,10 +967,9 @@ func TestNewConfigWithFederation(t *testing.T) { func TestServerConfigMarshalAndUnmarshal(t *testing.T) { c := ServerConfig{ - ServerURI: "test-server", - Creds: nil, - CredsType: "test-creds", - TransportAPI: version.TransportV3, + ServerURI: "test-server", + Creds: nil, + CredsType: "test-creds", } bs, err := json.Marshal(c) diff --git a/xds/internal/xdsclient/e2e_test/authority_test.go b/xds/internal/xdsclient/e2e_test/authority_test.go index fdda7291aa18..f2cb06e300ab 100644 --- a/xds/internal/xdsclient/e2e_test/authority_test.go +++ b/xds/internal/xdsclient/e2e_test/authority_test.go @@ -32,7 +32,6 @@ import ( "google.golang.org/grpc/xds/internal/xdsclient" "google.golang.org/grpc/xds/internal/xdsclient/bootstrap" "google.golang.org/grpc/xds/internal/xdsclient/xdsresource" - "google.golang.org/grpc/xds/internal/xdsclient/xdsresource/version" v3clusterpb "github.com/envoyproxy/go-control-plane/envoy/config/cluster/v3" v3corepb "github.com/envoyproxy/go-control-plane/envoy/config/core/v3" @@ -96,20 +95,17 @@ func setupForAuthorityTests(ctx context.Context, t *testing.T, idleTimeout time. nodeID := uuid.New().String() client, close, err := xdsclient.NewWithConfigForTesting(&bootstrap.Config{ XDSServer: &bootstrap.ServerConfig{ - ServerURI: defaultAuthorityServer.Address, - Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), - TransportAPI: version.TransportV3, - NodeProto: &v3corepb.Node{Id: nodeID}, + ServerURI: defaultAuthorityServer.Address, + Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), }, + NodeProto: &v3corepb.Node{Id: nodeID}, Authorities: map[string]*bootstrap.Authority{ testAuthority1: {}, testAuthority2: {}, testAuthority3: { XDSServer: &bootstrap.ServerConfig{ - ServerURI: nonDefaultAuthorityServer.Address, - Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), - TransportAPI: version.TransportV3, - NodeProto: &v3corepb.Node{Id: nodeID}, + ServerURI: nonDefaultAuthorityServer.Address, + Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), }, }, }, diff --git a/xds/internal/xdsclient/e2e_test/cds_watchers_test.go b/xds/internal/xdsclient/e2e_test/cds_watchers_test.go index 7119344296e6..4f2d9a0b381a 100644 --- a/xds/internal/xdsclient/e2e_test/cds_watchers_test.go +++ b/xds/internal/xdsclient/e2e_test/cds_watchers_test.go @@ -36,7 +36,6 @@ import ( "google.golang.org/grpc/xds/internal/xdsclient" "google.golang.org/grpc/xds/internal/xdsclient/bootstrap" "google.golang.org/grpc/xds/internal/xdsclient/xdsresource" - "google.golang.org/grpc/xds/internal/xdsclient/xdsresource/version" v3clusterpb "github.com/envoyproxy/go-control-plane/envoy/config/cluster/v3" v3corepb "github.com/envoyproxy/go-control-plane/envoy/config/core/v3" @@ -534,11 +533,10 @@ func (s) TestCDSWatch_ExpiryTimerFiresBeforeResponse(t *testing.T) { // Create an xDS client talking to a non-existent management server. client, close, err := xdsclient.NewWithConfigForTesting(&bootstrap.Config{ XDSServer: &bootstrap.ServerConfig{ - ServerURI: "dummy management server address", - Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), - TransportAPI: version.TransportV3, - NodeProto: &v3corepb.Node{}, + ServerURI: "dummy management server address", + Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), }, + NodeProto: &v3corepb.Node{}, }, defaultTestWatchExpiryTimeout, time.Duration(0)) if err != nil { t.Fatalf("failed to create xds client: %v", err) @@ -581,11 +579,10 @@ func (s) TestCDSWatch_ValidResponseCancelsExpiryTimerBehavior(t *testing.T) { nodeID := uuid.New().String() client, close, err := xdsclient.NewWithConfigForTesting(&bootstrap.Config{ XDSServer: &bootstrap.ServerConfig{ - ServerURI: mgmtServer.Address, - Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), - TransportAPI: version.TransportV3, - NodeProto: &v3corepb.Node{Id: nodeID}, + ServerURI: mgmtServer.Address, + Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), }, + NodeProto: &v3corepb.Node{Id: nodeID}, }, defaultTestWatchExpiryTimeout, time.Duration(0)) if err != nil { t.Fatalf("failed to create xds client: %v", err) diff --git a/xds/internal/xdsclient/e2e_test/eds_watchers_test.go b/xds/internal/xdsclient/e2e_test/eds_watchers_test.go index 2b3216c268cc..3b5e7c4b3fdf 100644 --- a/xds/internal/xdsclient/e2e_test/eds_watchers_test.go +++ b/xds/internal/xdsclient/e2e_test/eds_watchers_test.go @@ -37,7 +37,6 @@ import ( "google.golang.org/grpc/xds/internal/xdsclient" "google.golang.org/grpc/xds/internal/xdsclient/bootstrap" "google.golang.org/grpc/xds/internal/xdsclient/xdsresource" - "google.golang.org/grpc/xds/internal/xdsclient/xdsresource/version" "google.golang.org/protobuf/types/known/wrapperspb" v3corepb "github.com/envoyproxy/go-control-plane/envoy/config/core/v3" @@ -591,11 +590,10 @@ func (s) TestEDSWatch_ExpiryTimerFiresBeforeResponse(t *testing.T) { // Create an xDS client talking to a non-existent management server. client, close, err := xdsclient.NewWithConfigForTesting(&bootstrap.Config{ XDSServer: &bootstrap.ServerConfig{ - ServerURI: "dummy management server address", - Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), - TransportAPI: version.TransportV3, - NodeProto: &v3corepb.Node{}, + ServerURI: "dummy management server address", + Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), }, + NodeProto: &v3corepb.Node{}, }, defaultTestWatchExpiryTimeout, time.Duration(0)) if err != nil { t.Fatalf("failed to create xds client: %v", err) @@ -638,11 +636,10 @@ func (s) TestEDSWatch_ValidResponseCancelsExpiryTimerBehavior(t *testing.T) { nodeID := uuid.New().String() client, close, err := xdsclient.NewWithConfigForTesting(&bootstrap.Config{ XDSServer: &bootstrap.ServerConfig{ - ServerURI: mgmtServer.Address, - Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), - TransportAPI: version.TransportV3, - NodeProto: &v3corepb.Node{Id: nodeID}, + ServerURI: mgmtServer.Address, + Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), }, + NodeProto: &v3corepb.Node{Id: nodeID}, }, defaultTestWatchExpiryTimeout, time.Duration(0)) if err != nil { t.Fatalf("failed to create xds client: %v", err) diff --git a/xds/internal/xdsclient/e2e_test/federation_watchers_test.go b/xds/internal/xdsclient/e2e_test/federation_watchers_test.go index e2e6d5dabc31..1218a4527a5a 100644 --- a/xds/internal/xdsclient/e2e_test/federation_watchers_test.go +++ b/xds/internal/xdsclient/e2e_test/federation_watchers_test.go @@ -62,7 +62,6 @@ func setupForFederationWatchersTest(t *testing.T) (*e2e.ManagementServer, string nodeID := uuid.New().String() bootstrapContents, err := bootstrap.Contents(bootstrap.Options{ - Version: bootstrap.TransportV3, NodeID: nodeID, ServerURI: serverDefaultAuthority.Address, ServerListenerResourceNameTemplate: e2e.ServerListenerResourceNameTemplate, diff --git a/xds/internal/xdsclient/e2e_test/lds_watchers_test.go b/xds/internal/xdsclient/e2e_test/lds_watchers_test.go index ac186e3d25ff..0da626dda3d7 100644 --- a/xds/internal/xdsclient/e2e_test/lds_watchers_test.go +++ b/xds/internal/xdsclient/e2e_test/lds_watchers_test.go @@ -39,7 +39,6 @@ import ( "google.golang.org/grpc/xds/internal/xdsclient" "google.golang.org/grpc/xds/internal/xdsclient/bootstrap" "google.golang.org/grpc/xds/internal/xdsclient/xdsresource" - "google.golang.org/grpc/xds/internal/xdsclient/xdsresource/version" v3corepb "github.com/envoyproxy/go-control-plane/envoy/config/core/v3" v3listenerpb "github.com/envoyproxy/go-control-plane/envoy/config/listener/v3" @@ -583,11 +582,10 @@ func (s) TestLDSWatch_ExpiryTimerFiresBeforeResponse(t *testing.T) { // Create an xDS client talking to a non-existent management server. client, close, err := xdsclient.NewWithConfigForTesting(&bootstrap.Config{ XDSServer: &bootstrap.ServerConfig{ - ServerURI: "dummy management server address", - Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), - TransportAPI: version.TransportV3, - NodeProto: &v3corepb.Node{}, + ServerURI: "dummy management server address", + Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), }, + NodeProto: &v3corepb.Node{}, }, defaultTestWatchExpiryTimeout, time.Duration(0)) if err != nil { t.Fatalf("failed to create xds client: %v", err) @@ -630,11 +628,10 @@ func (s) TestLDSWatch_ValidResponseCancelsExpiryTimerBehavior(t *testing.T) { nodeID := uuid.New().String() client, close, err := xdsclient.NewWithConfigForTesting(&bootstrap.Config{ XDSServer: &bootstrap.ServerConfig{ - ServerURI: mgmtServer.Address, - Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), - TransportAPI: version.TransportV3, - NodeProto: &v3corepb.Node{Id: nodeID}, + ServerURI: mgmtServer.Address, + Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), }, + NodeProto: &v3corepb.Node{Id: nodeID}, }, defaultTestWatchExpiryTimeout, time.Duration(0)) if err != nil { t.Fatalf("failed to create xds client: %v", err) diff --git a/xds/internal/xdsclient/e2e_test/rds_watchers_test.go b/xds/internal/xdsclient/e2e_test/rds_watchers_test.go index 79d2bd7edbe6..6bf3f7a27c5e 100644 --- a/xds/internal/xdsclient/e2e_test/rds_watchers_test.go +++ b/xds/internal/xdsclient/e2e_test/rds_watchers_test.go @@ -36,7 +36,6 @@ import ( "google.golang.org/grpc/xds/internal/xdsclient" "google.golang.org/grpc/xds/internal/xdsclient/bootstrap" "google.golang.org/grpc/xds/internal/xdsclient/xdsresource" - "google.golang.org/grpc/xds/internal/xdsclient/xdsresource/version" "google.golang.org/protobuf/types/known/wrapperspb" v3corepb "github.com/envoyproxy/go-control-plane/envoy/config/core/v3" @@ -624,11 +623,10 @@ func (s) TestRDSWatch_ExpiryTimerFiresBeforeResponse(t *testing.T) { // Create an xDS client talking to a non-existent management server. client, close, err := xdsclient.NewWithConfigForTesting(&bootstrap.Config{ XDSServer: &bootstrap.ServerConfig{ - ServerURI: "dummy management server address", - Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), - TransportAPI: version.TransportV3, - NodeProto: &v3corepb.Node{}, + ServerURI: "dummy management server address", + Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), }, + NodeProto: &v3corepb.Node{}, }, defaultTestWatchExpiryTimeout, time.Duration(0)) if err != nil { t.Fatalf("failed to create xds client: %v", err) @@ -671,11 +669,10 @@ func (s) TestRDSWatch_ValidResponseCancelsExpiryTimerBehavior(t *testing.T) { nodeID := uuid.New().String() client, close, err := xdsclient.NewWithConfigForTesting(&bootstrap.Config{ XDSServer: &bootstrap.ServerConfig{ - ServerURI: mgmtServer.Address, - Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), - TransportAPI: version.TransportV3, - NodeProto: &v3corepb.Node{Id: nodeID}, + ServerURI: mgmtServer.Address, + Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), }, + NodeProto: &v3corepb.Node{Id: nodeID}, }, defaultTestWatchExpiryTimeout, time.Duration(0)) if err != nil { t.Fatalf("failed to create xds client: %v", err) diff --git a/xds/internal/xdsclient/e2e_test/resource_update_test.go b/xds/internal/xdsclient/e2e_test/resource_update_test.go index 7bef342feb3d..415c21998bae 100644 --- a/xds/internal/xdsclient/e2e_test/resource_update_test.go +++ b/xds/internal/xdsclient/e2e_test/resource_update_test.go @@ -37,7 +37,6 @@ import ( "google.golang.org/grpc/xds/internal/xdsclient" "google.golang.org/grpc/xds/internal/xdsclient/bootstrap" "google.golang.org/grpc/xds/internal/xdsclient/xdsresource" - "google.golang.org/grpc/xds/internal/xdsclient/xdsresource/version" "google.golang.org/protobuf/proto" "google.golang.org/protobuf/testing/protocmp" "google.golang.org/protobuf/types/known/anypb" @@ -245,12 +244,11 @@ func (s) TestHandleListenerResponseFromManagementServer(t *testing.T) { nodeID := uuid.New().String() client, close, err := xdsclient.NewWithConfigForTesting(&bootstrap.Config{ XDSServer: &bootstrap.ServerConfig{ - ServerURI: mgmtServer.Address, - Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), - CredsType: "insecure", - TransportAPI: version.TransportV3, - NodeProto: &v3corepb.Node{Id: nodeID}, + ServerURI: mgmtServer.Address, + Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), + CredsType: "insecure", }, + NodeProto: &v3corepb.Node{Id: nodeID}, }, defaultTestWatchExpiryTimeout, time.Duration(0)) if err != nil { t.Fatalf("failed to create xds client: %v", err) @@ -512,12 +510,11 @@ func (s) TestHandleRouteConfigResponseFromManagementServer(t *testing.T) { nodeID := uuid.New().String() client, close, err := xdsclient.NewWithConfigForTesting(&bootstrap.Config{ XDSServer: &bootstrap.ServerConfig{ - ServerURI: mgmtServer.Address, - Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), - CredsType: "insecure", - TransportAPI: version.TransportV3, - NodeProto: &v3corepb.Node{Id: nodeID}, + ServerURI: mgmtServer.Address, + Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), + CredsType: "insecure", }, + NodeProto: &v3corepb.Node{Id: nodeID}, }, defaultTestWatchExpiryTimeout, time.Duration(0)) if err != nil { t.Fatalf("failed to create xds client: %v", err) @@ -755,12 +752,11 @@ func (s) TestHandleClusterResponseFromManagementServer(t *testing.T) { nodeID := uuid.New().String() client, close, err := xdsclient.NewWithConfigForTesting(&bootstrap.Config{ XDSServer: &bootstrap.ServerConfig{ - ServerURI: mgmtServer.Address, - Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), - CredsType: "insecure", - TransportAPI: version.TransportV3, - NodeProto: &v3corepb.Node{Id: nodeID}, + ServerURI: mgmtServer.Address, + Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), + CredsType: "insecure", }, + NodeProto: &v3corepb.Node{Id: nodeID}, }, defaultTestWatchExpiryTimeout, time.Duration(0)) if err != nil { t.Fatalf("failed to create xds client: %v", err) @@ -1081,12 +1077,11 @@ func (s) TestHandleEndpointsResponseFromManagementServer(t *testing.T) { nodeID := uuid.New().String() client, close, err := xdsclient.NewWithConfigForTesting(&bootstrap.Config{ XDSServer: &bootstrap.ServerConfig{ - ServerURI: mgmtServer.Address, - Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), - CredsType: "insecure", - TransportAPI: version.TransportV3, - NodeProto: &v3corepb.Node{Id: nodeID}, + ServerURI: mgmtServer.Address, + Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), + CredsType: "insecure", }, + NodeProto: &v3corepb.Node{Id: nodeID}, }, defaultTestWatchExpiryTimeout, time.Duration(0)) if err != nil { t.Fatalf("failed to create xds client: %v", err) diff --git a/xds/internal/xdsclient/loadreport_test.go b/xds/internal/xdsclient/loadreport_test.go index 631793454b85..23fb2d4cf46c 100644 --- a/xds/internal/xdsclient/loadreport_test.go +++ b/xds/internal/xdsclient/loadreport_test.go @@ -30,7 +30,6 @@ import ( "google.golang.org/grpc/status" "google.golang.org/grpc/xds/internal/testutils/fakeserver" "google.golang.org/grpc/xds/internal/xdsclient/bootstrap" - "google.golang.org/grpc/xds/internal/xdsclient/xdsresource/version" "google.golang.org/protobuf/testing/protocmp" v3corepb "github.com/envoyproxy/go-control-plane/envoy/config/core/v3" @@ -52,11 +51,10 @@ func (s) TestLRSClient(t *testing.T) { xdsC, close, err := NewWithConfigForTesting(&bootstrap.Config{ XDSServer: &bootstrap.ServerConfig{ - ServerURI: fs.Address, - Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), - TransportAPI: version.TransportV3, - NodeProto: &v3corepb.Node{}, + ServerURI: fs.Address, + Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), }, + NodeProto: &v3corepb.Node{}, }, defaultClientWatchExpiryTimeout, time.Duration(0)) if err != nil { t.Fatalf("failed to create xds client: %v", err) @@ -66,11 +64,9 @@ func (s) TestLRSClient(t *testing.T) { // Report to the same address should not create new ClientConn. store1, lrsCancel1 := xdsC.ReportLoad( &bootstrap.ServerConfig{ - ServerURI: fs.Address, - Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), - CredsType: "insecure", - TransportAPI: version.TransportV3, - NodeProto: &v3corepb.Node{}, + ServerURI: fs.Address, + Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), + CredsType: "insecure", }, ) defer lrsCancel1() @@ -96,11 +92,9 @@ func (s) TestLRSClient(t *testing.T) { // Report to a different address should create new ClientConn. store2, lrsCancel2 := xdsC.ReportLoad( &bootstrap.ServerConfig{ - ServerURI: fs2.Address, - Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), - CredsType: "insecure", - TransportAPI: version.TransportV2, - NodeProto: &v3corepb.Node{}, + ServerURI: fs2.Address, + Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), + CredsType: "insecure", }, ) defer lrsCancel2() diff --git a/xds/internal/xdsclient/singleton.go b/xds/internal/xdsclient/singleton.go index 4c42ae424971..96db8ef51387 100644 --- a/xds/internal/xdsclient/singleton.go +++ b/xds/internal/xdsclient/singleton.go @@ -94,11 +94,7 @@ func newRefCountedWithConfig(fallbackConfig *bootstrap.Config) (XDSClient, func( singletonClient = &clientRefCounted{clientImpl: c, refCount: 1} singletonClientImplCreateHook() - nodeID := "" - if node, ok := config.XDSServer.NodeProto.(interface{ GetId() string }); ok { - nodeID = node.GetId() - } - logger.Infof("xDS node ID: %s", nodeID) + logger.Infof("xDS node ID: %s", config.NodeProto.GetId()) return singletonClient, grpcsync.OnceFunc(clientRefCountedClose), nil } diff --git a/xds/internal/xdsclient/singleton_test.go b/xds/internal/xdsclient/singleton_test.go index 491dc037d969..1875ea118d09 100644 --- a/xds/internal/xdsclient/singleton_test.go +++ b/xds/internal/xdsclient/singleton_test.go @@ -36,7 +36,6 @@ func (s) TestClientNewSingleton(t *testing.T) { cleanup, err := bootstrap.CreateFile(bootstrap.Options{ NodeID: nodeID, ServerURI: "non-existent-server-address", - Version: bootstrap.TransportV3, }) if err != nil { t.Fatal(err) diff --git a/xds/internal/xdsclient/transport/loadreport_test.go b/xds/internal/xdsclient/transport/loadreport_test.go index 815ca25b27b7..3babfe3fbd28 100644 --- a/xds/internal/xdsclient/transport/loadreport_test.go +++ b/xds/internal/xdsclient/transport/loadreport_test.go @@ -30,7 +30,6 @@ import ( "google.golang.org/grpc/xds/internal/testutils/fakeserver" "google.golang.org/grpc/xds/internal/xdsclient/bootstrap" "google.golang.org/grpc/xds/internal/xdsclient/transport" - "google.golang.org/grpc/xds/internal/xdsclient/xdsresource/version" "google.golang.org/protobuf/testing/protocmp" "google.golang.org/protobuf/types/known/durationpb" @@ -47,16 +46,15 @@ func (s) TestReportLoad(t *testing.T) { // Construct the server config to represent the management server. nodeProto := &v3corepb.Node{Id: uuid.New().String()} serverCfg := bootstrap.ServerConfig{ - ServerURI: mgmtServer.Address, - Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), - CredsType: "insecure", - TransportAPI: version.TransportV3, - NodeProto: nodeProto, + ServerURI: mgmtServer.Address, + Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), + CredsType: "insecure", } // Create a transport to the fake management server. tr, err := transport.New(transport.Options{ ServerCfg: serverCfg, + NodeProto: nodeProto, UpdateHandler: func(transport.ResourceUpdate) error { return nil }, // No ADS validation. StreamErrorHandler: func(error) {}, // No ADS stream error handling. Backoff: func(int) time.Duration { return time.Duration(0) }, // No backoff. diff --git a/xds/internal/xdsclient/transport/transport.go b/xds/internal/xdsclient/transport/transport.go index 814ca5f87263..10c863c5e6bd 100644 --- a/xds/internal/xdsclient/transport/transport.go +++ b/xds/internal/xdsclient/transport/transport.go @@ -143,6 +143,9 @@ type Options struct { Backoff func(retries int) time.Duration // Logger does logging with a prefix. Logger *grpclog.PrefixLogger + // NodeProto contains the Node proto to be used in xDS requests. This will be + // of type *v3corepb.Node. + NodeProto *v3corepb.Node } // For overriding in unit tests. @@ -161,11 +164,6 @@ func New(opts Options) (*Transport, error) { return nil, errors.New("missing stream error handler when creating a new transport") } - node, ok := opts.ServerCfg.NodeProto.(*v3corepb.Node) - if !ok { - return nil, fmt.Errorf("unexpected type %T for NodeProto, want %T", opts.ServerCfg.NodeProto, &v3corepb.Node{}) - } - // Dial the xDS management with the passed in credentials. dopts := []grpc.DialOption{ opts.ServerCfg.Creds, @@ -193,7 +191,7 @@ func New(opts Options) (*Transport, error) { adsStreamErrHandler: opts.StreamErrorHandler, lrsStore: load.NewStore(), backoff: boff, - nodeProto: node, + nodeProto: opts.NodeProto, logger: opts.Logger, adsStreamCh: make(chan adsStream, 1), diff --git a/xds/internal/xdsclient/transport/transport_ack_nack_test.go b/xds/internal/xdsclient/transport/transport_ack_nack_test.go index 30b56674ed03..90f3ec1983be 100644 --- a/xds/internal/xdsclient/transport/transport_ack_nack_test.go +++ b/xds/internal/xdsclient/transport/transport_ack_nack_test.go @@ -137,11 +137,9 @@ func (s) TestSimpleAckAndNack(t *testing.T) { // Construct the server config to represent the management server. serverCfg := bootstrap.ServerConfig{ - ServerURI: mgmtServer.Address, - Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), - CredsType: "insecure", - TransportAPI: version.TransportV3, - NodeProto: &v3corepb.Node{Id: nodeID}, + ServerURI: mgmtServer.Address, + Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), + CredsType: "insecure", } // Create a new transport. @@ -149,6 +147,7 @@ func (s) TestSimpleAckAndNack(t *testing.T) { ServerCfg: serverCfg, UpdateHandler: dataModelValidator, StreamErrorHandler: func(err error) {}, + NodeProto: &v3corepb.Node{Id: nodeID}, }) if err != nil { t.Fatalf("Failed to create xDS transport: %v", err) @@ -324,11 +323,9 @@ func (s) TestInvalidFirstResponse(t *testing.T) { // Construct the server config to represent the management server. serverCfg := bootstrap.ServerConfig{ - ServerURI: mgmtServer.Address, - Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), - CredsType: "insecure", - TransportAPI: version.TransportV3, - NodeProto: &v3corepb.Node{Id: nodeID}, + ServerURI: mgmtServer.Address, + Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), + CredsType: "insecure", } // Create a new transport. @@ -336,6 +333,7 @@ func (s) TestInvalidFirstResponse(t *testing.T) { ServerCfg: serverCfg, UpdateHandler: dataModelValidator, StreamErrorHandler: func(err error) {}, + NodeProto: &v3corepb.Node{Id: nodeID}, }) if err != nil { t.Fatalf("Failed to create xDS transport: %v", err) @@ -453,11 +451,9 @@ func (s) TestResourceIsNotRequestedAnymore(t *testing.T) { // Construct the server config to represent the management server. serverCfg := bootstrap.ServerConfig{ - ServerURI: mgmtServer.Address, - Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), - CredsType: "insecure", - TransportAPI: version.TransportV3, - NodeProto: &v3corepb.Node{Id: nodeID}, + ServerURI: mgmtServer.Address, + Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), + CredsType: "insecure", } // Create a new transport. @@ -465,6 +461,7 @@ func (s) TestResourceIsNotRequestedAnymore(t *testing.T) { ServerCfg: serverCfg, UpdateHandler: dataModelValidator, StreamErrorHandler: func(err error) {}, + NodeProto: &v3corepb.Node{Id: nodeID}, }) if err != nil { t.Fatalf("Failed to create xDS transport: %v", err) diff --git a/xds/internal/xdsclient/transport/transport_backoff_test.go b/xds/internal/xdsclient/transport/transport_backoff_test.go index 2753e459c366..a7726bbc509a 100644 --- a/xds/internal/xdsclient/transport/transport_backoff_test.go +++ b/xds/internal/xdsclient/transport/transport_backoff_test.go @@ -101,11 +101,9 @@ func (s) TestTransport_BackoffAfterStreamFailure(t *testing.T) { // Construct the server config to represent the management server. nodeID := uuid.New().String() serverCfg := bootstrap.ServerConfig{ - ServerURI: mgmtServer.Address, - Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), - CredsType: "insecure", - TransportAPI: version.TransportV3, - NodeProto: &v3corepb.Node{Id: nodeID}, + ServerURI: mgmtServer.Address, + Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), + CredsType: "insecure", } // Create a new transport. Since we are only testing backoff behavior here, @@ -119,7 +117,8 @@ func (s) TestTransport_BackoffAfterStreamFailure(t *testing.T) { default: } }, - Backoff: transportBackoff, + Backoff: transportBackoff, + NodeProto: &v3corepb.Node{Id: nodeID}, }) if err != nil { t.Fatalf("Failed to create xDS transport: %v", err) @@ -269,11 +268,9 @@ func (s) TestTransport_RetriesAfterBrokenStream(t *testing.T) { // Construct the server config to represent the management server. serverCfg := bootstrap.ServerConfig{ - ServerURI: lis.Addr().String(), - Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), - CredsType: "insecure", - TransportAPI: version.TransportV3, - NodeProto: &v3corepb.Node{Id: nodeID}, + ServerURI: lis.Addr().String(), + Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), + CredsType: "insecure", } // Create a new transport. Since we are only testing backoff behavior here, @@ -287,7 +284,8 @@ func (s) TestTransport_RetriesAfterBrokenStream(t *testing.T) { default: } }, - Backoff: func(int) time.Duration { return time.Duration(0) }, // No backoff. + Backoff: func(int) time.Duration { return time.Duration(0) }, // No backoff. + NodeProto: &v3corepb.Node{Id: nodeID}, }) if err != nil { t.Fatalf("Failed to create xDS transport: %v", err) @@ -408,11 +406,9 @@ func (s) TestTransport_ResourceRequestedBeforeStreamCreation(t *testing.T) { // Construct the server config to represent the management server. nodeID := uuid.New().String() serverCfg := bootstrap.ServerConfig{ - ServerURI: lis.Addr().String(), - Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), - CredsType: "insecure", - TransportAPI: version.TransportV3, - NodeProto: &v3corepb.Node{Id: nodeID}, + ServerURI: lis.Addr().String(), + Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), + CredsType: "insecure", } // Create a new transport. Since we are only testing backoff behavior here, @@ -422,6 +418,7 @@ func (s) TestTransport_ResourceRequestedBeforeStreamCreation(t *testing.T) { UpdateHandler: func(transport.ResourceUpdate) error { return nil }, // No data model layer validation. StreamErrorHandler: func(error) {}, // No stream error handling. Backoff: func(int) time.Duration { return time.Duration(0) }, // No backoff. + NodeProto: &v3corepb.Node{Id: nodeID}, }) if err != nil { t.Fatalf("Failed to create xDS transport: %v", err) diff --git a/xds/internal/xdsclient/transport/transport_new_test.go b/xds/internal/xdsclient/transport/transport_new_test.go index 60286d9eb156..5cbcb5da5d55 100644 --- a/xds/internal/xdsclient/transport/transport_new_test.go +++ b/xds/internal/xdsclient/transport/transport_new_test.go @@ -25,9 +25,7 @@ import ( "google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/xds/internal/xdsclient/bootstrap" "google.golang.org/grpc/xds/internal/xdsclient/transport" - "google.golang.org/grpc/xds/internal/xdsclient/xdsresource/version" - v2corepb "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" v3corepb "github.com/envoyproxy/go-control-plane/envoy/config/core/v3" ) @@ -54,8 +52,9 @@ func (s) TestNew(t *testing.T) { opts: transport.Options{ServerCfg: bootstrap.ServerConfig{ ServerURI: "server-address", Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), + }, NodeProto: &v3corepb.Node{}, - }}, + }, wantErrStr: "missing update handler when creating a new transport", }, { @@ -64,35 +63,20 @@ func (s) TestNew(t *testing.T) { ServerCfg: bootstrap.ServerConfig{ ServerURI: "server-address", Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), - NodeProto: &v3corepb.Node{}, }, + NodeProto: &v3corepb.Node{}, UpdateHandler: func(transport.ResourceUpdate) error { return nil }, }, wantErrStr: "missing stream error handler when creating a new transport", }, - { - name: "node proto version mismatch for v3", - opts: transport.Options{ - ServerCfg: bootstrap.ServerConfig{ - ServerURI: "server-address", - Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), - NodeProto: &v2corepb.Node{}, - TransportAPI: version.TransportV3, - }, - UpdateHandler: func(transport.ResourceUpdate) error { return nil }, - StreamErrorHandler: func(error) {}, - }, - wantErrStr: "unexpected type *core.Node for NodeProto, want *corev3.Node", - }, { name: "happy case", opts: transport.Options{ ServerCfg: bootstrap.ServerConfig{ - ServerURI: "server-address", - Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), - NodeProto: &v3corepb.Node{}, - TransportAPI: version.TransportV3, + ServerURI: "server-address", + Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), }, + NodeProto: &v3corepb.Node{}, UpdateHandler: func(transport.ResourceUpdate) error { return nil }, StreamErrorHandler: func(error) {}, }, diff --git a/xds/internal/xdsclient/transport/transport_resource_test.go b/xds/internal/xdsclient/transport/transport_resource_test.go index 62149fa4bf0b..eb050f639f58 100644 --- a/xds/internal/xdsclient/transport/transport_resource_test.go +++ b/xds/internal/xdsclient/transport/transport_resource_test.go @@ -178,11 +178,9 @@ func (s) TestHandleResponseFromManagementServer(t *testing.T) { // Construct the server config to represent the management server. serverCfg := bootstrap.ServerConfig{ - ServerURI: mgmtServer.Address, - Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), - CredsType: "insecure", - TransportAPI: version.TransportV3, - NodeProto: &v3corepb.Node{Id: uuid.New().String()}, + ServerURI: mgmtServer.Address, + Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), + CredsType: "insecure", } // Create a new transport. @@ -200,6 +198,7 @@ func (s) TestHandleResponseFromManagementServer(t *testing.T) { }, StreamErrorHandler: func(error) {}, // No stream error handling. Backoff: func(int) time.Duration { return time.Duration(0) }, // No backoff. + NodeProto: &v3corepb.Node{Id: uuid.New().String()}, }) if err != nil { t.Fatalf("Failed to create xDS transport: %v", err) diff --git a/xds/internal/xdsclient/transport/transport_test.go b/xds/internal/xdsclient/transport/transport_test.go index 41ebc1b4fe55..80b44aa3cc0f 100644 --- a/xds/internal/xdsclient/transport/transport_test.go +++ b/xds/internal/xdsclient/transport/transport_test.go @@ -25,7 +25,6 @@ import ( "google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/internal/grpctest" "google.golang.org/grpc/xds/internal/xdsclient/bootstrap" - "google.golang.org/grpc/xds/internal/xdsclient/xdsresource/version" ) type s struct { @@ -50,11 +49,10 @@ func (s) TestNewWithGRPCDial(t *testing.T) { // Create a new transport and ensure that the custom dialer was called. opts := Options{ ServerCfg: bootstrap.ServerConfig{ - ServerURI: "server-address", - Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), - NodeProto: &v3corepb.Node{}, - TransportAPI: version.TransportV3, + ServerURI: "server-address", + Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), }, + NodeProto: &v3corepb.Node{}, UpdateHandler: func(ResourceUpdate) error { return nil }, StreamErrorHandler: func(error) {}, } diff --git a/xds/internal/xdsclient/xdsresource/filter_chain.go b/xds/internal/xdsclient/xdsresource/filter_chain.go index f748cbc8ce29..0390412fdc89 100644 --- a/xds/internal/xdsclient/xdsresource/filter_chain.go +++ b/xds/internal/xdsclient/xdsresource/filter_chain.go @@ -649,7 +649,7 @@ func processNetworkFilters(filters []*v3listenerpb.Filter) (*FilterChain, error) // server-side." - A36 // Can specify v3 here, as will never get to this function // if v2. - routeU, err := generateRDSUpdateFromRouteConfiguration(hcm.GetRouteConfig(), false) + routeU, err := generateRDSUpdateFromRouteConfiguration(hcm.GetRouteConfig()) if err != nil { return nil, fmt.Errorf("failed to parse inline RDS resp: %v", err) } diff --git a/xds/internal/xdsclient/xdsresource/type.go b/xds/internal/xdsclient/xdsresource/type.go index d9c78997cffb..c629380d508b 100644 --- a/xds/internal/xdsclient/xdsresource/type.go +++ b/xds/internal/xdsclient/xdsresource/type.go @@ -51,38 +51,38 @@ type UpdateMetadata struct { // IsListenerResource returns true if the provider URL corresponds to an xDS // Listener resource. func IsListenerResource(url string) bool { - return url == version.V2ListenerURL || url == version.V3ListenerURL + return url == version.V3ListenerURL } // IsHTTPConnManagerResource returns true if the provider URL corresponds to an xDS // HTTPConnManager resource. func IsHTTPConnManagerResource(url string) bool { - return url == version.V2HTTPConnManagerURL || url == version.V3HTTPConnManagerURL + return url == version.V3HTTPConnManagerURL } // IsRouteConfigResource returns true if the provider URL corresponds to an xDS // RouteConfig resource. func IsRouteConfigResource(url string) bool { - return url == version.V2RouteConfigURL || url == version.V3RouteConfigURL + return url == version.V3RouteConfigURL } // IsClusterResource returns true if the provider URL corresponds to an xDS // Cluster resource. func IsClusterResource(url string) bool { - return url == version.V2ClusterURL || url == version.V3ClusterURL + return url == version.V3ClusterURL } // IsEndpointsResource returns true if the provider URL corresponds to an xDS // Endpoints resource. func IsEndpointsResource(url string) bool { - return url == version.V2EndpointsURL || url == version.V3EndpointsURL + return url == version.V3EndpointsURL } // unwrapResource unwraps and returns the inner resource if it's in a resource // wrapper. The original resource is returned if it's not wrapped. func unwrapResource(r *anypb.Any) (*anypb.Any, error) { url := r.GetTypeUrl() - if url != version.V2ResourceWrapperURL && url != version.V3ResourceWrapperURL { + if url != version.V3ResourceWrapperURL { // Not wrapped. return r, nil } @@ -165,57 +165,3 @@ func (r ResourceType) String() string { return "UnknownResource" } } - -var v2ResourceTypeToURL = map[ResourceType]string{ - ListenerResource: version.V2ListenerURL, - HTTPConnManagerResource: version.V2HTTPConnManagerURL, - RouteConfigResource: version.V2RouteConfigURL, - ClusterResource: version.V2ClusterURL, - EndpointsResource: version.V2EndpointsURL, -} -var v3ResourceTypeToURL = map[ResourceType]string{ - ListenerResource: version.V3ListenerURL, - HTTPConnManagerResource: version.V3HTTPConnManagerURL, - RouteConfigResource: version.V3RouteConfigURL, - ClusterResource: version.V3ClusterURL, - EndpointsResource: version.V3EndpointsURL, -} - -// URL returns the transport protocol specific resource type URL. -func (r ResourceType) URL(v version.TransportAPI) string { - var mapping map[ResourceType]string - switch v { - case version.TransportV2: - mapping = v2ResourceTypeToURL - case version.TransportV3: - mapping = v3ResourceTypeToURL - default: - return "UnknownResource" - } - if url, ok := mapping[r]; ok { - return url - } - return "UnknownResource" -} - -var urlToResourceType = map[string]ResourceType{ - version.V2ListenerURL: ListenerResource, - version.V2RouteConfigURL: RouteConfigResource, - version.V2ClusterURL: ClusterResource, - version.V2EndpointsURL: EndpointsResource, - version.V2HTTPConnManagerURL: HTTPConnManagerResource, - version.V3ListenerURL: ListenerResource, - version.V3RouteConfigURL: RouteConfigResource, - version.V3ClusterURL: ClusterResource, - version.V3EndpointsURL: EndpointsResource, - version.V3HTTPConnManagerURL: HTTPConnManagerResource, -} - -// ResourceTypeFromURL returns the xDS resource type associated with the given -// resource type URL. -func ResourceTypeFromURL(url string) ResourceType { - if typ, ok := urlToResourceType[url]; ok { - return typ - } - return UnknownResource -} diff --git a/xds/internal/xdsclient/xdsresource/unmarshal_cds_test.go b/xds/internal/xdsclient/xdsresource/unmarshal_cds_test.go index 74af95e627fb..632ab8fb06e9 100644 --- a/xds/internal/xdsclient/xdsresource/unmarshal_cds_test.go +++ b/xds/internal/xdsclient/xdsresource/unmarshal_cds_test.go @@ -34,8 +34,6 @@ import ( "google.golang.org/protobuf/types/known/durationpb" "google.golang.org/protobuf/types/known/wrapperspb" - v2xdspb "github.com/envoyproxy/go-control-plane/envoy/api/v2" - v2corepb "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" v3clusterpb "github.com/envoyproxy/go-control-plane/envoy/config/cluster/v3" v3corepb "github.com/envoyproxy/go-control-plane/envoy/config/core/v3" v3endpointpb "github.com/envoyproxy/go-control-plane/envoy/config/endpoint/v3" @@ -1382,31 +1380,10 @@ func (s) TestValidateClusterWithSecurityConfig(t *testing.T) { func (s) TestUnmarshalCluster(t *testing.T) { const ( - v2ClusterName = "v2clusterName" v3ClusterName = "v3clusterName" - v2Service = "v2Service" - v3Service = "v2Service" + v3Service = "v3Service" ) var ( - v2ClusterAny = testutils.MarshalAny(&v2xdspb.Cluster{ - Name: v2ClusterName, - ClusterDiscoveryType: &v2xdspb.Cluster_Type{Type: v2xdspb.Cluster_EDS}, - EdsClusterConfig: &v2xdspb.Cluster_EdsClusterConfig{ - EdsConfig: &v2corepb.ConfigSource{ - ConfigSourceSpecifier: &v2corepb.ConfigSource_Ads{ - Ads: &v2corepb.AggregatedConfigSource{}, - }, - }, - ServiceName: v2Service, - }, - LbPolicy: v2xdspb.Cluster_ROUND_ROBIN, - LrsServer: &v2corepb.ConfigSource{ - ConfigSourceSpecifier: &v2corepb.ConfigSource_Self{ - Self: &v2corepb.SelfConfigSource{}, - }, - }, - }) - v3ClusterAny = testutils.MarshalAny(&v3clusterpb.Cluster{ Name: v3ClusterName, ClusterDiscoveryType: &v3clusterpb.Cluster_Type{Type: v3clusterpb.Cluster_EDS}, @@ -1496,26 +1473,6 @@ func (s) TestUnmarshalCluster(t *testing.T) { wantName: "test", wantErr: true, }, - { - name: "v2 cluster", - resource: v2ClusterAny, - wantName: v2ClusterName, - wantUpdate: ClusterUpdate{ - ClusterName: v2ClusterName, - EDSServiceName: v2Service, LRSServerConfig: ClusterLRSServerSelf, - Raw: v2ClusterAny, - }, - }, - { - name: "v2 cluster wrapped", - resource: testutils.MarshalAny(&v2xdspb.Resource{Resource: v2ClusterAny}), - wantName: v2ClusterName, - wantUpdate: ClusterUpdate{ - ClusterName: v2ClusterName, - EDSServiceName: v2Service, LRSServerConfig: ClusterLRSServerSelf, - Raw: v2ClusterAny, - }, - }, { name: "v3 cluster", resource: v3ClusterAny, diff --git a/xds/internal/xdsclient/xdsresource/unmarshal_lds.go b/xds/internal/xdsclient/xdsresource/unmarshal_lds.go index e1b49c217873..ffcf9477f514 100644 --- a/xds/internal/xdsclient/xdsresource/unmarshal_lds.go +++ b/xds/internal/xdsclient/xdsresource/unmarshal_lds.go @@ -30,7 +30,6 @@ import ( "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes" "google.golang.org/grpc/xds/internal/httpfilter" - "google.golang.org/grpc/xds/internal/xdsclient/xdsresource/version" "google.golang.org/protobuf/types/known/anypb" ) @@ -43,14 +42,12 @@ func unmarshalListenerResource(r *anypb.Any) (string, ListenerUpdate, error) { if !IsListenerResource(r.GetTypeUrl()) { return "", ListenerUpdate{}, fmt.Errorf("unexpected resource type: %q ", r.GetTypeUrl()) } - // TODO: Pass version.TransportAPI instead of relying upon the type URL - v2 := r.GetTypeUrl() == version.V2ListenerURL lis := &v3listenerpb.Listener{} if err := proto.Unmarshal(r.GetValue(), lis); err != nil { return "", ListenerUpdate{}, fmt.Errorf("failed to unmarshal resource: %v", err) } - lu, err := processListener(lis, v2) + lu, err := processListener(lis) if err != nil { return lis.GetName(), ListenerUpdate{}, err } @@ -58,16 +55,16 @@ func unmarshalListenerResource(r *anypb.Any) (string, ListenerUpdate, error) { return lis.GetName(), *lu, nil } -func processListener(lis *v3listenerpb.Listener, v2 bool) (*ListenerUpdate, error) { +func processListener(lis *v3listenerpb.Listener) (*ListenerUpdate, error) { if lis.GetApiListener() != nil { - return processClientSideListener(lis, v2) + return processClientSideListener(lis) } return processServerSideListener(lis) } // processClientSideListener checks if the provided Listener proto meets // the expected criteria. If so, it returns a non-empty routeConfigName. -func processClientSideListener(lis *v3listenerpb.Listener, v2 bool) (*ListenerUpdate, error) { +func processClientSideListener(lis *v3listenerpb.Listener) (*ListenerUpdate, error) { update := &ListenerUpdate{} apiLisAny := lis.GetApiListener().GetApiListener() @@ -99,7 +96,7 @@ func processClientSideListener(lis *v3listenerpb.Listener, v2 bool) (*ListenerUp } update.RouteConfigName = name case *v3httppb.HttpConnectionManager_RouteConfig: - routeU, err := generateRDSUpdateFromRouteConfiguration(apiLis.GetRouteConfig(), v2) + routeU, err := generateRDSUpdateFromRouteConfiguration(apiLis.GetRouteConfig()) if err != nil { return nil, fmt.Errorf("failed to parse inline RDS resp: %v", err) } @@ -110,10 +107,6 @@ func processClientSideListener(lis *v3listenerpb.Listener, v2 bool) (*ListenerUp return nil, fmt.Errorf("unsupported type %T for RouteSpecifier", apiLis.RouteSpecifier) } - if v2 { - return update, nil - } - // The following checks and fields only apply to xDS protocol versions v3+. update.MaxStreamDuration = apiLis.GetCommonHttpProtocolOptions().GetMaxStreamDuration().AsDuration() diff --git a/xds/internal/xdsclient/xdsresource/unmarshal_lds_test.go b/xds/internal/xdsclient/xdsresource/unmarshal_lds_test.go index f753bd00a8cc..d2ce5ac34424 100644 --- a/xds/internal/xdsclient/xdsresource/unmarshal_lds_test.go +++ b/xds/internal/xdsclient/xdsresource/unmarshal_lds_test.go @@ -23,6 +23,7 @@ import ( "testing" "time" + v2xdspb "github.com/envoyproxy/go-control-plane/envoy/api/v2" "github.com/golang/protobuf/proto" "github.com/google/go-cmp/cmp" "google.golang.org/grpc/internal/envconfig" @@ -35,11 +36,7 @@ import ( v1udpatypepb "github.com/cncf/udpa/go/udpa/type/v1" v3cncftypepb "github.com/cncf/xds/go/xds/type/v3" - v2xdspb "github.com/envoyproxy/go-control-plane/envoy/api/v2" - v2corepb "github.com/envoyproxy/go-control-plane/envoy/api/v2/core" v3corepb "github.com/envoyproxy/go-control-plane/envoy/config/core/v3" - v2httppb "github.com/envoyproxy/go-control-plane/envoy/config/filter/network/http_connection_manager/v2" - v2listenerpb "github.com/envoyproxy/go-control-plane/envoy/config/listener/v2" v3listenerpb "github.com/envoyproxy/go-control-plane/envoy/config/listener/v3" rpb "github.com/envoyproxy/go-control-plane/envoy/config/rbac/v3" v3routepb "github.com/envoyproxy/go-control-plane/envoy/config/route/v3" @@ -58,30 +55,12 @@ import ( func (s) TestUnmarshalListener_ClientSide(t *testing.T) { const ( - v2LDSTarget = "lds.target.good:2222" v3LDSTarget = "lds.target.good:3333" - v2RouteConfigName = "v2RouteConfig" v3RouteConfigName = "v3RouteConfig" routeName = "routeName" - testVersion = "test-version-lds-client" ) var ( - v2Lis = testutils.MarshalAny(&v2xdspb.Listener{ - Name: v2LDSTarget, - ApiListener: &v2listenerpb.ApiListener{ - ApiListener: testutils.MarshalAny(&v2httppb.HttpConnectionManager{ - RouteSpecifier: &v2httppb.HttpConnectionManager_Rds{ - Rds: &v2httppb.Rds{ - ConfigSource: &v2corepb.ConfigSource{ - ConfigSourceSpecifier: &v2corepb.ConfigSource_Ads{Ads: &v2corepb.AggregatedConfigSource{}}, - }, - RouteConfigName: v2RouteConfigName, - }, - }, - }), - }, - }) customFilter = &v3httppb.HttpFilter{ Name: "customFilter", ConfigType: &v3httppb.HttpFilter_TypedConfig{TypedConfig: customFilterConfig}, @@ -521,24 +500,6 @@ func (s) TestUnmarshalListener_ClientSide(t *testing.T) { Raw: v3LisWithFilters(unknownOptionalFilter), }, }, - { - name: "v2 listener resource", - resource: v2Lis, - wantName: v2LDSTarget, - wantUpdate: ListenerUpdate{ - RouteConfigName: v2RouteConfigName, - Raw: v2Lis, - }, - }, - { - name: "v2 listener resource wrapped", - resource: testutils.MarshalAny(&v2xdspb.Resource{Resource: v2Lis}), - wantName: v2LDSTarget, - wantUpdate: ListenerUpdate{ - RouteConfigName: v2RouteConfigName, - Raw: v2Lis, - }, - }, { name: "v3 listener resource", resource: v3LisWithFilters(), diff --git a/xds/internal/xdsclient/xdsresource/unmarshal_rds.go b/xds/internal/xdsclient/xdsresource/unmarshal_rds.go index edcbeaa2454b..057b1c7a3440 100644 --- a/xds/internal/xdsclient/xdsresource/unmarshal_rds.go +++ b/xds/internal/xdsclient/xdsresource/unmarshal_rds.go @@ -29,7 +29,6 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/internal/envconfig" "google.golang.org/grpc/xds/internal/clusterspecifier" - "google.golang.org/grpc/xds/internal/xdsclient/xdsresource/version" "google.golang.org/protobuf/types/known/anypb" ) @@ -47,9 +46,7 @@ func unmarshalRouteConfigResource(r *anypb.Any) (string, RouteConfigUpdate, erro return "", RouteConfigUpdate{}, fmt.Errorf("failed to unmarshal resource: %v", err) } - // TODO: Pass version.TransportAPI instead of relying upon the type URL - v2 := r.GetTypeUrl() == version.V2RouteConfigURL - u, err := generateRDSUpdateFromRouteConfiguration(rc, v2) + u, err := generateRDSUpdateFromRouteConfiguration(rc) if err != nil { return rc.GetName(), RouteConfigUpdate{}, err } @@ -73,7 +70,7 @@ func unmarshalRouteConfigResource(r *anypb.Any) (string, RouteConfigUpdate, erro // field must be empty and whose route field must be set. Inside that route // message, the cluster field will contain the clusterName or weighted clusters // we are looking for. -func generateRDSUpdateFromRouteConfiguration(rc *v3routepb.RouteConfiguration, v2 bool) (RouteConfigUpdate, error) { +func generateRDSUpdateFromRouteConfiguration(rc *v3routepb.RouteConfiguration) (RouteConfigUpdate, error) { vhs := make([]*VirtualHost, 0, len(rc.GetVirtualHosts())) csps := make(map[string]clusterspecifier.BalancerConfig) if envconfig.XDSRLS { @@ -88,7 +85,7 @@ func generateRDSUpdateFromRouteConfiguration(rc *v3routepb.RouteConfiguration, v // ignored and not emitted by the xdsclient. var cspNames = make(map[string]bool) for _, vh := range rc.GetVirtualHosts() { - routes, cspNs, err := routesProtoToSlice(vh.Routes, csps, v2) + routes, cspNs, err := routesProtoToSlice(vh.Routes, csps) if err != nil { return RouteConfigUpdate{}, fmt.Errorf("received route is invalid: %v", err) } @@ -104,13 +101,11 @@ func generateRDSUpdateFromRouteConfiguration(rc *v3routepb.RouteConfiguration, v Routes: routes, RetryConfig: rc, } - if !v2 { - cfgs, err := processHTTPFilterOverrides(vh.GetTypedPerFilterConfig()) - if err != nil { - return RouteConfigUpdate{}, fmt.Errorf("virtual host %+v: %v", vh, err) - } - vhOut.HTTPFilterConfigOverride = cfgs + cfgs, err := processHTTPFilterOverrides(vh.GetTypedPerFilterConfig()) + if err != nil { + return RouteConfigUpdate{}, fmt.Errorf("virtual host %+v: %v", vh, err) } + vhOut.HTTPFilterConfigOverride = cfgs vhs = append(vhs, vhOut) } @@ -213,7 +208,7 @@ func generateRetryConfig(rp *v3routepb.RetryPolicy) (*RetryConfig, error) { return cfg, nil } -func routesProtoToSlice(routes []*v3routepb.Route, csps map[string]clusterspecifier.BalancerConfig, v2 bool) ([]*Route, map[string]bool, error) { +func routesProtoToSlice(routes []*v3routepb.Route, csps map[string]clusterspecifier.BalancerConfig) ([]*Route, map[string]bool, error) { var routesRet []*Route var cspNames = make(map[string]bool) for _, r := range routes { @@ -325,13 +320,11 @@ func routesProtoToSlice(routes []*v3routepb.Route, csps map[string]clusterspecif continue } wc := WeightedCluster{Weight: w} - if !v2 { - cfgs, err := processHTTPFilterOverrides(c.GetTypedPerFilterConfig()) - if err != nil { - return nil, nil, fmt.Errorf("route %+v, action %+v: %v", r, a, err) - } - wc.HTTPFilterConfigOverride = cfgs + cfgs, err := processHTTPFilterOverrides(c.GetTypedPerFilterConfig()) + if err != nil { + return nil, nil, fmt.Errorf("route %+v, action %+v: %v", r, a, err) } + wc.HTTPFilterConfigOverride = cfgs route.WeightedClusters[c.GetName()] = wc totalWeight += w } @@ -409,13 +402,11 @@ func routesProtoToSlice(routes []*v3routepb.Route, csps map[string]clusterspecif route.ActionType = RouteActionUnsupported } - if !v2 { - cfgs, err := processHTTPFilterOverrides(r.GetTypedPerFilterConfig()) - if err != nil { - return nil, nil, fmt.Errorf("route %+v: %v", r, err) - } - route.HTTPFilterConfigOverride = cfgs + cfgs, err := processHTTPFilterOverrides(r.GetTypedPerFilterConfig()) + if err != nil { + return nil, nil, fmt.Errorf("route %+v: %v", r, err) } + route.HTTPFilterConfigOverride = cfgs routesRet = append(routesRet, &route) } return routesRet, cspNames, nil diff --git a/xds/internal/xdsclient/xdsresource/unmarshal_rds_test.go b/xds/internal/xdsclient/xdsresource/unmarshal_rds_test.go index a74ce555a681..e24e16e5b028 100644 --- a/xds/internal/xdsclient/xdsresource/unmarshal_rds_test.go +++ b/xds/internal/xdsclient/xdsresource/unmarshal_rds_test.go @@ -37,8 +37,6 @@ import ( "google.golang.org/grpc/xds/internal/xdsclient/xdsresource/version" "google.golang.org/protobuf/types/known/durationpb" - v2xdspb "github.com/envoyproxy/go-control-plane/envoy/api/v2" - v2routepb "github.com/envoyproxy/go-control-plane/envoy/api/v2/route" v3corepb "github.com/envoyproxy/go-control-plane/envoy/config/core/v3" rpb "github.com/envoyproxy/go-control-plane/envoy/config/rbac/v3" v3routepb "github.com/envoyproxy/go-control-plane/envoy/config/route/v3" @@ -778,7 +776,7 @@ func (s) TestRDSGenerateRDSUpdateFromRouteConfiguration(t *testing.T) { for _, test := range tests { t.Run(test.name, func(t *testing.T) { envconfig.XDSRLS = test.rlsEnabled - gotUpdate, gotError := generateRDSUpdateFromRouteConfiguration(test.rc, false) + gotUpdate, gotError := generateRDSUpdateFromRouteConfiguration(test.rc) if (gotError != nil) != test.wantError || !cmp.Equal(gotUpdate, test.wantUpdate, cmpopts.EquateEmpty(), cmp.Transformer("FilterConfig", func(fc httpfilter.FilterConfig) string { @@ -836,45 +834,11 @@ func (s) TestUnmarshalRouteConfig(t *testing.T) { ldsTarget = "lds.target.good:1111" uninterestingDomain = "uninteresting.domain" uninterestingClusterName = "uninterestingClusterName" - v2RouteConfigName = "v2RouteConfig" v3RouteConfigName = "v3RouteConfig" - v2ClusterName = "v2Cluster" v3ClusterName = "v3Cluster" ) var ( - v2VirtualHost = []*v2routepb.VirtualHost{ - { - Domains: []string{uninterestingDomain}, - Routes: []*v2routepb.Route{ - { - Match: &v2routepb.RouteMatch{PathSpecifier: &v2routepb.RouteMatch_Prefix{Prefix: ""}}, - Action: &v2routepb.Route_Route{ - Route: &v2routepb.RouteAction{ - ClusterSpecifier: &v2routepb.RouteAction_Cluster{Cluster: uninterestingClusterName}, - }, - }, - }, - }, - }, - { - Domains: []string{ldsTarget}, - Routes: []*v2routepb.Route{ - { - Match: &v2routepb.RouteMatch{PathSpecifier: &v2routepb.RouteMatch_Prefix{Prefix: ""}}, - Action: &v2routepb.Route_Route{ - Route: &v2routepb.RouteAction{ - ClusterSpecifier: &v2routepb.RouteAction_Cluster{Cluster: v2ClusterName}, - }, - }, - }, - }, - }, - } - v2RouteConfig = testutils.MarshalAny(&v2xdspb.RouteConfiguration{ - Name: v2RouteConfigName, - VirtualHosts: v2VirtualHost, - }) v3VirtualHost = []*v3routepb.VirtualHost{ { Domains: []string{uninterestingDomain}, @@ -929,50 +893,6 @@ func (s) TestUnmarshalRouteConfig(t *testing.T) { }, wantErr: true, }, - { - name: "v2 routeConfig resource", - resource: v2RouteConfig, - wantName: v2RouteConfigName, - wantUpdate: RouteConfigUpdate{ - VirtualHosts: []*VirtualHost{ - { - Domains: []string{uninterestingDomain}, - Routes: []*Route{{Prefix: newStringP(""), - WeightedClusters: map[string]WeightedCluster{uninterestingClusterName: {Weight: 1}}, - ActionType: RouteActionRoute}}, - }, - { - Domains: []string{ldsTarget}, - Routes: []*Route{{Prefix: newStringP(""), - WeightedClusters: map[string]WeightedCluster{v2ClusterName: {Weight: 1}}, - ActionType: RouteActionRoute}}, - }, - }, - Raw: v2RouteConfig, - }, - }, - { - name: "v2 routeConfig resource wrapped", - resource: testutils.MarshalAny(&v2xdspb.Resource{Resource: v2RouteConfig}), - wantName: v2RouteConfigName, - wantUpdate: RouteConfigUpdate{ - VirtualHosts: []*VirtualHost{ - { - Domains: []string{uninterestingDomain}, - Routes: []*Route{{Prefix: newStringP(""), - WeightedClusters: map[string]WeightedCluster{uninterestingClusterName: {Weight: 1}}, - ActionType: RouteActionRoute}}, - }, - { - Domains: []string{ldsTarget}, - Routes: []*Route{{Prefix: newStringP(""), - WeightedClusters: map[string]WeightedCluster{v2ClusterName: {Weight: 1}}, - ActionType: RouteActionRoute}}, - }, - }, - Raw: v2RouteConfig, - }, - }, { name: "v3 routeConfig resource", resource: v3RouteConfig, @@ -1608,7 +1528,7 @@ func (s) TestRoutesProtoToSlice(t *testing.T) { defer func() { envconfig.XDSRingHash = oldRingHashSupport }() for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - got, _, err := routesProtoToSlice(tt.routes, nil, false) + got, _, err := routesProtoToSlice(tt.routes, nil) if (err != nil) != tt.wantErr { t.Fatalf("routesProtoToSlice() error = %v, wantErr %v", err, tt.wantErr) } diff --git a/xds/internal/xdsclient/xdsresource/version/version.go b/xds/internal/xdsclient/xdsresource/version/version.go index 2c4819abddc0..82ad5fe52c70 100644 --- a/xds/internal/xdsclient/xdsresource/version/version.go +++ b/xds/internal/xdsclient/xdsresource/version/version.go @@ -20,35 +20,11 @@ // versions. package version -// TransportAPI refers to the API version for xDS transport protocol. This -// describes the xDS gRPC endpoint and version of DiscoveryRequest/Response used -// on the wire. -type TransportAPI int - -const ( - // TransportV2 refers to the v2 xDS transport protocol. - TransportV2 TransportAPI = iota - // TransportV3 refers to the v3 xDS transport protocol. - TransportV3 -) - // Resource URLs. We need to be able to accept either version of the resource // regardless of the version of the transport protocol in use. const ( googleapiPrefix = "type.googleapis.com/" - V2ListenerType = "envoy.api.v2.Listener" - V2RouteConfigType = "envoy.api.v2.RouteConfiguration" - V2ClusterType = "envoy.api.v2.Cluster" - V2EndpointsType = "envoy.api.v2.ClusterLoadAssignment" - - V2ResourceWrapperURL = googleapiPrefix + "envoy.api.v2.Resource" - V2ListenerURL = googleapiPrefix + V2ListenerType - V2RouteConfigURL = googleapiPrefix + V2RouteConfigType - V2ClusterURL = googleapiPrefix + V2ClusterType - V2EndpointsURL = googleapiPrefix + V2EndpointsType - V2HTTPConnManagerURL = googleapiPrefix + "envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager" - V3ListenerType = "envoy.config.listener.v3.Listener" V3RouteConfigType = "envoy.config.route.v3.RouteConfiguration" V3ClusterType = "envoy.config.cluster.v3.Cluster" diff --git a/xds/server_test.go b/xds/server_test.go index a0983a6508ea..a965fb6ea315 100644 --- a/xds/server_test.go +++ b/xds/server_test.go @@ -326,8 +326,8 @@ func setupOverrides() (*fakeGRPCServer, *testutils.Channel, func()) { XDSServer: &bootstrap.ServerConfig{ ServerURI: "dummyBalancer", Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), - NodeProto: xdstestutils.EmptyNodeProtoV3, }, + NodeProto: xdstestutils.EmptyNodeProtoV3, ServerListenerResourceNameTemplate: testServerListenerResourceNameTemplate, CertProviderConfigs: certProviderConfigs, }) @@ -358,8 +358,8 @@ func setupOverridesForXDSCreds(includeCertProviderCfg bool) (*testutils.Channel, XDSServer: &bootstrap.ServerConfig{ ServerURI: "dummyBalancer", Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), - NodeProto: xdstestutils.EmptyNodeProtoV3, }, + NodeProto: xdstestutils.EmptyNodeProtoV3, ServerListenerResourceNameTemplate: testServerListenerResourceNameTemplate, } if includeCertProviderCfg { @@ -607,8 +607,8 @@ func (s) TestServeBootstrapConfigInvalid(t *testing.T) { XDSServer: &bootstrap.ServerConfig{ ServerURI: "dummyBalancer", Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), - NodeProto: xdstestutils.EmptyNodeProtoV3, }, + NodeProto: xdstestutils.EmptyNodeProtoV3, ServerListenerResourceNameTemplate: testServerListenerResourceNameTemplate, }, }, @@ -618,8 +618,8 @@ func (s) TestServeBootstrapConfigInvalid(t *testing.T) { XDSServer: &bootstrap.ServerConfig{ ServerURI: "dummyBalancer", Creds: grpc.WithTransportCredentials(insecure.NewCredentials()), - NodeProto: xdstestutils.EmptyNodeProtoV3, }, + NodeProto: xdstestutils.EmptyNodeProtoV3, CertProviderConfigs: certProviderConfigs, }, },