diff options
-rw-r--r-- | src/mongo/db/s/shard_server_catalog_cache_loader.cpp | 13 | ||||
-rw-r--r-- | src/mongo/db/s/shard_server_catalog_cache_loader.h | 14 |
2 files changed, 24 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 18a3edd0750..81ef9dfde9d 100644 --- a/src/mongo/db/s/shard_server_catalog_cache_loader.cpp +++ b/src/mongo/db/s/shard_server_catalog_cache_loader.cpp @@ -1161,8 +1161,12 @@ 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 @@ -1176,8 +1180,11 @@ 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 a7fa28e919d..7e19a851aed 100644 --- a/src/mongo/db/s/shard_server_catalog_cache_loader.h +++ b/src/mongo/db/s/shard_server_catalog_cache_loader.h @@ -145,6 +145,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(); + } }; /** |