Comment 21 for bug 1312016

Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to neutron (stable/kilo)

Reviewed: https://review.openstack.org/296803
Committed: https://git.openstack.org/cgit/openstack/neutron/commit/?id=a8b300ac6d489b91c77fcea12564b9d2d20c933d
Submitter: Jenkins
Branch: stable/kilo

commit a8b300ac6d489b91c77fcea12564b9d2d20c933d
Author: Andreas Scheuring <email address hidden>
Date: Wed Nov 11 14:03:08 2015 +0100

    lb: avoid doing nova VIF work plumbing tap to qbr

    neutron should rely on nova doing the job instead of trying to 'fix' it.
    'Fixing' it introduces race conditions between lb agent and nova VIF
    driver. Particularly, lb agent can scan for new tap devices in the
    middle of nova plumbing qbr-tap setup, and attempt to do it on its own.
    So if agent is more lucky to plug the tap device into the bridge, nova
    may fail to do the same, getting the following error:

    libvirtError: Unable to add bridge brqxxx-xx port tapxxx-xx: Device or
    resource busy

    This also requires a change in how the port admin_state_up is implemented
    by setting the tap device's link state instead of moving it in or out
    of the bridge.

    Conflicts:
     neutron/common/constants.py
     neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py
     neutron/tests/unit/plugins/ml2/drivers/linuxbridge/agent/test_linuxbridge_neutron_agent.py

    Co-Authored-By: Sean M. Collins <email address hidden>
    Co-Authored-By: Darragh O'Reilly <email address hidden>
    Co-Authored-By: Andreas Scheuring <email address hidden>
    Closes-Bug: #1312016
    (cherry picked from commit f42ea67995537c7fe3e36447489872b0dcb82dd9)
    (cherry picked from commit eb61b837f70906aea07e4fd2290afa24f1341da8)

    ===

    Also squashed the following follow up fix:

    lb: Correct String formatting to get rid of logged ValueError

    The following error is caused by a missing String formatting in the
    linuxbridge agent:
    "ValueError: unsupported format character 'a' (0x61) at index 90
    Logged from file linuxbridge_neutron_agent.py, line 447"

    In addition a duplicated word in the log text has been fixed.

    Change-Id: I587f1165fc7084dc9c4806149b65652f6e27b14e
    (cherry picked from commit 1f86d8687b2781f0c287ee656f3cbc65aaa4b5e4)

    ===

    Also squashed in:

    Only ensure admin state on ports that exist

    The linux bridge agent was calling ensure_port_admin state
    unconditionally on ports in treat_devices_added_or_updated.
    This would cause it to throw an error on interfaces that
    didn't exist so it would restart the entire processing loop.

    If another port was being updated in the same loop before this
    one, that port would experience a port status life-cycle of
    DOWN->BUILD->ACTIVE->BUILD->ACTIVE
                       ^ <--- Exception in unrelated port causes cycle
                              to start over again.

    This causes the bug below because the first active transition will
    cause Nova to boot the VM. At this point tempest tests expect the
    ports that belong to the VM to be in the ACTIVE state so it filters
    Neutron port list calls with "status=ACTIVE". Therefore tempest would
    not get any ports back and assume there was some kind of error with
    the port and bail.

    This patch just makes sure the admin state call is skipped if the port
    doesn't exist and it includes a basic unit test to prevent a regression.

    Conflicts:
     neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py

    Closes-Bug: #1523638
    Change-Id: I5330c6111cbb20bf45aec9ade7e30d34e8dd16ca
    (cherry picked from commit 96c67e22f9cba2ea0e7fb3ba2a63e4905e48c1a4)

    Change-Id: I02971103407b4ec11a65218e9ef7e2708915d938