HBASE-18552 Backport the server side change in HBASE-18489 to branch-1
This commit is contained in:
parent
3959b39b9b
commit
ff23e15769
|
@ -2855,9 +2855,9 @@ public class RSRpcServices implements HBaseRPCErrorHandler,
|
||||||
// Heartbeat messages occur when the time limit has been reached.
|
// Heartbeat messages occur when the time limit has been reached.
|
||||||
builder.setHeartbeatMessage(timeLimitReached);
|
builder.setHeartbeatMessage(timeLimitReached);
|
||||||
if (timeLimitReached && rsh.needCursor) {
|
if (timeLimitReached && rsh.needCursor) {
|
||||||
Cell readingCell = scannerContext.getPeekedCellInHeartbeat();
|
Cell cursorCell = scannerContext.getLastPeekedCell();
|
||||||
if (readingCell != null) {
|
if (cursorCell != null) {
|
||||||
builder.setCursor(ProtobufUtil.toCursor(readingCell));
|
builder.setCursor(ProtobufUtil.toCursor(cursorCell));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,8 +19,6 @@ package org.apache.hadoop.hbase.regionserver;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
|
||||||
import org.apache.commons.logging.LogFactory;
|
|
||||||
import org.apache.hadoop.hbase.Cell;
|
import org.apache.hadoop.hbase.Cell;
|
||||||
import org.apache.hadoop.hbase.HBaseInterfaceAudience;
|
import org.apache.hadoop.hbase.HBaseInterfaceAudience;
|
||||||
import org.apache.hadoop.hbase.classification.InterfaceAudience;
|
import org.apache.hadoop.hbase.classification.InterfaceAudience;
|
||||||
|
@ -97,7 +95,7 @@ public class ScannerContext {
|
||||||
boolean keepProgress;
|
boolean keepProgress;
|
||||||
private static boolean DEFAULT_KEEP_PROGRESS = false;
|
private static boolean DEFAULT_KEEP_PROGRESS = false;
|
||||||
|
|
||||||
private Cell peekedCellInHeartbeat = null;
|
private Cell lastPeekedCell = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tracks the relevant server side metrics during scans. null when metrics should not be tracked
|
* Tracks the relevant server side metrics during scans. null when metrics should not be tracked
|
||||||
|
@ -324,12 +322,12 @@ public class ScannerContext {
|
||||||
|| checkTimeLimit(checkerScope);
|
|| checkTimeLimit(checkerScope);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Cell getPeekedCellInHeartbeat() {
|
public Cell getLastPeekedCell() {
|
||||||
return peekedCellInHeartbeat;
|
return lastPeekedCell;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setPeekedCellInHeartbeat(Cell peekedCellInHeartbeat) {
|
public void setLastPeekedCell(Cell lastPeekedCell) {
|
||||||
this.peekedCellInHeartbeat = peekedCellInHeartbeat;
|
this.lastPeekedCell = lastPeekedCell;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -46,11 +46,11 @@ import org.apache.hadoop.hbase.filter.Filter;
|
||||||
import org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope;
|
import org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope;
|
||||||
import org.apache.hadoop.hbase.regionserver.ScannerContext.NextState;
|
import org.apache.hadoop.hbase.regionserver.ScannerContext.NextState;
|
||||||
import org.apache.hadoop.hbase.regionserver.handler.ParallelSeekHandler;
|
import org.apache.hadoop.hbase.regionserver.handler.ParallelSeekHandler;
|
||||||
import org.apache.hadoop.hbase.util.Bytes;
|
|
||||||
import org.apache.hadoop.hbase.regionserver.querymatcher.CompactionScanQueryMatcher;
|
import org.apache.hadoop.hbase.regionserver.querymatcher.CompactionScanQueryMatcher;
|
||||||
import org.apache.hadoop.hbase.regionserver.querymatcher.LegacyScanQueryMatcher;
|
import org.apache.hadoop.hbase.regionserver.querymatcher.LegacyScanQueryMatcher;
|
||||||
import org.apache.hadoop.hbase.regionserver.querymatcher.ScanQueryMatcher;
|
import org.apache.hadoop.hbase.regionserver.querymatcher.ScanQueryMatcher;
|
||||||
import org.apache.hadoop.hbase.regionserver.querymatcher.UserScanQueryMatcher;
|
import org.apache.hadoop.hbase.regionserver.querymatcher.UserScanQueryMatcher;
|
||||||
|
import org.apache.hadoop.hbase.util.Bytes;
|
||||||
import org.apache.hadoop.hbase.util.CollectionUtils;
|
import org.apache.hadoop.hbase.util.CollectionUtils;
|
||||||
import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
|
import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
|
||||||
|
|
||||||
|
@ -540,7 +540,6 @@ public class StoreScanner extends NonReversedNonLazyKeyValueScanner
|
||||||
if ((kvsScanned % cellsPerHeartbeatCheck == 0)) {
|
if ((kvsScanned % cellsPerHeartbeatCheck == 0)) {
|
||||||
scannerContext.updateTimeProgress();
|
scannerContext.updateTimeProgress();
|
||||||
if (scannerContext.checkTimeLimit(LimitScope.BETWEEN_CELLS)) {
|
if (scannerContext.checkTimeLimit(LimitScope.BETWEEN_CELLS)) {
|
||||||
scannerContext.setPeekedCellInHeartbeat(prevCell);
|
|
||||||
return scannerContext.setScannerState(NextState.TIME_LIMIT_REACHED).hasMoreValues();
|
return scannerContext.setScannerState(NextState.TIME_LIMIT_REACHED).hasMoreValues();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -548,6 +547,7 @@ public class StoreScanner extends NonReversedNonLazyKeyValueScanner
|
||||||
if (prevCell != cell) ++kvsScanned; // Do object compare - we set prevKV from the same heap.
|
if (prevCell != cell) ++kvsScanned; // Do object compare - we set prevKV from the same heap.
|
||||||
checkScanOrder(prevCell, cell, comparator);
|
checkScanOrder(prevCell, cell, comparator);
|
||||||
prevCell = cell;
|
prevCell = cell;
|
||||||
|
scannerContext.setLastPeekedCell(cell);
|
||||||
topChanged = false;
|
topChanged = false;
|
||||||
ScanQueryMatcher.MatchCode qcode = matcher.match(cell);
|
ScanQueryMatcher.MatchCode qcode = matcher.match(cell);
|
||||||
switch (qcode) {
|
switch (qcode) {
|
||||||
|
|
Loading…
Reference in New Issue