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; + } }