Skip to content

Commit 8c5219a

Browse files
birdstormmarsishandsome
authored andcommitted
Optimize seek leader store logic (tikv#335)
Signed-off-by: marsishandsome <marsishandsome@gmail.com>
1 parent cbce07b commit 8c5219a

1 file changed

Lines changed: 11 additions & 35 deletions

File tree

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

Lines changed: 11 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939
import org.tikv.common.log.SlowLogEmptyImpl;
4040
import org.tikv.common.log.SlowLogSpan;
4141
import org.tikv.common.util.ChannelFactory;
42-
import org.tikv.common.util.Pair;
4342
import org.tikv.kvproto.Kvrpcpb;
4443
import org.tikv.kvproto.Metapb;
4544
import org.tikv.kvproto.TikvGrpc;
@@ -143,15 +142,6 @@ public boolean onStoreUnreachable(SlowLog slowLog) {
143142
return true;
144143
}
145144

146-
if (store.getProxyStore() == null && store.isReachable()) {
147-
if (store.isReachable()) {
148-
logger.info(
149-
String.format(
150-
"store[%d] for region[%d] is reachable, retry", store.getId(), region.getId()));
151-
return true;
152-
}
153-
}
154-
155145
// seek an available leader store to send request
156146
Boolean result = seekLeaderStore(slowLog);
157147
if (result != null) {
@@ -206,26 +196,8 @@ private Boolean seekLeaderStore(SlowLog slowLog) {
206196

207197
logger.info(String.format("try switch leader: region[%d]", region.getId()));
208198

209-
Pair<Metapb.Peer, Boolean> pair = switchLeaderStore();
210-
Metapb.Peer peer = pair.first;
211-
boolean exceptionEncountered = pair.second;
212-
if (peer == null) {
213-
if (!exceptionEncountered) {
214-
// all response returned normally, the leader is not elected, just wait until it is ready.
215-
logger.info(
216-
String.format(
217-
"leader for region[%d] is not elected, just wait until it is ready",
218-
region.getId()));
219-
return true;
220-
} else {
221-
// no leader found, some response does not return normally, there may be network
222-
// partition.
223-
logger.warn(
224-
String.format(
225-
"leader for region[%d] is not found, it is possible that network partition occurred",
226-
region.getId()));
227-
}
228-
} else {
199+
Metapb.Peer peer = switchLeaderStore();
200+
if (peer != null) {
229201
// we found a leader
230202
TiStore currentLeaderStore = regionManager.getStoreById(peer.getStoreId());
231203
if (currentLeaderStore.isReachable()) {
@@ -240,6 +212,12 @@ private Boolean seekLeaderStore(SlowLog slowLog) {
240212
updateClientStub();
241213
return true;
242214
}
215+
} else {
216+
// no leader found, some response does not return normally, there may be network partition.
217+
logger.warn(
218+
String.format(
219+
"leader for region[%d] is not found, it is possible that network partition occurred",
220+
region.getId()));
243221
}
244222
} finally {
245223
switchLeaderDurationTimer.observeDuration();
@@ -272,7 +250,7 @@ private boolean seekProxyStore(SlowLog slowLog) {
272250
}
273251

274252
// first: leader peer, second: true if any responses returned with grpc error
275-
private Pair<Metapb.Peer, Boolean> switchLeaderStore() {
253+
private Metapb.Peer switchLeaderStore() {
276254
List<SwitchLeaderTask> responses = new LinkedList<>();
277255
for (Metapb.Peer peer : region.getFollowerList()) {
278256
ByteString key = region.getStartKey();
@@ -290,7 +268,6 @@ private Pair<Metapb.Peer, Boolean> switchLeaderStore() {
290268
ListenableFuture<Kvrpcpb.RawGetResponse> task = stub.rawGet(rawGetRequest);
291269
responses.add(new SwitchLeaderTask(task, peer));
292270
}
293-
boolean exceptionEncountered = false;
294271
while (true) {
295272
try {
296273
Thread.sleep(2);
@@ -310,15 +287,14 @@ private Pair<Metapb.Peer, Boolean> switchLeaderStore() {
310287
// the peer is leader
311288
logger.info(
312289
String.format("rawGet response indicates peer[%d] is leader", task.peer.getId()));
313-
return Pair.create(task.peer, exceptionEncountered);
290+
return task.peer;
314291
}
315292
}
316293
} catch (Exception ignored) {
317-
exceptionEncountered = true;
318294
}
319295
}
320296
if (unfinished.isEmpty()) {
321-
return Pair.create(null, exceptionEncountered);
297+
return null;
322298
}
323299
responses = unfinished;
324300
}

0 commit comments

Comments
 (0)