@@ -32,11 +32,11 @@ import (
32
32
"google.golang.org/grpc/xds/internal/xdsclient/xdsresource/version"
33
33
34
34
xdsbootstrap "google.golang.org/grpc/xds/bootstrap"
35
- gclients "google.golang.org/grpc/xds/internal/clients"
35
+ "google.golang.org/grpc/xds/internal/clients"
36
36
"google.golang.org/grpc/xds/internal/clients/grpctransport"
37
- glrsclient "google.golang.org/grpc/xds/internal/clients/lrsclient"
38
- gxdsclient "google.golang.org/grpc/xds/internal/clients/xdsclient"
39
- gxdsmetrics "google.golang.org/grpc/xds/internal/clients/xdsclient/metrics"
37
+ "google.golang.org/grpc/xds/internal/clients/lrsclient"
38
+ "google.golang.org/grpc/xds/internal/clients/xdsclient"
39
+ "google.golang.org/grpc/xds/internal/clients/xdsclient/metrics"
40
40
)
41
41
42
42
const (
@@ -79,18 +79,22 @@ var (
79
79
})
80
80
)
81
81
82
- // clientImpl embed gxdsclient .XDSClient and implement internal XDSClient
82
+ // clientImpl embed xdsclient .XDSClient and implement internal XDSClient
83
83
// interface with ref counting so that it can be shared by the xds resolver and
84
84
// balancer implementations, across multiple ClientConns and Servers.
85
85
type clientImpl struct {
86
- * gxdsclient .XDSClient
86
+ * xdsclient .XDSClient
87
87
88
- gConfig gxdsclient.Config
89
- config * bootstrap.Config
90
- logger * grpclog.PrefixLogger
91
- target string
92
- lrsClient * glrsclient.LRSClient
93
- refCount int32 // accessed atomically
88
+ // The following fields are initialized at creation time and are read-only
89
+ // after that.
90
+ xdsClientConfig xdsclient.Config
91
+ bootstrapConfig * bootstrap.Config
92
+ logger * grpclog.PrefixLogger
93
+ target string
94
+ lrsClient * lrsclient.LRSClient
95
+
96
+ // Accessed atomically
97
+ refCount int32
94
98
}
95
99
96
100
// metricsReporter implements the clients.MetricsReporter interface and uses an
@@ -109,63 +113,92 @@ func (mr *metricsReporter) ReportMetric(metric any) {
109
113
}
110
114
111
115
switch m := metric .(type ) {
112
- case * gxdsmetrics .ResourceUpdateValid :
116
+ case * metrics .ResourceUpdateValid :
113
117
xdsClientResourceUpdatesValidMetric .Record (mr .recorder , 1 , mr .target , m .ServerURI , m .ResourceType )
114
- case * gxdsmetrics .ResourceUpdateInvalid :
118
+ case * metrics .ResourceUpdateInvalid :
115
119
xdsClientResourceUpdatesInvalidMetric .Record (mr .recorder , 1 , mr .target , m .ServerURI , m .ResourceType )
116
- case * gxdsmetrics .ServerFailure :
120
+ case * metrics .ServerFailure :
117
121
xdsClientServerFailureMetric .Record (mr .recorder , 1 , mr .target , m .ServerURI )
118
122
}
119
123
}
120
124
121
- func newClientImpl (config * bootstrap.Config , metricsRecorder estats.MetricsRecorder , resourceTypes map [string ]gxdsclient.ResourceType , target string ) (* clientImpl , error ) {
125
+ func newClientImpl (config * bootstrap.Config , metricsRecorder estats.MetricsRecorder , target string ) (* clientImpl , error ) {
126
+ gConfig , err := buildXDSClientConfig (config , metricsRecorder , target )
127
+ if err != nil {
128
+ return nil , err
129
+ }
130
+ client , err := xdsclient .New (gConfig )
131
+ if err != nil {
132
+ return nil , err
133
+ }
134
+ c := & clientImpl {XDSClient : client , xdsClientConfig : gConfig , bootstrapConfig : config , target : target , refCount : 1 }
135
+ c .logger = prefixLogger (c )
136
+ return c , nil
137
+ }
138
+
139
+ // BootstrapConfig returns the configuration read from the bootstrap file.
140
+ // Callers must treat the return value as read-only.
141
+ func (c * clientImpl ) BootstrapConfig () * bootstrap.Config {
142
+ return c .bootstrapConfig
143
+ }
144
+
145
+ func (c * clientImpl ) incrRef () int32 {
146
+ return atomic .AddInt32 (& c .refCount , 1 )
147
+ }
148
+
149
+ func (c * clientImpl ) decrRef () int32 {
150
+ return atomic .AddInt32 (& c .refCount , - 1 )
151
+ }
152
+
153
+ // buildXDSClientConfig builds the xdsclient.Config from the bootstrap.Config.
154
+ func buildXDSClientConfig (config * bootstrap.Config , metricsRecorder estats.MetricsRecorder , target string ) (xdsclient.Config , error ) {
122
155
grpcTransportConfigs := make (map [string ]grpctransport.Config )
123
- gServerCfgMap := make (map [gxdsclient .ServerConfig ]* bootstrap.ServerConfig )
156
+ gServerCfgMap := make (map [xdsclient .ServerConfig ]* bootstrap.ServerConfig )
124
157
125
- gAuthorities := make (map [string ]gxdsclient .Authority )
158
+ gAuthorities := make (map [string ]xdsclient .Authority )
126
159
for name , cfg := range config .Authorities () {
127
160
// If server configs are specified in the authorities map, use that.
128
161
// Else, use the top-level server configs.
129
162
serverCfg := config .XDSServers ()
130
163
if len (cfg .XDSServers ) >= 1 {
131
164
serverCfg = cfg .XDSServers
132
165
}
133
- var gServerCfg []gxdsclient .ServerConfig
166
+ var gServerCfg []xdsclient .ServerConfig
134
167
for _ , sc := range serverCfg {
135
168
if err := populateGRPCTransportConfigsFromServerConfig (sc , grpcTransportConfigs ); err != nil {
136
- return nil , err
169
+ return xdsclient. Config {} , err
137
170
}
138
- gsc := gxdsclient .ServerConfig {
139
- ServerIdentifier : gclients .ServerIdentifier {ServerURI : sc .ServerURI (), Extensions : grpctransport.ServerIdentifierExtension {ConfigName : sc .SelectedCreds ().Type }},
171
+ gsc := xdsclient .ServerConfig {
172
+ ServerIdentifier : clients .ServerIdentifier {ServerURI : sc .ServerURI (), Extensions : grpctransport.ServerIdentifierExtension {ConfigName : sc .SelectedCreds ().Type }},
140
173
IgnoreResourceDeletion : sc .ServerFeaturesIgnoreResourceDeletion ()}
141
174
gServerCfg = append (gServerCfg , gsc )
142
175
gServerCfgMap [gsc ] = sc
143
176
}
144
- gAuthorities [name ] = gxdsclient .Authority {XDSServers : gServerCfg }
177
+ gAuthorities [name ] = xdsclient .Authority {XDSServers : gServerCfg }
145
178
}
146
179
147
- gServerCfgs := make ([]gxdsclient .ServerConfig , 0 , len (config .XDSServers ()))
180
+ gServerCfgs := make ([]xdsclient .ServerConfig , 0 , len (config .XDSServers ()))
148
181
for _ , sc := range config .XDSServers () {
149
182
if err := populateGRPCTransportConfigsFromServerConfig (sc , grpcTransportConfigs ); err != nil {
150
- return nil , err
183
+ return xdsclient. Config {} , err
151
184
}
152
- gsc := gxdsclient .ServerConfig {
153
- ServerIdentifier : gclients .ServerIdentifier {ServerURI : sc .ServerURI (), Extensions : grpctransport.ServerIdentifierExtension {ConfigName : sc .SelectedCreds ().Type }},
185
+ gsc := xdsclient .ServerConfig {
186
+ ServerIdentifier : clients .ServerIdentifier {ServerURI : sc .ServerURI (), Extensions : grpctransport.ServerIdentifierExtension {ConfigName : sc .SelectedCreds ().Type }},
154
187
IgnoreResourceDeletion : sc .ServerFeaturesIgnoreResourceDeletion ()}
155
188
gServerCfgs = append (gServerCfgs , gsc )
156
189
gServerCfgMap [gsc ] = sc
157
190
}
158
191
159
192
node := config .Node ()
160
- gNode := gclients .Node {
193
+ gNode := clients .Node {
161
194
ID : node .GetId (),
162
195
Cluster : node .GetCluster (),
163
196
Metadata : node .Metadata ,
164
197
UserAgentName : node .UserAgentName ,
165
198
UserAgentVersion : node .GetUserAgentVersion (),
166
199
}
167
200
if node .Locality != nil {
168
- gNode .Locality = gclients .Locality {
201
+ gNode .Locality = clients .Locality {
169
202
Region : node .Locality .Region ,
170
203
Zone : node .Locality .Zone ,
171
204
SubZone : node .Locality .SubZone ,
@@ -174,65 +207,43 @@ func newClientImpl(config *bootstrap.Config, metricsRecorder estats.MetricsRecor
174
207
175
208
gTransportBuilder := grpctransport .NewBuilder (grpcTransportConfigs )
176
209
177
- if resourceTypes == nil {
178
- resourceTypes = make (map [string ]gxdsclient.ResourceType )
179
- resourceTypes [version .V3ListenerURL ] = gxdsclient.ResourceType {
210
+ resourceTypes := map [string ]xdsclient.ResourceType {
211
+ version .V3ListenerURL : {
180
212
TypeURL : version .V3ListenerURL ,
181
213
TypeName : xdsresource .ListenerResourceTypeName ,
182
214
AllResourcesRequiredInSotW : true ,
183
215
Decoder : xdsresource .NewGenericListenerResourceTypeDecoder (config ),
184
- }
185
- resourceTypes [ version .V3RouteConfigURL ] = gxdsclient. ResourceType {
216
+ },
217
+ version .V3RouteConfigURL : {
186
218
TypeURL : version .V3RouteConfigURL ,
187
219
TypeName : xdsresource .RouteConfigTypeName ,
188
220
AllResourcesRequiredInSotW : false ,
189
221
Decoder : xdsresource .NewGenericRouteConfigResourceTypeDecoder (),
190
- }
191
- resourceTypes [ version .V3ClusterURL ] = gxdsclient. ResourceType {
222
+ },
223
+ version .V3ClusterURL : {
192
224
TypeURL : version .V3ClusterURL ,
193
225
TypeName : xdsresource .ClusterResourceTypeName ,
194
226
AllResourcesRequiredInSotW : true ,
195
227
Decoder : xdsresource .NewGenericClusterResourceTypeDecoder (config , gServerCfgMap ),
196
- }
197
- resourceTypes [ version .V3EndpointsURL ] = gxdsclient. ResourceType {
228
+ },
229
+ version .V3EndpointsURL : {
198
230
TypeURL : version .V3EndpointsURL ,
199
231
TypeName : xdsresource .EndpointsResourceTypeName ,
200
232
AllResourcesRequiredInSotW : false ,
201
233
Decoder : xdsresource .NewGenericEndpointsResourceTypeDecoder (),
202
- }
234
+ },
203
235
}
204
236
205
237
mr := & metricsReporter {recorder : metricsRecorder , target : target }
206
238
207
- gConfig := gxdsclient .Config {
239
+ return xdsclient .Config {
208
240
Authorities : gAuthorities ,
209
241
Servers : gServerCfgs ,
210
242
Node : gNode ,
211
243
TransportBuilder : gTransportBuilder ,
212
244
ResourceTypes : resourceTypes ,
213
245
MetricsReporter : mr ,
214
- }
215
- client , err := gxdsclient .New (gConfig )
216
- if err != nil {
217
- return nil , err
218
- }
219
- c := & clientImpl {XDSClient : client , gConfig : gConfig , config : config , target : target , refCount : 1 }
220
- c .logger = prefixLogger (c )
221
- return c , nil
222
- }
223
-
224
- // BootstrapConfig returns the configuration read from the bootstrap file.
225
- // Callers must treat the return value as read-only.
226
- func (c * clientImpl ) BootstrapConfig () * bootstrap.Config {
227
- return c .config
228
- }
229
-
230
- func (c * clientImpl ) incrRef () int32 {
231
- return atomic .AddInt32 (& c .refCount , 1 )
232
- }
233
-
234
- func (c * clientImpl ) decrRef () int32 {
235
- return atomic .AddInt32 (& c .refCount , - 1 )
246
+ }, nil
236
247
}
237
248
238
249
// populateGRPCTransportConfigsFromServerConfig iterates through the channel
0 commit comments