summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Chan <jason.chan@mongodb.com>2020-12-14 23:47:56 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-12-15 21:58:38 +0000
commit64be66623e1e13c66c83dc6f31c544d2276b55fd (patch)
treeef729d3dd02db232a722842c6fdc709a26063b12
parent3625a82458f886db843d68f9ab4cc1c6fbfac4eb (diff)
downloadmongo-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.cpp2
-rw-r--r--src/mongo/db/repl/oplog_fetcher.cpp10
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) {