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

amashenkov pushed a commit to branch ignite-19272
in repository https://gitbox.apache.org/repos/asf/ignite-3.git

commit a4d74b72c1b16e8aee4ec8e76cf094900876b46a
Author: amashenkov <[email protected]>
AuthorDate: Thu Apr 27 17:10:35 2023 +0300

    wip.
---
 .../apache/ignite/client/handler/JdbcQueryEventHandlerImpl.java  | 6 ++++++
 .../apache/ignite/internal/sql/engine/AsyncSqlCursorImpl.java    | 6 ++----
 .../ignite/internal/sql/engine/exec/ExchangeServiceImpl.java     | 9 ++++++++-
 3 files changed, 16 insertions(+), 5 deletions(-)

diff --git 
a/modules/client-handler/src/main/java/org/apache/ignite/client/handler/JdbcQueryEventHandlerImpl.java
 
b/modules/client-handler/src/main/java/org/apache/ignite/client/handler/JdbcQueryEventHandlerImpl.java
index bbc4f2f9cc..af80b276e1 100644
--- 
a/modules/client-handler/src/main/java/org/apache/ignite/client/handler/JdbcQueryEventHandlerImpl.java
+++ 
b/modules/client-handler/src/main/java/org/apache/ignite/client/handler/JdbcQueryEventHandlerImpl.java
@@ -52,6 +52,8 @@ import 
org.apache.ignite.internal.jdbc.proto.event.JdbcQueryExecuteRequest;
 import org.apache.ignite.internal.jdbc.proto.event.JdbcQueryExecuteResult;
 import org.apache.ignite.internal.jdbc.proto.event.JdbcQuerySingleResult;
 import org.apache.ignite.internal.jdbc.proto.event.Response;
+import org.apache.ignite.internal.logger.IgniteLogger;
+import org.apache.ignite.internal.logger.Loggers;
 import org.apache.ignite.internal.sql.engine.AsyncSqlCursor;
 import org.apache.ignite.internal.sql.engine.QueryContext;
 import org.apache.ignite.internal.sql.engine.QueryProcessor;
@@ -76,6 +78,8 @@ import org.jetbrains.annotations.Nullable;
  * Jdbc query event handler implementation.
  */
 public class JdbcQueryEventHandlerImpl implements JdbcQueryEventHandler {
+    /** Logger. */
+    private static final IgniteLogger LOG = 
Loggers.forClass(JdbcQueryEventHandlerImpl.class);
 
     /** {@link SqlQueryType}s allowed in JDBC select statements. **/
     private static final Set<SqlQueryType> SELECT_STATEMENT_QUERIES = 
Set.of(SqlQueryType.QUERY, SqlQueryType.EXPLAIN);
@@ -167,6 +171,8 @@ public class JdbcQueryEventHandlerImpl implements 
JdbcQueryEventHandler {
         return result.thenCompose(cursor -> createJdbcResult(new 
JdbcQueryCursor<>(req.maxRows(), cursor), req))
                 .thenApply(jdbcResult -> new 
JdbcQueryExecuteResult(List.of(jdbcResult)))
                 .exceptionally(t -> {
+                    LOG.info("Exception while executing query [query=" + 
req.sqlQuery() + "]", ExceptionUtils.unwrapCause(t));
+
                     StringWriter sw = getWriterWithStackTrace(t);
 
                     return new JdbcQueryExecuteResult(Response.STATUS_FAILED,
diff --git 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/AsyncSqlCursorImpl.java
 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/AsyncSqlCursorImpl.java
index 65c6995b1c..a143efc632 100644
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/AsyncSqlCursorImpl.java
+++ 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/AsyncSqlCursorImpl.java
@@ -129,11 +129,9 @@ public class AsyncSqlCursorImpl<T> implements 
AsyncSqlCursor<T> {
     }
 
     private static IgniteException preserveExceptionType(IgniteException e, 
Throwable t) {
-        // Return IgniteException as is
-        if (e.getClass() == IgniteException.class) {
-            return e;
-        }
+        t = ExceptionUtils.unwrapCause(t);
 
+        // Re-create exception to get correct stacktrace.
         try {
             Constructor<?> ctor = 
e.getClass().getDeclaredConstructor(UUID.class, int.class, String.class, 
Throwable.class);
 
diff --git 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExchangeServiceImpl.java
 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExchangeServiceImpl.java
index e83a2b2ae1..1ce16c6715 100644
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExchangeServiceImpl.java
+++ 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/ExchangeServiceImpl.java
@@ -19,6 +19,7 @@ package org.apache.ignite.internal.sql.engine.exec;
 
 import static org.apache.ignite.internal.util.CollectionUtils.nullOrEmpty;
 import static org.apache.ignite.lang.ErrorGroups.Common.UNEXPECTED_ERR;
+import static org.apache.ignite.lang.IgniteStringFormatter.format;
 
 import java.util.Collection;
 import java.util.List;
@@ -36,8 +37,10 @@ import 
org.apache.ignite.internal.sql.engine.message.QueryBatchRequestMessage;
 import org.apache.ignite.internal.sql.engine.message.SqlQueryMessageGroup;
 import org.apache.ignite.internal.sql.engine.message.SqlQueryMessagesFactory;
 import org.apache.ignite.internal.sql.engine.util.Commons;
+import org.apache.ignite.lang.IgniteException;
 import org.apache.ignite.lang.IgniteInternalCheckedException;
 import org.apache.ignite.lang.IgniteInternalException;
+import org.apache.ignite.sql.SqlException;
 import org.jetbrains.annotations.Nullable;
 
 /**
@@ -134,12 +137,16 @@ public class ExchangeServiceImpl implements 
ExchangeService {
     /** {@inheritDoc} */
     @Override
     public void sendError(String nodeName, UUID qryId, long fragmentId, 
Throwable err) throws IgniteInternalCheckedException {
+        IgniteException ex = (err instanceof  IgniteException) ? 
(IgniteException) err : new SqlException(UNEXPECTED_ERR, err);
+
+        LOG.info(format("Failed to execute query fragment: queryId={}, 
fragmentId={}", qryId, fragmentId), ex);
+
         messageService.send(
                 nodeName,
                 FACTORY.errorMessage()
                         .queryId(qryId)
                         .fragmentId(fragmentId)
-                        .error(err)
+                        .error(ex)
                         .build()
         );
     }

Reply via email to