summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntonio Fuschetto <antonio.fuschetto@mongodb.com>2021-05-26 12:16:25 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-05-26 19:18:36 +0000
commit7c2cac2cf98817d930a9912136e6e26b626d7b81 (patch)
tree43654fa4f3535603e9f3a776ffe8ab0df24e94a1
parent0a9dbc3437a683b65ba85b1e57bd5ae65c7e6476 (diff)
downloadmongo-7c2cac2cf98817d930a9912136e6e26b626d7b81.tar.gz
SERVER-57009 Additional debugging information in case of crash during FCV change
-rw-r--r--src/mongo/db/s/shard_server_catalog_cache_loader.cpp19
-rw-r--r--src/mongo/db/s/shard_server_catalog_cache_loader.h14
2 files changed, 30 insertions, 3 deletions
diff --git a/src/mongo/db/s/shard_server_catalog_cache_loader.cpp b/src/mongo/db/s/shard_server_catalog_cache_loader.cpp
index 2456f90b31e..c1efae18af7 100644
--- a/src/mongo/db/s/shard_server_catalog_cache_loader.cpp
+++ b/src/mongo/db/s/shard_server_catalog_cache_loader.cpp
@@ -1157,8 +1157,16 @@ void ShardServerCatalogCacheLoader::CollAndChunkTaskList::addTask(collAndChunkTa
return;
}
+ const auto& lastTask = _tasks.back();
if (task.dropped) {
- invariant(_tasks.back().maxQueryVersion == task.minQueryVersion);
+ invariant(lastTask.maxQueryVersion == task.minQueryVersion,
+ str::stream() << "The version of the added task is not contiguous with that of "
+ << "the previous one: LastTask {"
+ << lastTask.toString()
+ << "}, "
+ << "AddedTask {"
+ << task.toString()
+ << "}");
// As an optimization, on collection drop, clear any pending tasks in order to prevent any
// throw-away work from executing. Because we have no way to differentiate whether the
@@ -1172,8 +1180,13 @@ void ShardServerCatalogCacheLoader::CollAndChunkTaskList::addTask(collAndChunkTa
}
} else {
// Tasks must have contiguous versions, unless a complete reload occurs.
- invariant(_tasks.back().maxQueryVersion == task.minQueryVersion ||
- !task.minQueryVersion.isSet());
+ invariant(lastTask.maxQueryVersion == task.minQueryVersion || !task.minQueryVersion.isSet(),
+ str::stream() << "The added task is not the first and its version is not "
+ << "contiguous with that of the previous one: LastTask {"
+ << lastTask.toString()
+ << "}, AddedTask {"
+ << task.toString()
+ << "}");
_tasks.emplace_back(std::move(task));
}
diff --git a/src/mongo/db/s/shard_server_catalog_cache_loader.h b/src/mongo/db/s/shard_server_catalog_cache_loader.h
index d42245cfddc..5f1ba9ef40c 100644
--- a/src/mongo/db/s/shard_server_catalog_cache_loader.h
+++ b/src/mongo/db/s/shard_server_catalog_cache_loader.h
@@ -142,6 +142,20 @@ private:
// The term in which the loader scheduled this task.
uint32_t termCreated;
+
+ std::string toString() const {
+ std::stringstream ss;
+ ss << "CollAndChunkTask -"
+ << " taskNum: " << taskNum << ", collectionAndChangedChunksSize: "
+ << (collectionAndChangedChunks ? collectionAndChangedChunks->changedChunks.size()
+ : -1)
+ << ", minQueryVersion: "
+ << (minQueryVersion.isSet() ? minQueryVersion.toString() : "(unset)")
+ << ", maxQueryVersion: "
+ << (maxQueryVersion.isSet() ? maxQueryVersion.toString() : "(unset)")
+ << ", dropped: " << dropped << ", termCreated: " << termCreated;
+ return ss.str();
+ }
};
/**