<html><body>
<p><font size="2" face="sans-serif">see underlined code below. it is invoked by sending http request and get result from response.<br>
</font><br>
<br>
<img width="16" height="16" src="cid:1__=C7BBF160DFA119A68f9e8a93df938@cn.ibm.com" border="0" alt="Inactive hide details for pragya jain ---2013-09-27 下午 04:10:21---pragya jain <prag_2648@yahoo.co.in>"><font size="2" color="#424282" face="sans-serif">pragya jain ---2013-09-27 下午 04:10:21---pragya jain <prag_2648@yahoo.co.in></font><br>
<br>

<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr valign="top"><td style="background-image:url(cid:2__=C7BBF160DFA119A68f9e8a93df938@cn.ibm.com); background-repeat: no-repeat; " width="40%">
<ul style="padding-left: 72pt"><font size="1" face="sans-serif"><b>pragya jain <prag_2648@yahoo.co.in></b></font><font size="1" face="sans-serif"> </font>
<p><font size="1" face="sans-serif">2013-09-27 下午 04:11</font>
<table border="1">
<tr valign="top"><td width="168" bgcolor="#FFFFFF"><div align="center"><font size="1" face="sans-serif">Please respond to<br>
pragya jain <prag_2648@yahoo.co.in></font></div></td></tr>
</table>
</ul>
</td><td width="60%">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr valign="top"><td width="1%"><img width="58" height="1" src="cid:3__=C7BBF160DFA119A68f9e8a93df938@cn.ibm.com" border="0" alt=""><br>
<div align="right"><font size="1" face="sans-serif">To</font></div></td><td width="100%"><img width="1" height="1" src="cid:3__=C7BBF160DFA119A68f9e8a93df938@cn.ibm.com" border="0" alt=""><br>

<ul style="padding-left: 7pt"><font size="1" face="sans-serif">Hua ZZ Zhang/China/IBM@IBMCN, </font></ul>
</td></tr>

<tr valign="top"><td width="1%"><img width="58" height="1" src="cid:3__=C7BBF160DFA119A68f9e8a93df938@cn.ibm.com" border="0" alt=""><br>
<div align="right"><font size="1" face="sans-serif">cc</font></div></td><td width="100%"><img width="1" height="1" src="cid:3__=C7BBF160DFA119A68f9e8a93df938@cn.ibm.com" border="0" alt=""><br>

<ul style="padding-left: 7pt"><font size="1" face="sans-serif">"openstack@lists.openstack.org" <openstack@lists.openstack.org></font></ul>
</td></tr>

<tr valign="top"><td width="1%"><img width="58" height="1" src="cid:3__=C7BBF160DFA119A68f9e8a93df938@cn.ibm.com" border="0" alt=""><br>
<div align="right"><font size="1" face="sans-serif">Subject</font></div></td><td width="100%"><img width="1" height="1" src="cid:3__=C7BBF160DFA119A68f9e8a93df938@cn.ibm.com" border="0" alt=""><br>

<ul style="padding-left: 7pt"><font size="1" face="sans-serif">Re: [Openstack] Fw: problem in understanding interaction between swift proxy and other servers through swift source code</font></ul>
</td></tr>
</table>

