Skip to content

Commit ba312f8

Browse files
cherry pick #358 to release-3.1
Signed-off-by: ti-srebot <ti-srebot@pingcap.com> Signed-off-by: marsishandsome <marsishandsome@gmail.com>
1 parent a6e991a commit ba312f8

18 files changed

+1540
-180
lines changed

src/main/java/org/tikv/common/ConfigUtils.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,24 @@ public class ConfigUtils {
7575
"tikv.rawkv.batch_write_slowlog_in_ms";
7676
public static final String TIKV_RAWKV_SCAN_SLOWLOG_IN_MS = "tikv.rawkv.scan_slowlog_in_ms";
7777

78+
public static final String TIKV_TLS_ENABLE = "tikv.tls_enable";
79+
public static final String TIKV_TRUST_CERT_COLLECTION = "tikv.trust_cert_collection";
80+
public static final String TIKV_KEY_CERT_CHAIN = "tikv.key_cert_chain";
81+
public static final String TIKV_KEY_FILE = "tikv.key_file";
82+
83+
public static final String TiKV_CIRCUIT_BREAK_ENABLE = "tikv.circuit_break.enable";
84+
public static final String TiKV_CIRCUIT_BREAK_AVAILABILITY_WINDOW_IN_SECONDS =
85+
"tikv.circuit_break.trigger.availability.window_in_seconds";
86+
public static final String TiKV_CIRCUIT_BREAK_AVAILABILITY_ERROR_THRESHOLD_PERCENTAGE =
87+
"tikv.circuit_break.trigger.availability.error_threshold_percentage";
88+
public static final String TiKV_CIRCUIT_BREAK_AVAILABILITY_REQUEST_VOLUMN_THRESHOLD =
89+
"tikv.circuit_break.trigger.availability.request_volumn_threshold";
90+
public static final String TiKV_CIRCUIT_BREAK_SLEEP_WINDOW_IN_SECONDS =
91+
"tikv.circuit_break.trigger.sleep_window_in_seconds";
92+
public static final String TiKV_CIRCUIT_BREAK_ATTEMPT_REQUEST_COUNT =
93+
"tikv.circuit_break.trigger.attempt_request_count";
94+
95+
public static final String TIFLASH_ENABLE = "tiflash.enable";
7896
public static final String DEF_PD_ADDRESSES = "127.0.0.1:2379";
7997
public static final String DEF_TIMEOUT = "200ms";
8098
public static final String DEF_FORWARD_TIMEOUT = "300ms";
@@ -132,4 +150,16 @@ public class ConfigUtils {
132150
public static final String LEADER = "LEADER";
133151
public static final String FOLLOWER = "FOLLOWER";
134152
public static final String LEADER_AND_FOLLOWER = "LEADER_AND_FOLLOWER";
153+
154+
public static final int DEF_TIKV_GRPC_KEEPALIVE_TIME = 10;
155+
public static final int DEF_TIKV_GRPC_KEEPALIVE_TIMEOUT = 3;
156+
public static final boolean DEF_TIKV_TLS_ENABLE = false;
157+
public static final boolean DEF_TIFLASH_ENABLE = false;
158+
159+
public static final boolean DEF_TiKV_CIRCUIT_BREAK_ENABLE = false;
160+
public static final int DEF_TiKV_CIRCUIT_BREAK_AVAILABILITY_WINDOW_IN_SECONDS = 60;
161+
public static final int DEF_TiKV_CIRCUIT_BREAK_AVAILABILITY_ERROR_THRESHOLD_PERCENTAGE = 100;
162+
public static final int DEF_TiKV_CIRCUIT_BREAK_AVAILABILITY_REQUST_VOLUMN_THRESHOLD = 10;
163+
public static final int DEF_TiKV_CIRCUIT_BREAK_SLEEP_WINDOW_IN_SECONDS = 20;
164+
public static final int DEF_TiKV_CIRCUIT_BREAK_ATTEMPT_REQUEST_COUNT = 10;
135165
}

src/main/java/org/tikv/common/TiConfiguration.java

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,20 @@ private static void loadFromDefaultProperties() {
120120
setIfMissing(TIKV_RAWKV_CLEAN_TIMEOUT_IN_MS, DEF_TIKV_RAWKV_CLEAN_TIMEOUT_IN_MS);
121121
setIfMissing(TIKV_BO_REGION_MISS_BASE_IN_MS, DEF_TIKV_BO_REGION_MISS_BASE_IN_MS);
122122
setIfMissing(TIKV_RAWKV_SCAN_SLOWLOG_IN_MS, DEF_TIKV_RAWKV_SCAN_SLOWLOG_IN_MS);
123+
setIfMissing(TiKV_CIRCUIT_BREAK_ENABLE, DEF_TiKV_CIRCUIT_BREAK_ENABLE);
124+
setIfMissing(
125+
TiKV_CIRCUIT_BREAK_AVAILABILITY_WINDOW_IN_SECONDS,
126+
DEF_TiKV_CIRCUIT_BREAK_AVAILABILITY_WINDOW_IN_SECONDS);
127+
setIfMissing(
128+
TiKV_CIRCUIT_BREAK_AVAILABILITY_ERROR_THRESHOLD_PERCENTAGE,
129+
DEF_TiKV_CIRCUIT_BREAK_AVAILABILITY_ERROR_THRESHOLD_PERCENTAGE);
130+
setIfMissing(
131+
TiKV_CIRCUIT_BREAK_AVAILABILITY_REQUEST_VOLUMN_THRESHOLD,
132+
DEF_TiKV_CIRCUIT_BREAK_AVAILABILITY_REQUST_VOLUMN_THRESHOLD);
133+
setIfMissing(
134+
TiKV_CIRCUIT_BREAK_SLEEP_WINDOW_IN_SECONDS, DEF_TiKV_CIRCUIT_BREAK_SLEEP_WINDOW_IN_SECONDS);
135+
setIfMissing(
136+
TiKV_CIRCUIT_BREAK_ATTEMPT_REQUEST_COUNT, DEF_TiKV_CIRCUIT_BREAK_ATTEMPT_REQUEST_COUNT);
123137
}
124138

125139
public static void listAll() {
@@ -328,6 +342,20 @@ private static ReplicaRead getReplicaRead(String key) {
328342
getIntOption(TIKV_RAWKV_BATCH_WRITE_SLOWLOG_IN_MS);
329343
private int rawKVScanSlowLogInMS = getInt(TIKV_RAWKV_SCAN_SLOWLOG_IN_MS);
330344

345+
private boolean tiFlashEnable = getBoolean(TIFLASH_ENABLE);
346+
347+
private boolean isTest = false;
348+
349+
private boolean circuitBreakEnable = getBoolean(TiKV_CIRCUIT_BREAK_ENABLE);
350+
private int circuitBreakAvailabilityWindowInSeconds =
351+
getInt(TiKV_CIRCUIT_BREAK_AVAILABILITY_WINDOW_IN_SECONDS);
352+
private int circuitBreakAvailabilityErrorThresholdPercentage =
353+
getInt(TiKV_CIRCUIT_BREAK_AVAILABILITY_ERROR_THRESHOLD_PERCENTAGE);
354+
private int circuitBreakAvailabilityRequestVolumnThreshold =
355+
getInt(TiKV_CIRCUIT_BREAK_AVAILABILITY_REQUEST_VOLUMN_THRESHOLD);
356+
private int circuitBreakSleepWindowInSeconds = getInt(TiKV_CIRCUIT_BREAK_SLEEP_WINDOW_IN_SECONDS);
357+
private int circuitBreakAttemptRequestCount = getInt(TiKV_CIRCUIT_BREAK_ATTEMPT_REQUEST_COUNT);
358+
331359
public enum KVMode {
332360
TXN,
333361
RAW
@@ -729,4 +757,57 @@ public int getRawKVScanSlowLogInMS() {
729757
public void setRawKVScanSlowLogInMS(int rawKVScanSlowLogInMS) {
730758
this.rawKVScanSlowLogInMS = rawKVScanSlowLogInMS;
731759
}
760+
761+
public boolean isCircuitBreakEnable() {
762+
return circuitBreakEnable;
763+
}
764+
765+
public void setCircuitBreakEnable(boolean circuitBreakEnable) {
766+
this.circuitBreakEnable = circuitBreakEnable;
767+
}
768+
769+
public int getCircuitBreakAvailabilityWindowInSeconds() {
770+
return circuitBreakAvailabilityWindowInSeconds;
771+
}
772+
773+
public void setCircuitBreakAvailabilityWindowInSeconds(
774+
int circuitBreakAvailabilityWindowInSeconds) {
775+
this.circuitBreakAvailabilityWindowInSeconds = circuitBreakAvailabilityWindowInSeconds;
776+
}
777+
778+
public int getCircuitBreakAvailabilityErrorThresholdPercentage() {
779+
return circuitBreakAvailabilityErrorThresholdPercentage;
780+
}
781+
782+
public void setCircuitBreakAvailabilityErrorThresholdPercentage(
783+
int circuitBreakAvailabilityErrorThresholdPercentage) {
784+
this.circuitBreakAvailabilityErrorThresholdPercentage =
785+
circuitBreakAvailabilityErrorThresholdPercentage;
786+
}
787+
788+
public int getCircuitBreakAvailabilityRequestVolumnThreshold() {
789+
return circuitBreakAvailabilityRequestVolumnThreshold;
790+
}
791+
792+
public void setCircuitBreakAvailabilityRequestVolumnThreshold(
793+
int circuitBreakAvailabilityRequestVolumnThreshold) {
794+
this.circuitBreakAvailabilityRequestVolumnThreshold =
795+
circuitBreakAvailabilityRequestVolumnThreshold;
796+
}
797+
798+
public int getCircuitBreakSleepWindowInSeconds() {
799+
return circuitBreakSleepWindowInSeconds;
800+
}
801+
802+
public void setCircuitBreakSleepWindowInSeconds(int circuitBreakSleepWindowInSeconds) {
803+
this.circuitBreakSleepWindowInSeconds = circuitBreakSleepWindowInSeconds;
804+
}
805+
806+
public int getCircuitBreakAttemptRequestCount() {
807+
return circuitBreakAttemptRequestCount;
808+
}
809+
810+
public void setCircuitBreakAttemptRequestCount(int circuitBreakAttemptRequestCount) {
811+
this.circuitBreakAttemptRequestCount = circuitBreakAttemptRequestCount;
812+
}
732813
}

src/main/java/org/tikv/common/TiSession.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import org.tikv.common.util.*;
4242
import org.tikv.kvproto.Metapb;
4343
import org.tikv.raw.RawKVClient;
44+
import org.tikv.raw.SmartRawKVClient;
4445
import org.tikv.txn.KVClient;
4546
import org.tikv.txn.TxnKVClient;
4647

@@ -112,6 +113,11 @@ public RawKVClient createRawClient() {
112113
return new RawKVClient(this, builder);
113114
}
114115

116+
public SmartRawKVClient createSmartRawClient() {
117+
RawKVClient rawKVClient = createRawClient();
118+
return new SmartRawKVClient(rawKVClient, getConf());
119+
}
120+
115121
public KVClient createKVClient() {
116122
checkIsClosed();
117123

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/*
2+
* Copyright 2018 PingCAP, Inc.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* See the License for the specific language governing permissions and
13+
* limitations under the License.
14+
*/
15+
16+
package org.tikv.common.exception;
17+
18+
public class CircuitBreakerOpenException extends RuntimeException {
19+
public CircuitBreakerOpenException() {
20+
super("Circuit Breaker Opened");
21+
}
22+
}

0 commit comments

Comments
 (0)