From 034150c13d67c62f3a3df49ec947aaf167b9cca4 Mon Sep 17 00:00:00 2001 From: Stephane Geneix <147216312+stephane-airbyte@users.noreply.github.com> Date: Tue, 23 Jul 2024 14:12:08 -0700 Subject: [PATCH 1/6] destination-postgres: republish 2.0.15 (#42469) we had a publishing issue where destination-postgres-2.0.15 was overriden with code from 2.1.1 (which was broken). We did a hard-rollback in https://github.com/airbytehq/airbyte/pull/42460 but 2.0.15 is still a bad image. This change is only intended to republish 2.0.15 so that it has the correct (old) code and behavior --- .../destination-postgres-strict-encrypt/metadata.yaml | 2 +- .../connectors/destination-postgres/metadata.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/airbyte-integrations/connectors/destination-postgres-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/destination-postgres-strict-encrypt/metadata.yaml index 93fe900bddc7..12ec882d14ec 100644 --- a/airbyte-integrations/connectors/destination-postgres-strict-encrypt/metadata.yaml +++ b/airbyte-integrations/connectors/destination-postgres-strict-encrypt/metadata.yaml @@ -2,7 +2,7 @@ data: connectorSubtype: database connectorType: destination definitionId: 25c5221d-dce2-4163-ade9-739ef790f503 - dockerImageTag: 2.2.0 + dockerImageTag: 2.0.15 dockerRepository: airbyte/destination-postgres-strict-encrypt documentationUrl: https://docs.airbyte.com/integrations/destinations/postgres githubIssueLabel: destination-postgres diff --git a/airbyte-integrations/connectors/destination-postgres/metadata.yaml b/airbyte-integrations/connectors/destination-postgres/metadata.yaml index ccdde17dd7da..16e12f80f3bd 100644 --- a/airbyte-integrations/connectors/destination-postgres/metadata.yaml +++ b/airbyte-integrations/connectors/destination-postgres/metadata.yaml @@ -5,7 +5,7 @@ data: connectorSubtype: database connectorType: destination definitionId: 25c5221d-dce2-4163-ade9-739ef790f503 - dockerImageTag: 2.2.0 + dockerImageTag: 2.0.15 dockerRepository: airbyte/destination-postgres documentationUrl: https://docs.airbyte.com/integrations/destinations/postgres githubIssueLabel: destination-postgres From faae5491e581a5a11d2c78c81ae25087eb701c68 Mon Sep 17 00:00:00 2001 From: Stephane Geneix <147216312+stephane-airbyte@users.noreply.github.com> Date: Tue, 23 Jul 2024 15:11:27 -0700 Subject: [PATCH 2/6] destination-postgres: bump version to 2.2.1 (#42470) --- .../destination-postgres-strict-encrypt/metadata.yaml | 2 +- .../connectors/destination-postgres/metadata.yaml | 2 +- .../integrations/destination/postgres/PostgresDestination.kt | 4 ++-- docs/integrations/destinations/postgres.md | 1 + 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/airbyte-integrations/connectors/destination-postgres-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/destination-postgres-strict-encrypt/metadata.yaml index 12ec882d14ec..7902bed179f9 100644 --- a/airbyte-integrations/connectors/destination-postgres-strict-encrypt/metadata.yaml +++ b/airbyte-integrations/connectors/destination-postgres-strict-encrypt/metadata.yaml @@ -2,7 +2,7 @@ data: connectorSubtype: database connectorType: destination definitionId: 25c5221d-dce2-4163-ade9-739ef790f503 - dockerImageTag: 2.0.15 + dockerImageTag: 2.2.1 dockerRepository: airbyte/destination-postgres-strict-encrypt documentationUrl: https://docs.airbyte.com/integrations/destinations/postgres githubIssueLabel: destination-postgres diff --git a/airbyte-integrations/connectors/destination-postgres/metadata.yaml b/airbyte-integrations/connectors/destination-postgres/metadata.yaml index 16e12f80f3bd..cbf56d84e4b7 100644 --- a/airbyte-integrations/connectors/destination-postgres/metadata.yaml +++ b/airbyte-integrations/connectors/destination-postgres/metadata.yaml @@ -5,7 +5,7 @@ data: connectorSubtype: database connectorType: destination definitionId: 25c5221d-dce2-4163-ade9-739ef790f503 - dockerImageTag: 2.0.15 + dockerImageTag: 2.2.1 dockerRepository: airbyte/destination-postgres documentationUrl: https://docs.airbyte.com/integrations/destinations/postgres githubIssueLabel: destination-postgres diff --git a/airbyte-integrations/connectors/destination-postgres/src/main/kotlin/io/airbyte/integrations/destination/postgres/PostgresDestination.kt b/airbyte-integrations/connectors/destination-postgres/src/main/kotlin/io/airbyte/integrations/destination/postgres/PostgresDestination.kt index 002a4fa67548..48c7fab8acf8 100644 --- a/airbyte-integrations/connectors/destination-postgres/src/main/kotlin/io/airbyte/integrations/destination/postgres/PostgresDestination.kt +++ b/airbyte-integrations/connectors/destination-postgres/src/main/kotlin/io/airbyte/integrations/destination/postgres/PostgresDestination.kt @@ -207,9 +207,9 @@ class PostgresDestination : fun main(args: Array) { addThrowableForDeinterpolation(PSQLException::class.java) val destination = sshWrappedDestination() - LOGGER.info("starting destination: {}", PostgresDestination::class.java) + LOGGER.info("starting destination-postgres: {}", PostgresDestination::class.java) IntegrationRunner(destination).run(args) - LOGGER.info("completed destination: {}", PostgresDestination::class.java) + LOGGER.info("completed destination-postgres: {}", PostgresDestination::class.java) } } } diff --git a/docs/integrations/destinations/postgres.md b/docs/integrations/destinations/postgres.md index c80813134566..a3226ea858ed 100644 --- a/docs/integrations/destinations/postgres.md +++ b/docs/integrations/destinations/postgres.md @@ -267,6 +267,7 @@ _where_ it is deployed. | Version | Date | Pull Request | Subject | |:--------|:-----------|:-----------------------------------------------------------|:---------------------------------------------------------------------------------------------------------| +| 2.2.1 | 2024-07-22 | [\#42423](https://github.com/airbytehq/airbyte/pull/42423) | no-op. Bumping to a clean image | | 2.2.0 | 2024-07-22 | [\#42423](https://github.com/airbytehq/airbyte/pull/42423) | Revert refreshes support | | 2.1.1 | 2024-07-22 | [\#42415](https://github.com/airbytehq/airbyte/pull/42415) | fixing PostgresSqlOperations.isOtherGenerationIdInTable to close the streams coming from JdbcDatabase.unsafeQuery | | 2.1.0 | 2024-07-22 | [\#41954](https://github.com/airbytehq/airbyte/pull/41954) | Support for [refreshes](../../operator-guides/refreshes.md) and resumable full refresh. WARNING: You must upgrade to platform 0.63.7 before upgrading to this connector version. | From 81cd8f2005fd46d8a0da272cae70ebb47dc00654 Mon Sep 17 00:00:00 2001 From: Yue Li <61070669+theyueli@users.noreply.github.com> Date: Tue, 23 Jul 2024 17:27:33 -0700 Subject: [PATCH 3/6] [cdk] handle null message inside exception (#42417) Fixes airbytehq/oncall#5904, error message inside an exception could be null. --- airbyte-cdk/java/airbyte-cdk/README.md | 5 +++-- .../cdk/integrations/util/ConnectorExceptionHandler.kt | 4 ++-- .../airbyte-cdk/core/src/main/resources/version.properties | 2 +- airbyte-integrations/connectors/source-mysql/build.gradle | 2 +- airbyte-integrations/connectors/source-mysql/metadata.yaml | 2 +- airbyte-integrations/connectors/source-postgres/build.gradle | 2 +- .../connectors/source-postgres/metadata.yaml | 2 +- docs/integrations/sources/mysql.md | 1 + docs/integrations/sources/postgres.md | 1 + 9 files changed, 12 insertions(+), 9 deletions(-) diff --git a/airbyte-cdk/java/airbyte-cdk/README.md b/airbyte-cdk/java/airbyte-cdk/README.md index be78b2c2ddbf..0947e7fc72bc 100644 --- a/airbyte-cdk/java/airbyte-cdk/README.md +++ b/airbyte-cdk/java/airbyte-cdk/README.md @@ -172,8 +172,9 @@ corresponds to that version. ### Java CDK -| Version | Date | Pull Request | Subject | -|:-----------|:-----------|:----------------------------------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Version | Date | Pull Request | Subject | +|:-----------|:-----------| :--------------------------------------------------------- |:---------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 0.43.3 | 2024-07-22 | [\#42417](https://github.com/airbytehq/airbyte/pull/42417) | Handle null exception message in ConnectorExceptionHandler. | | 0.43.2 | 2024-07-22 | [\#42431](https://github.com/airbytehq/airbyte/pull/42431) | Filter out debezium message change events | | 0.43.1 | 2024-07-22 | [\#41622](https://github.com/airbytehq/airbyte/pull/41622) | Fix null safety bug in debezium event processing | | 0.43.0 | 2024-07-17 | [\#41954](https://github.com/airbytehq/airbyte/pull/41954) | fix refreshes for connectors using the old SqlOperations | diff --git a/airbyte-cdk/java/airbyte-cdk/core/src/main/kotlin/io/airbyte/cdk/integrations/util/ConnectorExceptionHandler.kt b/airbyte-cdk/java/airbyte-cdk/core/src/main/kotlin/io/airbyte/cdk/integrations/util/ConnectorExceptionHandler.kt index 1907c7885c41..006efe146ef5 100644 --- a/airbyte-cdk/java/airbyte-cdk/core/src/main/kotlin/io/airbyte/cdk/integrations/util/ConnectorExceptionHandler.kt +++ b/airbyte-cdk/java/airbyte-cdk/core/src/main/kotlin/io/airbyte/cdk/integrations/util/ConnectorExceptionHandler.kt @@ -186,12 +186,12 @@ open class ConnectorExceptionHandler { * stored as part of the error profile in the error dictionary. * */ private fun isRecognizableError(e: Throwable?): Boolean { - if (e == null) return false + if (e?.message == null) return false if (e is TransientErrorException || e is ConfigErrorException) { return true } for (error in connectorErrorDictionary) { - if (e.message?.matches(error.regexMatchingPattern.toRegex())!!) return true + if (e.message!!.matches(error.regexMatchingPattern.toRegex())) return true } return false } diff --git a/airbyte-cdk/java/airbyte-cdk/core/src/main/resources/version.properties b/airbyte-cdk/java/airbyte-cdk/core/src/main/resources/version.properties index 89ab0d39b0b8..cfe5d62fc028 100644 --- a/airbyte-cdk/java/airbyte-cdk/core/src/main/resources/version.properties +++ b/airbyte-cdk/java/airbyte-cdk/core/src/main/resources/version.properties @@ -1 +1 @@ -version=0.43.2 \ No newline at end of file +version=0.43.3 diff --git a/airbyte-integrations/connectors/source-mysql/build.gradle b/airbyte-integrations/connectors/source-mysql/build.gradle index 6274a1d2c27a..03cdc30cfc3f 100644 --- a/airbyte-integrations/connectors/source-mysql/build.gradle +++ b/airbyte-integrations/connectors/source-mysql/build.gradle @@ -6,7 +6,7 @@ plugins { } airbyteJavaConnector { - cdkVersionRequired = '0.42.4' + cdkVersionRequired = '0.43.3' features = ['db-sources'] useLocalCdk = false } diff --git a/airbyte-integrations/connectors/source-mysql/metadata.yaml b/airbyte-integrations/connectors/source-mysql/metadata.yaml index e58e1aab68ad..60503190207f 100644 --- a/airbyte-integrations/connectors/source-mysql/metadata.yaml +++ b/airbyte-integrations/connectors/source-mysql/metadata.yaml @@ -9,7 +9,7 @@ data: connectorSubtype: database connectorType: source definitionId: 435bb9a5-7887-4809-aa58-28c27df0d7ad - dockerImageTag: 3.6.4 + dockerImageTag: 3.6.5 dockerRepository: airbyte/source-mysql documentationUrl: https://docs.airbyte.com/integrations/sources/mysql githubIssueLabel: source-mysql diff --git a/airbyte-integrations/connectors/source-postgres/build.gradle b/airbyte-integrations/connectors/source-postgres/build.gradle index a5aedb8f7987..fbf26ffebebe 100644 --- a/airbyte-integrations/connectors/source-postgres/build.gradle +++ b/airbyte-integrations/connectors/source-postgres/build.gradle @@ -12,7 +12,7 @@ java { } airbyteJavaConnector { - cdkVersionRequired = '0.43.2' + cdkVersionRequired = '0.43.3' features = ['db-sources', 'datastore-postgres'] useLocalCdk = false } diff --git a/airbyte-integrations/connectors/source-postgres/metadata.yaml b/airbyte-integrations/connectors/source-postgres/metadata.yaml index 1ba20a64a3d2..94dce795f4c3 100644 --- a/airbyte-integrations/connectors/source-postgres/metadata.yaml +++ b/airbyte-integrations/connectors/source-postgres/metadata.yaml @@ -9,7 +9,7 @@ data: connectorSubtype: database connectorType: source definitionId: decd338e-5647-4c0b-adf4-da0e75f5a750 - dockerImageTag: 3.6.9 + dockerImageTag: 3.6.10 dockerRepository: airbyte/source-postgres documentationUrl: https://docs.airbyte.com/integrations/sources/postgres githubIssueLabel: source-postgres diff --git a/docs/integrations/sources/mysql.md b/docs/integrations/sources/mysql.md index 17fe3d3bc2d2..f4b7afb5510c 100644 --- a/docs/integrations/sources/mysql.md +++ b/docs/integrations/sources/mysql.md @@ -233,6 +233,7 @@ Any database or table encoding combination of charset and collation is supported | Version | Date | Pull Request | Subject | |:--------|:-----------|:-----------------------------------------------------------|:------------------------------------------------------------------------------------------------------------------------------------------------| +| 3.6.5 | 2024-07-24 | [42417](https://github.com/airbytehq/airbyte/pull/42417) | Handle null error message in ConnectorExceptionHandler. | | 3.6.4 | 2024-07-23 | [42421](https://github.com/airbytehq/airbyte/pull/42421) | Remove final transient error emitter iterators. | | 3.6.3 | 2024-07-22 | [42024](https://github.com/airbytehq/airbyte/pull/42024) | Fix a NPE bug on resuming from a failed attempt. | | 3.6.2 | 2024-07-17 | [42087](https://github.com/airbytehq/airbyte/pull/42087) | Adding more error translations for MySql source. | diff --git a/docs/integrations/sources/postgres.md b/docs/integrations/sources/postgres.md index f81088bf9cd2..ff39705a6aee 100644 --- a/docs/integrations/sources/postgres.md +++ b/docs/integrations/sources/postgres.md @@ -311,6 +311,7 @@ According to Postgres [documentation](https://www.postgresql.org/docs/14/datatyp | Version | Date | Pull Request | Subject | |---------|------------|----------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 3.6.10 | 2024-07-23 | [42417](https://github.com/airbytehq/airbyte/pull/42417) | Handle null error message in ConnectorExceptionHandler. | | 3.6.9 | 2024-07-23 | [42421](https://github.com/airbytehq/airbyte/pull/42421) | Remove final transient error emitter iterators. | | 3.6.8 | 2024-07-22 | [41622](https://github.com/airbytehq/airbyte/pull/41622) | Bump CDK version to latest. | | 3.6.7 | 2024-07-22 | [42411](https://github.com/airbytehq/airbyte/pull/42411) | Hide the "initial load timeout in hours" field by default in UI | From a066968ff58bf7b584e2924975885db0f9f45706 Mon Sep 17 00:00:00 2001 From: Serhii Lazebnyi <53845333+lazebnyi@users.noreply.github.com> Date: Wed, 24 Jul 2024 13:47:41 +0200 Subject: [PATCH 4/6] fix[low-code] follow up #38829 (#42475) --- .../sources/declarative/parsers/model_to_component_factory.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airbyte-cdk/python/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py b/airbyte-cdk/python/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py index b8a884916bba..f5663b918e48 100644 --- a/airbyte-cdk/python/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +++ b/airbyte-cdk/python/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py @@ -1030,7 +1030,7 @@ def create_record_selector( self, model: RecordSelectorModel, config: Config, - decoder: Optional[Decoder], + decoder: Optional[Decoder] = None, *, transformations: List[RecordTransformation], client_side_incremental_sync: Optional[Dict[str, Any]] = None, From fe26d447188118d6855c775de9b0a7ffab74918f Mon Sep 17 00:00:00 2001 From: lazebnyi Date: Wed, 24 Jul 2024 11:52:09 +0000 Subject: [PATCH 5/6] =?UTF-8?q?=F0=9F=A4=96=20patch=20bump=20Python=20CDK?= =?UTF-8?q?=20to=20version=203.9.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- airbyte-cdk/python/CHANGELOG.md | 3 +++ airbyte-cdk/python/pyproject.toml | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/airbyte-cdk/python/CHANGELOG.md b/airbyte-cdk/python/CHANGELOG.md index 8c4ff3d1b315..b095d02d3277 100644 --- a/airbyte-cdk/python/CHANGELOG.md +++ b/airbyte-cdk/python/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog +## 3.9.2 +low-code: fix record selector factory when using custom components + ## 3.9.1 fix OOM on predicate for streamable responses diff --git a/airbyte-cdk/python/pyproject.toml b/airbyte-cdk/python/pyproject.toml index b5110a8f1b03..943ce6c99a0e 100644 --- a/airbyte-cdk/python/pyproject.toml +++ b/airbyte-cdk/python/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api" [tool.poetry] name = "airbyte-cdk" -version = "3.9.1" +version = "3.9.2" description = "A framework for writing Airbyte Connectors." authors = ["Airbyte "] license = "MIT" From fa1cd5d35c9e380c47b8ba081e20657aa2155487 Mon Sep 17 00:00:00 2001 From: lazebnyi Date: Wed, 24 Jul 2024 11:58:23 +0000 Subject: [PATCH 6/6] =?UTF-8?q?=F0=9F=A4=96=20Cut=20version=203.9.2=20of?= =?UTF-8?q?=20source-declarative-manifest?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../connectors/source-declarative-manifest/metadata.yaml | 2 +- .../connectors/source-declarative-manifest/poetry.lock | 8 ++++---- .../connectors/source-declarative-manifest/pyproject.toml | 4 ++-- docs/integrations/sources/low-code.md | 1 + 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/airbyte-integrations/connectors/source-declarative-manifest/metadata.yaml b/airbyte-integrations/connectors/source-declarative-manifest/metadata.yaml index 9ea4b5b18a93..0a0cdfdb8189 100644 --- a/airbyte-integrations/connectors/source-declarative-manifest/metadata.yaml +++ b/airbyte-integrations/connectors/source-declarative-manifest/metadata.yaml @@ -8,7 +8,7 @@ data: connectorType: source definitionId: 64a2f99c-542f-4af8-9a6f-355f1217b436 # This version should not be updated manually - it is updated by the CDK release workflow. - dockerImageTag: 3.10.2 + dockerImageTag: 3.10.3 dockerRepository: airbyte/source-declarative-manifest # This page is hidden from the docs for now, since the connector is not in any Airbyte registries. documentationUrl: https://docs.airbyte.com/integrations/sources/low-code diff --git a/airbyte-integrations/connectors/source-declarative-manifest/poetry.lock b/airbyte-integrations/connectors/source-declarative-manifest/poetry.lock index cccbbcc32c54..bdbd7c7bf567 100644 --- a/airbyte-integrations/connectors/source-declarative-manifest/poetry.lock +++ b/airbyte-integrations/connectors/source-declarative-manifest/poetry.lock @@ -2,13 +2,13 @@ [[package]] name = "airbyte-cdk" -version = "3.9.1" +version = "3.9.2" description = "A framework for writing Airbyte Connectors." optional = false python-versions = "<4.0,>=3.9" files = [ - {file = "airbyte_cdk-3.9.1-py3-none-any.whl", hash = "sha256:79dca800944a1c12580b6c209a5313314606a108bc111fdc078c1343967f2c02"}, - {file = "airbyte_cdk-3.9.1.tar.gz", hash = "sha256:444e5a64e76a58d58489ae85d91042a8f0d9109643ccc34a271b60082d47b427"}, + {file = "airbyte_cdk-3.9.2-py3-none-any.whl", hash = "sha256:7de3a1e78191da012ba6c74baf29eb8288b8240fc49a9d763046cd7938fb9862"}, + {file = "airbyte_cdk-3.9.2.tar.gz", hash = "sha256:3d5b238f8c06af5fed9a7308cf40f2baa5b521ff48f85bfc911d250e46cbe8b9"}, ] [package.dependencies] @@ -1407,4 +1407,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = "^3.9,<3.12" -content-hash = "6c61c783911b17c314815478120270f37890568c9081ded52a660c6a33fb53b8" +content-hash = "0fc12187d2d3f6d5df038d686267b4887657009c3d04978713921fd3aa886723" diff --git a/airbyte-integrations/connectors/source-declarative-manifest/pyproject.toml b/airbyte-integrations/connectors/source-declarative-manifest/pyproject.toml index b23ea9445379..76be3b95d6f1 100644 --- a/airbyte-integrations/connectors/source-declarative-manifest/pyproject.toml +++ b/airbyte-integrations/connectors/source-declarative-manifest/pyproject.toml @@ -3,7 +3,7 @@ requires = [ "poetry-core>=1.0.0",] build-backend = "poetry.core.masonry.api" [tool.poetry] -version = "3.10.2" +version = "3.10.3" name = "source-declarative-manifest" description = "Base source implementation for low-code sources." authors = [ "Airbyte ",] @@ -17,7 +17,7 @@ include = "source_declarative_manifest" [tool.poetry.dependencies] python = "^3.9,<3.12" -airbyte-cdk = "3.9.1" +airbyte-cdk = "3.9.2" [tool.poetry.scripts] source-declarative-manifest = "source_declarative_manifest.run:run" diff --git a/docs/integrations/sources/low-code.md b/docs/integrations/sources/low-code.md index afbf5d3ce28e..2de3bf98c027 100644 --- a/docs/integrations/sources/low-code.md +++ b/docs/integrations/sources/low-code.md @@ -9,6 +9,7 @@ The changelog below is automatically updated by the `bump_version` command as pa | Version | Date | Pull Request | Subject | | :------ | :--------- | :------------------------------------------------------- | :------------------------------------------------------------------- | +| 3.10.3 | 2024-07-24 | [36501](https://github.com/airbytehq/airbyte/pull/36501) | Bump CDK version to 3.9.2 | | 3.10.2 | 2024-07-23 | [36501](https://github.com/airbytehq/airbyte/pull/36501) | Bump CDK version to 3.9.1 | | 3.10.1 | 2024-07-20 | [42327](https://github.com/airbytehq/airbyte/pull/42327) | Update dependencies | | 3.10.0 | 2024-07-19 | [36501](https://github.com/airbytehq/airbyte/pull/36501) | Bump CDK version to 3.9.0 |