diff options
author | Louis Williams <louis.williams@mongodb.com> | 2019-01-02 16:48:56 -0500 |
---|---|---|
committer | Louis Williams <louis.williams@mongodb.com> | 2019-01-17 11:35:32 -0500 |
commit | e12dcc7fdbdb44fb7806dfb42a49bd740f361d82 (patch) | |
tree | d23cdd47b52a10b5100598a8f6464febf8ec9b80 /src/mongo/db/index/index_build_interceptor.cpp | |
parent | 7edc50cf214893688eb8432619e4a8bba18d107b (diff) | |
download | mongo-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.cpp | 14 |
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); |