<table border="0" cellspacing="0" cellpadding="0">
<tr valign="top"><td width="58"><img width="1" height="1" src="cid:3__=C7BBF160DFA119A68f9e8a93df938@cn.ibm.com" border="0" alt=""></td><td width="336"><img width="1" height="1" src="cid:3__=C7BBF160DFA119A68f9e8a93df938@cn.ibm.com" border="0" alt=""></td></tr>
</table>
</td></tr>
</table>
<br>
<font size="1" color="#333333" face="Consolas"><b>But, Sir, At which line of code in the func </b></font><br>
<tt><font size="1" color="#0000FF"><i>def</i></font></tt><tt><font size="1"><i> _make_request(self, nodes, part, method, path, headers, query,</i></font></tt><br>
<tt><font size="2"><i>                      logger_thread_locals): </i></font></tt><br>
<tt><font size="2"><i>flow of control move to the AccoountController class defined in swift/account/server.py (for example)</i></font></tt><br>
<br>
<font size="1" color="#333333" face="Consolas"><b>def</b></font><font size="1" color="#333333" face="Consolas"> </font><font size="1" color="#990000" face="Consolas"><b>_make_request</b></font><font size="1" color="#333333" face="Consolas">(</font><font size="1" color="#999999" face="Consolas">self</font><font size="1" color="#333333" face="Consolas">, nodes, part, method, path, headers, query,</font><br>
<font size="1" color="#333333" face="Consolas">                      logger_thread_locals):</font><br>
<font size="1" color="#333333" face="Consolas">        </font><font size="1" color="#DD1144" face="Consolas">"""</font><br>
<font size="1" color="#DD1144" face="Consolas">        Sends an HTTP request to a single node and<br>
 aggregates the result.</font><br>
<font size="1" color="#DD1144" face="Consolas">        It attempts the primary node, then iterates over the handoff nodes</font><br>
<font size="1" color="#DD1144" face="Consolas">        as needed.</font><br>
<br>
<font size="1" color="#DD1144" face="Consolas">        :param nodes: an iterator of the backend server and handoff servers</font><br>
<font size="1" color="#DD1144" face="Consolas">        :param part: the partition number</font><br>
<font size="1" color="#DD1144" face="Consolas">        :param method: the method to send to the<br>
 backend</font><br>
<font size="1" color="#DD1144" face="Consolas">        :param path: the path to send to the backend</font><br>
<font size="1" color="#DD1144" face="Consolas">        :param headers: a list of dicts, where each dict represents one</font><br>
<font size="1" color="#DD1144" face="Consolas">                        backend request that should be made.</font><br>
<font size="1" color="#DD1144" face="Consolas">        :param query: query string to send to the backend.</font><br>
<font size="1" color="#DD1144" face="Consolas">        :param logger_thread_locals: The thread local values to be set on the</font><br>
<font size="1" color="#DD1144" face="Consolas">                                     self.app.logger to retain transaction</font><br>
<font size="1" color="#DD1144" face="Consolas">                                     logging information.</font><br>
<font size="1" color="#DD1144" face="Consolas">        :returns: a swob.Response object</font><br>
<font size="1" color="#DD1144" face="Consolas">        """</font><br>
<font size="1" color="#333333" face="Consolas">        </font><font size="1" color="#999999" face="Consolas">self</font><font size="1" color="#333333" face="Consolas"><b>.</b></font><font size="1" color="#333333" face="Consolas">app</font><font size="1" color="#333333" face="Consolas"><b>.</b></font><font size="1" color="#333333" face="Consolas">logger</font><font size="1" color="#333333" face="Consolas"><b>.</b></font><font size="1" color="#333333" face="Consolas">thread_locals </font><font size="1" color="#333333" face="Consolas"><b>=</b></font><font size="1" color="#333333" face="Consolas"> logger_thread_locals</font><br>
<font size="1" color="#333333" face="Consolas">        </font><font size="1" color="#333333" face="Consolas"><b>for</b></font><font size="1" color="#333333" face="Consolas"> node </font><font size="1" color="#333333" face="Consolas"><b>in</b></font><font size="1" color="#333333" face="Consolas"> nodes:</font><br>
<font size="1" color="#333333" face="Consolas">            </font><font size="1" color="#333333" face="Consolas"><b>try</b></font><font size="1" color="#333333" face="Consolas">:</font><br>
<font size="1" color="#333333" face="Consolas">                start_node_timing </font><font size="1" color="#333333" face="Consolas"><b>=</b></font><font size="1" color="#333333" face="Consolas"> time</font><font size="1" color="#333333" face="Consolas"><b>.</b></font><font size="1" color="#333333" face="Consolas">time()</font><br>
<font size="1" color="#333333" face="Consolas">                </font><font size="1" color="#333333" face="Consolas"><b>with</b></font><font size="1" color="#333333" face="Consolas"> ConnectionTimeout(</font><font size="1" color="#999999" face="Consolas">self</font><font size="1" color="#333333" face="Consolas"><b>.</b></font><font size="1" color="#333333" face="Consolas">app</font><font size="1" color="#333333" face="Consolas"><b>.</b></font><font size="1" color="#333333" face="Consolas">conn_timeout):</font><br>
<font size="1" color="#333333" face="Consolas">                   </font><font size="1" color="#333333" face="Consolas"><u> conn </u></font><font size="1" color="#333333" face="Consolas"><b><u>=</u></b></font><font size="1" color="#333333" face="Consolas"><u> http_connect(node[</u></font><font size="1" color="#DD1144" face="Consolas"><u>'ip'</u></font><font size="1" color="#333333" face="Consolas"><u>], node[</u></font><font size="1" color="#DD1144" face="Consolas"><u>'port'</u></font><font size="1" color="#333333" face="Consolas"><u>],</u></font><br>
<font size="1" color="#333333" face="Consolas"><u>                                        node[</u></font><font size="1" color="#DD1144" face="Consolas"><u>'device'</u></font><font size="1" color="#333333" face="Consolas"><u>], part, method, path,</u></font><br>
<font size="1" color="#333333" face="Consolas"><u>                                        headers</u></font><font size="1" color="#333333" face="Consolas"><b><u>=</u></b></font><font size="1" color="#333333" face="Consolas"><u>headers, query_string</u></font><font size="1" color="#333333" face="Consolas"><b><u>=</u></b></font><font size="1" color="#333333" face="Consolas"><u>query)</u></font><br>
<font size="1" color="#333333" face="Consolas">                    conn</font><font size="1" color="#333333" face="Consolas"><b>.</b></font><font size="1" color="#333333" face="Consolas">node </font><font size="1" color="#333333" face="Consolas"><b>=</b></font><font size="1" color="#333333" face="Consolas"> node</font><br>
<font size="1" color="#333333" face="Consolas">                </font><font size="1" color="#999999" face="Consolas">self</font><font size="1" color="#333333" face="Consolas"><b>.</b></font><font size="1" color="#333333" face="Consolas">app</font><font size="1" color="#333333" face="Consolas"><b>.</b></font><font size="1" color="#333333" face="Consolas">set_node_timing(node, time</font><font size="1" color="#333333" face="Consolas"><b>.</b></font><font size="1" color="#333333" face="Consolas">time() </font><font size="1" color="#333333" face="Consolas"><b>-</b></font><font size="1" color="#333333" face="Consolas"> start_node_timing)</font><br>
<font size="1" color="#333333" face="Consolas">                </font><font size="1" color="#333333" face="Consolas"><b>with</b></font><font size="1" color="#333333" face="Consolas"> Timeout(</font><font size="1" color="#999999" face="Consolas">self</font><font size="1" color="#333333" face="Consolas"><b>.</b></font><font size="1" color="#333333" face="Consolas">app</font><font size="1" color="#333333" face="Consolas"><b>.</b></font><font size="1" color="#333333" face="Consolas">node_timeout):</font><br>
<font size="1" color="#333333" face="Consolas">                   </font><font size="1" color="#333333" face="Consolas"><u> resp </u></font><font size="1" color="#333333" face="Consolas"><b><u>=</u></b></font><font size="1" color="#333333" face="Consolas"><u> conn</u></font><font size="1" color="#333333" face="Consolas"><b><u>.</u></b></font><font size="1" color="#333333" face="Consolas"><u>getresponse()</u></font><br>
<font size="1" color="#333333" face="Consolas">                    </font><font size="1" color="#333333" face="Consolas"><b>if</b></font><font size="1" color="#333333" face="Consolas"> </font><font size="1" color="#333333" face="Consolas"><b>not</b></font><font size="1" color="#333333" face="Consolas"> is_informational(resp</font><font size="1" color="#333333" face="Consolas"><b>.</b></font><font size="1" color="#333333" face="Consolas">status) </font><font size="1" color="#333333" face="Consolas"><b>and</b></font><font size="1" color="#333333" face="Consolas"> \</font><br>
<font size="1" color="#333333" face="Consolas">                            </font><font size="1" color="#333333" face="Consolas"><b>not</b></font><font size="1" color="#333333" face="Consolas"> is_server_error(resp</font><font size="1" color="#333333" face="Consolas"><b>.</b></font><font size="1" color="#333333" face="Consolas">status):</font><br>
<font size="1" color="#333333" face="Consolas">                        </font><font size="1" color="#333333" face="Consolas"><b>return</b></font><font size="1" color="#333333" face="Consolas"> resp</font><font size="1" color="#333333" face="Consolas"><b>.</b></font><font size="1" color="#333333" face="Consolas">status, resp</font><font size="1" color="#333333" face="Consolas"><b>.</b></font><font size="1" color="#333333" face="Consolas">reason, resp</font><font size="1" color="#333333" face="Consolas"><b>.</b></font><font size="1" color="#333333" face="Consolas">getheaders(), \</font><br>
<font size="1" color="#333333" face="Consolas">                            resp</font><font size="1" color="#333333" face="Consolas"><b>.</b></font><font size="1" color="#333333" face="Consolas">read()</font><br>
<font size="1" color="#333333" face="Consolas">                    </font><font size="1" color="#333333" face="Consolas"><b>elif</b></font><font size="1" color="#333333" face="Consolas"> resp</font><font size="1" color="#333333" face="Consolas"><b>.</b></font><font size="1" color="#333333" face="Consolas">status </font><font size="1" color="#333333" face="Consolas"><b>==</b></font><font size="1" color="#333333" face="Consolas"> HTTP_INSUFFICIENT_STORAGE:</font><br>
<font size="1" color="#333333" face="Consolas">                        </font><font size="1" color="#999999" face="Consolas">self</font><font size="1" color="#333333" face="Consolas"><b>.</b></font><font size="1" color="#333333" face="Consolas">error_limit(node, _(</font><font size="1" color="#DD1144" face="Consolas">'ERROR Insufficient Storage'</font><font size="1" color="#333333" face="Consolas">))</font><br>
<font size="1" color="#333333" face="Consolas">            </font><font size="1" color="#333333" face="Consolas"><b>except</b></font><font size="1" color="#333333" face="Consolas"> (</font><font size="1" color="#990000" face="Consolas"><b>Exception</b></font><font size="1" color="#333333" face="Consolas">, Timeout):</font><br>
<font size="1" color="#333333" face="Consolas">                </font><font size="1" color="#999999" face="Consolas">self</font><font size="1" color="#333333" face="Consolas"><b>.</b></font><font size="1" color="#333333" face="Consolas">exception_occurred(node, </font><font size="1" color="#999999" face="Consolas">self</font><font size="1" color="#333333" face="Consolas"><b>.</b></font><font size="1" color="#333333" face="Consolas">server_type,</font><br>
<font size="1" color="#333333" face="Consolas">                                        _(</font><font size="1" color="#DD1144" face="Consolas">'Trying to %(method)s %(path)s'</font><font size="1" color="#333333" face="Consolas">) </font><font size="1" color="#333333" face="Consolas"><b>%</b></font><br>
<font size="1" color="#333333" face="Consolas">                                        {</font><font size="1" color="#DD1144" face="Consolas">'method'</font><font size="1" color="#333333" face="Consolas">: method, </font><font size="1" color="#DD1144" face="Consolas">'path'</font><font size="1" color="#333333" face="Consolas">: path})</font><br>
<br>
<tt><font size="2"><i>---</i></font></tt><br>
<br>
<tt><font size="2"><i>Thank you very much </i></font></tt><br>
<br>
<tt><font size="2"><i>Pragya Jain</i></font></tt>
<ul style="padding-left: 3pt"><hr width="100%" size="2" align="left"><font size="2" face="Arial"><b>From:</b></font><font size="2" face="Arial"> Hua ZZ Zhang <zhuadl@cn.ibm.com></font><font size="2" face="Arial"><b><br>
To:</b></font><font size="2" face="Arial"> pragya jain <prag_2648@yahoo.co.in> </font><font size="2" face="Arial"><b><br>
Cc:</b></font><font size="2" face="Arial"> "openstack@lists.openstack.org" <openstack@lists.openstack.org> </font><font size="2" face="Arial"><b><br>
Sent:</b></font><font size="2" face="Arial"> Friday, 27 September 2013 1:12 PM</font><font size="2" face="Arial"><b><br>
Subject:</b></font><font size="2" face="Arial"> Re: [Openstack] Fw: problem in understanding interaction between swift proxy and other servers through swift source code</font><br>
<br>
<font size="2" face="serif"><b>in swift/proxy/controllers/base.py</b></font><font size="3" face="Times New Roman"><br>
</font><font size="2" face="serif"><i><br>
def make_requests(self, req, ring, part, method, path, headers,<br>
                      query_string=''):</i></font><font size="3" face="Times New Roman"><br>
