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
|
agent_host = context.host
|
||||||
else:
|
else:
|
||||||
agent_host = context.original_host
|
agent_host = context.original_host
|
||||||
port_infos = self._get_port_infos(
|
|
||||||
context, orig, agent_host)
|
agent_ip = self.get_agent_ip_by_host(db_api.get_session(), agent_host)
|
||||||
if not port_infos:
|
|
||||||
return
|
|
||||||
agent, agent_ip, segment, port_fdb_entries = port_infos
|
|
||||||
|
|
||||||
orig_mac_ip = [l2pop_rpc.PortInfo(mac_address=port['mac_address'],
|
orig_mac_ip = [l2pop_rpc.PortInfo(mac_address=port['mac_address'],
|
||||||
ip_address=ip)
|
ip_address=ip)
|
||||||
|
@ -152,23 +149,11 @@ class L2populationMechanismDriver(api.MechanismDriver,
|
||||||
self.L2populationAgentNotify.remove_fdb_entries(
|
self.L2populationAgentNotify.remove_fdb_entries(
|
||||||
self.rpc_ctx, fdb_entries)
|
self.rpc_ctx, fdb_entries)
|
||||||
|
|
||||||
def _get_port_infos(self, context, port, agent_host):
|
def _get_and_validate_segment(self, context, port_id, agent):
|
||||||
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)
|
|
||||||
|
|
||||||
segment = context.bottom_bound_segment
|
segment = context.bottom_bound_segment
|
||||||
if not segment:
|
if not segment:
|
||||||
LOG.debug("Port %(port)s updated by agent %(agent)s isn't bound "
|
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
|
return
|
||||||
|
|
||||||
network_types = self.get_agent_l2pop_network_types(agent)
|
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:
|
if segment['network_type'] not in network_types:
|
||||||
return
|
return
|
||||||
|
|
||||||
fdb_entries = self._get_port_fdb_entries(port)
|
return segment
|
||||||
|
|
||||||
return agent, agent_ip, segment, fdb_entries
|
|
||||||
|
|
||||||
def _create_agent_fdb(self, session, agent, segment, network_id):
|
def _create_agent_fdb(self, session, agent, segment, network_id):
|
||||||
agent_fdb_entries = {network_id:
|
agent_fdb_entries = {network_id:
|
||||||
|
@ -221,21 +204,24 @@ class L2populationMechanismDriver(api.MechanismDriver,
|
||||||
def _update_port_up(self, context):
|
def _update_port_up(self, context):
|
||||||
port = context.current
|
port = context.current
|
||||||
agent_host = context.host
|
agent_host = context.host
|
||||||
port_infos = self._get_port_infos(context, port, agent_host)
|
session = db_api.get_session()
|
||||||
if not port_infos:
|
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
|
return
|
||||||
agent, agent_ip, segment, port_fdb_entries = port_infos
|
|
||||||
|
|
||||||
network_id = port['network_id']
|
network_id = port['network_id']
|
||||||
|
|
||||||
session = db_api.get_session()
|
|
||||||
agent_active_ports = self.get_agent_network_active_port_count(
|
agent_active_ports = self.get_agent_network_active_port_count(
|
||||||
session, agent_host, network_id)
|
session, agent_host, network_id)
|
||||||
|
|
||||||
other_fdb_entries = {network_id:
|
agent_ip = self.get_agent_ip(agent)
|
||||||
{'segment_id': segment['segmentation_id'],
|
segment = self._get_and_validate_segment(context, port['id'], agent)
|
||||||
'network_type': segment['network_type'],
|
if not segment:
|
||||||
'ports': {agent_ip: []}}}
|
return
|
||||||
|
other_fdb_entries = self._get_fdb_entries_template(
|
||||||
|
segment, agent_ip, network_id)
|
||||||
other_fdb_ports = other_fdb_entries[network_id]['ports']
|
other_fdb_ports = other_fdb_entries[network_id]['ports']
|
||||||
|
|
||||||
if agent_active_ports == 1 or (
|
if agent_active_ports == 1 or (
|
||||||
|
@ -256,27 +242,23 @@ class L2populationMechanismDriver(api.MechanismDriver,
|
||||||
|
|
||||||
# Notify other agents to add fdb rule for current port
|
# Notify other agents to add fdb rule for current port
|
||||||
if port['device_owner'] != const.DEVICE_OWNER_DVR_INTERFACE:
|
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,
|
self.L2populationAgentNotify.add_fdb_entries(self.rpc_ctx,
|
||||||
other_fdb_entries)
|
other_fdb_entries)
|
||||||
|
|
||||||
def _get_agent_fdb(self, context, port, agent_host):
|
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']
|
network_id = port['network_id']
|
||||||
|
|
||||||
session = db_api.get_session()
|
session = db_api.get_session()
|
||||||
agent_active_ports = self.get_agent_network_active_port_count(
|
agent_active_ports = self.get_agent_network_active_port_count(
|
||||||
session, agent_host, network_id)
|
session, agent_host, network_id)
|
||||||
|
|
||||||
other_fdb_entries = {network_id:
|
agent = self.get_agent_by_host(db_api.get_session(), agent_host)
|
||||||
{'segment_id': segment['segmentation_id'],
|
segment = self._get_and_validate_segment(context, port['id'], agent)
|
||||||
'network_type': segment['network_type'],
|
agent_ip = self.get_agent_ip(agent)
|
||||||
'ports': {agent_ip: []}}}
|
other_fdb_entries = self._get_fdb_entries_template(
|
||||||
|
segment, agent_ip, port['network_id'])
|
||||||
if agent_active_ports == 0:
|
if agent_active_ports == 0:
|
||||||
# Agent is removing its last activated port in this network,
|
# Agent is removing its last activated port in this network,
|
||||||
# other agents needs to be notified to delete their flooding entry.
|
# other agents needs to be notified to delete their flooding entry.
|
||||||
|
@ -284,7 +266,15 @@ class L2populationMechanismDriver(api.MechanismDriver,
|
||||||
const.FLOODING_ENTRY)
|
const.FLOODING_ENTRY)
|
||||||
# Notify other agents to remove fdb rules for current port
|
# Notify other agents to remove fdb rules for current port
|
||||||
if port['device_owner'] != const.DEVICE_OWNER_DVR_INTERFACE:
|
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
|
other_fdb_entries[network_id]['ports'][agent_ip] += fdb_entries
|
||||||
|
|
||||||
return other_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