osd: fix heartbeat set_port()

set_port() fails an assert if it isn't an in4 or in6 address, which a
default entity_addr_t is not.

Signed-off-by: Sage Weil <sage.weil@dreamhost.com>
This commit is contained in:
Sage Weil 2012-04-10 22:13:15 -07:00
parent 1775301bb4
commit cd4a760e9b
2 changed files with 12 additions and 1 deletions

View File

@ -373,7 +373,8 @@ int main(int argc, const char **argv)
entity_addr_t hb_addr = g_conf->osd_heartbeat_addr; entity_addr_t hb_addr = g_conf->osd_heartbeat_addr;
if (hb_addr.is_blank_ip()) { if (hb_addr.is_blank_ip()) {
hb_addr = g_conf->cluster_addr; hb_addr = g_conf->cluster_addr;
hb_addr.set_port(0); if (hb_addr.is_ip())
hb_addr.set_port(0);
} }
r = messenger_hbserver->bind(hb_addr); r = messenger_hbserver->bind(hb_addr);
if (r < 0) if (r < 0)

View File

@ -310,6 +310,16 @@ struct entity_addr_t {
} }
} }
bool is_ip() const {
switch (addr.ss_family) {
case AF_INET:
case AF_INET6:
return true;
default:
return false;
}
}
bool parse(const char *s, const char **end = 0); bool parse(const char *s, const char **end = 0);
void encode(bufferlist& bl) const { void encode(bufferlist& bl) const {