Fix Bug Unable to get scoped data model

This patch removes 'audit_scope' from __init__ of
BaseClusterDataModelCollector class, as it is a singleton class
and cannot be instantiate more than once.

A new method is defined in BaseClusterDataModelCollector in place
of property audit_scope_handler, which takes audit_scope as
argument.

Change-Id: I0664c151d71a711c118d43c180d8b0760b1c81fa
Closes-Bug: #1732849
This commit is contained in:
aditi
2017-11-17 08:06:45 +00:00
parent 77c9f88fc4
commit e55f3793b6
8 changed files with 31 additions and 40 deletions

View File

@@ -123,19 +123,13 @@ class BaseClusterDataModelCollector(loadable.LoadableSingleton):
STALE_MODEL = model_root.ModelRoot(stale=True)
def __init__(self, config, osc=None, audit_scope=None):
def __init__(self, config, osc=None):
super(BaseClusterDataModelCollector, self).__init__(config)
self.osc = osc if osc else clients.OpenStackClients()
self._cluster_data_model = None
self.lock = threading.RLock()
self._audit_scope = audit_scope
self._audit_scope_handler = None
@abc.abstractproperty
def audit_scope_handler(self):
"""Get audit scope handler"""
raise NotImplementedError()
@property
def cluster_data_model(self):
if self._cluster_data_model is None:
@@ -163,6 +157,11 @@ class BaseClusterDataModelCollector(loadable.LoadableSingleton):
def set_cluster_data_model_as_stale(self):
self.cluster_data_model = self.STALE_MODEL
@abc.abstractmethod
def get_audit_scope_handler(self, audit_scope):
"""Get audit scope handler"""
raise NotImplementedError()
@abc.abstractmethod
def execute(self):
"""Build a cluster data model"""

View File

@@ -37,10 +37,6 @@ class CinderClusterDataModelCollector(base.BaseClusterDataModelCollector):
def __init__(self, config, osc=None):
super(CinderClusterDataModelCollector, self).__init__(config, osc)
@property
def audit_scope_handler(self):
return None
@property
def notification_endpoints(self):
"""Associated notification endpoints
@@ -58,6 +54,9 @@ class CinderClusterDataModelCollector(base.BaseClusterDataModelCollector):
cinder.VolumeResizeEnd(self)
]
def get_audit_scope_handler(self, audit_scope):
return None
def execute(self):
"""Build the storage cluster data model"""
LOG.debug("Building latest Cinder cluster data model")

View File

@@ -50,17 +50,15 @@ class CollectorManager(object):
return self._notification_endpoints
def get_cluster_model_collector(self, name, osc=None, audit_scope=None):
def get_cluster_model_collector(self, name, osc=None):
"""Retrieve cluster data model collector
:param name: name of the cluster data model collector plugin
:type name: str
:param osc: an OpenStackClients instance
:type osc: :py:class:`~.OpenStackClients` instance
:param audit_scope: an BaseScope instance
:type audit_scope: :py:class:`~.BaseScope` instance
:returns: cluster data model collector plugin
:rtype: :py:class:`~.BaseClusterDataModelCollector`
"""
return self.collector_loader.load(
name, osc=osc, audit_scope=audit_scope)
name, osc=osc)

View File

@@ -139,13 +139,6 @@ class NovaClusterDataModelCollector(base.BaseClusterDataModelCollector):
def __init__(self, config, osc=None):
super(NovaClusterDataModelCollector, self).__init__(config, osc)
@property
def audit_scope_handler(self):
if not self._audit_scope_handler:
self._audit_scope_handler = compute_scope.ComputeScope(
self._audit_scope, self.config)
return self._audit_scope_handler
@property
def notification_endpoints(self):
"""Associated notification endpoints
@@ -166,6 +159,11 @@ class NovaClusterDataModelCollector(base.BaseClusterDataModelCollector):
nova.LegacyLiveMigratedEnd(self),
]
def get_audit_scope_handler(self, audit_scope):
self._audit_scope_handler = compute_scope.ComputeScope(
audit_scope, self.config)
return self._audit_scope_handler
def execute(self):
"""Build the compute cluster data model"""
LOG.debug("Building latest Nova cluster data model")

View File

@@ -179,8 +179,9 @@ class BaseStrategy(loadable.Loadable):
"""
if self._compute_model is None:
collector = self.collector_manager.get_cluster_model_collector(
'compute', osc=self.osc, audit_scope=self.audit_scope)
audit_scope_handler = collector.audit_scope_handler
'compute', osc=self.osc)
audit_scope_handler = collector.get_audit_scope_handler(
audit_scope=self.audit_scope)
self._compute_model = audit_scope_handler.get_scoped_model(
collector.get_latest_cluster_data_model())

View File

@@ -23,14 +23,13 @@ from watcher.tests import base as test_base
class DummyClusterDataModelCollector(base.BaseClusterDataModelCollector):
@property
def audit_scope_handler(self):
return None
@property
def notification_endpoints(self):
return []
def get_audit_scope_handler(self, audit_scope):
return None
def execute(self):
model = model_root.ModelRoot()
# Do something here...

View File

@@ -32,14 +32,13 @@ class FakerModelCollector(base.BaseClusterDataModelCollector):
config = mock.Mock()
super(FakerModelCollector, self).__init__(config)
@property
def audit_scope_handler(self):
return None
@property
def notification_endpoints(self):
return []
def get_audit_scope_handler(self, audit_scope):
return None
def execute(self):
return self.generate_scenario_1()

View File

@@ -32,10 +32,6 @@ class FakerModelCollector(base.BaseClusterDataModelCollector):
config = mock.Mock(period=777)
super(FakerModelCollector, self).__init__(config)
@property
def audit_scope_handler(self):
return None
@property
def notification_endpoints(self):
return []
@@ -52,6 +48,9 @@ class FakerModelCollector(base.BaseClusterDataModelCollector):
def load_model(self, filename):
return modelroot.ModelRoot.from_xml(self.load_data(filename))
def get_audit_scope_handler(self, audit_scope):
return None
def execute(self):
return self._cluster_data_model or self.build_scenario_1()
@@ -148,10 +147,6 @@ class FakerStorageModelCollector(base.BaseClusterDataModelCollector):
config = mock.Mock(period=777)
super(FakerStorageModelCollector, self).__init__(config)
@property
def audit_scope_handler(self):
return None
@property
def notification_endpoints(self):
return []
@@ -168,6 +163,9 @@ class FakerStorageModelCollector(base.BaseClusterDataModelCollector):
def load_model(self, filename):
return modelroot.StorageModelRoot.from_xml(self.load_data(filename))
def get_audit_scope_handler(self, audit_scope):
return None
def execute(self):
return self._cluster_data_model or self.build_scenario_1()