Skip to content

Commit

Permalink
api,core: add LoadBalancer.Helper#createResolvingOobChannelBuilder api (
Browse files Browse the repository at this point in the history
  • Loading branch information
creamsoup committed Jun 17, 2020
1 parent a543174 commit f5258dc
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 12 deletions.
20 changes: 18 additions & 2 deletions api/src/main/java/io/grpc/LoadBalancer.java
Expand Up @@ -1044,15 +1044,31 @@ public void updateOobChannelAddresses(ManagedChannel channel, EquivalentAddressG
* {@link ManagedChannelBuilder#forTarget} for the format of a target string.
*
* <p>The target string will be resolved by a {@link NameResolver} created according to the
* target string. The out-of-band channel doesn't have load-balancing. If multiple addresses
* are resolved for the target, the first working address will be used.
* target string.
*
* <p>The LoadBalancer is responsible for closing unused OOB channels, and closing all OOB
* channels within {@link #shutdown}.
*
* @since 1.20.0
*/
public ManagedChannel createResolvingOobChannel(String target) {
return createResolvingOobChannelBuilder(target).build();
}

/**
* Creates an out-of-band channel builder for LoadBalancer's own RPC needs, e.g., talking to an
* external load-balancer service, that is specified by a target string. See the documentation
* on {@link ManagedChannelBuilder#forTarget} for the format of a target string.
*
* <p>The target string will be resolved by a {@link NameResolver} created according to the
* target string.
*
* <p>The LoadBalancer is responsible for closing unused OOB channels, and closing all OOB
* channels within {@link #shutdown}.
*
* @since 1.31.0
*/
public ManagedChannelBuilder<?> createResolvingOobChannelBuilder(String target) {
throw new UnsupportedOperationException("Not implemented");
}

Expand Down
26 changes: 16 additions & 10 deletions core/src/main/java/io/grpc/internal/ManagedChannelImpl.java
Expand Up @@ -60,6 +60,7 @@
import io.grpc.LoadBalancer.SubchannelPicker;
import io.grpc.LoadBalancer.SubchannelStateListener;
import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;
import io.grpc.Metadata;
import io.grpc.MethodDescriptor;
import io.grpc.NameResolver;
Expand Down Expand Up @@ -1260,7 +1261,7 @@ public void run() {
}

@Override
public ManagedChannel createResolvingOobChannel(String target) {
public ManagedChannelBuilder<?> createResolvingOobChannelBuilder(String target) {
final class ResolvingOobChannelBuilder
extends AbstractManagedChannelImplBuilder<ResolvingOobChannelBuilder> {
int defaultPort = -1;
Expand All @@ -1278,6 +1279,19 @@ public int getDefaultPort() {
protected ClientTransportFactory buildTransportFactory() {
throw new UnsupportedOperationException();
}

@Override
public ManagedChannel build() {
// TODO(creamsoup) prevent main channel to shutdown if oob channel is not terminated
return new ManagedChannelImpl(
this,
transportFactory,
backoffPolicyProvider,
balancerRpcExecutorPool,
stopwatchSupplier,
Collections.<ClientInterceptor>emptyList(),
timeProvider);
}
}

checkState(!terminated, "Channel is terminated");
Expand All @@ -1291,15 +1305,7 @@ protected ClientTransportFactory buildTransportFactory() {
builder.proxyDetector = nameResolverArgs.getProxyDetector();
builder.defaultPort = nameResolverArgs.getDefaultPort();
builder.userAgent = userAgent;
return
new ManagedChannelImpl(
builder,
transportFactory,
backoffPolicyProvider,
balancerRpcExecutorPool,
stopwatchSupplier,
Collections.<ClientInterceptor>emptyList(),
timeProvider);
return builder;
}

@Override
Expand Down
Expand Up @@ -27,6 +27,7 @@
import io.grpc.LoadBalancer.SubchannelPicker;
import io.grpc.LoadBalancer;
import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;
import io.grpc.NameResolver;
import io.grpc.NameResolverRegistry;
import io.grpc.SynchronizationContext;
Expand Down Expand Up @@ -68,6 +69,11 @@ public void updateOobChannelAddresses(ManagedChannel channel, EquivalentAddressG
delegate().updateOobChannelAddresses(channel, eag);
}

@Override
public ManagedChannelBuilder<?> createResolvingOobChannelBuilder(String target) {
return delegate().createResolvingOobChannelBuilder(target);
}

@Override
public ManagedChannel createResolvingOobChannel(String target) {
return delegate().createResolvingOobChannel(target);
Expand Down

0 comments on commit f5258dc

Please sign in to comment.