diff --git a/src/main/java/org/tikv/common/region/RegionManager.java b/src/main/java/org/tikv/common/region/RegionManager.java index ada9bb73052..1556f5d2a95 100644 --- a/src/main/java/org/tikv/common/region/RegionManager.java +++ b/src/main/java/org/tikv/common/region/RegionManager.java @@ -94,7 +94,7 @@ public void invalidateAll() { } public TiRegion getRegionByKey(ByteString key) { - return getRegionByKey(key, ConcreteBackOffer.newGetBackOff()); + return getRegionByKey(key, defaultBackOff()); } public TiRegion getRegionByKey(ByteString key, BackOffer backOffer) { @@ -124,7 +124,7 @@ public TiRegion getRegionByKey(ByteString key, BackOffer backOffer) { // Consider region A, B. After merge of (A, B) -> A, region ID B does not exist. // This request is unrecoverable. public TiRegion getRegionById(long regionId) { - BackOffer backOffer = ConcreteBackOffer.newGetBackOff(); + BackOffer backOffer = defaultBackOff(); TiRegion region = cache.getRegionById(regionId); if (region == null) { Pair regionAndLeader = @@ -144,7 +144,7 @@ public Pair getRegionStorePairByKey(ByteString key) { } public Pair getRegionStorePairByKey(ByteString key, TiStoreType storeType) { - return getRegionStorePairByKey(key, storeType, ConcreteBackOffer.newGetBackOff()); + return getRegionStorePairByKey(key, storeType, defaultBackOff()); } public Pair getRegionStorePairByKey( @@ -216,7 +216,7 @@ public TiStore getStoreById(long id, BackOffer backOffer) { } public TiStore getStoreById(long id) { - return getStoreById(id, ConcreteBackOffer.newGetBackOff()); + return getStoreById(id, defaultBackOff()); } public void onRegionStale(TiRegion region) { @@ -264,4 +264,8 @@ public void invalidateStore(long storeId) { public void invalidateRegion(TiRegion region) { cache.invalidateRegion(region); } + + private BackOffer defaultBackOff() { + return ConcreteBackOffer.newCustomBackOff(conf.getRawKVDefaultBackoffInMS()); + } } diff --git a/src/main/java/org/tikv/common/region/RegionStoreClient.java b/src/main/java/org/tikv/common/region/RegionStoreClient.java index 29d3bdc64d9..1c0632d5b78 100644 --- a/src/main/java/org/tikv/common/region/RegionStoreClient.java +++ b/src/main/java/org/tikv/common/region/RegionStoreClient.java @@ -1302,19 +1302,39 @@ public synchronized RegionStoreClient build(ByteString key) throws GrpcException return build(key, TiStoreType.TiKV); } + public synchronized RegionStoreClient build(ByteString key, BackOffer backOffer) + throws GrpcException { + return build(key, TiStoreType.TiKV, backOffer); + } + public synchronized RegionStoreClient build(ByteString key, TiStoreType storeType) throws GrpcException { - Pair pair = regionManager.getRegionStorePairByKey(key, storeType); + return build(key, storeType, defaultBackOff()); + } + + public synchronized RegionStoreClient build( + ByteString key, TiStoreType storeType, BackOffer backOffer) throws GrpcException { + Pair pair = + regionManager.getRegionStorePairByKey(key, storeType, backOffer); return build(pair.first, pair.second, storeType); } public synchronized RegionStoreClient build(TiRegion region) throws GrpcException { - TiStore store = regionManager.getStoreById(region.getLeader().getStoreId()); + return build(region, defaultBackOff()); + } + + public synchronized RegionStoreClient build(TiRegion region, BackOffer backOffer) + throws GrpcException { + TiStore store = regionManager.getStoreById(region.getLeader().getStoreId(), backOffer); return build(region, store, TiStoreType.TiKV); } public RegionManager getRegionManager() { return regionManager; } + + private BackOffer defaultBackOff() { + return ConcreteBackOffer.newCustomBackOff(conf.getRawKVDefaultBackoffInMS()); + } } } diff --git a/src/main/java/org/tikv/common/util/BackOffer.java b/src/main/java/org/tikv/common/util/BackOffer.java index 01926d6d42b..7d7513635f7 100644 --- a/src/main/java/org/tikv/common/util/BackOffer.java +++ b/src/main/java/org/tikv/common/util/BackOffer.java @@ -20,7 +20,6 @@ public interface BackOffer { // Back off types. int seconds = 1000; - int COP_BUILD_TASK_MAX_BACKOFF = 5 * seconds; int TSO_MAX_BACKOFF = 5 * seconds; int SCANNER_NEXT_MAX_BACKOFF = 40 * seconds; int BATCH_GET_MAX_BACKOFF = 40 * seconds; diff --git a/src/main/java/org/tikv/raw/RawKVClient.java b/src/main/java/org/tikv/raw/RawKVClient.java index bef0fae4f1a..2b30dbef9c7 100644 --- a/src/main/java/org/tikv/raw/RawKVClient.java +++ b/src/main/java/org/tikv/raw/RawKVClient.java @@ -125,7 +125,7 @@ public void put(ByteString key, ByteString value, long ttl) { try { BackOffer backOffer = defaultBackOff(); while (true) { - RegionStoreClient client = clientBuilder.build(key); + RegionStoreClient client = clientBuilder.build(key, backOffer); try { client.rawPut(backOffer, key, value, ttl, atomicForCAS); RAW_REQUEST_SUCCESS.labels(label).inc(); @@ -211,7 +211,7 @@ public void compareAndSet( try { BackOffer backOffer = defaultBackOff(); while (true) { - RegionStoreClient client = clientBuilder.build(key); + RegionStoreClient client = clientBuilder.build(key, backOffer); try { client.rawCompareAndSet(backOffer, key, prevValue, value, ttl); RAW_REQUEST_SUCCESS.labels(label).inc(); @@ -269,7 +269,7 @@ public Optional get(ByteString key) { try { BackOffer backOffer = defaultBackOff(); while (true) { - RegionStoreClient client = clientBuilder.build(key); + RegionStoreClient client = clientBuilder.build(key, backOffer); try { Optional result = client.rawGet(defaultBackOff(), key); RAW_REQUEST_SUCCESS.labels(label).inc(); @@ -342,7 +342,7 @@ public Optional getKeyTTL(ByteString key) { try { BackOffer backOffer = defaultBackOff(); while (true) { - RegionStoreClient client = clientBuilder.build(key); + RegionStoreClient client = clientBuilder.build(key, backOffer); try { Optional result = client.rawGetKeyTTL(defaultBackOff(), key); RAW_REQUEST_SUCCESS.labels(label).inc(); @@ -590,7 +590,7 @@ public void delete(ByteString key) { try { BackOffer backOffer = defaultBackOff(); while (true) { - RegionStoreClient client = clientBuilder.build(key); + RegionStoreClient client = clientBuilder.build(key, backOffer); try { client.rawDelete(defaultBackOff(), key, atomicForCAS); RAW_REQUEST_SUCCESS.labels(label).inc(); @@ -820,7 +820,7 @@ private List doSendBatchGet(BackOffer backOffer, List keys) private Pair, List> doSendBatchGetInBatchesWithRetry( BackOffer backOffer, Batch batch) { - RegionStoreClient client = clientBuilder.build(batch.getRegion()); + RegionStoreClient client = clientBuilder.build(batch.getRegion(), backOffer); try { List partialResult = client.rawBatchGet(backOffer, batch.getKeys()); return Pair.create(new ArrayList<>(), partialResult); @@ -860,7 +860,7 @@ private void doSendBatchDelete(BackOffer backOffer, List keys) { } private List doSendBatchDeleteInBatchesWithRetry(BackOffer backOffer, Batch batch) { - RegionStoreClient client = clientBuilder.build(batch.getRegion()); + RegionStoreClient client = clientBuilder.build(batch.getRegion(), backOffer); try { client.rawBatchDelete(backOffer, batch.getKeys(), atomicForCAS); return new ArrayList<>(); @@ -910,7 +910,7 @@ private void doSendDeleteRange(BackOffer backOffer, ByteString startKey, ByteStr } private List doSendDeleteRangeWithRetry(BackOffer backOffer, DeleteRange range) { - try (RegionStoreClient client = clientBuilder.build(range.getRegion())) { + try (RegionStoreClient client = clientBuilder.build(range.getRegion(), backOffer)) { client.setTimeout(conf.getScanTimeout()); client.rawDeleteRange(backOffer, range.getStartKey(), range.getEndKey()); return new ArrayList<>();