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());
|
client.setTimeout(conf.getScanTimeout());
|
||||||
BackOffer backOffer = ConcreteBackOffer.newScannerNextMaxBackOff();
|
BackOffer backOffer = ConcreteBackOffer.newScannerNextMaxBackOff();
|
||||||
currentCache = client.scan(backOffer, startKey, version);
|
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();
|
region = client.getRegion();
|
||||||
return region;
|
return region;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -57,6 +57,9 @@ public class RawScanIterator extends ScanIterator {
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
currentCache = client.rawScan(backOffer, startKey, limit, keyOnly);
|
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) {
|
} catch (final TiKVException e) {
|
||||||
backOffer.doBackOff(BackOffFunction.BackOffFuncType.BoRegionMiss, e);
|
backOffer.doBackOff(BackOffFunction.BackOffFuncType.BoRegionMiss, e);
|
||||||
continue;
|
continue;
|
||||||
|
|
|
||||||
|
|
@ -1253,6 +1253,9 @@ public class RegionStoreClient extends AbstractRegionStoreClient {
|
||||||
regionManager, this, resp -> resp.hasRegionError() ? resp.getRegionError() : null);
|
regionManager, this, resp -> resp.hasRegionError() ? resp.getRegionError() : null);
|
||||||
RawScanResponse resp =
|
RawScanResponse resp =
|
||||||
callWithRetry(backOffer, TikvGrpc.getRawScanMethod(), factory, handler);
|
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);
|
return rawScanHelper(resp);
|
||||||
} finally {
|
} finally {
|
||||||
requestTimer.observeDuration();
|
requestTimer.observeDuration();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue