Skip to content

Commit

Permalink
rls: use channel creds to create resolvingOobChannel
Browse files Browse the repository at this point in the history
  • Loading branch information
dapengzhang0 committed Jan 29, 2021
1 parent 9437783 commit 9bb9fef
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 6 deletions.
9 changes: 7 additions & 2 deletions rls/src/main/java/io/grpc/rls/CachingRlsLbClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -139,8 +139,13 @@ private CachingRlsLbClient(Builder builder) {
timeProvider);
RlsRequestFactory requestFactory = new RlsRequestFactory(lbPolicyConfig.getRouteLookupConfig());
rlsPicker = new RlsPicker(requestFactory);
ManagedChannelBuilder<?> rlsChannelBuilder =
helper.createResolvingOobChannelBuilder(rlsConfig.getLookupService());
// It is safe to use helper.getUnsafeChannelCredentials() because the client authenticates the
// RLS server using the same authority as the backends, even though the RLS server’s addresses
// will be looked up differently than the backends; overrideAuthority(helper.getAuthority()) is
// called to impose the authority security restrictions.
ManagedChannelBuilder<?> rlsChannelBuilder = helper.createResolvingOobChannelBuilder(
rlsConfig.getLookupService(), helper.getUnsafeChannelCredentials());
rlsChannelBuilder.overrideAuthority(helper.getAuthority());
logger = helper.getChannelLogger();
if (enableOobChannelDirectPath) {
logger.log(
Expand Down
17 changes: 15 additions & 2 deletions rls/src/test/java/io/grpc/rls/CachingRlsLbClientTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import com.google.common.util.concurrent.SettableFuture;
import io.grpc.Attributes;
import io.grpc.CallOptions;
import io.grpc.ChannelCredentials;
import io.grpc.ChannelLogger;
import io.grpc.ConnectivityState;
import io.grpc.EquivalentAddressGroup;
Expand Down Expand Up @@ -536,7 +537,8 @@ public void run() {
private final class FakeHelper extends Helper {

@Override
public ManagedChannelBuilder<?> createResolvingOobChannelBuilder(String target) {
public ManagedChannelBuilder<?> createResolvingOobChannelBuilder(
String target, ChannelCredentials creds) {
try {
grpcCleanupRule.register(
InProcessServerBuilder.forName(target)
Expand Down Expand Up @@ -579,7 +581,18 @@ public void updateBalancingState(

@Override
public String getAuthority() {
throw new UnsupportedOperationException();
return DEFAULT_TARGET;
}

@Override
public ChannelCredentials getUnsafeChannelCredentials() {
// In test we don't do any authentication.
return new ChannelCredentials() {
@Override
public ChannelCredentials withoutBearerTokens() {
return this;
}
};
}

@Override
Expand Down
18 changes: 16 additions & 2 deletions rls/src/test/java/io/grpc/rls/RlsLoadBalancerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import com.google.common.collect.ImmutableMap;
import io.grpc.Attributes;
import io.grpc.CallOptions;
import io.grpc.ChannelCredentials;
import io.grpc.ChannelLogger;
import io.grpc.ConnectivityState;
import io.grpc.ConnectivityStateInfo;
Expand Down Expand Up @@ -376,7 +377,7 @@ private void deliverResolvedAddresses() throws Exception {
.setAddresses(ImmutableList.of(new EquivalentAddressGroup(mock(SocketAddress.class))))
.setLoadBalancingPolicyConfig(parsedConfigOrError.getConfig())
.build());
verify(helper).createResolvingOobChannelBuilder(anyString());
verify(helper).createResolvingOobChannelBuilder(anyString(), any(ChannelCredentials.class));
}

@SuppressWarnings("unchecked")
Expand Down Expand Up @@ -429,7 +430,8 @@ public Subchannel createSubchannel(CreateSubchannelArgs args) {
}

@Override
public ManagedChannelBuilder<?> createResolvingOobChannelBuilder(String target) {
public ManagedChannelBuilder<?> createResolvingOobChannelBuilder(
String target, ChannelCredentials creds) {
try {
grpcCleanupRule.register(
InProcessServerBuilder.forName(target)
Expand Down Expand Up @@ -475,6 +477,18 @@ public String getAuthority() {
return "fake-bigtable.googleapis.com";
}

@Override
public ChannelCredentials getUnsafeChannelCredentials() {
// In test we don't do any authentication.
return new ChannelCredentials() {
@Override
public ChannelCredentials withoutBearerTokens() {
return this;
}
};
}


@Override
public ScheduledExecutorService getScheduledExecutorService() {
return fakeScheduledExecutorService;
Expand Down

0 comments on commit 9bb9fef

Please sign in to comment.