summaryrefslogtreecommitdiff
path: root/src/mongo/db/repl/read_concern_args.cpp
diff options
context:
space:
mode:
authorRandolph Tan <randolph@10gen.com>2015-08-07 15:12:15 -0400
committerRandolph Tan <randolph@10gen.com>2015-08-11 12:08:51 -0400
commit8117ecc138e9f87ade5a475a2695d1e39f474d8c (patch)
tree0e5d0ba0a8bc3cde3cac62ce2c36f692e07a86eb /src/mongo/db/repl/read_concern_args.cpp
parent8e2990da71c1498d2a979ef47c07c2bfc2fa4f97 (diff)
downloadmongo-8117ecc138e9f87ade5a475a2695d1e39f474d8c.tar.gz
SERVER-19390 Make read concern args accept optional parameters
Diffstat (limited to 'src/mongo/db/repl/read_concern_args.cpp')
-rw-r--r--src/mongo/db/repl/read_concern_args.cpp60
1 files changed, 31 insertions, 29 deletions
diff --git a/src/mongo/db/repl/read_concern_args.cpp b/src/mongo/db/repl/read_concern_args.cpp
index 0b301d0fd8b..54cac6b3bc4 100644
--- a/src/mongo/db/repl/read_concern_args.cpp
+++ b/src/mongo/db/repl/read_concern_args.cpp
@@ -55,18 +55,18 @@ const string ReadConcernArgs::kOpTimestampFieldName("ts");
const string ReadConcernArgs::kOpTermFieldName("term");
const string ReadConcernArgs::kLevelFieldName("level");
-ReadConcernArgs::ReadConcernArgs()
- : ReadConcernArgs(OpTime(), ReadConcernLevel::kLocalReadConcern) {}
+ReadConcernArgs::ReadConcernArgs() = default;
-ReadConcernArgs::ReadConcernArgs(OpTime opTime, ReadConcernLevel level)
- : _opTime(std::move(opTime)), _level(level) {}
+ReadConcernArgs::ReadConcernArgs(boost::optional<OpTime> opTime,
+ boost::optional<ReadConcernLevel> level)
+ : _opTime(std::move(opTime)), _level(std::move(level)) {}
ReadConcernLevel ReadConcernArgs::getLevel() const {
- return _level;
+ return _level.value_or(ReadConcernLevel::kLocalReadConcern);
}
-const OpTime& ReadConcernArgs::getOpTime() const {
- return _opTime;
+OpTime ReadConcernArgs::getOpTime() const {
+ return _opTime.value_or(OpTime());
}
Status ReadConcernArgs::initialize(const BSONObj& cmdObj) {
@@ -123,9 +123,7 @@ Status ReadConcernArgs::initialize(const BSONObj& cmdObj) {
str::stream() << kReadConcernFieldName << '.' << kLevelFieldName
<< " must be either \"local\" or \"majority\"");
}
- } else if (readCommittedStatus == ErrorCodes::NoSuchKey) {
- _level = ReadConcernLevel::kLocalReadConcern;
- } else {
+ } else if (readCommittedStatus != ErrorCodes::NoSuchKey) {
return readCommittedStatus;
}
@@ -135,30 +133,34 @@ Status ReadConcernArgs::initialize(const BSONObj& cmdObj) {
void ReadConcernArgs::appendInfo(BSONObjBuilder* builder) {
BSONObjBuilder rcBuilder(builder->subobjStart(kReadConcernFieldName));
- string levelName;
- switch (_level) {
- case ReadConcernLevel::kLocalReadConcern:
- levelName = kLocalReadConcernStr;
- break;
+ if (_level) {
+ string levelName;
+ switch (_level.get()) {
+ case ReadConcernLevel::kLocalReadConcern:
+ levelName = kLocalReadConcernStr;
+ break;
- case ReadConcernLevel::kMajorityReadConcern:
- levelName = kMajorityReadConcernStr;
- break;
+ case ReadConcernLevel::kMajorityReadConcern:
+ levelName = kMajorityReadConcernStr;
+ break;
- case ReadConcernLevel::kLinearizableReadConcern:
- levelName = kLinearizableReadConcernStr;
- break;
+ case ReadConcernLevel::kLinearizableReadConcern:
+ levelName = kLinearizableReadConcernStr;
+ break;
- default:
- fassert(28754, false);
- }
+ default:
+ fassert(28754, false);
+ }
- rcBuilder.append(kLevelFieldName, levelName);
+ rcBuilder.append(kLevelFieldName, levelName);
+ }
- BSONObjBuilder afterBuilder(rcBuilder.subobjStart(kOpTimeFieldName));
- afterBuilder.append(kOpTimestampFieldName, _opTime.getTimestamp());
- afterBuilder.append(kOpTermFieldName, _opTime.getTerm());
- afterBuilder.done();
+ if (_opTime) {
+ BSONObjBuilder afterBuilder(rcBuilder.subobjStart(kOpTimeFieldName));
+ afterBuilder.append(kOpTimestampFieldName, _opTime->getTimestamp());
+ afterBuilder.append(kOpTermFieldName, _opTime->getTerm());
+ afterBuilder.done();
+ }
rcBuilder.done();
}