From: Joshua Schmid Date: Wed, 29 Apr 2020 14:29:35 +0000 (+0200) Subject: osd: add --osdspec-affinity flag X-Git-Tag: v16.1.0~2214^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=1b44b6709d9400102c14ad3ea40fca19ab4ed214;p=ceph.git osd: add --osdspec-affinity flag This is useful for tracking osds when using OSDSpecs in cephadm and later on Rook. Please see https://docs.ceph.com/docs/master/cephadm/drivegroups/#osd-service-specification for details Signed-off-by: Joshua Schmid --- diff --git a/src/ceph_osd.cc b/src/ceph_osd.cc index 9fde4400028..742b6825bc8 100644 --- a/src/ceph_osd.cc +++ b/src/ceph_osd.cc @@ -99,6 +99,8 @@ static void usage() << " --convert-filestore\n" << " run any pending upgrade operations\n" << " --flush-journal flush all data out of journal\n" + << " --osdspec-affinity\n" + << " set affinity to an osdspec\n" << " --dump-journal dump all data of journal\n" << " --mkjournal initialize a new journal\n" << " --check-wants-journal\n" @@ -157,6 +159,7 @@ int main(int argc, const char **argv) bool get_device_fsid = false; string device_path; std::string dump_pg_log; + std::string osdspec_affinity; std::string val; for (std::vector::iterator i = args.begin(); i != args.end(); ) { @@ -164,6 +167,8 @@ int main(int argc, const char **argv) break; } else if (ceph_argparse_flag(args, i, "--mkfs", (char*)NULL)) { mkfs = true; + } else if (ceph_argparse_witharg(args, i, &val, "--osdspec-affinity", (char*)NULL)) { + osdspec_affinity = val; } else if (ceph_argparse_flag(args, i, "--mkjournal", (char*)NULL)) { mkjournal = true; } else if (ceph_argparse_flag(args, i, "--check-allows-journal", (char*)NULL)) { @@ -356,6 +361,7 @@ int main(int argc, const char **argv) derr << "created new key in keyring " << keyring_path << dendl; } } + if (mkfs) { common_init_finish(g_ceph_context); @@ -365,7 +371,7 @@ int main(int argc, const char **argv) } int err = OSD::mkfs(g_ceph_context, store, g_conf().get_val("fsid"), - whoami); + whoami, osdspec_affinity); if (err < 0) { derr << TEXT_RED << " ** ERROR: error creating empty object store in " << data_path << ": " << cpp_strerror(-err) << TEXT_NORMAL << dendl; @@ -451,7 +457,6 @@ flushjournal_out: forker.exit(0); } - if (convertfilestore) { int err = store->mount(); if (err < 0) { diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 41f72879b39..09018f1e7ce 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -1944,7 +1944,7 @@ int heap(CephContext& cct, const cmdmap_t& cmdmap, Formatter& f, std::ostream& o }} // namespace ceph::osd_cmds -int OSD::mkfs(CephContext *cct, ObjectStore *store, uuid_d fsid, int whoami) +int OSD::mkfs(CephContext *cct, ObjectStore *store, uuid_d fsid, int whoami, string osdspec_affinity) { int ret; @@ -2017,7 +2017,7 @@ int OSD::mkfs(CephContext *cct, ObjectStore *store, uuid_d fsid, int whoami) } } - ret = write_meta(cct, store, sb.cluster_fsid, sb.osd_fsid, whoami); + ret = write_meta(cct, store, sb.cluster_fsid, sb.osd_fsid, whoami, osdspec_affinity); if (ret) { derr << "OSD::mkfs: failed to write fsid file: error " << cpp_strerror(ret) << dendl; @@ -2034,7 +2034,7 @@ free_store: return ret; } -int OSD::write_meta(CephContext *cct, ObjectStore *store, uuid_d& cluster_fsid, uuid_d& osd_fsid, int whoami) +int OSD::write_meta(CephContext *cct, ObjectStore *store, uuid_d& cluster_fsid, uuid_d& osd_fsid, int whoami, string& osdspec_affinity) { char val[80]; int r; @@ -2075,6 +2075,11 @@ int OSD::write_meta(CephContext *cct, ObjectStore *store, uuid_d& cluster_fsid, return r; } } + if (!osdspec_affinity.empty()) { + r = store->write_meta("osdspec_affinity", osdspec_affinity.c_str()); + if (r < 0) + return r; + } r = store->write_meta("ready", "ready"); if (r < 0) diff --git a/src/osd/OSD.h b/src/osd/OSD.h index 44dcae442e4..81a1eb6d051 100644 --- a/src/osd/OSD.h +++ b/src/osd/OSD.h @@ -1997,7 +1997,7 @@ private: ~OSD() override; // static bits - static int mkfs(CephContext *cct, ObjectStore *store, uuid_d fsid, int whoami); + static int mkfs(CephContext *cct, ObjectStore *store, uuid_d fsid, int whoami, std::string osdspec_affinity); /* remove any non-user xattrs from a std::map of them */ void filter_xattrs(std::map& attrs) { @@ -2017,7 +2017,7 @@ private: static int write_meta(CephContext *cct, ObjectStore *store, - uuid_d& cluster_fsid, uuid_d& osd_fsid, int whoami); + uuid_d& cluster_fsid, uuid_d& osd_fsid, int whoami, std::string& osdspec_affinity); void handle_scrub(class MOSDScrub *m); void handle_fast_scrub(class MOSDScrub2 *m);