Skip to content

Commit

Permalink
HBASE-22841 Add more factory functions to TimeRange
Browse files Browse the repository at this point in the history
These functions make it easier to possible to use
`org.apache.hadoop.hbase.client.Table.CheckAndMutateBuilder#timeRange`
with more interesting ranges, without being forced to use the
deprecated constructors.

Signed-off-by: huzheng <[email protected]>
  • Loading branch information
huonw authored and openinx committed Aug 17, 2019
1 parent 3eb602c commit 43a0ec8
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,13 @@
* {@link #INITIAL_MIN_TIMESTAMP} and {@link #INITIAL_MAX_TIMESTAMP} only. Gets freaked out if
* passed a timestamp that is < {@link #INITIAL_MIN_TIMESTAMP},
* <p>
* Evaluated according to minStamp &lt;= timestamp &lt; maxStamp
* or [minStamp,maxStamp) in interval notation.
* Evaluated according to minStamp &lt;= timestamp &lt; maxStamp or [minStamp,maxStamp) in interval
* notation.
* <p>
* Can be returned and read by clients. Should not be directly created by clients.
* Thus, all constructors are purposely @InterfaceAudience.Private.
*<p>Immutable. Thread-safe.
* Can be returned and read by clients. Should not be directly created by clients. Thus, all
* constructors are purposely @InterfaceAudience.Private.
* <p>
* Immutable. Thread-safe.
*/
@InterfaceAudience.Public
public class TimeRange {
Expand All @@ -51,6 +52,34 @@ public static TimeRange at(long ts) {
return new TimeRange(ts, ts + 1);
}

/**
* Represents the time interval [minStamp, Long.MAX_VALUE)
* @param minStamp the minimum timestamp value, inclusive
*/
public static TimeRange from(long minStamp) {
check(minStamp, INITIAL_MAX_TIMESTAMP);
return new TimeRange(minStamp, INITIAL_MAX_TIMESTAMP);
}

/**
* Represents the time interval [0, maxStamp)
* @param maxStamp the minimum timestamp value, exclusive
*/
public static TimeRange until(long maxStamp) {
check(INITIAL_MIN_TIMESTAMP, maxStamp);
return new TimeRange(INITIAL_MIN_TIMESTAMP, maxStamp);
}

/**
* Represents the time interval [minStamp, maxStamp)
* @param minStamp the minimum timestamp, inclusive
* @param maxStamp the maximum timestamp, exclusive
*/
public static TimeRange between(long minStamp, long maxStamp) {
check(minStamp, maxStamp);
return new TimeRange(minStamp, maxStamp);
}

private final long minStamp;
private final long maxStamp;
private final boolean allTime;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4866,12 +4866,48 @@ public void testCheckAndMutateWithTimeRange() throws IOException {
.thenPut(put);
assertFalse(ok);

ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)
.timeRange(TimeRange.from(ts + 10000))
.ifEquals(VALUE)
.thenPut(put);
assertFalse(ok);

ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)
.timeRange(TimeRange.between(ts + 10000, ts + 20000))
.ifEquals(VALUE)
.thenPut(put);
assertFalse(ok);

ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)
.timeRange(TimeRange.until(ts))
.ifEquals(VALUE)
.thenPut(put);
assertFalse(ok);

ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)
.timeRange(TimeRange.at(ts))
.ifEquals(VALUE)
.thenPut(put);
assertTrue(ok);

ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)
.timeRange(TimeRange.from(ts))
.ifEquals(VALUE)
.thenPut(put);
assertTrue(ok);

ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)
.timeRange(TimeRange.between(ts, ts + 20000))
.ifEquals(VALUE)
.thenPut(put);
assertTrue(ok);

ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)
.timeRange(TimeRange.until(ts + 10000))
.ifEquals(VALUE)
.thenPut(put);
assertTrue(ok);

RowMutations rm = new RowMutations(ROW)
.add((Mutation) put);
ok = table.checkAndMutate(ROW, FAMILY).qualifier(QUALIFIER)
Expand Down

0 comments on commit 43a0ec8

Please sign in to comment.