summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLingzhi Deng <lingzhi.deng@mongodb.com>2019-03-27 17:59:17 -0400
committerLingzhi Deng <lingzhi.deng@mongodb.com>2019-03-27 18:06:15 -0400
commit74fd169e8867b4633d4c1677055dda74e3460238 (patch)
tree0b7d4a5a4bc8f5ceffaee6301e174a07ab99cf89 /src
parent109129eb5f46419e852b65eb35f935194d17fd5d (diff)
downloadmongo-74fd169e8867b4633d4c1677055dda74e3460238.tar.gz
SERVER-39672: default to local if no read concern specified for a multi-statment transaction
Diffstat (limited to 'src')
-rw-r--r--src/mongo/db/repl/read_concern_args.cpp3
-rw-r--r--src/mongo/db/repl/read_concern_args_test.cpp9
2 files changed, 11 insertions, 1 deletions
diff --git a/src/mongo/db/repl/read_concern_args.cpp b/src/mongo/db/repl/read_concern_args.cpp
index ae728d08f23..be12bb924b9 100644
--- a/src/mongo/db/repl/read_concern_args.cpp
+++ b/src/mongo/db/repl/read_concern_args.cpp
@@ -106,7 +106,8 @@ ReadConcernLevel ReadConcernArgs::getLevel() const {
}
ReadConcernLevel ReadConcernArgs::getOriginalLevel() const {
- return _originalLevel.value_or(getLevel());
+ // If no read concern specified, default to "local"
+ return _originalLevel.value_or(ReadConcernLevel::kLocalReadConcern);
}
bool ReadConcernArgs::hasLevel() const {
diff --git a/src/mongo/db/repl/read_concern_args_test.cpp b/src/mongo/db/repl/read_concern_args_test.cpp
index 6eb88779e57..ed6ec48875c 100644
--- a/src/mongo/db/repl/read_concern_args_test.cpp
+++ b/src/mongo/db/repl/read_concern_args_test.cpp
@@ -510,6 +510,7 @@ TEST(UpconvertReadConcernLevelToSnapshot, EmptyLevel) {
ASSERT_OK(readConcern.upconvertReadConcernLevelToSnapshot());
ASSERT(ReadConcernLevel::kSnapshotReadConcern == readConcern.getLevel());
+ ASSERT(ReadConcernLevel::kLocalReadConcern == readConcern.getOriginalLevel());
}
TEST(UpconvertReadConcernLevelToSnapshot, LevelLocal) {
@@ -522,6 +523,7 @@ TEST(UpconvertReadConcernLevelToSnapshot, LevelLocal) {
ASSERT_OK(readConcern.upconvertReadConcernLevelToSnapshot());
ASSERT(ReadConcernLevel::kSnapshotReadConcern == readConcern.getLevel());
+ ASSERT(ReadConcernLevel::kLocalReadConcern == readConcern.getOriginalLevel());
}
TEST(UpconvertReadConcernLevelToSnapshot, LevelMajority) {
@@ -535,6 +537,7 @@ TEST(UpconvertReadConcernLevelToSnapshot, LevelMajority) {
ASSERT_OK(readConcern.upconvertReadConcernLevelToSnapshot());
ASSERT(ReadConcernLevel::kSnapshotReadConcern == readConcern.getLevel());
+ ASSERT(ReadConcernLevel::kMajorityReadConcern == readConcern.getOriginalLevel());
}
TEST(UpconvertReadConcernLevelToSnapshot, LevelSnapshot) {
@@ -548,6 +551,7 @@ TEST(UpconvertReadConcernLevelToSnapshot, LevelSnapshot) {
ASSERT_OK(readConcern.upconvertReadConcernLevelToSnapshot());
ASSERT(ReadConcernLevel::kSnapshotReadConcern == readConcern.getLevel());
+ ASSERT(ReadConcernLevel::kSnapshotReadConcern == readConcern.getOriginalLevel());
}
TEST(UpconvertReadConcernLevelToSnapshot, LevelSnapshotWithAtClusterTime) {
@@ -565,6 +569,7 @@ TEST(UpconvertReadConcernLevelToSnapshot, LevelSnapshotWithAtClusterTime) {
ASSERT_OK(readConcern.upconvertReadConcernLevelToSnapshot());
ASSERT(ReadConcernLevel::kSnapshotReadConcern == readConcern.getLevel());
+ ASSERT(ReadConcernLevel::kSnapshotReadConcern == readConcern.getOriginalLevel());
ASSERT_TRUE(readConcern.getArgsAtClusterTime());
}
@@ -581,6 +586,7 @@ TEST(UpconvertReadConcernLevelToSnapshot, AfterClusterTime) {
ASSERT_OK(readConcern.upconvertReadConcernLevelToSnapshot());
ASSERT(ReadConcernLevel::kSnapshotReadConcern == readConcern.getLevel());
+ ASSERT(ReadConcernLevel::kLocalReadConcern == readConcern.getOriginalLevel());
ASSERT_TRUE(readConcern.getArgsAfterClusterTime());
}
@@ -595,6 +601,7 @@ TEST(UpconvertReadConcernLevelToSnapshot, LevelAvailable) {
ASSERT_NOT_OK(readConcern.upconvertReadConcernLevelToSnapshot());
ASSERT(ReadConcernLevel::kAvailableReadConcern == readConcern.getLevel());
+ ASSERT(ReadConcernLevel::kAvailableReadConcern == readConcern.getOriginalLevel());
}
TEST(UpconvertReadConcernLevelToSnapshot, LevelLinearizable) {
@@ -608,6 +615,7 @@ TEST(UpconvertReadConcernLevelToSnapshot, LevelLinearizable) {
ASSERT_NOT_OK(readConcern.upconvertReadConcernLevelToSnapshot());
ASSERT(ReadConcernLevel::kLinearizableReadConcern == readConcern.getLevel());
+ ASSERT(ReadConcernLevel::kLinearizableReadConcern == readConcern.getOriginalLevel());
}
TEST(UpconvertReadConcernLevelToSnapshot, AfterOpTime) {
@@ -624,6 +632,7 @@ TEST(UpconvertReadConcernLevelToSnapshot, AfterOpTime) {
ASSERT_NOT_OK(readConcern.upconvertReadConcernLevelToSnapshot());
ASSERT(ReadConcernLevel::kLocalReadConcern == readConcern.getLevel());
+ ASSERT(ReadConcernLevel::kLocalReadConcern == readConcern.getOriginalLevel());
ASSERT_TRUE(readConcern.getArgsOpTime());
}