]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
pybind/mgr/mgr_module: make rados handle available to all modules 23235/head
authorSage Weil <sage@redhat.com>
Tue, 16 Jan 2018 21:02:14 +0000 (15:02 -0600)
committerErnesto Puerta <epuertat@redhat.com>
Wed, 25 Jul 2018 16:52:04 +0000 (18:52 +0200)
Fixes: http://tracker.ceph.com/issues/25102
Signed-off-by: Sage Weil <sage@redhat.com>
(cherry picked from commit 366905fb5779ecb110ec4216afe7cde14fbbb2d8)
Signed-off-by: Ernesto Puerta <epuertat@redhat.com>
src/pybind/mgr/dashboard/module.py
src/pybind/mgr/mgr_module.py

index 3d5e3191aa654415cce5684e5e0fa0227d63e1a9..b993c54b0015cf0bcd92a899d164d0a9dd177557 100644 (file)
@@ -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]
index 230d6f20b928d3d7ad9a86e45994af5f214480a7..c4049a30c8e557434be92584509f779febe68397 100644 (file)
@@ -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
+