diff --git a/watcher/applier/manager.py b/watcher/applier/manager.py index bb3933759..1015733b5 100644 --- a/watcher/applier/manager.py +++ b/watcher/applier/manager.py @@ -37,13 +37,6 @@ APPLIER_MANAGER_OPTS = [ help='The topic name used for' 'control events, this topic ' 'used for rpc call '), - cfg.StrOpt('status_topic', - default='watcher.applier.status', - help='The topic name used for ' - 'status events, this topic ' - 'is used so as to notify' - 'the others components ' - 'of the system'), cfg.StrOpt('publisher_id', default='watcher.applier.api', help='The identifier used by watcher ' @@ -61,7 +54,7 @@ CONF.register_group(opt_group) CONF.register_opts(APPLIER_MANAGER_OPTS, opt_group) -class ApplierManager(service_manager.ServiceManagerBase): +class ApplierManager(service_manager.ServiceManager): @property def service_name(self): @@ -79,10 +72,6 @@ class ApplierManager(service_manager.ServiceManagerBase): def conductor_topic(self): return CONF.watcher_applier.conductor_topic - @property - def status_topic(self): - return CONF.watcher_applier.status_topic - @property def notification_topics(self): return [] @@ -91,10 +80,6 @@ class ApplierManager(service_manager.ServiceManagerBase): def conductor_endpoints(self): return [trigger.TriggerActionPlan] - @property - def status_endpoints(self): - return [] - @property def notification_endpoints(self): return [] diff --git a/watcher/applier/rpcapi.py b/watcher/applier/rpcapi.py index b5ec981b7..cb7a32b23 100644 --- a/watcher/applier/rpcapi.py +++ b/watcher/applier/rpcapi.py @@ -15,12 +15,13 @@ # implied. # See the License for the specific language governing permissions and # limitations under the License. -# + from oslo_config import cfg from watcher.applier import manager from watcher.common import exception from watcher.common import service +from watcher.common import service_manager from watcher.common import utils @@ -42,7 +43,7 @@ class ApplierAPI(service.Service): context, 'launch_action_plan', action_plan_uuid=action_plan_uuid) -class ApplierAPIManager(object): +class ApplierAPIManager(service_manager.ServiceManager): @property def service_name(self): @@ -60,10 +61,6 @@ class ApplierAPIManager(object): def conductor_topic(self): return CONF.watcher_applier.conductor_topic - @property - def status_topic(self): - return CONF.watcher_applier.status_topic - @property def notification_topics(self): return [] @@ -72,10 +69,6 @@ class ApplierAPIManager(object): def conductor_endpoints(self): return [] - @property - def status_endpoints(self): - return [] - @property def notification_endpoints(self): return [] diff --git a/watcher/common/service.py b/watcher/common/service.py index 13c8194b1..8b4fd0847 100644 --- a/watcher/common/service.py +++ b/watcher/common/service.py @@ -171,15 +171,11 @@ class Service(service.ServiceBase): self.api_version = self.manager.api_version self.conductor_topic = self.manager.conductor_topic - self.status_topic = self.manager.status_topic self.notification_topics = self.manager.notification_topics self.conductor_endpoints = [ ep(self) for ep in self.manager.conductor_endpoints ] - self.status_endpoints = [ - ep(self.publisher_id) for ep in self.manager.status_endpoints - ] self.notification_endpoints = self.manager.notification_endpoints self.serializer = rpc.RequestContextSerializer( @@ -188,10 +184,8 @@ class Service(service.ServiceBase): self._transport = None self._notification_transport = None self._conductor_client = None - self._status_client = None self.conductor_topic_handler = None - self.status_topic_handler = None self.notification_handler = None self.heartbeat = None @@ -199,9 +193,6 @@ class Service(service.ServiceBase): if self.conductor_topic and self.conductor_endpoints: self.conductor_topic_handler = self.build_topic_handler( self.conductor_topic, self.conductor_endpoints) - if self.status_topic and self.status_endpoints: - self.status_topic_handler = self.build_topic_handler( - self.status_topic, self.status_endpoints) if self.notification_topics and self.notification_endpoints: self.notification_handler = self.build_notification_handler( self.notification_topics, self.notification_endpoints @@ -238,21 +229,6 @@ class Service(service.ServiceBase): def conductor_client(self, c): self.conductor_client = c - @property - def status_client(self): - if self._status_client is None: - target = om.Target( - topic=self.status_topic, - version=self.API_VERSION, - ) - self._status_client = om.RPCClient( - self.transport, target, serializer=self.serializer) - return self._status_client - - @status_client.setter - def status_client(self, c): - self.status_client = c - def build_topic_handler(self, topic_name, endpoints=()): serializer = rpc.RequestContextSerializer(rpc.JsonPayloadSerializer()) target = om.Target( @@ -278,8 +254,6 @@ class Service(service.ServiceBase): CONF.transport_url, CONF.rpc_backend) if self.conductor_topic_handler: self.conductor_topic_handler.start() - if self.status_topic_handler: - self.status_topic_handler.start() if self.notification_handler: self.notification_handler.start() if self.heartbeat: @@ -290,8 +264,6 @@ class Service(service.ServiceBase): CONF.transport_url, CONF.rpc_backend) if self.conductor_topic_handler: self.conductor_topic_handler.stop() - if self.status_topic_handler: - self.status_topic_handler.stop() if self.notification_handler: self.notification_handler.stop() if self.heartbeat: diff --git a/watcher/common/service_manager.py b/watcher/common/service_manager.py index 0d0a710a9..b87240cfe 100644 --- a/watcher/common/service_manager.py +++ b/watcher/common/service_manager.py @@ -15,9 +15,11 @@ # under the License. import abc +import six -class ServiceManagerBase(object): +@six.add_metaclass(abc.ABCMeta) +class ServiceManager(object): @abc.abstractproperty def service_name(self): @@ -35,10 +37,6 @@ class ServiceManagerBase(object): def conductor_topic(self): raise NotImplementedError() - @abc.abstractproperty - def status_topic(self): - raise NotImplementedError() - @abc.abstractproperty def notification_topics(self): raise NotImplementedError() @@ -47,10 +45,6 @@ class ServiceManagerBase(object): def conductor_endpoints(self): raise NotImplementedError() - @abc.abstractproperty - def status_endpoints(self): - raise NotImplementedError() - @abc.abstractproperty def notification_endpoints(self): raise NotImplementedError() diff --git a/watcher/decision_engine/manager.py b/watcher/decision_engine/manager.py index 4ff871117..4162d2767 100644 --- a/watcher/decision_engine/manager.py +++ b/watcher/decision_engine/manager.py @@ -51,13 +51,6 @@ WATCHER_DECISION_ENGINE_OPTS = [ help='The topic name used for ' 'control events, this topic ' 'used for RPC calls'), - cfg.StrOpt('status_topic', - default='watcher.decision.status', - help='The topic name used for ' - 'status events; this topic ' - 'is used so as to notify' - 'the others components ' - 'of the system'), cfg.ListOpt('notification_topics', default=['versioned_notifications', 'watcher_notifications'], help='The topic names from which notification events ' @@ -79,7 +72,7 @@ CONF.register_group(decision_engine_opt_group) CONF.register_opts(WATCHER_DECISION_ENGINE_OPTS, decision_engine_opt_group) -class DecisionEngineManager(service_manager.ServiceManagerBase): +class DecisionEngineManager(service_manager.ServiceManager): @property def service_name(self): @@ -97,10 +90,6 @@ class DecisionEngineManager(service_manager.ServiceManagerBase): def conductor_topic(self): return CONF.watcher_decision_engine.conductor_topic - @property - def status_topic(self): - return CONF.watcher_decision_engine.status_topic - @property def notification_topics(self): return CONF.watcher_decision_engine.notification_topics @@ -109,10 +98,6 @@ class DecisionEngineManager(service_manager.ServiceManagerBase): def conductor_endpoints(self): return [audit_endpoint.AuditEndpoint] - @property - def status_endpoints(self): - return [] - @property def notification_endpoints(self): return self.collector_manager.get_notification_endpoints() diff --git a/watcher/decision_engine/rpcapi.py b/watcher/decision_engine/rpcapi.py index 58d289669..a23c0f253 100644 --- a/watcher/decision_engine/rpcapi.py +++ b/watcher/decision_engine/rpcapi.py @@ -21,6 +21,7 @@ from oslo_config import cfg from watcher.common import exception from watcher.common import service +from watcher.common import service_manager from watcher.common import utils from watcher.decision_engine import manager @@ -45,7 +46,7 @@ class DecisionEngineAPI(service.Service): context, 'trigger_audit', audit_uuid=audit_uuid) -class DecisionEngineAPIManager(object): +class DecisionEngineAPIManager(service_manager.ServiceManager): @property def service_name(self): @@ -63,10 +64,6 @@ class DecisionEngineAPIManager(object): def conductor_topic(self): return CONF.watcher_decision_engine.conductor_topic - @property - def status_topic(self): - return CONF.watcher_decision_engine.status_topic - @property def notification_topics(self): return [] @@ -75,10 +72,6 @@ class DecisionEngineAPIManager(object): def conductor_endpoints(self): return [] - @property - def status_endpoints(self): - return [] - @property def notification_endpoints(self): return [] diff --git a/watcher/tests/common/test_service.py b/watcher/tests/common/test_service.py index d6f3473c5..e9494b0d3 100644 --- a/watcher/tests/common/test_service.py +++ b/watcher/tests/common/test_service.py @@ -33,13 +33,11 @@ class DummyManager(object): API_VERSION = '1.0' conductor_endpoints = [mock.Mock()] - status_endpoints = [mock.Mock()] notification_endpoints = [mock.Mock()] def __init__(self): self.publisher_id = "pub_id" self.conductor_topic = "conductor_topic" - self.status_topic = "status_topic" self.notification_topics = [] self.api_version = self.API_VERSION self.service_name = None @@ -85,13 +83,13 @@ class TestService(base.TestCase): def test_start(self, m_handler): dummy_service = service.Service(DummyManager) dummy_service.start() - self.assertEqual(2, m_handler.call_count) + self.assertEqual(1, m_handler.call_count) @mock.patch.object(om.rpc.server, "RPCServer") def test_stop(self, m_handler): dummy_service = service.Service(DummyManager) dummy_service.stop() - self.assertEqual(2, m_handler.call_count) + self.assertEqual(1, m_handler.call_count) def test_build_topic_handler(self): topic_name = "mytopic" @@ -108,6 +106,3 @@ class TestService(base.TestCase): self.assertIsInstance( dummy_service.conductor_topic_handler, om.rpc.server.RPCServer) - self.assertIsInstance( - dummy_service.status_topic_handler, - om.rpc.server.RPCServer) diff --git a/watcher/tests/decision_engine/model/notification/fake_managers.py b/watcher/tests/decision_engine/model/notification/fake_managers.py index 94cce46a2..ebf701b32 100644 --- a/watcher/tests/decision_engine/model/notification/fake_managers.py +++ b/watcher/tests/decision_engine/model/notification/fake_managers.py @@ -16,30 +16,44 @@ # See the License for the specific language governing permissions and # limitations under the License. +from watcher.common import service_manager from watcher.decision_engine.model.notification import nova as novanotification from watcher.tests.decision_engine.model import faker_cluster_state -class FakeManager(object): +class FakeManager(service_manager.ServiceManager): API_VERSION = '1.0' - def __init__(self): - self.api_version = self.API_VERSION - self.service_name = None + fake_cdmc = faker_cluster_state.FakerModelCollector() - # fake cluster instead on Nova CDM - self.fake_cdmc = faker_cluster_state.FakerModelCollector() + @property + def service_name(self): + return 'watcher-fake' - self.publisher_id = 'test_publisher_id' - self.conductor_topic = 'test_conductor_topic' - self.status_topic = 'test_status_topic' - self.notification_topics = ['nova'] + @property + def api_version(self): + return self.API_VERSION - self.conductor_endpoints = [] # Disable audit endpoint - self.status_endpoints = [] + @property + def publisher_id(self): + return 'test_publisher_id' - self.notification_endpoints = [ + @property + def conductor_topic(self): + return 'test_conductor_topic' + + @property + def notification_topics(self): + return ['nova'] + + @property + def conductor_endpoints(self): + return [] # Disable audit endpoint + + @property + def notification_endpoints(self): + return [ novanotification.ServiceUpdated(self.fake_cdmc), novanotification.InstanceCreated(self.fake_cdmc), diff --git a/watcher/tests/decision_engine/model/notification/test_notifications.py b/watcher/tests/decision_engine/model/notification/test_notifications.py index 22fb30d8b..9dc17cccd 100644 --- a/watcher/tests/decision_engine/model/notification/test_notifications.py +++ b/watcher/tests/decision_engine/model/notification/test_notifications.py @@ -31,9 +31,9 @@ from watcher.tests.decision_engine.model.notification import fake_managers class DummyManager(fake_managers.FakeManager): - def __init__(self): - super(DummyManager, self).__init__() - self.notification_endpoints = [DummyNotification(self.fake_cdmc)] + @property + def notification_endpoints(self): + return [DummyNotification(self.fake_cdmc)] class DummyNotification(base.NotificationEndpoint):