diff options
author | Jason Chan <jason.chan@mongodb.com> | 2020-12-14 23:47:56 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-12-15 21:58:38 +0000 |
commit | 64be66623e1e13c66c83dc6f31c544d2276b55fd (patch) | |
tree | ef729d3dd02db232a722842c6fdc709a26063b12 | |
parent | 3625a82458f886db843d68f9ab4cc1c6fbfac4eb (diff) | |
download | mongo-64be66623e1e13c66c83dc6f31c544d2276b55fd.tar.gz |
SERVER-53112 Replicated oplog buffer can fail while inserting documents on failover
-rw-r--r-- | src/mongo/db/repl/oplog_buffer_collection.cpp | 2 | ||||
-rw-r--r-- | src/mongo/db/repl/oplog_fetcher.cpp | 10 |
2 files changed, 8 insertions, 4 deletions
diff --git a/src/mongo/db/repl/oplog_buffer_collection.cpp b/src/mongo/db/repl/oplog_buffer_collection.cpp index fbf3c77b17f..e0343e6b9c1 100644 --- a/src/mongo/db/repl/oplog_buffer_collection.cpp +++ b/src/mongo/db/repl/oplog_buffer_collection.cpp @@ -189,7 +189,7 @@ void OplogBufferCollection::push(OperationContext* opCtx, auto writeResult = write_ops_exec::performInserts(opCtx, insertOp); invariant(!writeResult.results.empty()); // Since the writes are ordered, it's ok to check just the last writeOp result. - fassert(40161, writeResult.results.back()); + uassertStatusOK(writeResult.results.back()); _lastPushedTimestamp = ts; diff --git a/src/mongo/db/repl/oplog_fetcher.cpp b/src/mongo/db/repl/oplog_fetcher.cpp index 3612d942eaf..153bb71cb9c 100644 --- a/src/mongo/db/repl/oplog_fetcher.cpp +++ b/src/mongo/db/repl/oplog_fetcher.cpp @@ -796,9 +796,13 @@ Status OplogFetcher::_onSuccessfulBatch(const Documents& documents) { info.resumeToken = pbrt.getTs(); } - auto status = _enqueueDocumentsFn(firstDocToApply, documents.cend(), info); - if (!status.isOK()) { - return status; + try { + auto status = _enqueueDocumentsFn(firstDocToApply, documents.cend(), info); + if (!status.isOK()) { + return status; + } + } catch (const DBException& e) { + return e.toStatus().withContext("Error inserting documents into oplog buffer collection"); } if (changeSyncSourceAction == ChangeSyncSourceAction::kStopSyncingAndEnqueueLastBatch) { |