summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTommaso Tocci <tommaso.tocci@mongodb.com>2020-10-07 16:04:22 +0200
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-10-08 10:26:33 +0000
commitd81fb9e5c454f89b6c41099c8b8ce09c463344c6 (patch)
treeae2ba8852774dfb075166e40cc1349dab646d59f
parent5b525400af7fa7afe14f2568f21f505b7faf18ce (diff)
downloadmongo-d81fb9e5c454f89b6c41099c8b8ce09c463344c6.tar.gz
SERVER-51390 Always refresh database cache on StaleDatabaseVersion
-rw-r--r--src/mongo/s/catalog_cache.cpp2
-rw-r--r--src/mongo/s/catalog_cache_test.cpp11
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());