diff --git a/src/main/java/org/tikv/common/region/AbstractRegionStoreClient.java b/src/main/java/org/tikv/common/region/AbstractRegionStoreClient.java index 8b102f04fc5..e34a0ff352d 100644 --- a/src/main/java/org/tikv/common/region/AbstractRegionStoreClient.java +++ b/src/main/java/org/tikv/common/region/AbstractRegionStoreClient.java @@ -39,7 +39,6 @@ import org.tikv.common.log.SlowLogEmptyImpl; import org.tikv.common.log.SlowLogSpan; import org.tikv.common.util.ChannelFactory; -import org.tikv.common.util.Pair; import org.tikv.kvproto.Kvrpcpb; import org.tikv.kvproto.Metapb; import org.tikv.kvproto.TikvGrpc; @@ -143,15 +142,6 @@ public boolean onStoreUnreachable(SlowLog slowLog) { return true; } - if (store.getProxyStore() == null && store.isReachable()) { - if (store.isReachable()) { - logger.info( - String.format( - "store[%d] for region[%d] is reachable, retry", store.getId(), region.getId())); - return true; - } - } - // seek an available leader store to send request Boolean result = seekLeaderStore(slowLog); if (result != null) { @@ -206,26 +196,8 @@ private Boolean seekLeaderStore(SlowLog slowLog) { logger.info(String.format("try switch leader: region[%d]", region.getId())); - Pair pair = switchLeaderStore(); - Metapb.Peer peer = pair.first; - boolean exceptionEncountered = pair.second; - if (peer == null) { - if (!exceptionEncountered) { - // all response returned normally, the leader is not elected, just wait until it is ready. - logger.info( - String.format( - "leader for region[%d] is not elected, just wait until it is ready", - region.getId())); - return true; - } else { - // no leader found, some response does not return normally, there may be network - // partition. - logger.warn( - String.format( - "leader for region[%d] is not found, it is possible that network partition occurred", - region.getId())); - } - } else { + Metapb.Peer peer = switchLeaderStore(); + if (peer != null) { // we found a leader TiStore currentLeaderStore = regionManager.getStoreById(peer.getStoreId()); if (currentLeaderStore.isReachable()) { @@ -240,6 +212,12 @@ private Boolean seekLeaderStore(SlowLog slowLog) { updateClientStub(); return true; } + } else { + // no leader found, some response does not return normally, there may be network partition. + logger.warn( + String.format( + "leader for region[%d] is not found, it is possible that network partition occurred", + region.getId())); } } finally { switchLeaderDurationTimer.observeDuration(); @@ -272,7 +250,7 @@ private boolean seekProxyStore(SlowLog slowLog) { } // first: leader peer, second: true if any responses returned with grpc error - private Pair switchLeaderStore() { + private Metapb.Peer switchLeaderStore() { List responses = new LinkedList<>(); for (Metapb.Peer peer : region.getFollowerList()) { ByteString key = region.getStartKey(); @@ -290,7 +268,6 @@ private Pair switchLeaderStore() { ListenableFuture task = stub.rawGet(rawGetRequest); responses.add(new SwitchLeaderTask(task, peer)); } - boolean exceptionEncountered = false; while (true) { try { Thread.sleep(2); @@ -310,15 +287,14 @@ private Pair switchLeaderStore() { // the peer is leader logger.info( String.format("rawGet response indicates peer[%d] is leader", task.peer.getId())); - return Pair.create(task.peer, exceptionEncountered); + return task.peer; } } } catch (Exception ignored) { - exceptionEncountered = true; } } if (unfinished.isEmpty()) { - return Pair.create(null, exceptionEncountered); + return null; } responses = unfinished; }