from types import OsdMap, NotFound, Config, FsMap, MonMap, \
PgSummary, Health, MonStatus
+import rados
from rbd_ls import RbdLs
from cephfs_clients import CephFSClients
self.log_buffer = collections.deque(maxlen=LOG_BUFFER_SIZE)
+ # Keep a librados instance for those that need it.
+ self._rados = None
+
# Stateful instances of RbdLs, hold cached results. Key to dict
# is pool name.
self.rbd_ls = {}
self.pool_stats = defaultdict(lambda: defaultdict(
lambda: collections.deque(maxlen=10)))
+ @property
+ def rados(self):
+ """
+ A librados instance to be shared by any classes within
+ this mgr module that want one.
+ """
+ if self._rados:
+ return self._rados
+
+ from mgr_module import ceph_state
+ ctx_capsule = ceph_state.get_context()
+ self._rados = rados.Rados(context=ctx_capsule)
+ self._rados.connect()
+
+ return self._rados
+
+ def get_localized_config(self, key):
+ r = self.get_config(self.get_mgr_id() + '/' + key)
+ if r is None:
+ r = self.get_config(key)
+ return r
+
def update_pool_stats(self):
df = global_instance().get("df")
pool_stats = dict([(p['id'], p['stats']) for p in df['pools']])
cherrypy.engine.exit()
log.info("Stopped server")
+ log.info("Stopping librados...")
+ if self._rados:
+ self._rados.shutdown()
+ log.info("Stopped librados.")
+
def get_latest(self, daemon_type, daemon_name, stat):
data = self.get_counter(daemon_type, daemon_name, stat)[stat]
if data: