<div dir="ltr">Hi!<div><br></div><div>The refactoring of transactions management in Nailgun is critically required for scaling.</div><div><br></div><div>First of all I propose to wrap HTTP handlers by begin/commit/rollback decorator.</div><div>After that we should introduce transactions wrapping decorator into Task execute/message calls.</div><div>And the last one is the wrapping of receiver calls.</div><div><br></div><div>As result we should have begin/commit/rollback calls only in transactions decorator.</div><div><br></div><div>Also I propose to separate working with DB objects into separate lair and use only high level Nailgun objects in the code and tests. This work was started long time ago, but not finished yet.</div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Apr 30, 2015 at 12:36 PM, Roman Prykhodchenko <span dir="ltr"><<a href="mailto:me@romcheg.me" target="_blank">me@romcheg.me</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi folks!<br>
<br>
Recently I faced a pretty sad fact that in Nailgun there’s no common approach to manage transactions. There are commits and flushes in random places of the code and it used to work somehow just because it was all synchronous.<br>
<br>
However, after just a few of the subcomponents have been moved to different processes, it all started producing races and deadlocks which are really hard to resolve because there is absolutely no way to predict how a specific transaction is managed but by analyzing the source code. That is rather an ineffective and error-prone approach that has to be fixed before it became uncontrollable.<br>
<br>
Let’s arrange a discussions to design a document which will describe where and how transactions are managed and refactor Nailgun according to it in 7.0. Otherwise results may be sad.<br>
<br>
<br>
- romcheg<br>
<br>
<br>__________________________________________________________________________<br>
OpenStack Development Mailing List (not for usage questions)<br>
Unsubscribe: <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" target="_blank">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</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></blockquote></div><br></div></div>