mirror of https://github.com/tikv/client-java.git
fix region may miss in rawscan
Signed-off-by: TrafalgarRicardoLu <trafalgarricardolu@gmail.com>
This commit is contained in:
parent
e3559f69bb
commit
d2409efd48
|
|
@ -77,6 +77,10 @@ public class ConcreteScanIterator extends ScanIterator {
|
|||
client.setTimeout(conf.getScanTimeout());
|
||||
BackOffer backOffer = ConcreteBackOffer.newScannerNextMaxBackOff();
|
||||
currentCache = client.scan(backOffer, startKey, version);
|
||||
// If we get region before scan, we will use region from cache which
|
||||
// may have wrong end key. This may miss some regions that split from old region.
|
||||
// Client will get the newest region during scan. So we need to
|
||||
// update region after scan.
|
||||
region = client.getRegion();
|
||||
return region;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -57,6 +57,9 @@ public class RawScanIterator extends ScanIterator {
|
|||
} else {
|
||||
try {
|
||||
currentCache = client.rawScan(backOffer, startKey, limit, keyOnly);
|
||||
// Client will get the newest region during scan. So we need to
|
||||
// update region after scan.
|
||||
region = client.getRegion();
|
||||
} catch (final TiKVException e) {
|
||||
backOffer.doBackOff(BackOffFunction.BackOffFuncType.BoRegionMiss, e);
|
||||
continue;
|
||||
|
|
|
|||
|
|
@ -1253,6 +1253,9 @@ public class RegionStoreClient extends AbstractRegionStoreClient {
|
|||
regionManager, this, resp -> resp.hasRegionError() ? resp.getRegionError() : null);
|
||||
RawScanResponse resp =
|
||||
callWithRetry(backOffer, TikvGrpc.getRawScanMethod(), factory, handler);
|
||||
// RegionErrorHandler may refresh region cache due to outdated region info,
|
||||
// This region need to get newest ino from cache.
|
||||
region = regionManager.getRegionByKey(key, backOffer);
|
||||
return rawScanHelper(resp);
|
||||
} finally {
|
||||
requestTimer.observeDuration();
|
||||
|
|
|
|||
Loading…
Reference in New Issue