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

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


The following commit(s) were added to refs/heads/master by this push:
     new 072b16c6df4 Fix SQL Innterval.of() error message (#15454)
072b16c6df4 is described below

commit 072b16c6df43005756145248d6f08e98f23243b6
Author: Sam Rash <[email protected]>
AuthorDate: Mon Jan 15 20:34:35 2024 -0800

    Fix SQL Innterval.of() error message (#15454)
    
    Better error message for poorly constructed intervals
---
 .../apache/druid/java/util/common/Intervals.java   |  8 ++++-
 .../druid/java/util/common/IntervalsTest.java      |  8 +++++
 .../metadata/SqlSegmentsMetadataManagerTest.java   | 38 ----------------------
 .../druid/server/http/DataSourcesResourceTest.java | 17 +++-------
 4 files changed, 19 insertions(+), 52 deletions(-)

diff --git 
a/processing/src/main/java/org/apache/druid/java/util/common/Intervals.java 
b/processing/src/main/java/org/apache/druid/java/util/common/Intervals.java
index 96f858fd4be..4da87648f0e 100644
--- a/processing/src/main/java/org/apache/druid/java/util/common/Intervals.java
+++ b/processing/src/main/java/org/apache/druid/java/util/common/Intervals.java
@@ -20,6 +20,7 @@
 package org.apache.druid.java.util.common;
 
 import com.google.common.collect.ImmutableList;
+import org.apache.druid.error.InvalidInput;
 import org.apache.druid.java.util.common.guava.Comparators;
 import org.joda.time.DateTime;
 import org.joda.time.Interval;
@@ -39,7 +40,12 @@ public final class Intervals
 
   public static Interval of(String interval)
   {
-    return new Interval(interval, ISOChronology.getInstanceUTC());
+    try {
+      return new Interval(interval, ISOChronology.getInstanceUTC());
+    }
+    catch (IllegalArgumentException e) {
+      throw InvalidInput.exception(e, "Bad Interval[%s]: [%s]", interval, 
e.getMessage());
+    }
   }
 
   public static Interval of(String format, Object... formatArgs)
diff --git 
a/processing/src/test/java/org/apache/druid/java/util/common/IntervalsTest.java 
b/processing/src/test/java/org/apache/druid/java/util/common/IntervalsTest.java
index 59eac8d5a99..a8703b0ec70 100644
--- 
a/processing/src/test/java/org/apache/druid/java/util/common/IntervalsTest.java
+++ 
b/processing/src/test/java/org/apache/druid/java/util/common/IntervalsTest.java
@@ -19,6 +19,7 @@
 
 package org.apache.druid.java.util.common;
 
+import org.apache.druid.error.DruidExceptionMatcher;
 import org.apache.druid.java.util.common.guava.Comparators;
 import org.joda.time.Interval;
 import org.junit.Assert;
@@ -78,4 +79,11 @@ public class IntervalsTest
     );
   }
 
+  @Test
+  public void testInvalidInterval()
+  {
+    DruidExceptionMatcher.invalidInput().assertThrowsAndMatches(
+        () -> Intervals.of("invalid string")
+    );
+  }
 }
diff --git 
a/server/src/test/java/org/apache/druid/metadata/SqlSegmentsMetadataManagerTest.java
 
b/server/src/test/java/org/apache/druid/metadata/SqlSegmentsMetadataManagerTest.java
index c1a5dbbdac0..ab024d568db 100644
--- 
a/server/src/test/java/org/apache/druid/metadata/SqlSegmentsMetadataManagerTest.java
+++ 
b/server/src/test/java/org/apache/druid/metadata/SqlSegmentsMetadataManagerTest.java
@@ -697,25 +697,6 @@ public class SqlSegmentsMetadataManagerTest
     );
   }
 
