diff options
author | Randolph Tan <randolph@10gen.com> | 2016-04-07 11:29:26 -0400 |
---|---|---|
committer | Randolph Tan <randolph@10gen.com> | 2016-04-07 18:07:47 -0400 |
commit | 9effd11e3c725af58abb87137d8d17b8c814371d (patch) | |
tree | c44c57be0c8d7b8be7b9ec5388c3ec961f045145 /src | |
parent | 507b138941ed82d73fc31fde4f7324425a38cf8e (diff) | |
download | mongo-9effd11e3c725af58abb87137d8d17b8c814371d.tar.gz |
SERVER-23598 Race in config.version intialization
Removed the check to determine if config metadata is pre v2.4. Now that config servers are required to be replica sets, they are guaranteed to have the metadata that is at least from v3.2.
Diffstat (limited to 'src')
-rw-r--r-- | src/mongo/s/catalog/replset/catalog_manager_replica_set.cpp | 17 | ||||
-rw-r--r-- | src/mongo/s/catalog/replset/catalog_manager_replica_set_upgrade_test.cpp | 68 |
2 files changed, 0 insertions, 85 deletions
diff --git a/src/mongo/s/catalog/replset/catalog_manager_replica_set.cpp b/src/mongo/s/catalog/replset/catalog_manager_replica_set.cpp index 609599c850e..547b70b2f7d 100644 --- a/src/mongo/s/catalog/replset/catalog_manager_replica_set.cpp +++ b/src/mongo/s/catalog/replset/catalog_manager_replica_set.cpp @@ -1347,23 +1347,6 @@ StatusWith<VersionType> CatalogManagerReplicaSet::_getConfigVersion(OperationCon } if (queryResults.empty()) { - auto countStatus = - _runCountCommandOnConfig(txn, NamespaceString(ShardType::ConfigNS), BSONObj()); - - if (!countStatus.isOK()) { - return countStatus.getStatus(); - } - - const auto& shardCount = countStatus.getValue(); - if (shardCount > 0) { - // Version document doesn't exist, but config.shards is not empty. Assuming that - // the current config metadata is pre v2.4. - VersionType versionInfo; - versionInfo.setMinCompatibleVersion(UpgradeHistory_UnreportedVersion); - versionInfo.setCurrentVersion(UpgradeHistory_UnreportedVersion); - return versionInfo; - } - VersionType versionInfo; versionInfo.setMinCompatibleVersion(UpgradeHistory_EmptyVersion); versionInfo.setCurrentVersion(UpgradeHistory_EmptyVersion); diff --git a/src/mongo/s/catalog/replset/catalog_manager_replica_set_upgrade_test.cpp b/src/mongo/s/catalog/replset/catalog_manager_replica_set_upgrade_test.cpp index 8beb6dcd432..c8e2a975a58 100644 --- a/src/mongo/s/catalog/replset/catalog_manager_replica_set_upgrade_test.cpp +++ b/src/mongo/s/catalog/replset/catalog_manager_replica_set_upgrade_test.cpp @@ -182,8 +182,6 @@ TEST_F(CatalogManagerReplSetTestFixture, InitNoVersionDocEmptyConfig) { onFindCommand([](const RemoteCommandRequest& request) { return vector<BSONObj>{}; }); - expectCount(HostAndPort("config:123"), NamespaceString("config.shards"), BSONObj(), 0); - onCommand([](const RemoteCommandRequest& request) { ASSERT_EQ(HostAndPort("config:123"), request.target); ASSERT_EQ("config", request.dbname); @@ -225,38 +223,6 @@ TEST_F(CatalogManagerReplSetTestFixture, InitNoVersionDocEmptyConfig) { future.timed_get(kFutureTimeout); } -TEST_F(CatalogManagerReplSetTestFixture, InitNoVersionDocEmptyConfigWithAdmin) { - configTargeter()->setFindHostReturnValue(HostAndPort("config:123")); - - auto future = - launchAsync([this] { ASSERT_OK(catalogManager()->initConfigVersion(operationContext())); }); - - onFindCommand([](const RemoteCommandRequest& request) { return vector<BSONObj>{}; }); - - expectCount(HostAndPort("config:123"), NamespaceString("config.shards"), BSONObj(), 0); - - onCommand([](const RemoteCommandRequest& request) { - ASSERT_EQ(HostAndPort("config:123"), request.target); - ASSERT_EQ("config", request.dbname); - - ASSERT_EQUALS(BSON(rpc::kReplSetMetadataFieldName << 1), request.metadata); - - BatchedUpdateRequest actualBatchedUpdate; - std::string errmsg; - ASSERT_TRUE(actualBatchedUpdate.parseBSON(request.dbname, request.cmdObj, &errmsg)); - ASSERT_EQUALS(VersionType::ConfigNS, actualBatchedUpdate.getNS().ns()); - - BatchedCommandResponse response; - response.setOk(true); - response.setN(1); - response.setNModified(1); - - return response.toBSON(); - }); - - future.timed_get(kFutureTimeout); -} - TEST_F(CatalogManagerReplSetTestFixture, InitConfigWriteError) { configTargeter()->setFindHostReturnValue(HostAndPort("config:123")); @@ -268,8 +234,6 @@ TEST_F(CatalogManagerReplSetTestFixture, InitConfigWriteError) { onFindCommand([](const RemoteCommandRequest& request) { return vector<BSONObj>{}; }); - expectCount(HostAndPort("config:123"), NamespaceString("config.shards"), BSONObj(), 0); - onCommand([](const RemoteCommandRequest& request) { return fromjson(R"({ ok: 1, @@ -286,22 +250,6 @@ TEST_F(CatalogManagerReplSetTestFixture, InitConfigWriteError) { future.timed_get(kFutureTimeout); } -TEST_F(CatalogManagerReplSetTestFixture, InitNoVersionDocNonEmptyConfigServer) { - configTargeter()->setFindHostReturnValue(HostAndPort("config:123")); - - auto future = launchAsync([this] { - auto status = catalogManager()->initConfigVersion(operationContext()); - ASSERT_EQ(ErrorCodes::IncompatibleShardingConfigVersion, status.code()); - ASSERT_FALSE(status.reason().empty()); - }); - - onFindCommand([](const RemoteCommandRequest& request) { return vector<BSONObj>{}; }); - - expectCount(HostAndPort("config:123"), NamespaceString("config.shards"), BSONObj(), 1); - - future.timed_get(kFutureTimeout); -} - TEST_F(CatalogManagerReplSetTestFixture, InitVersionTooOld) { configTargeter()->setFindHostReturnValue(HostAndPort("config:123")); @@ -337,8 +285,6 @@ TEST_F(CatalogManagerReplSetTestFixture, InitVersionDuplicateKeyNoOpAfterRetry) onFindCommand([](const RemoteCommandRequest& request) { return vector<BSONObj>{}; }); - expectCount(HostAndPort("config:123"), NamespaceString("config.shards"), BSONObj(), 0); - onCommand([](const RemoteCommandRequest& request) { ASSERT_EQ(HostAndPort("config:123"), request.target); ASSERT_EQ("config", request.dbname); @@ -390,8 +336,6 @@ TEST_F(CatalogManagerReplSetTestFixture, InitVersionDuplicateKeyNoConfigVersionA onFindCommand([](const RemoteCommandRequest& request) { return vector<BSONObj>{}; }); - expectCount(HostAndPort("config:123"), NamespaceString("config.shards"), BSONObj(), 0); - onCommand([](const RemoteCommandRequest& request) { ASSERT_EQ(HostAndPort("config:123"), request.target); ASSERT_EQ("config", request.dbname); @@ -414,8 +358,6 @@ TEST_F(CatalogManagerReplSetTestFixture, InitVersionDuplicateKeyNoConfigVersionA onFindCommand([](const RemoteCommandRequest& request) { return vector<BSONObj>{}; }); - expectCount(HostAndPort("config:123"), NamespaceString("config.shards"), BSONObj(), 0); - onCommand([](const RemoteCommandRequest& request) { ASSERT_EQ(HostAndPort("config:123"), request.target); ASSERT_EQ("config", request.dbname); @@ -468,8 +410,6 @@ TEST_F(CatalogManagerReplSetTestFixture, InitVersionDuplicateKeyTooNewAfterRetry onFindCommand([](const RemoteCommandRequest& request) { return vector<BSONObj>{}; }); - expectCount(HostAndPort("config:123"), NamespaceString("config.shards"), BSONObj(), 0); - onCommand([](const RemoteCommandRequest& request) { ASSERT_EQ(HostAndPort("config:123"), request.target); ASSERT_EQ("config", request.dbname); @@ -526,8 +466,6 @@ TEST_F(CatalogManagerReplSetTestFixture, InitVersionDuplicateKeyMaxRetry) { for (int x = 0; x < maxRetry; x++) { onFindCommand([](const RemoteCommandRequest& request) { return vector<BSONObj>{}; }); - expectCount(HostAndPort("config:123"), NamespaceString("config.shards"), BSONObj(), 0); - onCommand([](const RemoteCommandRequest& request) { ASSERT_EQ(HostAndPort("config:123"), request.target); ASSERT_EQ("config", request.dbname); @@ -558,8 +496,6 @@ TEST_F(CatalogManagerReplSetTestFixture, InitVersionUpsertNoMatchNoOpAfterRetry) onFindCommand([](const RemoteCommandRequest& request) { return vector<BSONObj>{}; }); - expectCount(HostAndPort("config:123"), NamespaceString("config.shards"), BSONObj(), 0); - onCommand([](const RemoteCommandRequest& request) { ASSERT_EQ(HostAndPort("config:123"), request.target); ASSERT_EQ("config", request.dbname); @@ -606,8 +542,6 @@ TEST_F(CatalogManagerReplSetTestFixture, InitVersionUpsertNoMatchNoConfigVersion onFindCommand([](const RemoteCommandRequest& request) { return vector<BSONObj>{}; }); - expectCount(HostAndPort("config:123"), NamespaceString("config.shards"), BSONObj(), 0); - onCommand([](const RemoteCommandRequest& request) { ASSERT_EQ(HostAndPort("config:123"), request.target); ASSERT_EQ("config", request.dbname); @@ -625,8 +559,6 @@ TEST_F(CatalogManagerReplSetTestFixture, InitVersionUpsertNoMatchNoConfigVersion onFindCommand([](const RemoteCommandRequest& request) { return vector<BSONObj>{}; }); - expectCount(HostAndPort("config:123"), NamespaceString("config.shards"), BSONObj(), 0); - onCommand([](const RemoteCommandRequest& request) { ASSERT_EQ(HostAndPort("config:123"), request.target); ASSERT_EQ("config", request.dbname); |