diff --git hbase-client/src/main/java/org/apache/hadoop/hbase/client/Get.java hbase-client/src/main/java/org/apache/hadoop/hbase/client/Get.java index c19a6a9..4dc656f 100644 --- hbase-client/src/main/java/org/apache/hadoop/hbase/client/Get.java +++ hbase-client/src/main/java/org/apache/hadoop/hbase/client/Get.java @@ -74,7 +74,6 @@ public class Get extends Query private boolean cacheBlocks = true; private int storeLimit = -1; private int storeOffset = 0; - private TimeRange tr = new TimeRange(); private boolean checkExistenceOnly = false; private boolean closestRowBefore = false; private Map> familyMap = @@ -203,9 +202,19 @@ public class Get extends Query * @throws IOException * @return this for invocation chaining */ + @Override public Get setTimeRange(long minStamp, long maxStamp) throws IOException { - tr = new TimeRange(minStamp, maxStamp); - return this; + return (Get) super.setTimeRange(minStamp, maxStamp); + } + + /** + * Get versions of columns only within the specified timestamp range, + * @param tr Input TimeRange + * @return this for invocation chaining + */ + @Override + public Get setTimeRange(TimeRange tr) { + return (Get) super.setTimeRange(tr); } /** @@ -216,7 +225,7 @@ public class Get extends Query public Get setTimeStamp(long timestamp) throws IOException { try { - tr = new TimeRange(timestamp, timestamp+1); + super.setTimeRange(timestamp, timestamp + 1); } catch(Exception e) { // This should never happen, unless integer overflow or something extremely wrong... LOG.error("TimeRange failed, likely caused by integer overflow. ", e); @@ -225,10 +234,16 @@ public class Get extends Query return this; } - @Override public Get setColumnFamilyTimeRange(byte[] cf, long minStamp, long maxStamp) { + @Override + public Get setColumnFamilyTimeRange(byte[] cf, long minStamp, long maxStamp) { return (Get) super.setColumnFamilyTimeRange(cf, minStamp, maxStamp); } + @Override + public Get setColumnFamilyTimeRange(byte[] cf, TimeRange tr) { + return (Get) super.setColumnFamilyTimeRange(cf, tr); + } + /** * Get all available versions. * @return this for invocation chaining @@ -345,14 +360,6 @@ public class Get extends Query } /** - * Method for retrieving the get's TimeRange - * @return timeRange - */ - public TimeRange getTimeRange() { - return this.tr; - } - - /** * Method for retrieving the keys in the familyMap * @return keys in the current familyMap */ diff --git hbase-client/src/main/java/org/apache/hadoop/hbase/client/Query.java hbase-client/src/main/java/org/apache/hadoop/hbase/client/Query.java index a287499..222eaff 100644 --- hbase-client/src/main/java/org/apache/hadoop/hbase/client/Query.java +++ hbase-client/src/main/java/org/apache/hadoop/hbase/client/Query.java @@ -17,6 +17,7 @@ */ package org.apache.hadoop.hbase.client; +import java.io.IOException; import java.util.Map; import com.google.common.collect.Maps; @@ -45,6 +46,7 @@ public abstract class Query extends OperationWithAttributes { protected Consistency consistency = Consistency.STRONG; protected Map colFamTimeRangeMap = Maps.newTreeMap(Bytes.BYTES_COMPARATOR); protected Boolean loadColumnFamiliesOnDemand = null; + protected TimeRange tr = new TimeRange(); /** * @return Filter */ @@ -65,6 +67,36 @@ public abstract class Query extends OperationWithAttributes { } /** + * @return TimeRange + */ + public TimeRange getTimeRange() { + return tr; + } + + /** + * Sets the TimeRange to be used by this Query + * @param tr TimeRange + * @return Query + */ + public Query setTimeRange(TimeRange tr) { + this.tr = tr; + return this; + } + + /** + * Sets the TimeRange to be used by this Query + * [minStamp, maxStamp). + * @param minStamp minimum timestamp value, inclusive + * @param maxStamp maximum timestamp value, exclusive + * @throws IOException + * @return this for invocation chaining + */ + public Query setTimeRange(long minStamp, long maxStamp) throws IOException { + tr = new TimeRange(minStamp, maxStamp); + return this; + } + + /** * Sets the authorizations to be used by this Query * @param authorizations */ @@ -227,12 +259,16 @@ public abstract class Query extends OperationWithAttributes { * @param maxStamp maximum timestamp value, exclusive * @return this */ - public Query setColumnFamilyTimeRange(byte[] cf, long minStamp, long maxStamp) { colFamTimeRangeMap.put(cf, new TimeRange(minStamp, maxStamp)); return this; } + public Query setColumnFamilyTimeRange(byte[] cf, TimeRange tr) { + colFamTimeRangeMap.put(cf, tr); + return this; + } + /** * @return A map of column families to time ranges */ diff --git hbase-client/src/main/java/org/apache/hadoop/hbase/client/Scan.java hbase-client/src/main/java/org/apache/hadoop/hbase/client/Scan.java index 9d659b8..81a8414 100644 --- hbase-client/src/main/java/org/apache/hadoop/hbase/client/Scan.java +++ hbase-client/src/main/java/org/apache/hadoop/hbase/client/Scan.java @@ -135,7 +135,6 @@ public class Scan extends Query { private long maxResultSize = -1; private boolean cacheBlocks = true; private boolean reversed = false; - private TimeRange tr = new TimeRange(); private Map> familyMap = new TreeMap>(Bytes.BYTES_COMPARATOR); private Boolean asyncPrefetch = null; @@ -325,7 +324,7 @@ public class Scan extends Query { } /** - * Get versions of columns only within the specified timestamp range, + * Set versions of columns only within the specified timestamp range, * [minStamp, maxStamp). Note, default maximum versions to return is 1. If * your time range spans more than one version and you want all versions * returned, up the number of versions beyond the default. @@ -335,9 +334,18 @@ public class Scan extends Query { * @see #setMaxVersions(int) * @return this */ + @Override public Scan setTimeRange(long minStamp, long maxStamp) throws IOException { - tr = new TimeRange(minStamp, maxStamp); - return this; + return (Scan) super.setTimeRange(minStamp, maxStamp); + } + + /** + * Set versions of columns only within the specified timestamp range, + * @param tr Input TimeRange + * @return this for invocation chaining + */ + public Scan setTimeRange(TimeRange tr) { + return (Scan) super.setTimeRange(tr); } /** @@ -353,7 +361,7 @@ public class Scan extends Query { public Scan setTimeStamp(long timestamp) throws IOException { try { - tr = new TimeRange(timestamp, timestamp+1); + super.setTimeRange(timestamp, timestamp + 1); } catch(Exception e) { // This should never happen, unless integer overflow or something extremely wrong... LOG.error("TimeRange failed, likely caused by integer overflow. ", e); @@ -362,10 +370,16 @@ public class Scan extends Query { return this; } - @Override public Scan setColumnFamilyTimeRange(byte[] cf, long minStamp, long maxStamp) { + @Override + public Scan setColumnFamilyTimeRange(byte[] cf, long minStamp, long maxStamp) { return (Scan) super.setColumnFamilyTimeRange(cf, minStamp, maxStamp); } + @Override + public Scan setColumnFamilyTimeRange(byte[] cf, TimeRange tr) { + return (Scan) super.setColumnFamilyTimeRange(cf, tr); + } + /** * Set the start row of the scan. *

@@ -666,13 +680,6 @@ public class Scan extends Query { } /** - * @return TimeRange - */ - public TimeRange getTimeRange() { - return this.tr; - } - - /** * @return RowFilter */ @Override diff --git hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java index c52d413..d6dc7e9 100644 --- hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java +++ hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java @@ -385,13 +385,12 @@ public final class ProtobufUtil { if (proto.getCfTimeRangeCount() > 0) { for (HBaseProtos.ColumnFamilyTimeRange cftr : proto.getCfTimeRangeList()) { TimeRange timeRange = protoToTimeRange(cftr.getTimeRange()); - get.setColumnFamilyTimeRange(cftr.getColumnFamily().toByteArray(), - timeRange.getMin(), timeRange.getMax()); + get.setColumnFamilyTimeRange(cftr.getColumnFamily().toByteArray(), timeRange); } } if (proto.hasTimeRange()) { TimeRange timeRange = protoToTimeRange(proto.getTimeRange()); - get.setTimeRange(timeRange.getMin(), timeRange.getMax()); + get.setTimeRange(timeRange); } if (proto.hasFilter()) { FilterProtos.Filter filter = proto.getFilter(); @@ -807,7 +806,7 @@ public final class ProtobufUtil { } if (proto.hasTimeRange()) { TimeRange timeRange = protoToTimeRange(proto.getTimeRange()); - get.setTimeRange(timeRange.getMin(), timeRange.getMax()); + get.setTimeRange(timeRange); } for (NameBytesPair attribute : proto.getAttributeList()) { get.setAttribute(attribute.getName(), attribute.getValue().toByteArray()); @@ -951,13 +950,12 @@ public final class ProtobufUtil { if (proto.getCfTimeRangeCount() > 0) { for (HBaseProtos.ColumnFamilyTimeRange cftr : proto.getCfTimeRangeList()) { TimeRange timeRange = protoToTimeRange(cftr.getTimeRange()); - scan.setColumnFamilyTimeRange(cftr.getColumnFamily().toByteArray(), - timeRange.getMin(), timeRange.getMax()); + scan.setColumnFamilyTimeRange(cftr.getColumnFamily().toByteArray(), timeRange); } } if (proto.hasTimeRange()) { TimeRange timeRange = protoToTimeRange(proto.getTimeRange()); - scan.setTimeRange(timeRange.getMin(), timeRange.getMax()); + scan.setTimeRange(timeRange); } if (proto.hasFilter()) { FilterProtos.Filter filter = proto.getFilter(); diff --git hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java index 4e75694..0f2cf1d 100644 --- hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java +++ hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java @@ -497,13 +497,12 @@ public final class ProtobufUtil { if (proto.getCfTimeRangeCount() > 0) { for (HBaseProtos.ColumnFamilyTimeRange cftr : proto.getCfTimeRangeList()) { TimeRange timeRange = protoToTimeRange(cftr.getTimeRange()); - get.setColumnFamilyTimeRange(cftr.getColumnFamily().toByteArray(), - timeRange.getMin(), timeRange.getMax()); + get.setColumnFamilyTimeRange(cftr.getColumnFamily().toByteArray(), timeRange); } } if (proto.hasTimeRange()) { TimeRange timeRange = protoToTimeRange(proto.getTimeRange()); - get.setTimeRange(timeRange.getMin(), timeRange.getMax()); + get.setTimeRange(timeRange); } if (proto.hasFilter()) { FilterProtos.Filter filter = proto.getFilter(); @@ -920,7 +919,7 @@ public final class ProtobufUtil { } if (proto.hasTimeRange()) { TimeRange timeRange = protoToTimeRange(proto.getTimeRange()); - get.setTimeRange(timeRange.getMin(), timeRange.getMax()); + get.setTimeRange(timeRange); } for (NameBytesPair attribute : proto.getAttributeList()) { get.setAttribute(attribute.getName(), attribute.getValue().toByteArray()); @@ -1064,13 +1063,12 @@ public final class ProtobufUtil { if (proto.getCfTimeRangeCount() > 0) { for (HBaseProtos.ColumnFamilyTimeRange cftr : proto.getCfTimeRangeList()) { TimeRange timeRange = protoToTimeRange(cftr.getTimeRange()); - scan.setColumnFamilyTimeRange(cftr.getColumnFamily().toByteArray(), - timeRange.getMin(), timeRange.getMax()); + scan.setColumnFamilyTimeRange(cftr.getColumnFamily().toByteArray(), timeRange); } } if (proto.hasTimeRange()) { TimeRange timeRange = protoToTimeRange(proto.getTimeRange()); - scan.setTimeRange(timeRange.getMin(), timeRange.getMax()); + scan.setTimeRange(timeRange); } if (proto.hasFilter()) { FilterProtos.Filter filter = proto.getFilter();