]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
osd: add --osdspec-affinity flag
authorJoshua Schmid <jschmid@suse.de>
Wed, 29 Apr 2020 14:29:35 +0000 (16:29 +0200)
committerJoshua Schmid <jschmid@suse.de>
Mon, 4 May 2020 12:19:17 +0000 (14:19 +0200)
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 <jschmid@suse.de>
src/ceph_osd.cc
src/osd/OSD.cc
src/osd/OSD.h

index 9fde44000288ff98f6964f7f8dfbfca9b3e92670..742b6825bc803600f54f149552c82408f9557753 100644 (file)
@@ -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<const char*>::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<uuid_d>("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) {
index 41f72879b39f8fceb771c4caea237f833ece5a12..09018f1e7cef6b86fab88a2d2f2d2c7e4fa8b912 100644 (file)
@@ -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)
index 44dcae442e45cda1dd57cd76788b4e080180599d..81a1eb6d051c37250474d41ff35d7f9ac688fba6 100644 (file)
@@ -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<std::string, ceph::buffer::ptr>& 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);