summaryrefslogtreecommitdiff
path: root/src/mongo/db/repl/oplog_entry.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/repl/oplog_entry.cpp')
-rw-r--r--src/mongo/db/repl/oplog_entry.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/mongo/db/repl/oplog_entry.cpp b/src/mongo/db/repl/oplog_entry.cpp
index 7f7363be06e..77fba82039f 100644
--- a/src/mongo/db/repl/oplog_entry.cpp
+++ b/src/mongo/db/repl/oplog_entry.cpp
@@ -764,5 +764,32 @@ int OplogEntry::getRawObjSizeBytes() const {
return _entry.getRawObjSizeBytes();
}
+OplogEntryParserNonStrict::OplogEntryParserNonStrict(const BSONObj& oplogEntry)
+ : _oplogEntryObject{oplogEntry.getOwned()} {}
+
+repl::OpTime OplogEntryParserNonStrict::getOpTime() const {
+ return uassertStatusOKWithContext(repl::OpTime::parseFromOplogEntry(_oplogEntryObject),
+ str::stream() << "Failed to parse opTime");
+}
+
+repl::OpTypeEnum OplogEntryParserNonStrict::getOpType() const {
+ auto opTypeElement = _oplogEntryObject[repl::OplogEntry::kOpTypeFieldName];
+ uassert(8881100,
+ str::stream() << "Invalid '" << repl::OplogEntry::kOpTypeFieldName
+ << "' field type (expected String)",
+ opTypeElement.type() == BSONType::String);
+ return repl::OpType_parse(IDLParserErrorContext("ChangeStreamEntry.op"),
+ opTypeElement.checkAndGetStringData());
+}
+
+BSONObj OplogEntryParserNonStrict::getObject() const {
+ auto objectElement = _oplogEntryObject[repl::OplogEntry::kObjectFieldName];
+ uassert(8881101,
+ str::stream() << "Invalid '" << repl::OplogEntry::kObjectFieldName
+ << "' field type (expected Object)",
+ objectElement.isABSONObj());
+ return objectElement.Obj();
+}
+
} // namespace repl
} // namespace mongo