From 55947c93110d1f10a0d3396665c60111f02b27f3 Mon Sep 17 00:00:00 2001 From: actiontech-zihan Date: Tue, 28 Jul 2026 14:36:53 +0800 Subject: [PATCH 1/4] fix: ignore MongoDB legacy advanced params in DMS paths Skip deprecated additional_params on create/update/test-connect and stop forwarding TLS/authMechanism/directConnection to ODC. --- internal/dms/service/db_service.go | 12 +++++++++ internal/dms/service/mongo_legacy_params.go | 19 +++++++++++++ .../service/sql_workbench_service.go | 27 +++---------------- 3 files changed, 35 insertions(+), 23 deletions(-) create mode 100644 internal/dms/service/mongo_legacy_params.go diff --git a/internal/dms/service/db_service.go b/internal/dms/service/db_service.go index e72e7573..e0922721 100644 --- a/internal/dms/service/db_service.go +++ b/internal/dms/service/db_service.go @@ -41,6 +41,9 @@ func (d *DMSService) UpdateDBService(ctx context.Context, req *dmsV2.UpdateDBSer return err } for _, additionalParam := range req.DBService.AdditionalParams { + if isDeprecatedMongoAdditionalParam(req.DBService.DBType, additionalParam.Name) { + continue + } if isRedisConnectionModeParam(req.DBService.DBType, additionalParam.Name) { if err := setRedisConnectionModeParam(&additionalParams, additionalParam.Value); err != nil { return err @@ -122,6 +125,9 @@ func (d *DMSService) CheckDBServiceIsConnectableById(ctx context.Context, req *d var additionParams []*dmsCommonV1.AdditionalParam for _, item := range dbService.AdditionalParams { + if isDeprecatedMongoAdditionalParam(dbService.DBType, item.Key) { + continue + } additionParams = append(additionParams, &dmsCommonV1.AdditionalParam{ Name: item.Key, Value: item.Value, @@ -259,6 +265,9 @@ func (d *DMSService) AddDBService(ctx context.Context, req *dmsV1.AddDBServiceRe return nil, err } for _, additionalParam := range req.DBService.AdditionalParams { + if isDeprecatedMongoAdditionalParam(req.DBService.DBType, additionalParam.Name) { + continue + } if isRedisConnectionModeParam(req.DBService.DBType, additionalParam.Name) { if err := setRedisConnectionModeParam(&additionalParams, additionalParam.Value); err != nil { return nil, err @@ -329,6 +338,9 @@ func (d *DMSService) AddDBServiceV2(ctx context.Context, req *dmsV2.AddDBService return nil, err } for _, additionalParam := range req.DBService.AdditionalParams { + if isDeprecatedMongoAdditionalParam(req.DBService.DBType, additionalParam.Name) { + continue + } if isRedisConnectionModeParam(req.DBService.DBType, additionalParam.Name) { if err := setRedisConnectionModeParam(&additionalParams, additionalParam.Value); err != nil { return nil, err diff --git a/internal/dms/service/mongo_legacy_params.go b/internal/dms/service/mongo_legacy_params.go new file mode 100644 index 00000000..f78f4caf --- /dev/null +++ b/internal/dms/service/mongo_legacy_params.go @@ -0,0 +1,19 @@ +package service + +import "strings" + +// Deprecated Mongo additional_params removed from plugin meta; ignore if still present on old datasources/requests. +var deprecatedMongoAdditionalParams = map[string]struct{}{ + "auth_mechanism": {}, + "tls": {}, + "tls_skip_verify": {}, + "direct_connection": {}, +} + +func isDeprecatedMongoAdditionalParam(dbType, name string) bool { + if !strings.EqualFold(dbType, "MongoDB") { + return false + } + _, ok := deprecatedMongoAdditionalParams[name] + return ok +} diff --git a/internal/sql_workbench/service/sql_workbench_service.go b/internal/sql_workbench/service/sql_workbench_service.go index ab2d0ecf..1c6bce13 100644 --- a/internal/sql_workbench/service/sql_workbench_service.go +++ b/internal/sql_workbench/service/sql_workbench_service.go @@ -861,13 +861,9 @@ type datasourceBaseInfo struct { } const ( - mongoDefaultDatabaseParam = "default_database" - mongoAuthDatabaseParam = "auth_source" - mongoAuthMechanismParam = "auth_mechanism" - mongoReplicaSetParam = "replica_set" - mongoTLSEnabledParam = "tls" - mongoDirectConnectionParam = "direct_connection" - mongoTLSSkipVerifyParam = "tls_skip_verify" + mongoDefaultDatabaseParam = "default_database" + mongoAuthDatabaseParam = "auth_source" + mongoReplicaSetParam = "replica_set" redisDefaultDatabaseParam = "default_database" ) @@ -1039,25 +1035,10 @@ func buildMongoDatasourceOptions(dbService *biz.DBService) (*string, interface{} if authDB := dbService.AdditionalParams.GetParam(mongoAuthDatabaseParam).String(); authDB != "" { jdbcParams["authSource"] = authDB } - if authMechanism := dbService.AdditionalParams.GetParam(mongoAuthMechanismParam).String(); authMechanism != "" { - jdbcParams["authMechanism"] = authMechanism - } + // Legacy keys auth_mechanism / tls / tls_skip_verify / direct_connection are ignored if present. if replicaSet := dbService.AdditionalParams.GetParam(mongoReplicaSetParam).String(); replicaSet != "" { jdbcParams["replicaSet"] = replicaSet } - if tlsParam := dbService.AdditionalParams.GetParam(mongoTLSEnabledParam); tlsParam != nil && tlsParam.String() != "" { - if tlsParam.Bool() { - jdbcParams["tls"] = "true" - } else { - jdbcParams["tls"] = "false" - } - } - if dbService.AdditionalParams.GetParam(mongoDirectConnectionParam).Bool() { - jdbcParams["directConnection"] = true - } - if dbService.AdditionalParams.GetParam(mongoTLSSkipVerifyParam).Bool() { - jdbcParams["tlsInsecure"] = true - } if len(jdbcParams) == 0 { return defaultSchema, nil, nil From a1a21e2572e32192a1a9f14021295b29e8b51a9f Mon Sep 17 00:00:00 2001 From: actiontech-zihan Date: Tue, 28 Jul 2026 14:36:53 +0800 Subject: [PATCH 2/4] test: update sql_workbench MongoDB option expectations Align unit tests with jdbcParams that only keep authSource/replicaSet. --- .../service/sql_workbench_service_test.go | 37 +++++++++++-------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/internal/sql_workbench/service/sql_workbench_service_test.go b/internal/sql_workbench/service/sql_workbench_service_test.go index 6cd3d4de..c9fc513e 100644 --- a/internal/sql_workbench/service/sql_workbench_service_test.go +++ b/internal/sql_workbench/service/sql_workbench_service_test.go @@ -217,11 +217,11 @@ func Test_buildMongoDatasourceOptions(t *testing.T) { AdditionalParams: pkgParams.Params{ &pkgParams.Param{Key: mongoDefaultDatabaseParam, Value: defaultDB, Type: pkgParams.ParamTypeString}, &pkgParams.Param{Key: mongoAuthDatabaseParam, Value: "admin", Type: pkgParams.ParamTypeString}, - &pkgParams.Param{Key: mongoAuthMechanismParam, Value: "SCRAM-SHA-256", Type: pkgParams.ParamTypeString}, + &pkgParams.Param{Key: "auth_mechanism", Value: "SCRAM-SHA-256", Type: pkgParams.ParamTypeString}, &pkgParams.Param{Key: mongoReplicaSetParam, Value: "rs0", Type: pkgParams.ParamTypeString}, - &pkgParams.Param{Key: mongoTLSEnabledParam, Value: "true", Type: pkgParams.ParamTypeBool}, - &pkgParams.Param{Key: mongoDirectConnectionParam, Value: "true", Type: pkgParams.ParamTypeBool}, - &pkgParams.Param{Key: mongoTLSSkipVerifyParam, Value: "true", Type: pkgParams.ParamTypeBool}, + &pkgParams.Param{Key: "tls", Value: "true", Type: pkgParams.ParamTypeBool}, + &pkgParams.Param{Key: "direct_connection", Value: "true", Type: pkgParams.ParamTypeBool}, + &pkgParams.Param{Key: "tls_skip_verify", Value: "true", Type: pkgParams.ParamTypeBool}, }, }) if defaultSchema == nil || *defaultSchema != defaultDB { @@ -233,32 +233,39 @@ func Test_buildMongoDatasourceOptions(t *testing.T) { if jdbcParams["authSource"] != "admin" { t.Fatalf("unexpected authSource: %#v", jdbcParams["authSource"]) } - if jdbcParams["authMechanism"] != "SCRAM-SHA-256" { - t.Fatalf("unexpected authMechanism: %#v", jdbcParams["authMechanism"]) - } if jdbcParams["replicaSet"] != "rs0" { t.Fatalf("unexpected replicaSet: %#v", jdbcParams["replicaSet"]) } - if jdbcParams["tls"] != "true" { - t.Fatalf("unexpected tls: %#v", jdbcParams["tls"]) + if _, ok := jdbcParams["authMechanism"]; ok { + t.Fatalf("authMechanism must be ignored, got %#v", jdbcParams) } - if jdbcParams["directConnection"] != true || jdbcParams["tlsInsecure"] != true { - t.Fatalf("unexpected jdbc params: %#v", jdbcParams) + if _, ok := jdbcParams["tls"]; ok { + t.Fatalf("tls must be ignored, got %#v", jdbcParams) + } + if _, ok := jdbcParams["directConnection"]; ok { + t.Fatalf("directConnection must be ignored, got %#v", jdbcParams) + } + if _, ok := jdbcParams["tlsInsecure"]; ok { + t.Fatalf("tlsInsecure must be ignored, got %#v", jdbcParams) } } -func Test_buildMongoDatasourceOptions_tlsOnly(t *testing.T) { +func Test_buildMongoDatasourceOptions_authAndReplicaOnly(t *testing.T) { _, propertiesValue, jdbcParams := buildMongoDatasourceOptions(&biz.DBService{ DBType: string(pkgConst.DBTypeMongoDB), AdditionalParams: pkgParams.Params{ - &pkgParams.Param{Key: mongoTLSEnabledParam, Value: "true", Type: pkgParams.ParamTypeBool}, + &pkgParams.Param{Key: mongoAuthDatabaseParam, Value: "admin", Type: pkgParams.ParamTypeString}, + &pkgParams.Param{Key: mongoReplicaSetParam, Value: "rs0", Type: pkgParams.ParamTypeString}, }, }) if propertiesValue != nil { t.Fatalf("expected nil properties, got %#v", propertiesValue) } - if jdbcParams["tls"] != "true" { - t.Fatalf("expected tls in jdbcUrlParameters when only tls is configured, got %#v", jdbcParams) + if jdbcParams["authSource"] != "admin" || jdbcParams["replicaSet"] != "rs0" { + t.Fatalf("unexpected jdbc params: %#v", jdbcParams) + } + if len(jdbcParams) != 2 { + t.Fatalf("expected only authSource+replicaSet, got %#v", jdbcParams) } } From 75fe95e4b1efca7617333f28ebde1e56d138d225 Mon Sep 17 00:00:00 2001 From: actiontech-zihan Date: Tue, 28 Jul 2026 15:22:39 +0800 Subject: [PATCH 3/4] fix: remove MongoDB legacy advanced param ignore paths --- internal/dms/service/db_service.go | 12 ------------ internal/dms/service/mongo_legacy_params.go | 19 ------------------- .../service/sql_workbench_service.go | 1 - 3 files changed, 32 deletions(-) delete mode 100644 internal/dms/service/mongo_legacy_params.go diff --git a/internal/dms/service/db_service.go b/internal/dms/service/db_service.go index e0922721..e72e7573 100644 --- a/internal/dms/service/db_service.go +++ b/internal/dms/service/db_service.go @@ -41,9 +41,6 @@ func (d *DMSService) UpdateDBService(ctx context.Context, req *dmsV2.UpdateDBSer return err } for _, additionalParam := range req.DBService.AdditionalParams { - if isDeprecatedMongoAdditionalParam(req.DBService.DBType, additionalParam.Name) { - continue - } if isRedisConnectionModeParam(req.DBService.DBType, additionalParam.Name) { if err := setRedisConnectionModeParam(&additionalParams, additionalParam.Value); err != nil { return err @@ -125,9 +122,6 @@ func (d *DMSService) CheckDBServiceIsConnectableById(ctx context.Context, req *d var additionParams []*dmsCommonV1.AdditionalParam for _, item := range dbService.AdditionalParams { - if isDeprecatedMongoAdditionalParam(dbService.DBType, item.Key) { - continue - } additionParams = append(additionParams, &dmsCommonV1.AdditionalParam{ Name: item.Key, Value: item.Value, @@ -265,9 +259,6 @@ func (d *DMSService) AddDBService(ctx context.Context, req *dmsV1.AddDBServiceRe return nil, err } for _, additionalParam := range req.DBService.AdditionalParams { - if isDeprecatedMongoAdditionalParam(req.DBService.DBType, additionalParam.Name) { - continue - } if isRedisConnectionModeParam(req.DBService.DBType, additionalParam.Name) { if err := setRedisConnectionModeParam(&additionalParams, additionalParam.Value); err != nil { return nil, err @@ -338,9 +329,6 @@ func (d *DMSService) AddDBServiceV2(ctx context.Context, req *dmsV2.AddDBService return nil, err } for _, additionalParam := range req.DBService.AdditionalParams { - if isDeprecatedMongoAdditionalParam(req.DBService.DBType, additionalParam.Name) { - continue - } if isRedisConnectionModeParam(req.DBService.DBType, additionalParam.Name) { if err := setRedisConnectionModeParam(&additionalParams, additionalParam.Value); err != nil { return nil, err diff --git a/internal/dms/service/mongo_legacy_params.go b/internal/dms/service/mongo_legacy_params.go deleted file mode 100644 index f78f4caf..00000000 --- a/internal/dms/service/mongo_legacy_params.go +++ /dev/null @@ -1,19 +0,0 @@ -package service - -import "strings" - -// Deprecated Mongo additional_params removed from plugin meta; ignore if still present on old datasources/requests. -var deprecatedMongoAdditionalParams = map[string]struct{}{ - "auth_mechanism": {}, - "tls": {}, - "tls_skip_verify": {}, - "direct_connection": {}, -} - -func isDeprecatedMongoAdditionalParam(dbType, name string) bool { - if !strings.EqualFold(dbType, "MongoDB") { - return false - } - _, ok := deprecatedMongoAdditionalParams[name] - return ok -} diff --git a/internal/sql_workbench/service/sql_workbench_service.go b/internal/sql_workbench/service/sql_workbench_service.go index 1c6bce13..a4176ff1 100644 --- a/internal/sql_workbench/service/sql_workbench_service.go +++ b/internal/sql_workbench/service/sql_workbench_service.go @@ -1035,7 +1035,6 @@ func buildMongoDatasourceOptions(dbService *biz.DBService) (*string, interface{} if authDB := dbService.AdditionalParams.GetParam(mongoAuthDatabaseParam).String(); authDB != "" { jdbcParams["authSource"] = authDB } - // Legacy keys auth_mechanism / tls / tls_skip_verify / direct_connection are ignored if present. if replicaSet := dbService.AdditionalParams.GetParam(mongoReplicaSetParam).String(); replicaSet != "" { jdbcParams["replicaSet"] = replicaSet } From 5ae363c429e7eb8e3186bea1aead3332af6ba36c Mon Sep 17 00:00:00 2001 From: actiontech-zihan Date: Tue, 28 Jul 2026 15:22:39 +0800 Subject: [PATCH 4/4] test: drop MongoDB legacy advanced param ignore expectations --- .../service/sql_workbench_service_test.go | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/internal/sql_workbench/service/sql_workbench_service_test.go b/internal/sql_workbench/service/sql_workbench_service_test.go index c9fc513e..af0d8408 100644 --- a/internal/sql_workbench/service/sql_workbench_service_test.go +++ b/internal/sql_workbench/service/sql_workbench_service_test.go @@ -217,11 +217,7 @@ func Test_buildMongoDatasourceOptions(t *testing.T) { AdditionalParams: pkgParams.Params{ &pkgParams.Param{Key: mongoDefaultDatabaseParam, Value: defaultDB, Type: pkgParams.ParamTypeString}, &pkgParams.Param{Key: mongoAuthDatabaseParam, Value: "admin", Type: pkgParams.ParamTypeString}, - &pkgParams.Param{Key: "auth_mechanism", Value: "SCRAM-SHA-256", Type: pkgParams.ParamTypeString}, &pkgParams.Param{Key: mongoReplicaSetParam, Value: "rs0", Type: pkgParams.ParamTypeString}, - &pkgParams.Param{Key: "tls", Value: "true", Type: pkgParams.ParamTypeBool}, - &pkgParams.Param{Key: "direct_connection", Value: "true", Type: pkgParams.ParamTypeBool}, - &pkgParams.Param{Key: "tls_skip_verify", Value: "true", Type: pkgParams.ParamTypeBool}, }, }) if defaultSchema == nil || *defaultSchema != defaultDB { @@ -236,18 +232,6 @@ func Test_buildMongoDatasourceOptions(t *testing.T) { if jdbcParams["replicaSet"] != "rs0" { t.Fatalf("unexpected replicaSet: %#v", jdbcParams["replicaSet"]) } - if _, ok := jdbcParams["authMechanism"]; ok { - t.Fatalf("authMechanism must be ignored, got %#v", jdbcParams) - } - if _, ok := jdbcParams["tls"]; ok { - t.Fatalf("tls must be ignored, got %#v", jdbcParams) - } - if _, ok := jdbcParams["directConnection"]; ok { - t.Fatalf("directConnection must be ignored, got %#v", jdbcParams) - } - if _, ok := jdbcParams["tlsInsecure"]; ok { - t.Fatalf("tlsInsecure must be ignored, got %#v", jdbcParams) - } } func Test_buildMongoDatasourceOptions_authAndReplicaOnly(t *testing.T) {