<div dir="ltr">Hi Joe,<div><br></div><div>I think one independent job is finished in one session. The job is responsible to start  a session, query or modify database then end the session. Like port creating job in neutron, it starts a session, queries network, adds port, allocates ip address, then ends the session at the end.</div><div><br></div><div>BR</div><div>Zhiyuan</div></div><div class="gmail_extra"><br><div class="gmail_quote">On 31 July 2015 at 09:05, joehuang <span dir="ltr"><<a href="mailto:joehuang@huawei.com" target="_blank">joehuang@huawei.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div lang="ZH-CN" link="blue" vlink="purple">
<div>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.5pt;font-family:"Calibri","sans-serif";color:#1f497d">Hi, Vega,<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.5pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.5pt;font-family:"Calibri","sans-serif";color:#1f497d">Multiple DB access will be a use case for one session , especially for DB data insertion, multiple table will be involved. To embed the session
 in Context, it’s ok to start a session if the session is empty, but how to decide when to commit the data, end a session?
<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.5pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal" style="text-align:justify;text-justify:inter-ideograph"><span lang="EN-US" style="font-size:10.5pt;font-family:"Calibri","sans-serif";color:#1f497d">Best Regards<u></u><u></u></span></p>
<p class="MsoNormal" style="text-align:justify;text-justify:inter-ideograph"><span lang="EN-US" style="font-size:10.5pt;font-family:"Calibri","sans-serif";color:#1f497d">Chaoyi Huang ( Joe Huang )</span><span lang="EN-US" style="font-size:10.5pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.5pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Vega Cai [mailto:<a href="mailto:luckyvega.g@gmail.com" target="_blank">luckyvega.g@gmail.com</a>]
<br>
<b>Sent:</b> Thursday, July 30, 2015 3:03 PM<br>
<b>To:</b> <a href="mailto:openstack-dev@lists.openstack.org" target="_blank">openstack-dev@lists.openstack.org</a><br>
<b>Subject:</b> [openstack-dev] [tricircle] DAL implementation<u></u><u></u></span></p>
</div><div><div class="h5">
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<div>
<div>
<p class="MsoNormal"><span lang="EN-US">Hi folks,<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US">In my current implementation, there are a core module and a models module. Core module handles all the database stuff, start a session, issue sql operation, then end a session. Models module invokes methods in core module
 to access database, as showed below:<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US">model.py<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US">def get_site(site_id):<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US">    core.get_resource(Site, site_id)<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US">core.py<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US">def get_resource(model, pk_value):<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US">    # code to access database<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US">To add context, I am going to implement like this:<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US">model.py<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US">def get_site(context, site_id):<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US">    policy_check(context)<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US">    core.get_resource(Site, site_id)<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US">core.py<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US">def get_resource(model, pk_value):<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US">    # code to access database<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US">So there is no need to embed session into context.<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US">One advantage of embedding session into context is that you can combine more than one method calls in one session, like:<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US">model.py<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US">def complex_operation(context):<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US">    policy_check(context)<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US">    with context.session.begin():<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US">        core.operation1(context)<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US">        core.operation2(context)<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US">But this approach moves session handling from core module to models module and core module just provides some utility methods.<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US">I'm not sure which one is better.<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US">BR<u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><span lang="EN-US">Zhiyuan<u></u><u></u></span></p>
</div>
</div>
</div></div></div>
</div>

<br>__________________________________________________________________________<br>
OpenStack Development Mailing List (not for usage questions)<br>
Unsubscribe: <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
<br></blockquote></div><br></div>