From 494ee39c6f3ed26b4c70d372dea3b186938bd38d Mon Sep 17 00:00:00 2001 From: Assaf Muller Date: Mon, 4 Jan 2016 17:49:09 -0500 Subject: [PATCH] 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 --- .../plugins/ml2/drivers/l2pop/mech_driver.py | 72 ++++++++----------- 1 file changed, 31 insertions(+), 41 deletions(-) diff --git a/neutron/plugins/ml2/drivers/l2pop/mech_driver.py b/neutron/plugins/ml2/drivers/l2pop/mech_driver.py index 4df03ed9cdd..c577261c66d 100644 --- a/neutron/plugins/ml2/drivers/l2pop/mech_driver.py +++ b/neutron/plugins/ml2/drivers/l2pop/mech_driver.py @@ -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: []}}}