summaryrefslogtreecommitdiff
path: root/src/mongo/bson/util/bson_extract.cpp
diff options
context:
space:
mode:
authormatt dannenberg <matt.dannenberg@10gen.com>2015-08-07 06:36:44 -0400
committermatt dannenberg <matt.dannenberg@10gen.com>2015-08-12 04:22:28 -0400
commit86a3e6352eb27fd2e6115299bcec5103a830fe36 (patch)
tree7f7f42491808e8c487e47a710deb445448d18a58 /src/mongo/bson/util/bson_extract.cpp
parent7bb09c0377f5160857617c38ab07955f8f4b03f6 (diff)
downloadmongo-86a3e6352eb27fd2e6115299bcec5103a830fe36.tar.gz
SERVER-19554 merge ReplSetMetadata and ReplicationMetadata
Diffstat (limited to 'src/mongo/bson/util/bson_extract.cpp')
-rw-r--r--src/mongo/bson/util/bson_extract.cpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/mongo/bson/util/bson_extract.cpp b/src/mongo/bson/util/bson_extract.cpp
index d5b5b83e6da..4906d0897a5 100644
--- a/src/mongo/bson/util/bson_extract.cpp
+++ b/src/mongo/bson/util/bson_extract.cpp
@@ -32,6 +32,13 @@
namespace mongo {
+namespace {
+
+const char kTermFieldName[] = "term";
+const char kTimestampFieldName[] = "ts";
+
+} // namespace
+
Status bsonExtractField(const BSONObj& object, StringData fieldName, BSONElement* outElement) {
BSONElement element = object.getField(fieldName);
if (element.eoo())
@@ -98,6 +105,25 @@ Status bsonExtractStringField(const BSONObj& object, StringData fieldName, std::
return Status::OK();
}
+Status bsonExtractOpTimeField(const BSONObj& object, StringData fieldName, repl::OpTime* out) {
+ BSONElement element;
+ Status status = bsonExtractTypedField(object, fieldName, Object, &element);
+ if (!status.isOK())
+ return status;
+
+ BSONObj opTimeObj = element.Obj();
+ Timestamp ts;
+ status = bsonExtractTimestampField(opTimeObj, kTimestampFieldName, &ts);
+ if (!status.isOK())
+ return status;
+ long long term;
+ status = bsonExtractIntegerField(opTimeObj, kTermFieldName, &term);
+ if (!status.isOK())
+ return status;
+ *out = repl::OpTime(ts, term);
+ return Status::OK();
+}
+
Status bsonExtractTimestampField(const BSONObj& object, StringData fieldName, Timestamp* out) {
BSONElement element;
Status status = bsonExtractTypedField(object, fieldName, bsonTimestamp, &element);