diff options
author | Louis Williams <louis.williams@mongodb.com> | 2019-02-05 13:05:27 -0500 |
---|---|---|
committer | Louis Williams <louis.williams@mongodb.com> | 2019-02-12 13:15:24 +1100 |
commit | 7defb111584754daefece019f9045e1f0e1811ef (patch) | |
tree | 31c63fcffcdd8a6eaf4e5c614eeef54d381224a2 /src/mongo/db/catalog/index_builds_manager.cpp | |
parent | e4f593b3dee7808d27c9db54c517ab198f5d9f89 (diff) | |
download | mongo-7defb111584754daefece019f9045e1f0e1811ef.tar.gz |
SERVER-39068 Replicate startIndexBuild and commitIndexBuild oplog entrires
Diffstat (limited to 'src/mongo/db/catalog/index_builds_manager.cpp')
-rw-r--r-- | src/mongo/db/catalog/index_builds_manager.cpp | 40 |
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) { |