diff options
author | Sage Weil <sage.weil@dreamhost.com> | 2012-04-27 20:54:50 -0700 |
---|---|---|
committer | Sage Weil <sage.weil@dreamhost.com> | 2012-04-27 21:52:15 -0700 |
commit | 4274fd05d4ced111c18187fe7814912dd3f8114e (patch) | |
tree | 47bc75e9cccc56ef4d57477c71c34646662eb35d | |
parent | 10c616a50add359e60d3cb30bf13943376450c27 (diff) | |
download | ceph-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.cc | 30 |
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! |