Skip to content

Commit 0cc46fe

Browse files
authored
Merge pull request #139 from data-integrations/fix/sql-server-exception
CDAP-17570 Copy SQLServerErrorHandler class from debezium connector a…
2 parents fa1a087 + 207f9aa commit 0cc46fe

2 files changed

Lines changed: 42 additions & 0 deletions

File tree

sqlserver-delta-plugins/src/main/java/io/cdap/delta/sqlserver/SqlServerEventReader.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import io.debezium.connector.sqlserver.SourceInfo;
2929
import io.debezium.connector.sqlserver.SqlServerConnection;
3030
import io.debezium.connector.sqlserver.SqlServerConnector;
31+
import io.debezium.connector.sqlserver.SqlServerErrorHandler;
3132
import io.debezium.embedded.EmbeddedEngine;
3233
import io.debezium.jdbc.JdbcConfiguration;
3334
import io.debezium.jdbc.JdbcConnection;
@@ -85,6 +86,7 @@ public void start(Offset offset) {
8586
jdbcDriverClass.getName(),
8687
jdbcDriverClass.getClassLoader());
8788

89+
SqlServerErrorHandler.driverClassLoader = jdbcDriverClass.getClassLoader();
8890
// this is needed since sql server does not return the database information in the record
8991
String databaseName = config.getDatabase();
9092

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/*
2+
* Copyright Debezium Authors.
3+
*
4+
* Licensed under the Apache Software License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0
5+
*/
6+
package io.debezium.connector.sqlserver;
7+
8+
import io.debezium.connector.base.ChangeEventQueue;
9+
import io.debezium.pipeline.ErrorHandler;
10+
11+
/**
12+
* Error handler for SQL Server.
13+
*
14+
* @author Chris Cranford
15+
*/
16+
public class SqlServerErrorHandler extends ErrorHandler {
17+
// This class is copied from debezium. driverClassLoader variable is added to the
18+
// original class. This class loader is the jdbc plugin class loader and is required
19+
// to load the SQLServerException class from the user uploaded jdbc jar rather than looking
20+
// into the debezium connector jar.
21+
public static ClassLoader driverClassLoader;
22+
public SqlServerErrorHandler(String logicalName, ChangeEventQueue<?> queue) {
23+
super(SqlServerConnector.class, logicalName, queue);
24+
}
25+
26+
@Override
27+
protected boolean isRetriable(Throwable throwable) {
28+
try {
29+
Class<?> sqlServerExceptionClass = driverClassLoader.loadClass("com.microsoft.sqlserver.jdbc.SQLServerException");
30+
return sqlServerExceptionClass.isInstance(throwable)
31+
&& (throwable.getMessage().contains("Connection timed out (Read failed)")
32+
|| throwable.getMessage().contains("The connection has been closed.")
33+
|| throwable.getMessage().contains("Connection reset")
34+
|| throwable.getMessage().contains("SHUTDOWN is in progress"));
35+
36+
} catch (ClassNotFoundException e) {
37+
throw new RuntimeException("Failed to load the SQLServerException class.", e);
38+
}
39+
}
40+
}

0 commit comments

Comments
 (0)