summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage.weil@dreamhost.com>2012-04-27 20:54:50 -0700
committerSage Weil <sage.weil@dreamhost.com>2012-04-27 21:52:15 -0700
commit4274fd05d4ced111c18187fe7814912dd3f8114e (patch)
tree47bc75e9cccc56ef4d57477c71c34646662eb35d
parent10c616a50add359e60d3cb30bf13943376450c27 (diff)
downloadceph-4274fd05d4ced111c18187fe7814912dd3f8114e.tar.gz
osdmap: fix addr dedup check
Compare *every* address for a match, or else note that it is (or might be) different. Previously, we falsely took diff==0 to mean that all addrs were definitely equal, which was not necessarily the case. Signed-off-by: Sage Weil <sage.weil@dreamhost.com>
-rw-r--r--src/osd/OSDMap.cc30
1 files changed, 13 insertions, 17 deletions
diff --git a/src/osd/OSDMap.cc b/src/osd/OSDMap.cc
index 87edad3b551..f042dd74ab0 100644
--- a/src/osd/OSDMap.cc
+++ b/src/osd/OSDMap.cc
@@ -573,25 +573,21 @@ void OSDMap::dedup(const OSDMap *o, OSDMap *n)
if (o->max_osd != n->max_osd)
diff++;
for (int i = 0; i < o->max_osd && i < n->max_osd; i++) {
- if ((o->epoch < n->epoch && n->osd_info[i].up_from <= o->epoch) ||
- (o->epoch > n->epoch && o->osd_info[i].up_from <= n->epoch)) {
- // same up interval, all should match... but let's be paranoid!
- if (n->osd_addrs->client_addr[i] && o->osd_addrs->client_addr[i] &&
- *n->osd_addrs->client_addr[i] == *o->osd_addrs->client_addr[i])
- n->osd_addrs->client_addr[i] = o->osd_addrs->client_addr[i];
- if (n->osd_addrs->client_addr[i] && o->osd_addrs->client_addr[i] &&
- *n->osd_addrs->cluster_addr[i] == *o->osd_addrs->cluster_addr[i])
- n->osd_addrs->cluster_addr[i] = o->osd_addrs->cluster_addr[i];
- if (n->osd_addrs->client_addr[i] && o->osd_addrs->client_addr[i] &&
- *n->osd_addrs->hb_addr[i] == *o->osd_addrs->hb_addr[i])
- n->osd_addrs->hb_addr[i] = o->osd_addrs->hb_addr[i];
- } else if (n->osd_addrs->client_addr[i] && o->osd_addrs->client_addr[i] &&
- *n->osd_addrs->client_addr[i] == *o->osd_addrs->client_addr[i]) {
- // client addr matches
+ if ( n->osd_addrs->client_addr[i] && o->osd_addrs->client_addr[i] &&
+ *n->osd_addrs->client_addr[i] == *o->osd_addrs->client_addr[i])
n->osd_addrs->client_addr[i] = o->osd_addrs->client_addr[i];
- } else {
+ else
+ diff++;
+ if ( n->osd_addrs->cluster_addr[i] && o->osd_addrs->cluster_addr[i] &&
+ *n->osd_addrs->cluster_addr[i] == *o->osd_addrs->cluster_addr[i])
+ n->osd_addrs->cluster_addr[i] = o->osd_addrs->cluster_addr[i];
+ else
+ diff++;
+ if ( n->osd_addrs->hb_addr[i] && o->osd_addrs->hb_addr[i] &&
+ *n->osd_addrs->hb_addr[i] == *o->osd_addrs->hb_addr[i])
+ n->osd_addrs->hb_addr[i] = o->osd_addrs->hb_addr[i];
+ else
diff++;
- }
}
if (diff == 0) {
// zoinks, no differences at all!