</font><tt><font size="2" color="#0000FF"><i><br>
def</i></font></tt><tt><font size="2"><i> _make_request(self, nodes, part, method, path, headers, query,<br>
                      logger_thread_locals):</i></font></tt><font size="3" face="Times New Roman"><br>
<br>
<br>
</font><img src="cid:1__=C7BBF160DFA119A68f9e8a93df938@cn.ibm.com" width="16" height="16" alt="Inactive hide details for pragya jain ---2013-09-27 下午 02:55:44---pragya jain <prag_2648@yahoo.co.in>"><font size="2" color="#424282" face="sans-serif">pragya jain ---2013-09-27 下午 02:55:44---pragya jain <prag_2648@yahoo.co.in></font><font size="3" face="Times New Roman"><br>
</font>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr valign="top"><td width="1%"><img width="1" height="1" src="cid:3__=C7BBF160DFA119A68f9e8a93df938@cn.ibm.com" border="0" alt=""></td><td width="99%">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr valign="top"><td width="95%"><img src="cid:3__=C7BBF160DFA119A68f9e8a93df938@cn.ibm.com" width="58" height="1"><div align="right"><font size="1" face="sans-serif">To</font></div></td><td width="5%"><img src="cid:3__=C7BBF160DFA119A68f9e8a93df938@cn.ibm.com" width="1" height="1"></td></tr>

