diff options
Diffstat (limited to 'src/mongo/db/index')
-rw-r--r-- | src/mongo/db/index/index_access_method.cpp | 17 | ||||
-rw-r--r-- | src/mongo/db/index/index_access_method.h | 2 | ||||
-rw-r--r-- | src/mongo/db/index/index_build_interceptor.cpp | 14 | ||||
-rw-r--r-- | src/mongo/db/index/index_build_interceptor.h | 1 |
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); |