Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/querymatcher/ExplicitColumnTracker.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/querymatcher/ExplicitColumnTracker.java
- index b4825f0..9ec6f58 100644
- --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/querymatcher/ExplicitColumnTracker.java
- +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/querymatcher/ExplicitColumnTracker.java
- @@ -52,6 +52,7 @@ public class ExplicitColumnTracker implements ColumnTracker {
- private final int maxVersions;
- private final int minVersions;
- + private int slack;
- /**
- * Contains the list of columns that the ExplicitColumnTracker is tracking. Each ColumnCount
- @@ -74,9 +75,10 @@ public class ExplicitColumnTracker implements ColumnTracker {
- * @param oldestUnexpiredTS the oldest timestamp we are interested in, based on TTL
- */
- public ExplicitColumnTracker(NavigableSet<byte[]> columns, int minVersions, int maxVersions,
- - long oldestUnexpiredTS) {
- + int slack, long oldestUnexpiredTS) {
- this.maxVersions = maxVersions;
- this.minVersions = minVersions;
- + this.slack = slack;
- this.oldestStamp = oldestUnexpiredTS;
- this.columns = new ColumnCount[columns.size()];
- int i = 0;
- @@ -85,6 +87,12 @@ public class ExplicitColumnTracker implements ColumnTracker {
- }
- reset();
- }
- + public void retract() {
- + if (slack > 0) {
- + slack--;
- + this.column.decrement();
- + }
- + }
- /**
- * Done when there are no more columns to match against.
- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/querymatcher/ScanWildcardColumnTracker.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/querymatcher/ScanWildcardColumnTracker.java
- index a73cc0b..c62bdc5 100644
- --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/querymatcher/ScanWildcardColumnTracker.java
- +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/querymatcher/ScanWildcardColumnTracker.java
- @@ -38,6 +38,7 @@ public class ScanWildcardColumnTracker implements ColumnTracker {
- private int currentCount = 0;
- private int maxVersions;
- private int minVersions;
- + private int slack = 0;
- /*
- * Keeps track of the latest timestamp and type included for current column. Used to eliminate
- * duplicates.
- @@ -54,9 +55,19 @@ public class ScanWildcardColumnTracker implements ColumnTracker {
- * @param oldestUnexpiredTS oldest timestamp that has not expired according to the TTL.
- */
- public ScanWildcardColumnTracker(int minVersion, int maxVersion, long oldestUnexpiredTS) {
- + this(minVersion, maxVersion, 0, oldestUnexpiredTS);
- + }
- + public ScanWildcardColumnTracker(int minVersion, int maxVersion, int slack, long oldestUnexpiredTS) {
- this.maxVersions = maxVersion;
- this.minVersions = minVersion;
- this.oldestStamp = oldestUnexpiredTS;
- + this.slack = slack;
- + }
- + public void retract() {
- + if (slack > 0) {
- + slack--;
- + currentCount--;
- + }
- }
- /**
- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/querymatcher/UserScanQueryMatcher.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/querymatcher/UserScanQueryMatcher.java
- index 407f3fc..b941668 100644
- --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/querymatcher/UserScanQueryMatcher.java
- +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/querymatcher/UserScanQueryMatcher.java
- @@ -196,20 +236,22 @@ public abstract class UserScanQueryMatcher extends ScanQueryMatcher {
- RegionCoprocessorHost regionCoprocessorHost) throws IOException {
- int maxVersions = scan.isRaw() ? scan.getMaxVersions()
- : Math.min(scan.getMaxVersions(), scanInfo.getMaxVersions());
- + int slack = scan.isRaw() ? 0 :
- + Math.max(scan.getMaxVersions(), scanInfo.getMaxVersions())-maxVersions;
- boolean hasNullColumn;
- ColumnTracker columnTracker;
- if (columns == null || columns.isEmpty()) {
- // there is always a null column in the wildcard column query.
- hasNullColumn = true;
- // use a specialized scan for wildcard column tracker.
- - columnTracker = new ScanWildcardColumnTracker(scanInfo.getMinVersions(), maxVersions,
- + columnTracker = new ScanWildcardColumnTracker(scanInfo.getMinVersions(), maxVersions, slack,
- oldestUnexpiredTS);
- } else {
- // We can share the ExplicitColumnTracker, diff is we reset
- // between rows, not between storefiles.
- // whether there is null column in the explicit column query
- hasNullColumn = columns.first().length == 0;
- - columnTracker = new ExplicitColumnTracker(columns, scanInfo.getMinVersions(), maxVersions,
- + columnTracker = new ExplicitColumnTracker(columns, scanInfo.getMinVersions(), maxVersions, slack,
- oldestUnexpiredTS);
- }
- if (scan.isRaw()) {
- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/querymatcher/ColumnTracker.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/querymatcher/ColumnTracker.java
- index 7a2a1e2..b060bbf 100644
- --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/querymatcher/ColumnTracker.java
- +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/querymatcher/ColumnTracker.java
- @@ -126,4 +126,5 @@ public interface ColumnTracker extends ShipperListener {
- * @return <code>true</code> to early out based on timestamp.
- */
- boolean isDone(long timestamp);
- + void retract();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement