Repository: ignite Updated Branches: refs/heads/ignite-5239 [created] ebd268726
IGNITE-5239 Add suppressed errors to stacktrace. Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/ebd26872 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/ebd26872 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/ebd26872 Branch: refs/heads/ignite-5239 Commit: ebd268726072a64de59c4ad4857f08a5a16eaa79 Parents: 2ba6ab4 Author: Alexey Kuznetsov <[email protected]> Authored: Mon Jun 5 22:39:18 2017 +0700 Committer: Alexey Kuznetsov <[email protected]> Committed: Mon Jun 5 22:39:18 2017 +0700 ---------------------------------------------------------------------- .../http/jetty/GridJettyObjectMapper.java | 39 +++++++++++++++++--- .../frontend/app/modules/sql/sql.controller.js | 10 ++++- 2 files changed, 41 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/ebd26872/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyObjectMapper.java ---------------------------------------------------------------------- diff --git a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyObjectMapper.java b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyObjectMapper.java index 5a94315..9f217c6 100644 --- a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyObjectMapper.java +++ b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyObjectMapper.java @@ -34,6 +34,7 @@ import java.text.DateFormat; import java.util.Locale; import org.apache.ignite.internal.processors.cache.query.GridCacheSqlIndexMetadata; import org.apache.ignite.internal.processors.cache.query.GridCacheSqlMetadata; +import org.apache.ignite.internal.util.typedef.F; import org.apache.ignite.internal.visor.util.VisorExceptionWrapper; import org.apache.ignite.lang.IgniteBiTuple; import org.apache.ignite.lang.IgniteUuid; @@ -118,10 +119,12 @@ public class GridJettyObjectMapper extends ObjectMapper { /** Custom serializer for {@link Throwable} */ private static final JsonSerializer<Throwable> THROWABLE_SERIALIZER = new JsonSerializer<Throwable>() { - /** {@inheritDoc} */ - @Override public void serialize(Throwable e, JsonGenerator gen, SerializerProvider ser) throws IOException { - gen.writeStartObject(); - + /** + * @param e Exception to write. + * @param gen JSON generator. + * @throws IOException If failed to write. + */ + private void writeException(Throwable e, JsonGenerator gen) throws IOException { if (e instanceof VisorExceptionWrapper) { VisorExceptionWrapper wrapper = (VisorExceptionWrapper)e; @@ -133,8 +136,8 @@ public class GridJettyObjectMapper extends ObjectMapper { if (e.getMessage() != null) gen.writeStringField("message", e.getMessage()); - if (e.getCause() != null) - gen.writeObjectField("cause", e.getCause()); + if (e.getMessage() != null) + gen.writeStringField("message", e.getMessage()); if (e instanceof SQLException) { SQLException sqlE = (SQLException)e; @@ -142,6 +145,30 @@ public class GridJettyObjectMapper extends ObjectMapper { gen.writeNumberField("errorCode", sqlE.getErrorCode()); gen.writeStringField("SQLState", sqlE.getSQLState()); } + } + + /** {@inheritDoc} */ + @Override public void serialize(Throwable e, JsonGenerator gen, SerializerProvider ser) throws IOException { + gen.writeStartObject(); + + writeException(e, gen); + + if (e.getCause() != null) + gen.writeObjectField("cause", e.getCause()); + + if (!F.isEmpty(e.getSuppressed())) { + gen.writeArrayFieldStart("suppressed"); + + for (Throwable sup : e.getSuppressed()) { + gen.writeStartObject(); + + writeException(sup, gen); + + gen.writeEndObject(); + } + + gen.writeEndArray(); + } gen.writeEndObject(); } http://git-wip-us.apache.org/repos/asf/ignite/blob/ebd26872/modules/web-console/frontend/app/modules/sql/sql.controller.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/sql/sql.controller.js b/modules/web-console/frontend/app/modules/sql/sql.controller.js index c8fcf8f..f0dc0b1 100644 --- a/modules/web-console/frontend/app/modules/sql/sql.controller.js +++ b/modules/web-console/frontend/app/modules/sql/sql.controller.js @@ -1778,10 +1778,16 @@ export default ['$rootScope', '$scope', '$http', '$q', '$timeout', '$interval', const tab = ' '; + const addToTrace = (item) => { + const clsName = _.isEmpty(item.className) ? '' : '[' + JavaTypes.shortClassName(item.className) + '] '; + + scope.content.push((scope.content.length > 0 ? tab : '') + clsName + item.message); + }; + while (_.nonNil(cause)) { - const clsName = _.isEmpty(cause.className) ? '' : '[' + JavaTypes.shortClassName(cause.className) + '] '; + addToTrace(cause); - scope.content.push((scope.content.length > 0 ? tab : '') + clsName + cause.message); + _.forEach(cause.suppressed, (sup) => addToTrace(sup)); cause = cause.cause; }
