From 4e355a0cca526c2a4f5c2baf382241eb8f74d25d Mon Sep 17 00:00:00 2001
From: shiyuhang <1136742008@qq.com>
Date: Sat, 20 May 2023 17:03:18 +0800
Subject: [PATCH 1/6] optimize health check
Signed-off-by: shiyuhang <1136742008@qq.com>
---
pom.xml | 2 +-
.../common/region/StoreHealthyChecker.java | 32 +++++++++++++++++++
2 files changed, 33 insertions(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index dd34f060b3f..b91cc8d0e62 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
4.0.0
org.tikv
tikv-client-java
- 3.3.4-SNAPSHOT
+ 3.3.4-health
jar
TiKV Java Client
A Java Client for TiKV
diff --git a/src/main/java/org/tikv/common/region/StoreHealthyChecker.java b/src/main/java/org/tikv/common/region/StoreHealthyChecker.java
index 8d305649c4e..c9367b32adc 100644
--- a/src/main/java/org/tikv/common/region/StoreHealthyChecker.java
+++ b/src/main/java/org/tikv/common/region/StoreHealthyChecker.java
@@ -20,17 +20,22 @@
import io.grpc.health.v1.HealthCheckRequest;
import io.grpc.health.v1.HealthCheckResponse;
import io.grpc.health.v1.HealthGrpc;
+import io.grpc.stub.ClientCalls;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
+import java.util.function.Supplier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.tikv.common.ReadOnlyPDClient;
import org.tikv.common.util.ChannelFactory;
import org.tikv.common.util.ConcreteBackOffer;
import org.tikv.kvproto.Metapb;
+import org.tikv.kvproto.Mpp;
+import org.tikv.kvproto.Mpp.IsAliveRequest;
+import org.tikv.kvproto.TikvGrpc;
public class StoreHealthyChecker implements Runnable {
private static final Logger logger = LoggerFactory.getLogger(StoreHealthyChecker.class);
@@ -75,6 +80,32 @@ private List getValidStores() {
private boolean checkStoreHealth(TiStore store) {
String addressStr = store.getStore().getAddress();
+ for (Metapb.StoreLabel label : store.getStore().getLabelsList()) {
+ if (label.getKey().equals(TiStoreType.TiFlash.getLabelKey())
+ && label.getValue().equals(TiStoreType.TiFlash.getLabelValue())) {
+ return checkTiFlashHealth(addressStr);
+ }
+ }
+ return checkTiKVHealth(addressStr);
+ }
+
+ private boolean checkTiFlashHealth(String addressStr) {
+ try {
+ ManagedChannel channel = channelFactory.getChannel(addressStr, pdClient.getHostMapping());
+ TikvGrpc.TikvBlockingStub stub =
+ TikvGrpc.newBlockingStub(channel).withDeadlineAfter(timeout, TimeUnit.MILLISECONDS);
+ Supplier factory = () -> Mpp.IsAliveRequest.newBuilder().build();
+ Mpp.IsAliveResponse resp =
+ ClientCalls.blockingUnaryCall(
+ stub.getChannel(), TikvGrpc.getIsAliveMethod(), stub.getCallOptions(), factory.get());
+ return resp != null && resp.getAvailable();
+ } catch (Exception e) {
+ logger.warn("fail to check TiFlash health, regrade as unhealthy", e);
+ return false;
+ }
+ }
+
+ private boolean checkTiKVHealth(String addressStr) {
try {
ManagedChannel channel = channelFactory.getChannel(addressStr, pdClient.getHostMapping());
HealthGrpc.HealthBlockingStub stub =
@@ -83,6 +114,7 @@ private boolean checkStoreHealth(TiStore store) {
HealthCheckResponse resp = stub.check(req);
return resp.getStatus() == HealthCheckResponse.ServingStatus.SERVING;
} catch (Exception e) {
+ logger.warn("fail to check TiKV health, regrade as unhealthy", e);
return false;
}
}
From 2864289773f375d1e0bf17610b2c6e3baac55a21 Mon Sep 17 00:00:00 2001
From: shiyuhang <1136742008@qq.com>
Date: Sat, 20 May 2023 17:04:14 +0800
Subject: [PATCH 2/6] typo
Signed-off-by: shiyuhang <1136742008@qq.com>
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index b91cc8d0e62..dd34f060b3f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
4.0.0
org.tikv
tikv-client-java
- 3.3.4-health
+ 3.3.4-SNAPSHOT
jar
TiKV Java Client
A Java Client for TiKV
From a02f7a21e9c33c937671b9053d0aabfca6487eae Mon Sep 17 00:00:00 2001
From: shiyuhang <1136742008@qq.com>
Date: Wed, 24 May 2023 10:20:13 +0800
Subject: [PATCH 3/6] add address
Signed-off-by: shiyuhang <1136742008@qq.com>
---
src/main/java/org/tikv/common/region/StoreHealthyChecker.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/main/java/org/tikv/common/region/StoreHealthyChecker.java b/src/main/java/org/tikv/common/region/StoreHealthyChecker.java
index c9367b32adc..5db583b61ee 100644
--- a/src/main/java/org/tikv/common/region/StoreHealthyChecker.java
+++ b/src/main/java/org/tikv/common/region/StoreHealthyChecker.java
@@ -100,7 +100,7 @@ private boolean checkTiFlashHealth(String addressStr) {
stub.getChannel(), TikvGrpc.getIsAliveMethod(), stub.getCallOptions(), factory.get());
return resp != null && resp.getAvailable();
} catch (Exception e) {
- logger.warn("fail to check TiFlash health, regrade as unhealthy", e);
+ logger.warn("fail to check TiFlash health, regrade as unhealthy. TiFlash address: " + addressStr, e);
return false;
}
}
@@ -114,7 +114,7 @@ private boolean checkTiKVHealth(String addressStr) {
HealthCheckResponse resp = stub.check(req);
return resp.getStatus() == HealthCheckResponse.ServingStatus.SERVING;
} catch (Exception e) {
- logger.warn("fail to check TiKV health, regrade as unhealthy", e);
+ logger.warn("fail to check TiKV health, regrade as unhealthy. TiKV address: " + addressStr, e);
return false;
}
}
From 77909bdc6d64faeaa70f2d726d6fa7420fdb79ba Mon Sep 17 00:00:00 2001
From: shiyuhang <1136742008@qq.com>
Date: Wed, 24 May 2023 10:48:49 +0800
Subject: [PATCH 4/6] fmt
Signed-off-by: shiyuhang <1136742008@qq.com>
---
.../java/org/tikv/common/region/StoreHealthyChecker.java | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/main/java/org/tikv/common/region/StoreHealthyChecker.java b/src/main/java/org/tikv/common/region/StoreHealthyChecker.java
index 5db583b61ee..ebbf4c20f63 100644
--- a/src/main/java/org/tikv/common/region/StoreHealthyChecker.java
+++ b/src/main/java/org/tikv/common/region/StoreHealthyChecker.java
@@ -100,7 +100,8 @@ private boolean checkTiFlashHealth(String addressStr) {
stub.getChannel(), TikvGrpc.getIsAliveMethod(), stub.getCallOptions(), factory.get());
return resp != null && resp.getAvailable();
} catch (Exception e) {
- logger.warn("fail to check TiFlash health, regrade as unhealthy. TiFlash address: " + addressStr, e);
+ logger.warn(
+ "fail to check TiFlash health, regrade as unhealthy. TiFlash address: " + addressStr, e);
return false;
}
}
@@ -114,7 +115,8 @@ private boolean checkTiKVHealth(String addressStr) {
HealthCheckResponse resp = stub.check(req);
return resp.getStatus() == HealthCheckResponse.ServingStatus.SERVING;
} catch (Exception e) {
- logger.warn("fail to check TiKV health, regrade as unhealthy. TiKV address: " + addressStr, e);
+ logger.warn(
+ "fail to check TiKV health, regrade as unhealthy. TiKV address: " + addressStr, e);
return false;
}
}
From 7d001b7b1786e59c6b0261b7fa9d9fe761333fad Mon Sep 17 00:00:00 2001
From: shiyuhang <1136742008@qq.com>
Date: Wed, 24 May 2023 15:56:21 +0800
Subject: [PATCH 5/6] optimize for replica select
Signed-off-by: shiyuhang <1136742008@qq.com>
---
src/main/java/org/tikv/common/region/RegionManager.java | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/main/java/org/tikv/common/region/RegionManager.java b/src/main/java/org/tikv/common/region/RegionManager.java
index 129afaf9d50..8b5d60fce66 100644
--- a/src/main/java/org/tikv/common/region/RegionManager.java
+++ b/src/main/java/org/tikv/common/region/RegionManager.java
@@ -235,10 +235,12 @@ public Pair getRegionStorePairByKey(
store = getStoreById(peer.getStoreId(), backOffer);
if (store.isReachable()) {
// update replica's index
+ logger.info("Store {} is reachable, use it as store", peer.getStoreId());
region.setReplicaIdx(i);
break;
}
logger.info("Store {} is unreachable, try to get the next replica", peer.getStoreId());
+ store = null;
}
} else {
List tiflashStores = new ArrayList<>();
From c08ea89af04bf6fb3e2b0bdfc8b98a9f8e9a5d8d Mon Sep 17 00:00:00 2001
From: shiyuhang <1136742008@qq.com>
Date: Thu, 25 May 2023 12:30:34 +0800
Subject: [PATCH 6/6] optimize according to the comment
Signed-off-by: shiyuhang <1136742008@qq.com>
---
.../java/org/tikv/common/region/RegionManager.java | 9 ++-------
.../tikv/common/region/StoreHealthyChecker.java | 14 +++++---------
src/main/java/org/tikv/common/region/TiStore.java | 10 ++++++++++
3 files changed, 17 insertions(+), 16 deletions(-)
diff --git a/src/main/java/org/tikv/common/region/RegionManager.java b/src/main/java/org/tikv/common/region/RegionManager.java
index 8b5d60fce66..3a76aa8bebe 100644
--- a/src/main/java/org/tikv/common/region/RegionManager.java
+++ b/src/main/java/org/tikv/common/region/RegionManager.java
@@ -235,12 +235,10 @@ public Pair getRegionStorePairByKey(
store = getStoreById(peer.getStoreId(), backOffer);
if (store.isReachable()) {
// update replica's index
- logger.info("Store {} is reachable, use it as store", peer.getStoreId());
region.setReplicaIdx(i);
break;
}
logger.info("Store {} is unreachable, try to get the next replica", peer.getStoreId());
- store = null;
}
} else {
List tiflashStores = new ArrayList<>();
@@ -249,11 +247,8 @@ public Pair getRegionStorePairByKey(
if (!s.isReachable()) {
continue;
}
- for (Metapb.StoreLabel label : s.getStore().getLabelsList()) {
- if (label.getKey().equals(storeType.getLabelKey())
- && label.getValue().equals(storeType.getLabelValue())) {
- tiflashStores.add(s);
- }
+ if (s.isTiFlash()) {
+ tiflashStores.add(s);
}
}
// select a tiflash with Round-Robin strategy
diff --git a/src/main/java/org/tikv/common/region/StoreHealthyChecker.java b/src/main/java/org/tikv/common/region/StoreHealthyChecker.java
index ebbf4c20f63..3ae3f40d1f5 100644
--- a/src/main/java/org/tikv/common/region/StoreHealthyChecker.java
+++ b/src/main/java/org/tikv/common/region/StoreHealthyChecker.java
@@ -80,11 +80,8 @@ private List getValidStores() {
private boolean checkStoreHealth(TiStore store) {
String addressStr = store.getStore().getAddress();
- for (Metapb.StoreLabel label : store.getStore().getLabelsList()) {
- if (label.getKey().equals(TiStoreType.TiFlash.getLabelKey())
- && label.getValue().equals(TiStoreType.TiFlash.getLabelValue())) {
- return checkTiFlashHealth(addressStr);
- }
+ if (store.isTiFlash()) {
+ return checkTiFlashHealth(addressStr);
}
return checkTiKVHealth(addressStr);
}
@@ -100,8 +97,8 @@ private boolean checkTiFlashHealth(String addressStr) {
stub.getChannel(), TikvGrpc.getIsAliveMethod(), stub.getCallOptions(), factory.get());
return resp != null && resp.getAvailable();
} catch (Exception e) {
- logger.warn(
- "fail to check TiFlash health, regrade as unhealthy. TiFlash address: " + addressStr, e);
+ logger.info(
+ "fail to check TiFlash health, regard as unhealthy. TiFlash address: " + addressStr, e);
return false;
}
}
@@ -115,8 +112,7 @@ private boolean checkTiKVHealth(String addressStr) {
HealthCheckResponse resp = stub.check(req);
return resp.getStatus() == HealthCheckResponse.ServingStatus.SERVING;
} catch (Exception e) {
- logger.warn(
- "fail to check TiKV health, regrade as unhealthy. TiKV address: " + addressStr, e);
+ logger.info("fail to check TiKV health, regard as unhealthy. TiKV address: " + addressStr, e);
return false;
}
}
diff --git a/src/main/java/org/tikv/common/region/TiStore.java b/src/main/java/org/tikv/common/region/TiStore.java
index 8513e2b56e1..5feaa246fe5 100644
--- a/src/main/java/org/tikv/common/region/TiStore.java
+++ b/src/main/java/org/tikv/common/region/TiStore.java
@@ -105,4 +105,14 @@ public Metapb.Store getProxyStore() {
public long getId() {
return this.store.getId();
}
+
+ public boolean isTiFlash() {
+ for (Metapb.StoreLabel label : store.getLabelsList()) {
+ if (label.getKey().equals(TiStoreType.TiFlash.getLabelKey())
+ && label.getValue().equals(TiStoreType.TiFlash.getLabelValue())) {
+ return true;
+ }
+ }
+ return false;
+ }
}