liquibase / liquibase-mongodb

MongoDB extension for Liquibase
Apache License 2.0
54 stars 46 forks source link

Mongo Atlas: migration failed with A TXT record is only permitted to contain the keys [authsource, replicaset], but the TXT record for '***' contains the keys [loadbalanced, authsource] #273

Closed Alexey-Tsarev closed 2 years ago

Alexey-Tsarev commented 2 years ago

I faced with the following issue: I am trying to to Mongo Atlas migration and use mongo+srv connection

I masked credentials, host, db. Cmd:

liquibase --log-level=debug --url=mongodb+srv://.../... --username=aaa --password=bbb --headless=true --contexts=dev --labels=one --liquibase-schema-name=two --changelog-file=ccc/changelog.xml status
###################################################
##   _     _             _ _                      ##
##  | |   (_)           (_) |                     ##
##  | |    _  __ _ _   _ _| |__   __ _ ___  ___   ##
##  | |   | |/ _` | | | | | '_ \ / _` / __|/ _ \  ##
##  | |___| | (_| | |_| | | |_) | (_| \__ \  __/  ##
##  \_____/_|\__, |\__,_|_|_.__/ \__,_|___/\___|  ##
##              | |                               ##
##              |_|                               ##
##                                                ##
##  Get documentation at docs.liquibase.com       ##
##  Get certified courses at learn.liquibase.com  ##
##  Free schema change activity reports at        ##
##      https://hub.liquibase.com                 ##
##                                                ##
####################################################
Starting Liquibase at 13:58:42 (version 4.11.0 #2708 built at 2022-05-23 15:17+0000)
Liquibase Version: 4.11.0
Liquibase Community 4.11.0 by Liquibase
[2022-06-24 13:58:42] FINE [liquibase.configuration] No configuration value for liquibase.monitorPerformance found
[2022-06-24 13:58:42] FINE [liquibase.configuration] Configuration liquibase.monitorPerformance is using the default value of false
[2022-06-24 13:58:42] FINE [liquibase.integration] Performance monitoring disabled
...
[2022-06-24 13:58:42] FINE [liquibase.servicelocator] Loaded liquibase.database.Database instance liquibase.ext.mongodb.database.MongoLiquibaseDatabase
[2022-06-24 13:58:42] FINE [liquibase.database] Properties:
[2022-06-24 13:58:42] FINE [liquibase.database] Key:'password' Value:'**********'
[2022-06-24 13:58:42] FINE [liquibase.database] Key:'user' Value:'aaa'
[2022-06-24 13:58:42] FINE [liquibase.database] Connecting to the URL:'mongodb+srv://.../...' using driver:'liquibase.ext.mongodb.database.MongoClientDriver'
[2022-06-24 13:58:42] FINE [liquibase.servicelocator] Loaded liquibase.database.DatabaseConnection instance liquibase.database.jvm.JdbcConnection
[2022-06-24 13:58:42] FINE [liquibase.servicelocator] Loaded liquibase.database.DatabaseConnection instance com.datical.liquibase.ext.database.jvm.ProJdbcConnection
[2022-06-24 13:58:42] FINE [liquibase.servicelocator] Loaded liquibase.database.DatabaseConnection instance liquibase.ext.mongodb.database.MongoConnection
[2022-06-24 13:58:43] SEVERE [liquibase.integration] Could not open connection to database: mongodb+srv://.../...
liquibase.exception.CommandExecutionException: liquibase.exception.LiquibaseException: Unexpected error running Liquibase: liquibase.exception.DatabaseException: liquibase.exception.DatabaseException: Could not open connection to database: mongodb+srv://.../...
    at liquibase.command.CommandScope.execute(CommandScope.java:163)
    at liquibase.integration.commandline.CommandRunner.call(CommandRunner.java:51)
    at liquibase.integration.commandline.CommandRunner.call(CommandRunner.java:21)
    at picocli.CommandLine.executeUserObject(CommandLine.java:1953)
    at picocli.CommandLine.access$1300(CommandLine.java:145)
    at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2358)
    at picocli.CommandLine$RunLast.handle(CommandLine.java:2352)
    at picocli.CommandLine$RunLast.handle(CommandLine.java:2314)
    at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2179)
    at picocli.CommandLine$RunLast.execute(CommandLine.java:2316)
    at picocli.CommandLine.execute(CommandLine.java:2078)
    at liquibase.integration.commandline.LiquibaseCommandLine.lambda$execute$1(LiquibaseCommandLine.java:336)
    at liquibase.Scope.child(Scope.java:189)
    at liquibase.Scope.child(Scope.java:165)
    at liquibase.integration.commandline.LiquibaseCommandLine.execute(LiquibaseCommandLine.java:301)
    at liquibase.integration.commandline.LiquibaseCommandLine.main(LiquibaseCommandLine.java:90)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.base/java.lang.reflect.Method.invoke(Unknown Source)
    at liquibase.integration.commandline.LiquibaseLauncher.main(LiquibaseLauncher.java:91)
