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 2021/10/07 23:18:10 UTC

[pinot] branch master updated: Fix SegmentGenerationWithTimeColumnTest (#7537)

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/pinot.git


The following commit(s) were added to refs/heads/master by this push:
     new 12b106b  Fix SegmentGenerationWithTimeColumnTest (#7537)
12b106b is described below

commit 12b106bb27013c3d845930e2c7a5c629b662f778
Author: Richard Startin <ri...@startree.ai>
AuthorDate: Fri Oct 8 00:17:51 2021 +0100

    Fix SegmentGenerationWithTimeColumnTest (#7537)
    
    This test would fail when timestamps were generated in the first or last day and the simple date mode was used. There isn't enough information to get a number of milliseconds in UTC. We don't know which timezone the simple date is in, but also don't know that there isn't a timezone in the format string either, so the second change ensures that we don't test within a day of the minimum or maximum allowed number of milliseconds. This has no functional impact, it only relates to interval [...]
    
    I added a couple of tests to fix the seed for degenerate cases.
---
 .../SegmentGenerationWithTimeColumnTest.java       | 30 ++++++++++++++++++----
 1 file changed, 25 insertions(+), 5 deletions(-)

diff --git a/pinot-segment-local/src/test/java/org/apache/pinot/segment/local/segment/index/creator/SegmentGenerationWithTimeColumnTest.java b/pinot-segment-local/src/test/java/org/apache/pinot/segment/local/segment/index/creator/SegmentGenerationWithTimeColumnTest.java
index 819fe0e..884b77e 100644
--- a/pinot-segment-local/src/test/java/org/apache/pinot/segment/local/segment/index/creator/SegmentGenerationWithTimeColumnTest.java
+++ b/pinot-segment-local/src/test/java/org/apache/pinot/segment/local/segment/index/creator/SegmentGenerationWithTimeColumnTest.java
@@ -79,6 +79,8 @@ public class SegmentGenerationWithTimeColumnTest {
     _minTime = Long.MAX_VALUE;
     _maxTime = Long.MIN_VALUE;
     FileUtils.deleteQuietly(new File(SEGMENT_DIR_NAME));
+    // allow tests to fix the seed by restoring it here
+    _random.setSeed(_seed);
   }
 
   @Test
@@ -114,6 +116,20 @@ public class SegmentGenerationWithTimeColumnTest {
     Assert.assertEquals(metadata.getEndTime(), _maxTime);
   }
 
+  @Test
+  public void testSimpleDateSegmentGenerationNewWithDegenerateSeed()
+      throws Exception {
+    _random.setSeed(255672780506968L);
+    testSimpleDateSegmentGenerationNew();
+  }
+
+  @Test
+  public void testEpochDateSegmentGenerationWithDegenerateSeed()
+      throws Exception {
+    _random.setSeed(255672780506968L);
+    testEpochDateSegmentGeneration();
+  }
+
   /**
    * Tests using DateTimeFieldSpec as time column
    */
@@ -225,12 +241,16 @@ public class SegmentGenerationWithTimeColumnTest {
   }
 
   private Object getRandomValueForTimeColumn(boolean isSimpleDate, boolean isInvalidDate) {
-    long randomMs = _validMinTime + (long) (_random.nextDouble() * (_startTime - _validMinTime));
+    // avoid testing within a day after the start of the epoch because timezones aren't (and can't)
+    // be handled properly
+    long oneDayInMillis = 24 * 60 * 60 * 1000;
+    long randomMs = _validMinTime + oneDayInMillis
+        + (long) (_random.nextDouble() * (_startTime - _validMinTime - oneDayInMillis));
     Preconditions.checkArgument(TimeUtils.timeValueInValidRange(randomMs), "Value " + randomMs + " out of range");
     long dateColVal = randomMs;
     Object result;
     if (isInvalidDate) {
-      result = new Long(new DateTime(2072, 1, 1, 0, 0, 0, 0, DateTimeZone.UTC).getMillis());
+      result = new DateTime(2072, 1, 1, 0, 0, 0, 0, DateTimeZone.UTC).getMillis();
       return result;
     } else if (isSimpleDate) {
       DateTime dateTime = new DateTime(randomMs, DateTimeZone.UTC);
@@ -239,10 +259,10 @@ public class SegmentGenerationWithTimeColumnTest {
       int month = localDateTime.getMonthOfYear();
       int day = localDateTime.getDayOfMonth();
       String dateColStr = String.format("%04d%02d%02d", year, month, day);
-      dateColVal = Integer.valueOf(dateColStr);
-      result = new Integer(Integer.valueOf(dateColStr));
+      dateColVal = Integer.parseInt(dateColStr);
+      result = (int) dateColVal;
     } else {
-      result = new Long(dateColVal);
+      result = dateColVal;
     }
 
     if (dateColVal < _minTime) {

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