Port binding details needed by ML2 mechanism drivers

Bug #1276395 reported by Robert Kukura
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Fix Released
Robert Kukura

Bug Description

ML2 mechanism driver methods such as port_update_precommit() and port_update_postcommit() are currently called by the plugin as part of operations in which port bindings are established and/or torn down. Within these methods, details about the newly established or current binding, such as the binding:vif_type attribute and the bound segment, are available from the PortContext object. Similar details for a binding that is being torn down as part of a port update or delete operation are needed by some mechanism drivers, but are not currently available from the PortContext.

Tags: ml2
Robert Kukura (rkukura)
Changed in neutron:
status: New → In Progress
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix proposed to neutron (master)

Fix proposed to branch: master
Review: https://review.openstack.org/76363

Thierry Carrez (ttx)
Changed in neutron:
milestone: icehouse-3 → icehouse-rc1
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to neutron (master)

Reviewed: https://review.openstack.org/76363
Committed: https://git.openstack.org/cgit/openstack/neutron/commit/?id=d1472deed5bf7b4cec7363e64fd4746cb278fcfb
Submitter: Jenkins
Branch: master

commit d1472deed5bf7b4cec7363e64fd4746cb278fcfb
Author: Bob Kukura <email address hidden>
Date: Mon Feb 24 16:33:26 2014 -0500

    ML2 mechanism driver access to binding details

    The following properties are added to the PortContext object passed to
    ML2 mechanism drivers for port operations:

    * bound_driver - name of current bound driver
    * original_bound_driver - name previously bound driver in an update
    * original_bound_segment - network segment used in previous binding

    Some issues with the existing ML2 port binding unit tests were also

    The remainder of the fix for bug 1276395, making these binding details
    available to mechanism drivers when a port is deleted, will be
    addressed as part of the fix for bug 1276391.

    Partial-Bug: #1276395
    Change-Id: I9ecff4a4e044920ed2dde709c89aeb9bc773220d

Revision history for this message
OpenStack Infra (hudson-openstack) wrote :

Reviewed: https://review.openstack.org/79511
Committed: https://git.openstack.org/cgit/openstack/neutron/commit/?id=a57dc2c30ab78ba74cfc51b8fdb457d3374cc87d
Submitter: Jenkins
Branch: master

commit a57dc2c30ab78ba74cfc51b8fdb457d3374cc87d
Author: Robert Kukura <email address hidden>
Date: Mon Mar 10 15:06:09 2014 -0400

    ML2: Remove validate_port_binding() and unbind_port()

    The API implemented by ML2 mechanism drivers included three methods
    related to port binding that were called within DB transactions, but
    that could potentially involve communication with controllers or
    devices that should not be done within transactions. A subsequent
    patch will move the calls to bind_port() outside of tranactions. This
    patch eliminates the other two methods from the MechanismDriver API.

    The validate_port_binding() method was previously called on the bound
    mechanism driver to check whether an existing binding was still valid,
    so that the port could be rebound if something changed. But since nova
    has no way to handle changes to binding:vif_type or
    binding:vif_details after a port is initially plugged, this turned out
    not to be useful, so the method has been removed from the
    MechanismDriver API. Now, once a port is successfully bound, the
    binding remains until the port is deleted or any of it's
    binding:host_id, binding:vnic_type, or binding:profile attribute
    values are changed.

    The unbind_port() method was previously called on the bound mechanism
    driver as an existing binding was removed. This method was not used by
    any existing mechanism drivers, and was redundant with the
    update_port_precommit() and update_port_postcommit() methods that are
    called on all mechanism drivers when an existing binding is removed,
    so this method has also been removed from the driver API.

    Eliminating the unbind_port() call allows the binding details to be
    made available via the PortContext in delete_port_postcommit() calls,
    completing the resolution of bug 1276395.

    Closes-bug: 1276395
    Partial-bug: 1276391
    Change-Id: I70fb65b478373c4f07f5273baa097fc50e5ba2ef

Changed in neutron:
status: In Progress → Fix Committed
Thierry Carrez (ttx)
Changed in neutron:
status: Fix Committed → Fix Released
Thierry Carrez (ttx)
Changed in neutron:
milestone: icehouse-rc1 → 2014.1
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers