From: J. Eric Ivancich Date: Thu, 20 Jan 2022 15:56:49 +0000 (-0500) Subject: osd: add new CLS call to retrieve global configuration X-Git-Tag: v18.0.0~1183^2~4 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=3877c1e37f2fa4e1574b57f05132288f210835a7;p=ceph.git osd: add new CLS call to retrieve global configuration 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 --- diff --git a/src/crimson/osd/objclass.cc b/src/crimson/osd/objclass.cc index 2642a60fadf0..e76f8f738678 100644 --- a/src/crimson/osd/objclass.cc +++ b/src/crimson/osd/objclass.cc @@ -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; diff --git a/src/objclass/objclass.h b/src/objclass/objclass.h index 0048665fd1c3..d249c1435086 100644 --- a/src/objclass/objclass.h +++ b/src/objclass/objclass.h @@ -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); diff --git a/src/osd/objclass.cc b/src/osd/objclass.cc index 74bd95e9712e..c190da5d578f 100644 --- a/src/osd/objclass.cc +++ b/src/osd/objclass.cc @@ -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() &&