From bcb2f23e9a77e4ea29ad32e23a823e512dd0c915 Mon Sep 17 00:00:00 2001 From: Mirko Jotic Date: Mon, 28 Jan 2019 22:11:18 -0500 Subject: [PATCH 1/6] [#1332] Fix - select failing if milis used for idx. --- .../apache/druid/java/util/common/DateTimes.java | 6 +++++- .../druid/java/util/common/DateTimesTest.java | 13 +++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/apache/druid/java/util/common/DateTimes.java b/core/src/main/java/org/apache/druid/java/util/common/DateTimes.java index 94f1295d2e69..a8660943bd8e 100644 --- a/core/src/main/java/org/apache/druid/java/util/common/DateTimes.java +++ b/core/src/main/java/org/apache/druid/java/util/common/DateTimes.java @@ -107,7 +107,11 @@ public static DateTime utc(long instant) public static DateTime of(String instant) { - return new DateTime(instant, ISOChronology.getInstanceUTC()); + try { + return new DateTime(instant, ISOChronology.getInstanceUTC()); + } catch (IllegalArgumentException ex) { + return new DateTime(Long.valueOf(instant), ISOChronology.getInstanceUTC()); + } } public static DateTime of( diff --git a/core/src/test/java/org/apache/druid/java/util/common/DateTimesTest.java b/core/src/test/java/org/apache/druid/java/util/common/DateTimesTest.java index 61bc746ca291..da3f2f80c0ce 100644 --- a/core/src/test/java/org/apache/druid/java/util/common/DateTimesTest.java +++ b/core/src/test/java/org/apache/druid/java/util/common/DateTimesTest.java @@ -37,4 +37,17 @@ public void testCommonDateTimePattern() Assert.assertTrue(DateTimes.COMMON_DATE_TIME_PATTERN.matcher(dt.toString()).matches()); } } + + @Test + public void testStringTimestampToDateTimeConversion() + { + Long milis = System.currentTimeMillis(); + DateTime dt1 = DateTimes.of(milis.toString()); + Assert.assertTrue(DateTimes.COMMON_DATE_TIME_PATTERN.matcher(dt1.toString()).matches()); + + Long seconds = milis / 1000; + DateTime dt2 = DateTimes.of(seconds.toString()); + Assert.assertTrue(DateTimes.COMMON_DATE_TIME_PATTERN.matcher(dt2.toString()).matches()); + + } } From fe9f9af67154399866e25d31846b94fe1637cf8b Mon Sep 17 00:00:00 2001 From: Mirko Jotic Date: Mon, 28 Jan 2019 22:31:58 -0500 Subject: [PATCH 2/6] Formating correction. --- .../main/java/org/apache/druid/java/util/common/DateTimes.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/apache/druid/java/util/common/DateTimes.java b/core/src/main/java/org/apache/druid/java/util/common/DateTimes.java index a8660943bd8e..ea2d70eef47c 100644 --- a/core/src/main/java/org/apache/druid/java/util/common/DateTimes.java +++ b/core/src/main/java/org/apache/druid/java/util/common/DateTimes.java @@ -109,7 +109,8 @@ public static DateTime of(String instant) { try { return new DateTime(instant, ISOChronology.getInstanceUTC()); - } catch (IllegalArgumentException ex) { + } + catch (IllegalArgumentException ex) { return new DateTime(Long.valueOf(instant), ISOChronology.getInstanceUTC()); } } From ff2d8774c2216120c6972245108e46a5006e19d6 Mon Sep 17 00:00:00 2001 From: Mirko Jotic Date: Wed, 30 Jan 2019 09:31:31 -0500 Subject: [PATCH 3/6] Address comment: throw original exception. --- .../java/org/apache/druid/java/util/common/DateTimes.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/apache/druid/java/util/common/DateTimes.java b/core/src/main/java/org/apache/druid/java/util/common/DateTimes.java index ea2d70eef47c..de1fc403b010 100644 --- a/core/src/main/java/org/apache/druid/java/util/common/DateTimes.java +++ b/core/src/main/java/org/apache/druid/java/util/common/DateTimes.java @@ -111,7 +111,12 @@ public static DateTime of(String instant) return new DateTime(instant, ISOChronology.getInstanceUTC()); } catch (IllegalArgumentException ex) { - return new DateTime(Long.valueOf(instant), ISOChronology.getInstanceUTC()); + try { + return new DateTime(Long.valueOf(instant), ISOChronology.getInstanceUTC()); + } + catch (IllegalArgumentException ex2) { + throw ex; + } } } From 4ba8575513e04ff32b516e659e8076d9fee6a1cf Mon Sep 17 00:00:00 2001 From: Mirko Jotic Date: Tue, 19 Feb 2019 22:57:59 -0500 Subject: [PATCH 4/6] Using constant values in tests - Try converting to Integer and then multiply by 1000L to achieve milis. - If not successful try converting to Long or rethrow original exception. --- .../druid/java/util/common/DateTimes.java | 5 +++-- .../druid/java/util/common/DateTimesTest.java | 18 ++++++++++++------ 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/core/src/main/java/org/apache/druid/java/util/common/DateTimes.java b/core/src/main/java/org/apache/druid/java/util/common/DateTimes.java index de1fc403b010..3b7556ebbcdb 100644 --- a/core/src/main/java/org/apache/druid/java/util/common/DateTimes.java +++ b/core/src/main/java/org/apache/druid/java/util/common/DateTimes.java @@ -108,9 +108,10 @@ public static DateTime utc(long instant) public static DateTime of(String instant) { try { - return new DateTime(instant, ISOChronology.getInstanceUTC()); + Integer seconds = Integer.valueOf(instant); + return new DateTime(seconds * 1000L, ISOChronology.getInstanceUTC()); } - catch (IllegalArgumentException ex) { + catch (NumberFormatException ex) { try { return new DateTime(Long.valueOf(instant), ISOChronology.getInstanceUTC()); } diff --git a/core/src/test/java/org/apache/druid/java/util/common/DateTimesTest.java b/core/src/test/java/org/apache/druid/java/util/common/DateTimesTest.java index da3f2f80c0ce..ea02b96a625e 100644 --- a/core/src/test/java/org/apache/druid/java/util/common/DateTimesTest.java +++ b/core/src/test/java/org/apache/druid/java/util/common/DateTimesTest.java @@ -41,13 +41,19 @@ public void testCommonDateTimePattern() @Test public void testStringTimestampToDateTimeConversion() { - Long milis = System.currentTimeMillis(); - DateTime dt1 = DateTimes.of(milis.toString()); - Assert.assertTrue(DateTimes.COMMON_DATE_TIME_PATTERN.matcher(dt1.toString()).matches()); + String seconds = "1517292000"; + DateTime dt2 = DateTimes.of(seconds); + Assert.assertEquals("2018-01-30T06:00:00.000Z", dt2.toString()); - Long seconds = milis / 1000; - DateTime dt2 = DateTimes.of(seconds.toString()); - Assert.assertTrue(DateTimes.COMMON_DATE_TIME_PATTERN.matcher(dt2.toString()).matches()); + String milis = "1517292000000"; + DateTime dt1 = DateTimes.of(milis); + Assert.assertEquals("2018-01-30T06:00:00.000Z", dt1.toString()); + } + @Test(expected = NumberFormatException.class) + public void testStringTimestampToDateTimeConverstion_RethrowInitialException() + { + String invalid = "51729200AZ"; + DateTimes.of(invalid); } } From 013f3c814d9707d58d9868d4a917b176730df2ba Mon Sep 17 00:00:00 2001 From: Mirko Jotic Date: Tue, 19 Feb 2019 23:46:49 -0500 Subject: [PATCH 5/6] DateTime#of has to support "2011-01-01T00:00:00" - in addition to seconds and milisecs, this method currently supports even a date string. --- .../java/org/apache/druid/java/util/common/DateTimes.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/apache/druid/java/util/common/DateTimes.java b/core/src/main/java/org/apache/druid/java/util/common/DateTimes.java index 3b7556ebbcdb..93e4955b2035 100644 --- a/core/src/main/java/org/apache/druid/java/util/common/DateTimes.java +++ b/core/src/main/java/org/apache/druid/java/util/common/DateTimes.java @@ -116,7 +116,12 @@ public static DateTime of(String instant) return new DateTime(Long.valueOf(instant), ISOChronology.getInstanceUTC()); } catch (IllegalArgumentException ex2) { - throw ex; + try { + return new DateTime(instant, ISOChronology.getInstanceUTC()); + } + catch (Exception ex3) { + throw ex; + } } } } From 656957d2c859586d39e9eb3773445cd7c23bd2e7 Mon Sep 17 00:00:00 2001 From: Mirko Jotic Date: Wed, 20 Feb 2019 19:49:57 -0500 Subject: [PATCH 6/6] Handle only milisec timestamps and ISO8601 strings --- .../org/apache/druid/java/util/common/DateTimes.java | 12 +++--------- .../apache/druid/java/util/common/DateTimesTest.java | 8 ++++---- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/core/src/main/java/org/apache/druid/java/util/common/DateTimes.java b/core/src/main/java/org/apache/druid/java/util/common/DateTimes.java index 93e4955b2035..de1fc403b010 100644 --- a/core/src/main/java/org/apache/druid/java/util/common/DateTimes.java +++ b/core/src/main/java/org/apache/druid/java/util/common/DateTimes.java @@ -108,20 +108,14 @@ public static DateTime utc(long instant) public static DateTime of(String instant) { try { - Integer seconds = Integer.valueOf(instant); - return new DateTime(seconds * 1000L, ISOChronology.getInstanceUTC()); + return new DateTime(instant, ISOChronology.getInstanceUTC()); } - catch (NumberFormatException ex) { + catch (IllegalArgumentException ex) { try { return new DateTime(Long.valueOf(instant), ISOChronology.getInstanceUTC()); } catch (IllegalArgumentException ex2) { - try { - return new DateTime(instant, ISOChronology.getInstanceUTC()); - } - catch (Exception ex3) { - throw ex; - } + throw ex; } } } diff --git a/core/src/test/java/org/apache/druid/java/util/common/DateTimesTest.java b/core/src/test/java/org/apache/druid/java/util/common/DateTimesTest.java index ea02b96a625e..15f30336c851 100644 --- a/core/src/test/java/org/apache/druid/java/util/common/DateTimesTest.java +++ b/core/src/test/java/org/apache/druid/java/util/common/DateTimesTest.java @@ -39,9 +39,9 @@ public void testCommonDateTimePattern() } @Test - public void testStringTimestampToDateTimeConversion() + public void testStringToDateTimeConversion() { - String seconds = "1517292000"; + String seconds = "2018-01-30T06:00:00"; DateTime dt2 = DateTimes.of(seconds); Assert.assertEquals("2018-01-30T06:00:00.000Z", dt2.toString()); @@ -50,8 +50,8 @@ public void testStringTimestampToDateTimeConversion() Assert.assertEquals("2018-01-30T06:00:00.000Z", dt1.toString()); } - @Test(expected = NumberFormatException.class) - public void testStringTimestampToDateTimeConverstion_RethrowInitialException() + @Test(expected = IllegalArgumentException.class) + public void testStringToDateTimeConverstion_RethrowInitialException() { String invalid = "51729200AZ"; DateTimes.of(invalid);