From 45c7170eb68571a3d690460f99392c6753994799 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 16 Jan 2018 15:02:14 -0600 Subject: [PATCH] pybind/mgr/mgr_module: make rados handle available to all modules Fixes: http://tracker.ceph.com/issues/25102 Signed-off-by: Sage Weil (cherry picked from commit 366905fb5779ecb110ec4216afe7cde14fbbb2d8) Signed-off-by: Ernesto Puerta --- src/pybind/mgr/dashboard/module.py | 23 ----------------------- src/pybind/mgr/mgr_module.py | 23 ++++++++++++++++++++++- 2 files changed, 22 insertions(+), 24 deletions(-) diff --git a/src/pybind/mgr/dashboard/module.py b/src/pybind/mgr/dashboard/module.py index 3d5e3191aa654..b993c54b0015c 100644 --- a/src/pybind/mgr/dashboard/module.py +++ b/src/pybind/mgr/dashboard/module.py @@ -33,7 +33,6 @@ from mgr_module import MgrModule, MgrStandbyModule, CommandResult from types import OsdMap, NotFound, Config, FsMap, MonMap, \ PgSummary, Health, MonStatus -import rados import rbd_iscsi import rbd_mirroring from rbd_ls import RbdLs, RbdPoolLs @@ -132,9 +131,6 @@ class Module(MgrModule): self.log_buffer = collections.deque(maxlen=LOG_BUFFER_SIZE) self.audit_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 = {} @@ -160,21 +156,6 @@ class Module(MgrModule): # A prefix for all URLs to use the dashboard with a reverse http proxy self.url_prefix = '' - @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 - - ctx_capsule = self.get_context() - self._rados = rados.Rados(context=ctx_capsule) - self._rados.connect() - - return self._rados - def update_pool_stats(self): df = global_instance().get("df") pool_stats = dict([(p['id'], p['stats']) for p in df['pools']]) @@ -249,10 +230,6 @@ class Module(MgrModule): 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] diff --git a/src/pybind/mgr/mgr_module.py b/src/pybind/mgr/mgr_module.py index 230d6f20b928d..c4049a30c8e55 100644 --- a/src/pybind/mgr/mgr_module.py +++ b/src/pybind/mgr/mgr_module.py @@ -8,6 +8,7 @@ import json import logging import threading from collections import defaultdict +import rados class CPlusPlusHandler(logging.Handler): @@ -237,6 +238,9 @@ class MgrModule(ceph_module.BaseMgrModule): self._perf_schema_cache = None + # Keep a librados instance for those that need it. + self._rados = None + def __del__(self): unconfigure_logger(self, self.module_name) @@ -290,7 +294,8 @@ class MgrModule(ceph_module.BaseMgrModule): :return: None """ - pass + if self._rados: + self._rados.shutdown() def get(self, data_name): """ @@ -628,3 +633,19 @@ class MgrModule(ceph_module.BaseMgrModule): """ return self._ceph_have_mon_connection() + + @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 + + ctx_capsule = self.get_context() + self._rados = rados.Rados(context=ctx_capsule) + self._rados.connect() + + return self._rados + -- 2.39.5