Remove __init__ method from TunnelCallback mixin
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
This commit is contained in:
parent
f1f841d772
commit
14ed601ec0
@ -87,9 +87,9 @@ class TunnelTypeDriver(api.TypeDriver):
|
||||
|
||||
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.
|
||||
@ -102,14 +102,14 @@ class TunnelRpcCallbackMixin(object):
|
||||
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:
|
||||
|
@ -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
|
||||
@ -37,7 +35,8 @@ TAP_DEVICE_PREFIX = 'tap'
|
||||
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):
|
||||
|
||||
@ -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):
|
||||
|
Loading…
x
Reference in New Issue
Block a user