From 49cc2ed984de96fc6abab085d74ef94d31c87c0c Mon Sep 17 00:00:00 2001 From: Pedro Lopez Date: Mon, 4 Jul 2022 14:31:28 -0400 Subject: [PATCH] better handling of multiline chained java exceptions --- .../SentryExceptionHelper.java | 4 ++-- .../SentryExceptionHelperTest.java | 22 ++++++++++++++----- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/airbyte-scheduler/scheduler-persistence/src/main/java/io/airbyte/scheduler/persistence/job_error_reporter/SentryExceptionHelper.java b/airbyte-scheduler/scheduler-persistence/src/main/java/io/airbyte/scheduler/persistence/job_error_reporter/SentryExceptionHelper.java index 1fe083490c12..c877ff84a8c1 100644 --- a/airbyte-scheduler/scheduler-persistence/src/main/java/io/airbyte/scheduler/persistence/job_error_reporter/SentryExceptionHelper.java +++ b/airbyte-scheduler/scheduler-persistence/src/main/java/io/airbyte/scheduler/persistence/job_error_reporter/SentryExceptionHelper.java @@ -103,8 +103,8 @@ private static Optional> buildJavaSentryExceptions(final S final List sentryExceptions = new ArrayList<>(); // separate chained exceptions - // e.g "\nCaused By: " - final String exceptionSeparator = "\n[\\w ]+: "; + // e.g "\nCaused by: " + final String exceptionSeparator = "\nCaused by: "; final String[] exceptions = stacktrace.split(exceptionSeparator); for (final String exceptionStr : exceptions) { diff --git a/airbyte-scheduler/scheduler-persistence/src/test/java/io/airbyte/scheduler/persistence/job_error_reporter/SentryExceptionHelperTest.java b/airbyte-scheduler/scheduler-persistence/src/test/java/io/airbyte/scheduler/persistence/job_error_reporter/SentryExceptionHelperTest.java index 55aa7dc2c385..df49a4d55672 100644 --- a/airbyte-scheduler/scheduler-persistence/src/test/java/io/airbyte/scheduler/persistence/job_error_reporter/SentryExceptionHelperTest.java +++ b/airbyte-scheduler/scheduler-persistence/src/test/java/io/airbyte/scheduler/persistence/job_error_reporter/SentryExceptionHelperTest.java @@ -292,28 +292,38 @@ void testBuildSentryExceptionsJavaMultilineValue() { } at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:146) ... 22 more + Caused by: org.postgresql.util.PSQLException: ERROR: publication "airbyte_publication" does not exist + Where: slot "airbyte_slot", output plugin "pgoutput", in the change callback, associated LSN 0/48029520 + at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2675) """; final Optional> optionalSentryExceptions = exceptionHelper.buildSentryExceptions(stacktrace); Assertions.assertTrue(optionalSentryExceptions.isPresent()); final List exceptionList = optionalSentryExceptions.get(); - Assertions.assertEquals(1, exceptionList.size()); + Assertions.assertEquals(2, exceptionList.size()); - final String expectedValue = + assertExceptionContent(exceptionList.get(0), "io.temporal.failure.ApplicationFailure", """ GET https://storage.googleapis.com/ { "code" : 401, "message" : "Invalid Credentials" - }"""; - - assertExceptionContent(exceptionList.get(0), "io.temporal.failure.ApplicationFailure", - expectedValue, List.of( + }""", List.of( Map.of( "filename", "GoogleJsonResponseException.java", "lineno", 146, "module", "com.google.api.client.googleapis.json.GoogleJsonResponseException", "function", "from"))); + + assertExceptionContent(exceptionList.get(1), "org.postgresql.util.PSQLException", + """ + ERROR: publication "airbyte_publication" does not exist + Where: slot "airbyte_slot", output plugin "pgoutput", in the change callback, associated LSN 0/48029520""", List.of( + Map.of( + "filename", "QueryExecutorImpl.java", + "lineno", 2675, + "module", "org.postgresql.core.v3.QueryExecutorImpl", + "function", "receiveErrorResponse"))); } private void assertExceptionContent(final SentryException exception,