summaryrefslogtreecommitdiff
path: root/src/mongo/db/index/index_build_interceptor.cpp
diff options
context:
space:
mode:
authorLouis Williams <louis.williams@mongodb.com>2019-01-02 16:48:56 -0500
committerLouis Williams <louis.williams@mongodb.com>2019-01-17 11:35:32 -0500
commite12dcc7fdbdb44fb7806dfb42a49bd740f361d82 (patch)
treed23cdd47b52a10b5100598a8f6464febf8ec9b80 /src/mongo/db/index/index_build_interceptor.cpp
parent7edc50cf214893688eb8432619e4a8bba18d107b (diff)
downloadmongo-e12dcc7fdbdb44fb7806dfb42a49bd740f361d82.tar.gz
SERVER-37270 Remove foreground index builds by default
Diffstat (limited to 'src/mongo/db/index/index_build_interceptor.cpp')
-rw-r--r--src/mongo/db/index/index_build_interceptor.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/mongo/db/index/index_build_interceptor.cpp b/src/mongo/db/index/index_build_interceptor.cpp
index c1a2d3d34a6..5769ada5698 100644
--- a/src/mongo/db/index/index_build_interceptor.cpp
+++ b/src/mongo/db/index/index_build_interceptor.cpp
@@ -271,6 +271,7 @@ boost::optional<MultikeyPaths> IndexBuildInterceptor::getMultikeyPaths() const {
Status IndexBuildInterceptor::sideWrite(OperationContext* opCtx,
IndexAccessMethod* indexAccessMethod,
const BSONObj* obj,
+ const InsertDeleteOptions& options,
RecordId loc,
Op op,
int64_t* const numKeysOut) {
@@ -281,11 +282,14 @@ Status IndexBuildInterceptor::sideWrite(OperationContext* opCtx,
BSONObjSet multikeyMetadataKeys = SimpleBSONObjComparator::kInstance.makeBSONObjSet();
MultikeyPaths multikeyPaths;
- indexAccessMethod->getKeys(*obj,
- IndexAccessMethod::GetKeysMode::kEnforceConstraints,
- &keys,
- &multikeyMetadataKeys,
- &multikeyPaths);
+ // Override key constraints when generating keys for removal. This is the same behavior as
+ // IndexAccessMethod::remove and only applies to keys that do not apply to a partial filter
+ // expression.
+ const auto getKeysMode = op == Op::kInsert
+ ? options.getKeysMode
+ : IndexAccessMethod::GetKeysMode::kRelaxConstraintsUnfiltered;
+ indexAccessMethod->getKeys(*obj, getKeysMode, &keys, &multikeyMetadataKeys, &multikeyPaths);
+
// Maintain parity with IndexAccessMethods handling of key counting. Only include
// `multikeyMetadataKeys` when inserting.
*numKeysOut = keys.size() + (op == Op::kInsert ? multikeyMetadataKeys.size() : 0);