global_init(args, CEPH_ENTITY_TYPE_MON, CODE_ENVIRONMENT_DAEMON, 0);
+ uuid_d fsid;
std::string val;
for (std::vector<const char*>::iterator i = args.begin(); i != args.end(); ) {
if (ceph_argparse_double_dash(args, i)) {
osdmapfn = val;
} else if (ceph_argparse_witharg(args, i, &val, "--inject_monmap", (char*)NULL)) {
inject_monmap = val;
+ } else if (ceph_argparse_witharg(args, i, &val, "--fsid", (char*)NULL)) {
+ if (!fsid.parse(val.c_str())) {
+ cerr << "unable to parse fsid '" << val << "'" << std::endl;
+ exit(1);
+ }
} else {
++i;
}
}
}
+ if (!fsid.is_zero()) {
+ cout << argv[0] << ": setting fsid to " << fsid << std::endl;
+ monmap.fsid = fsid;
+ }
+
+ if (monmap.fsid.is_zero()) {
+ cerr << argv[0] << ": generated monmap has no fsid; use --fsid" << std::endl;
+ exit(10);
+ }
+
// osdmap
err = osdmapbl.read_file(osdmapfn.c_str(), &error);
if (err < 0) {
struct uuid_d {
uuid_t uuid;
+ uuid_d() {
+ memset(&uuid, 0, sizeof(uuid));
+ }
+
bool is_zero() {
return uuid_is_null(uuid);
}
uuid_generate(uuid);
}
- bool parse(char *s) {
+ bool parse(const char *s) {
return uuid_parse(s, uuid) == 0;
}
void print(char *s) {