Skip to content

Commit 0ef198a

Browse files
authored
Merge pull request #530 from cloudsufi/patch/errorCodeTypeExtention
[CDAP-21093] Add errorCodeType, errorCode & supportedDocURL in exception (MySQL/CloudSQLMySQLErrorDetailsProvider)
2 parents 2751b6d + 5937192 commit 0ef198a

File tree

8 files changed

+35
-5
lines changed

8 files changed

+35
-5
lines changed

cloudsql-mysql-plugin/src/main/java/io/cdap/plugin/cloudsql/mysql/CloudSQLMySQLErrorDetailsProvider.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919

2020
import io.cdap.plugin.mysql.MysqlErrorDetailsProvider;
21+
import io.cdap.plugin.util.DBUtils;
2122

2223
/**
2324
* A custom ErrorDetailsProvider for CloudSQL MySQL plugins.
@@ -26,6 +27,6 @@ public class CloudSQLMySQLErrorDetailsProvider extends MysqlErrorDetailsProvider
2627

2728
@Override
2829
protected String getExternalDocumentationLink() {
29-
return "https://cloud.google.com/sql/docs/mysql/error-messages";
30+
return DBUtils.CLOUDSQLMYSQL_SUPPORTED_DOC_URL;
3031
}
3132
}

cloudsql-mysql-plugin/src/main/java/io/cdap/plugin/cloudsql/mysql/CloudSQLMySQLSource.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,11 @@ protected Class<? extends DBWritable> getDBRecordType() {
8181
return MysqlDBRecord.class;
8282
}
8383

84+
@Override
85+
protected String getExternalDocumentationLink() {
86+
return DBUtils.CLOUDSQLMYSQL_SUPPORTED_DOC_URL;
87+
}
88+
8489
@Override
8590
protected String createConnectionString() {
8691
if (CloudSQLUtil.PRIVATE_INSTANCE.equalsIgnoreCase(

database-commons/src/main/java/io/cdap/plugin/db/DBErrorDetailsProvider.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,13 @@
1919
import com.google.common.base.Strings;
2020
import com.google.common.base.Throwables;
2121
import io.cdap.cdap.api.exception.ErrorCategory;
22+
import io.cdap.cdap.api.exception.ErrorCodeType;
2223
import io.cdap.cdap.api.exception.ErrorType;
2324
import io.cdap.cdap.api.exception.ErrorUtils;
2425
import io.cdap.cdap.api.exception.ProgramFailureException;
2526
import io.cdap.cdap.etl.api.exception.ErrorContext;
2627
import io.cdap.cdap.etl.api.exception.ErrorDetailsProvider;
28+
import io.cdap.plugin.util.DBUtils;
2729

2830
import java.sql.SQLException;
2931
import java.util.List;
@@ -76,7 +78,8 @@ private ProgramFailureException getProgramFailureException(SQLException e, Error
7678
externalDocumentationLink);
7779
}
7880
return ErrorUtils.getProgramFailureException(new ErrorCategory(ErrorCategory.ErrorCategoryEnum.PLUGIN),
79-
errorMessage, errorMessageWithDetails, getErrorTypeFromErrorCode(errorCode), false, e);
81+
errorMessage, errorMessageWithDetails, getErrorTypeFromErrorCode(errorCode), false, ErrorCodeType.SQLSTATE,
82+
sqlState, externalDocumentationLink, e);
8083
}
8184

8285
/**

database-commons/src/main/java/io/cdap/plugin/db/DBRecord.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
package io.cdap.plugin.db;
1818

1919
import com.google.common.base.Preconditions;
20-
import com.google.common.base.Strings;
2120
import io.cdap.cdap.api.common.Bytes;
2221
import io.cdap.cdap.api.data.format.StructuredRecord;
2322
import io.cdap.cdap.api.data.schema.Schema;

database-commons/src/main/java/io/cdap/plugin/db/source/AbstractDBSource.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import io.cdap.cdap.api.data.schema.Schema;
2727
import io.cdap.cdap.api.dataset.lib.KeyValue;
2828
import io.cdap.cdap.api.exception.ErrorCategory;
29+
import io.cdap.cdap.api.exception.ErrorCodeType;
2930
import io.cdap.cdap.api.exception.ErrorType;
3031
import io.cdap.cdap.api.exception.ErrorUtils;
3132
import io.cdap.cdap.api.plugin.PluginConfig;
@@ -202,8 +203,17 @@ private Schema loadSchemaFromDB(Class<? extends Driver> driverClass)
202203
// wrap exception to ensure SQLException-child instances not exposed to contexts without jdbc driver in classpath
203204
String errorMessageWithDetails = String.format("Error occurred while trying to get schema from database." +
204205
"Error message: '%s'. Error code: '%s'. SQLState: '%s'", e.getMessage(), e.getErrorCode(), e.getSQLState());
206+
String externalDocumentationLink = getExternalDocumentationLink();
207+
if (!Strings.isNullOrEmpty(externalDocumentationLink)) {
208+
if (!errorMessageWithDetails.endsWith(".")) {
209+
errorMessageWithDetails = errorMessageWithDetails + ".";
210+
}
211+
errorMessageWithDetails = String.format("%s For more details, see %s", errorMessageWithDetails,
212+
externalDocumentationLink);
213+
}
205214
throw ErrorUtils.getProgramFailureException(new ErrorCategory(ErrorCategory.ErrorCategoryEnum.PLUGIN),
206-
e.getMessage(), errorMessageWithDetails, ErrorType.USER, false, new SQLException(e.getMessage(),
215+
e.getMessage(), errorMessageWithDetails, ErrorType.USER, false, ErrorCodeType.SQLSTATE,
216+
e.getSQLState(), externalDocumentationLink, new SQLException(e.getMessage(),
207217
e.getSQLState(), e.getErrorCode()));
208218
} finally {
209219
driverCleanup.destroy();
@@ -363,6 +373,10 @@ protected Class<? extends DBWritable> getDBRecordType() {
363373
return DBRecord.class;
364374
}
365375

376+
protected String getExternalDocumentationLink() {
377+
return null;
378+
}
379+
366380
@Override
367381
public void initialize(BatchRuntimeContext context) throws Exception {
368382
super.initialize(context);

database-commons/src/main/java/io/cdap/plugin/util/DBUtils.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ public final class DBUtils {
6060
private static final Logger LOG = LoggerFactory.getLogger(DBUtils.class);
6161

6262
public static final Calendar PURE_GREGORIAN_CALENDAR = createPureGregorianCalender();
63+
public static final String MYSQL_SUPPORTED_DOC_URL = "https://dev.mysql.com/doc/mysql-errors/9.0/en/";
64+
public static final String CLOUDSQLMYSQL_SUPPORTED_DOC_URL = "https://cloud.google.com/sql/docs/mysql/error-messages";
6365

6466
// Java by default uses October 15, 1582 as a Gregorian cut over date.
6567
// Any timestamp created with time less than this cut over date is treated as Julian date.

mysql-plugin/src/main/java/io/cdap/plugin/mysql/MysqlErrorDetailsProvider.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import io.cdap.cdap.api.exception.ErrorType;
2020
import io.cdap.plugin.db.DBErrorDetailsProvider;
21+
import io.cdap.plugin.util.DBUtils;
2122

2223
/**
2324
* A custom ErrorDetailsProvider for MySQL plugins.
@@ -26,7 +27,7 @@ public class MysqlErrorDetailsProvider extends DBErrorDetailsProvider {
2627

2728
@Override
2829
protected String getExternalDocumentationLink() {
29-
return "https://dev.mysql.com/doc/mysql-errors/9.0/en/";
30+
return DBUtils.MYSQL_SUPPORTED_DOC_URL;
3031
}
3132

3233
@Override

mysql-plugin/src/main/java/io/cdap/plugin/mysql/MysqlSource.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,11 @@ protected Class<? extends DBWritable> getDBRecordType() {
6969
return MysqlDBRecord.class;
7070
}
7171

72+
@Override
73+
protected String getExternalDocumentationLink() {
74+
return DBUtils.MYSQL_SUPPORTED_DOC_URL;
75+
}
76+
7277
@Override
7378
protected LineageRecorder getLineageRecorder(BatchSourceContext context) {
7479
String fqn = DBUtils.constructFQN("mysql",

0 commit comments

Comments
 (0)