@@ -79,7 +79,7 @@ class XdsClusterImplLoadBalancingConfig implements TypedLoadBalancingConfig {
79
79
} ;
80
80
}
81
81
82
- constructor ( private cluster : string , private dropCategories : DropCategory [ ] , private childPolicy : TypedLoadBalancingConfig , private edsServiceName : string , private lrsLoadReportingServer : XdsServerConfig , maxConcurrentRequests ?: number ) {
82
+ constructor ( private cluster : string , private dropCategories : DropCategory [ ] , private childPolicy : TypedLoadBalancingConfig , private edsServiceName : string , private lrsLoadReportingServer ? : XdsServerConfig , maxConcurrentRequests ?: number ) {
83
83
this . maxConcurrentRequests = maxConcurrentRequests ?? DEFAULT_MAX_CONCURRENT_REQUESTS ;
84
84
}
85
85
@@ -127,7 +127,11 @@ class XdsClusterImplLoadBalancingConfig implements TypedLoadBalancingConfig {
127
127
if ( ! childConfig ) {
128
128
throw new Error ( 'xds_cluster_impl config child_policy parsing failed' ) ;
129
129
}
130
- return new XdsClusterImplLoadBalancingConfig ( obj . cluster , obj . drop_categories . map ( validateDropCategory ) , childConfig , obj . eds_service_name , validateXdsServerConfig ( obj . lrs_load_reporting_server ) , obj . max_concurrent_requests ) ;
130
+ let lrsServer : XdsServerConfig | undefined = undefined ;
131
+ if ( obj . lrs_load_reporting_server ) {
132
+ lrsServer = validateXdsServerConfig ( obj . lrs_load_reporting_server )
133
+ }
134
+ return new XdsClusterImplLoadBalancingConfig ( obj . cluster , obj . drop_categories . map ( validateDropCategory ) , childConfig , obj . eds_service_name , lrsServer , obj . max_concurrent_requests ) ;
131
135
}
132
136
}
133
137
@@ -156,7 +160,7 @@ class CallCounterMap {
156
160
const callCounterMap = new CallCounterMap ( ) ;
157
161
158
162
class LocalitySubchannelWrapper extends BaseSubchannelWrapper implements SubchannelInterface {
159
- constructor ( child : SubchannelInterface , private statsObject : XdsClusterLocalityStats ) {
163
+ constructor ( child : SubchannelInterface , private statsObject : XdsClusterLocalityStats | null ) {
160
164
super ( child ) ;
161
165
}
162
166
@@ -210,12 +214,12 @@ class XdsClusterImplPicker implements Picker {
210
214
subchannel : pickSubchannel ?. getWrappedSubchannel ( ) ?? null ,
211
215
onCallStarted : ( ) => {
212
216
originalPick . onCallStarted ?.( ) ;
213
- pickSubchannel ?. getStatsObject ( ) . addCallStarted ( ) ;
217
+ pickSubchannel ?. getStatsObject ( ) ? .addCallStarted ( ) ;
214
218
callCounterMap . startCall ( this . callCounterMapKey ) ;
215
219
} ,
216
220
onCallEnded : status => {
217
221
originalPick . onCallEnded ?.( status ) ;
218
- pickSubchannel ?. getStatsObject ( ) . addCallFinished ( status !== Status . OK )
222
+ pickSubchannel ?. getStatsObject ( ) ? .addCallFinished ( status !== Status . OK )
219
223
callCounterMap . endCall ( this . callCounterMapKey ) ;
220
224
}
221
225
} ;
@@ -253,12 +257,16 @@ class XdsClusterImplBalancer implements LoadBalancer {
253
257
}
254
258
const locality = ( subchannelAddress as LocalitySubchannelAddress ) . locality ?? '' ;
255
259
const wrapperChild = channelControlHelper . createSubchannel ( subchannelAddress , subchannelArgs ) ;
256
- const statsObj = this . xdsClient . addClusterLocalityStats (
257
- this . latestConfig . getLrsLoadReportingServer ( ) ,
258
- this . latestConfig . getCluster ( ) ,
259
- this . latestConfig . getEdsServiceName ( ) ,
260
- locality
261
- ) ;
260
+ const lrsServer = this . latestConfig . getLrsLoadReportingServer ( ) ;
261
+ let statsObj : XdsClusterLocalityStats | null = null ;
262
+ if ( lrsServer ) {
263
+ statsObj = this . xdsClient . addClusterLocalityStats (
264
+ lrsServer ,
265
+ this . latestConfig . getCluster ( ) ,
266
+ this . latestConfig . getEdsServiceName ( ) ,
267
+ locality
268
+ ) ;
269
+ }
262
270
return new LocalitySubchannelWrapper ( wrapperChild , statsObj ) ;
263
271
} ,
264
272
updateState : ( connectivityState , originalPicker ) => {
0 commit comments