summaryrefslogtreecommitdiff
path: root/src/mongo/s
diff options
context:
space:
mode:
authorAndy Schwerin <schwerin@mongodb.com>2017-06-28 17:13:47 -0400
committerAndy Schwerin <schwerin@mongodb.com>2017-07-21 08:46:59 -0400
commit43441676092ae87f4d0cc1bf81877f9610149454 (patch)
tree402b30249f6ea98141ad6970b63120c53cc26266 /src/mongo/s
parenta045e38ca392f8354ea85ec5cebfb6d52892f444 (diff)
downloadmongo-43441676092ae87f4d0cc1bf81877f9610149454.tar.gz
SERVER-29817 Use hinted insert when building chunkRangeMap
Diffstat (limited to 'src/mongo/s')
-rw-r--r--src/mongo/s/chunk_manager.cpp11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/mongo/s/chunk_manager.cpp b/src/mongo/s/chunk_manager.cpp
index d07dc9a66eb..1b09f52f577 100644
--- a/src/mongo/s/chunk_manager.cpp
+++ b/src/mongo/s/chunk_manager.cpp
@@ -380,14 +380,17 @@ ChunkManager::ChunkMapViews ChunkManager::_constructChunkMapViews(const OID& epo
const BSONObj rangeMin = firstChunkInRange->getMin();
const BSONObj rangeMax = rangeLast->second->getMax();
- const auto insertResult = chunkRangeMap.insert(std::make_pair(
- rangeMax, ShardAndChunkRange{{rangeMin, rangeMax}, firstChunkInRange->getShardId()}));
+ const auto oldSize = chunkRangeMap.size();
+ const auto insertIterator = chunkRangeMap.insert(
+ chunkRangeMap.end(),
+ std::make_pair(
+ rangeMax,
+ ShardAndChunkRange{{rangeMin, rangeMax}, firstChunkInRange->getShardId()}));
uassert(ErrorCodes::ConflictingOperationInProgress,
str::stream() << "Metadata contains two chunks with the same max value "
<< rangeMax,
- insertResult.second);
+ oldSize + 1 == chunkRangeMap.size());
- const auto& insertIterator = insertResult.first;
if (insertIterator != chunkRangeMap.begin()) {
// Make sure there are no gaps in the ranges