From 42a8770a49e0342acffa7fdde22655c98e783184 Mon Sep 17 00:00:00 2001 From: Akihiro Motoki Date: Tue, 19 Aug 2014 04:14:31 +0900 Subject: [PATCH] Make DhcpRpcCallback a separate callback class RPC has a version of itself. In Neutron a plugin implements several RPC interface, so a single RPC version doesn't work. In Mixin callback class approach, RPC versioning depends on each plugin implementation and it makes harder to maintain RPC version appropriately. This patch series replaces mixin RPC callback of server side with a separate class. This commit handles server-side callback of dhcp-agent RPC interface. DHCP-agent server-side callback class is moved from db/ to api/rpc/handlers because it doesn't involve any db operations and defining all RPC interfaces in a single place sounds reasonable. Note that moving other DHCP-agent related RPC interface class to api/rpc/handlers can be done in a separate patch as this patch focuses on reorganizing the server-side RPC callback class. Partial-Bug: #1359416 Change-Id: Ifb2a1bc0b7971995aae2856c9d4cd88c6dbc22d6 --- .../rpc/handlers/dhcp_rpc.py} | 11 +++++- neutron/plugins/bigswitch/plugin.py | 6 +-- neutron/plugins/brocade/NeutronPlugin.py | 4 +- .../plugins/cisco/n1kv/n1kv_neutron_plugin.py | 13 +------ .../plugins/hyperv/hyperv_neutron_plugin.py | 2 + neutron/plugins/hyperv/rpc_callbacks.py | 5 +-- .../plugins/linuxbridge/lb_neutron_plugin.py | 4 +- neutron/plugins/midonet/plugin.py | 9 +---- neutron/plugins/ml2/plugin.py | 2 + neutron/plugins/ml2/rpc.py | 2 - neutron/plugins/mlnx/mlnx_plugin.py | 2 + neutron/plugins/mlnx/rpc_callbacks.py | 2 - neutron/plugins/nec/nec_plugin.py | 10 +---- neutron/plugins/oneconvergence/plugin.py | 4 +- .../plugins/openvswitch/ovs_neutron_plugin.py | 4 +- neutron/plugins/ryu/ryu_neutron_plugin.py | 4 +- neutron/plugins/vmware/dhcp_meta/rpc.py | 8 ---- neutron/plugins/vmware/dhcpmeta_modes.py | 3 +- .../unit/openvswitch/test_agent_scheduler.py | 38 +++++++++---------- .../{test_db_rpc_base.py => test_dhcp_rpc.py} | 10 ++--- 20 files changed, 61 insertions(+), 82 deletions(-) rename neutron/{db/dhcp_rpc_base.py => api/rpc/handlers/dhcp_rpc.py} (97%) rename neutron/tests/unit/{test_db_rpc_base.py => test_dhcp_rpc.py} (97%) diff --git a/neutron/db/dhcp_rpc_base.py b/neutron/api/rpc/handlers/dhcp_rpc.py similarity index 97% rename from neutron/db/dhcp_rpc_base.py rename to neutron/api/rpc/handlers/dhcp_rpc.py index bb64df6d452..56016be7086 100644 --- a/neutron/db/dhcp_rpc_base.py +++ b/neutron/api/rpc/handlers/dhcp_rpc.py @@ -19,6 +19,7 @@ from oslo.db import exception as db_exc from neutron.api.v2 import attributes from neutron.common import constants from neutron.common import exceptions as n_exc +from neutron.common import rpc as n_rpc from neutron.common import utils from neutron.extensions import portbindings from neutron import manager @@ -29,8 +30,14 @@ from neutron.openstack.common import log as logging LOG = logging.getLogger(__name__) -class DhcpRpcCallbackMixin(object): - """A mix-in that enable DHCP agent support in plugin implementations.""" +class DhcpRpcCallback(n_rpc.RpcCallback): + """DHCP agent RPC callback in plugin implementations.""" + + # API version history: + # 1.0 - Initial version. + # 1.1 - Added get_active_networks_info, create_dhcp_port, + # and update_dhcp_port methods. + RPC_API_VERSION = '1.1' def _get_active_networks(self, context, **kwargs): """Retrieve and return a list of the active networks.""" diff --git a/neutron/plugins/bigswitch/plugin.py b/neutron/plugins/bigswitch/plugin.py index dde693ea4da..1ac8a78e319 100644 --- a/neutron/plugins/bigswitch/plugin.py +++ b/neutron/plugins/bigswitch/plugin.py @@ -55,6 +55,7 @@ from sqlalchemy.orm import exc as sqlexc from neutron.agent import securitygroups_rpc as sg_rpc from neutron.api import extensions as neutron_extensions from neutron.api.rpc.agentnotifiers import dhcp_rpc_agent_api +from neutron.api.rpc.handlers import dhcp_rpc from neutron.common import constants as const from neutron.common import exceptions from neutron.common import rpc as n_rpc @@ -66,7 +67,6 @@ from neutron.db import agentschedulers_db from neutron.db import allowedaddresspairs_db as addr_pair_db from neutron.db import api as db from neutron.db import db_base_plugin_v2 -from neutron.db import dhcp_rpc_base from neutron.db import external_net_db from neutron.db import extradhcpopt_db from neutron.db import l3_db @@ -114,8 +114,7 @@ class AgentNotifierApi(n_rpc.RpcProxy, class RestProxyCallbacks(n_rpc.RpcCallback, - sg_rpc_base.SecurityGroupServerRpcCallbackMixin, - dhcp_rpc_base.DhcpRpcCallbackMixin): + sg_rpc_base.SecurityGroupServerRpcCallbackMixin): RPC_API_VERSION = '1.1' @@ -511,6 +510,7 @@ class NeutronRestProxyV2(NeutronRestProxyV2Base, self._dhcp_agent_notifier ) self.endpoints = [RestProxyCallbacks(), + dhcp_rpc.DhcpRpcCallback(), agents_db.AgentExtRpcCallback()] self.conn.create_consumer(self.topic, self.endpoints, fanout=False) diff --git a/neutron/plugins/brocade/NeutronPlugin.py b/neutron/plugins/brocade/NeutronPlugin.py index f4859f179e1..e1408c44dbe 100644 --- a/neutron/plugins/brocade/NeutronPlugin.py +++ b/neutron/plugins/brocade/NeutronPlugin.py @@ -28,6 +28,7 @@ from oslo.config import cfg from neutron.agent import securitygroups_rpc as sg_rpc from neutron.api.rpc.agentnotifiers import dhcp_rpc_agent_api from neutron.api.rpc.agentnotifiers import l3_rpc_agent_api +from neutron.api.rpc.handlers import dhcp_rpc from neutron.api.rpc.handlers import l3_rpc from neutron.common import constants as q_const from neutron.common import rpc as n_rpc @@ -37,7 +38,6 @@ from neutron.db import agents_db from neutron.db import agentschedulers_db from neutron.db import api as db from neutron.db import db_base_plugin_v2 -from neutron.db import dhcp_rpc_base from neutron.db import external_net_db from neutron.db import extraroute_db from neutron.db import l3_agentschedulers_db @@ -78,7 +78,6 @@ cfg.CONF.register_opts(PHYSICAL_INTERFACE_OPTS, "PHYSICAL_INTERFACE") class BridgeRpcCallbacks(n_rpc.RpcCallback, - dhcp_rpc_base.DhcpRpcCallbackMixin, sg_db_rpc.SecurityGroupServerRpcCallbackMixin): """Agent callback.""" @@ -263,6 +262,7 @@ class BrocadePluginV2(db_base_plugin_v2.NeutronDbPluginV2, is_admin=False) self.conn = n_rpc.create_connection(new=True) self.endpoints = [BridgeRpcCallbacks(), + dhcp_rpc.DhcpRpcCallback(), l3_rpc.L3RpcCallback(), agents_db.AgentExtRpcCallback()] for svc_topic in self.service_topics.values(): diff --git a/neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py b/neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py index 91a478d55c3..d46493a9ba9 100644 --- a/neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py +++ b/neutron/plugins/cisco/n1kv/n1kv_neutron_plugin.py @@ -23,6 +23,7 @@ from oslo.config import cfg as q_conf from neutron.api.rpc.agentnotifiers import dhcp_rpc_agent_api from neutron.api.rpc.agentnotifiers import l3_rpc_agent_api +from neutron.api.rpc.handlers import dhcp_rpc from neutron.api.rpc.handlers import l3_rpc from neutron.api.v2 import attributes from neutron.common import constants @@ -33,7 +34,6 @@ from neutron.common import utils from neutron.db import agents_db from neutron.db import agentschedulers_db from neutron.db import db_base_plugin_v2 -from neutron.db import dhcp_rpc_base from neutron.db import external_net_db from neutron.db import extraroute_db from neutron.db import l3_agentschedulers_db @@ -58,15 +58,6 @@ from neutron.plugins.common import constants as svc_constants LOG = logging.getLogger(__name__) -class N1kvRpcCallbacks(n_rpc.RpcCallback, - dhcp_rpc_base.DhcpRpcCallbackMixin): - - """Class to handle agent RPC calls.""" - - # Set RPC API version to 1.1 by default. - RPC_API_VERSION = '1.1' - - class N1kvNeutronPluginV2(db_base_plugin_v2.NeutronDbPluginV2, external_net_db.External_net_db_mixin, extraroute_db.ExtraRoute_db_mixin, @@ -127,7 +118,7 @@ class N1kvNeutronPluginV2(db_base_plugin_v2.NeutronDbPluginV2, self.service_topics = {svc_constants.CORE: topics.PLUGIN, svc_constants.L3_ROUTER_NAT: topics.L3PLUGIN} self.conn = n_rpc.create_connection(new=True) - self.endpoints = [N1kvRpcCallbacks(), + self.endpoints = [dhcp_rpc.DhcpRpcCallback(), l3_rpc.L3RpcCallback(), agents_db.AgentExtRpcCallback()] for svc_topic in self.service_topics.values(): diff --git a/neutron/plugins/hyperv/hyperv_neutron_plugin.py b/neutron/plugins/hyperv/hyperv_neutron_plugin.py index 2862290dc64..70ede35d195 100644 --- a/neutron/plugins/hyperv/hyperv_neutron_plugin.py +++ b/neutron/plugins/hyperv/hyperv_neutron_plugin.py @@ -16,6 +16,7 @@ from oslo.config import cfg +from neutron.api.rpc.handlers import dhcp_rpc from neutron.api.rpc.handlers import l3_rpc from neutron.api.v2 import attributes from neutron.common import exceptions as n_exc @@ -189,6 +190,7 @@ class HyperVNeutronPlugin(agents_db.AgentDbMixin, self.notifier = agent_notifier_api.AgentNotifierApi( topics.AGENT) self.endpoints = [rpc_callbacks.HyperVRpcCallbacks(self.notifier), + dhcp_rpc.DhcpRpcCallback(), l3_rpc.L3RpcCallback(), agents_db.AgentExtRpcCallback()] for svc_topic in self.service_topics.values(): diff --git a/neutron/plugins/hyperv/rpc_callbacks.py b/neutron/plugins/hyperv/rpc_callbacks.py index d2496121bd3..a44cfbca59f 100644 --- a/neutron/plugins/hyperv/rpc_callbacks.py +++ b/neutron/plugins/hyperv/rpc_callbacks.py @@ -16,7 +16,6 @@ from neutron.common import constants as q_const from neutron.common import rpc as n_rpc -from neutron.db import dhcp_rpc_base from neutron.openstack.common import log as logging from neutron.plugins.hyperv import db as hyperv_db @@ -24,9 +23,7 @@ from neutron.plugins.hyperv import db as hyperv_db LOG = logging.getLogger(__name__) -class HyperVRpcCallbacks( - n_rpc.RpcCallback, - dhcp_rpc_base.DhcpRpcCallbackMixin): +class HyperVRpcCallbacks(n_rpc.RpcCallback): # history # 1.1 Support Security Group RPC diff --git a/neutron/plugins/linuxbridge/lb_neutron_plugin.py b/neutron/plugins/linuxbridge/lb_neutron_plugin.py index cdc9809acf2..b8ff5710ded 100644 --- a/neutron/plugins/linuxbridge/lb_neutron_plugin.py +++ b/neutron/plugins/linuxbridge/lb_neutron_plugin.py @@ -20,6 +20,7 @@ from oslo.config import cfg from neutron.agent import securitygroups_rpc as sg_rpc from neutron.api.rpc.agentnotifiers import dhcp_rpc_agent_api from neutron.api.rpc.agentnotifiers import l3_rpc_agent_api +from neutron.api.rpc.handlers import dhcp_rpc from neutron.api.rpc.handlers import l3_rpc from neutron.api.v2 import attributes from neutron.common import constants as q_const @@ -31,7 +32,6 @@ from neutron.db import agents_db from neutron.db import agentschedulers_db from neutron.db import api as db_api from neutron.db import db_base_plugin_v2 -from neutron.db import dhcp_rpc_base from neutron.db import external_net_db from neutron.db import extraroute_db from neutron.db import l3_agentschedulers_db @@ -54,7 +54,6 @@ LOG = logging.getLogger(__name__) class LinuxBridgeRpcCallbacks(n_rpc.RpcCallback, - dhcp_rpc_base.DhcpRpcCallbackMixin, sg_db_rpc.SecurityGroupServerRpcCallbackMixin ): @@ -284,6 +283,7 @@ class LinuxBridgePluginV2(db_base_plugin_v2.NeutronDbPluginV2, svc_constants.L3_ROUTER_NAT: topics.L3PLUGIN} self.conn = n_rpc.create_connection(new=True) self.endpoints = [LinuxBridgeRpcCallbacks(), + dhcp_rpc.DhcpRpcCallback(), l3_rpc.L3RpcCallback(), agents_db.AgentExtRpcCallback()] for svc_topic in self.service_topics.values(): diff --git a/neutron/plugins/midonet/plugin.py b/neutron/plugins/midonet/plugin.py index 4bbbf236dfe..0df30ad302e 100644 --- a/neutron/plugins/midonet/plugin.py +++ b/neutron/plugins/midonet/plugin.py @@ -29,6 +29,7 @@ from oslo.config import cfg from sqlalchemy.orm import exc as sa_exc from webob import exc as w_exc +from neutron.api.rpc.handlers import dhcp_rpc from neutron.api.v2 import attributes from neutron.common import constants from neutron.common import exceptions as n_exc @@ -37,7 +38,6 @@ from neutron.common import topics from neutron.db import agents_db from neutron.db import agentschedulers_db from neutron.db import db_base_plugin_v2 -from neutron.db import dhcp_rpc_base from neutron.db import external_net_db from neutron.db import l3_db from neutron.db import models_v2 @@ -194,11 +194,6 @@ def _check_resource_exists(func, id, name, raise_exc=False): raise MidonetPluginException(msg=exc) -class MidoRpcCallbacks(n_rpc.RpcCallback, - dhcp_rpc_base.DhcpRpcCallbackMixin): - RPC_API_VERSION = '1.1' - - class MidonetPluginException(n_exc.NeutronException): message = _("%(msg)s") @@ -395,7 +390,7 @@ class MidonetPluginV2(db_base_plugin_v2.NeutronDbPluginV2, # RPC support self.topic = topics.PLUGIN self.conn = n_rpc.create_connection(new=True) - self.endpoints = [MidoRpcCallbacks(), + self.endpoints = [dhcp_rpc.DhcpRpcCallback(), agents_db.AgentExtRpcCallback()] self.conn.create_consumer(self.topic, self.endpoints, fanout=False) diff --git a/neutron/plugins/ml2/plugin.py b/neutron/plugins/ml2/plugin.py index 6ab9f246f4c..66e77bb045f 100644 --- a/neutron/plugins/ml2/plugin.py +++ b/neutron/plugins/ml2/plugin.py @@ -23,6 +23,7 @@ from sqlalchemy.orm import exc as sa_exc from neutron.agent import securitygroups_rpc as sg_rpc from neutron.api.rpc.agentnotifiers import dhcp_rpc_agent_api +from neutron.api.rpc.handlers import dhcp_rpc from neutron.api.v2 import attributes from neutron.common import constants as const from neutron.common import exceptions as exc @@ -134,6 +135,7 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, def start_rpc_listeners(self): self.endpoints = [rpc.RpcCallbacks(self.notifier, self.type_manager), + dhcp_rpc.DhcpRpcCallback(), agents_db.AgentExtRpcCallback()] self.topic = topics.PLUGIN self.conn = n_rpc.create_connection(new=True) diff --git a/neutron/plugins/ml2/rpc.py b/neutron/plugins/ml2/rpc.py index 1da6084a002..8e77e309d26 100644 --- a/neutron/plugins/ml2/rpc.py +++ b/neutron/plugins/ml2/rpc.py @@ -20,7 +20,6 @@ from neutron.common import exceptions from neutron.common import rpc as n_rpc from neutron.common import topics from neutron.common import utils -from neutron.db import dhcp_rpc_base from neutron.db import securitygroups_rpc_base as sg_db_rpc from neutron.extensions import portbindings from neutron import manager @@ -40,7 +39,6 @@ TAP_DEVICE_PREFIX_LENGTH = 3 class RpcCallbacks(n_rpc.RpcCallback, - dhcp_rpc_base.DhcpRpcCallbackMixin, dvr_rpc.DVRServerRpcCallbackMixin, sg_db_rpc.SecurityGroupServerRpcCallbackMixin, type_tunnel.TunnelRpcCallbackMixin): diff --git a/neutron/plugins/mlnx/mlnx_plugin.py b/neutron/plugins/mlnx/mlnx_plugin.py index 6b31425ff3c..ea5a4bc92ff 100644 --- a/neutron/plugins/mlnx/mlnx_plugin.py +++ b/neutron/plugins/mlnx/mlnx_plugin.py @@ -20,6 +20,7 @@ from oslo.config import cfg from neutron.agent import securitygroups_rpc as sg_rpc from neutron.api.rpc.agentnotifiers import dhcp_rpc_agent_api from neutron.api.rpc.agentnotifiers import l3_rpc_agent_api +from neutron.api.rpc.handlers import dhcp_rpc from neutron.api.rpc.handlers import l3_rpc from neutron.api.v2 import attributes from neutron.common import constants as q_const @@ -121,6 +122,7 @@ class MellanoxEswitchPlugin(db_base_plugin_v2.NeutronDbPluginV2, svc_constants.L3_ROUTER_NAT: topics.L3PLUGIN} self.conn = n_rpc.create_connection(new=True) self.endpoints = [rpc_callbacks.MlnxRpcCallbacks(), + dhcp_rpc.DhcpRpcCallback(), l3_rpc.L3RpcCallback(), agents_db.AgentExtRpcCallback()] for svc_topic in self.service_topics.values(): diff --git a/neutron/plugins/mlnx/rpc_callbacks.py b/neutron/plugins/mlnx/rpc_callbacks.py index f30904e441c..9337290fa6a 100644 --- a/neutron/plugins/mlnx/rpc_callbacks.py +++ b/neutron/plugins/mlnx/rpc_callbacks.py @@ -17,7 +17,6 @@ from oslo.config import cfg from neutron.common import constants as q_const from neutron.common import rpc as n_rpc from neutron.db import api as db_api -from neutron.db import dhcp_rpc_base from neutron.db import securitygroups_rpc_base as sg_db_rpc from neutron.openstack.common import log as logging from neutron.plugins.mlnx.db import mlnx_db_v2 as db @@ -26,7 +25,6 @@ LOG = logging.getLogger(__name__) class MlnxRpcCallbacks(n_rpc.RpcCallback, - dhcp_rpc_base.DhcpRpcCallbackMixin, sg_db_rpc.SecurityGroupServerRpcCallbackMixin): # History # 1.1 Support Security Group RPC diff --git a/neutron/plugins/nec/nec_plugin.py b/neutron/plugins/nec/nec_plugin.py index 7c5f6fe8dcb..936057ba1b0 100644 --- a/neutron/plugins/nec/nec_plugin.py +++ b/neutron/plugins/nec/nec_plugin.py @@ -17,6 +17,7 @@ from neutron.agent import securitygroups_rpc as sg_rpc from neutron.api import extensions as neutron_extensions from neutron.api.rpc.agentnotifiers import dhcp_rpc_agent_api +from neutron.api.rpc.handlers import dhcp_rpc from neutron.api.rpc.handlers import l3_rpc from neutron.api.v2 import attributes as attrs from neutron.common import constants as const @@ -27,7 +28,6 @@ from neutron.db import agents_db from neutron.db import agentschedulers_db from neutron.db import allowedaddresspairs_db as addr_pair_db from neutron.db import db_base_plugin_v2 -from neutron.db import dhcp_rpc_base from neutron.db import external_net_db from neutron.db import portbindings_base from neutron.db import portbindings_db @@ -146,7 +146,7 @@ class NECPluginV2(db_base_plugin_v2.NeutronDbPluginV2, self.callback_sg = SecurityGroupServerRpcCallback() self.endpoints = [ NECPluginV2RPCCallbacks(self.safe_reference), - DhcpRpcCallback(), + dhcp_rpc.DhcpRpcCallback(), l3_rpc.L3RpcCallback(), self.callback_sg, agents_db.AgentExtRpcCallback()] @@ -680,12 +680,6 @@ class NECPluginV2AgentNotifierApi(n_rpc.RpcProxy, topic=self.topic_port_update) -class DhcpRpcCallback(n_rpc.RpcCallback, - dhcp_rpc_base.DhcpRpcCallbackMixin): - # DhcpPluginApi BASE_RPC_API_VERSION - RPC_API_VERSION = '1.1' - - class SecurityGroupServerRpcCallback( n_rpc.RpcCallback, sg_db_rpc.SecurityGroupServerRpcCallbackMixin): diff --git a/neutron/plugins/oneconvergence/plugin.py b/neutron/plugins/oneconvergence/plugin.py index d1743a56764..b0c0f3e17f8 100644 --- a/neutron/plugins/oneconvergence/plugin.py +++ b/neutron/plugins/oneconvergence/plugin.py @@ -21,6 +21,7 @@ from oslo.config import cfg from neutron.agent import securitygroups_rpc as sg_rpc from neutron.api.rpc.agentnotifiers import dhcp_rpc_agent_api from neutron.api.rpc.agentnotifiers import l3_rpc_agent_api +from neutron.api.rpc.handlers import dhcp_rpc from neutron.api.rpc.handlers import l3_rpc from neutron.common import constants as q_const from neutron.common import exceptions as nexception @@ -29,7 +30,6 @@ from neutron.common import topics from neutron.db import agents_db from neutron.db import agentschedulers_db from neutron.db import db_base_plugin_v2 -from neutron.db import dhcp_rpc_base from neutron.db import external_net_db from neutron.db import extraroute_db from neutron.db import l3_agentschedulers_db @@ -52,7 +52,6 @@ IPv6 = 6 class NVSDPluginRpcCallbacks(n_rpc.RpcCallback, - dhcp_rpc_base.DhcpRpcCallbackMixin, sg_db_rpc.SecurityGroupServerRpcCallbackMixin): RPC_API_VERSION = '1.1' @@ -161,6 +160,7 @@ class OneConvergencePluginV2(db_base_plugin_v2.NeutronDbPluginV2, l3_rpc_agent_api.L3AgentNotifyAPI() ) self.endpoints = [NVSDPluginRpcCallbacks(), + dhcp_rpc.DhcpRpcCallback(), l3_rpc.L3RpcCallback(), agents_db.AgentExtRpcCallback()] for svc_topic in self.service_topics.values(): diff --git a/neutron/plugins/openvswitch/ovs_neutron_plugin.py b/neutron/plugins/openvswitch/ovs_neutron_plugin.py index ca3a4e9b7a4..f72a82e3656 100644 --- a/neutron/plugins/openvswitch/ovs_neutron_plugin.py +++ b/neutron/plugins/openvswitch/ovs_neutron_plugin.py @@ -20,6 +20,7 @@ from oslo.config import cfg from neutron.agent import securitygroups_rpc as sg_rpc from neutron.api.rpc.agentnotifiers import dhcp_rpc_agent_api from neutron.api.rpc.agentnotifiers import l3_rpc_agent_api +from neutron.api.rpc.handlers import dhcp_rpc from neutron.api.rpc.handlers import l3_rpc from neutron.api.v2 import attributes from neutron.common import constants as q_const @@ -31,7 +32,6 @@ from neutron.db import agents_db from neutron.db import agentschedulers_db from neutron.db import allowedaddresspairs_db as addr_pair_db from neutron.db import db_base_plugin_v2 -from neutron.db import dhcp_rpc_base from neutron.db import external_net_db from neutron.db import extradhcpopt_db from neutron.db import extraroute_db @@ -59,7 +59,6 @@ LOG = logging.getLogger(__name__) class OVSRpcCallbacks(n_rpc.RpcCallback, - dhcp_rpc_base.DhcpRpcCallbackMixin, sg_db_rpc.SecurityGroupServerRpcCallbackMixin): # history @@ -345,6 +344,7 @@ class OVSNeutronPluginV2(db_base_plugin_v2.NeutronDbPluginV2, l3_rpc_agent_api.L3AgentNotifyAPI() ) self.endpoints = [OVSRpcCallbacks(self.notifier, self.tunnel_type), + dhcp_rpc.DhcpRpcCallback(), l3_rpc.L3RpcCallback(), agents_db.AgentExtRpcCallback()] for svc_topic in self.service_topics.values(): diff --git a/neutron/plugins/ryu/ryu_neutron_plugin.py b/neutron/plugins/ryu/ryu_neutron_plugin.py index 68baa3388bb..cb6ee878048 100644 --- a/neutron/plugins/ryu/ryu_neutron_plugin.py +++ b/neutron/plugins/ryu/ryu_neutron_plugin.py @@ -20,6 +20,7 @@ from ryu.app import client from ryu.app import rest_nw_id from neutron.agent import securitygroups_rpc as sg_rpc +from neutron.api.rpc.handlers import dhcp_rpc from neutron.api.rpc.handlers import l3_rpc from neutron.common import constants as q_const from neutron.common import exceptions as n_exc @@ -27,7 +28,6 @@ from neutron.common import rpc as n_rpc from neutron.common import topics from neutron.db import api as db from neutron.db import db_base_plugin_v2 -from neutron.db import dhcp_rpc_base from neutron.db import external_net_db from neutron.db import extraroute_db from neutron.db import l3_gwmode_db @@ -46,7 +46,6 @@ LOG = logging.getLogger(__name__) class RyuRpcCallbacks(n_rpc.RpcCallback, - dhcp_rpc_base.DhcpRpcCallbackMixin, sg_db_rpc.SecurityGroupServerRpcCallbackMixin): RPC_API_VERSION = '1.1' @@ -139,6 +138,7 @@ class RyuNeutronPluginV2(db_base_plugin_v2.NeutronDbPluginV2, self.conn = n_rpc.create_connection(new=True) self.notifier = AgentNotifierApi(topics.AGENT) self.endpoints = [RyuRpcCallbacks(self.ofp_api_host), + dhcp_rpc.DhcpRpcCallback(), l3_rpc.L3RpcCallback()] for svc_topic in self.service_topics.values(): self.conn.create_consumer(svc_topic, self.endpoints, fanout=False) diff --git a/neutron/plugins/vmware/dhcp_meta/rpc.py b/neutron/plugins/vmware/dhcp_meta/rpc.py index e4e06134bcd..ba68cef0001 100644 --- a/neutron/plugins/vmware/dhcp_meta/rpc.py +++ b/neutron/plugins/vmware/dhcp_meta/rpc.py @@ -22,9 +22,7 @@ from neutron.api.rpc.agentnotifiers import dhcp_rpc_agent_api from neutron.api.v2 import attributes from neutron.common import constants as const from neutron.common import exceptions as ntn_exc -from neutron.common import rpc as n_rpc from neutron.db import db_base_plugin_v2 -from neutron.db import dhcp_rpc_base from neutron.db import l3_db from neutron.db import models_v2 from neutron.openstack.common import log as logging @@ -40,12 +38,6 @@ METADATA_GATEWAY_IP = '169.254.169.253' METADATA_DHCP_ROUTE = '169.254.169.254/32' -class NSXRpcCallbacks(n_rpc.RpcCallback, - dhcp_rpc_base.DhcpRpcCallbackMixin): - - RPC_API_VERSION = '1.1' - - def handle_network_dhcp_access(plugin, context, network, action): pass diff --git a/neutron/plugins/vmware/dhcpmeta_modes.py b/neutron/plugins/vmware/dhcpmeta_modes.py index 6312700b789..7832c36aabd 100644 --- a/neutron/plugins/vmware/dhcpmeta_modes.py +++ b/neutron/plugins/vmware/dhcpmeta_modes.py @@ -18,6 +18,7 @@ from oslo.config import cfg from neutron.api.rpc.agentnotifiers import dhcp_rpc_agent_api +from neutron.api.rpc.handlers import dhcp_rpc from neutron.common import constants as const from neutron.common import rpc as n_rpc from neutron.common import topics @@ -71,7 +72,7 @@ class DhcpMetadataAccess(object): def _setup_rpc_dhcp_metadata(self, notifier=None): self.topic = topics.PLUGIN self.conn = n_rpc.create_connection(new=True) - self.endpoints = [nsx_rpc.NSXRpcCallbacks(), + self.endpoints = [dhcp_rpc.DhcpRpcCallback(), agents_db.AgentExtRpcCallback()] self.conn.create_consumer(self.topic, self.endpoints, fanout=False) self.agent_notifiers[const.AGENT_TYPE_DHCP] = ( diff --git a/neutron/tests/unit/openvswitch/test_agent_scheduler.py b/neutron/tests/unit/openvswitch/test_agent_scheduler.py index f8641e0cb85..0bdd2737d87 100644 --- a/neutron/tests/unit/openvswitch/test_agent_scheduler.py +++ b/neutron/tests/unit/openvswitch/test_agent_scheduler.py @@ -23,12 +23,12 @@ from webob import exc from neutron.api import extensions from neutron.api.rpc.agentnotifiers import dhcp_rpc_agent_api +from neutron.api.rpc.handlers import dhcp_rpc from neutron.api.rpc.handlers import l3_rpc from neutron.api.v2 import attributes from neutron.common import constants from neutron import context from neutron.db import agents_db -from neutron.db import dhcp_rpc_base from neutron.db import l3_agentschedulers_db from neutron.extensions import agent from neutron.extensions import dhcpagentscheduler @@ -263,16 +263,16 @@ class OvsAgentSchedulerTestCase(OvsAgentSchedulerTestCaseBase): cfg.CONF.set_override('allow_overlapping_ips', True) with contextlib.nested(self.subnet(), self.subnet()): - dhcp_rpc = dhcp_rpc_base.DhcpRpcCallbackMixin() + dhcp_rpc_cb = dhcp_rpc.DhcpRpcCallback() self._register_agent_states() hosta_id = self._get_agent_id(constants.AGENT_TYPE_DHCP, DHCP_HOSTA) hostc_id = self._get_agent_id(constants.AGENT_TYPE_DHCP, DHCP_HOSTC) self._disable_agent(hosta_id) - dhcp_rpc.get_active_networks(self.adminContext, host=DHCP_HOSTA) + dhcp_rpc_cb.get_active_networks(self.adminContext, host=DHCP_HOSTA) # second agent will host all the networks since first is disabled. - dhcp_rpc.get_active_networks(self.adminContext, host=DHCP_HOSTC) + dhcp_rpc_cb.get_active_networks(self.adminContext, host=DHCP_HOSTC) networks = self._list_networks_hosted_by_dhcp_agent(hostc_id) num_hostc_nets = len(networks['networks']) networks = self._list_networks_hosted_by_dhcp_agent(hosta_id) @@ -284,15 +284,15 @@ class OvsAgentSchedulerTestCase(OvsAgentSchedulerTestCaseBase): cfg.CONF.set_override('allow_overlapping_ips', True) with contextlib.nested(self.subnet(enable_dhcp=False), self.subnet(enable_dhcp=False)): - dhcp_rpc = dhcp_rpc_base.DhcpRpcCallbackMixin() + dhcp_rpc_cb = dhcp_rpc.DhcpRpcCallback() self._register_agent_states() hosta_id = self._get_agent_id(constants.AGENT_TYPE_DHCP, DHCP_HOSTA) hostc_id = self._get_agent_id(constants.AGENT_TYPE_DHCP, DHCP_HOSTC) self._disable_agent(hosta_id) - dhcp_rpc.get_active_networks(self.adminContext, host=DHCP_HOSTA) - dhcp_rpc.get_active_networks(self.adminContext, host=DHCP_HOSTC) + dhcp_rpc_cb.get_active_networks(self.adminContext, host=DHCP_HOSTA) + dhcp_rpc_cb.get_active_networks(self.adminContext, host=DHCP_HOSTC) networks = self._list_networks_hosted_by_dhcp_agent(hostc_id) num_hostc_nets = len(networks['networks']) networks = self._list_networks_hosted_by_dhcp_agent(hosta_id) @@ -305,14 +305,14 @@ class OvsAgentSchedulerTestCase(OvsAgentSchedulerTestCaseBase): cfg.CONF.set_override('allow_overlapping_ips', True) with contextlib.nested(self.subnet(), self.subnet()): - dhcp_rpc = dhcp_rpc_base.DhcpRpcCallbackMixin() + dhcp_rpc_cb = dhcp_rpc.DhcpRpcCallback() self._register_agent_states() hosta_id = self._get_agent_id(constants.AGENT_TYPE_DHCP, DHCP_HOSTA) hostc_id = self._get_agent_id(constants.AGENT_TYPE_DHCP, DHCP_HOSTC) - dhcp_rpc.get_active_networks(self.adminContext, host=DHCP_HOSTA) - dhcp_rpc.get_active_networks(self.adminContext, host=DHCP_HOSTC) + dhcp_rpc_cb.get_active_networks(self.adminContext, host=DHCP_HOSTA) + dhcp_rpc_cb.get_active_networks(self.adminContext, host=DHCP_HOSTC) networks = self._list_networks_hosted_by_dhcp_agent(hostc_id) num_hostc_nets = len(networks['networks']) networks = self._list_networks_hosted_by_dhcp_agent(hosta_id) @@ -323,10 +323,10 @@ class OvsAgentSchedulerTestCase(OvsAgentSchedulerTestCaseBase): def test_network_auto_schedule_restart_dhcp_agent(self): cfg.CONF.set_override('dhcp_agents_per_network', 2) with self.subnet() as sub1: - dhcp_rpc = dhcp_rpc_base.DhcpRpcCallbackMixin() + dhcp_rpc_cb = dhcp_rpc.DhcpRpcCallback() self._register_agent_states() - dhcp_rpc.get_active_networks(self.adminContext, host=DHCP_HOSTA) - dhcp_rpc.get_active_networks(self.adminContext, host=DHCP_HOSTA) + dhcp_rpc_cb.get_active_networks(self.adminContext, host=DHCP_HOSTA) + dhcp_rpc_cb.get_active_networks(self.adminContext, host=DHCP_HOSTA) dhcp_agents = self._list_dhcp_agents_hosting_network( sub1['subnet']['network_id']) self.assertEqual(1, len(dhcp_agents['agents'])) @@ -336,11 +336,11 @@ class OvsAgentSchedulerTestCase(OvsAgentSchedulerTestCaseBase): cfg.CONF.set_override('allow_overlapping_ips', True) with contextlib.nested(self.subnet(), self.subnet()) as (sub1, sub2): - dhcp_rpc = dhcp_rpc_base.DhcpRpcCallbackMixin() + dhcp_rpc_cb = dhcp_rpc.DhcpRpcCallback() self._register_agent_states() - dhcp_rpc.get_active_networks(self.adminContext, host=DHCP_HOSTA) + dhcp_rpc_cb.get_active_networks(self.adminContext, host=DHCP_HOSTA) # second agent will not host the network since first has got it. - dhcp_rpc.get_active_networks(self.adminContext, host=DHCP_HOSTC) + dhcp_rpc_cb.get_active_networks(self.adminContext, host=DHCP_HOSTC) dhcp_agents = self._list_dhcp_agents_hosting_network( sub1['subnet']['network_id']) hosta_id = self._get_agent_id(constants.AGENT_TYPE_DHCP, @@ -359,7 +359,7 @@ class OvsAgentSchedulerTestCase(OvsAgentSchedulerTestCaseBase): def test_network_auto_schedule_with_hosted_2(self): # one agent hosts one network - dhcp_rpc = dhcp_rpc_base.DhcpRpcCallbackMixin() + dhcp_rpc_cb = dhcp_rpc.DhcpRpcCallback() dhcp_hosta = { 'binary': 'neutron-dhcp-agent', 'host': DHCP_HOSTA, @@ -373,13 +373,13 @@ class OvsAgentSchedulerTestCase(OvsAgentSchedulerTestCaseBase): cfg.CONF.set_override('allow_overlapping_ips', True) with self.subnet() as sub1: self._register_one_agent_state(dhcp_hosta) - dhcp_rpc.get_active_networks(self.adminContext, host=DHCP_HOSTA) + dhcp_rpc_cb.get_active_networks(self.adminContext, host=DHCP_HOSTA) hosta_id = self._get_agent_id(constants.AGENT_TYPE_DHCP, DHCP_HOSTA) self._disable_agent(hosta_id, admin_state_up=False) with self.subnet() as sub2: self._register_one_agent_state(dhcp_hostc) - dhcp_rpc.get_active_networks(self.adminContext, + dhcp_rpc_cb.get_active_networks(self.adminContext, host=DHCP_HOSTC) dhcp_agents_1 = self._list_dhcp_agents_hosting_network( sub1['subnet']['network_id']) diff --git a/neutron/tests/unit/test_db_rpc_base.py b/neutron/tests/unit/test_dhcp_rpc.py similarity index 97% rename from neutron/tests/unit/test_db_rpc_base.py rename to neutron/tests/unit/test_dhcp_rpc.py index 9e0f70d71b4..6a2ed16d7e0 100644 --- a/neutron/tests/unit/test_db_rpc_base.py +++ b/neutron/tests/unit/test_dhcp_rpc.py @@ -16,22 +16,22 @@ import mock from oslo.db import exception as db_exc +from neutron.api.rpc.handlers import dhcp_rpc from neutron.common import constants from neutron.common import exceptions as n_exc -from neutron.db import dhcp_rpc_base from neutron.tests import base -class TestDhcpRpcCallbackMixin(base.BaseTestCase): +class TestDhcpRpcCallback(base.BaseTestCase): def setUp(self): - super(TestDhcpRpcCallbackMixin, self).setUp() + super(TestDhcpRpcCallback, self).setUp() self.plugin_p = mock.patch('neutron.manager.NeutronManager.get_plugin') get_plugin = self.plugin_p.start() self.plugin = mock.MagicMock() get_plugin.return_value = self.plugin - self.callbacks = dhcp_rpc_base.DhcpRpcCallbackMixin() - self.log_p = mock.patch('neutron.db.dhcp_rpc_base.LOG') + self.callbacks = dhcp_rpc.DhcpRpcCallback() + self.log_p = mock.patch('neutron.api.rpc.handlers.dhcp_rpc.LOG') self.log = self.log_p.start() def test_get_active_networks(self):