diff --git a/persistence/relational-jdbc/src/main/java/org/apache/polaris/persistence/relational/jdbc/DatasourceOperations.java b/persistence/relational-jdbc/src/main/java/org/apache/polaris/persistence/relational/jdbc/DatasourceOperations.java index 8dd9948698..f5afbc04dc 100644 --- a/persistence/relational-jdbc/src/main/java/org/apache/polaris/persistence/relational/jdbc/DatasourceOperations.java +++ b/persistence/relational-jdbc/src/main/java/org/apache/polaris/persistence/relational/jdbc/DatasourceOperations.java @@ -286,8 +286,12 @@ T withRetries(Operation operation) throws SQLException { if (timeLeft == 0 || attempts >= maxAttempts || !isRetryable(sqlException)) { String exceptionMessage = String.format( - "Failed due to %s, after , %s attempts and %s milliseconds", - sqlException.getMessage(), attempts, maxDuration); + "Failed due to '%s' (error code %d, sql-state '%s'), after %s attempts and %s milliseconds", + sqlException.getMessage(), + sqlException.getErrorCode(), + sqlException.getSQLState(), + attempts, + maxDuration); throw new SQLException( exceptionMessage, sqlException.getSQLState(), sqlException.getErrorCode(), e); } diff --git a/persistence/relational-jdbc/src/test/java/org/apache/polaris/persistence/relational/jdbc/DatasourceOperationsTest.java b/persistence/relational-jdbc/src/test/java/org/apache/polaris/persistence/relational/jdbc/DatasourceOperationsTest.java index ae6f569cc5..26f452a087 100644 --- a/persistence/relational-jdbc/src/test/java/org/apache/polaris/persistence/relational/jdbc/DatasourceOperationsTest.java +++ b/persistence/relational-jdbc/src/test/java/org/apache/polaris/persistence/relational/jdbc/DatasourceOperationsTest.java @@ -182,7 +182,7 @@ void testRetryAttemptsExceedMaxRetries() throws SQLException { SQLException thrown = assertThrows(SQLException.class, () -> datasourceOperations.withRetries(mockOperation)); assertEquals( - "Failed due to Retryable error, after , 2 attempts and 1000 milliseconds", + "Failed due to 'Retryable error' (error code 0, sql-state '40001'), after 2 attempts and 1000 milliseconds", thrown.getMessage()); verify(mockOperation, times(2)).execute(); // Tried twice, then threw } @@ -213,7 +213,7 @@ void testNonRetryableSQLException() throws SQLException { SQLException thrown = assertThrows(SQLException.class, () -> datasourceOperations.withRetries(mockOperation)); assertEquals( - "Failed due to NonRetryable error, after , 1 attempts and 1000 milliseconds", + "Failed due to 'NonRetryable error' (error code 0, sql-state 'null'), after 1 attempts and 1000 milliseconds", thrown.getMessage()); verify(mockOperation, times(1)).execute(); // Should not retry }