From: Sage Weil Date: Thu, 10 Jan 2019 18:32:42 +0000 (-0600) Subject: common/ceph_argparse: parse_ip_port_vec returns addrvecs, not addrds X-Git-Tag: v14.1.0~357^2~4 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=8da9f5e759fc62c4a3dad0ddab5edf734a6b7edf;p=ceph.git common/ceph_argparse: parse_ip_port_vec returns addrvecs, not addrds No functional change yet. Signed-off-by: Sage Weil --- diff --git a/src/common/ceph_argparse.cc b/src/common/ceph_argparse.cc index 13d2cfc1ed6..3de9f091bde 100644 --- a/src/common/ceph_argparse.cc +++ b/src/common/ceph_argparse.cc @@ -201,7 +201,8 @@ void ceph_arg_value_type(const char * nextargstr, bool *bool_option, bool *bool_ return; } -bool parse_ip_port_vec(const char *s, vector& vec, int type) + +bool parse_ip_port_vec(const char *s, vector& vec, int type) { const char *p = s; const char *end = p + strlen(p); @@ -213,7 +214,7 @@ bool parse_ip_port_vec(const char *s, vector& vec, int type) return false; } //cout << " got " << a << ", rest is '" << p << "'" << std::endl; - vec.push_back(a); + vec.push_back(entity_addrvec_t(a)); while (*p == ',' || *p == ' ' || *p == ';') p++; } diff --git a/src/common/ceph_argparse.h b/src/common/ceph_argparse.h index af295516845..214b3dfb672 100644 --- a/src/common/ceph_argparse.h +++ b/src/common/ceph_argparse.h @@ -48,7 +48,7 @@ extern void argv_to_vec(int argc, const char **argv, extern void vec_to_argv(const char *argv0, std::vector& args, int *argc, const char ***argv); -extern bool parse_ip_port_vec(const char *s, std::vector& vec, +extern bool parse_ip_port_vec(const char *s, std::vector& vec, int type=0); bool ceph_argparse_double_dash(std::vector &args, std::vector::iterator &i); diff --git a/src/mon/MonMap.cc b/src/mon/MonMap.cc index a7671671c70..0d25f72b506 100644 --- a/src/mon/MonMap.cc +++ b/src/mon/MonMap.cc @@ -434,7 +434,7 @@ int MonMap::init_with_ips(const std::string& ips, bool for_mkfs, const std::string &prefix) { - vector addrs; + vector addrs; if (!parse_ip_port_vec( ips.c_str(), addrs, entity_addr_t::TYPE_ANY)) { @@ -449,7 +449,13 @@ int MonMap::init_with_ips(const std::string& ips, string name; name = prefix; name += n; - _add_ambiguous_addr(name, addrs[i], 0, for_mkfs); + if (addrs[i].v.size() == 1) { + _add_ambiguous_addr(name, addrs[i].front(), 0, for_mkfs); + } else { + // they specified an addrvec, so let's assume they also specified + // the addr *type* and *port*. (we could possibly improve this?) + add(name, addrs[i], 0); + } } return 0; } @@ -463,7 +469,7 @@ int MonMap::init_with_hosts(const std::string& hostlist, if (!hosts) return -EINVAL; - vector addrs; + vector addrs; bool success = parse_ip_port_vec( hosts, addrs, for_mkfs ? entity_addr_t::TYPE_MSGR2 : entity_addr_t::TYPE_ANY); @@ -478,7 +484,11 @@ int MonMap::init_with_hosts(const std::string& hostlist, n[1] = 0; string name = prefix; name += n; - _add_ambiguous_addr(name, addrs[i], 0); + if (addrs[i].v.size() == 1) { + _add_ambiguous_addr(name, addrs[i].front(), 0); + } else { + add(name, addrs[i], 0); + } } calc_legacy_ranks(); return 0;