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() {
|
||||
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 =
|
||||
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 =
|
||||
DecompressorRegistry.getDefaultInstance();
|
||||
|
||||
|
|
@ -99,9 +96,10 @@ public abstract class AbstractManagedChannelImplBuilder
|
|||
ObjectPool<? extends Executor> executorPool = DEFAULT_EXECUTOR_POOL;
|
||||
|
||||
private final List<ClientInterceptor> interceptors = new ArrayList<>();
|
||||
final NameResolverRegistry nameResolverRegistry = NameResolverRegistry.getDefaultRegistry();
|
||||
|
||||
// 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;
|
||||
|
||||
|
|
@ -238,7 +236,7 @@ public abstract class AbstractManagedChannelImplBuilder
|
|||
if (resolverFactory != null) {
|
||||
this.nameResolverFactory = resolverFactory;
|
||||
} else {
|
||||
this.nameResolverFactory = DEFAULT_NAME_RESOLVER_FACTORY;
|
||||
this.nameResolverFactory = nameResolverRegistry.asFactory();
|
||||
}
|
||||
return thisT();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -63,6 +63,7 @@ import io.grpc.MethodDescriptor;
|
|||
import io.grpc.NameResolver;
|
||||
import io.grpc.NameResolver.ConfigOrError;
|
||||
import io.grpc.NameResolver.ResolutionResult;
|
||||
import io.grpc.NameResolverRegistry;
|
||||
import io.grpc.ProxyDetector;
|
||||
import io.grpc.Status;
|
||||
import io.grpc.SynchronizationContext;
|
||||
|
|
@ -128,6 +129,7 @@ final class ManagedChannelImpl extends ManagedChannel implements
|
|||
|
||||
private final InternalLogId logId;
|
||||
private final String target;
|
||||
private final NameResolverRegistry nameResolverRegistry;
|
||||
private final NameResolver.Factory nameResolverFactory;
|
||||
private final NameResolver.Args nameResolverArgs;
|
||||
private final AutoConfiguredLoadBalancerFactory loadBalancerFactory;
|
||||
|
|
@ -559,6 +561,7 @@ final class ManagedChannelImpl extends ManagedChannel implements
|
|||
builder.proxyDetector != null ? builder.proxyDetector : GrpcUtil.getDefaultProxyDetector();
|
||||
this.retryEnabled = builder.retryEnabled && !builder.temporarilyDisableRetry;
|
||||
this.loadBalancerFactory = new AutoConfiguredLoadBalancerFactory(builder.defaultLbPolicy);
|
||||
this.nameResolverRegistry = builder.nameResolverRegistry;
|
||||
this.nameResolverArgs = NameResolver.Args.newBuilder()
|
||||
.setDefaultPort(builder.getDefaultPort())
|
||||
.setProxyDetector(proxyDetector)
|
||||
|
|
@ -1294,6 +1297,16 @@ final class ManagedChannelImpl extends ManagedChannel implements
|
|||
public ChannelLogger getChannelLogger() {
|
||||
return channelLogger;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NameResolver.Args getNameResolverArgs() {
|
||||
return nameResolverArgs;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NameResolverRegistry getNameResolverRegistry() {
|
||||
return nameResolverRegistry;
|
||||
}
|
||||
}
|
||||
|
||||
private final class NameResolverListener extends NameResolver.Listener2 {
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ import io.grpc.LoadBalancer.SubchannelPicker;
|
|||
import io.grpc.LoadBalancer;
|
||||
import io.grpc.ManagedChannel;
|
||||
import io.grpc.NameResolver;
|
||||
import io.grpc.NameResolverRegistry;
|
||||
import io.grpc.SynchronizationContext;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
|
|
@ -107,6 +108,16 @@ public abstract class ForwardingLoadBalancerHelper extends LoadBalancer.Helper {
|
|||
return delegate().getChannelLogger();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NameResolver.Args getNameResolverArgs() {
|
||||
return delegate().getNameResolverArgs();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NameResolverRegistry getNameResolverRegistry() {
|
||||
return delegate().getNameResolverRegistry();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String 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.ConfigOrError;
|
||||
import io.grpc.NameResolver.ResolutionResult;
|
||||
import io.grpc.NameResolverRegistry;
|
||||
import io.grpc.ProxiedSocketAddress;
|
||||
import io.grpc.ProxyDetector;
|
||||
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
|
||||
public void refreshNameResolution_whenSubchannelConnectionFailed_notIdle() {
|
||||
subtestNameResolutionRefreshWhenConnectionFailed(false, false);
|
||||
|
|
|
|||
Loading…
Reference in New Issue