From 4bf2bbab07343fea21e2ecbfed553533898a8273 Mon Sep 17 00:00:00 2001 From: birdstorm Date: Fri, 19 Nov 2021 13:36:25 +0800 Subject: [PATCH 1/2] optimize seek leader store Signed-off-by: birdstorm --- .../region/AbstractRegionStoreClient.java | 36 ++++++------------- 1 file changed, 11 insertions(+), 25 deletions(-) diff --git a/src/main/java/org/tikv/common/region/AbstractRegionStoreClient.java b/src/main/java/org/tikv/common/region/AbstractRegionStoreClient.java index 96e620279aa..902402efb1b 100644 --- a/src/main/java/org/tikv/common/region/AbstractRegionStoreClient.java +++ b/src/main/java/org/tikv/common/region/AbstractRegionStoreClient.java @@ -200,26 +200,8 @@ private Boolean seekLeaderStore() { 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()) { @@ -234,6 +216,12 @@ private Boolean seekLeaderStore() { 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(); @@ -263,7 +251,7 @@ private boolean seekProxyStore() { } // 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(); @@ -281,7 +269,6 @@ private Pair switchLeaderStore() { ListenableFuture task = stub.rawGet(rawGetRequest); responses.add(new SwitchLeaderTask(task, peer)); } - boolean exceptionEncountered = false; while (true) { try { Thread.sleep(2); @@ -301,15 +288,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; } From f04ec64f1d47eead91e575697e1e5f8478e7631b Mon Sep 17 00:00:00 2001 From: birdstorm Date: Fri, 19 Nov 2021 13:40:45 +0800 Subject: [PATCH 2/2] remove some logic Signed-off-by: birdstorm --- .../tikv/common/region/AbstractRegionStoreClient.java | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/main/java/org/tikv/common/region/AbstractRegionStoreClient.java b/src/main/java/org/tikv/common/region/AbstractRegionStoreClient.java index 902402efb1b..14b35e9fbce 100644 --- a/src/main/java/org/tikv/common/region/AbstractRegionStoreClient.java +++ b/src/main/java/org/tikv/common/region/AbstractRegionStoreClient.java @@ -36,7 +36,6 @@ import org.tikv.common.TiConfiguration; import org.tikv.common.exception.GrpcException; 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; @@ -138,15 +137,6 @@ public boolean onStoreUnreachable() { 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(); if (result != null) {