From: Sage Weil Date: Wed, 6 Mar 2019 17:05:07 +0000 (-0600) Subject: msg/msg_types: make legacy_equals() symmetrical X-Git-Tag: v14.1.1~21^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=9b379de572fa031952fc3367938edb2fc41d9fd6;p=ceph.git msg/msg_types: make legacy_equals() symmetrical The prior version would return true for [v2,v1] vs [v2,v1] [v2,v1] vs [v1] but not [v1] vs [v2,v1] Now that final case is also true, which means a.legacy_equals(b) == b.legacy_equals(a) for any combination. This is what you would expect for an equality operator... even a fuzzy one. Signed-off-by: Sage Weil --- diff --git a/src/msg/msg_types.h b/src/msg/msg_types.h index ddb18c6b05d3..b6952ca498b7 100644 --- a/src/msg/msg_types.h +++ b/src/msg/msg_types.h @@ -669,6 +669,11 @@ struct entity_addrvec_t { front() == o.legacy_addr()) { return true; } + if (o.v.size() == 1 && + o.front().is_legacy() && + o.front() == legacy_addr()) { + return true; + } return false; } diff --git a/src/test/test_addrs.cc b/src/test/test_addrs.cc index 385b0c44ac1e..c8d492c7d3c2 100644 --- a/src/test/test_addrs.cc +++ b/src/test/test_addrs.cc @@ -300,3 +300,33 @@ TEST(entity_addrvec_t, parse) } } } + +TEST(entity_addrvec_t, legacy_equals) +{ + entity_addr_t a1, a2; + ASSERT_TRUE(a1.parse("v1:1.2.3.4:567/890")); + ASSERT_TRUE(a2.parse("v2:1.2.3.4:567/890")); + entity_addrvec_t av1(a1); + entity_addrvec_t av21; + av21.v.push_back(a2); + av21.v.push_back(a1); + ASSERT_TRUE(av1.legacy_equals(av1)); + ASSERT_TRUE(av21.legacy_equals(av21)); + ASSERT_TRUE(av1.legacy_equals(av21)); + ASSERT_TRUE(av21.legacy_equals(av1)); + + entity_addr_t b1, b2; + ASSERT_TRUE(b1.parse("v1:1.2.3.5:567/8")); + ASSERT_TRUE(b2.parse("v2:1.2.3.5:567/8")); + entity_addrvec_t bv1(b1); + entity_addrvec_t bv21; + bv21.v.push_back(b2); + bv21.v.push_back(b1); + ASSERT_TRUE(bv1.legacy_equals(bv21)); + ASSERT_TRUE(bv21.legacy_equals(bv1)); + + ASSERT_FALSE(av1.legacy_equals(bv1)); + ASSERT_FALSE(av21.legacy_equals(bv21)); + ASSERT_FALSE(av21.legacy_equals(bv1)); + ASSERT_FALSE(av1.legacy_equals(bv21)); +}