mirror of https://github.com/grpc/grpc-java.git
api: add getters for NameResolver.Args and NameResolverRegistry in LoadBalancer.Helper (#5685)
Hierarchical LoadBalancers such as xDS will need this to create NameResolvers to resolve locality target names.
This commit is contained in:
parent
3aa3218fb2
commit
175a423c10
|
|
@ -861,6 +861,25 @@ public abstract class LoadBalancer {
|
||||||
public ChannelLogger getChannelLogger() {
|
public ChannelLogger getChannelLogger() {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the {@link NameResolver.Args} that the Channel uses to create {@link NameResolver}s.
|
||||||
|
*
|
||||||
|
* @since 1.22.0
|
||||||
|
*/
|
||||||
|
public NameResolver.Args getNameResolverArgs() {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the {@link NameResolverRegistry} that the Channel uses to look for {@link
|
||||||
|
* NameResolver}s.
|
||||||
|
*
|
||||||
|
* @since 1.22.0
|
||||||
|
*/
|
||||||
|
public NameResolverRegistry getNameResolverRegistry() {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -84,9 +84,6 @@ public abstract class AbstractManagedChannelImplBuilder
|
||||||
private static final ObjectPool<? extends Executor> DEFAULT_EXECUTOR_POOL =
|
private static final ObjectPool<? extends Executor> DEFAULT_EXECUTOR_POOL =
|
||||||
SharedResourcePool.forResource(GrpcUtil.SHARED_CHANNEL_EXECUTOR);
|
SharedResourcePool.forResource(GrpcUtil.SHARED_CHANNEL_EXECUTOR);
|
||||||
|
|
||||||
private static final NameResolver.Factory DEFAULT_NAME_RESOLVER_FACTORY =
|
|
||||||
NameResolverRegistry.getDefaultRegistry().asFactory();
|
|
||||||
|
|
||||||
private static final DecompressorRegistry DEFAULT_DECOMPRESSOR_REGISTRY =
|
private static final DecompressorRegistry DEFAULT_DECOMPRESSOR_REGISTRY =
|
||||||
DecompressorRegistry.getDefaultInstance();
|
DecompressorRegistry.getDefaultInstance();
|
||||||
|
|
||||||
|
|
@ -99,9 +96,10 @@ public abstract class AbstractManagedChannelImplBuilder
|
||||||
ObjectPool<? extends Executor> executorPool = DEFAULT_EXECUTOR_POOL;
|
ObjectPool<? extends Executor> executorPool = DEFAULT_EXECUTOR_POOL;
|
||||||
|
|
||||||
private final List<ClientInterceptor> interceptors = new ArrayList<>();
|
private final List<ClientInterceptor> interceptors = new ArrayList<>();
|
||||||
|
final NameResolverRegistry nameResolverRegistry = NameResolverRegistry.getDefaultRegistry();
|
||||||
|
|
||||||
// Access via getter, which may perform authority override as needed
|
// Access via getter, which may perform authority override as needed
|
||||||
private NameResolver.Factory nameResolverFactory = DEFAULT_NAME_RESOLVER_FACTORY;
|
private NameResolver.Factory nameResolverFactory = nameResolverRegistry.asFactory();
|
||||||
|
|
||||||
final String target;
|
final String target;
|
||||||
|
|
||||||
|
|
@ -238,7 +236,7 @@ public abstract class AbstractManagedChannelImplBuilder
|
||||||
if (resolverFactory != null) {
|
if (resolverFactory != null) {
|
||||||
this.nameResolverFactory = resolverFactory;
|
this.nameResolverFactory = resolverFactory;
|
||||||
} else {
|
} else {
|
||||||
this.nameResolverFactory = DEFAULT_NAME_RESOLVER_FACTORY;
|
this.nameResolverFactory = nameResolverRegistry.asFactory();
|
||||||
}
|
}
|
||||||
return thisT();
|
return thisT();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,7 @@ import io.grpc.MethodDescriptor;
|
||||||
import io.grpc.NameResolver;
|
import io.grpc.NameResolver;
|
||||||
import io.grpc.NameResolver.ConfigOrError;
|
import io.grpc.NameResolver.ConfigOrError;
|
||||||
import io.grpc.NameResolver.ResolutionResult;
|
import io.grpc.NameResolver.ResolutionResult;
|
||||||
|
import io.grpc.NameResolverRegistry;
|
||||||
import io.grpc.ProxyDetector;
|
import io.grpc.ProxyDetector;
|
||||||
import io.grpc.Status;
|
import io.grpc.Status;
|
||||||
import io.grpc.SynchronizationContext;
|
import io.grpc.SynchronizationContext;
|
||||||
|
|
@ -128,6 +129,7 @@ final class ManagedChannelImpl extends ManagedChannel implements
|
||||||
|
|
||||||
private final InternalLogId logId;
|
private final InternalLogId logId;
|
||||||
private final String target;
|
private final String target;
|
||||||
|
private final NameResolverRegistry nameResolverRegistry;
|
||||||
private final NameResolver.Factory nameResolverFactory;
|
private final NameResolver.Factory nameResolverFactory;
|
||||||
private final NameResolver.Args nameResolverArgs;
|
private final NameResolver.Args nameResolverArgs;
|
||||||
private final AutoConfiguredLoadBalancerFactory loadBalancerFactory;
|
private final AutoConfiguredLoadBalancerFactory loadBalancerFactory;
|
||||||
|
|
@ -559,6 +561,7 @@ final class ManagedChannelImpl extends ManagedChannel implements
|
||||||
builder.proxyDetector != null ? builder.proxyDetector : GrpcUtil.getDefaultProxyDetector();
|
builder.proxyDetector != null ? builder.proxyDetector : GrpcUtil.getDefaultProxyDetector();
|
||||||
this.retryEnabled = builder.retryEnabled && !builder.temporarilyDisableRetry;
|
this.retryEnabled = builder.retryEnabled && !builder.temporarilyDisableRetry;
|
||||||
this.loadBalancerFactory = new AutoConfiguredLoadBalancerFactory(builder.defaultLbPolicy);
|
this.loadBalancerFactory = new AutoConfiguredLoadBalancerFactory(builder.defaultLbPolicy);
|
||||||
|
this.nameResolverRegistry = builder.nameResolverRegistry;
|
||||||
this.nameResolverArgs = NameResolver.Args.newBuilder()
|
this.nameResolverArgs = NameResolver.Args.newBuilder()
|
||||||
.setDefaultPort(builder.getDefaultPort())
|
.setDefaultPort(builder.getDefaultPort())
|
||||||
.setProxyDetector(proxyDetector)
|
.setProxyDetector(proxyDetector)
|
||||||
|
|
@ -1294,6 +1297,16 @@ final class ManagedChannelImpl extends ManagedChannel implements
|
||||||
public ChannelLogger getChannelLogger() {
|
public ChannelLogger getChannelLogger() {
|
||||||
return channelLogger;
|
return channelLogger;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NameResolver.Args getNameResolverArgs() {
|
||||||
|
return nameResolverArgs;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NameResolverRegistry getNameResolverRegistry() {
|
||||||
|
return nameResolverRegistry;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private final class NameResolverListener extends NameResolver.Listener2 {
|
private final class NameResolverListener extends NameResolver.Listener2 {
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@ import io.grpc.LoadBalancer.SubchannelPicker;
|
||||||
import io.grpc.LoadBalancer;
|
import io.grpc.LoadBalancer;
|
||||||
import io.grpc.ManagedChannel;
|
import io.grpc.ManagedChannel;
|
||||||
import io.grpc.NameResolver;
|
import io.grpc.NameResolver;
|
||||||
|
import io.grpc.NameResolverRegistry;
|
||||||
import io.grpc.SynchronizationContext;
|
import io.grpc.SynchronizationContext;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.ScheduledExecutorService;
|
import java.util.concurrent.ScheduledExecutorService;
|
||||||
|
|
@ -107,6 +108,16 @@ public abstract class ForwardingLoadBalancerHelper extends LoadBalancer.Helper {
|
||||||
return delegate().getChannelLogger();
|
return delegate().getChannelLogger();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NameResolver.Args getNameResolverArgs() {
|
||||||
|
return delegate().getNameResolverArgs();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NameResolverRegistry getNameResolverRegistry() {
|
||||||
|
return delegate().getNameResolverRegistry();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return MoreObjects.toStringHelper(this).add("delegate", delegate()).toString();
|
return MoreObjects.toStringHelper(this).add("delegate", delegate()).toString();
|
||||||
|
|
|
||||||
|
|
@ -93,6 +93,7 @@ import io.grpc.MethodDescriptor.MethodType;
|
||||||
import io.grpc.NameResolver;
|
import io.grpc.NameResolver;
|
||||||
import io.grpc.NameResolver.ConfigOrError;
|
import io.grpc.NameResolver.ConfigOrError;
|
||||||
import io.grpc.NameResolver.ResolutionResult;
|
import io.grpc.NameResolver.ResolutionResult;
|
||||||
|
import io.grpc.NameResolverRegistry;
|
||||||
import io.grpc.ProxiedSocketAddress;
|
import io.grpc.ProxiedSocketAddress;
|
||||||
import io.grpc.ProxyDetector;
|
import io.grpc.ProxyDetector;
|
||||||
import io.grpc.SecurityLevel;
|
import io.grpc.SecurityLevel;
|
||||||
|
|
@ -1602,6 +1603,26 @@ public class ManagedChannelImplTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void lbHelper_getNameResolverArgs() {
|
||||||
|
createChannel();
|
||||||
|
|
||||||
|
NameResolver.Args args = helper.getNameResolverArgs();
|
||||||
|
assertThat(args.getDefaultPort()).isEqualTo(DEFAULT_PORT);
|
||||||
|
assertThat(args.getProxyDetector()).isSameInstanceAs(GrpcUtil.DEFAULT_PROXY_DETECTOR);
|
||||||
|
assertThat(args.getSynchronizationContext())
|
||||||
|
.isSameInstanceAs(helper.getSynchronizationContext());
|
||||||
|
assertThat(args.getServiceConfigParser()).isNotNull();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void lbHelper_getNameResolverRegistry() {
|
||||||
|
createChannel();
|
||||||
|
|
||||||
|
assertThat(helper.getNameResolverRegistry())
|
||||||
|
.isSameInstanceAs(NameResolverRegistry.getDefaultRegistry());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void refreshNameResolution_whenSubchannelConnectionFailed_notIdle() {
|
public void refreshNameResolution_whenSubchannelConnectionFailed_notIdle() {
|
||||||
subtestNameResolutionRefreshWhenConnectionFailed(false, false);
|
subtestNameResolutionRefreshWhenConnectionFailed(false, false);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue