From 6def2349fb7fc082dc2c375b142d6e451cefbcaf Mon Sep 17 00:00:00 2001 From: birdstorm Date: Mon, 17 May 2021 18:38:20 +0800 Subject: [PATCH 1/2] invalidate all region cache on store when store id not found Signed-off-by: birdstorm --- src/main/java/org/tikv/common/region/RegionManager.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/tikv/common/region/RegionManager.java b/src/main/java/org/tikv/common/region/RegionManager.java index 4cf6fc668bf..04b682856bd 100644 --- a/src/main/java/org/tikv/common/region/RegionManager.java +++ b/src/main/java/org/tikv/common/region/RegionManager.java @@ -129,9 +129,16 @@ public Pair getRegionStorePairByKey( if (isReplicaRead) { Peer peer = region.getCurrentFollower(); store = cache.getStoreById(peer.getStoreId(), backOffer); + if (store == null) { + cache.invalidateRegion(region); + } } else { Peer leader = region.getLeader(); - store = cache.getStoreById(leader.getStoreId(), backOffer); + long storeId = leader.getStoreId(); + store = cache.getStoreById(storeId, backOffer); + if (store == null) { + cache.invalidateAllRegionForStore(storeId); + } } } else { outerLoop: From 6e76d04306ec5761b4e6bb40cb21c21ddd6388cc Mon Sep 17 00:00:00 2001 From: birdstorm Date: Mon, 17 May 2021 19:40:57 +0800 Subject: [PATCH 2/2] optimize Signed-off-by: birdstorm --- .../java/org/tikv/common/region/RegionManager.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/tikv/common/region/RegionManager.java b/src/main/java/org/tikv/common/region/RegionManager.java index 04b682856bd..63a91c2ccd7 100644 --- a/src/main/java/org/tikv/common/region/RegionManager.java +++ b/src/main/java/org/tikv/common/region/RegionManager.java @@ -134,10 +134,9 @@ public Pair getRegionStorePairByKey( } } else { Peer leader = region.getLeader(); - long storeId = leader.getStoreId(); - store = cache.getStoreById(storeId, backOffer); + store = cache.getStoreById(leader.getStoreId(), backOffer); if (store == null) { - cache.invalidateAllRegionForStore(storeId); + cache.clearAll(); } } } else { @@ -323,8 +322,8 @@ public synchronized void invalidateAllRegionForStore(long storeId) { // remove region for (TiRegion r : regionToRemove) { - regionCache.remove(r.getId()); keyToRegionIdCache.remove(makeRange(r.getStartKey(), r.getEndKey())); + regionCache.remove(r.getId()); } } @@ -347,5 +346,10 @@ public synchronized Store getStoreById(long id, BackOffer backOffer) { throw new GrpcException(e); } } + + public synchronized void clearAll() { + keyToRegionIdCache.clear(); + regionCache.clear(); + } } }