Skip to content

Commit 79b6830

Browse files
authored
xds: resubmit xds client pool changes from grpc#7898 along with fix to set fallback bootstrap config from googledirectpath to xdsclient pool (grpc#8050)
1 parent 947e2a4 commit 79b6830

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+1422
-978
lines changed

internal/internal.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -151,8 +151,8 @@ var (
151151
// other features, including the CSDS service.
152152
NewXDSResolverWithConfigForTesting any // func([]byte) (resolver.Builder, error)
153153

154-
// NewXDSResolverWithClientForTesting creates a new xDS resolver builder
155-
// using the provided xDS client instead of creating a new one using the
154+
// NewXDSResolverWithPoolForTesting creates a new xDS resolver builder
155+
// using the provided xDS pool instead of creating a new one using the
156156
// bootstrap configuration specified by the supported environment variables.
157157
// The resolver.Builder is meant to be used in conjunction with the
158158
// grpc.WithResolvers DialOption. The resolver.Builder does not take
@@ -163,7 +163,7 @@ var (
163163
//
164164
// This function should ONLY be used for testing and may not work with some
165165
// other features, including the CSDS service.
166-
NewXDSResolverWithClientForTesting any // func(xdsclient.XDSClient) (resolver.Builder, error)
166+
NewXDSResolverWithPoolForTesting any // func(*xdsclient.Pool) (resolver.Builder, error)
167167

168168
// RegisterRLSClusterSpecifierPluginForTesting registers the RLS Cluster
169169
// Specifier Plugin for testing purposes, regardless of the XDSRLS environment

internal/testutils/xds/e2e/setup/setup.go

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,12 @@ func ManagementServerAndResolver(t *testing.T) (*e2e.ManagementServer, string, [
4949
bc := e2e.DefaultBootstrapContents(t, nodeID, xdsServer.Address)
5050

5151
// Create an xDS resolver with the above bootstrap configuration.
52-
var r resolver.Builder
53-
var err error
54-
if newResolver := internal.NewXDSResolverWithConfigForTesting; newResolver != nil {
55-
r, err = newResolver.(func([]byte) (resolver.Builder, error))(bc)
56-
if err != nil {
57-
t.Fatalf("Failed to create xDS resolver for testing: %v", err)
58-
}
52+
if internal.NewXDSResolverWithConfigForTesting == nil {
53+
t.Fatalf("internal.NewXDSResolverWithConfigForTesting is nil")
54+
}
55+
r, err := internal.NewXDSResolverWithConfigForTesting.(func([]byte) (resolver.Builder, error))(bc)
56+
if err != nil {
57+
t.Fatalf("Failed to create xDS resolver for testing: %v", err)
5958
}
6059

6160
return xdsServer, nodeID, bc, r

internal/xds/bootstrap/bootstrap.go

Lines changed: 6 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ import (
3131
"os"
3232
"slices"
3333
"strings"
34-
"sync"
3534

3635
"google.golang.org/grpc"
3736
"google.golang.org/grpc/credentials/tls/certprovider"
@@ -578,9 +577,6 @@ func (c *Config) UnmarshalJSON(data []byte) error {
578577
// specified at ${GRPC_XDS_BOOTSTRAP_CONFIG}. If both env vars are set, the
579578
// former is preferred.
580579
//
581-
// If none of the env vars are set, this function returns the fallback
582-
// configuration if it is not nil. Else, it returns an error.
583-
//
584580
// This function tries to process as much of the bootstrap file as possible (in
585581
// the presence of the errors) and may return a Config object with certain
586582
// fields left unspecified, in which case the caller should use some sane
@@ -597,27 +593,22 @@ func GetConfiguration() (*Config, error) {
597593
if err != nil {
598594
return nil, fmt.Errorf("xds: failed to read bootstrap config from file %q: %v", fName, err)
599595
}
600-
return newConfigFromContents(cfg)
596+
return NewConfigFromContents(cfg)
601597
}
602598

603599
if fContent != "" {
604600
if logger.V(2) {
605601
logger.Infof("Using bootstrap contents from GRPC_XDS_BOOTSTRAP_CONFIG environment variable")
606602
}
607-
return newConfigFromContents([]byte(fContent))
608-
}
609-
610-
if cfg := fallbackBootstrapConfig(); cfg != nil {
611-
if logger.V(2) {
612-
logger.Infof("Using bootstrap contents from fallback config")
613-
}
614-
return cfg, nil
603+
return NewConfigFromContents([]byte(fContent))
615604
}
616605

617-
return nil, fmt.Errorf("bootstrap environment variables (%q or %q) not defined, and no fallback config set", envconfig.XDSBootstrapFileNameEnv, envconfig.XDSBootstrapFileContentEnv)
606+
return nil, fmt.Errorf("bootstrap environment variables (%q or %q) not defined", envconfig.XDSBootstrapFileNameEnv, envconfig.XDSBootstrapFileContentEnv)
618607
}
619608

620-
func newConfigFromContents(data []byte) (*Config, error) {
609+
// NewConfigFromContents creates a new bootstrap configuration from the provided
610+
// contents.
611+
func NewConfigFromContents(data []byte) (*Config, error) {
621612
// Normalize the input configuration.
622613
buf := bytes.Buffer{}
623614
err := json.Indent(&buf, data, "", "")
@@ -700,14 +691,6 @@ func NewContentsForTesting(opts ConfigOptionsForTesting) ([]byte, error) {
700691
return contents, nil
701692
}
702693

703-
// NewConfigForTesting creates a new bootstrap configuration from the provided
704-
// contents, for testing purposes.
705-
//
706-
// # Testing-Only
707-
func NewConfigForTesting(contents []byte) (*Config, error) {
708-
return newConfigFromContents(contents)
709-
}
710-
711694
// certproviderNameAndConfig is the internal representation of
712695
// the`certificate_providers` field in the bootstrap configuration.
713696
type certproviderNameAndConfig struct {
@@ -810,44 +793,3 @@ func (n node) toProto() *v3corepb.Node {
810793
ClientFeatures: slices.Clone(n.clientFeatures),
811794
}
812795
}
813-
814-
// SetFallbackBootstrapConfig sets the fallback bootstrap configuration to be
815-
// used when the bootstrap environment variables are unset.
816-
//
817-
// The provided configuration must be valid JSON. Returns a non-nil error if
818-
// parsing the provided configuration fails.
819-
func SetFallbackBootstrapConfig(cfgJSON []byte) error {
820-
config, err := newConfigFromContents(cfgJSON)
821-
if err != nil {
822-
return err
823-
}
824-
825-
configMu.Lock()
826-
defer configMu.Unlock()
827-
fallbackBootstrapCfg = config
828-
return nil
829-
}
830-
831-
// UnsetFallbackBootstrapConfigForTesting unsets the fallback bootstrap
832-
// configuration to be used when the bootstrap environment variables are unset.
833-
//
834-
// # Testing-Only
835-
func UnsetFallbackBootstrapConfigForTesting() {
836-
configMu.Lock()
837-
defer configMu.Unlock()
838-
fallbackBootstrapCfg = nil
839-
}
840-
841-
// fallbackBootstrapConfig returns the fallback bootstrap configuration
842-
// that will be used by the xDS client when the bootstrap environment
843-
// variables are unset.
844-
func fallbackBootstrapConfig() *Config {
845-
configMu.Lock()
846-
defer configMu.Unlock()
847-
return fallbackBootstrapCfg
848-
}
849-
850-
var (
851-
configMu sync.Mutex
852-
fallbackBootstrapCfg *Config
853-
)

test/xds/xds_client_ack_nack_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -131,12 +131,12 @@ func (s) TestClientResourceVersionAfterStreamRestart(t *testing.T) {
131131
bootstrapContents := e2e.DefaultBootstrapContents(t, nodeID, managementServer.Address)
132132

133133
// Create an xDS resolver with the above bootstrap configuration.
134-
var xdsResolver resolver.Builder
135-
if newResolver := internal.NewXDSResolverWithConfigForTesting; newResolver != nil {
136-
xdsResolver, err = newResolver.(func([]byte) (resolver.Builder, error))(bootstrapContents)
137-
if err != nil {
138-
t.Fatalf("Failed to create xDS resolver for testing: %v", err)
139-
}
134+
if internal.NewXDSResolverWithConfigForTesting == nil {
135+
t.Fatalf("internal.NewXDSResolverWithConfigForTesting is nil")
136+
}
137+
xdsResolver, err := internal.NewXDSResolverWithConfigForTesting.(func([]byte) (resolver.Builder, error))(bootstrapContents)
138+
if err != nil {
139+
t.Fatalf("Failed to create xDS resolver for testing: %v", err)
140140
}
141141

142142
server := stubserver.StartTestService(t, nil)

test/xds/xds_client_certificate_providers_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -129,12 +129,12 @@ func (s) TestClientSideXDS_WithNoCertificateProvidersInBootstrap_Failure(t *test
129129
}
130130

131131
// Create an xDS resolver with the above bootstrap configuration.
132-
var resolverBuilder resolver.Builder
133-
if newResolver := internal.NewXDSResolverWithConfigForTesting; newResolver != nil {
134-
resolverBuilder, err = newResolver.(func([]byte) (resolver.Builder, error))(bc)
135-
if err != nil {
136-
t.Fatalf("Failed to create xDS resolver for testing: %v", err)
137-
}
132+
if internal.NewXDSResolverWithConfigForTesting == nil {
133+
t.Fatalf("internal.NewXDSResolverWithConfigForTesting is nil")
134+
}
135+
resolverBuilder, err := internal.NewXDSResolverWithConfigForTesting.(func([]byte) (resolver.Builder, error))(bc)
136+
if err != nil {
137+
t.Fatalf("Failed to create xDS resolver for testing: %v", err)
138138
}
139139

140140
// Spin up a test backend.

test/xds/xds_client_custom_dialer_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -105,12 +105,12 @@ func (s) TestClientCustomDialerFromCredentialsBundle(t *testing.T) {
105105
}
106106

107107
// Create an xDS resolver with the above bootstrap configuration.
108-
var resolverBuilder resolver.Builder
109-
if newResolver := internal.NewXDSResolverWithConfigForTesting; newResolver != nil {
110-
resolverBuilder, err = newResolver.(func([]byte) (resolver.Builder, error))(bc)
111-
if err != nil {
112-
t.Fatalf("Failed to create xDS resolver for testing: %v", err)
113-
}
108+
if internal.NewXDSResolverWithConfigForTesting == nil {
109+
t.Fatalf("internal.NewXDSResolverWithConfigForTesting is nil")
110+
}
111+
resolverBuilder, err := internal.NewXDSResolverWithConfigForTesting.(func([]byte) (resolver.Builder, error))(bc)
112+
if err != nil {
113+
t.Fatalf("Failed to create xDS resolver for testing: %v", err)
114114
}
115115

116116
// Spin up a test backend.

test/xds/xds_client_federation_test.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,10 @@ func (s) TestClientSideFederation(t *testing.T) {
8787
t.Fatalf("Failed to create bootstrap file: %v", err)
8888
}
8989

90-
resolverBuilder := internal.NewXDSResolverWithConfigForTesting.(func([]byte) (resolver.Builder, error))
91-
resolver, err := resolverBuilder(bootstrapContents)
90+
if internal.NewXDSResolverWithConfigForTesting == nil {
91+
t.Fatalf("internal.NewXDSResolverWithConfigForTesting is nil")
92+
}
93+
resolver, err := internal.NewXDSResolverWithConfigForTesting.(func([]byte) (resolver.Builder, error))(bootstrapContents)
9294
if err != nil {
9395
t.Fatalf("Failed to create xDS resolver for testing: %v", err)
9496
}
@@ -181,8 +183,10 @@ func (s) TestClientSideFederationWithOnlyXDSTPStyleLDS(t *testing.T) {
181183
t.Fatalf("Failed to create bootstrap file: %v", err)
182184
}
183185

184-
resolverBuilder := internal.NewXDSResolverWithConfigForTesting.(func([]byte) (resolver.Builder, error))
185-
resolver, err := resolverBuilder(bootstrapContents)
186+
if internal.NewXDSResolverWithConfigForTesting == nil {
187+
t.Fatalf("internal.NewXDSResolverWithConfigForTesting is nil")
188+
}
189+
resolver, err := internal.NewXDSResolverWithConfigForTesting.(func([]byte) (resolver.Builder, error))(bootstrapContents)
186190
if err != nil {
187191
t.Fatalf("Failed to create xDS resolver for testing: %v", err)
188192
}

test/xds/xds_client_ignore_resource_deletion_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -289,8 +289,10 @@ func generateBootstrapContents(t *testing.T, serverURI string, ignoreResourceDel
289289
// as parameter.
290290
func xdsResolverBuilder(t *testing.T, bs []byte) resolver.Builder {
291291
t.Helper()
292-
resolverBuilder := internal.NewXDSResolverWithConfigForTesting.(func([]byte) (resolver.Builder, error))
293-
xdsR, err := resolverBuilder(bs)
292+
if internal.NewXDSResolverWithConfigForTesting == nil {
293+
t.Fatalf("internal.NewXDSResolverWithConfigForTesting is nil")
294+
}
295+
xdsR, err := internal.NewXDSResolverWithConfigForTesting.(func([]byte) (resolver.Builder, error))(bs)
294296
if err != nil {
295297
t.Fatalf("Creating xDS resolver for testing failed for config %q: %v", string(bs), err)
296298
}

test/xds/xds_security_config_nack_test.go

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -329,13 +329,12 @@ func (s) TestUnmarshalCluster_WithUpdateValidatorFunc(t *testing.T) {
329329
bootstrapContents := e2e.DefaultBootstrapContents(t, nodeID, managementServer.Address)
330330

331331
// Create an xDS resolver with the above bootstrap configuration.
332-
var xdsResolver resolver.Builder
333-
if newResolver := internal.NewXDSResolverWithConfigForTesting; newResolver != nil {
334-
var err error
335-
xdsResolver, err = newResolver.(func([]byte) (resolver.Builder, error))(bootstrapContents)
336-
if err != nil {
337-
t.Fatalf("Failed to create xDS resolver for testing: %v", err)
338-
}
332+
if internal.NewXDSResolverWithConfigForTesting == nil {
333+
t.Fatalf("internal.NewXDSResolverWithConfigForTesting is nil")
334+
}
335+
xdsResolver, err := internal.NewXDSResolverWithConfigForTesting.(func([]byte) (resolver.Builder, error))(bootstrapContents)
336+
if err != nil {
337+
t.Fatalf("Failed to create xDS resolver for testing: %v", err)
339338
}
340339

341340
server := stubserver.StartTestService(t, nil)

test/xds/xds_server_integration_test.go

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -325,13 +325,12 @@ func (s) TestServerSideXDS_SecurityConfigChange(t *testing.T) {
325325
bootstrapContents := e2e.DefaultBootstrapContents(t, nodeID, managementServer.Address)
326326

327327
// Create an xDS resolver with the above bootstrap configuration.
328-
var xdsResolver resolver.Builder
329-
if newResolver := internal.NewXDSResolverWithConfigForTesting; newResolver != nil {
330-
var err error
331-
xdsResolver, err = newResolver.(func([]byte) (resolver.Builder, error))(bootstrapContents)
332-
if err != nil {
333-
t.Fatalf("Failed to create xDS resolver for testing: %v", err)
334-
}
328+
if internal.NewXDSResolverWithConfigForTesting == nil {
329+
t.Fatalf("internal.NewXDSResolverWithConfigForTesting is nil")
330+
}
331+
xdsResolver, err := internal.NewXDSResolverWithConfigForTesting.(func([]byte) (resolver.Builder, error))(bootstrapContents)
332+
if err != nil {
333+
t.Fatalf("Failed to create xDS resolver for testing: %v", err)
335334
}
336335

337336
lis, cleanup2 := setupGRPCServer(t, bootstrapContents)

0 commit comments

Comments
 (0)