Skip to content

Commit 4463abb

Browse files
authored
[close #736] Select reachable store (#737) (#742)
Signed-off-by: shiyuhang <[email protected]>
1 parent a958699 commit 4463abb

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

src/main/java/org/tikv/common/region/RegionManager.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -228,12 +228,25 @@ public Pair<TiRegion, TiStore> getRegionStorePairByKey(
228228

229229
TiStore store = null;
230230
if (storeType == TiStoreType.TiKV) {
231-
Peer peer = region.getCurrentReplica();
232-
store = getStoreById(peer.getStoreId(), backOffer);
231+
// check from the first replica in case it recovers
232+
List<Peer> replicaList = region.getReplicaList();
233+
for (int i = 0; i < replicaList.size(); i++) {
234+
Peer peer = replicaList.get(i);
235+
store = getStoreById(peer.getStoreId(), backOffer);
236+
if (store.isReachable()) {
237+
// update replica's index
238+
region.setReplicaIdx(i);
239+
break;
240+
}
241+
logger.info("Store {} is unreachable, try to get the next replica", peer.getStoreId());
242+
}
233243
} else {
234244
List<TiStore> tiflashStores = new ArrayList<>();
235245
for (Peer peer : region.getLearnerList()) {
236246
TiStore s = getStoreById(peer.getStoreId(), backOffer);
247+
if (!s.isReachable()) {
248+
continue;
249+
}
237250
for (Metapb.StoreLabel label : s.getStore().getLabelsList()) {
238251
if (label.getKey().equals(storeType.getLabelKey())
239252
&& label.getValue().equals(storeType.getLabelValue())) {

src/main/java/org/tikv/common/region/TiRegion.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,14 @@ public Peer getNextReplica() {
126126
return getCurrentReplica();
127127
}
128128

129+
public void setReplicaIdx(int idx) {
130+
replicaIdx = idx;
131+
}
132+
133+
public List<Peer> getReplicaList() {
134+
return replicaList;
135+
}
136+
129137
private boolean isLeader(Peer peer) {
130138
return getLeader().equals(peer);
131139
}

0 commit comments

Comments
 (0)