[openstack-dev] [neutron] Reading an updated port's fixed IPs in mech driver update_port_postcommit

Neil Jerram Neil.Jerram at metaswitch.com
Fri Jul 10 10:49:28 UTC 2015


Sorry to leave this unanswered.

It happens every time (as far as we've tested so far).

A pragmatic fix appears to be to explicitly requery the IPAllocation 
table, as you can see in the two commits here:
https://github.com/Metaswitch/calico/commit/5512ce7dd50db414f161bddcef17b0846a1466ac
https://github.com/Metaswitch/calico/commit/4ecaf3568af52ef9cc29662a3b94672540056f05

But still it seems a shame if this is needed.

	Neil


On 07/07/15 22:32, Kevin Benton wrote:
> How often does this happen? Is it on every call? If not, is it possible
> the forking logic in require_state is messing up the DB handle when it's
> invoked?
>
> One way to make sure there aren't open transactions for testing is to
> just remove the "subtransactions=True" statement from update_port in the
> ML2 plugin.
>
> On Jul 7, 2015 8:33 AM, "Neil Jerram" <Neil.Jerram at metaswitch.com
> <mailto:Neil.Jerram at metaswitch.com>> wrote:
>
>     Thanks, Kevin, but I believe we're already doing what you advise;
>     please see
>     https://github.com/Metaswitch/calico/blob/master/calico/openstack/mech_calico.py#L346-348
>
>     Is there a way of checking that there aren't still any open
>     transactions, when update_port_postcommit is called?
>
>     Thanks,
>              Neil
>
>
>     On 07/07/15 15:57, Kevin Benton wrote:
>
>         It sounds like something is starting a transaction before calling
>         update_port on the core plugin. This will prevent the
>         transaction from
>         being completely closed even though ML2 is in the post_commit phase.
>
>         In your db.get_port call, make sure you are using the same DB
>         session
>         from the context that was passed into update_port_postcommit and
>         that
>         will make sure you always have access to the current state even
>         if the
>         transaction isn't closed.
>
>         On Tue, Jul 7, 2015 at 5:35 AM, Neil Jerram
>         <Neil.Jerram at metaswitch.com <mailto:Neil.Jerram at metaswitch.com>
>         <mailto:Neil.Jerram at metaswitch.com
>         <mailto:Neil.Jerram at metaswitch.com>>> wrote:
>
>              I think there's something I'm not understanding about how
>         Neutron's
>              DB tables are related, and when one can safely read
>              believed-to-be-committed information from them...
>
>              My project's mechanism driver is handling a port update in
>         which the
>              fixed IPs are changing; specifically, a second fixed IP has
>         been
>              added to the port.  It does this (for a reason I can explain if
>              needed) by calling db.get_port(), in the
>         update_port_postcommit hook.
>
>              But we observe that the result of db.get_port() does not
>         include the
>              new fixed IP.  Even though we're in the postcommit hook,
>         and hence
>              we assume that all the changes for that port have by now
>         been committed.
>
>              What are we misunderstanding here?  My guess is that this is
>              something to do with 'fixed_ips' not being a column
>         directly in the
>              Ports table, but instead calculated from relationships
>         between the
>              port ID and another (IPAllocation) table.  We've seen a similar
>              problem in the past with binding:host_id, for which the same is
>              true, i.e. info is in the separate portbindings table.
>
>              Or could it be that the transaction hasn't really been
>         closed yet,
>              when update_port_postcommit hook is called?
>
>              (This is with Icehouse-level code, so it could be something
>         that's
>              been fixed...)
>
>              Many thanks,
>                       Neil
>
>
>         __________________________________________________________________________
>              OpenStack Development Mailing List (not for usage questions)
>              Unsubscribe:
>         OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
>         <http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe>
>
>         <http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe>
>         http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>
>
>
>
>         --
>         Kevin Benton
>
>
>         __________________________________________________________________________
>         OpenStack Development Mailing List (not for usage questions)
>         Unsubscribe:
>         OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
>         <http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe>
>         http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>
>
>     __________________________________________________________________________
>     OpenStack Development Mailing List (not for usage questions)
>     Unsubscribe:
>     OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
>     <http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe>
>     http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>
>
>
> __________________________________________________________________________
> OpenStack Development Mailing List (not for usage questions)
> Unsubscribe: OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>



More information about the OpenStack-dev mailing list