diff options
author | Tommaso Tocci <tommaso.tocci@mongodb.com> | 2020-10-07 16:04:22 +0200 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-10-08 10:26:33 +0000 |
commit | d81fb9e5c454f89b6c41099c8b8ce09c463344c6 (patch) | |
tree | ae2ba8852774dfb075166e40cc1349dab646d59f /src | |
parent | 5b525400af7fa7afe14f2568f21f505b7faf18ce (diff) | |
download | mongo-d81fb9e5c454f89b6c41099c8b8ce09c463344c6.tar.gz |
SERVER-51390 Always refresh database cache on StaleDatabaseVersion
Diffstat (limited to 'src')
-rw-r--r-- | src/mongo/s/catalog_cache.cpp | 2 | ||||
-rw-r--r-- | src/mongo/s/catalog_cache_test.cpp | 11 |
2 files changed, 13 insertions, 0 deletions
diff --git a/src/mongo/s/catalog_cache.cpp b/src/mongo/s/catalog_cache.cpp index ea2363fb9b2..c74d3b2ac28 100644 --- a/src/mongo/s/catalog_cache.cpp +++ b/src/mongo/s/catalog_cache.cpp @@ -247,6 +247,8 @@ void CatalogCache::onStaleDatabaseVersion(const StringData dbName, "db"_attr = dbName, "version"_attr = version.toBSONForLogging()); _databaseCache.advanceTimeInStore(dbName.toString(), version); + } else { + _databaseCache.invalidate(dbName.toString()); } } diff --git a/src/mongo/s/catalog_cache_test.cpp b/src/mongo/s/catalog_cache_test.cpp index 4d5c3d1f144..db6206ff88b 100644 --- a/src/mongo/s/catalog_cache_test.cpp +++ b/src/mongo/s/catalog_cache_test.cpp @@ -223,6 +223,17 @@ TEST_F(CatalogCacheTest, InvalidateSingleDbOnShardRemoval) { ASSERT_EQ(cachedDb.primaryId(), kShards[1]); } +TEST_F(CatalogCacheTest, OnStaleDatabaseVersionNoVersion) { + // onStaleDatabaseVesrsion must invalidate the database entry if invoked with no version + const auto dbVersion = DatabaseVersion(UUID::gen(), 1); + loadDatabases({DatabaseType(kNss.db().toString(), kShards[0], true, dbVersion)}); + + _catalogCache->onStaleDatabaseVersion(kNss.db(), boost::none); + + const auto status = _catalogCache->getDatabase(operationContext(), kNss.db()).getStatus(); + ASSERT(status == ErrorCodes::InternalError); +} + TEST_F(CatalogCacheTest, OnStaleShardVersionWithSameVersion) { const auto dbVersion = DatabaseVersion(UUID::gen(), 1); const auto cachedCollVersion = ChunkVersion(1, 0, OID::gen()); |