<tr valign="top"><td width="95%"><img src="cid:3__=C7BBF160DFA119A68f9e8a93df938@cn.ibm.com" width="58" height="1"><div align="right"><font size="1" face="sans-serif">cc</font></div></td><td width="5%"><img src="cid:3__=C7BBF160DFA119A68f9e8a93df938@cn.ibm.com" width="1" height="1"></td></tr>

<tr valign="top"><td width="95%"><img src="cid:3__=C7BBF160DFA119A68f9e8a93df938@cn.ibm.com" width="58" height="1"><div align="right"><font size="1" face="sans-serif">Subject</font></div></td><td width="5%"><img src="cid:3__=C7BBF160DFA119A68f9e8a93df938@cn.ibm.com" width="1" height="1"></td></tr>
</table>

<table border="0" cellspacing="0" cellpadding="0">
<tr valign="top"><td width="58"><img src="cid:3__=C7BBF160DFA119A68f9e8a93df938@cn.ibm.com" width="1" height="1"></td><td width="336"><img src="cid:3__=C7BBF160DFA119A68f9e8a93df938@cn.ibm.com" width="1" height="1"></td></tr>
</table>
</td></tr>
</table>
<font size="3" face="Times"><br>
Thanks Zhang for the reply.</font><font size="3" face="Bookman Old Style"><br>
but my question is:<br>
According to swift source code,<br>
through which function call, the proxy server interact with account server, i.e., flow of control go from proxy server code to account server code?</font><font size="3" face="Times New Roman"><br>
</font><font size="3" face="Bookman Old Style"><br>
Thanks again</font><font size="3" face="Times New Roman"><br>
</font><font size="3" face="Bookman Old Style"><br>
Pragya Jain</font><font size="3" face="Times New Roman"><br>
</font><br>
<img src="cid:4__=C7BBF160DFA119A68f9e8a93df938@cn.ibm.com" width="88" height="67"><font size="3" face="Times New Roman"><br>
</font><br>
</ul>
</body></html>