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

lakshsingla 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 fe0f4150c9a MSQ ingestion: Improve error message on encountering 
non-long timestamp column (#17411)
fe0f4150c9a is described below

commit fe0f4150c9a0156a2d95034fd8f626dfc552b34b
Author: Akshat Jain <[email protected]>
AuthorDate: Fri Oct 25 15:02:32 2024 +0530

    MSQ ingestion: Improve error message on encountering non-long timestamp 
column (#17411)
    
    This PR improves the error message during MSQ ingestion if we encounter a 
non-long timestamp column.
---
 .../java/org/apache/druid/msq/exec/MSQTasks.java   |  8 ++++-
 .../org/apache/druid/msq/exec/MSQTasksTest.java    | 39 ++++++++++++++++++++++
 2 files changed, 46 insertions(+), 1 deletion(-)

diff --git 
a/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/exec/MSQTasks.java
 
b/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/exec/MSQTasks.java
index 2dff4419bdb..75dc1271e3a 100644
--- 
a/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/exec/MSQTasks.java
+++ 
b/extensions-core/multi-stage-query/src/main/java/org/apache/druid/msq/exec/MSQTasks.java
@@ -114,7 +114,13 @@ public class MSQTasks
       // be a long at execution time. So a nice user-friendly message isn't 
needed here: it would only happen
       // if the SQL layer is bypassed. Nice, friendly users wouldn't do that :)
       final UnknownFault fault =
-          UnknownFault.forMessage(StringUtils.format("Incorrect type for 
[%s]", ColumnHolder.TIME_COLUMN_NAME));
+          UnknownFault.forMessage(
+              StringUtils.format(
+                  "Incorrect type for column [%s]. Expected LONG but got type 
[%s]. Please ensure that the value is cast to LONG.",
+                  ColumnHolder.TIME_COLUMN_NAME,
+                  timestamp.getClass().getSimpleName()
+              )
+          );
       throw new MSQException(fault);
     }
   }
diff --git 
a/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/exec/MSQTasksTest.java
 
b/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/exec/MSQTasksTest.java
index 904510408ff..eec5e9d4ebe 100644
--- 
a/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/exec/MSQTasksTest.java
+++ 
b/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/exec/MSQTasksTest.java
@@ -34,8 +34,10 @@ import org.apache.druid.indexer.TaskStatus;
 import org.apache.druid.indexer.TaskStatusPlus;
 import org.apache.druid.java.util.common.DateTimes;
 import org.apache.druid.java.util.common.ISE;
+import org.apache.druid.java.util.common.StringUtils;
 import org.apache.druid.msq.indexing.MSQWorkerTask;
 import org.apache.druid.msq.indexing.MSQWorkerTaskLauncher;
+import org.apache.druid.msq.indexing.error.InsertTimeNullFault;
 import org.apache.druid.msq.indexing.error.MSQErrorReport;
 import org.apache.druid.msq.indexing.error.MSQException;
 import org.apache.druid.msq.indexing.error.MSQFaultUtils;
@@ -46,6 +48,7 @@ import 
org.apache.druid.msq.indexing.error.TooManyColumnsFault;
 import org.apache.druid.msq.indexing.error.TooManyWorkersFault;
 import org.apache.druid.msq.indexing.error.UnknownFault;
 import org.apache.druid.msq.indexing.error.WorkerRpcFailedFault;
+import org.apache.druid.segment.column.ColumnHolder;
 import org.apache.druid.utils.CollectionUtils;
 import org.junit.Assert;
 import org.junit.Test;
@@ -244,6 +247,42 @@ public class MSQTasksTest
     }
   }
 
+  @Test
+  public void test_getPrimaryTimestampFromObjectForInsert_longValue()
+  {
+    Assert.assertEquals(100, 
MSQTasks.primaryTimestampFromObjectForInsert(100L));
+  }
+
+  @Test
+  public void 
test_getPrimaryTimestampFromObjectForInsert_nullValueShouldThrowError()
+  {
+    final MSQException e = Assert.assertThrows(
+        MSQException.class,
+        () -> MSQTasks.primaryTimestampFromObjectForInsert(null)
+    );
+    Assert.assertEquals(InsertTimeNullFault.INSTANCE, e.getFault());
+  }
+
+  @Test
+  public void 
test_getPrimaryTimestampFromObjectForInsert_DoubleValueShouldThrowError()
+  {
+    final Object timestamp = 1.693837200123456E15;
+    final MSQException e = Assert.assertThrows(
+        MSQException.class,
+        () -> MSQTasks.primaryTimestampFromObjectForInsert(timestamp)
+    );
+    Assert.assertEquals(
+        UnknownFault.forMessage(
+            StringUtils.format(
+                "Incorrect type for column [%s]. Expected LONG but got type 
[%s]. Please ensure that the value is cast to LONG.",
+                ColumnHolder.TIME_COLUMN_NAME,
+                timestamp.getClass().getSimpleName()
+            )
+        ),
+        e.getFault()
+    );
+  }
+
   static class TasksTestOverlordClient extends NoopOverlordClient
   {
     // Num of slots available for tasks


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

Reply via email to