summaryrefslogtreecommitdiff
path: root/src/mongo/db/catalog/index_builds_manager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/catalog/index_builds_manager.cpp')
-rw-r--r--src/mongo/db/catalog/index_builds_manager.cpp40
1 files changed, 21 insertions, 19 deletions
diff --git a/src/mongo/db/catalog/index_builds_manager.cpp b/src/mongo/db/catalog/index_builds_manager.cpp
index 4ecb47683e2..e14a03577cd 100644
--- a/src/mongo/db/catalog/index_builds_manager.cpp
+++ b/src/mongo/db/catalog/index_builds_manager.cpp
@@ -74,7 +74,8 @@ IndexBuildsManager::~IndexBuildsManager() {
Status IndexBuildsManager::setUpIndexBuild(OperationContext* opCtx,
Collection* collection,
const std::vector<BSONObj>& specs,
- const UUID& buildUUID) {
+ const UUID& buildUUID,
+ OnInitFn onInit) {
_registerIndexBuild(opCtx, collection, buildUUID);
const auto& nss = collection->ns();
@@ -85,10 +86,10 @@ Status IndexBuildsManager::setUpIndexBuild(OperationContext* opCtx,
auto builder = _getBuilder(buildUUID);
- auto initResult = writeConflictRetry(opCtx,
- "IndexBuildsManager::setUpIndexBuild",
- nss.ns(),
- [builder, &specs] { return builder->init(specs); });
+ auto initResult = writeConflictRetry(
+ opCtx, "IndexBuildsManager::setUpIndexBuild", nss.ns(), [opCtx, builder, &onInit, &specs] {
+ return builder->init(specs, onInit);
+ });
if (!initResult.isOK()) {
return initResult.getStatus();
@@ -138,22 +139,23 @@ Status IndexBuildsManager::checkIndexConstraintViolations(const UUID& buildUUID)
Status IndexBuildsManager::commitIndexBuild(OperationContext* opCtx,
const NamespaceString& nss,
const UUID& buildUUID,
- OnCommitFn onCommitFn) {
+ MultiIndexBlock::OnCreateEachFn onCreateEachFn,
+ MultiIndexBlock::OnCommitFn onCommitFn) {
auto builder = _getBuilder(buildUUID);
- return writeConflictRetry(
- opCtx, "IndexBuildsManager::commitIndexBuild", nss.ns(), [builder, opCtx, &onCommitFn] {
- WriteUnitOfWork wunit(opCtx);
-
- auto status = builder->commit(onCommitFn);
- if (!status.isOK()) {
- return status;
- }
-
- wunit.commit();
-
- return Status::OK();
- });
+ return writeConflictRetry(opCtx,
+ "IndexBuildsManager::commitIndexBuild",
+ nss.ns(),
+ [builder, opCtx, &onCreateEachFn, &onCommitFn] {
+ WriteUnitOfWork wunit(opCtx);
+ auto status = builder->commit(onCreateEachFn, onCommitFn);
+ if (!status.isOK()) {
+ return status;
+ }
+
+ wunit.commit();
+ return Status::OK();
+ });
}
bool IndexBuildsManager::abortIndexBuild(const UUID& buildUUID, const std::string& reason) {