summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Russotto <matthew.russotto@10gen.com>2020-05-01 10:03:33 -0400
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-05-01 14:51:48 +0000
commit816dedac32425670d6292ea5e50f297e35a87b6b (patch)
tree2ea8cbcc2ce5f43987862a8798a3584ba368120b
parentf0d436d8a5f169d5ae992073e949823b64e27795 (diff)
downloadmongo-816dedac32425670d6292ea5e50f297e35a87b6b.tar.gz
SERVER-47878 Need to always serialize tags field in config, even if not provided or empty
-rw-r--r--src/mongo/db/repl/member_config.cpp5
-rw-r--r--src/mongo/db/repl/member_config_test.cpp15
2 files changed, 17 insertions, 3 deletions
diff --git a/src/mongo/db/repl/member_config.cpp b/src/mongo/db/repl/member_config.cpp
index 11647ebb6a0..aec6ae71762 100644
--- a/src/mongo/db/repl/member_config.cpp
+++ b/src/mongo/db/repl/member_config.cpp
@@ -189,9 +189,8 @@ BSONObj MemberConfig::toBSON(bool omitNewlyAddedField) const {
configBuilder.append(kHiddenFieldName, getHidden());
configBuilder.append(kPriorityFieldName, MemberConfigBase::getPriority());
- if (hasTags()) {
- configBuilder.append(kTagsFieldName, *getTags());
- }
+ // For historical reasons we always emit a tag field; some jstests expect it.
+ configBuilder.append(kTagsFieldName, getTags() ? *getTags() : BSONObj());
_splitHorizon.toBSON(configBuilder);
diff --git a/src/mongo/db/repl/member_config_test.cpp b/src/mongo/db/repl/member_config_test.cpp
index ac4072660e5..1fbfb94329b 100644
--- a/src/mongo/db/repl/member_config_test.cpp
+++ b/src/mongo/db/repl/member_config_test.cpp
@@ -822,6 +822,21 @@ TEST(MemberConfig, ParseEmptyTags) {
&tagConfig);
ASSERT_EQUALS(5U, mc.getNumTags());
ASSERT_FALSE(mc.hasTags());
+ BSONObj obj = mc.toBSON();
+ BSONElement tagField = obj.getField("tags");
+ ASSERT_TRUE(tagField.type() == Object);
+ ASSERT_TRUE(tagField.Obj().isEmpty());
+}
+
+TEST(MemberConfig, TagsSerializedWhenMissing) {
+ ReplSetTagConfig tagConfig;
+ MemberConfig mc(BSON("_id" << 0 << "host"
+ << "localhost:12345"),
+ &tagConfig);
+ BSONObj obj = mc.toBSON();
+ BSONElement tagField = obj.getField("tags");
+ ASSERT_TRUE(tagField.type() == Object);
+ ASSERT_TRUE(tagField.Obj().isEmpty());
}
TEST(MemberConfig, ParseHorizonFields) {