Hi Quantum folks<div><br></div><div>This bp for nova looks like solve the quantum one also.</div><div><a href="https://blueprints.launchpad.net/nova/+spec/non-blocking-db">https://blueprints.launchpad.net/nova/+spec/non-blocking-db</a><br>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">2012/12/3 Nachi Ueno <span dir="ltr"><<a href="mailto:nachi@nttmcl.com" target="_blank">nachi@nttmcl.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div style="font-family:arial,sans-serif;font-size:13.63636302947998px">Hi Quantum folks</div><div style="font-family:arial,sans-serif;font-size:13.63636302947998px"><br></div><div style="font-family:arial,sans-serif;font-size:13.63636302947998px">

I faced the problem with mysql transaction and eventlet.</div><div style="font-family:arial,sans-serif;font-size:13.63636302947998px"><br></div><div style="font-family:arial,sans-serif;font-size:13.63636302947998px">Quantum using transaction support of sqlalchemy</div>

<div style="font-family:arial,sans-serif;font-size:13.63636302947998px">Quantum also using eventlet for RPC</div><div style="font-family:arial,sans-serif;font-size:13.63636302947998px"><br></div><div style="font-family:arial,sans-serif;font-size:13.63636302947998px">

Let's say there are api request A and B.</div><div style="font-family:arial,sans-serif;font-size:13.63636302947998px">Sql request of A will lock B's sql request. </div><div style="font-family:arial,sans-serif;font-size:13.63636302947998px">

so B's sql request will wait the A's transaction.</div><div style="font-family:arial,sans-serif;font-size:13.63636302947998px"><br></div><div style="font-family:arial,sans-serif;font-size:13.63636302947998px">On the other hand, we are using evenetlet.</div>

<div style="font-family:arial,sans-serif;font-size:13.63636302947998px">Since we are using mysql c client, the API request may block eventlet </div><div style="font-family:arial,sans-serif;font-size:13.63636302947998px">
thread.</div>
<div style="font-family:arial,sans-serif;font-size:13.63636302947998px"><br></div><div style="font-family:arial,sans-serif;font-size:13.63636302947998px">so when B start wait sql lock, it blocks all eventlet thread including api request A until lock timeout.</div>

<div style="font-family:arial,sans-serif;font-size:13.63636302947998px"><br></div><div style="font-family:arial,sans-serif;font-size:13.63636302947998px">I asked Jay about the this problem, and he said Nova solve this problem by this way.</div>

<div style="font-family:arial,sans-serif;font-size:13.63636302947998px"><a href="https://github.com/openstack/nova/blob/master/nova/db/sqlalchemy/api.py#L2610" target="_blank">https://github.com/openstack/nova/blob/master/nova/db/sqlalchemy/api.py#L2610</a></div>

<div style="font-family:arial,sans-serif;font-size:13.63636302947998px"><br></div><div style="font-family:arial,sans-serif;font-size:13.63636302947998px">The strategy is to get lock just after the transaction started using. ( I'm not sure we can use same strategy in the quantum. )</div>

<div style="font-family:arial,sans-serif;font-size:13.63636302947998px"><br></div><div style="font-family:arial,sans-serif;font-size:13.63636302947998px">Anyway,  It looks big change needed for me.</div>
</blockquote></div><br></div>