]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Nicira plugin: always fetch lports from correct lswitch
authorSalvatore <salv.orlando@gmail.com>
Fri, 7 Jun 2013 15:08:47 +0000 (17:08 +0200)
committerSalvatore <salv.orlando@gmail.com>
Fri, 7 Jun 2013 15:08:47 +0000 (17:08 +0200)
Bug 1188652

Remove get_logical_port_status which required a lswitch uuid, and
replace it with a call to query_lswitch_ports, which does not
require it.

Change-Id: I6c7d0403f37b2c9fb4332a8d34dcaa9050ced3fc

quantum/plugins/nicira/QuantumPlugin.py
quantum/plugins/nicira/nvplib.py
quantum/tests/unit/nicira/etc/fake_get_lswitch_lport.json

index 8787e1d65c1e9b6584b2d0291df6a99fd779ab1a..9631f424f9a17e1ac528a124f9c536f2d052239c 100644 (file)
@@ -1361,19 +1361,28 @@ class NvpPluginV2(db_base_plugin_v2.QuantumDbPluginV2,
             # If there's no nvp IP do not bother going to NVP and put
             # the port in error state
             if nvp_id:
-                try:
-                    port = nvplib.get_logical_port_status(
-                        self.cluster, quantum_db_port['network_id'],
-                        nvp_id)
-                    quantum_db_port["admin_state_up"] = (
-                        port["admin_status_enabled"])
-                    if port["fabric_status_up"]:
-                        quantum_db_port["status"] = (
-                            constants.PORT_STATUS_ACTIVE)
+                    # Find the NVP port corresponding to quantum port_id
+                    # Do not query by nvp id as the port might be on
+                    # an extended switch and we do not store the extended
+                    # swiwtch uuid
+                    results = nvplib.query_lswitch_lports(
+                        self.cluster, '*',
+                        relations='LogicalPortStatus',
+                        filters={'tag': id, 'tag_scope': 'q_port_id'})
+                    if results:
+                        port = results[0]
+                        port_status = port["_relations"]["LogicalPortStatus"]
+                        quantum_db_port["admin_state_up"] = (
+                            port["admin_status_enabled"])
+                        if port_status["fabric_status_up"]:
+                            quantum_db_port["status"] = (
+                                constants.PORT_STATUS_ACTIVE)
+                        else:
+                            quantum_db_port["status"] = (
+                                constants.PORT_STATUS_DOWN)
                     else:
-                        quantum_db_port["status"] = constants.PORT_STATUS_DOWN
-                except q_exc.NotFound:
-                    quantum_db_port["status"] = constants.PORT_STATUS_ERROR
+                        quantum_db_port["status"] = (
+                            constants.PORT_STATUS_ERROR)
             else:
                 quantum_db_port["status"] = constants.PORT_STATUS_ERROR
         return quantum_db_port
index e6f6ff0d6f43417298aee1e378c2c6cb48a82264..a4a0cf3e91a3423e4e6798c97ef5afb61673546f 100644 (file)
@@ -651,23 +651,6 @@ def delete_port(cluster, switch, port):
         raise exception.QuantumException()
 
 
-def get_logical_port_status(cluster, switch, port):
-    query = ("/ws.v1/lswitch/" + switch + "/lport/"
-             + port + "?relations=LogicalPortStatus")
-    try:
-        res_obj = do_single_request(HTTP_GET, query, cluster=cluster)
-    except NvpApiClient.ResourceNotFound as e:
-        LOG.error(_("Port or Network not found, Error: %s"), str(e))
-        raise exception.PortNotFound(port_id=port, net_id=switch)
-    except NvpApiClient.NvpApiException as e:
-        raise exception.QuantumException()
-    res = json.loads(res_obj)
-    # copy over admin_status_enabled
-    res["_relations"]["LogicalPortStatus"]["admin_status_enabled"] = (
-        res["admin_status_enabled"])
-    return res["_relations"]["LogicalPortStatus"]
-
-
 def get_port_by_display_name(clusters, lswitch, display_name):
     """Return (url, cluster_id) of port or raises PortNotFound."""
     query = ("/ws.v1/lswitch/%s/lport?display_name=%s&fields=*" %
index f9c29c3ff083e2cd43c54ea538eff52b218ad124..16b78dd87987d278cf35c6e24e4c004e1c941e3b 100644 (file)
@@ -2,6 +2,7 @@
    "_relations":
    {"LogicalPortStatus":
       {"type": "LogicalSwitchPortStatus",
+       "admin_status_enabled": true,
        "fabric_status_up": false,
        "_href": "/ws.v1/lswitch/%(ls_uuid)s/lport/%(uuid)s/status",
        "_schema": "/ws.v1/schema/LogicalSwitchPortStatus"}