[close #380] make gRPC idle timeout configurable (#379)

This commit is contained in:
Xiaoguang Sun 2021-12-10 03:53:39 +08:00 committed by GitHub
parent c95479e8ad
commit d8841e7fed
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 35 additions and 3 deletions

View File

@ -32,6 +32,7 @@ public class ConfigUtils {
public static final String TIKV_GRPC_MAX_FRAME_SIZE = "tikv.grpc.max_frame_size"; public static final String TIKV_GRPC_MAX_FRAME_SIZE = "tikv.grpc.max_frame_size";
public static final String TIKV_GRPC_KEEPALIVE_TIME = "tikv.grpc.keepalive_time"; public static final String TIKV_GRPC_KEEPALIVE_TIME = "tikv.grpc.keepalive_time";
public static final String TIKV_GRPC_KEEPALIVE_TIMEOUT = "tikv.grpc.keepalive_timeout"; public static final String TIKV_GRPC_KEEPALIVE_TIMEOUT = "tikv.grpc.keepalive_timeout";
public static final String TIKV_GRPC_IDLE_TIMEOUT = "tikv.grpc.idle_timeout";
public static final String TIKV_INDEX_SCAN_BATCH_SIZE = "tikv.index.scan_batch_size"; public static final String TIKV_INDEX_SCAN_BATCH_SIZE = "tikv.index.scan_batch_size";
public static final String TIKV_INDEX_SCAN_CONCURRENCY = "tikv.index.scan_concurrency"; public static final String TIKV_INDEX_SCAN_CONCURRENCY = "tikv.index.scan_concurrency";
@ -171,6 +172,7 @@ public class ConfigUtils {
public static final int DEF_TIKV_GRPC_KEEPALIVE_TIME = 10; public static final int DEF_TIKV_GRPC_KEEPALIVE_TIME = 10;
public static final int DEF_TIKV_GRPC_KEEPALIVE_TIMEOUT = 3; public static final int DEF_TIKV_GRPC_KEEPALIVE_TIMEOUT = 3;
public static final int DEF_TIKV_GRPC_IDLE_TIMEOUT = 60;
public static final boolean DEF_TIKV_TLS_ENABLE = false; public static final boolean DEF_TIKV_TLS_ENABLE = false;
public static final boolean DEF_TIFLASH_ENABLE = false; public static final boolean DEF_TIFLASH_ENABLE = false;

View File

@ -120,6 +120,7 @@ public class TiConfiguration implements Serializable {
setIfMissing(TIKV_RAWKV_DEFAULT_BACKOFF_IN_MS, DEF_TIKV_RAWKV_DEFAULT_BACKOFF_IN_MS); setIfMissing(TIKV_RAWKV_DEFAULT_BACKOFF_IN_MS, DEF_TIKV_RAWKV_DEFAULT_BACKOFF_IN_MS);
setIfMissing(TIKV_GRPC_KEEPALIVE_TIME, DEF_TIKV_GRPC_KEEPALIVE_TIME); setIfMissing(TIKV_GRPC_KEEPALIVE_TIME, DEF_TIKV_GRPC_KEEPALIVE_TIME);
setIfMissing(TIKV_GRPC_KEEPALIVE_TIMEOUT, DEF_TIKV_GRPC_KEEPALIVE_TIMEOUT); setIfMissing(TIKV_GRPC_KEEPALIVE_TIMEOUT, DEF_TIKV_GRPC_KEEPALIVE_TIMEOUT);
setIfMissing(TIKV_GRPC_IDLE_TIMEOUT, DEF_TIKV_GRPC_IDLE_TIMEOUT);
setIfMissing(TIKV_TLS_ENABLE, DEF_TIKV_TLS_ENABLE); setIfMissing(TIKV_TLS_ENABLE, DEF_TIKV_TLS_ENABLE);
setIfMissing(TIFLASH_ENABLE, DEF_TIFLASH_ENABLE); setIfMissing(TIFLASH_ENABLE, DEF_TIFLASH_ENABLE);
setIfMissing(TIKV_RAWKV_READ_TIMEOUT_IN_MS, DEF_TIKV_RAWKV_READ_TIMEOUT_IN_MS); setIfMissing(TIKV_RAWKV_READ_TIMEOUT_IN_MS, DEF_TIKV_RAWKV_READ_TIMEOUT_IN_MS);
@ -373,6 +374,7 @@ public class TiConfiguration implements Serializable {
private int keepaliveTime = getInt(TIKV_GRPC_KEEPALIVE_TIME); private int keepaliveTime = getInt(TIKV_GRPC_KEEPALIVE_TIME);
private int keepaliveTimeout = getInt(TIKV_GRPC_KEEPALIVE_TIMEOUT); private int keepaliveTimeout = getInt(TIKV_GRPC_KEEPALIVE_TIMEOUT);
private int idleTimeout = getInt(TIKV_GRPC_IDLE_TIMEOUT);
private boolean circuitBreakEnable = getBoolean(TiKV_CIRCUIT_BREAK_ENABLE); private boolean circuitBreakEnable = getBoolean(TiKV_CIRCUIT_BREAK_ENABLE);
private int circuitBreakAvailabilityWindowInSeconds = private int circuitBreakAvailabilityWindowInSeconds =
@ -782,6 +784,14 @@ public class TiConfiguration implements Serializable {
this.keepaliveTimeout = timeout; this.keepaliveTimeout = timeout;
} }
public int getIdleTimeout() {
return idleTimeout;
}
public void setIdleTimeout(int timeout) {
this.idleTimeout = timeout;
}
public boolean isTiFlashEnabled() { public boolean isTiFlashEnabled() {
return tiFlashEnable; return tiFlashEnable;
} }

View File

@ -82,11 +82,15 @@ public class TiSession implements AutoCloseable {
conf.getMaxFrameSize(), conf.getMaxFrameSize(),
conf.getKeepaliveTime(), conf.getKeepaliveTime(),
conf.getKeepaliveTimeout(), conf.getKeepaliveTimeout(),
conf.getIdleTimeout(),
conf.getTrustCertCollectionFile(), conf.getTrustCertCollectionFile(),
conf.getKeyCertChainFile(), conf.getKeyCertChainFile(),
conf.getKeyFile()) conf.getKeyFile())
: new ChannelFactory( : new ChannelFactory(
conf.getMaxFrameSize(), conf.getKeepaliveTime(), conf.getKeepaliveTimeout()); conf.getMaxFrameSize(),
conf.getKeepaliveTime(),
conf.getKeepaliveTimeout(),
conf.getIdleTimeout());
this.client = PDClient.createRaw(conf, channelFactory); this.client = PDClient.createRaw(conf, channelFactory);
this.enableGrpcForward = conf.getEnableGrpcForward(); this.enableGrpcForward = conf.getEnableGrpcForward();

View File

@ -36,13 +36,16 @@ public class ChannelFactory implements AutoCloseable {
private final int maxFrameSize; private final int maxFrameSize;
private final int keepaliveTime; private final int keepaliveTime;
private final int keepaliveTimeout; private final int keepaliveTimeout;
private final int idleTimeout;
private final ConcurrentHashMap<String, ManagedChannel> connPool = new ConcurrentHashMap<>(); private final ConcurrentHashMap<String, ManagedChannel> connPool = new ConcurrentHashMap<>();
private final SslContextBuilder sslContextBuilder; private final SslContextBuilder sslContextBuilder;
public ChannelFactory(int maxFrameSize, int keepaliveTime, int keepaliveTimeout) { public ChannelFactory(
int maxFrameSize, int keepaliveTime, int keepaliveTimeout, int idleTimeout) {
this.maxFrameSize = maxFrameSize; this.maxFrameSize = maxFrameSize;
this.keepaliveTime = keepaliveTime; this.keepaliveTime = keepaliveTime;
this.keepaliveTimeout = keepaliveTimeout; this.keepaliveTimeout = keepaliveTimeout;
this.idleTimeout = idleTimeout;
this.sslContextBuilder = null; this.sslContextBuilder = null;
} }
@ -50,12 +53,14 @@ public class ChannelFactory implements AutoCloseable {
int maxFrameSize, int maxFrameSize,
int keepaliveTime, int keepaliveTime,
int keepaliveTimeout, int keepaliveTimeout,
int idleTimeout,
String trustCertCollectionFilePath, String trustCertCollectionFilePath,
String keyCertChainFilePath, String keyCertChainFilePath,
String keyFilePath) { String keyFilePath) {
this.maxFrameSize = maxFrameSize; this.maxFrameSize = maxFrameSize;
this.keepaliveTime = keepaliveTime; this.keepaliveTime = keepaliveTime;
this.keepaliveTimeout = keepaliveTimeout; this.keepaliveTimeout = keepaliveTimeout;
this.idleTimeout = idleTimeout;
this.sslContextBuilder = this.sslContextBuilder =
getSslContextBuilder(trustCertCollectionFilePath, keyCertChainFilePath, keyFilePath); getSslContextBuilder(trustCertCollectionFilePath, keyCertChainFilePath, keyFilePath);
} }
@ -97,7 +102,7 @@ public class ChannelFactory implements AutoCloseable {
.keepAliveTime(keepaliveTime, TimeUnit.SECONDS) .keepAliveTime(keepaliveTime, TimeUnit.SECONDS)
.keepAliveTimeout(keepaliveTimeout, TimeUnit.SECONDS) .keepAliveTimeout(keepaliveTimeout, TimeUnit.SECONDS)
.keepAliveWithoutCalls(true) .keepAliveWithoutCalls(true)
.idleTimeout(60, TimeUnit.SECONDS); .idleTimeout(idleTimeout, TimeUnit.SECONDS);
if (sslContextBuilder == null) { if (sslContextBuilder == null) {
return builder.usePlaintext().build(); return builder.usePlaintext().build();

View File

@ -33,4 +33,15 @@ public class TiConfigurationTest {
TiConfiguration conf = TiConfiguration.createRawDefault(); TiConfiguration conf = TiConfiguration.createRawDefault();
assertFalse(conf.isTiFlashEnabled()); assertFalse(conf.isTiFlashEnabled());
} }
@Test
public void testGrpcIdleTimeoutValue() {
TiConfiguration conf = TiConfiguration.createDefault();
// default value
assertEquals(TiConfiguration.getInt(ConfigUtils.TIKV_GRPC_IDLE_TIMEOUT), conf.getIdleTimeout());
// new value
int newValue = 100000;
conf.setIdleTimeout(newValue);
assertEquals(newValue, conf.getIdleTimeout());
}
} }