From 9cd0e1a8dd414130238d0abb5d6c19d12dd2139b Mon Sep 17 00:00:00 2001 From: Sergii Tkachenko Date: Tue, 1 Sep 2020 19:41:10 -0400 Subject: [PATCH] core, interop: InProcessChannelBuilder extends a public API class --- .../inprocess/InProcessChannelBuilder.java | 38 +++++++++++++++---- .../InternalInProcessChannelBuilder.java | 33 ++++++++++++++++ .../testing/integration/InProcessTest.java | 3 +- 3 files changed, 65 insertions(+), 9 deletions(-) create mode 100644 core/src/main/java/io/grpc/inprocess/InternalInProcessChannelBuilder.java diff --git a/core/src/main/java/io/grpc/inprocess/InProcessChannelBuilder.java b/core/src/main/java/io/grpc/inprocess/InProcessChannelBuilder.java index 3546e33357c9..926c7835729a 100644 --- a/core/src/main/java/io/grpc/inprocess/InProcessChannelBuilder.java +++ b/core/src/main/java/io/grpc/inprocess/InProcessChannelBuilder.java @@ -21,11 +21,14 @@ import io.grpc.ChannelLogger; import io.grpc.ExperimentalApi; +import io.grpc.ForwardingChannelBuilder; import io.grpc.Internal; -import io.grpc.internal.AbstractManagedChannelImplBuilder; +import io.grpc.ManagedChannelBuilder; import io.grpc.internal.ClientTransportFactory; import io.grpc.internal.ConnectionClientTransport; import io.grpc.internal.GrpcUtil; +import io.grpc.internal.ManagedChannelImplBuilder; +import io.grpc.internal.ManagedChannelImplBuilder.ClientTransportFactoryBuilder; import io.grpc.internal.SharedResourceHolder; import java.net.SocketAddress; import java.util.concurrent.ScheduledExecutorService; @@ -42,7 +45,7 @@ */ @ExperimentalApi("https://github.com/grpc/grpc-java/issues/1783") public final class InProcessChannelBuilder extends - AbstractManagedChannelImplBuilder { + ForwardingChannelBuilder { /** * Create a channel builder that will connect to the server with the given name. * @@ -67,18 +70,35 @@ public static InProcessChannelBuilder forAddress(String name, int port) { throw new UnsupportedOperationException("call forName() instead"); } + private final ManagedChannelImplBuilder managedChannelImplBuilder; private final String name; private ScheduledExecutorService scheduledExecutorService; private int maxInboundMetadataSize = Integer.MAX_VALUE; private boolean transportIncludeStatusCause = false; private InProcessChannelBuilder(String name) { - super(new InProcessSocketAddress(name), "localhost"); this.name = checkNotNull(name, "name"); + + final class InProcessChannelTransportFactoryBuilder implements ClientTransportFactoryBuilder { + @Override + public ClientTransportFactory buildClientTransportFactory() { + return buildTransportFactory(); + } + } + + managedChannelImplBuilder = new ManagedChannelImplBuilder(new InProcessSocketAddress(name), + "localhost", new InProcessChannelTransportFactoryBuilder(), null); + // In-process transport should not record its traffic to the stats module. // https://github.com/grpc/grpc-java/issues/2284 - setStatsRecordStartedRpcs(false); - setStatsRecordFinishedRpcs(false); + managedChannelImplBuilder.setStatsRecordStartedRpcs(false); + managedChannelImplBuilder.setStatsRecordFinishedRpcs(false); + } + + @Internal + @Override + protected ManagedChannelBuilder delegate() { + return managedChannelImplBuilder; } @Override @@ -177,13 +197,15 @@ public InProcessChannelBuilder propagateCauseWithStatus(boolean enable) { return this; } - @Override - @Internal - protected ClientTransportFactory buildTransportFactory() { + ClientTransportFactory buildTransportFactory() { return new InProcessClientTransportFactory( name, scheduledExecutorService, maxInboundMetadataSize, transportIncludeStatusCause); } + void setStatsEnabled(boolean value) { + this.managedChannelImplBuilder.setStatsEnabled(value); + } + /** * Creates InProcess transports. Exposed for internal use, as it should be private. */ diff --git a/core/src/main/java/io/grpc/inprocess/InternalInProcessChannelBuilder.java b/core/src/main/java/io/grpc/inprocess/InternalInProcessChannelBuilder.java new file mode 100644 index 000000000000..1a017fe564c9 --- /dev/null +++ b/core/src/main/java/io/grpc/inprocess/InternalInProcessChannelBuilder.java @@ -0,0 +1,33 @@ +/* + * Copyright 2020 The gRPC Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.grpc.inprocess; + +import io.grpc.Internal; + +/** + * Internal {@link InProcessChannelBuilder} accessor. This is intended for usage internal to the + * gRPC team. If you *really* think you need to use this, contact the gRPC team first. + */ +@Internal +public final class InternalInProcessChannelBuilder { + + public static void setStatsEnabled(InProcessChannelBuilder builder, boolean value) { + builder.setStatsEnabled(value); + } + + private InternalInProcessChannelBuilder() {} +} diff --git a/interop-testing/src/test/java/io/grpc/testing/integration/InProcessTest.java b/interop-testing/src/test/java/io/grpc/testing/integration/InProcessTest.java index fd403affcf54..66894834b953 100644 --- a/interop-testing/src/test/java/io/grpc/testing/integration/InProcessTest.java +++ b/interop-testing/src/test/java/io/grpc/testing/integration/InProcessTest.java @@ -18,6 +18,7 @@ import io.grpc.inprocess.InProcessChannelBuilder; import io.grpc.inprocess.InProcessServerBuilder; +import io.grpc.inprocess.InternalInProcessChannelBuilder; import io.grpc.internal.AbstractServerImplBuilder; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @@ -38,7 +39,7 @@ protected AbstractServerImplBuilder getServerBuilder() { protected InProcessChannelBuilder createChannelBuilder() { InProcessChannelBuilder builder = InProcessChannelBuilder.forName(SERVER_NAME); // Disable the default census stats interceptor, use testing interceptor instead. - io.grpc.internal.TestingAccessor.setStatsEnabled(builder, false); + InternalInProcessChannelBuilder.setStatsEnabled(builder, false); return builder.intercept(createCensusStatsClientInterceptor()); }