]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
msg/msg_types: make legacy_equals() symmetrical
authorSage Weil <sage@redhat.com>
Wed, 6 Mar 2019 17:05:07 +0000 (11:05 -0600)
committerSage Weil <sage@redhat.com>
Thu, 7 Mar 2019 22:35:34 +0000 (16:35 -0600)
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 <sage@redhat.com>
src/msg/msg_types.h
src/test/test_addrs.cc

index ddb18c6b05d3fb9af123317cb25c84a766cf6ae7..b6952ca498b703eb727595df78183898d2315597 100644 (file)
@@ -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;
   }
 
index 385b0c44ac1ed85c46b47e6f04447f7766d1a32c..c8d492c7d3c22bd675f1e584cc79120aa84a76a4 100644 (file)
@@ -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));
+}