Skip to content

Commit 062ebb4

Browse files
authoredJul 3, 2024··
grpc-core: use retryThrottling from defaultServiceConfig
1 parent 6e25c03 commit 062ebb4

File tree

2 files changed

+73
-1
lines changed

2 files changed

+73
-1
lines changed
 

‎core/src/main/java/io/grpc/internal/ManagedChannelImpl.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -616,7 +616,7 @@ ClientStream newSubstream(
616616
parsedDefaultServiceConfig.getError());
617617
this.defaultServiceConfig =
618618
(ManagedChannelServiceConfig) parsedDefaultServiceConfig.getConfig();
619-
this.lastServiceConfig = this.defaultServiceConfig;
619+
this.transportProvider.throttle = this.defaultServiceConfig.getRetryThrottling();
620620
} else {
621621
this.defaultServiceConfig = null;
622622
}
@@ -708,6 +708,11 @@ public String getServiceAuthority() {
708708
InternalConfigSelector getConfigSelector() {
709709
return realChannel.configSelector.get();
710710
}
711+
712+
@VisibleForTesting
713+
boolean hasThrottle() {
714+
return this.transportProvider.throttle != null;
715+
}
711716

712717
/**
713718
* Initiates an orderly shutdown in which preexisting calls continue but new calls are immediately

‎core/src/test/java/io/grpc/internal/ManagedChannelImplTest.java

+67
Original file line numberDiff line numberDiff line change
@@ -4058,6 +4058,40 @@ public void disableServiceConfigLookUp_withDefaultConfig() throws Exception {
40584058
}
40594059
}
40604060

4061+
@Test
4062+
public void disableServiceConfigLookUp_withDefaultConfig_withRetryThrottle() throws Exception {
4063+
LoadBalancerRegistry.getDefaultRegistry().register(mockLoadBalancerProvider);
4064+
try {
4065+
FakeNameResolverFactory nameResolverFactory =
4066+
new FakeNameResolverFactory.Builder(expectedUri)
4067+
.setServers(ImmutableList.of(addressGroup)).build();
4068+
channelBuilder.nameResolverFactory(nameResolverFactory);
4069+
channelBuilder.disableServiceConfigLookUp();
4070+
channelBuilder.enableRetry();
4071+
Map<String, Object> defaultServiceConfig =
4072+
parseConfig("{"
4073+
+ "\"retryThrottling\":{\"maxTokens\": 1, \"tokenRatio\": 1},"
4074+
+ "\"methodConfig\":[{"
4075+
+ "\"name\":[{\"service\":\"SimpleService1\"}],"
4076+
+ "\"waitForReady\":true"
4077+
+ "}]}");
4078+
channelBuilder.defaultServiceConfig(defaultServiceConfig);
4079+
4080+
createChannel();
4081+
4082+
ArgumentCaptor<ResolvedAddresses> resultCaptor =
4083+
ArgumentCaptor.forClass(ResolvedAddresses.class);
4084+
verify(mockLoadBalancer).acceptResolvedAddresses(resultCaptor.capture());
4085+
assertThat(resultCaptor.getValue().getAddresses()).containsExactly(addressGroup);
4086+
assertThat(resultCaptor.getValue().getAttributes().get(InternalConfigSelector.KEY)).isNull();
4087+
verify(mockLoadBalancer, never()).handleNameResolutionError(any(Status.class));
4088+
assertThat(channel.hasThrottle()).isTrue();
4089+
4090+
} finally {
4091+
LoadBalancerRegistry.getDefaultRegistry().deregister(mockLoadBalancerProvider);
4092+
}
4093+
}
4094+
40614095
@Test
40624096
public void enableServiceConfigLookUp_noDefaultConfig() throws Exception {
40634097
LoadBalancerRegistry.getDefaultRegistry().register(mockLoadBalancerProvider);
@@ -4165,6 +4199,39 @@ public void enableServiceConfigLookUp_resolverReturnsNoConfig_withDefaultConfig(
41654199
}
41664200
}
41674201

4202+
4203+
@Test
4204+
public void enableServiceConfigLookUp_usingDefaultConfig_withRetryThrottling() throws Exception {
4205+
LoadBalancerRegistry.getDefaultRegistry().register(mockLoadBalancerProvider);
4206+
try {
4207+
FakeNameResolverFactory nameResolverFactory =
4208+
new FakeNameResolverFactory.Builder(expectedUri)
4209+
.setServers(ImmutableList.of(addressGroup)).build();
4210+
channelBuilder.nameResolverFactory(nameResolverFactory);
4211+
channelBuilder.enableRetry();
4212+
Map<String, Object> defaultServiceConfig =
4213+
parseConfig("{"
4214+
+ "\"retryThrottling\":{\"maxTokens\": 1, \"tokenRatio\": 1},"
4215+
+ "\"methodConfig\":[{"
4216+
+ "\"name\":[{\"service\":\"SimpleService1\"}],"
4217+
+ "\"waitForReady\":true"
4218+
+ "}]}");
4219+
channelBuilder.defaultServiceConfig(defaultServiceConfig);
4220+
4221+
createChannel();
4222+
4223+
ArgumentCaptor<ResolvedAddresses> resultCaptor =
4224+
ArgumentCaptor.forClass(ResolvedAddresses.class);
4225+
verify(mockLoadBalancer).acceptResolvedAddresses(resultCaptor.capture());
4226+
assertThat(resultCaptor.getValue().getAddresses()).containsExactly(addressGroup);
4227+
assertThat(resultCaptor.getValue().getAttributes().get(InternalConfigSelector.KEY)).isNull();
4228+
verify(mockLoadBalancer, never()).handleNameResolutionError(any(Status.class));
4229+
assertThat(channel.hasThrottle()).isTrue();
4230+
} finally {
4231+
LoadBalancerRegistry.getDefaultRegistry().deregister(mockLoadBalancerProvider);
4232+
}
4233+
}
4234+
41684235
@Test
41694236
public void enableServiceConfigLookUp_resolverReturnsNoConfig_noDefaultConfig() {
41704237
LoadBalancerRegistry.getDefaultRegistry().register(mockLoadBalancerProvider);

0 commit comments

Comments
 (0)
Please sign in to comment.