xds: rename XdsClientRef to XdsClientPool

This commit is contained in:
ZHANG Dapeng 2019-12-18 13:44:35 -08:00 committed by GitHub
parent 91853036e6
commit 6b04fc18f3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 70 additions and 70 deletions

View File

@ -65,7 +65,7 @@ public final class CdsLoadBalancer extends LoadBalancer {
@Nullable
private ClusterWatcher clusterWatcher;
@Nullable
private ObjectPool<XdsClient> xdsClientRef;
private ObjectPool<XdsClient> xdsClientPool;
@Nullable
private XdsClient xdsClient;
@ -85,17 +85,17 @@ public final class CdsLoadBalancer extends LoadBalancer {
public void handleResolvedAddresses(ResolvedAddresses resolvedAddresses) {
channelLogger.log(ChannelLogLevel.DEBUG, "Received ResolvedAddresses {0}", resolvedAddresses);
Attributes attributes = resolvedAddresses.getAttributes();
if (xdsClientRef == null) {
xdsClientRef = resolvedAddresses.getAttributes().get(XdsAttributes.XDS_CLIENT_REF);
if (xdsClientRef == null) {
if (xdsClientPool == null) {
xdsClientPool = resolvedAddresses.getAttributes().get(XdsAttributes.XDS_CLIENT_POOL);
if (xdsClientPool == null) {
// TODO(zdapeng): create a new xdsClient from bootstrap if no one exists.
helper.updateBalancingState(
TRANSIENT_FAILURE,
new ErrorPicker(Status.UNAVAILABLE.withDescription(
"XDS_CLIENT_REF attributes not available from resolve addresses")));
"XDS_CLIENT_POOL attributes not available from resolve addresses")));
return;
}
xdsClient = xdsClientRef.getObject();
xdsClient = xdsClientPool.getObject();
}
Map<String, ?> newRawLbConfig = attributes.get(ATTR_LOAD_BALANCING_CONFIG);
@ -153,8 +153,8 @@ public final class CdsLoadBalancer extends LoadBalancer {
channelLogger.log(ChannelLogLevel.DEBUG, "CDS load balancer is shutting down");
switchingLoadBalancer.shutdown();
if (xdsClientRef != null) {
xdsClientRef.returnObject(xdsClient);
if (xdsClientPool != null) {
xdsClientPool.returnObject(xdsClient);
}
}

View File

@ -78,7 +78,7 @@ final class LookasideLb extends LoadBalancer {
@Nullable
private EndpointWatcher endpointWatcher;
@Nullable
private ObjectPool<XdsClient> xdsClientRef;
private ObjectPool<XdsClient> xdsClientPool;
@Nullable
XdsClient xdsClient;
// Only for EDS-only case.
@ -154,21 +154,21 @@ final class LookasideLb extends LoadBalancer {
newXdsConfig = (XdsConfig) cfg.getConfig();
}
if (xdsClientRef == null) {
// Init xdsClientRef and xdsClient.
if (xdsClientPool == null) {
// Init xdsClientPool and xdsClient.
// There are two usecases:
// 1. The EDS-only:
// The name resolver resolves a ResolvedAddresses with an XdsConfig. Use the bootstrap
// information to create a channel.
// 2. Non EDS-only usecase:
// XDS_CLIENT_REF attribute is available from ResolvedAddresses either from
// XDS_CLIENT_POOL attribute is available from ResolvedAddresses either from
// XdsNameResolver or CDS policy.
//
// We assume XdsConfig switching happens only within one usecase, and there is no switching
// between different usecases.
xdsClientRef = attributes.get(XdsAttributes.XDS_CLIENT_REF);
if (xdsClientRef == null) { // This is the EDS-only usecase.
xdsClientPool = attributes.get(XdsAttributes.XDS_CLIENT_POOL);
if (xdsClientPool == null) { // This is the EDS-only usecase.
final BootstrapInfo bootstrapInfo;
try {
bootstrapInfo = bootstrapper.readBootstrap();
@ -193,7 +193,7 @@ final class LookasideLb extends LoadBalancer {
channel = initLbChannel(
lookasideLbHelper, serverInfo.getServerUri(),
serverInfo.getChannelCredentials());
xdsClientRef = new RefCountedXdsClientObjectPool(new XdsClientFactory() {
xdsClientPool = new RefCountedXdsClientObjectPool(new XdsClientFactory() {
@Override
XdsClient createXdsClient() {
// TODO(zdapeng): Replace XdsComms2 with XdsClientImpl.
@ -203,7 +203,7 @@ final class LookasideLb extends LoadBalancer {
}
});
}
xdsClient = xdsClientRef.getObject();
xdsClient = xdsClientPool.getObject();
}
// Note: childPolicy change will be handled in LocalityStore, to be implemented.
@ -256,8 +256,8 @@ final class LookasideLb extends LoadBalancer {
public void shutdown() {
channelLogger.log(ChannelLogLevel.DEBUG, "EDS load balancer is shutting down");
switchingLoadBalancer.shutdown();
if (xdsClientRef != null) {
xdsClientRef.returnObject(xdsClient);
if (xdsClientPool != null) {
xdsClientPool.returnObject(xdsClient);
}
}

View File

@ -76,8 +76,8 @@ public final class XdsAttributes {
Attributes.Key.create("io.grpc.xds.XdsAttributes.downstreamTlsContext");
@NameResolver.ResolutionResultAttr
static final Attributes.Key<ObjectPool<XdsClient>> XDS_CLIENT_REF =
Attributes.Key.create("io.grpc.xds.XdsAttributes.xdsClientRef");
static final Attributes.Key<ObjectPool<XdsClient>> XDS_CLIENT_POOL =
Attributes.Key.create("io.grpc.xds.XdsAttributes.xdsClientPool");
private XdsAttributes() {}
}

View File

@ -155,7 +155,7 @@ final class XdsNameResolver extends NameResolver {
Attributes attrs =
Attributes.newBuilder()
.set(GrpcAttributes.NAME_RESOLVER_SERVICE_CONFIG, config)
.set(XdsAttributes.XDS_CLIENT_REF, xdsClientPool)
.set(XdsAttributes.XDS_CLIENT_POOL, xdsClientPool)
.build();
ResolutionResult result =
ResolutionResult.newBuilder()

View File

@ -77,7 +77,7 @@ import org.mockito.MockitoAnnotations;
@RunWith(JUnit4.class)
public class CdsLoadBalancerTest {
private final RefCountedXdsClientObjectPool xdsClientRef = new RefCountedXdsClientObjectPool(
private final RefCountedXdsClientObjectPool xdsClientPool = new RefCountedXdsClientObjectPool(
new XdsClientFactory() {
@Override
XdsClient createXdsClient() {
@ -159,7 +159,7 @@ public class CdsLoadBalancerTest {
.setAddresses(ImmutableList.<EquivalentAddressGroup>of())
.setAttributes(Attributes.newBuilder()
.set(ATTR_LOAD_BALANCING_CONFIG, lbConfig)
.set(XdsAttributes.XDS_CLIENT_REF, xdsClientRef)
.set(XdsAttributes.XDS_CLIENT_POOL, xdsClientPool)
.build())
.build();
@ -177,7 +177,7 @@ public class CdsLoadBalancerTest {
.setAddresses(ImmutableList.<EquivalentAddressGroup>of())
.setAttributes(Attributes.newBuilder()
.set(ATTR_LOAD_BALANCING_CONFIG, lbConfig1)
.set(XdsAttributes.XDS_CLIENT_REF, xdsClientRef)
.set(XdsAttributes.XDS_CLIENT_POOL, xdsClientPool)
.build())
.build();
cdsLoadBalancer.handleResolvedAddresses(resolvedAddresses1);
@ -217,7 +217,7 @@ public class CdsLoadBalancerTest {
.setAddresses(ImmutableList.<EquivalentAddressGroup>of())
.setAttributes(Attributes.newBuilder()
.set(ATTR_LOAD_BALANCING_CONFIG, lbConfig1)
.set(XdsAttributes.XDS_CLIENT_REF, xdsClientRef)
.set(XdsAttributes.XDS_CLIENT_POOL, xdsClientPool)
.build())
.build();
cdsLoadBalancer.handleResolvedAddresses(resolvedAddresses1);
@ -247,8 +247,8 @@ public class CdsLoadBalancerTest {
null);
ResolvedAddresses resolvedAddressesFoo = resolvedAddressesCaptor1.getValue();
assertThat(resolvedAddressesFoo.getLoadBalancingPolicyConfig()).isEqualTo(expectedXdsConfig);
assertThat(resolvedAddressesFoo.getAttributes().get(XdsAttributes.XDS_CLIENT_REF))
.isSameInstanceAs(xdsClientRef);
assertThat(resolvedAddressesFoo.getAttributes().get(XdsAttributes.XDS_CLIENT_POOL))
.isSameInstanceAs(xdsClientPool);
SubchannelPicker picker1 = mock(SubchannelPicker.class);
edsLbHelper1.updateBalancingState(ConnectivityState.READY, picker1);
@ -261,7 +261,7 @@ public class CdsLoadBalancerTest {
.setAddresses(ImmutableList.<EquivalentAddressGroup>of())
.setAttributes(Attributes.newBuilder()
.set(ATTR_LOAD_BALANCING_CONFIG, lbConfig2)
.set(XdsAttributes.XDS_CLIENT_REF, xdsClientRef)
.set(XdsAttributes.XDS_CLIENT_POOL, xdsClientPool)
.build())
.build();
cdsLoadBalancer.handleResolvedAddresses(resolvedAddresses2);
@ -293,8 +293,8 @@ public class CdsLoadBalancerTest {
"lrsBar.googleapis.com");
ResolvedAddresses resolvedAddressesBar = resolvedAddressesCaptor2.getValue();
assertThat(resolvedAddressesBar.getLoadBalancingPolicyConfig()).isEqualTo(expectedXdsConfig);
assertThat(resolvedAddressesBar.getAttributes().get(XdsAttributes.XDS_CLIENT_REF))
.isSameInstanceAs(xdsClientRef);
assertThat(resolvedAddressesBar.getAttributes().get(XdsAttributes.XDS_CLIENT_POOL))
.isSameInstanceAs(xdsClientPool);
SubchannelPicker picker2 = mock(SubchannelPicker.class);
edsLbHelper2.updateBalancingState(ConnectivityState.CONNECTING, picker2);
@ -325,7 +325,7 @@ public class CdsLoadBalancerTest {
cdsLoadBalancer.shutdown();
verify(edsLoadBalancer2).shutdown();
verify(xdsClient).cancelClusterDataWatch("bar.googleapis.com", clusterWatcher2);
assertThat(xdsClientRef.xdsClient).isNull();
assertThat(xdsClientPool.xdsClient).isNull();
}
@Test
@ -341,7 +341,7 @@ public class CdsLoadBalancerTest {
.setAttributes(
Attributes.newBuilder()
.set(ATTR_LOAD_BALANCING_CONFIG, lbConfig1)
.set(XdsAttributes.XDS_CLIENT_REF, xdsClientRef)
.set(XdsAttributes.XDS_CLIENT_POOL, xdsClientPool)
.build())
.build();
cdsLoadBalancer.handleResolvedAddresses(resolvedAddresses1);
@ -376,7 +376,7 @@ public class CdsLoadBalancerTest {
ArrayList<EquivalentAddressGroup> eagList = new ArrayList<>();
eagList.add(new EquivalentAddressGroup(new InetSocketAddress("foo.com", 8080)));
eagList.add(new EquivalentAddressGroup(InetSocketAddress.createUnresolved("localhost", 8081),
Attributes.newBuilder().set(XdsAttributes.XDS_CLIENT_REF, xdsClientRef).build()));
Attributes.newBuilder().set(XdsAttributes.XDS_CLIENT_POOL, xdsClientPool).build()));
LoadBalancer.CreateSubchannelArgs createSubchannelArgs =
LoadBalancer.CreateSubchannelArgs.newBuilder()
.setAddresses(eagList)
@ -398,15 +398,15 @@ public class CdsLoadBalancerTest {
capturedUpstreamTlsContext =
capturedEag.getAttributes().get(XdsAttributes.ATTR_UPSTREAM_TLS_CONTEXT);
assertThat(capturedUpstreamTlsContext).isSameInstanceAs(upstreamTlsContext);
assertThat(capturedEag.getAttributes().get(XdsAttributes.XDS_CLIENT_REF))
.isSameInstanceAs(xdsClientRef);
assertThat(capturedEag.getAttributes().get(XdsAttributes.XDS_CLIENT_POOL))
.isSameInstanceAs(xdsClientPool);
LoadBalancer edsLoadBalancer1 = edsLoadBalancers.poll();
cdsLoadBalancer.shutdown();
verify(edsLoadBalancer1).shutdown();
verify(xdsClient).cancelClusterDataWatch("foo.googleapis.com", clusterWatcher1);
assertThat(xdsClientRef.xdsClient).isNull();
assertThat(xdsClientPool.xdsClient).isNull();
}
@Test
@ -418,7 +418,7 @@ public class CdsLoadBalancerTest {
.setAddresses(ImmutableList.<EquivalentAddressGroup>of())
.setAttributes(Attributes.newBuilder()
.set(ATTR_LOAD_BALANCING_CONFIG, lbConfig)
.set(XdsAttributes.XDS_CLIENT_REF, xdsClientRef)
.set(XdsAttributes.XDS_CLIENT_POOL, xdsClientPool)
.build())
.build();
cdsLoadBalancer.handleResolvedAddresses(resolvedAddresses);
@ -470,7 +470,7 @@ public class CdsLoadBalancerTest {
.setAddresses(ImmutableList.<EquivalentAddressGroup>of())
.setAttributes(Attributes.newBuilder()
.set(ATTR_LOAD_BALANCING_CONFIG, lbConfig)
.set(XdsAttributes.XDS_CLIENT_REF, xdsClientRef)
.set(XdsAttributes.XDS_CLIENT_POOL, xdsClientPool)
.build())
.build();
cdsLoadBalancer.handleResolvedAddresses(resolvedAddresses1);

View File

@ -284,8 +284,8 @@ public class LookasideLbTest {
return mock(XdsClient.class);
}
};
ObjectPool<XdsClient> xdsClientRef = new RefCountedXdsClientObjectPool(xdsClientFactory);
XdsClient xdsClientFromResolver = xdsClientRef.getObject();
ObjectPool<XdsClient> xdsClientPool = new RefCountedXdsClientObjectPool(xdsClientFactory);
XdsClient xdsClientFromResolver = xdsClientPool.getObject();
String lbConfigRaw =
"{'childPolicy' : [{'supported1' : {}}], 'edsServiceName' : 'edsServiceName1'}"
@ -296,7 +296,7 @@ public class LookasideLbTest {
.setAddresses(ImmutableList.<EquivalentAddressGroup>of())
.setAttributes(Attributes.newBuilder()
.set(ATTR_LOAD_BALANCING_CONFIG, lbConfig)
.set(XdsAttributes.XDS_CLIENT_REF, xdsClientRef)
.set(XdsAttributes.XDS_CLIENT_POOL, xdsClientPool)
.build())
.build();
@ -340,8 +340,8 @@ public class LookasideLbTest {
return mock(XdsClient.class);
}
};
ObjectPool<XdsClient> xdsClientRef = new RefCountedXdsClientObjectPool(xdsClientFactory);
XdsClient xdsClientFromResolver = xdsClientRef.getObject();
ObjectPool<XdsClient> xdsClientPool = new RefCountedXdsClientObjectPool(xdsClientFactory);
XdsClient xdsClientFromResolver = xdsClientPool.getObject();
String lbConfigRaw =
"{'childPolicy' : [{'supported1' : {}}], 'edsServiceName' : 'edsServiceName1'}"
@ -352,7 +352,7 @@ public class LookasideLbTest {
.setAddresses(eags)
.setAttributes(Attributes.newBuilder()
.set(ATTR_LOAD_BALANCING_CONFIG, lbConfig)
.set(XdsAttributes.XDS_CLIENT_REF, xdsClientRef)
.set(XdsAttributes.XDS_CLIENT_POOL, xdsClientPool)
.build())
.build();
lookasideLb.handleResolvedAddresses(resolvedAddresses);
@ -374,7 +374,7 @@ public class LookasideLbTest {
.setAddresses(eags)
.setAttributes(Attributes.newBuilder()
.set(ATTR_LOAD_BALANCING_CONFIG, lbConfig)
.set(XdsAttributes.XDS_CLIENT_REF, xdsClientRef)
.set(XdsAttributes.XDS_CLIENT_POOL, xdsClientPool)
.build())
.build();
lookasideLb.handleResolvedAddresses(resolvedAddresses);
@ -397,7 +397,7 @@ public class LookasideLbTest {
.setAddresses(eags)
.setAttributes(Attributes.newBuilder()
.set(ATTR_LOAD_BALANCING_CONFIG, lbConfig)
.set(XdsAttributes.XDS_CLIENT_REF, xdsClientRef)
.set(XdsAttributes.XDS_CLIENT_POOL, xdsClientPool)
.build())
.build();
lookasideLb.handleResolvedAddresses(resolvedAddresses);
@ -425,7 +425,7 @@ public class LookasideLbTest {
.setAddresses(eags)
.setAttributes(Attributes.newBuilder()
.set(ATTR_LOAD_BALANCING_CONFIG, lbConfig)
.set(XdsAttributes.XDS_CLIENT_REF, xdsClientRef)
.set(XdsAttributes.XDS_CLIENT_POOL, xdsClientPool)
.build())
.build();
lookasideLb.handleResolvedAddresses(resolvedAddresses);
@ -447,7 +447,7 @@ public class LookasideLbTest {
.setAddresses(eags)
.setAttributes(Attributes.newBuilder()
.set(ATTR_LOAD_BALANCING_CONFIG, lbConfig)
.set(XdsAttributes.XDS_CLIENT_REF, xdsClientRef)
.set(XdsAttributes.XDS_CLIENT_POOL, xdsClientPool)
.build())
.build();
lookasideLb.handleResolvedAddresses(resolvedAddresses);
@ -472,7 +472,7 @@ public class LookasideLbTest {
lookasideLb.shutdown();
verify(localityStore5).reset();
xdsClientRef.returnObject(xdsClientFromResolver);
xdsClientPool.returnObject(xdsClientFromResolver);
}
@Test
@ -512,15 +512,15 @@ public class LookasideLbTest {
}
@Test
public void handleResolvedAddress_withXdsClientRefAttributes() throws Exception {
public void handleResolvedAddress_withxdsClientPoolAttributes() throws Exception {
XdsClientFactory xdsClientFactory = new XdsClientFactory() {
@Override
XdsClient createXdsClient() {
return mock(XdsClient.class);
}
};
ObjectPool<XdsClient> xdsClientRef = new RefCountedXdsClientObjectPool(xdsClientFactory);
XdsClient xdsClientFromResolver = xdsClientRef.getObject();
ObjectPool<XdsClient> xdsClientPool = new RefCountedXdsClientObjectPool(xdsClientFactory);
XdsClient xdsClientFromResolver = xdsClientPool.getObject();
String lbConfigRaw =
"{'childPolicy' : [{'supported1' : {}}], 'edsServiceName' : 'edsServiceName1'}"
@ -531,7 +531,7 @@ public class LookasideLbTest {
.setAddresses(ImmutableList.<EquivalentAddressGroup>of())
.setAttributes(Attributes.newBuilder()
.set(ATTR_LOAD_BALANCING_CONFIG, lbConfig)
.set(XdsAttributes.XDS_CLIENT_REF, xdsClientRef)
.set(XdsAttributes.XDS_CLIENT_POOL, xdsClientPool)
.build())
.build();
@ -551,7 +551,7 @@ public class LookasideLbTest {
verify(helper).updateBalancingState(READY, picker);
// Mimic resolver shutdown
xdsClientRef.returnObject(xdsClientFromResolver);
xdsClientPool.returnObject(xdsClientFromResolver);
verify(xdsClientFromResolver, never()).shutdown();
lookasideLb.shutdown();
verify(xdsClientFromResolver).cancelEndpointDataWatch("edsServiceName1", endpointWatcher);

View File

@ -64,25 +64,25 @@ public class XdsClientTest {
return mock(XdsClient.class);
}
};
RefCountedXdsClientObjectPool xdsClientRef =
RefCountedXdsClientObjectPool xdsClientPool =
new RefCountedXdsClientObjectPool(xdsClientFactory);
// getObject once
XdsClient xdsClient = xdsClientRef.getObject();
XdsClient xdsClient = xdsClientPool.getObject();
assertThat(xdsClient).isNotNull();
// getObject twice
assertThat(xdsClientRef.getObject()).isSameInstanceAs(xdsClient);
assertThat(xdsClientPool.getObject()).isSameInstanceAs(xdsClient);
// returnObject once
assertThat(xdsClientRef.returnObject(xdsClient)).isNull();
assertThat(xdsClientPool.returnObject(xdsClient)).isNull();
verify(xdsClient, never()).shutdown();
// returnObject twice
assertThat(xdsClientRef.returnObject(xdsClient)).isNull();
assertThat(xdsClientPool.returnObject(xdsClient)).isNull();
verify(xdsClient).shutdown();
assertThat(xdsClientRef.xdsClient).isNull();
assertThat(xdsClientPool.xdsClient).isNull();
thrown.expect(IllegalStateException.class);
// returnOject for the 3rd time
xdsClientRef.returnObject(xdsClient);
xdsClientPool.returnObject(xdsClient);
}
@Test
@ -93,13 +93,13 @@ public class XdsClientTest {
return mock(XdsClient.class);
}
};
RefCountedXdsClientObjectPool xdsClientRef =
RefCountedXdsClientObjectPool xdsClientPool =
new RefCountedXdsClientObjectPool(xdsClientFactory);
xdsClientRef.getObject();
xdsClientPool.getObject();
thrown.expect(IllegalStateException.class);
xdsClientRef.returnObject(mock(XdsClient.class));
xdsClientPool.returnObject(mock(XdsClient.class));
}
@Test
@ -110,15 +110,15 @@ public class XdsClientTest {
return mock(XdsClient.class);
}
};
RefCountedXdsClientObjectPool xdsClientRef =
RefCountedXdsClientObjectPool xdsClientPool =
new RefCountedXdsClientObjectPool(xdsClientFactory);
XdsClient xdsClient1 = xdsClientRef.getObject();
XdsClient xdsClient1 = xdsClientPool.getObject();
verify(xdsClient1, never()).shutdown();
assertThat(xdsClientRef.returnObject(xdsClient1)).isNull();
assertThat(xdsClientPool.returnObject(xdsClient1)).isNull();
verify(xdsClient1).shutdown();
XdsClient xdsClient2 = xdsClientRef.getObject();
XdsClient xdsClient2 = xdsClientPool.getObject();
assertThat(xdsClient2).isNotSameInstanceAs(xdsClient1);
}
}

View File

@ -223,7 +223,7 @@ public class XdsNameResolverTest {
}
@Test
public void resolve_passXdsClientRefInResult() {
public void resolve_passxdsClientPoolInResult() {
xdsNameResolver.start(mockListener);
assertThat(responseObservers).hasSize(1);
StreamObserver<DiscoveryResponse> responseObserver = responseObservers.poll();
@ -236,7 +236,7 @@ public class XdsNameResolverTest {
ArgumentCaptor<ResolutionResult> resolutionResultCaptor = ArgumentCaptor.forClass(null);
verify(mockListener).onResult(resolutionResultCaptor.capture());
ResolutionResult result = resolutionResultCaptor.getValue();
ObjectPool<XdsClient> xdsClientPool = result.getAttributes().get(XdsAttributes.XDS_CLIENT_REF);
ObjectPool<XdsClient> xdsClientPool = result.getAttributes().get(XdsAttributes.XDS_CLIENT_POOL);
assertThat(xdsClientPool).isNotNull();
}