summaryrefslogtreecommitdiff
path: root/src/mongo/db/index
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/index')
-rw-r--r--src/mongo/db/index/index_access_method.cpp17
-rw-r--r--src/mongo/db/index/index_access_method.h2
-rw-r--r--src/mongo/db/index/index_build_interceptor.cpp14
-rw-r--r--src/mongo/db/index/index_build_interceptor.h1
4 files changed, 17 insertions, 17 deletions
diff --git a/src/mongo/db/index/index_access_method.cpp b/src/mongo/db/index/index_access_method.cpp
index 081bb8a2ed2..952afd749db 100644
--- a/src/mongo/db/index/index_access_method.cpp
+++ b/src/mongo/db/index/index_access_method.cpp
@@ -183,7 +183,7 @@ Status AbstractIndexAccessMethod::insert(OperationContext* opCtx,
const RecordId& loc,
const InsertDeleteOptions& options,
InsertResult* result) {
- invariant(options.fromIndexBuilder || !_btreeState->isBuilding());
+ invariant(options.fromIndexBuilder || !_btreeState->isHybridBuilding());
BSONObjSet multikeyMetadataKeys = SimpleBSONObjComparator::kInstance.makeBSONObjSet();
BSONObjSet keys = SimpleBSONObjComparator::kInstance.makeBSONObjSet();
@@ -283,7 +283,7 @@ Status AbstractIndexAccessMethod::remove(OperationContext* opCtx,
const RecordId& loc,
const InsertDeleteOptions& options,
int64_t* numDeleted) {
- invariant(!_btreeState->isBuilding());
+ invariant(!_btreeState->isHybridBuilding());
invariant(numDeleted);
*numDeleted = 0;
@@ -468,7 +468,7 @@ Status AbstractIndexAccessMethod::update(OperationContext* opCtx,
const UpdateTicket& ticket,
int64_t* numInserted,
int64_t* numDeleted) {
- invariant(!_btreeState->isBuilding());
+ invariant(!_btreeState->isHybridBuilding());
invariant(ticket.newKeys.size() ==
ticket.oldKeys.size() + ticket.added.size() - ticket.removed.size());
invariant(numInserted);
@@ -634,7 +634,6 @@ int64_t AbstractIndexAccessMethod::BulkBuilderImpl::getKeysInserted() const {
Status AbstractIndexAccessMethod::commitBulk(OperationContext* opCtx,
BulkBuilder* bulk,
- bool mayInterrupt,
bool dupsAllowed,
set<RecordId>* dupRecords,
std::vector<BSONObj>* dupKeysInserted) {
@@ -663,9 +662,7 @@ Status AbstractIndexAccessMethod::commitBulk(OperationContext* opCtx,
const Ordering ordering = Ordering::make(_descriptor->keyPattern());
while (it->more()) {
- if (mayInterrupt) {
- opCtx->checkForInterrupt();
- }
+ opCtx->checkForInterrupt();
WriteUnitOfWork wunit(opCtx);
@@ -722,11 +719,11 @@ Status AbstractIndexAccessMethod::commitBulk(OperationContext* opCtx,
pm.finished();
- log() << "index build: inserted keys from external sorter into index in " << timer.seconds()
- << " seconds";
+ log() << "index build: inserted " << bulk->getKeysInserted()
+ << " keys from external sorter into index in " << timer.seconds() << " seconds";
WriteUnitOfWork wunit(opCtx);
- SpecialFormatInserted specialFormatInserted = builder->commit(mayInterrupt);
+ SpecialFormatInserted specialFormatInserted = builder->commit(true /* mayInterrupt */);
// It's ok to insert KeyStrings with long TypeBits but we need to mark the feature
// tracker bit so that downgrade binary which cannot read the long TypeBits fails to
// start up.
diff --git a/src/mongo/db/index/index_access_method.h b/src/mongo/db/index/index_access_method.h
index 1edf7fdd209..8931ec64517 100644
--- a/src/mongo/db/index/index_access_method.h
+++ b/src/mongo/db/index/index_access_method.h
@@ -286,7 +286,6 @@ public:
virtual Status commitBulk(OperationContext* opCtx,
BulkBuilder* bulk,
- bool mayInterrupt,
bool dupsAllowed,
std::set<RecordId>* dupRecords,
std::vector<BSONObj>* dupKeys) = 0;
@@ -520,7 +519,6 @@ public:
Status commitBulk(OperationContext* opCtx,
BulkBuilder* bulk,
- bool mayInterrupt,
bool dupsAllowed,
std::set<RecordId>* dupRecords,
std::vector<BSONObj>* dupKeys) final;
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);
diff --git a/src/mongo/db/index/index_build_interceptor.h b/src/mongo/db/index/index_build_interceptor.h
index fbfb8c298d2..9842e999489 100644
--- a/src/mongo/db/index/index_build_interceptor.h
+++ b/src/mongo/db/index/index_build_interceptor.h
@@ -63,6 +63,7 @@ public:
Status sideWrite(OperationContext* opCtx,
IndexAccessMethod* indexAccessMethod,
const BSONObj* obj,
+ const InsertDeleteOptions& options,
RecordId loc,
Op op,
int64_t* const numKeysOut);