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/07 22:08:03 UTC

[incubator-pinot] branch master updated: In TimeUtils.timeUnitFromString(), return null if input is null or empty (#4088)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new e115bc9  In TimeUtils.timeUnitFromString(), return null if input is null or empty (#4088)
e115bc9 is described below

commit e115bc9f34f78fdd2d4e519273fbd82a3e1c35bd
Author: Xiaotian (Jackie) Jiang <17...@users.noreply.github.com>
AuthorDate: Sun Apr 7 15:07:59 2019 -0700

    In TimeUtils.timeUnitFromString(), return null if input is null or empty (#4088)
    
    For backward compatible
---
 .../common/config/SegmentsValidationAndRetentionConfig.java   |  2 +-
 .../java/org/apache/pinot/common/utils/time/TimeUtils.java    | 11 +++++++++--
 .../test/java/org/apache/pinot/common/utils/UtilsTest.java    | 10 ++++++++++
 .../apache/pinot/core/segment/index/SegmentMetadataImpl.java  |  1 +
 4 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/pinot-common/src/main/java/org/apache/pinot/common/config/SegmentsValidationAndRetentionConfig.java b/pinot-common/src/main/java/org/apache/pinot/common/config/SegmentsValidationAndRetentionConfig.java
index 9d244c6..e9eeef0 100644
--- a/pinot-common/src/main/java/org/apache/pinot/common/config/SegmentsValidationAndRetentionConfig.java
+++ b/pinot-common/src/main/java/org/apache/pinot/common/config/SegmentsValidationAndRetentionConfig.java
@@ -93,7 +93,7 @@ public class SegmentsValidationAndRetentionConfig {
   }
 
   public void setTimeType(String timeType) {
-    _timeType = timeType != null ? TimeUtils.timeUnitFromString(timeType) : null;
+    _timeType = TimeUtils.timeUnitFromString(timeType);
   }
 
   public String getRetentionTimeUnit() {
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 6a89292..f693d65 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
@@ -21,6 +21,7 @@ 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;
 import org.joda.time.DateTimeZone;
 import org.joda.time.Duration;
@@ -47,7 +48,8 @@ public class TimeUtils {
   private static final long VALID_MAX_TIME_MILLIS = new DateTime(2071, 1, 1, 0, 0, 0, 0, DateTimeZone.UTC).getMillis();
 
   /**
-   * Converts a time unit string into {@link TimeUnit}, ignoring case.
+   * 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:
    * <ul>
    *   <li>"daysSinceEpoch" -> DAYS</li>
@@ -59,7 +61,12 @@ public class TimeUtils {
    * @param timeUnitString The time unit string to convert, e.g. "DAYS" or "SECONDS"
    * @return The corresponding {@link TimeUnit}
    */
-  public static TimeUnit timeUnitFromString(String timeUnitString) {
+  @Nullable
+  public static TimeUnit timeUnitFromString(@Nullable String timeUnitString) {
+    // NOTE: for backward-compatibility, return null if time unit string is null or empty
+    if (timeUnitString == null || timeUnitString.isEmpty()) {
+      return null;
+    }
     String upperCaseTimeUnitString = timeUnitString.toUpperCase();
     TimeUnit timeUnit = TIME_UNIT_MAP.get(upperCaseTimeUnitString);
     if (timeUnit != null) {
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 8b4ce21..10b4cff 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
@@ -25,6 +25,8 @@ import org.testng.Assert;
 import org.testng.annotations.Test;
 
 import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNull;
+import static org.testng.Assert.fail;
 
 
 /**
@@ -49,6 +51,14 @@ public class UtilsTest {
     assertEquals(TimeUtils.timeUnitFromString("HOURSSINCEEPOCH"), TimeUnit.HOURS);
     assertEquals(TimeUtils.timeUnitFromString("MinutesSinceEpoch"), TimeUnit.MINUTES);
     assertEquals(TimeUtils.timeUnitFromString("SeCoNdSsInCeEpOcH"), TimeUnit.SECONDS);
+    assertNull(TimeUtils.timeUnitFromString(null));
+    assertNull(TimeUtils.timeUnitFromString(""));
+    try {
+      TimeUtils.timeUnitFromString("unknown");
+      fail();
+    } catch (Exception e) {
+      // Expected
+    }
   }
 
   @Test
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/segment/index/SegmentMetadataImpl.java b/pinot-core/src/main/java/org/apache/pinot/core/segment/index/SegmentMetadataImpl.java
index 71e39b7..d731e2f 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/segment/index/SegmentMetadataImpl.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/segment/index/SegmentMetadataImpl.java
@@ -180,6 +180,7 @@ public class SegmentMetadataImpl implements SegmentMetadata {
         .containsKey(SEGMENT_END_TIME) && segmentMetadataPropertiesConfiguration.containsKey(TIME_UNIT)) {
       try {
         _timeUnit = TimeUtils.timeUnitFromString(segmentMetadataPropertiesConfiguration.getString(TIME_UNIT));
+        assert _timeUnit != null;
         _timeGranularity = new Duration(_timeUnit.toMillis(1));
         String startTimeString = segmentMetadataPropertiesConfiguration.getString(SEGMENT_START_TIME);
         String endTimeString = segmentMetadataPropertiesConfiguration.getString(SEGMENT_END_TIME);


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