From 0a1dc977fd4f871478182124d885afc710640c4b Mon Sep 17 00:00:00 2001 From: actiontech-zihan Date: Mon, 27 Jul 2026 12:18:18 +0800 Subject: [PATCH] fix: remove mongodb advanced options and ignore legacy params --- internal/dms/service/db_service.go | 12 ++++++ internal/dms/service/mongo_legacy_params.go | 19 ++++++++++ .../service/sql_workbench_service.go | 27 ++------------ .../service/sql_workbench_service_test.go | 37 +++++++++++-------- 4 files changed, 57 insertions(+), 38 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 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) } }