1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.hadoop.hbase.regionserver.querymatcher;
19
20 import java.io.IOException;
21
22 import org.apache.hadoop.hbase.Cell;
23 import org.apache.hadoop.hbase.HConstants;
24 import org.apache.hadoop.hbase.KeepDeletedCells;
25 import org.apache.hadoop.hbase.classification.InterfaceAudience;
26 import org.apache.hadoop.hbase.filter.Filter;
27 import org.apache.hadoop.hbase.regionserver.DeleteTracker;
28 import org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost;
29 import org.apache.hadoop.hbase.regionserver.ScanInfo;
30 import org.apache.hadoop.hbase.regionserver.ScanType;
31
32
33
34
35 @InterfaceAudience.Private
36 public abstract class CompactionScanQueryMatcher extends ScanQueryMatcher {
37
38
39 protected final long maxReadPointToTrackVersions;
40
41
42 protected final DeleteTracker deletes;
43
44
45 protected final KeepDeletedCells keepDeletedCells;
46
47 protected CompactionScanQueryMatcher(ScanInfo scanInfo, DeleteTracker deletes,
48 long readPointToUse, long oldestUnexpiredTS, long now) {
49 super(createStartKeyFromRow(HConstants.EMPTY_START_ROW, scanInfo), scanInfo,
50 new ScanWildcardColumnTracker(scanInfo.getMinVersions(), scanInfo.getMaxVersions(),
51 oldestUnexpiredTS),
52 oldestUnexpiredTS, now);
53 this.maxReadPointToTrackVersions = readPointToUse;
54 this.deletes = deletes;
55 this.keepDeletedCells = scanInfo.getKeepDeletedCells();
56 }
57
58 @Override
59 public boolean hasNullColumnInQuery() {
60 return true;
61 }
62
63 @Override
64 public boolean isUserScan() {
65 return false;
66 }
67
68 @Override
69 public boolean moreRowsMayExistAfter(Cell cell) {
70 return true;
71 }
72
73 @Override
74 public Filter getFilter() {
75
76 return null;
77 }
78
79 @Override
80 public Cell getNextKeyHint(Cell cell) throws IOException {
81
82 return null;
83 }
84
85 @Override
86 protected void reset() {
87 deletes.reset();
88 }
89
90 protected final void trackDelete(Cell cell) {
91
92
93
94
95
96 if (keepDeletedCells == KeepDeletedCells.FALSE
97 || (keepDeletedCells == KeepDeletedCells.TTL && cell.getTimestamp() < oldestUnexpiredTS)) {
98 deletes.add(cell);
99 }
100 }
101
102 public static CompactionScanQueryMatcher create(ScanInfo scanInfo, ScanType scanType,
103 long readPointToUse, long earliestPutTs, long oldestUnexpiredTS, long now,
104 byte[] dropDeletesFromRow, byte[] dropDeletesToRow,
105 RegionCoprocessorHost regionCoprocessorHost) throws IOException {
106 DeleteTracker deleteTracker = instantiateDeleteTracker(regionCoprocessorHost);
107 if (dropDeletesFromRow == null) {
108 if (scanType == ScanType.COMPACT_RETAIN_DELETES) {
109 return new MinorCompactionScanQueryMatcher(scanInfo, deleteTracker, readPointToUse,
110 oldestUnexpiredTS, now);
111 } else {
112 return new MajorCompactionScanQueryMatcher(scanInfo, deleteTracker, readPointToUse,
113 earliestPutTs, oldestUnexpiredTS, now);
114 }
115 } else {
116 return new StripeCompactionScanQueryMatcher(scanInfo, deleteTracker, readPointToUse,
117 earliestPutTs, oldestUnexpiredTS, now, dropDeletesFromRow, dropDeletesToRow);
118 }
119 }
120 }