]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
osd: add new CLS call to retrieve global configuration
authorJ. Eric Ivancich <ivancich@redhat.com>
Thu, 20 Jan 2022 15:56:49 +0000 (10:56 -0500)
committerJ. Eric Ivancich <ivancich@redhat.com>
Thu, 24 Mar 2022 16:15:32 +0000 (12:15 -0400)
Currently there is no easy way to gain access to global configuration
from CLS (objclass) code. This adds a new call to the CLS interface
that returns a "const ConfigProxy&" from which configuration can be
accessed.

NOTE: Working code to do provide this functionality in crimson is not
provided.

Signed-off-by: J. Eric Ivancich <ivancich@redhat.com>
src/crimson/osd/objclass.cc
src/objclass/objclass.h
src/osd/objclass.cc

index 2642a60fadf0b0ce59e79bc73d2cf27db7741139..e76f8f738678853ab6ffcd6be9c69d9c859d835b 100644 (file)
@@ -496,6 +496,13 @@ ceph_release_t cls_get_min_compatible_client(cls_method_context_t hctx)
   return ceph_release_t::nautilus;
 }
 
+const ConfigProxy& cls_get_config(cls_method_context_t hctx)
+{
+  // FIXME ; segfault if ever called
+  static ConfigProxy* dummy = nullptr;
+  return *dummy;
+}
+
 int cls_get_snapset_seq(cls_method_context_t hctx, uint64_t *snap_seq)
 {
   return 0;
index 0048665fd1c344cd2a590c7eba91a6982f2538ed..d249c1435086541ad606a716550dd830f421d58b 100644 (file)
@@ -142,6 +142,7 @@ extern uint64_t cls_get_features(cls_method_context_t hctx);
 extern uint64_t cls_get_client_features(cls_method_context_t hctx);
 extern ceph_release_t cls_get_required_osd_release(cls_method_context_t hctx);
 extern ceph_release_t cls_get_min_compatible_client(cls_method_context_t hctx);
+extern const ConfigProxy& cls_get_config(cls_method_context_t hctx);
 
 /* helpers */
 extern void cls_cxx_subop_version(cls_method_context_t hctx, std::string *s);
index 74bd95e9712e281e51258d3f9f247171e73958df..c190da5d578faaff4722631a999a8527566e39af 100644 (file)
@@ -649,6 +649,12 @@ ceph_release_t cls_get_min_compatible_client(cls_method_context_t hctx)
   return ctx->pg->get_osdmap()->get_require_min_compat_client();
 }
 
+const ConfigProxy& cls_get_config(cls_method_context_t hctx)
+{
+  PrimaryLogPG::OpContext *ctx = *(PrimaryLogPG::OpContext **)hctx;
+  return ctx->pg->get_cct()->_conf;
+}
+
 int cls_get_snapset_seq(cls_method_context_t hctx, uint64_t *snap_seq) {
   PrimaryLogPG::OpContext *ctx = *(PrimaryLogPG::OpContext **)hctx;
   if (!ctx->new_obs.exists || (ctx->new_obs.oi.is_whiteout() &&