You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by op...@apache.org on 2019/08/17 01:42:22 UTC

[hbase] branch master updated: HBASE-22841 Add more factory functions to TimeRange

This is an automated email from the ASF dual-hosted git repository.

openinx pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/master by this push:
     new 43a0ec8  HBASE-22841 Add more factory functions to TimeRange
43a0ec8 is described below

commit 43a0ec80fa1157c5b5449b1da6dd4c19e44c5383
Author: Huon Wilson <Hu...@data61.csiro.au>
AuthorDate: Tue Aug 13 15:03:56 2019 +1000

    HBASE-22841 Add more factory functions to TimeRange
    
    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 <op...@gmail.com>
---
 .../java/org/apache/hadoop/hbase/io/TimeRange.java | 39 +++++++++++++++++++---
 .../hadoop/hbase/client/TestFromClientSide.java    | 36 ++++++++++++++++++++
 2 files changed, 70 insertions(+), 5 deletions(-)

diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/io/TimeRange.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/io/TimeRange.java
index c44ab69..fe229b6 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/io/TimeRange.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/io/TimeRange.java
@@ -26,12 +26,13 @@ import org.apache.yetus.audience.InterfaceAudience;
  * {@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 {
@@ -51,6 +52,34 @@ public class TimeRange {
     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;
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java
index 36d31b4..ce07dee 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java
@@ -4867,11 +4867,47 @@ public class TestFromClientSide {
       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)