diff --git a/src/main/java/org/tikv/common/region/RegionManager.java b/src/main/java/org/tikv/common/region/RegionManager.java index 4cf6fc668bf..63a91c2ccd7 100644 --- a/src/main/java/org/tikv/common/region/RegionManager.java +++ b/src/main/java/org/tikv/common/region/RegionManager.java @@ -129,9 +129,15 @@ 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); + if (store == null) { + cache.clearAll(); + } } } else { outerLoop: @@ -316,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()); } } @@ -340,5 +346,10 @@ public synchronized Store getStoreById(long id, BackOffer backOffer) { throw new GrpcException(e); } } + + public synchronized void clearAll() { + keyToRegionIdCache.clear(); + regionCache.clear(); + } } }