]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Remove l2pop _get_port_infos method
authorAssaf Muller <amuller@redhat.com>
Mon, 4 Jan 2016 22:49:09 +0000 (17:49 -0500)
committerAssaf Muller <amuller@redhat.com>
Wed, 6 Jan 2016 13:17:36 +0000 (13:17 +0000)
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

neutron/plugins/ml2/drivers/l2pop/mech_driver.py

index 4df03ed9cddc71d70bcde6a2e8096a1616b95a44..c577261c66dfe7f36f5e2839c4f90dccfd2e9ba9 100644 (file)
@@ -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: []}}}