Skip to content

🎉 Migrate config persistence to database #4670

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 45 commits into from
Jul 19, 2021

Conversation

tuliren
Copy link
Contributor

@tuliren tuliren commented Jul 9, 2021

What

How

  • Next time users upgrade their Airbyte version, the following will take place:
    • An airbyte_configs table will be created in the internal airbyte database (only if this table has not been created yet).
      • This will only happen in ServerApp, but not in SchedulerApp to prevent race condition.
    • Existing configs from file-based config persistence will be copied to this new table (only if this table is empty).
  • With extra parameters, it is possible to specify an external database for the configs.

Recommended reading order

  1. airbyte_configs_table.sql - table schema for the airbyte_configs table
  2. ConfigPersistenceFactory.java - how configs are migrated from file-based persistence to the database persistence
  3. DatabaseConfigPersistence.java

@github-actions github-actions bot added area/platform issues related to the platform area/documentation Improvements or additions to documentation labels Jul 9, 2021
@tuliren tuliren force-pushed the liren/db-config-persistence-v2 branch 2 times, most recently from 51cda74 to dc86c62 Compare July 13, 2021 22:59
@tuliren tuliren marked this pull request as ready for review July 14, 2021 15:47
Comment on lines 48 to 50
- CONFIG_DATABASE_USER=${CONFIG_DATABASE_USER}
- CONFIG_DATABASE_PASSWORD=${CONFIG_DATABASE_PASSWORD}
- CONFIG_DATABASE_URL=${CONFIG_DATABASE_URL}
Copy link
Contributor

@ChristopheDuong ChristopheDuong Jul 15, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This will throw warnings when running docker-compose up if the variables are not defined in the .env file. Some user got confused by those warnings in the past.

So, maybe it's worth setting default values as "" or explicitly set the same values as DATABASE_* variables in the .env instead?

Another option is to explicitly express this in the docker-compose:

Suggested change
- CONFIG_DATABASE_USER=${CONFIG_DATABASE_USER}
- CONFIG_DATABASE_PASSWORD=${CONFIG_DATABASE_PASSWORD}
- CONFIG_DATABASE_URL=${CONFIG_DATABASE_URL}
- CONFIG_DATABASE_USER=${CONFIG_DATABASE_USER:-$DATABASE_USER}
- CONFIG_DATABASE_PASSWORD=${CONFIG_DATABASE_PASSWORD:-$DATABASE_PASSWORD}
- CONFIG_DATABASE_URL=${CONFIG_DATABASE_URL:-$DATABASE_URL}

Copy link
Contributor Author

@tuliren tuliren Jul 19, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This somehow sets CONFIG_DATABASE_USER to literally $DATABASE_USER, instead of the value of that variable. Default it to empty string works:

CONFIG_DATABASE_USER=${CONFIG_DATABASE_USER:-}

