diff --git a/src/main/java/org/tikv/common/region/RegionManager.java b/src/main/java/org/tikv/common/region/RegionManager.java index 67eee685cff..745b53399f4 100644 --- a/src/main/java/org/tikv/common/region/RegionManager.java +++ b/src/main/java/org/tikv/common/region/RegionManager.java @@ -125,6 +125,9 @@ public Pair getRegionStorePairByKey( if (storeType == TiStoreType.TiKV) { Peer peer = region.getCurrentReplica(); store = cache.getStoreById(peer.getStoreId(), backOffer); + if (store == null) { + cache.clearAll(); + } } else { outerLoop: for (Peer peer : region.getLearnerList()) { @@ -308,8 +311,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()); } } @@ -332,5 +335,10 @@ public synchronized Store getStoreById(long id, BackOffer backOffer) { throw new GrpcException(e); } } + + public synchronized void clearAll() { + keyToRegionIdCache.clear(); + regionCache.clear(); + } } }