Skip to content

Commit

Permalink
Remove __init__ method from TunnelCallback mixin
Browse files Browse the repository at this point in the history
Removed an __init__ method from a mixin class that
made mixing with other classes fragile and inflexible.
This replaces it with an explicit setup method.

This allows the ML2 RPCCallbacks class to correctly
inherit the common RpcCallback class.

Closes-Bug: #1332041
Change-Id: I36cb7dcf57147468f252d61f846b2b28dd77c8ff
  • Loading branch information
kevinbenton committed Jun 25, 2014
1 parent befc4a0 commit e8b9a11
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 18 deletions.
12 changes: 6 additions & 6 deletions neutron/plugins/ml2/drivers/type_tunnel.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,9 +87,9 @@ def validate_provider_segment(self, segment):

class TunnelRpcCallbackMixin(object):

def __init__(self, notifier, type_manager):
self.notifier = notifier
self.type_manager = type_manager
def setup_tunnel_callback_mixin(self, notifier, type_manager):
self._notifier = notifier
self._type_manager = type_manager

def tunnel_sync(self, rpc_context, **kwargs):
"""Update new tunnel.
Expand All @@ -102,14 +102,14 @@ def tunnel_sync(self, rpc_context, **kwargs):
if not tunnel_type:
msg = _("Network_type value needed by the ML2 plugin")
raise exc.InvalidInput(error_message=msg)
driver = self.type_manager.drivers.get(tunnel_type)
driver = self._type_manager.drivers.get(tunnel_type)
if driver:
tunnel = driver.obj.add_endpoint(tunnel_ip)
tunnels = driver.obj.get_endpoints()
entry = {'tunnels': tunnels}
# Notify all other listening agents
self.notifier.tunnel_update(rpc_context, tunnel.ip_address,
tunnel_type)
self._notifier.tunnel_update(rpc_context, tunnel.ip_address,
tunnel_type)
# Return the list of tunnels IP's to the agent
return entry
else:
Expand Down
16 changes: 4 additions & 12 deletions neutron/plugins/ml2/rpc.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@
# License for the specific language governing permissions and limitations
# under the License.

from oslo import messaging

from neutron.agent import securitygroups_rpc as sg_rpc
from neutron.common import constants as q_const
from neutron.common import rpc as n_rpc
Expand All @@ -37,7 +35,8 @@
TAP_DEVICE_PREFIX_LENGTH = 3


class RpcCallbacks(dhcp_rpc_base.DhcpRpcCallbackMixin,
class RpcCallbacks(n_rpc.RpcCallback,
dhcp_rpc_base.DhcpRpcCallbackMixin,
sg_db_rpc.SecurityGroupServerRpcCallbackMixin,
type_tunnel.TunnelRpcCallbackMixin):

Expand All @@ -46,16 +45,9 @@ class RpcCallbacks(dhcp_rpc_base.DhcpRpcCallbackMixin,
# 1.0 Initial version (from openvswitch/linuxbridge)
# 1.1 Support Security Group RPC

# FIXME(ihrachys): we can't use n_rpc.RpcCallback here due to
# inheritance problems
target = messaging.Target(version=RPC_API_VERSION)

def __init__(self, notifier, type_manager):
# REVISIT(kmestery): This depends on the first three super classes
# not having their own __init__ functions. If an __init__() is added
# to one, this could break. Fix this and add a unit test to cover this
# test in H3.
super(RpcCallbacks, self).__init__(notifier, type_manager)
self.setup_tunnel_callback_mixin(notifier, type_manager)
super(RpcCallbacks, self).__init__()

@classmethod
def _device_to_port_id(cls, device):
Expand Down

0 comments on commit e8b9a11

Please sign in to comment.