Removed status_topic config parameter

In this changeset, I removed the now obsolete status_topic config
option.

DocImpact
Partially Implements: blueprint watcher-notifications-ovo

Change-Id: Icfc03abd875b77fc456bfa286ac2b5774651e8fa
This commit is contained in:
Vincent Françoise 2016-11-09 17:04:50 +01:00
parent 395ccbd94c
commit cdda06c08c
9 changed files with 42 additions and 111 deletions

View File

@ -37,13 +37,6 @@ APPLIER_MANAGER_OPTS = [
help='The topic name used for' help='The topic name used for'
'control events, this topic ' 'control events, this topic '
'used for rpc call '), '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', cfg.StrOpt('publisher_id',
default='watcher.applier.api', default='watcher.applier.api',
help='The identifier used by watcher ' help='The identifier used by watcher '
@ -61,7 +54,7 @@ CONF.register_group(opt_group)
CONF.register_opts(APPLIER_MANAGER_OPTS, opt_group) CONF.register_opts(APPLIER_MANAGER_OPTS, opt_group)
class ApplierManager(service_manager.ServiceManagerBase): class ApplierManager(service_manager.ServiceManager):
@property @property
def service_name(self): def service_name(self):
@ -79,10 +72,6 @@ class ApplierManager(service_manager.ServiceManagerBase):
def conductor_topic(self): def conductor_topic(self):
return CONF.watcher_applier.conductor_topic return CONF.watcher_applier.conductor_topic
@property
def status_topic(self):
return CONF.watcher_applier.status_topic
@property @property
def notification_topics(self): def notification_topics(self):
return [] return []
@ -91,10 +80,6 @@ class ApplierManager(service_manager.ServiceManagerBase):
def conductor_endpoints(self): def conductor_endpoints(self):
return [trigger.TriggerActionPlan] return [trigger.TriggerActionPlan]
@property
def status_endpoints(self):
return []
@property @property
def notification_endpoints(self): def notification_endpoints(self):
return [] return []

View File

@ -15,12 +15,13 @@
# implied. # implied.
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
#
from oslo_config import cfg from oslo_config import cfg
from watcher.applier import manager from watcher.applier import manager
from watcher.common import exception from watcher.common import exception
from watcher.common import service from watcher.common import service
from watcher.common import service_manager
from watcher.common import utils from watcher.common import utils
@ -42,7 +43,7 @@ class ApplierAPI(service.Service):
context, 'launch_action_plan', action_plan_uuid=action_plan_uuid) context, 'launch_action_plan', action_plan_uuid=action_plan_uuid)
class ApplierAPIManager(object): class ApplierAPIManager(service_manager.ServiceManager):
@property @property
def service_name(self): def service_name(self):
@ -60,10 +61,6 @@ class ApplierAPIManager(object):
def conductor_topic(self): def conductor_topic(self):
return CONF.watcher_applier.conductor_topic return CONF.watcher_applier.conductor_topic
@property
def status_topic(self):
return CONF.watcher_applier.status_topic
@property @property
def notification_topics(self): def notification_topics(self):
return [] return []
@ -72,10 +69,6 @@ class ApplierAPIManager(object):
def conductor_endpoints(self): def conductor_endpoints(self):
return [] return []
@property
def status_endpoints(self):
return []
@property @property
def notification_endpoints(self): def notification_endpoints(self):
return [] return []

View File

