diff --git a/cinder/db/sqlalchemy/api.py b/cinder/db/sqlalchemy/api.py index e82edd89000..2390a46d740 100644 --- a/cinder/db/sqlalchemy/api.py +++ b/cinder/db/sqlalchemy/api.py @@ -33,9 +33,10 @@ from oslo_db import exception as db_exc from oslo_db import options from oslo_db.sqlalchemy import session as db_session from oslo_log import log as logging +from oslo_utils import importutils from oslo_utils import timeutils from oslo_utils import uuidutils -import osprofiler.sqlalchemy +osprofiler_sqlalchemy = importutils.try_import('osprofiler.sqlalchemy') import six import sqlalchemy from sqlalchemy import MetaData @@ -85,7 +86,7 @@ def _create_facade_lazily(): CONF.import_group("profiler", "cinder.service") if CONF.profiler.profiler_enabled: if CONF.profiler.trace_sqlalchemy: - osprofiler.sqlalchemy.add_tracing(sqlalchemy, + osprofiler_sqlalchemy.add_tracing(sqlalchemy, _FACADE.get_engine(), "db") diff --git a/cinder/rpc.py b/cinder/rpc.py index 9ade49d14d8..a92fc0dd098 100644 --- a/cinder/rpc.py +++ b/cinder/rpc.py @@ -30,7 +30,8 @@ from oslo_config import cfg from oslo_log import log as logging import oslo_messaging as messaging from oslo_serialization import jsonutils -from osprofiler import profiler +from oslo_utils import importutils +profiler = importutils.try_import('osprofiler.profiler') import cinder.context import cinder.exception @@ -123,20 +124,22 @@ class RequestContextSerializer(messaging.Serializer): def serialize_context(self, context): _context = context.to_dict() - prof = profiler.get() - if prof: - trace_info = { - "hmac_key": prof.hmac_key, - "base_id": prof.get_base_id(), - "parent_id": prof.get_id() - } - _context.update({"trace_info": trace_info}) + if profiler is not None: + prof = profiler.get() + if prof: + trace_info = { + "hmac_key": prof.hmac_key, + "base_id": prof.get_base_id(), + "parent_id": prof.get_id() + } + _context.update({"trace_info": trace_info}) return _context def deserialize_context(self, context): trace_info = context.pop("trace_info", None) if trace_info: - profiler.init(**trace_info) + if profiler is not None: + profiler.init(**trace_info) return cinder.context.RequestContext.from_dict(context) diff --git a/cinder/service.py b/cinder/service.py index 08ca100d570..5d03ee55b75 100644 --- a/cinder/service.py +++ b/cinder/service.py @@ -31,9 +31,9 @@ from oslo_service import loopingcall from oslo_service import service from oslo_service import wsgi from oslo_utils import importutils -import osprofiler.notifier -from osprofiler import profiler -import osprofiler.web +osprofiler_notifier = importutils.try_import('osprofiler.notifier') +profiler = importutils.try_import('osprofiler.profiler') +osprofiler_web = importutils.try_import('osprofiler.web') from cinder import context from cinder import exception @@ -84,12 +84,18 @@ CONF.register_opts(profiler_opts, group="profiler") def setup_profiler(binary, host): + if (osprofiler_notifier is None or + profiler is None or + osprofiler_web is None): + LOG.debug('osprofiler is not present') + return + if CONF.profiler.profiler_enabled: - _notifier = osprofiler.notifier.create( + _notifier = osprofiler_notifier.create( "Messaging", messaging, context.get_admin_context().to_dict(), rpc.TRANSPORT, "cinder", binary, host) - osprofiler.notifier.set(_notifier) - osprofiler.web.enable(CONF.profiler.hmac_keys) + osprofiler_notifier.set(_notifier) + osprofiler_web.enable(CONF.profiler.hmac_keys) LOG.warning( _LW("OSProfiler is enabled.\nIt means that person who knows " "any of hmac_keys that are specified in " @@ -101,7 +107,7 @@ def setup_profiler(binary, host): "To disable OSprofiler set in cinder.conf:\n" "[profiler]\nprofiler_enabled=false")) else: - osprofiler.web.disable() + osprofiler_web.disable() class Service(service.Service): diff --git a/cinder/volume/manager.py b/cinder/volume/manager.py index f78ac4d4476..b5b15a658d8 100644 --- a/cinder/volume/manager.py +++ b/cinder/volume/manager.py @@ -49,7 +49,7 @@ from oslo_utils import importutils from oslo_utils import timeutils from oslo_utils import units from oslo_utils import uuidutils -from osprofiler import profiler +profiler = importutils.try_import('osprofiler.profiler') import six from taskflow import exceptions as tfe @@ -238,7 +238,7 @@ class VolumeManager(manager.SchedulerDependentManager): host=self.host, is_vol_db_empty=vol_db_empty) - if CONF.profiler.profiler_enabled: + if CONF.profiler.profiler_enabled and profiler is not None: self.driver = profiler.trace_cls("driver")(self.driver) try: self.extra_capabilities = jsonutils.loads(