<div dir="ltr">I'm not sure what you mean about it being 'truly committed' even though the transaction has ended. When would it be committed? There are not more calls to sqlalchemy after that. The only way it wouldn't be committed is if another transaction was started before calling create_port.<div>

<br><div>Regardless, a db lock wait exception does not indicate anything about the state of a particular transaction. Transactions do not lock tables on their own. A lock has to be explicitly set with a "with_lockmode('update')" on a query. </div>

</div><div><br></div><div>I think you will probably need to share some sample code with the mailing list demonstrating what you are trying to do. </div><div><br></div><div>--</div><div>Kevin Benton</div></div><div class="gmail_extra">

<br><br><div class="gmail_quote">On Wed, Jun 25, 2014 at 3:21 AM, Li Ma <span dir="ltr"><<a href="mailto:skywalker.nick@gmail.com" target="_blank">skywalker.nick@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Hi Kevin,<br>
<br>
Thanks for your reply. Actually, it is not that straightforward.<br>
Even if postcommit is outside the 'with' statement, the transaction is not 'truly' committed immediately. Because when I put my db code (reading and writing ml2-related tables) in postcommit, db lock wait exception is still thrown.<br>


<span class="HOEnZb"><font color="#888888"><br>
Li Ma<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
----- Original Message -----<br>
From: "Kevin Benton" <<a href="mailto:blak111@gmail.com">blak111@gmail.com</a>><br>
To: "OpenStack Development Mailing List (not for usage questions)" <<a href="mailto:openstack-dev@lists.openstack.org">openstack-dev@lists.openstack.org</a>><br>
Sent: 星期三, 2014年 6 月 25日 下午 4:59:26<br>
Subject: Re: [openstack-dev] [Neutron ML2] Potential DB lock when developing new mechanism driver<br>
<br>
<br>
<br>
The post_commit methods occur outside of the transactions. You should be able to perform the necessary database calls there.<br>
<br>
<br>
If you look at the code snippet in the email you provided, you can see that the 'try' block surrounding the postcommit method is at the same indentation-level as the 'with' statement for the transaction so it will be closed at that point.<br>


<br>
<br>
Cheers,<br>
Kevin Benton<br>
<br>
<br>
--<br>
Kevin Benton<br>
<br>
<br>
<br>
On Tue, Jun 24, 2014 at 8:33 PM, Li Ma < <a href="mailto:skywalker.nick@gmail.com">skywalker.nick@gmail.com</a> > wrote:<br>
<br>
<br>
Hi all,<br>
<br>
I'm developing a new mechanism driver. I'd like to access ml2-related tables in create_port_precommit and create_port_postcommit. However I find it hard to do that because the two functions are both inside an existed database transaction defined in create_port function of ml2/plugin.py.<br>


<br>
The related code is as follows:<br>
<br>
def create_port(self, context, port):<br>
...<br>
session = context.session<br>
with session.begin(subtransactions=True):<br>
...<br>
self.mechanism_manager.create_port_precommit(mech_context)<br>
try:<br>
self.mechanism_manager.create_port_postcommit(mech_context)<br>
...<br>
...<br>
return result<br>
<br>
As a result, I need to carefully deal with the database nested transaction issue to prevent from db lock when I develop my own mechanism driver. Right now, I'm trying to get the idea behind the scene. Is it possible to refactor it in order to make precommit and postcommit out of the db transaction? I think it is perfect for those who develop mechanism driver and do not know well about the functioning context of the whole ML2 plugin.<br>


<br>
Thanks,<br>
Li Ma<br>
<br>
_______________________________________________<br>
OpenStack-dev mailing list<br>
<a href="mailto:OpenStack-dev@lists.openstack.org">OpenStack-dev@lists.openstack.org</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
<br>
<br>
<br>
<br>
--<br>
<br>
Kevin Benton<br>
_______________________________________________<br>
OpenStack-dev mailing list<br>
<a href="mailto:OpenStack-dev@lists.openstack.org">OpenStack-dev@lists.openstack.org</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
<br>
_______________________________________________<br>
OpenStack-dev mailing list<br>
<a href="mailto:OpenStack-dev@lists.openstack.org">OpenStack-dev@lists.openstack.org</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div>Kevin Benton</div>
</div>