// fake osd failures: osd -> time
std::map<entity_name_t,float> g_fake_kill_after;
-entity_addr_t g_public_addr;
-entity_addr_t g_cluster_addr;
md_config_t g_conf;
bool g_daemon = false;
{ STRINGIFY(section), NULL, STRINGIFY(name), \
&g_conf.name, def_val, 0, 0, type, schar }
+#define OPTION_OPT_ADDR(section, name, schar, type, def_val) \
+ { STRINGIFY(section), NULL, STRINGIFY(name), \
+ &g_conf.name, def_val, 0, 0, type, schar }
+
#define OPTION_OPT_LONGLONG(section, name, schar, type, def_val) \
{ STRINGIFY(section), NULL, STRINGIFY(name), \
&g_conf.name, 0, def_val, 0, type, schar }
static struct config_option config_optionsp[] = {
OPTION(host, 0, OPT_STR, "localhost"),
+ OPTION(public_addr, 0, OPT_ADDR, ""),
+ OPTION(cluster_addr, 0, OPT_ADDR, ""),
OPTION(num_mon, 0, OPT_INT, 1),
OPTION(num_mds, 0, OPT_INT, 1),
OPTION(num_osd, 0, OPT_INT, 4),
case OPT_DOUBLE:
*(double *)field = strtod(val, NULL);
break;
+ case OPT_ADDR:
+ ((entity_addr_t *)field)->parse(val);
default:
return false;
}
case OPT_DOUBLE:
*(double *)field = doubleval;
break;
+ case OPT_ADDR:
+ ((entity_addr_t *)field)->parse(val);
+ break;
default:
return false;
}
case OPT_DOUBLE:
*(double *)field = 0;
break;
+ case OPT_ADDR:
+ *(entity_addr_t *)field = entity_addr_t();
+ break;
default:
return false;
}
case OPT_DOUBLE:
OPT_READ_TYPE(ret, section, key, double, out, def);
break;
+ case OPT_ADDR:
+ OPT_READ_TYPE(ret, section, key, char *, out, def);
default:
ret = 0;
break;
} else if (CONF_ARG_EQ("show_conf", 'S')) {
show_config = true;
} else if (isdaemon && CONF_ARG_EQ("bind", 0)) {
- g_public_addr.parse(args[++i]);
- } else if (CONF_ARG_EQ("public_addr", 0)) {
- g_public_addr.parse(args[++i]);
- } else if (CONF_ARG_EQ("cluster_addr", 0)) {
- g_cluster_addr.parse(args[++i]);
+ g_conf.public_addr.parse(args[++i]);
} else if (isdaemon && CONF_ARG_EQ("nodaemon", 'D')) {
g_conf.daemonize = false;
g_conf.log_to_stdout = true;
#include "msg/msg_types.h"
-extern entity_addr_t g_public_addr;
-extern entity_addr_t g_cluster_addr;
-
extern bool g_daemon;
extern const char *g_default_id;
bool tcp_multi_out;
bool tcp_multi_dispatch;
*/
+ entity_addr_t public_addr;
+ entity_addr_t cluster_addr;
bool ms_tcp_nodelay;
double ms_initial_backoff;
extern md_config_t g_conf;
typedef enum {
- OPT_NONE, OPT_INT, OPT_LONGLONG, OPT_STR, OPT_DOUBLE, OPT_FLOAT, OPT_BOOL
+ OPT_NONE, OPT_INT, OPT_LONGLONG, OPT_STR, OPT_DOUBLE, OPT_FLOAT, OPT_BOOL,
+ OPT_ADDR
} opt_type_t;
/**
exit(1);
}
- bool client_addr_set = !g_public_addr.is_blank_addr();
- bool cluster_addr_set = !g_cluster_addr.is_blank_addr();
+ bool client_addr_set = !g_conf.public_addr.is_blank_addr();
+ bool cluster_addr_set = !g_conf.cluster_addr.is_blank_addr();
if (cluster_addr_set && !client_addr_set) {
cerr << TEXT_RED << " ** "
<< "WARNING: set cluster address but not client address!" << " **\n"
<< "using cluster address for clients" << TEXT_NORMAL << std::endl;
- g_public_addr = g_cluster_addr;
+ g_conf.public_addr = g_conf.cluster_addr;
client_addr_set = true;
cluster_addr_set = false;
}
entity_addr_t hb_addr;
if (client_addr_set) {
- client_messenger->bind(g_public_addr);
- hb_addr = g_public_addr;
+ client_messenger->bind(g_conf.public_addr);
+ hb_addr = g_conf.public_addr;
hb_addr.set_port(0);
}
else client_messenger->bind();
cluster_messenger = new SimpleMessenger();
if (!cluster_messenger)
return 1;
- cluster_messenger->bind(g_cluster_addr);
- hb_addr = g_cluster_addr;
+ cluster_messenger->bind(g_conf.cluster_addr);
+ hb_addr = g_conf.cluster_addr;
hb_addr.set_port(0);
}