-  @Test(expected = IllegalArgumentException.class)
-  public void 
testMarkAsUsedNonOvershadowedSegmentsInIntervalWithInvalidInterval() throws 
IOException
-  {
-    sqlSegmentsMetadataManager.startPollingDatabasePeriodically();
-    sqlSegmentsMetadataManager.poll();
-    
Assert.assertTrue(sqlSegmentsMetadataManager.isPollingDatabasePeriodically());
-
-    final String newDataSource = "wikipedia2";
-    final DataSegment newSegment1 = createNewSegment1(newDataSource);
-
-    final DataSegment newSegment2 = createNewSegment2(newDataSource);
-
-    publish(newSegment1, false);
-    publish(newSegment2, false);
-    // invalid interval start > end
-    final Interval theInterval = 
Intervals.of("2017-10-22T00:00:00.000/2017-10-02T00:00:00.000");
-    
sqlSegmentsMetadataManager.markAsUsedNonOvershadowedSegmentsInInterval(newDataSource,
 theInterval);
-  }
-
   @Test
   public void 
testMarkAsUsedNonOvershadowedSegmentsInIntervalWithOverlappingInterval() throws 
IOException
   {
@@ -833,25 +814,6 @@ public class SqlSegmentsMetadataManagerTest
     );
   }
 
-  @Test(expected = IllegalArgumentException.class)
-  public void testMarkAsUnusedSegmentsInIntervalWithInvalidInterval() throws 
IOException
-  {
-    sqlSegmentsMetadataManager.startPollingDatabasePeriodically();
-    sqlSegmentsMetadataManager.poll();
-    
Assert.assertTrue(sqlSegmentsMetadataManager.isPollingDatabasePeriodically());
-
-    final String newDataSource = "wikipedia2";
-    final DataSegment newSegment1 = createNewSegment1(newDataSource);
-
-    final DataSegment newSegment2 = createNewSegment2(newDataSource);
-
-    publisher.publishSegment(newSegment1);
-    publisher.publishSegment(newSegment2);
-    // invalid interval start > end
-    final Interval theInterval = 
Intervals.of("2017-10-22T00:00:00.000/2017-10-02T00:00:00.000");
-    sqlSegmentsMetadataManager.markAsUnusedSegmentsInInterval(newDataSource, 
theInterval);
-  }
-
   @Test
   public void testMarkAsUnusedSegmentsInIntervalWithOverlappingInterval() 
throws IOException
   {
diff --git 
a/server/src/test/java/org/apache/druid/server/http/DataSourcesResourceTest.java
 
b/server/src/test/java/org/apache/druid/server/http/DataSourcesResourceTest.java
index b02fb2597e8..b83ebf67527 100644
--- 
a/server/src/test/java/org/apache/druid/server/http/DataSourcesResourceTest.java
+++ 
b/server/src/test/java/org/apache/druid/server/http/DataSourcesResourceTest.java
@@ -35,6 +35,7 @@ import org.apache.druid.client.DruidServer;
 import org.apache.druid.client.ImmutableDruidDataSource;
 import org.apache.druid.client.ImmutableSegmentLoadInfo;
 import org.apache.druid.client.SegmentLoadInfo;
+import org.apache.druid.error.DruidExceptionMatcher;
 import org.apache.druid.java.util.common.Intervals;
 import org.apache.druid.metadata.MetadataRuleManager;
 import org.apache.druid.metadata.SegmentsMetadataManager;
@@ -611,19 +612,9 @@ public class DataSourcesResourceTest
     EasyMock.replay(overlordClient, server);
     DataSourcesResource dataSourcesResource =
         new DataSourcesResource(inventoryView, null, null, overlordClient, 
null, null, auditManager);
-    try {
-      Response response =
-          
dataSourcesResource.markAsUnusedAllSegmentsOrKillUnusedSegmentsInInterval("datasource",
 "true", "???", request);
-      // 400 (Bad Request) or an IllegalArgumentException is expected.
-      Assert.assertEquals(400, response.getStatus());
-      Assert.assertNotNull(response.getEntity());
-      
Assert.assertTrue(response.getEntity().toString().contains("java.lang.IllegalArgumentException"));
-    }
-    catch (IllegalArgumentException ignore) {
-      // expected
-    }
-
-    EasyMock.verify(overlordClient, server);
+    DruidExceptionMatcher.invalidInput().assertThrowsAndMatches(
+        () -> 
dataSourcesResource.markAsUnusedAllSegmentsOrKillUnusedSegmentsInInterval("datasource",
 "true", "???", request)
+    );
   }
 
   @Test


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to