Caused by: liquibase.exception.LiquibaseException: Unexpected error running Liquibase: liquibase.exception.DatabaseException: liquibase.exception.DatabaseException: Could not open connection to database: mongodb+srv://.../...
    at liquibase.integration.commandline.Main$1.run(Main.java:443)
    at liquibase.integration.commandline.Main$1.run(Main.java:221)
    at liquibase.Scope.child(Scope.java:189)
    at liquibase.Scope.child(Scope.java:165)
    at liquibase.integration.commandline.Main.run(Main.java:221)
    at liquibase.command.AbstractCliWrapperCommandStep.run(AbstractCliWrapperCommandStep.java:32)
    at liquibase.command.CommandScope.execute(CommandScope.java:157)
    ... 20 more
Caused by: liquibase.exception.DatabaseException: liquibase.exception.DatabaseException: liquibase.exception.DatabaseException: liquibase.exception.DatabaseException: Could not open connection to database: mongodb+srv://.../...
    at liquibase.integration.commandline.CommandLineUtils.createDatabaseObject(CommandLineUtils.java:138)
    at liquibase.integration.commandline.Main.doMigration(Main.java:1516)
    at liquibase.integration.commandline.Main$1.lambda$run$0(Main.java:398)
    at liquibase.Scope.lambda$child$0(Scope.java:180)
    at liquibase.Scope.child(Scope.java:189)
    at liquibase.Scope.child(Scope.java:179)
    at liquibase.Scope.child(Scope.java:158)
    at liquibase.integration.commandline.Main$1.run(Main.java:397)
    ... 26 more
Caused by: liquibase.exception.DatabaseException: liquibase.exception.DatabaseException: liquibase.exception.DatabaseException: Could not open connection to database: mongodb+srv://.../...
    at liquibase.database.DatabaseFactory.openConnection(DatabaseFactory.java:217)
    at liquibase.database.DatabaseFactory.openConnection(DatabaseFactory.java:176)
    at liquibase.database.DatabaseFactory.openDatabase(DatabaseFactory.java:141)
    at liquibase.integration.commandline.CommandLineUtils.createDatabaseObject(CommandLineUtils.java:92)
    ... 33 more
Caused by: liquibase.exception.DatabaseException: liquibase.exception.DatabaseException: Could not open connection to database: mongodb+srv://.../...
    at liquibase.database.ConnectionServiceFactory.create(ConnectionServiceFactory.java:35)
    at liquibase.database.DatabaseFactory.openConnection(DatabaseFactory.java:214)
    ... 36 more
Caused by: liquibase.exception.DatabaseException: Could not open connection to database: mongodb+srv://.../...
    at liquibase.ext.mongodb.database.MongoConnection.open(MongoConnection.java:116)
    at liquibase.database.ConnectionServiceFactory.create(ConnectionServiceFactory.java:32)
    ... 37 more
Caused by: com.mongodb.MongoConfigurationException: A TXT record is only permitted to contain the keys [authsource, replicaset], but the TXT record for '...' contains the keys [loadbalanced, authsource]
    at com.mongodb.ConnectionString.<init>(ConnectionString.java:388)
    at liquibase.ext.mongodb.database.MongoConnection.open(MongoConnection.java:104)
    ... 38 more

I use a Dockerfile, which contains versions:

FROM liquibase/liquibase:4.11

ADD --chown=liquibase:liquibase \
    https://repo1.maven.org/maven2/org/mongodb/mongo-java-driver/3.12.9/mongo-java-driver-3.12.9.jar \
    https://github.com/liquibase/liquibase-mongodb/releases/download/liquibase-mongodb-4.11.0/liquibase-mongodb-4.11.0.jar \
    /liquibase/internal/lib/

It looks like the DNS case

A TXT record is only permitted to contain the keys [authsource, replicaset], but the TXT record for '...' contains the keys [loadbalanced, authsource]

does not work.

Alexey-Tsarev commented 2 years ago

Resolved via updated versions:

ARG LIQUIBASE_BASE_VERSION="4.11"
FROM liquibase/liquibase:${LIQUIBASE_BASE_VERSION}

ARG LIQUIBASE_MONGO_VERSION="4.12.0"
ARG MONGO_DRIVER_VERSION="4.6.1"

ADD --chown=liquibase:liquibase \
    https://github.com/liquibase/liquibase-mongodb/releases/download/liquibase-mongodb-${LIQUIBASE_MONGO_VERSION}/liquibase-mongodb-${LIQUIBASE_MONGO_VERSION}.jar \
    https://repo1.maven.org/maven2/org/mongodb/bson/${MONGO_DRIVER_VERSION}/bson-${MONGO_DRIVER_VERSION}.jar \
    https://repo1.maven.org/maven2/org/mongodb/mongodb-driver-core/${MONGO_DRIVER_VERSION}/mongodb-driver-core-${MONGO_DRIVER_VERSION}.jar \
    https://repo1.maven.org/maven2/org/mongodb/mongodb-driver-sync/${MONGO_DRIVER_VERSION}/mongodb-driver-sync-${MONGO_DRIVER_VERSION}.jar \
    /liquibase/internal/lib/