@@ -255,10 +276,10 @@ private long getEnvOrDefault(String key, long defaultValue) {

private <T> T getEnvOrDefault(String key, T defaultValue, Function<String, T> parser) {
final String value = getEnv.apply(key);
if (value != null) {
if (value != null && !value.isEmpty()) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes! This has bitten us a few times...

@@ -50,6 +50,9 @@
// AirbyteMetadata
AIRBYTE_METADATA("AirbyteMetadata.yaml");

// TODO: add airbyte_configs table
// AIRBYTE_CONFIGS("AirbyteConfigs.yaml");
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TODO reminder bot

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't plan to address this TODO in this PR. Adding this enum will break the auto migration tests. I will look into it in the migration project.

.env Outdated
@@ -9,6 +9,15 @@ DATABASE_DB=airbyte
# translate manually DATABASE_URL=jdbc:postgresql://${DATABASE_HOST}:${DATABASE_PORT/${DATABASE_DB}
DATABASE_URL=jdbc:postgresql://db:5432/airbyte

# By default, the Config Database is the same as the Job Database.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't like the increased optionality around a custom config database here. Is there a reason we want to encourage separating this?

For users that were previously on the job database for configs, we don't want to handle migrating configs to the config database or having multiple versions of configs sitting around if we can help it.

It isn't clear to me what the benefit is, and it seems to just increase operational complexity.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We do want to have the option to separate the two databases. But I don't think we want to encourage it, at least for self-deployed instances.

The benefits of separating the two databases are:

  1. The jobs database and the configs database have different usage patterns. The former can grow much quicker than the latter (because we track job attempts there).
  2. The configs database contain secrets. So people may want extra security procedure around it.

What about if I remove the comments in the .env file, and only mention it in the documentation? In this way, we are not encouraging people to do it.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removing them from the .env will result in warning messages about missing environment variables. So I added them back with comments:

# Airbyte Internal Config Database, default to reuse the Job Database
# Usually you do not need to change them
CONFIG_DATABASE_USER=${DATABASE_USER}
CONFIG_DATABASE_PASSWORD=${DATABASE_PASSWORD}
CONFIG_DATABASE_URL=${DATABASE_URL}

/**
* By default, this factory returns a database config persistence. it can still return a file system
* config persistence for testing purpose. This legacy feature should be removed after the file to
* database migration is completely done.
Copy link
Contributor

@ChristopheDuong ChristopheDuong Jul 15, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm thinking it would be really nice to keep a working file-based config persistence and not necessarily remove it permanently...

If this file config persistence reads/writes from a docker volume that is mounted from a local folder of the filesystem (like what the LOCAL_ROOT does) rather than a named docker volume, then a user could configure a CI running as part of their git repository versioning their airbyte setup. This setup could include (tests) configurations and once the CI is successful, they could publish in the same workflow their final changes to a remote Airbyte Database config persistence that would affect their airbyte instance in production for example.

WDYT?

Copy link
Contributor

@jrhizor jrhizor Jul 15, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just curious, what benefits do you see from working with a file-based config persistence vs just using import/export capabilities?

Copy link
Contributor Author

@tuliren tuliren Jul 15, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess what Chris means is that if we keep the file config persistence code, users can still manipulate the configs using the code?

Copy link
Contributor

@ChristopheDuong ChristopheDuong Jul 16, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For import/export capabilities, we'd have what is currently exposed as:

  • getDbPersistenceWithYamlSeed: (standard files released with airbyte)
  • getDbPersistenceWithFileSeed: (old named docker volumes)

In the future, I am guessing we could have something like these?

  • getDbPersistenceWithYamlSeedFromGitRepo: clones a remote git repo where seeds are stored to re-init the DB from those
  • getDbPersistenceWithYamlSeedFromArchive: same but from a local/remote .tar.gz archive file
  • getDbPersistenceWithYamlSeedFromLocalFolder: same but from a local folder (no need to compress into an archive or push to a repo?)

Just curious, what benefits do you see from working with a file-based config persistence vs just using import/export capabilities?
if we keep the file config persistence code, users can still manipulate the configs using the code?

Yes.

For dev/test purposes, you can more easily edit/test your airbyte configurations locally by manually/programmatically editing the configs in parallel without having to restart airbyte all the time to re-init the database (re-deploy your changes)?

Plus the code is almost already written for that, so it could be worth keeping around
Of course, for production usage, it's better to go through the database

@tuliren
Copy link
Contributor Author

tuliren commented Jul 18, 2021

Here is the plan for config persistence migration:
https://docs.google.com/document/d/1lBmzvL0Wc52amz0zAVaxtAn726rJJBfJTfB-diglfYw/edit#

Should we delete the old config volume? Or do something with it? Even if we don't do it now, what's the path for getting rid of it?

Ideally yes. But since we cannot force users to upgrade, it seems that we must always keep it so that users previously on an old Airbyte version can still move the data out of it.

Should we just entirely get rid of the FileBasedConfigPersistence? Again, doesn't need to be now, but since we are forcing everything to use the postgres one right now, it seems like we may want to permanently deprecate it?

Yes. We can do this in a future version.

Some of the the logic in the ConfigPersistenceBuilder is essentially code to migrate from the file database to the postgres database. How do we need think about keeping that code? For example, we may deprecate the file based database completely. When can we remove the code that does this migration stuff? Is it never? Maybe it is the sort of thing where we need to force a user to migrate in steps. Like if you were on version 0.14 and you want to go to version 99.4.0 First you need to migrate from 0.14 => 0.30.0. Turn everything on and off and then you migrate from 0.30.0 => 99.4.0. That way after version 0.30.0 we can safely drop that code that that moves data from file datastore to the postgres one. I just want to make sure we've thought about this enough that we don't box ourselves in. Probably nothing we need to do differently now.

Not sure if this kind of operation overhead is acceptable for users. Alternatively we can move the migration code out of the ConfigPersistenceBuilder and move it to a script. The script will be there forever. But in this way, we can avoid forcing people to upgrade to an intermediate version.

Are there any edge cases we need to worry about? Specifically, I'm wondering if a user is not using the postgres database for the jobs database that we provide will they run into problems? Definitely not the end of the world if this is just not going to work for this case, but it would be good to know about it ahead of time in case it comes up.

This is a good point that people may already be using non-postgres for the jobs database. I should make the airbyte_configs script general enough for other databases (i.e. drop the default UUID function for the config_id column).

I am pretty worried about unknown edge cases. Still thinking about it.

@@ -93,7 +94,8 @@ private void exportVersionFile(Path tempFolder) throws IOException {
}

private void dumpDatabase(Path parentFolder) throws Exception {
final Map<String, Stream<JsonNode>> tables = jobPersistence.dump();
final Map<String, Stream<JsonNode>> tables = jobPersistence.exportDatabase().entrySet().stream()
.collect(Collectors.toMap(e -> e.getKey().name(), Entry::getValue));
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we dump any table that exists in the database, the migration will break here, because each extra table will result in its own ResourceId for airbyte_job, which does not match any input stream from the migration. This concern was previously raised by @ChristopheDuong in #3980 (comment).

@subodh1810, is there any concern to change the dump method here to exportDatabase? In the future, the database is no longer just for job tables. The config table may exist there as well.

@tuliren tuliren force-pushed the liren/db-config-persistence-v2 branch from fde7d0a to d99cda7 Compare July 19, 2021 05:40
@tuliren tuliren changed the title Implement database config persistence 🎉 Migrate config persistence to database Jul 19, 2021
@tuliren
Copy link
Contributor Author

tuliren commented Jul 19, 2021

The Acceptance Tests (Kube) job seems very suspicious.

In a previous run it failed because the default workspace definition could not be found in the config persistence, which seems to be a db config persistence issue.

2021-07-19 05:50:17 INFO i.a.c.p.DatabaseConfigPersistence(lambda$loadData$3):101 - ***workspace_app_root=/workspace/server/logs*** - Loading data to config database...
2021-07-19 05:50:17 INFO i.a.c.p.DatabaseConfigPersistence(lambda$loadData$3):114 - ***workspace_app_root=/workspace/server/logs*** - Config database data loading completed
2021-07-19 05:50:17 ERROR i.a.s.ServerApp(setCustomerIdIfNotSet):197 - ***workspace_app_root=/workspace/server/logs*** - Could not find workspace with id: 5ae6b09b-fdec-41af-aaf7-7d94cfc33ef6
io.airbyte.config.persistence.ConfigNotFoundException: config type: STANDARD_WORKSPACE id: 5ae6b09b-fdec-41af-aaf7-7d94cfc33ef6
	at io.airbyte.config.persistence.DatabaseConfigPersistence.getConfig(DatabaseConfigPersistence.java:129) ~[io.airbyte.airbyte-config-persistence-0.27.3-alpha.jar:?]
	at io.airbyte.config.persistence.ValidatingConfigPersistence.getConfig(ValidatingConfigPersistence.java:55) ~[io.airbyte.airbyte-config-persistence-0.27.3-alpha.jar:?]
	at io.airbyte.config.persistence.ConfigRepository.getStandardWorkspace(ConfigRepository.java:55) ~[io.airbyte.airbyte-config-persistence-0.27.3-alpha.jar:?]
	at io.airbyte.server.ServerApp.setCustomerIdIfNotSet(ServerApp.java:185) [io.airbyte-airbyte-server-0.27.3-alpha.jar:?]
	at io.airbyte.server.ServerApp.runServer(ServerApp.java:218) [io.airbyte-airbyte-server-0.27.3-alpha.jar:?]
	at io.airbyte.server.ServerApp.main(ServerApp.java:264) [io.airbyte-airbyte-server-0.27.3-alpha.jar:?]

So I added logging about what data is loaded into the db config persistence upon server startup, 449cb30, which did not change any code logic but a logging.

+    LOGGER.info("Inserting {} record {}", configType, configId);

And in the next run, the kube acceptance test succeeded. The logs also showed that all initial seed data was indeed injected into the db config persistence.

2021-07-19 06:38:50 INFO i.a.c.p.DatabaseConfigPersistence(lambda$loadData$3):101 - ***workspace_app_root=/workspace/server/logs*** - Loading data to config database...
2021-07-19 06:38:50 INFO i.a.c.p.DatabaseConfigPersistence(insertConfigRecord):205 - ***workspace_app_root=/workspace/server/logs*** - Inserting STANDARD_WORKSPACE record 5ae6b09b-fdec-41af-aaf7-7d94cfc33ef6

This is the last blocker to merge this PR. I will think about what could be the root cause.

@tuliren tuliren force-pushed the liren/db-config-persistence-v2 branch from 10755ea to fb0638e Compare July 19, 2021 09:43
`.env` file does not support variable expansion.
@tuliren tuliren merged commit e577b49 into master Jul 19, 2021
@tuliren tuliren deleted the liren/db-config-persistence-v2 branch July 19, 2021 10:52
antixar pushed a commit that referenced this pull request Jul 22, 2021
* Implement db config persistence

* Fix database readiness check

* Reduce logging noise

* Setup config database in config persistence factory

* Update documentation

* Load seed from yaml files

* Refactor config persistence factory

* Add one more test to mimic migration

* Remove unnecessary changes

* Run code formatter

* Update placeholder env values

* Set default config database parameters in docker compose

Co-authored-by: Christophe Duong <[email protected]>

* Default setupDatabase to false

* Rename variable

* Set default config db parameters for server

* Remove config db parameters from the env file

* Remove unnecessary environment statements

* Hide config persistence factory (#4772)

* Remove CONFIG_DATABASE_HOST

* Use builder in the test

* Simplify config persistence builder

* Clarify config db connection readiness

* Format code

* Add logging

* Fix typo

Co-authored-by: Christophe Duong <[email protected]>

* Add a config_id only index

* Reuse record insertion code

* Add id field name to config schema

* Support data loading from legacy config schemas

* Log missing logs in migration test

* Move airbyte configs table to separate directory

* Update exception message

* Dump specific tables from the job database

* Remove postgres specific uuid extension

* Comment out future branch

* Default configs db variables to empty

When defaulting them to the jobs db variables, it somehow does not work.

* Log inserted config records

* Log all db write operations

* Add back config db variables in env file to mute warnings

* Log connection exception to debug flaky e2e test

* Leave config db variables empty

`.env` file does not support variable expansion.

Co-authored-by: Christophe Duong <[email protected]>
Co-authored-by: Charles <[email protected]>
antixar added a commit that referenced this pull request Aug 2, 2021
* init the new connector source-zendesk-support

* Finished a development of ZenDesk streams

* Source ZenDesk: finished

* Source ZenDesk: remove unused test files

* Source ZenDesk: format and validate code

* Source Zendesk: update docs

* Remove unused files

* add a stream_slices logic for ticket_comments stream

* 🎉 Python CDK: Allow setting network adapter args on outgoing HTTP requests  (#4493)

* 🎉 Destination S3: support `anyOf` `allOf` and `oneOf` (#4613)

* Support combined restrictions in json schema

* Bump s3 version

* Add more test cases

* Update changelog

* Add more test cases

* Update documentation

* Format code

* SAT: verify `AIRBYTE_ENTRYPOINT` is defined (#4478)

* save changes required for work; TODO locate all places that need to be updated to make test working

* move new test inside test_spec

* apply suggestions

* change return type + add check env = space_joined_entrypoint

* requested

* add check entrypoint with env

* bump SAT --version && changelog update

* merge && fix changelog

* changes

* add dynamic docker runner creator + test having properties

* update the names

* change names

* make fixtures

* upd text

* Update airbyte-integrations/bases/source-acceptance-test/unit_tests/test_spec_unit.py

Co-authored-by: Eugene Kulak <[email protected]>

* requested changes

* Update airbyte-integrations/bases/source-acceptance-test/unit_tests/test_spec_unit.py

Co-authored-by: Eugene Kulak <[email protected]>

* Update airbyte-integrations/bases/source-acceptance-test/unit_tests/test_spec_unit.py

Co-authored-by: Eugene Kulak <[email protected]>

* apply requested changes

* change names (requested)

* move binary strings to standard with convertation in builder

* fixing merge-conflict side effect

Co-authored-by: Eugene Kulak <[email protected]>

* Migrate Quickstart to use PokeAPI (#4615)

* Migrate Quickstart to use PokeAPI

* Words words words

Co-authored-by: Abhi Vaidyanatha <[email protected]>

* Left isn't right (#4616)

Co-authored-by: Abhi Vaidyanatha <[email protected]>

* Create on on-oci-vm.md (#4468)

* Create on on-oci-vm.md

Deployment guide for Airbyte on Oracle Cloud Infrastructure (OCI) VM

* Update on-oci-vm.md

Adding the image links and uploading images to the repository

* Update docs/deploying-airbyte/on-oci-vm.md

Co-authored-by: Abhi Vaidyanatha <[email protected]>

* Update docs/deploying-airbyte/on-oci-vm.md

Co-authored-by: Abhi Vaidyanatha <[email protected]>

* Update docs/deploying-airbyte/on-oci-vm.md

Co-authored-by: Abhi Vaidyanatha <[email protected]>

* Update docs/deploying-airbyte/on-oci-vm.md

Co-authored-by: Abhi Vaidyanatha <[email protected]>

* Update docs/deploying-airbyte/on-oci-vm.md

Co-authored-by: Abhi Vaidyanatha <[email protected]>

* Update docs/deploying-airbyte/on-oci-vm.md

Co-authored-by: Abhi Vaidyanatha <[email protected]>

* Update docs/deploying-airbyte/on-oci-vm.md

Co-authored-by: Abhi Vaidyanatha <[email protected]>

* Update docs/deploying-airbyte/on-oci-vm.md

Co-authored-by: Abhi Vaidyanatha <[email protected]>

* Update docs/deploying-airbyte/on-oci-vm.md

Co-authored-by: Abhi Vaidyanatha <[email protected]>

* Update docs/deploying-airbyte/on-oci-vm.md

Co-authored-by: Abhi Vaidyanatha <[email protected]>

* Update on-oci-vm.md

* Add files via upload

* Update on-oci-vm.md

* Add files via upload

* Update on-oci-vm.md

* Update on-oci-vm.md

Co-authored-by: Abhi Vaidyanatha <[email protected]>

* 🐛  platform: Fix silent failures in sources (#4617)

* add oracle dpeloyment guide to summary.md (#4619)

* Mailchimp fix url-base (#4621)

* minimal change to show acceptance test failure

* exactly fix

* bump version and readme

* upd

* 🎉 New Source: Paypal Transaction (#4240)

* Added spec.json

* Initialization

* added oauth2 autorization

* added spec, check, discover + catalogs/configurared_catalogs

* updated request_params

* added paging, slicing (1d)

* Use oath2 for paypal

* incremental sync, acceptance test

* incremental sync, acceptance test

* Added spec.json

* Initialization

* added oauth2 autorization

* added spec, check, discover + catalogs/configurared_catalogs

* updated request_params

* added paging, slicing (1d)

* Use oath2 for paypal

* incremental sync, acceptance test

* incremental sync, acceptance test

* Added spec.json

* Initialization

* added oauth2 autorization

* added spec, check, discover + catalogs/configurared_catalogs

* updated request_params

* added paging, slicing (1d)

* Use oath2 for paypal

* incremental sync, acceptance test

* updated slices and api limits, added validation for input dates

* added tests, fixed cursor related information in schemas and configured catalogs, removed old comments, re-arranged Base PaypalTransactionStream class

* added input param 'env' to support production and sandbox envs

* added support for sandbox option, updated pattern for optional end date option

* added github secrets

* added support for sandbox option, updated pattern for optional end date option

* fixed Copyright date, removed debug mesages

* added docs

* fix for test failure - The sync should produce at least one STATE message

* removed optional parameter 'end_date'

* removed detailed info about balances schema

* Delete employees.json

* Delete customers.json

* Added requests_per_minute rate limit

* added unit tests, added custom backoff

* added test for stream slices with stream state

* removed comments

* updated docs pages

* fixed format for json files

* fixed types in schemas and link to the schema. fixed primary key for Transactions stream

* updated stream slices

* Updated tests, unified stream_slices for both streams, all instance variables instantiated directly in __init__ method

* added CHANGELOG.md

* Added build seeds

* fixed closing double quotation mark

* added paypal entry in builds.md

* add fixture helper

* added paypal transaction generator script

* fixed styling

* maximum allowed start_date is extracted from API response now.

* fixed schemas

* fixed schemas - removed datetime

* now maximum_allowed_start_date is identified by last_refreshed_datetime attr in API response.

* added possibility to specify additional properties

Co-authored-by: Sherif Nada <[email protected]>

* set db version after full import is complete (#4626)

* set db version after full import is complete

* check db version in the last step

* add comment

* Fix docs formatting

* Redirect old link to upgrading tutorial (#4635)

Co-authored-by: Abhi Vaidyanatha <[email protected]>

* Fix broken link in SUMMARY.md

* Airflow Demo: Remove superset in down.sh (#4638)

* Remove superset in down.sh

* Clean up superset containers before creating them in up.sh

Co-authored-by: Abhi Vaidyanatha <[email protected]>

* Airflow demo: Clean up scripts and more clearly describe actions (#4639)

* Airflow demo: Script cleanup

* Correct docker compose name for airflow file

* Final fixes

* Clean up airbyte destination

Co-authored-by: Abhi Vaidyanatha <[email protected]>

* 🎉 Add documentation for configuring Kube GCS logging. (#4622)

* Bump version: 0.27.0-alpha → 0.27.1-alpha (#4640)

* 0.27.1 Platform Patch Notes (#4644)

Co-authored-by: Abhi Vaidyanatha <[email protected]>

* 🎉 New Source: Zendesk Sunshine (#4359)

* pre-PR

* add git config

* format

* Update airbyte-integrations/connectors/source-zendesk-sunshine/requirements.txt

upd requirements.txt remove extra

Co-authored-by: Eugene Kulak <[email protected]>

* Update airbyte-integrations/connectors/source-zendesk-sunshine/source_zendesk_sunshine/streams.py

backoff time int to float (btw real return type in headers is integer)

Co-authored-by: Eugene Kulak <[email protected]>

* requested changes

* fix newline absence && rm unnecessary temp file

* url_base to property

* rm extra var coming property

* rm extra var coming property

* save

* finishing updating the documentation

* forgotten definition

* add nullable to pass the test

* fix date in the log

Co-authored-by: Eugene Kulak <[email protected]>

* 0.27.1 Connector Patch Notes (#4646)

Co-authored-by: Abhi Vaidyanatha <[email protected]>

* Update connector certification table. (#4647)

Co-authored-by: Abhi Vaidyanatha <[email protected]>

* 🐛 Stub out the GCP Env Var in Docker to prevent noisy and harmless errors. (#4642)

* Add this to prevent noisy errors.

* Add hint to Airflow guide about local example (#4656)

Co-authored-by: Abhi Vaidyanatha <[email protected]>

* fix version for kube automatic migration support (#4649)

* format zendesk sunshine connector (#4658)

* 🎉 New source: Dixa (#4358)

* Turn on MYSQL normalization flag. (#4651)

* Turn on normalization flag. Bump versions

* Combine admin and settings (#4525)

* Add side menu component

* Add side menu to settings page. Remove admin link from sidebar

* Move NotificationPage

* Move ConfigurationPage

* Add Sources and Destinations pages to Settings. Delete Admin page

* Add MetricsPage

* Edit Notifications and Metrics pages

* Update feedback for metrics and notification pages

* Add update icons data to side menu

* Add AccountPage

* Job history purging (#4575)

* WIP: Job history purging

* Created test cases that handle variations of job history purging configuration

* Typo fix

* Expanded test cases to control for job history on multiple connections at once.

* Handle latest job with saved state correctly regardless of order of ids

* Whitespace

* Externalized sql. Cleaned up constants.

* Cleaned up test case persistence code and structure

* Whitespace and formatting per standard tooling.

* 0.27.1 Announcement Summary (#4678)

Co-authored-by: Abhi Vaidyanatha <[email protected]>

* 🐛 Source Sendgrid: add start_time config and correct primary_key (#4682)

* add start_time config and correct primary_key

* correct integration tests

* correct type

* config txt and primary_key

* test to show how automatic migration handles deprecated definitions (#4655)

* test to show definitions not present in latest seed would be deleted in automatic migration

* format

* add deprecated config being used scenario

* Source dixa: fix unit tests (#4690)

* introduce common abstraction for CDC via debezium (#4580)

* wip

* add file

* final structure

* few more updates

* undo unwanted changes

* add abstract test + more refinement

* remove CDC metadata to debezium

* rename class + add missing property

* move debezium to bases + upgrade debezium version + review comments

* downgrade version + minor fixes

* reset to minutes

* fix build

* address review comments

* should return Optional

* use common abstraction for CDC via debezium for mysql (#4604)

* use new cdc abstraction for mysql

* undo wanted change

* pull in latest changes

* use renamed class + move constants to MySqlSource

* bring in latest changes from cdc abstraction

* format

* bring in latest changes

* pull in latest changes

* use common abstraction for CDC via debezium for postgres (#4607)

* use cdc abstraction for postgres

* add files

* ready

* use renamed class + move constants to PostgresSource

* bring in the latest changes

* bring in latest changes

* pull in latest changes

* Source Dixa: Pin tz in ConversationExport.ms_timestamp_to_datetime (#4696)

* Source Dixa: add to connector index (#4701)

* allow injecting filters for server (#4677)

* allow injecting filters

* fmt

* upgrade postgres version for new cdc abstraction (#4702)

* Fix dependencies for Superset demo (#4705)

* Fix superset dependency location

* Add some Superset setup

Co-authored-by: Abhi Vaidyanatha <[email protected]>

* 📚  add SSH instructions for OCI VM setup (#4684)

Co-authored-by: Sherif A. Nada <[email protected]>

* upgrade mysql version for new cdc abstraction (#4703)

* Update with ALTER TABLE statements (#4707)

Co-authored-by: Abhi Vaidyanatha <[email protected]>

* remove unused deps (#4512)

Co-authored-by: Davin Chia <[email protected]>

* fix config init race condition (#4679)

* 🐛 Destination S3: fix minio output for parquet format

* Bump destination s3 version (#4718)

* Fix scheduler race condition. (#4691)

* Periodic connector tests workflow: add `Accept` header per github docs recommendation (#4722)

* allow launching integration tests from workflow dispatch (#4723)

* Bump version: 0.27.1-alpha → 0.27.2-alpha (#4724)

* 🐛 Source Square: Update _send_request method due to changes in Airbyte CDK (#4645)

* 🎉 Destination Snowflake: tag snowflake traffic with airbyte ID to enable optimizations from Snowflake (#4713)

* 🎉 New source: Typeform (#4541)

Typeform source: Forms and Responses streams

* Upgrade postgres and redshift destination to remove basic_normalization attribute (#4725)

* upgrade snowflake,redshift,postgres to remove basic_normalization

* undo snowflake

* undo snowflaketest

* fix broken assertions for automatic migration tests (#4732)

* Slightly improve sed-based yaml parsing (#4721)

Previous sed did not handle the valid `profile: foo`

* throw exception if we close engine before snapshot is complete + increase timeout for subsequent records (#4730)

* throw exception if we close engine before snapshot is complete + increase timeout for subsequent records

* add comment + bump postgres version to use new changes

* allow publishing airbyte-server to local maven repo (#4717)

* allow publishing airbyte-server to local maven repo

* Stub this out so the name that is created is airbyte-server-0.27.1-alpha.jar and not airbyte-server-0.27.1-alpha-all.jar.

* Add comments.

* see if this fixes build

Co-authored-by: Davin Chia <[email protected]>

* CDK: Add initial Destination abstraction and tests (#4719)

Co-authored-by: Eugene Kulak <[email protected]>

* Update docs on GitHub connector now that its Airbyte native (#4739)

Co-authored-by: Abhi Vaidyanatha <[email protected]>

* Remove statement about Postgres connector being based on Singer (#4740)

Co-authored-by: Abhi Vaidyanatha <[email protected]>

* fix flaky migration acceptance test (#4743)

* upgrade fabric8 client (#4738)

* 🎉 Source MSSQL: implementation for CDC (#4689)

* first few classes for mssql cdc

* wip

* mssql cdc working against unit tests

* increment version

* add cdc acceptance test

* tweaks

* add file

* working on comprehensive tests

* change isolation from snapshot to read_committed_snapshot

* finalised type tests

* Revert "change isolation from snapshot to read_committed_snapshot"

This reverts commit 20c6768.

* small docstring fix

* remove unused imports

* stress test fixes

* minor formatting improvements

* mssql cdc docs

* finish off cdc docs

* format fix

* update connector version

* add to changelog

* fix for sql server agent offline failing cdc enable on tables

* final structure

* few more updates

* undo unwanted changes

* add abstract test + more refinement

* remove CDC metadata to debezium

* use new cdc abstraction for mysql

* undo wanted change

* use cdc abstraction for postgres

* add files

* pull in latest changes

* ready

* rename class + add missing property

* use renamed class + move constants to MySqlSource

* use renamed class + move constants to PostgresSource

* move debezium to bases + upgrade debezium version + review comments

* downgrade version + minor fixes

* bring in latest changes from cdc abstraction

* reset to minutes

* bring in the latest changes

* format

* fix build

* address review comments

* bring in latest changes

* bring in latest changes

* use common abstraction for CDC via debezium for sql server

* remove debezium from build

* finalise PR

* should return Optional

* pull in latest changes

* pull in latest changes

* address review comments

* use common abstraction for CDC via debezium for mysql (#4604)

* use new cdc abstraction for mysql

* undo wanted change

* pull in latest changes

* use renamed class + move constants to MySqlSource

* bring in latest changes from cdc abstraction

* format

* bring in latest changes

* pull in latest changes

* use common abstraction for CDC via debezium for postgres (#4607)

* use cdc abstraction for postgres

* add files

* ready

* use renamed class + move constants to PostgresSource

* bring in the latest changes

* bring in latest changes

* pull in latest changes

* lower version for tests to run on CI

* format

* Update docs/integrations/sources/mssql.md

Co-authored-by: Sherif A. Nada <[email protected]>

* addressing review comments

* fix for testGetTargetPosition

* format changes

Co-authored-by: George Claireaux <[email protected]>
Co-authored-by: Sherif A. Nada <[email protected]>

* bump up MSSQL version for cdc (#4694)

* first few classes for mssql cdc

* wip

* mssql cdc working against unit tests

* increment version

* add cdc acceptance test

* tweaks

* add file

* working on comprehensive tests

* change isolation from snapshot to read_committed_snapshot

* finalised type tests

* Revert "change isolation from snapshot to read_committed_snapshot"

This reverts commit 20c6768.

* small docstring fix

* remove unused imports

* stress test fixes

* minor formatting improvements

* mssql cdc docs

* finish off cdc docs

* format fix

* update connector version

* add to changelog

* fix for sql server agent offline failing cdc enable on tables

* final structure

* few more updates

* undo unwanted changes

* add abstract test + more refinement

* remove CDC metadata to debezium

* use new cdc abstraction for mysql

* undo wanted change

* use cdc abstraction for postgres

* add files

* pull in latest changes

* ready

* rename class + add missing property

* use renamed class + move constants to MySqlSource

* use renamed class + move constants to PostgresSource

* move debezium to bases + upgrade debezium version + review comments

* downgrade version + minor fixes

* bring in latest changes from cdc abstraction

* reset to minutes

* bring in the latest changes

* format

* fix build

* address review comments

* bring in latest changes

* bring in latest changes

* use common abstraction for CDC via debezium for sql server

* remove debezium from build

* finalise PR

* should return Optional

* pull in latest changes

* pull in latest changes

* address review comments

* use common abstraction for CDC via debezium for mysql (#4604)

* use new cdc abstraction for mysql

* undo wanted change

* pull in latest changes

* use renamed class + move constants to MySqlSource

* bring in latest changes from cdc abstraction

* format

* bring in latest changes

* pull in latest changes

* use common abstraction for CDC via debezium for postgres (#4607)

* use cdc abstraction for postgres

* add files

* ready

* use renamed class + move constants to PostgresSource

* bring in the latest changes

* bring in latest changes

* pull in latest changes

* lower version for tests to run on CI

* bump up mssql version for cdc

* format

* Update docs/integrations/sources/mssql.md

Co-authored-by: Sherif A. Nada <[email protected]>

* addressing review comments

* fix for testGetTargetPosition

* format changes

Co-authored-by: George Claireaux <[email protected]>
Co-authored-by: Sherif A. Nada <[email protected]>

* fixed broken links and styling (#4747)

* Fix enabling connection in refresh catalog mode (#4527)

* Fix enabling connection in refresh catalog mode

* Do not update deprecated connectors (#4674)

* Do not update deprecated connectors

* Fix various connectorDefinition issues: disappearing button, wrong id used for destination update

* 🐛 Source Slack: add float_ts field (#4683)

* rename float_ts to ts cursor_field

* add float_ts

* change float_ts to number

* change channel_msg

* bump version

* increase default timeout_seconds slack acc test

* timeout_seconds to 1750

* timeout_seconds to 3600 :p

* add changelog for slack connector

* copy docs to webapp docker image (#4522)

* use kube service user for pod sweeper (#4737)

* use kube service user for pod sweeper

* add pod sweeper logs

* temporarily switch to stable for testing

* temporarily remove building steps for kube testing since it can use prod images

* output date strings from date command

* load stable images

* remove loading since it can pull the images

* increase window for success storage to two hours

* revert test logging changes

* 🐛 Source GitHub: fix bug with `IssueEvents` stream and add handling for rate limiting (#4708)

* Few updates for GitHub source

Set correct `cursor_field` for `IssueEvents` stream.
Add rate limit handling.
Add handling for 403 error.
Add handling for 502 error.

Co-authored-by: Eugene Kulak <[email protected]>
Co-authored-by: Sherif A. Nada <[email protected]>

* 🐛 Fix some api-spec errors. (#4742)

* Source PostHog: Use account information for checking the connection (#4692)

* this should fix the check if no records in annotations stream

* update schemas for new SAT requirements && apply user hint upgrade on wrong api key

* save schema upd

* upd insights schema

* upd insights schema2

* upd insights schema3

* upd insights schema4

* upd insights schema5 (null is joking)

* upd insights schema6 (null is joking)

* upd insights schema7

* upd insights schema8

* upd insights schema8

* bump version && docs

* SAT: Improve error message when data mismatches schema (#4753)

* improve message when data mismatch schema

Co-authored-by: Eugene Kulak <[email protected]>

* increase sleep duration + show logs in CI (#4756)

* Fixed cockroachdb repo image (#4758)

* Bump version: 0.27.2-alpha → 0.27.3-alpha (#4761)

* update kube docs (#4749)

* fix kube overlay version (#4765)

* Split Platform and Connector Builds (#4514)

* remove second docs check in build(#4766)

* Restore template generator and fix formatting. (#4768)

* connector generate: fix chown logic (#4774)

* Remove example use cases from docs (#4775)

Co-authored-by: Abhi Vaidyanatha <[email protected]>

* Update README.md

* 🎉 All java connectors: Added configValidator to check, discover, read and write calls (#4699)

* Added configValidator to java connectors

* 🎉 Stripe Source: Fix subscriptions stream to return all kinds of subscriptions (including expired and canceled) (#4669)

#4669 Stripe Source: Fix subscriptions stream to return all kinds of subscriptions (including expired and canceled)
Co-authored-by: Oleksandr Bazarnov <[email protected]>

* Add note about orphaned Airbyte configs preventing automatic upgrades (#4709)

* Add note about removing orphaned Airbyte configs

* Remove excess baggage

* Add a resetting section to make this more clear.

Co-authored-by: Abhi Vaidyanatha <[email protected]>

* Patch 0.27.2 and 0.27.3 platform notes (#4792)

Co-authored-by: Abhi Vaidyanatha <[email protected]>

* Connector notes for 0.27.3 (#4794)

Co-authored-by: Abhi Vaidyanatha <[email protected]>

* Add new logo to GitHub page (#4796)

Co-authored-by: Abhi Vaidyanatha <[email protected]>

* 🎉 New Destination: Google Cloud Storage (#4784)

* Adding Google Cloud Storage as destination

* Removed few comments and amended the version

* Added documentation in docs/integrations/destinations/gcs.md

* Amended gcs.md with the right pull id

* Implemented all the fixes requested by tuliren as per #4329

* Renaming all the files

* Branch alligned to S3 0.1.7 (with Avro and Jsonl). Removed redundant file by making S3 a dependency for GCS

* Removed some additional duplicates between GCS and S3

* Revert changes in the root files

* Revert jdbc files

* Fix package names

* Refactor gcs config

* Format code

* Fix gcs connection

* Format code

* Add acceptance tests

* Fix parquet acceptance test

* Add ci credentials

* Register the connector and update documentations

* Fix typo

* Format code

* Add unit test

* Add comments

* Update readme

Co-authored-by: Sherif A. Nada <[email protected]>

Co-authored-by: Marco Fontana <[email protected]>
Co-authored-by: [email protected] <[email protected]>
Co-authored-by: Marco Fontana <[email protected]>
Co-authored-by: Sherif A. Nada <[email protected]>

* 🐛 CDK: Fix logging of initial state value (#4795)

* Update abstract_source.py

* bump

* CHANGELOG.md

Co-authored-by: Eugene Kulak <[email protected]>

* bug fix: use register api (#4811)

* 🐛  Add missing dependencies for acceptance tests to run. (#4808)

* 🎉 Add Python Destination Template (#4771)

* Format. (#4814)

* 🎉 Migrate config persistence to database (#4670)

* Implement db config persistence

* Fix database readiness check

* Reduce logging noise

* Setup config database in config persistence factory

* Update documentation

* Load seed from yaml files

* Refactor config persistence factory

* Add one more test to mimic migration

* Remove unnecessary changes

* Run code formatter

* Update placeholder env values

* Set default config database parameters in docker compose

Co-authored-by: Christophe Duong <[email protected]>

* Default setupDatabase to false

* Rename variable

* Set default config db parameters for server

* Remove config db parameters from the env file

* Remove unnecessary environment statements

* Hide config persistence factory (#4772)

* Remove CONFIG_DATABASE_HOST

* Use builder in the test

* Simplify config persistence builder

* Clarify config db connection readiness

* Format code

* Add logging

* Fix typo

Co-authored-by: Christophe Duong <[email protected]>

* Add a config_id only index

* Reuse record insertion code

* Add id field name to config schema

* Support data loading from legacy config schemas

* Log missing logs in migration test

* Move airbyte configs table to separate directory

* Update exception message

* Dump specific tables from the job database

* Remove postgres specific uuid extension

* Comment out future branch

* Default configs db variables to empty

When defaulting them to the jobs db variables, it somehow does not work.

* Log inserted config records

* Log all db write operations

* Add back config db variables in env file to mute warnings

* Log connection exception to debug flaky e2e test

* Leave config db variables empty

`.env` file does not support variable expansion.

Co-authored-by: Christophe Duong <[email protected]>
Co-authored-by: Charles <[email protected]>

* 🎉 Source intercom: migration to CDK (#4676)

* Added Intercom implementation

* Updated segments docs

* Updated _send_request method to new airbyte-cdk version

* Updated cursor field to datetime string

* Added filtering by state for incremental sync

* Updated cursor paths for test incremental sync

* Added dict type validation to get_data method

* Updated catalog

* Updated typing for start_date

* Updated singer seed to cdk seed

* Updated connector docs

* Updated sample config file

* Sorted streams alphabetically

* Removed placeholder comments

* Renamed rate_limit to queries_per_hour

* Updated common sleep time to backoff_time method

* 🎉 New source: Pipedrive connector (#4686)

* Add pipedrive source initial

* Add initial schemas.
Add MVP source implementation.

* Implement MVP streams

* Complete MVP streams implementation

* Apply schema format

* Add test creds

* Update streams.py
Fix schemas

* Update replication_start_date format.
Add extra pagination condition

* Refactor streams, remove unused classes.

* Add pipedrive.md docs file.
Add Pipedrive source definitions.

* Add json source definition.

* Update spec.json

* Add docs mentions throughout the project files

* Make number of Concurrent Jobs configurable. (#4687)

* Explicitly pin ec2 runner version to 2.2.1. (#4823)

This was a mismash before, partially my fault. Explicitly pinning for now.

* 🐛 Source Facebook: Improve rate limit management (#4820)

* Improve rate limit management

* bump version

* facebook-marketing.md update the changelog

* format and fix

* Source Facebook: fix formatting and publish new version (#4826)

* format

* disable schema validation

* fix urls in AdCreatives stream, enable SAT for creatives

* format

Co-authored-by: Eugene Kulak <[email protected]>

* Code generator: Update generator to chown docs and config definition directories (#4819)

* Python Demo Destination: KVDB (#4786)

* 📚 CDK: Add python destination tutorial  (#4800)

* 📚 Source Shopify: migrate to new sandbox, update API version to 2021-07 (#4830)

(#4830) Source Shopify: migrate to new sandbox, update API version to 2021-07

Co-authored-by: Oleksandr Bazarnov <[email protected]>

* 🐛 Source Instagram: Read previous state format and upgrade it (#4805)

* few fixes for user_insights state

* support old state format

* format

* bump

Co-authored-by: Eugene Kulak <[email protected]>

* Add placeholder (#4816)

* Add update button (#4809)

* Point to new location for connector build status history (#4840)

* Update GAds docs to indicate incremental support

* Add openreplay (#4685)

* Add openreplay

* Add env variables for openreplay

* Add openreplay env for k8s

* 🎉 Source mixpanel: migration to CDK (#4566)

* Mixpanel initiation

* copied schemas and specs file from singer connector

* authentication and a few streams

* Added Funnels + FunnelsList

* Added example of funnel response

* added incremental Funnels stream with tests

* added Annotations, CohortMembers, Engage, Cohorts, Funnels

* added Revenue

* fixed formatting

* fixed variable names

* fixed cohort_members and updated export streams

* moved start_date and date checks into SourceMixpanel class

* added error handling

* added unit test, update docs and ci creds

* fix url base for export stream

* added full and incremental read for export stream

* updated acceptance tests, added limit correction based on number of streams, export cursor is stored in datatime string

* Funnel stream - added complex state which contains state for each funnel

* added attribution windows support and project timezone config

* fixed formatting

* added default timezone

* added dynamic schema generation for Engage and Export streams

* fixed formatting

* fixed ability to pass start_date in datetime format as well

* fixed ability to pass start_date in datetime format as well

* added additional_properties field for dynamic schemas. updates regex for start_date matching to support old config file

* fixed formatting

* export stream - convert all values to default type - string

* added schema ref

* added new properties for funnel stream

* fixed formatting in funnel schema

* added build related files

* update changelog

* fixed and added comments, renamed rate_limit variable

* fixed formatting

* changed normalization for reserved mixpanel attributes like $browser

* alphabetise spec fields

* added description about API limit handling

* updated comment

* Add openreplay variable (#4844)

* 🐛  Sendgrid source: Gracefully handle malformed responses from sendgrid API (#4839)

* Update job description (#4848)

* Update job description

* Create senior-product-manager

* Create founding-account-executive

* Update senior-product-manager

* Update SUMMARY.md

* Add py destination tutorial to summary.md (#4853)

* Update CHANGELOG.md

* 🐛 Kube: Fix Source Ports not releasing. (#4822)

Closes #4660 .

On further investigation, it turns out we were not releasing the source ports. This is because of how the Process abstraction works - waitFor calls close under the hood. We were only calling waitFor if the process was still alive. This is determined by the exitValue which comes from the Kubernetes pod's termination status. However, these ports are a local resource and no close calls means they were left dangling, leading to the behaviour we see today.

Explicitly call close after retrieving the exit value of the Kubernetes pod. This better follows traditional assumptions around Processes - if the process returns some exit value, it means all resources associated with that process have been cleaned up.

Also,
- add in a bunch of debug logging for the future.
- have better names for Kubernetes workers to make operations easier.

* use new AMI ID for connector builds (#4855)

* Wait for config volume to be ready (#4835)

* Do not create config directory in fs persistence construction

* Run kube acceptance test only for testing purpose

* Wait for config volume to be ready

* Move config volume wait for fs persistence construction

* Restore ci workflow

* Prune imports

* 🎉 New source: US census (#4228)

Co-authored-by: Sherif Nada <[email protected]>

* publish US Census (connector) (#4857)

Co-authored-by: Daniel Mateus Pires <[email protected]>
Co-authored-by: Daniel Mateus Pires <[email protected]>

* 🐛 Source JIRA: Fix DBT failing normalization on `Labels` schema. (#4817)

(#4817) 🐛 Source JIRA: Fix DBT failing normalization on `Labels` schema. 

Co-authored-by: Oleksandr Bazarnov <[email protected]>

* Rename founding-account-executive to founding-account-executive.md

* Tweak ConfigNotFoundException class (#4821)


* Use internal_api_host env variable

* Source ZenDesk: format and validate code

* refactor import / export endpoints to use the same code path as auto migration (#4797)

* fix build (#4865)

* 📝 Add server version requirement for mysql normalization (#4856)

* 🐛 Destination MySQL: fix problem if source has a column with json (#4825)

* [4583] Fixed MySQL destination of fails is source has a column with json data

* hotfix: rename senior PM file to add .md

* 📚 improve mongo docs and param descriptions (#4870)

* Remove duplicated seed repository (#4869)

* add workspace helper (#4868)

* add workspace helper

* fmt

* switch to a fixed limit

* 🐛 Fix Oracle spec to declare `sid` instead of `database` param, Redshift to allow `additionalProperties`, MSSQL test and spec to declare spec type correctly (#4874)

* Kube: Better Port Abstraction. (#4829)

Introduce a better port abstraction whose primary purpose is to confirm that ports are released when the Kube Pod Process is closed.

This prevents issues like #4660

I'm also opening more ports so we can run at least 10 syncs in parallel.

* Source Zendesk: update docs

* Remove unused files

* add a stream_slices logic for ticket_comments stream

* remove changes of other connections

* add secret Zendesk keys to command configs

* 🐛 Source Zendesk Support: add dummy unit test

* add dummy integration test

* fix Zendesk not loading username and facebook/twitter id #4373

* sort streams alphabetically

* fix test issue with the unsupport field validate_output_from_all_streams

* add info to source_definitions.yaml

* remove json_schema from configured_catalog.json

* add backoff logic

* add unit tests

* move part of unit tests to integration tests

* fix test dependencies

* add a build status

Co-authored-by: Maksym Pavlenok <[email protected]>
Co-authored-by: Sherif A. Nada <[email protected]>
Co-authored-by: LiRen Tu <[email protected]>
Co-authored-by: vovavovavovavova <[email protected]>
Co-authored-by: Eugene Kulak <[email protected]>
Co-authored-by: Abhi Vaidyanatha <[email protected]>
Co-authored-by: Abhi Vaidyanatha <[email protected]>
Co-authored-by: Shadab Mohammad <[email protected]>
Co-authored-by: midavadim <[email protected]>
Co-authored-by: Subodh Kant Chaturvedi <[email protected]>
Co-authored-by: Davin Chia <[email protected]>
Co-authored-by: Oliver Meyer <[email protected]>
Co-authored-by: Artem Astapenko <[email protected]>
Co-authored-by: Jenny Brown <[email protected]>
Co-authored-by: Marcos Marx <[email protected]>
Co-authored-by: Jared Rhizor <[email protected]>
Co-authored-by: Charles <[email protected]>
Co-authored-by: Varun B Patil <[email protected]>
Co-authored-by: Dmytro <[email protected]>
Co-authored-by: Yaroslav Dudar <[email protected]>
Co-authored-by: Brian Krausz <[email protected]>
Co-authored-by: George Claireaux <[email protected]>
Co-authored-by: oleh.zorenko <[email protected]>
Co-authored-by: Eugene Kulak <[email protected]>
Co-authored-by: Eugene <[email protected]>
Co-authored-by: John Lafleur <[email protected]>
Co-authored-by: Anna Lvova <[email protected]>
Co-authored-by: Marco Fontana <[email protected]>
Co-authored-by: [email protected] <[email protected]>
Co-authored-by: Marco Fontana <[email protected]>
Co-authored-by: Christophe Duong <[email protected]>
Co-authored-by: Serhii Lazebnyi <[email protected]>
Co-authored-by: Vadym <[email protected]>
Co-authored-by: Vladimir remar <[email protected]>
Co-authored-by: Oleksandr <[email protected]>
Co-authored-by: Oleksandr Bazarnov <[email protected]>
Co-authored-by: Daniel Mateus Pires <[email protected]>
Co-authored-by: Daniel Mateus Pires <[email protected]>
Co-authored-by: jrhizor <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area/documentation Improvements or additions to documentation area/platform issues related to the platform
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Allow using a PG database for the config database
4 participants