From 55502267d690fed1a6f496bc5e680225d60dbcae Mon Sep 17 00:00:00 2001 From: Carlos Salguero Date: Thu, 14 May 2020 23:53:01 -0300 Subject: [PATCH] PT-1822 Fixed get hostnames for standalone --- src/go/docker-compose.yml | 9 +++------ src/go/internal/testutils/env.go | 5 +++++ src/go/mongolib/util/util.go | 10 ++++++++-- src/go/mongolib/util/{main_test.go => util_test.go} | 11 ++++++++++- 4 files changed, 26 insertions(+), 9 deletions(-) rename src/go/mongolib/util/{main_test.go => util_test.go} (94%) diff --git a/src/go/docker-compose.yml b/src/go/docker-compose.yml index 76df6a5b..5c8a8e0c 100644 --- a/src/go/docker-compose.yml +++ b/src/go/docker-compose.yml @@ -4,13 +4,10 @@ services: standalone: network_mode: host image: ${TEST_MONGODB_FLAVOR}:${TEST_PSMDB_VERSION} + environment: + MONGO_INITDB_ROOT_USERNAME: ${TEST_MONGODB_ADMIN_USERNAME} + MONGO_INITDB_ROOT_PASSWORD: ${TEST_MONGODB_ADMIN_PASSWORD} command: --port=27017 - volumes: - - ./docker/test/entrypoint-mongod.sh:/entrypoint.sh:ro - - ./docker/test/entrypoint-mongod.sh:/usr/local/bin/docker-entrypoint.sh:ro - - ./docker/test/mongod.key:/mongod.key:ro - - ./docker/test/ssl/rootCA.crt:/rootCA.crt:ro - - ./docker/test/ssl/mongodb.pem:/mongod.pem:ro s1-mongo1: network_mode: host image: ${TEST_MONGODB_FLAVOR}:${TEST_PSMDB_VERSION} diff --git a/src/go/internal/testutils/env.go b/src/go/internal/testutils/env.go index 906ce368..7e3fe148 100644 --- a/src/go/internal/testutils/env.go +++ b/src/go/internal/testutils/env.go @@ -30,6 +30,8 @@ const ( envMongoDBConfigsvr3Port = "TEST_MONGODB_CONFIGSVR3_PORT" // envMongoDBMongosPort = "TEST_MONGODB_MONGOS_PORT" + + envMongoDBStandalonePort = "TEST_MONGODB_STANDALONE_PORT" // envMongoDBUser = "TEST_MONGODB_ADMIN_USERNAME" envMongoDBPassword = "TEST_MONGODB_ADMIN_PASSWORD" @@ -39,6 +41,9 @@ var ( // MongoDBHost is the hostname. Since it runs locally, it is localhost MongoDBHost = "127.0.0.1" + // Port for standalone instance + MongoDBStandalonePort = os.Getenv(envMongoDBStandalonePort) + // MongoDBShard1ReplsetName Replicaset name for shard 1 MongoDBShard1ReplsetName = os.Getenv(envMongoDBShard1ReplsetName) // MongoDBShard1PrimaryPort is the port for the primary instance of shard 1 diff --git a/src/go/mongolib/util/util.go b/src/go/mongolib/util/util.go index 234c00fe..f27cd247 100644 --- a/src/go/mongolib/util/util.go +++ b/src/go/mongolib/util/util.go @@ -2,7 +2,6 @@ package util import ( "context" - "fmt" "sort" "strings" @@ -13,6 +12,10 @@ import ( "go.mongodb.org/mongo-driver/mongo/options" ) +const ( + shardingNotEnabledError = 203 +) + var ( CANNOT_GET_QUERY_ERROR = errors.New("cannot get query field from the profile document (it is not a map)") ) @@ -119,6 +122,9 @@ func GetHostnames(ctx context.Context, client *mongo.Client) ([]string, error) { var shardsMap proto.ShardsMap smRes := client.Database("admin").RunCommand(ctx, primitive.M{"getShardMap": 1}) if smRes.Err() != nil { + if e, ok := smRes.Err().(mongo.CommandError); ok && e.Code == shardingNotEnabledError { + return nil, nil // standalone instance + } return nil, errors.Wrap(smRes.Err(), "cannot getShardMap for GetHostnames") } if err := smRes.Decode(&shardsMap); err != nil { @@ -134,7 +140,7 @@ func GetHostnames(ctx context.Context, client *mongo.Client) ([]string, error) { } } - return nil, fmt.Errorf("cannot get shards map") + return nil, nil // standalone instance } func buildHostsListFromReplStatus(replStatus proto.ReplicaSetStatus) []string { diff --git a/src/go/mongolib/util/main_test.go b/src/go/mongolib/util/util_test.go similarity index 94% rename from src/go/mongolib/util/main_test.go rename to src/go/mongolib/util/util_test.go index 853046a4..ec6a2ca7 100644 --- a/src/go/mongolib/util/main_test.go +++ b/src/go/mongolib/util/util_test.go @@ -100,6 +100,11 @@ func TestGetReplicasetMembers(t *testing.T) { uri: fmt.Sprintf("mongodb://%s:%s@%s:%s", tu.MongoDBUser, tu.MongoDBPassword, tu.MongoDBHost, tu.MongoDBShard3PrimaryPort), want: 3, }, + { + name: "from_standalone", + uri: fmt.Sprintf("mongodb://%s:%s@%s:%s", tu.MongoDBUser, tu.MongoDBPassword, tu.MongoDBHost, tu.MongoDBStandalonePort), + want: 0, + }, } for _, test := range testCases { @@ -146,7 +151,7 @@ func TestGetShardedHosts(t *testing.T) { }, } - for _, test := range testCases { + for i, test := range testCases { t.Run(test.name, func(t *testing.T) { clientOptions := options.Client().ApplyURI(test.uri) ctx, cancel := context.WithTimeout(context.Background(), 20*time.Second) @@ -156,6 +161,10 @@ func TestGetShardedHosts(t *testing.T) { if err != nil { t.Errorf("Cannot get a new client for host %s: %s", test.uri, err) } + if client == nil { + panic(fmt.Sprintf("i: %d, uri: %s\n", i, test.uri)) + } + if err := client.Connect(ctx); err != nil { t.Errorf("Cannot connect to host %s: %s", test.uri, err) }