From 9632b3ed66c51b8869c78463a18acaf0b7b0e061 Mon Sep 17 00:00:00 2001 From: David Wallace Date: Fri, 16 Feb 2024 12:38:21 -0800 Subject: [PATCH 1/5] skip sql server agent check if EngineEdition == 8 --- .../source/mssql/MssqlSource.java | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/airbyte-integrations/connectors/source-mssql/src/main/java/io/airbyte/integrations/source/mssql/MssqlSource.java b/airbyte-integrations/connectors/source-mssql/src/main/java/io/airbyte/integrations/source/mssql/MssqlSource.java index 1b9e6ec994af8..00e5d9e26240c 100644 --- a/airbyte-integrations/connectors/source-mssql/src/main/java/io/airbyte/integrations/source/mssql/MssqlSource.java +++ b/airbyte-integrations/connectors/source-mssql/src/main/java/io/airbyte/integrations/source/mssql/MssqlSource.java @@ -417,18 +417,23 @@ protected void assertCdcSchemaQueryable(final JsonNode config, final JdbcDatabas // todo: ensure this works for Azure managed SQL (since it uses different sql server agent) protected void assertSqlServerAgentRunning(final JdbcDatabase database) throws SQLException { try { - final List queryResponse = database.queryJsons(connection -> { - final String sql = - "SELECT status_desc FROM sys.dm_server_services WHERE [servicename] LIKE 'SQL Server Agent%' OR [servicename] LIKE 'SQL Server 代理%' "; - final PreparedStatement ps = connection.prepareStatement(sql); - LOGGER.info(String.format("Checking that the SQL Server Agent is running using the query: '%s'", sql)); - return ps; - }, sourceOperations::rowToJson); - - if (!(queryResponse.get(0).get("status_desc").toString().contains("Running"))) { - throw new RuntimeException(String.format( - "The SQL Server Agent is not running. Current state: '%s'. Please check the documentation on ensuring SQL Server Agent is running.", - queryResponse.get(0).get("status_desc").toString())); + final Int engineEdition = database.queryInt("SELECT ServerProperty('EngineEdition')"); + if (engineEdition == 8) { + LOGGER.info(String.format("Skipping check for whether SQL Server Agent is running. SQL Server Agent is assumed to be running when EngineEdition == '%s'"), engineEdition); + } else { + final List queryResponse = database.queryJsons(connection -> { + final String sql = + "SELECT status_desc FROM sys.dm_server_services WHERE [servicename] LIKE 'SQL Server Agent%' OR [servicename] LIKE 'SQL Server 代理%' "; + final PreparedStatement ps = connection.prepareStatement(sql); + LOGGER.info(String.format("Checking that the SQL Server Agent is running using the query: '%s'", sql)); + return ps; + }, sourceOperations::rowToJson); + + if (!(queryResponse.get(0).get("status_desc").toString().contains("Running"))) { + throw new RuntimeException(String.format( + "The SQL Server Agent is not running. Current state: '%s'. Please check the documentation on ensuring SQL Server Agent is running.", + queryResponse.get(0).get("status_desc").toString())); + } } } catch (final Exception e) { if (e.getCause() != null && e.getCause().getClass().equals(com.microsoft.sqlserver.jdbc.SQLServerException.class)) { From 9b17efc49dd779e14845191827da1af2a58d87c4 Mon Sep 17 00:00:00 2001 From: David Wallace Date: Fri, 16 Feb 2024 12:59:32 -0800 Subject: [PATCH 2/5] add code comments with links out to sql documentation --- .../io/airbyte/integrations/source/mssql/MssqlSource.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/airbyte-integrations/connectors/source-mssql/src/main/java/io/airbyte/integrations/source/mssql/MssqlSource.java b/airbyte-integrations/connectors/source-mssql/src/main/java/io/airbyte/integrations/source/mssql/MssqlSource.java index 00e5d9e26240c..85df4abc16faa 100644 --- a/airbyte-integrations/connectors/source-mssql/src/main/java/io/airbyte/integrations/source/mssql/MssqlSource.java +++ b/airbyte-integrations/connectors/source-mssql/src/main/java/io/airbyte/integrations/source/mssql/MssqlSource.java @@ -417,9 +417,11 @@ protected void assertCdcSchemaQueryable(final JsonNode config, final JdbcDatabas // todo: ensure this works for Azure managed SQL (since it uses different sql server agent) protected void assertSqlServerAgentRunning(final JdbcDatabase database) throws SQLException { try { + // EngineEdition property values can be found at https://learn.microsoft.com/en-us/sql/t-sql/functions/serverproperty-transact-sql?view=sql-server-ver16 + // SQL Server Agent is always running on SQL Managed Instance: https://learn.microsoft.com/en-us/azure/azure-sql/managed-instance/transact-sql-tsql-differences-sql-server?view=azuresql#sql-server-agent final Int engineEdition = database.queryInt("SELECT ServerProperty('EngineEdition')"); if (engineEdition == 8) { - LOGGER.info(String.format("Skipping check for whether SQL Server Agent is running. SQL Server Agent is assumed to be running when EngineEdition == '%s'"), engineEdition); + LOGGER.info(String.format("SQL Server Agent is assumed to be running when EngineEdition == '%s'"), engineEdition); } else { final List queryResponse = database.queryJsons(connection -> { final String sql = From f9a7d62bf9f09135b165d021047426f68719d39f Mon Sep 17 00:00:00 2001 From: David Wallace Date: Fri, 16 Feb 2024 13:07:07 -0800 Subject: [PATCH 3/5] fix formatting --- .../io/airbyte/integrations/source/mssql/MssqlSource.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/airbyte-integrations/connectors/source-mssql/src/main/java/io/airbyte/integrations/source/mssql/MssqlSource.java b/airbyte-integrations/connectors/source-mssql/src/main/java/io/airbyte/integrations/source/mssql/MssqlSource.java index 85df4abc16faa..c5d70b8f41b55 100644 --- a/airbyte-integrations/connectors/source-mssql/src/main/java/io/airbyte/integrations/source/mssql/MssqlSource.java +++ b/airbyte-integrations/connectors/source-mssql/src/main/java/io/airbyte/integrations/source/mssql/MssqlSource.java @@ -417,8 +417,10 @@ protected void assertCdcSchemaQueryable(final JsonNode config, final JdbcDatabas // todo: ensure this works for Azure managed SQL (since it uses different sql server agent) protected void assertSqlServerAgentRunning(final JdbcDatabase database) throws SQLException { try { - // EngineEdition property values can be found at https://learn.microsoft.com/en-us/sql/t-sql/functions/serverproperty-transact-sql?view=sql-server-ver16 - // SQL Server Agent is always running on SQL Managed Instance: https://learn.microsoft.com/en-us/azure/azure-sql/managed-instance/transact-sql-tsql-differences-sql-server?view=azuresql#sql-server-agent + // EngineEdition property values can be found at + // https://learn.microsoft.com/en-us/sql/t-sql/functions/serverproperty-transact-sql?view=sql-server-ver16 + // SQL Server Agent is always running on SQL Managed Instance: + // https://learn.microsoft.com/en-us/azure/azure-sql/managed-instance/transact-sql-tsql-differences-sql-server?view=azuresql#sql-server-agent final Int engineEdition = database.queryInt("SELECT ServerProperty('EngineEdition')"); if (engineEdition == 8) { LOGGER.info(String.format("SQL Server Agent is assumed to be running when EngineEdition == '%s'"), engineEdition); From 6363bae8076295d341b7e529ae370da6c796ef46 Mon Sep 17 00:00:00 2001 From: David Wallace Date: Fri, 16 Feb 2024 13:33:58 -0800 Subject: [PATCH 4/5] fix data type --- .../java/io/airbyte/integrations/source/mssql/MssqlSource.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airbyte-integrations/connectors/source-mssql/src/main/java/io/airbyte/integrations/source/mssql/MssqlSource.java b/airbyte-integrations/connectors/source-mssql/src/main/java/io/airbyte/integrations/source/mssql/MssqlSource.java index c5d70b8f41b55..5be62614801d3 100644 --- a/airbyte-integrations/connectors/source-mssql/src/main/java/io/airbyte/integrations/source/mssql/MssqlSource.java +++ b/airbyte-integrations/connectors/source-mssql/src/main/java/io/airbyte/integrations/source/mssql/MssqlSource.java @@ -421,7 +421,7 @@ protected void assertSqlServerAgentRunning(final JdbcDatabase database) throws S // https://learn.microsoft.com/en-us/sql/t-sql/functions/serverproperty-transact-sql?view=sql-server-ver16 // SQL Server Agent is always running on SQL Managed Instance: // https://learn.microsoft.com/en-us/azure/azure-sql/managed-instance/transact-sql-tsql-differences-sql-server?view=azuresql#sql-server-agent - final Int engineEdition = database.queryInt("SELECT ServerProperty('EngineEdition')"); + final Integer engineEdition = database.queryInt("SELECT ServerProperty('EngineEdition')"); if (engineEdition == 8) { LOGGER.info(String.format("SQL Server Agent is assumed to be running when EngineEdition == '%s'"), engineEdition); } else { From 382ff4a28a4e2d1e8b6621dbdb53e825aabf0c37 Mon Sep 17 00:00:00 2001 From: David Wallace Date: Fri, 16 Feb 2024 15:16:02 -0800 Subject: [PATCH 5/5] fix string format --- .../java/io/airbyte/integrations/source/mssql/MssqlSource.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airbyte-integrations/connectors/source-mssql/src/main/java/io/airbyte/integrations/source/mssql/MssqlSource.java b/airbyte-integrations/connectors/source-mssql/src/main/java/io/airbyte/integrations/source/mssql/MssqlSource.java index 5be62614801d3..51906e48c501c 100644 --- a/airbyte-integrations/connectors/source-mssql/src/main/java/io/airbyte/integrations/source/mssql/MssqlSource.java +++ b/airbyte-integrations/connectors/source-mssql/src/main/java/io/airbyte/integrations/source/mssql/MssqlSource.java @@ -423,7 +423,7 @@ protected void assertSqlServerAgentRunning(final JdbcDatabase database) throws S // https://learn.microsoft.com/en-us/azure/azure-sql/managed-instance/transact-sql-tsql-differences-sql-server?view=azuresql#sql-server-agent final Integer engineEdition = database.queryInt("SELECT ServerProperty('EngineEdition')"); if (engineEdition == 8) { - LOGGER.info(String.format("SQL Server Agent is assumed to be running when EngineEdition == '%s'"), engineEdition); + LOGGER.info(String.format("SQL Server Agent is assumed to be running when EngineEdition == '%s'", engineEdition)); } else { final List queryResponse = database.queryJsons(connection -> { final String sql =