From 48706d5d2779e16e4f4183bc0fd6343510cb17e0 Mon Sep 17 00:00:00 2001 From: Geert Bosch Date: Tue, 22 Oct 2019 16:51:40 +0000 Subject: SERVER-44098 Pass only number of keys in shouldMarkIndexAsMultiKey --- src/mongo/db/catalog/validate_adaptor.cpp | 2 +- src/mongo/db/index/index_access_method.cpp | 10 +++++----- src/mongo/db/index/index_access_method.h | 4 ++-- src/mongo/db/index/wildcard_access_method.cpp | 2 +- src/mongo/db/index/wildcard_access_method.h | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/mongo/db/catalog/validate_adaptor.cpp b/src/mongo/db/catalog/validate_adaptor.cpp index 1bee0a64c0a..61e592abc25 100644 --- a/src/mongo/db/catalog/validate_adaptor.cpp +++ b/src/mongo/db/catalog/validate_adaptor.cpp @@ -105,7 +105,7 @@ Status ValidateAdaptor::validateRecord(OperationContext* opCtx, if (!descriptor->isMultikey() && iam->shouldMarkIndexAsMultikey( - {documentKeySet.begin(), documentKeySet.end()}, + documentKeySet.size(), {multikeyMetadataKeys.begin(), multikeyMetadataKeys.end()}, multikeyPaths)) { std::string msg = str::stream() diff --git a/src/mongo/db/index/index_access_method.cpp b/src/mongo/db/index/index_access_method.cpp index 05a93d4ebfe..321c682a5ec 100644 --- a/src/mongo/db/index/index_access_method.cpp +++ b/src/mongo/db/index/index_access_method.cpp @@ -179,7 +179,7 @@ Status AbstractIndexAccessMethod::insertKeys(OperationContext* opCtx, result->numInserted += keys.size() + multikeyMetadataKeys.size(); } - if (shouldMarkIndexAsMultikey(keys, multikeyMetadataKeys, multikeyPaths)) { + if (shouldMarkIndexAsMultikey(keys.size(), multikeyMetadataKeys, multikeyPaths)) { _btreeState->setMultikey(opCtx, multikeyPaths); } return Status::OK(); @@ -407,7 +407,7 @@ Status AbstractIndexAccessMethod::update(OperationContext* opCtx, } if (shouldMarkIndexAsMultikey( - {ticket.newKeys.begin(), ticket.newKeys.end()}, + ticket.newKeys.size(), {ticket.newMultikeyMetadataKeys.begin(), ticket.newMultikeyMetadataKeys.end()}, ticket.newMultikeyPaths)) { _btreeState->setMultikey(opCtx, ticket.newMultikeyPaths); @@ -514,7 +514,7 @@ Status AbstractIndexAccessMethod::BulkBuilderImpl::insert(OperationContext* opCt _isMultiKey = _isMultiKey || _real->shouldMarkIndexAsMultikey( - {keys.begin(), keys.end()}, + keys.size(), {_multikeyMetadataKeys.begin(), _multikeyMetadataKeys.end()}, multikeyPaths); @@ -704,10 +704,10 @@ void AbstractIndexAccessMethod::getKeys(const BSONObj& obj, } bool AbstractIndexAccessMethod::shouldMarkIndexAsMultikey( - const vector& keys, + size_t numberOfKeys, const vector& multikeyMetadataKeys, const MultikeyPaths& multikeyPaths) const { - return (keys.size() > 1 || isMultikeyFromPaths(multikeyPaths)); + return numberOfKeys > 1 || isMultikeyFromPaths(multikeyPaths); } SortedDataInterface* AbstractIndexAccessMethod::getSortedDataInterface() const { diff --git a/src/mongo/db/index/index_access_method.h b/src/mongo/db/index/index_access_method.h index b769dfe5a08..0961321b269 100644 --- a/src/mongo/db/index/index_access_method.h +++ b/src/mongo/db/index/index_access_method.h @@ -304,7 +304,7 @@ public: * document, return 'true' if the index should be marked as multikey and 'false' otherwise. */ virtual bool shouldMarkIndexAsMultikey( - const std::vector& keys, + size_t numberOfKeys, const std::vector& multikeyMetadataKeys, const MultikeyPaths& multikeyPaths) const = 0; @@ -504,7 +504,7 @@ public: MultikeyPaths* multikeyPaths, boost::optional id = boost::none) const final; - bool shouldMarkIndexAsMultikey(const std::vector& keys, + bool shouldMarkIndexAsMultikey(size_t numberOfKeys, const std::vector& multikeyMetadataKeys, const MultikeyPaths& multikeyPaths) const override; diff --git a/src/mongo/db/index/wildcard_access_method.cpp b/src/mongo/db/index/wildcard_access_method.cpp index 0f483710727..f77fe1d84a4 100644 --- a/src/mongo/db/index/wildcard_access_method.cpp +++ b/src/mongo/db/index/wildcard_access_method.cpp @@ -47,7 +47,7 @@ WildcardAccessMethod::WildcardAccessMethod(IndexCatalogEntry* wildcardState, getSortedDataInterface()->getOrdering()) {} bool WildcardAccessMethod::shouldMarkIndexAsMultikey( - const std::vector& keys, + size_t numberOfKeys, const std::vector& multikeyMetadataKeys, const MultikeyPaths& multikeyPaths) const { return !multikeyMetadataKeys.empty(); diff --git a/src/mongo/db/index/wildcard_access_method.h b/src/mongo/db/index/wildcard_access_method.h index 3390261a0f8..69ca0ad80dd 100644 --- a/src/mongo/db/index/wildcard_access_method.h +++ b/src/mongo/db/index/wildcard_access_method.h @@ -66,7 +66,7 @@ public: * more multikey metadata keys have been generated; that is, if the 'multikeyMetadataKeys' * vector is non-empty. */ - bool shouldMarkIndexAsMultikey(const std::vector& keys, + bool shouldMarkIndexAsMultikey(size_t numberOfKeys, const std::vector& multikeyMetadataKeys, const MultikeyPaths& multikeyPaths) const final; -- cgit v1.2.1