You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by ja...@apache.org on 2019/04/09 19:45:54 UTC

[incubator-pinot] branch time_support created (now a3a5fdf)

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

jackie pushed a change to branch time_support
in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git.


      at a3a5fdf  Add support for <millis/milliseonds/micros/microseconds/nanos/nanoseconds>SinceEpcoh time unit string

This branch includes the following new commits:

     new a3a5fdf  Add support for <millis/milliseonds/micros/microseconds/nanos/nanoseconds>SinceEpcoh time unit string

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org


[incubator-pinot] 01/01: Add support for SinceEpcoh time unit string

Posted by ja...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jackie pushed a commit to branch time_support
in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git

commit a3a5fdf56663ac0bf5b8632b8b4db1afaa665ea6
Author: Jackie (Xiaotian) Jiang <xa...@linkedin.com>
AuthorDate: Tue Apr 9 12:44:45 2019 -0700

    Add support for <millis/milliseonds/micros/microseconds/nanos/nanoseconds>SinceEpcoh time unit string
---
 .../apache/pinot/common/utils/time/TimeUtils.java  | 64 +++++++++++++---------
 .../org/apache/pinot/common/utils/UtilsTest.java   | 21 +++++--
 2 files changed, 55 insertions(+), 30 deletions(-)

diff --git a/pinot-common/src/main/java/org/apache/pinot/common/utils/time/TimeUtils.java b/pinot-common/src/main/java/org/apache/pinot/common/utils/time/TimeUtils.java
index f693d65..fe88253 100644
--- a/pinot-common/src/main/java/org/apache/pinot/common/utils/time/TimeUtils.java
+++ b/pinot-common/src/main/java/org/apache/pinot/common/utils/time/TimeUtils.java
@@ -18,8 +18,6 @@
  */
 package org.apache.pinot.common.utils.time;
 
-import java.util.HashMap;
-import java.util.Map;
 import java.util.concurrent.TimeUnit;
 import javax.annotation.Nullable;
 import org.joda.time.DateTime;
