From bd80cf9398cf18a235170265cc6d9691772822bf Mon Sep 17 00:00:00 2001 From: John Spray Date: Mon, 9 Apr 2018 15:24:14 -0400 Subject: [PATCH] mgr: update python interface for store vs. config Signed-off-by: John Spray --- src/pybind/mgr/mgr_module.py | 64 +++++++++++++++++++++++-------- src/pybind/mgr/selftest/module.py | 13 +++++-- 2 files changed, 56 insertions(+), 21 deletions(-) diff --git a/src/pybind/mgr/mgr_module.py b/src/pybind/mgr/mgr_module.py index b51952ebd18e0..01745fff2934c 100644 --- a/src/pybind/mgr/mgr_module.py +++ b/src/pybind/mgr/mgr_module.py @@ -498,14 +498,27 @@ class MgrModule(ceph_module.BaseMgrModule): else: return r - def get_config_prefix(self, key_prefix): + def get_store_prefix(self, key_prefix): """ - Retrieve a dict of config values with the given prefix + Retrieve a dict of KV store keys to values, where the keys + have the given prefix :param str key_prefix: :return: str """ - return self._ceph_get_config_prefix(key_prefix) + return self._ceph_get_store_prefix(key_prefix) + + def _get_localized(self, key, default, getter): + r = getter(self.get_mgr_id() + '/' + key) + if r is None: + r = getter(key) + + if r is None: + r = default + return r + + def _set_localized(self, key, val, setter): + return setter(self.get_mgr_id() + '/' + key, val) def get_localized_config(self, key, default=None): """ @@ -514,13 +527,7 @@ class MgrModule(ceph_module.BaseMgrModule): :param str default: :return: str """ - r = self.get_config(self.get_mgr_id() + '/' + key) - if r is None: - r = self.get_config(key) - - if r is None: - r = default - return r + return self._get_localized(key, default, self.get_config) def set_config(self, key, val): """ @@ -538,30 +545,53 @@ class MgrModule(ceph_module.BaseMgrModule): :param str default: :return: str """ - return self._ceph_set_config(self.get_mgr_id() + '/' + key, val) + return self._set_localized(key, val, self.set_config) - def set_config_json(self, key, val): + def set_store_json(self, key, val): """ - Helper for setting json-serialized-config + Helper for setting json-serialized stored data :param str key: :param val: json-serializable object """ - self._ceph_set_config(key, json.dumps(val)) + self.set_store(key, json.dumps(val)) - def get_config_json(self, key): + def get_store_json(self, key): """ - Helper for getting json-serialized config + Helper for getting json-serialized stored data :param str key: :return: object """ - raw = self.get_config(key) + raw = self.get_store(key) if raw is None: return None else: return json.loads(raw) + def set_store(self, key, val): + """ + Set a value in this module's persistent key value store + """ + self._ceph_set_store(key, val) + + def get_store(self, key, default=None): + """ + Get a value from this module's persistent key value store + """ + r = self._ceph_get_store(key) + if r is None: + return default + else: + return r + + def get_localized_store(self, key, default=None): + return self._get_localized(key, default, self.get_store) + + def set_localized_store(self, key, val): + return self._set_localized(key, val, self.set_store) + + def self_test(self): """ Run a self-test on the module. Override this function and implement diff --git a/src/pybind/mgr/selftest/module.py b/src/pybind/mgr/selftest/module.py index 401ff1eede60f..b9530c43b146c 100644 --- a/src/pybind/mgr/selftest/module.py +++ b/src/pybind/mgr/selftest/module.py @@ -84,6 +84,7 @@ class Module(MgrModule): self._self_test_osdmap() self._self_test_getters() self._self_test_config() + self._self_test_store() self._self_test_misc() self._self_test_perf_counters() @@ -138,11 +139,15 @@ class Module(MgrModule): self.set_localized_config("testkey", "testvalue") assert self.get_localized_config("testkey") == "testvalue" - self.set_config_json("testjsonkey", {"testblob": 2}) - assert self.get_config_json("testjsonkey") == {"testblob": 2} - assert sorted(self.get_config_prefix("test").keys()) == sorted( - ["testkey", "testjsonkey"]) + ["testkey"]) + + def _self_test_store(self): + self.set_store("testkey", "testvalue") + assert self.get_store("testkey") == "testvalue" + + self.set_store_json("testjsonkey", {"testblob": 2}) + assert self.get_store_json("testjsonkey") == {"testblob": 2} def _self_test_perf_counters(self): self.get_perf_schema("osd", "0") -- 2.39.5