@ -171,15 +171,11 @@ class Service(service.ServiceBase):
self.api_version = self.manager.api_version self.api_version = self.manager.api_version
self.conductor_topic = self.manager.conductor_topic self.conductor_topic = self.manager.conductor_topic
self.status_topic = self.manager.status_topic
self.notification_topics = self.manager.notification_topics self.notification_topics = self.manager.notification_topics
self.conductor_endpoints = [ self.conductor_endpoints = [
ep(self) for ep in self.manager.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.notification_endpoints = self.manager.notification_endpoints
self.serializer = rpc.RequestContextSerializer( self.serializer = rpc.RequestContextSerializer(
@ -188,10 +184,8 @@ class Service(service.ServiceBase):
self._transport = None self._transport = None
self._notification_transport = None self._notification_transport = None
self._conductor_client = None self._conductor_client = None
self._status_client = None
self.conductor_topic_handler = None self.conductor_topic_handler = None
self.status_topic_handler = None
self.notification_handler = None self.notification_handler = None
self.heartbeat = None self.heartbeat = None
@ -199,9 +193,6 @@ class Service(service.ServiceBase):
if self.conductor_topic and self.conductor_endpoints: if self.conductor_topic and self.conductor_endpoints:
self.conductor_topic_handler = self.build_topic_handler( self.conductor_topic_handler = self.build_topic_handler(
self.conductor_topic, self.conductor_endpoints) 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: if self.notification_topics and self.notification_endpoints:
self.notification_handler = self.build_notification_handler( self.notification_handler = self.build_notification_handler(
self.notification_topics, self.notification_endpoints self.notification_topics, self.notification_endpoints
@ -238,21 +229,6 @@ class Service(service.ServiceBase):
def conductor_client(self, c): def conductor_client(self, c):
self.conductor_client = 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=()): def build_topic_handler(self, topic_name, endpoints=()):
serializer = rpc.RequestContextSerializer(rpc.JsonPayloadSerializer()) serializer = rpc.RequestContextSerializer(rpc.JsonPayloadSerializer())
target = om.Target( target = om.Target(
@ -278,8 +254,6 @@ class Service(service.ServiceBase):
CONF.transport_url, CONF.rpc_backend) CONF.transport_url, CONF.rpc_backend)
if self.conductor_topic_handler: if self.conductor_topic_handler:
self.conductor_topic_handler.start() self.conductor_topic_handler.start()
if self.status_topic_handler:
self.status_topic_handler.start()
if self.notification_handler: if self.notification_handler:
self.notification_handler.start() self.notification_handler.start()
if self.heartbeat: if self.heartbeat:
@ -290,8 +264,6 @@ class Service(service.ServiceBase):
CONF.transport_url, CONF.rpc_backend) CONF.transport_url, CONF.rpc_backend)
if self.conductor_topic_handler: if self.conductor_topic_handler:
self.conductor_topic_handler.stop() self.conductor_topic_handler.stop()
if self.status_topic_handler:
self.status_topic_handler.stop()
if self.notification_handler: if self.notification_handler:
self.notification_handler.stop() self.notification_handler.stop()
if self.heartbeat: if self.heartbeat:

View File

@ -15,9 +15,11 @@
# under the License. # under the License.
import abc import abc
import six
class ServiceManagerBase(object): @six.add_metaclass(abc.ABCMeta)
class ServiceManager(object):
@abc.abstractproperty @abc.abstractproperty
def service_name(self): def service_name(self):
@ -35,10 +37,6 @@ class ServiceManagerBase(object):
def conductor_topic(self): def conductor_topic(self):
raise NotImplementedError() raise NotImplementedError()
@abc.abstractproperty
def status_topic(self):
raise NotImplementedError()
@abc.abstractproperty @abc.abstractproperty
def notification_topics(self): def notification_topics(self):
raise NotImplementedError() raise NotImplementedError()
@ -47,10 +45,6 @@ class ServiceManagerBase(object):
def conductor_endpoints(self): def conductor_endpoints(self):
raise NotImplementedError() raise NotImplementedError()
@abc.abstractproperty
def status_endpoints(self):
raise NotImplementedError()
@abc.abstractproperty @abc.abstractproperty
def notification_endpoints(self): def notification_endpoints(self):
raise NotImplementedError() raise NotImplementedError()

View File

@ -51,13 +51,6 @@ WATCHER_DECISION_ENGINE_OPTS = [
help='The topic name used for ' help='The topic name used for '
'control events, this topic ' 'control events, this topic '
'used for RPC calls'), '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', cfg.ListOpt('notification_topics',
default=['versioned_notifications', 'watcher_notifications'], default=['versioned_notifications', 'watcher_notifications'],
help='The topic names from which notification events ' 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) CONF.register_opts(WATCHER_DECISION_ENGINE_OPTS, decision_engine_opt_group)
class DecisionEngineManager(service_manager.ServiceManagerBase): class DecisionEngineManager(service_manager.ServiceManager):
@property @property
def service_name(self): def service_name(self):
@ -97,10 +90,6 @@ class DecisionEngineManager(service_manager.ServiceManagerBase):
def conductor_topic(self): def conductor_topic(self):
return CONF.watcher_decision_engine.conductor_topic return CONF.watcher_decision_engine.conductor_topic
@property
def status_topic(self):
return CONF.watcher_decision_engine.status_topic
@property @property
def notification_topics(self): def notification_topics(self):
return CONF.watcher_decision_engine.notification_topics return CONF.watcher_decision_engine.notification_topics
@ -109,10 +98,6 @@ class DecisionEngineManager(service_manager.ServiceManagerBase):
def conductor_endpoints(self): def conductor_endpoints(self):
return [audit_endpoint.AuditEndpoint] return [audit_endpoint.AuditEndpoint]
@property
def status_endpoints(self):
return []
@property @property
def notification_endpoints(self): def notification_endpoints(self):
return self.collector_manager.get_notification_endpoints() return self.collector_manager.get_notification_endpoints()

View File

@ -21,6 +21,7 @@ from oslo_config import cfg
from watcher.common import exception from watcher.common import exception
from watcher.common import service from watcher.common import service
from watcher.common import service_manager
from watcher.common import utils from watcher.common import utils
from watcher.decision_engine import manager from watcher.decision_engine import manager
@ -45,7 +46,7 @@ class DecisionEngineAPI(service.Service):
context, 'trigger_audit', audit_uuid=audit_uuid) context, 'trigger_audit', audit_uuid=audit_uuid)
class DecisionEngineAPIManager(object): class DecisionEngineAPIManager(service_manager.ServiceManager):
@property @property
def service_name(self): def service_name(self):
@ -63,10 +64,6 @@ class DecisionEngineAPIManager(object):
def conductor_topic(self): def conductor_topic(self):
return CONF.watcher_decision_engine.conductor_topic return CONF.watcher_decision_engine.conductor_topic
@property
def status_topic(self):
return CONF.watcher_decision_engine.status_topic
@property @property
def notification_topics(self): def notification_topics(self):
return [] return []
@ -75,10 +72,6 @@ class DecisionEngineAPIManager(object):
def conductor_endpoints(self): def conductor_endpoints(self):
return [] return []
@property
def status_endpoints(self):
return []
@property @property
def notification_endpoints(self): def notification_endpoints(self):
return [] return []

View File

@ -33,13 +33,11 @@ class DummyManager(object):
API_VERSION = '1.0' API_VERSION = '1.0'
conductor_endpoints = [mock.Mock()] conductor_endpoints = [mock.Mock()]
status_endpoints = [mock.Mock()]
notification_endpoints = [mock.Mock()] notification_endpoints = [mock.Mock()]
def __init__(self): def __init__(self):
self.publisher_id = "pub_id" self.publisher_id = "pub_id"
self.conductor_topic = "conductor_topic" self.conductor_topic = "conductor_topic"
self.status_topic = "status_topic"
self.notification_topics = [] self.notification_topics = []
self.api_version = self.API_VERSION self.api_version = self.API_VERSION
self.service_name = None self.service_name = None
@ -85,13 +83,13 @@ class TestService(base.TestCase):
def test_start(self, m_handler): def test_start(self, m_handler):
dummy_service = service.Service(DummyManager) dummy_service = service.Service(DummyManager)
dummy_service.start() dummy_service.start()
self.assertEqual(2, m_handler.call_count) self.assertEqual(1, m_handler.call_count)
@mock.patch.object(om.rpc.server, "RPCServer") @mock.patch.object(om.rpc.server, "RPCServer")
def test_stop(self, m_handler): def test_stop(self, m_handler):
dummy_service = service.Service(DummyManager) dummy_service = service.Service(DummyManager)
dummy_service.stop() dummy_service.stop()
self.assertEqual(2, m_handler.call_count) self.assertEqual(1, m_handler.call_count)
def test_build_topic_handler(self): def test_build_topic_handler(self):
topic_name = "mytopic" topic_name = "mytopic"
@ -108,6 +106,3 @@ class TestService(base.TestCase):
self.assertIsInstance( self.assertIsInstance(
dummy_service.conductor_topic_handler, dummy_service.conductor_topic_handler,
om.rpc.server.RPCServer) om.rpc.server.RPCServer)
self.assertIsInstance(
dummy_service.status_topic_handler,
om.rpc.server.RPCServer)

View File

@ -16,30 +16,44 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
from watcher.common import service_manager
from watcher.decision_engine.model.notification import nova as novanotification from watcher.decision_engine.model.notification import nova as novanotification
from watcher.tests.decision_engine.model import faker_cluster_state from watcher.tests.decision_engine.model import faker_cluster_state
class FakeManager(object): class FakeManager(service_manager.ServiceManager):
API_VERSION = '1.0' API_VERSION = '1.0'
def __init__(self): fake_cdmc = faker_cluster_state.FakerModelCollector()
self.api_version = self.API_VERSION
self.service_name = None
# fake cluster instead on Nova CDM @property
self.fake_cdmc = faker_cluster_state.FakerModelCollector() def service_name(self):
return 'watcher-fake'
self.publisher_id = 'test_publisher_id' @property
self.conductor_topic = 'test_conductor_topic' def api_version(self):
self.status_topic = 'test_status_topic' return self.API_VERSION
self.notification_topics = ['nova']
self.conductor_endpoints = [] # Disable audit endpoint @property
self.status_endpoints = [] 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.ServiceUpdated(self.fake_cdmc),
novanotification.InstanceCreated(self.fake_cdmc), novanotification.InstanceCreated(self.fake_cdmc),

View File

@ -31,9 +31,9 @@ from watcher.tests.decision_engine.model.notification import fake_managers
class DummyManager(fake_managers.FakeManager): class DummyManager(fake_managers.FakeManager):
def __init__(self): @property
super(DummyManager, self).__init__() def notification_endpoints(self):
self.notification_endpoints = [DummyNotification(self.fake_cdmc)] return [DummyNotification(self.fake_cdmc)]
class DummyNotification(base.NotificationEndpoint): class DummyNotification(base.NotificationEndpoint):