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() ); }
