HBASE-16840 Reuse cell's timestamp and type in ScanQueryMatcher
Signed-off-by: Yu Li <liyu@apache.org>
This commit is contained in:
parent
a67481209f
commit
c4132bbf30
|
@ -173,7 +173,7 @@ public class LegacyScanQueryMatcher extends ScanQueryMatcher {
|
||||||
long mvccVersion = cell.getSequenceId();
|
long mvccVersion = cell.getSequenceId();
|
||||||
int qualifierOffset = cell.getQualifierOffset();
|
int qualifierOffset = cell.getQualifierOffset();
|
||||||
int qualifierLength = cell.getQualifierLength();
|
int qualifierLength = cell.getQualifierLength();
|
||||||
if (CellUtil.isDelete(cell)) {
|
if (CellUtil.isDelete(typeByte)) {
|
||||||
if (keepDeletedCells == KeepDeletedCells.FALSE
|
if (keepDeletedCells == KeepDeletedCells.FALSE
|
||||||
|| (keepDeletedCells == KeepDeletedCells.TTL && timestamp < oldestUnexpiredTS)) {
|
|| (keepDeletedCells == KeepDeletedCells.TTL && timestamp < oldestUnexpiredTS)) {
|
||||||
// first ignore delete markers if the scanner can do so, and the
|
// first ignore delete markers if the scanner can do so, and the
|
||||||
|
|
|
@ -43,6 +43,7 @@ public class MajorCompactionScanQueryMatcher extends DropDeletesCompactionScanQu
|
||||||
}
|
}
|
||||||
long timestamp = cell.getTimestamp();
|
long timestamp = cell.getTimestamp();
|
||||||
long mvccVersion = cell.getSequenceId();
|
long mvccVersion = cell.getSequenceId();
|
||||||
|
byte typeByte = cell.getTypeByte();
|
||||||
|
|
||||||
// The delete logic is pretty complicated now.
|
// The delete logic is pretty complicated now.
|
||||||
// This is corroborated by the following:
|
// This is corroborated by the following:
|
||||||
|
@ -56,7 +57,7 @@ public class MajorCompactionScanQueryMatcher extends DropDeletesCompactionScanQu
|
||||||
// 7. Delete marker need to be version counted together with puts
|
// 7. Delete marker need to be version counted together with puts
|
||||||
// they affect
|
// they affect
|
||||||
//
|
//
|
||||||
if (CellUtil.isDelete(cell)) {
|
if (CellUtil.isDelete(typeByte)) {
|
||||||
if (mvccVersion > maxReadPointToTrackVersions) {
|
if (mvccVersion > maxReadPointToTrackVersions) {
|
||||||
// We can not drop this delete marker yet, and also we should not use this delete marker to
|
// We can not drop this delete marker yet, and also we should not use this delete marker to
|
||||||
// mask any cell yet.
|
// mask any cell yet.
|
||||||
|
@ -75,7 +76,7 @@ public class MajorCompactionScanQueryMatcher extends DropDeletesCompactionScanQu
|
||||||
}
|
}
|
||||||
// Skip checking column since we do not remove column during compaction.
|
// Skip checking column since we do not remove column during compaction.
|
||||||
return columns.checkVersions(cell.getQualifierArray(), cell.getQualifierOffset(),
|
return columns.checkVersions(cell.getQualifierArray(), cell.getQualifierOffset(),
|
||||||
cell.getQualifierLength(), timestamp, cell.getTypeByte(),
|
cell.getQualifierLength(), timestamp, typeByte,
|
||||||
mvccVersion > maxReadPointToTrackVersions);
|
mvccVersion > maxReadPointToTrackVersions);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,7 +42,8 @@ public class MinorCompactionScanQueryMatcher extends CompactionScanQueryMatcher
|
||||||
return returnCode;
|
return returnCode;
|
||||||
}
|
}
|
||||||
long mvccVersion = cell.getSequenceId();
|
long mvccVersion = cell.getSequenceId();
|
||||||
if (CellUtil.isDelete(cell)) {
|
byte typeByte = cell.getTypeByte();
|
||||||
|
if (CellUtil.isDelete(typeByte)) {
|
||||||
if (mvccVersion > maxReadPointToTrackVersions) {
|
if (mvccVersion > maxReadPointToTrackVersions) {
|
||||||
// we should not use this delete marker to mask any cell yet.
|
// we should not use this delete marker to mask any cell yet.
|
||||||
return MatchCode.INCLUDE;
|
return MatchCode.INCLUDE;
|
||||||
|
@ -56,7 +57,7 @@ public class MinorCompactionScanQueryMatcher extends CompactionScanQueryMatcher
|
||||||
}
|
}
|
||||||
// Skip checking column since we do not remove column during compaction.
|
// Skip checking column since we do not remove column during compaction.
|
||||||
return columns.checkVersions(cell.getQualifierArray(), cell.getQualifierOffset(),
|
return columns.checkVersions(cell.getQualifierArray(), cell.getQualifierOffset(),
|
||||||
cell.getQualifierLength(), cell.getTimestamp(), cell.getTypeByte(),
|
cell.getQualifierLength(), cell.getTimestamp(), typeByte,
|
||||||
mvccVersion > maxReadPointToTrackVersions);
|
mvccVersion > maxReadPointToTrackVersions);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,7 +60,8 @@ public class NormalUserScanQueryMatcher extends UserScanQueryMatcher {
|
||||||
return returnCode;
|
return returnCode;
|
||||||
}
|
}
|
||||||
long timestamp = cell.getTimestamp();
|
long timestamp = cell.getTimestamp();
|
||||||
if (CellUtil.isDelete(cell)) {
|
byte typeByte = cell.getTypeByte();
|
||||||
|
if (CellUtil.isDelete(typeByte)) {
|
||||||
boolean includeDeleteMarker = seePastDeleteMarkers ? tr.withinTimeRange(timestamp)
|
boolean includeDeleteMarker = seePastDeleteMarkers ? tr.withinTimeRange(timestamp)
|
||||||
: tr.withinOrAfterTimeRange(timestamp);
|
: tr.withinOrAfterTimeRange(timestamp);
|
||||||
if (includeDeleteMarker) {
|
if (includeDeleteMarker) {
|
||||||
|
@ -72,7 +73,7 @@ public class NormalUserScanQueryMatcher extends UserScanQueryMatcher {
|
||||||
if (returnCode != null) {
|
if (returnCode != null) {
|
||||||
return returnCode;
|
return returnCode;
|
||||||
}
|
}
|
||||||
return matchColumn(cell);
|
return matchColumn(cell, timestamp, typeByte);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -44,9 +44,11 @@ public class RawScanQueryMatcher extends UserScanQueryMatcher {
|
||||||
if (returnCode != null) {
|
if (returnCode != null) {
|
||||||
return returnCode;
|
return returnCode;
|
||||||
}
|
}
|
||||||
|
long timestamp = cell.getTimestamp();
|
||||||
|
byte typeByte = cell.getTypeByte();
|
||||||
// For a raw scan, we do not filter out any cells by delete marker, and delete marker is also
|
// For a raw scan, we do not filter out any cells by delete marker, and delete marker is also
|
||||||
// returned, so we do not need to track delete.
|
// returned, so we do not need to track delete.
|
||||||
return matchColumn(cell);
|
return matchColumn(cell, timestamp, typeByte);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -55,7 +55,8 @@ public class StripeCompactionScanQueryMatcher extends DropDeletesCompactionScanQ
|
||||||
return returnCode;
|
return returnCode;
|
||||||
}
|
}
|
||||||
long mvccVersion = cell.getSequenceId();
|
long mvccVersion = cell.getSequenceId();
|
||||||
if (CellUtil.isDelete(cell)) {
|
byte typeByte = cell.getTypeByte();
|
||||||
|
if (CellUtil.isDelete(typeByte)) {
|
||||||
if (mvccVersion > maxReadPointToTrackVersions) {
|
if (mvccVersion > maxReadPointToTrackVersions) {
|
||||||
return MatchCode.INCLUDE;
|
return MatchCode.INCLUDE;
|
||||||
}
|
}
|
||||||
|
@ -78,7 +79,7 @@ public class StripeCompactionScanQueryMatcher extends DropDeletesCompactionScanQ
|
||||||
}
|
}
|
||||||
// Skip checking column since we do not remove column during compaction.
|
// Skip checking column since we do not remove column during compaction.
|
||||||
return columns.checkVersions(cell.getQualifierArray(), cell.getQualifierOffset(),
|
return columns.checkVersions(cell.getQualifierArray(), cell.getQualifierOffset(),
|
||||||
cell.getQualifierLength(), cell.getTimestamp(), cell.getTypeByte(),
|
cell.getQualifierLength(), cell.getTimestamp(), typeByte,
|
||||||
mvccVersion > maxReadPointToTrackVersions);
|
mvccVersion > maxReadPointToTrackVersions);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -88,8 +88,8 @@ public abstract class UserScanQueryMatcher extends ScanQueryMatcher {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected final MatchCode matchColumn(Cell cell) throws IOException {
|
protected final MatchCode matchColumn(Cell cell, long timestamp, byte typeByte)
|
||||||
long timestamp = cell.getTimestamp();
|
throws IOException {
|
||||||
int tsCmp = tr.compare(timestamp);
|
int tsCmp = tr.compare(timestamp);
|
||||||
if (tsCmp > 0) {
|
if (tsCmp > 0) {
|
||||||
return MatchCode.SKIP;
|
return MatchCode.SKIP;
|
||||||
|
@ -100,7 +100,6 @@ public abstract class UserScanQueryMatcher extends ScanQueryMatcher {
|
||||||
return columns.getNextRowOrNextColumn(cell.getQualifierArray(), qualifierOffset,
|
return columns.getNextRowOrNextColumn(cell.getQualifierArray(), qualifierOffset,
|
||||||
qualifierLength);
|
qualifierLength);
|
||||||
}
|
}
|
||||||
byte typeByte = cell.getTypeByte();
|
|
||||||
// STEP 1: Check if the column is part of the requested columns
|
// STEP 1: Check if the column is part of the requested columns
|
||||||
MatchCode colChecker = columns.checkColumn(cell.getQualifierArray(), qualifierOffset,
|
MatchCode colChecker = columns.checkColumn(cell.getQualifierArray(), qualifierOffset,
|
||||||
qualifierLength, typeByte);
|
qualifierLength, typeByte);
|
||||||
|
|
Loading…
Reference in New Issue