Remove l2pop _get_port_infos method
It's a method called 'get_port_infos' that returned 4 values, most of which were not a function of the port. What the method did or its naming was very unclear to me so I broke it up according to its usage. Change-Id: Ib1fd589e9123fc5009f0887dd400c550efa687a3
This commit is contained in:
parent
70606fa29a
commit
494ee39c6f
|
@ -72,11 +72,8 @@ class L2populationMechanismDriver(api.MechanismDriver,
|
|||
agent_host = context.host
|
||||
else:
|
||||
agent_host = context.original_host
|
||||
port_infos = self._get_port_infos(
|
||||
context, orig, agent_host)
|
||||
if not port_infos:
|
||||
return
|
||||
agent, agent_ip, segment, port_fdb_entries = port_infos
|
||||
|
||||
agent_ip = self.get_agent_ip_by_host(db_api.get_session(), agent_host)
|
||||
|
||||
orig_mac_ip = [l2pop_rpc.PortInfo(mac_address=port['mac_address'],
|
||||
ip_address=ip)
|
||||
|
@ -152,23 +149,11 @@ class L2populationMechanismDriver(api.MechanismDriver,
|
|||
self.L2populationAgentNotify.remove_fdb_entries(
|
||||
self.rpc_ctx, fdb_entries)
|
||||
|
||||
def _get_port_infos(self, context, port, agent_host):
|
||||
if not agent_host:
|
||||
return
|
||||
|
||||
session = db_api.get_session()
|
||||
agent = self.get_agent_by_host(session, agent_host)
|
||||
if not agent:
|
||||
LOG.warning(_LW("Unable to retrieve active L2 agent on host %s"),
|
||||
agent_host)
|
||||
return
|
||||
|
||||
agent_ip = self.get_agent_ip(agent)
|
||||
|
||||
def _get_and_validate_segment(self, context, port_id, agent):
|
||||
segment = context.bottom_bound_segment
|
||||
if not segment:
|
||||
LOG.debug("Port %(port)s updated by agent %(agent)s isn't bound "
|
||||
"to any segment", {'port': port['id'], 'agent': agent})
|
||||
"to any segment", {'port': port_id, 'agent': agent})
|
||||
return
|
||||
|
||||
network_types = self.get_agent_l2pop_network_types(agent)
|
||||
|
@ -177,9 +162,7 @@ class L2populationMechanismDriver(api.MechanismDriver,
|
|||
if segment['network_type'] not in network_types:
|
||||
return
|
||||
|
||||
fdb_entries = self._get_port_fdb_entries(port)
|
||||
|
||||
return agent, agent_ip, segment, fdb_entries
|
||||
return segment
|
||||
|
||||
def _create_agent_fdb(self, session, agent, segment, network_id):
|
||||
agent_fdb_entries = {network_id:
|
||||
|
@ -221,21 +204,24 @@ class L2populationMechanismDriver(api.MechanismDriver,
|
|||
def _update_port_up(self, context):
|
||||
port = context.current
|
||||
agent_host = context.host
|
||||
port_infos = self._get_port_infos(context, port, agent_host)
|
||||
if not port_infos:
|
||||
session = db_api.get_session()
|
||||
agent = self.get_agent_by_host(session, agent_host)
|
||||
if not agent:
|
||||
LOG.warning(_LW("Unable to retrieve active L2 agent on host %s"),
|
||||
agent_host)
|
||||
return
|
||||
agent, agent_ip, segment, port_fdb_entries = port_infos
|
||||
|
||||
network_id = port['network_id']
|
||||
|
||||
session = db_api.get_session()
|
||||
agent_active_ports = self.get_agent_network_active_port_count(
|
||||
session, agent_host, network_id)
|
||||
|
||||
other_fdb_entries = {network_id:
|
||||
{'segment_id': segment['segmentation_id'],
|
||||
'network_type': segment['network_type'],
|
||||
'ports': {agent_ip: []}}}
|
||||
agent_ip = self.get_agent_ip(agent)
|
||||
segment = self._get_and_validate_segment(context, port['id'], agent)
|
||||
if not segment:
|
||||
return
|
||||
other_fdb_entries = self._get_fdb_entries_template(
|
||||
segment, agent_ip, network_id)
|
||||
other_fdb_ports = other_fdb_entries[network_id]['ports']
|
||||
|
||||
if agent_active_ports == 1 or (
|
||||
|
@ -256,27 +242,23 @@ class L2populationMechanismDriver(api.MechanismDriver,
|
|||
|
||||
# Notify other agents to add fdb rule for current port
|
||||
if port['device_owner'] != const.DEVICE_OWNER_DVR_INTERFACE:
|
||||
other_fdb_ports[agent_ip] += port_fdb_entries
|
||||
other_fdb_ports[agent_ip] += self._get_port_fdb_entries(port)
|
||||
|
||||
self.L2populationAgentNotify.add_fdb_entries(self.rpc_ctx,
|
||||
other_fdb_entries)
|
||||
|
||||
def _get_agent_fdb(self, context, port, agent_host):
|
||||
port_infos = self._get_port_infos(context, port, agent_host)
|
||||
if not port_infos:
|
||||
return
|
||||
agent, agent_ip, segment, port_fdb_entries = port_infos
|
||||
|
||||
network_id = port['network_id']
|
||||
|
||||
session = db_api.get_session()
|
||||
agent_active_ports = self.get_agent_network_active_port_count(
|
||||
session, agent_host, network_id)
|
||||
|
||||
other_fdb_entries = {network_id:
|
||||
{'segment_id': segment['segmentation_id'],
|
||||
'network_type': segment['network_type'],
|
||||
'ports': {agent_ip: []}}}
|
||||
agent = self.get_agent_by_host(db_api.get_session(), agent_host)
|
||||
segment = self._get_and_validate_segment(context, port['id'], agent)
|
||||
agent_ip = self.get_agent_ip(agent)
|
||||
other_fdb_entries = self._get_fdb_entries_template(
|
||||
segment, agent_ip, port['network_id'])
|
||||
if agent_active_ports == 0:
|
||||
# Agent is removing its last activated port in this network,
|
||||
# other agents needs to be notified to delete their flooding entry.
|
||||
|
@ -284,7 +266,15 @@ class L2populationMechanismDriver(api.MechanismDriver,
|
|||
const.FLOODING_ENTRY)
|
||||
# Notify other agents to remove fdb rules for current port
|
||||
if port['device_owner'] != const.DEVICE_OWNER_DVR_INTERFACE:
|
||||
fdb_entries = port_fdb_entries
|
||||
fdb_entries = self._get_port_fdb_entries(port)
|
||||
other_fdb_entries[network_id]['ports'][agent_ip] += fdb_entries
|
||||
|
||||
return other_fdb_entries
|
||||
|
||||
@classmethod
|
||||
def _get_fdb_entries_template(cls, segment, agent_ip, network_id):
|
||||
return {
|
||||
network_id:
|
||||
{'segment_id': segment['segmentation_id'],
|
||||
'network_type': segment['network_type'],
|
||||
'ports': {agent_ip: []}}}
|
||||
|
|
Loading…
Reference in New Issue