diff --git a/src/main/java/org/tikv/common/operation/RegionErrorHandler.java b/src/main/java/org/tikv/common/operation/RegionErrorHandler.java index 2e4ab56b041..d6b5bb06029 100644 --- a/src/main/java/org/tikv/common/operation/RegionErrorHandler.java +++ b/src/main/java/org/tikv/common/operation/RegionErrorHandler.java @@ -224,7 +224,14 @@ private boolean onRegionEpochNotMatch(BackOffer backOffer, List c @Override public boolean handleRequestError(BackOffer backOffer, Exception e) { if (recv.onStoreUnreachable()) { - backOffer.doBackOff(BackOffFunction.BackOffFuncType.BoTiKVRPC, e); + try { + backOffer.doBackOff(BackOffFunction.BackOffFuncType.BoTiKVRPC, e); + } catch (Exception boErr) { + logger.warn( + String.format("backoff time exceed, invalidate region[%d]", recv.getRegion().getId())); + regionManager.onRequestFail(recv.getRegion()); + throw boErr; + } return true; } diff --git a/src/main/java/org/tikv/common/region/AbstractRegionStoreClient.java b/src/main/java/org/tikv/common/region/AbstractRegionStoreClient.java index c47bb854746..bb8998ba44f 100644 --- a/src/main/java/org/tikv/common/region/AbstractRegionStoreClient.java +++ b/src/main/java/org/tikv/common/region/AbstractRegionStoreClient.java @@ -144,7 +144,9 @@ public boolean onStoreUnreachable() { // reduce the latency cost by fail requests. if (targetStore.canForwardFirst()) { if (conf.getEnableGrpcForward() && retryForwardTimes <= region.getFollowerList().size()) { - return retryOtherStoreByProxyForward(); + if (retryOtherStoreByProxyForward()) { + return true; + } } if (retryOtherStoreLeader()) { return true; @@ -154,7 +156,9 @@ public boolean onStoreUnreachable() { return true; } if (conf.getEnableGrpcForward() && retryForwardTimes <= region.getFollowerList().size()) { - return retryOtherStoreByProxyForward(); + if (retryOtherStoreByProxyForward()) { + return true; + } } return true; }