From 2046895cbc93ef44cccc609d9e589e20ef1e95dd Mon Sep 17 00:00:00 2001 From: shi yuhang <52435083+shiyuhang0@users.noreply.github.com> Date: Thu, 27 Apr 2023 18:35:45 +0800 Subject: [PATCH 1/2] This is an automated cherry-pick of #737 close tikv/client-java#736 Signed-off-by: ti-chi-bot Signed-off-by: shiyuhang <1136742008@qq.com> --- pom.xml | 4 ++++ .../org/tikv/common/region/RegionManager.java | 17 +++++++++++++++-- .../java/org/tikv/common/region/TiRegion.java | 8 ++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 3a49d5a4a9b..cdc711ff630 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,11 @@ 4.0.0 org.tikv tikv-client-java +<<<<<<< HEAD 3.3.2 +======= + 3.3.4-SNAPSHOT +>>>>>>> e8feb23344 ([close #736] Select reachable store (#737)) jar TiKV Java Client A Java Client for TiKV diff --git a/src/main/java/org/tikv/common/region/RegionManager.java b/src/main/java/org/tikv/common/region/RegionManager.java index 37c3d73f759..129afaf9d50 100644 --- a/src/main/java/org/tikv/common/region/RegionManager.java +++ b/src/main/java/org/tikv/common/region/RegionManager.java @@ -228,12 +228,25 @@ public Pair getRegionStorePairByKey( TiStore store = null; if (storeType == TiStoreType.TiKV) { - Peer peer = region.getCurrentReplica(); - store = getStoreById(peer.getStoreId(), backOffer); + // check from the first replica in case it recovers + List replicaList = region.getReplicaList(); + for (int i = 0; i < replicaList.size(); i++) { + Peer peer = replicaList.get(i); + store = getStoreById(peer.getStoreId(), backOffer); + if (store.isReachable()) { + // update replica's index + region.setReplicaIdx(i); + break; + } + logger.info("Store {} is unreachable, try to get the next replica", peer.getStoreId()); + } } else { List tiflashStores = new ArrayList<>(); for (Peer peer : region.getLearnerList()) { TiStore s = getStoreById(peer.getStoreId(), backOffer); + if (!s.isReachable()) { + continue; + } for (Metapb.StoreLabel label : s.getStore().getLabelsList()) { if (label.getKey().equals(storeType.getLabelKey()) && label.getValue().equals(storeType.getLabelValue())) { diff --git a/src/main/java/org/tikv/common/region/TiRegion.java b/src/main/java/org/tikv/common/region/TiRegion.java index 3c0ce8e48d4..9db3397c5ef 100644 --- a/src/main/java/org/tikv/common/region/TiRegion.java +++ b/src/main/java/org/tikv/common/region/TiRegion.java @@ -126,6 +126,14 @@ public Peer getNextReplica() { return getCurrentReplica(); } + public void setReplicaIdx(int idx) { + replicaIdx = idx; + } + + public List getReplicaList() { + return replicaList; + } + private boolean isLeader(Peer peer) { return getLeader().equals(peer); } From b82155a6b60d25450b37d64ed600d376abed501b Mon Sep 17 00:00:00 2001 From: shi yuhang <52435083+shiyuhang0@users.noreply.github.com> Date: Thu, 27 Apr 2023 18:42:30 +0800 Subject: [PATCH 2/2] Update pom.xml Signed-off-by: shiyuhang <1136742008@qq.com> --- pom.xml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/pom.xml b/pom.xml index cdc711ff630..9660a0305e6 100644 --- a/pom.xml +++ b/pom.xml @@ -3,11 +3,7 @@ 4.0.0 org.tikv tikv-client-java -<<<<<<< HEAD - 3.3.2 -======= 3.3.4-SNAPSHOT ->>>>>>> e8feb23344 ([close #736] Select reachable store (#737)) jar TiKV Java Client A Java Client for TiKV