Skip to content

Commit b525fd9

Browse files
authored
Merge pull request #524 from alex268/master
Added a new way to use channel initializer
2 parents 97d01a4 + 2f5fe0e commit b525fd9

File tree

5 files changed

+66
-0
lines changed

5 files changed

+66
-0
lines changed

core/src/main/java/tech/ydb/core/grpc/GrpcTransportBuilder.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package tech.ydb.core.grpc;
22

33
import java.time.Duration;
4+
import java.util.ArrayList;
5+
import java.util.List;
46
import java.util.Objects;
57
import java.util.concurrent.Executor;
68
import java.util.concurrent.ScheduledExecutorService;
@@ -15,6 +17,7 @@
1517
import com.google.common.net.HostAndPort;
1618
import com.google.common.util.concurrent.MoreExecutors;
1719
import io.grpc.ManagedChannel;
20+
import io.grpc.ManagedChannelBuilder;
1821

1922
import tech.ydb.auth.AuthRpcProvider;
2023
import tech.ydb.auth.NopAuthProvider;
@@ -69,6 +72,7 @@ public enum InitMode {
6972
private byte[] cert = null;
7073
private boolean useTLS = false;
7174
private ManagedChannelFactory.Builder channelFactoryBuilder = null;
75+
private final List<Consumer<ManagedChannelBuilder<?>>> channelInitializers = new ArrayList<>();
7276
private Supplier<ScheduledExecutorService> schedulerFactory = YdbSchedulerFactory::createScheduler;
7377
private String localDc;
7478
private BalancingSettings balancingSettings;
@@ -183,6 +187,10 @@ public ManagedChannelFactory getManagedChannelFactory() {
183187
return channelFactoryBuilder.buildFactory(this);
184188
}
185189

190+
public List<Consumer<ManagedChannelBuilder<?>>> getChannelInitializers() {
191+
return this.channelInitializers;
192+
}
193+
186194
/**
187195
* Set a custom factory of {@link ManagedChannel}. This option must be used only if you want to configure
188196
* grpc channels in a special way.
@@ -195,6 +203,17 @@ public GrpcTransportBuilder withChannelFactoryBuilder(ManagedChannelFactory.Buil
195203
return this;
196204
}
197205

206+
/**
207+
* Add a custom initialization of {@link ManagedChannelBuilder}
208+
*
209+
* @param ci custom ManagedChannelBuilder initializer
210+
* @return this
211+
*/
212+
public GrpcTransportBuilder addChannelInitializer(Consumer<ManagedChannelBuilder<?>> ci) {
213+
channelInitializers.add(ci);
214+
return this;
215+
}
216+
198217
/**
199218
* Set a custom initialization of {@link io.grpc.netty.shaded.io.grpc.netty.NettyChannelBuilder} <br>
200219
* This method is deprecated. Use

core/src/main/java/tech/ydb/core/impl/pool/NettyChannelFactory.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package tech.ydb.core.impl.pool;
22

33
import java.io.ByteArrayInputStream;
4+
import java.util.List;
45
import java.util.concurrent.TimeUnit;
56
import java.util.function.Consumer;
67

78
import javax.net.ssl.SSLException;
89

910
import io.grpc.ClientInterceptor;
1011
import io.grpc.ManagedChannel;
12+
import io.grpc.ManagedChannelBuilder;
1113
import io.grpc.Metadata;
1214
import io.grpc.internal.DnsNameResolverProvider;
1315
import io.grpc.netty.GrpcSslContexts;
@@ -39,6 +41,7 @@ public class NettyChannelFactory implements ManagedChannelFactory {
3941
private final long connectTimeoutMs;
4042
private final boolean useDefaultGrpcResolver;
4143
private final Long grpcKeepAliveTimeMillis;
44+
private final List<Consumer<ManagedChannelBuilder<?>>> initializers;
4245

4346
private NettyChannelFactory(GrpcTransportBuilder builder) {
4447
this.database = builder.getDatabase();
@@ -49,6 +52,7 @@ private NettyChannelFactory(GrpcTransportBuilder builder) {
4952
this.connectTimeoutMs = builder.getConnectTimeoutMillis();
5053
this.useDefaultGrpcResolver = builder.useDefaultGrpcResolver();
5154
this.grpcKeepAliveTimeMillis = builder.getGrpcKeepAliveTimeMillis();
55+
this.initializers = builder.getChannelInitializers();
5256
}
5357

5458
@Override
@@ -97,6 +101,10 @@ public ManagedChannel newManagedChannel(String host, int port, String sslHostOve
97101
channelBuilder.disableRetry();
98102
}
99103

104+
for (Consumer<ManagedChannelBuilder<?>> initializer: initializers) {
105+
initializer.accept(channelBuilder);
106+
}
107+
100108
configure(channelBuilder);
101109

102110
return channelBuilder.build();

core/src/main/java/tech/ydb/core/impl/pool/ShadedNettyChannelFactory.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package tech.ydb.core.impl.pool;
22

33
import java.io.ByteArrayInputStream;
4+
import java.util.List;
45
import java.util.concurrent.TimeUnit;
56
import java.util.function.Consumer;
67

78
import javax.net.ssl.SSLException;
89

910
import io.grpc.ClientInterceptor;
1011
import io.grpc.ManagedChannel;
12+
import io.grpc.ManagedChannelBuilder;
1113
import io.grpc.Metadata;
1214
import io.grpc.internal.DnsNameResolverProvider;
1315
import io.grpc.netty.shaded.io.grpc.netty.GrpcSslContexts;
@@ -39,6 +41,7 @@ public class ShadedNettyChannelFactory implements ManagedChannelFactory {
3941
private final long connectTimeoutMs;
4042
private final boolean useDefaultGrpcResolver;
4143
private final Long grpcKeepAliveTimeMillis;
44+
private final List<Consumer<ManagedChannelBuilder<?>>> initializers;
4245

4346
public ShadedNettyChannelFactory(GrpcTransportBuilder builder) {
4447
this.database = builder.getDatabase();
@@ -49,6 +52,7 @@ public ShadedNettyChannelFactory(GrpcTransportBuilder builder) {
4952
this.connectTimeoutMs = builder.getConnectTimeoutMillis();
5053
this.useDefaultGrpcResolver = builder.useDefaultGrpcResolver();
5154
this.grpcKeepAliveTimeMillis = builder.getGrpcKeepAliveTimeMillis();
55+
this.initializers = builder.getChannelInitializers();
5256
}
5357

5458
@Override
@@ -97,6 +101,10 @@ public ManagedChannel newManagedChannel(String host, int port, String sslHostOve
97101
channelBuilder.disableRetry();
98102
}
99103

104+
for (Consumer<ManagedChannelBuilder<?>> initializer: initializers) {
105+
initializer.accept(channelBuilder);
106+
}
107+
100108
configure(channelBuilder);
101109

102110
return channelBuilder.build();

core/src/test/java/tech/ydb/core/impl/pool/DefaultChannelFactoryTest.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,34 @@ public void customChannelInitializer() {
149149
Mockito.verify(channelBuilderMock, Mockito.times(1)).enableFullStreamDecompression();
150150
}
151151

152+
@Test
153+
public void addChannelInitializerTest() {
154+
GrpcTransportBuilder builder = GrpcTransport.forHost(MOCKED_HOST, MOCKED_PORT, "/Root")
155+
.withUseDefaultGrpcResolver(true)
156+
.addChannelInitializer(ci -> ci.usePlaintext())
157+
.addChannelInitializer(ci -> ci.userAgent("TEST"));
158+
159+
ManagedChannelFactory factory = ShadedNettyChannelFactory.build()
160+
.buildFactory(builder);
161+
162+
channelStaticMock.verify(FOR_ADDRESS, Mockito.times(0));
163+
164+
Assert.assertSame(channelMock, factory.newManagedChannel(MOCKED_HOST, MOCKED_PORT, null));
165+
166+
channelStaticMock.verify(FOR_ADDRESS, Mockito.times(1));
167+
168+
Mockito.verify(channelBuilderMock, Mockito.times(1)).negotiationType(NegotiationType.PLAINTEXT);
169+
Mockito.verify(channelBuilderMock, Mockito.times(1))
170+
.maxInboundMessageSize(ShadedNettyChannelFactory.INBOUND_MESSAGE_SIZE);
171+
Mockito.verify(channelBuilderMock, Mockito.times(0))
172+
.defaultLoadBalancingPolicy(ShadedNettyChannelFactory.DEFAULT_BALANCER_POLICY);
173+
Mockito.verify(channelBuilderMock, Mockito.times(1))
174+
.withOption(ChannelOption.ALLOCATOR, ByteBufAllocator.DEFAULT);
175+
Mockito.verify(channelBuilderMock, Mockito.times(1)).withOption(ChannelOption.TCP_NODELAY, Boolean.TRUE);
176+
Mockito.verify(channelBuilderMock, Mockito.times(1)).usePlaintext();
177+
Mockito.verify(channelBuilderMock, Mockito.times(1)).userAgent("TEST");
178+
}
179+
152180
@Test
153181
public void customSslFactory() throws CertificateException, IOException {
154182
SelfSignedCertificate selfSignedCert = new SelfSignedCertificate(MOCKED_HOST);

pom.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,9 @@
238238
<id>jdk8-bootstrap</id>
239239
<activation>
240240
<jdk>[9</jdk>
241+
<property>
242+
<name>argLine</name>
243+
</property>
241244
</activation>
242245
<build>
243246
<plugins>

0 commit comments

Comments
 (0)