@@ -31,18 +29,23 @@ import org.joda.time.format.PeriodFormatterBuilder;
 
 
 public class TimeUtils {
+  private static final String UPPER_CASE_DAYS = "DAYS";
   private static final String UPPER_CASE_DAYS_SINCE_EPOCH = "DAYSSINCEEPOCH";
+  private static final String UPPER_CASE_HOURS = "HOURS";
   private static final String UPPER_CASE_HOURS_SINCE_EPOCH = "HOURSSINCEEPOCH";
+  private static final String UPPER_CASE_MINUTES = "MINUTES";
   private static final String UPPER_CASE_MINUTES_SINCE_EPOCH = "MINUTESSINCEEPOCH";
+  private static final String UPPER_CASE_SECONDS = "SECONDS";
   private static final String UPPER_CASE_SECONDS_SINCE_EPOCH = "SECONDSSINCEEPOCH";
-
-  private static final Map<String, TimeUnit> TIME_UNIT_MAP = new HashMap<>();
-
-  static {
-    for (TimeUnit timeUnit : TimeUnit.values()) {
-      TIME_UNIT_MAP.put(timeUnit.name(), timeUnit);
-    }
-  }
+  private static final String UPPER_CASE_MILLISECONDS = "MILLISECONDS";
+  private static final String UPPER_CASE_MILLIS_SINCE_EPOCH = "MILLISSINCEEPOCH";
+  private static final String UPPER_CASE_MILLISECONDS_SINCE_EPOCH = "MILLISECONDSSINCEEPOCH";
+  private static final String UPPER_CASE_MICROSECONDS = "MICROSECONDS";
+  private static final String UPPER_CASE_MICROS_SINCE_EPOCH = "MICROSSINCEEPOCH";
+  private static final String UPPER_CASE_MICROSECONDS_SINCE_EPOCH = "MICROSECONDSSINCEEPOCH";
+  private static final String UPPER_CASE_NANOSECONDS = "NANOSECONDS";
+  private static final String UPPER_CASE_NANOS_SINCE_EPOCH = "NANOSSINCEEPOCH";
+  private static final String UPPER_CASE_NANOSECONDS_SINCE_EPOCH = "NANOSECONDSSINCEEPOCH";
 
   private static final long VALID_MIN_TIME_MILLIS = new DateTime(1971, 1, 1, 0, 0, 0, 0, DateTimeZone.UTC).getMillis();
   private static final long VALID_MAX_TIME_MILLIS = new DateTime(2071, 1, 1, 0, 0, 0, 0, DateTimeZone.UTC).getMillis();
@@ -50,12 +53,15 @@ public class TimeUtils {
   /**
    * Converts a time unit string into {@link TimeUnit}, ignoring case. For {@code null} or empty time unit string,
    * returns {@code null}.
-   * <p>Supports the following legacy time unit strings:
+   * <p>Besides the standard time unit, also support the following time unit strings:
    * <ul>
    *   <li>"daysSinceEpoch" -> DAYS</li>
    *   <li>"hoursSinceEpoch" -> HOURS</li>
    *   <li>"minutesSinceEpoch" -> MINUTES</li>
    *   <li>"secondsSinceEpoch" -> SECONDS</li>
+   *   <li>"millisSinceEpoch"/"millisecondsSinceEpoch" -> MILLISECONDS</li>
+   *   <li>"microsSinceEpoch"/"microsecondsSinceEpoch" -> MICROSECONDS</li>
+   *   <li>"nanosSinceEpoch"/"nanosecondsSinceEpoch" -> NANOSECONDS</li>
    * </ul>
    *
    * @param timeUnitString The time unit string to convert, e.g. "DAYS" or "SECONDS"
@@ -67,39 +73,46 @@ public class TimeUtils {
     if (timeUnitString == null || timeUnitString.isEmpty()) {
       return null;
     }
-    String upperCaseTimeUnitString = timeUnitString.toUpperCase();
-    TimeUnit timeUnit = TIME_UNIT_MAP.get(upperCaseTimeUnitString);
-    if (timeUnit != null) {
-      return timeUnit;
-    }
-    switch (upperCaseTimeUnitString) {
+    switch (timeUnitString.toUpperCase()) {
+      case UPPER_CASE_DAYS:
       case UPPER_CASE_DAYS_SINCE_EPOCH:
         return TimeUnit.DAYS;
+      case UPPER_CASE_HOURS:
       case UPPER_CASE_HOURS_SINCE_EPOCH:
         return TimeUnit.HOURS;
+      case UPPER_CASE_MINUTES:
       case UPPER_CASE_MINUTES_SINCE_EPOCH:
         return TimeUnit.MINUTES;
+      case UPPER_CASE_SECONDS:
       case UPPER_CASE_SECONDS_SINCE_EPOCH:
         return TimeUnit.SECONDS;
+      case UPPER_CASE_MILLISECONDS:
+      case UPPER_CASE_MILLIS_SINCE_EPOCH:
+      case UPPER_CASE_MILLISECONDS_SINCE_EPOCH:
+        return TimeUnit.MILLISECONDS;
+      case UPPER_CASE_MICROSECONDS:
+      case UPPER_CASE_MICROS_SINCE_EPOCH:
+      case UPPER_CASE_MICROSECONDS_SINCE_EPOCH:
+        return TimeUnit.MICROSECONDS;
+      case UPPER_CASE_NANOSECONDS:
+      case UPPER_CASE_NANOS_SINCE_EPOCH:
+      case UPPER_CASE_NANOSECONDS_SINCE_EPOCH:
+        return TimeUnit.NANOSECONDS;
       default:
         throw new IllegalArgumentException("Unsupported time unit: " + timeUnitString);
     }
   }
 
   /**
-   * Given a time value, returns true if the value is between a valid range, false otherwise
-   * The current valid range used is between beginning of 1971 and beginning of 2071.
-   *
-   * @param timeValueInMillis
-   * @return True if time value in valid range, false otherwise.
+   * Given a time value, returns true if the value is between a valid range, false otherwise.
+   * <p>The current valid range used is between beginning of 1971 and beginning of 2071.
    */
   public static boolean timeValueInValidRange(long timeValueInMillis) {
     return (VALID_MIN_TIME_MILLIS <= timeValueInMillis && timeValueInMillis <= VALID_MAX_TIME_MILLIS);
   }
 
   /**
-   * Return the minimum valid time in milliseconds.
-   * @return
+   * Returns the minimum valid time in milliseconds.
    */
   public static long getValidMinTimeMillis() {
     return VALID_MIN_TIME_MILLIS;
@@ -107,7 +120,6 @@ public class TimeUtils {
 
   /**
    * Returns the maximum valid time in milliseconds.
-   * @return
    */
   public static long getValidMaxTimeMillis() {
     return VALID_MAX_TIME_MILLIS;
@@ -123,7 +135,7 @@ public class TimeUtils {
    * minutes (m) and seconds (s).
    *
    * @param timeStr string representing the duration
-   * @return the corresponding time coverted to milliseconds
+   * @return the corresponding time converted to milliseconds
    * @throws IllegalArgumentException if the string does not conform to the expected format
    */
   public static Long convertPeriodToMillis(String timeStr) {
diff --git a/pinot-common/src/test/java/org/apache/pinot/common/utils/UtilsTest.java b/pinot-common/src/test/java/org/apache/pinot/common/utils/UtilsTest.java
index 10b4cff..a9a02a2 100644
--- a/pinot-common/src/test/java/org/apache/pinot/common/utils/UtilsTest.java
+++ b/pinot-common/src/test/java/org/apache/pinot/common/utils/UtilsTest.java
@@ -43,16 +43,29 @@ public class UtilsTest {
 
   @Test
   public void testTimeUtils() {
-    assertEquals(TimeUtils.timeUnitFromString("days"), TimeUnit.DAYS);
-    assertEquals(TimeUtils.timeUnitFromString("HOURS"), TimeUnit.HOURS);
-    assertEquals(TimeUtils.timeUnitFromString("Minutes"), TimeUnit.MINUTES);
-    assertEquals(TimeUtils.timeUnitFromString("SeCoNdS"), TimeUnit.SECONDS);
+    // Test all time units
+    for (TimeUnit timeUnit : TimeUnit.values()) {
+      assertEquals(TimeUtils.timeUnitFromString(timeUnit.name()), timeUnit);
+      assertEquals(TimeUtils.timeUnitFromString(timeUnit.name().toLowerCase()), timeUnit);
+    }
+
+    // Test other time unit string
     assertEquals(TimeUtils.timeUnitFromString("daysSinceEpoch"), TimeUnit.DAYS);
     assertEquals(TimeUtils.timeUnitFromString("HOURSSINCEEPOCH"), TimeUnit.HOURS);
     assertEquals(TimeUtils.timeUnitFromString("MinutesSinceEpoch"), TimeUnit.MINUTES);
     assertEquals(TimeUtils.timeUnitFromString("SeCoNdSsInCeEpOcH"), TimeUnit.SECONDS);
+    assertEquals(TimeUtils.timeUnitFromString("millissinceepoch"), TimeUnit.MILLISECONDS);
+    assertEquals(TimeUtils.timeUnitFromString("MILLISECONDSSINCEEPOCH"), TimeUnit.MILLISECONDS);
+    assertEquals(TimeUtils.timeUnitFromString("microssinceepoch"), TimeUnit.MICROSECONDS);
+    assertEquals(TimeUtils.timeUnitFromString("MICROSECONDSSINCEEPOCH"), TimeUnit.MICROSECONDS);
+    assertEquals(TimeUtils.timeUnitFromString("nanossinceepoch"), TimeUnit.NANOSECONDS);
+    assertEquals(TimeUtils.timeUnitFromString("NANOSECONDSSINCEEPOCH"), TimeUnit.NANOSECONDS);
+
+    // Test null and empty time unit string
     assertNull(TimeUtils.timeUnitFromString(null));
     assertNull(TimeUtils.timeUnitFromString(""));
+
+    // Test invalid time unit string
     try {
       TimeUtils.timeUnitFromString("unknown");
       fail();


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org