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:
Assaf Muller 2016-01-04 17:49:09 -05:00
parent 70606fa29a
commit 494ee39c6f
1 changed files with 31 additions and 41 deletions

View File

@ -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: []}}}