)]}'
{"swift/common/middleware/proxy_logging.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f2b7b385947e57f373b3c958ee0e866e2f184a3c","unresolved":false,"context_lines":[{"line_number":188,"context_line":"                req.environ.get(\u0027swift.source\u0027),"},{"line_number":189,"context_line":"                \u0027,\u0027.join(req.environ.get(\u0027swift.log_info\u0027) or \u0027\u0027),"},{"line_number":190,"context_line":"                start_time_str,"},{"line_number":191,"context_line":"                end_time_str"},{"line_number":192,"context_line":"            )))"},{"line_number":193,"context_line":"        # Log timing and bytes-transferred data to StatsD"},{"line_number":194,"context_line":"        metric_name \u003d self.statsd_metric_name(req, status_int, method)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_6dd4f1e8","side":"PARENT","line":191,"updated":"2014-11-25 21:52:53.000000000","message":"hrm... I think not - if you stick it on the end maybe, but if you change the offset of the existing keys is breaks existing parsers.","commit_id":"18acb03f436f3cdf0f25668a93220de8f03eda8b"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"71fbbe0186468383bdcc053409351e96d1e3fd23","unresolved":false,"context_lines":[{"line_number":188,"context_line":"                req.environ.get(\u0027swift.source\u0027),"},{"line_number":189,"context_line":"                \u0027,\u0027.join(req.environ.get(\u0027swift.log_info\u0027) or \u0027\u0027),"},{"line_number":190,"context_line":"                start_time_str,"},{"line_number":191,"context_line":"                end_time_str"},{"line_number":192,"context_line":"            )))"},{"line_number":193,"context_line":"        # Log timing and bytes-transferred data to StatsD"},{"line_number":194,"context_line":"        metric_name \u003d self.statsd_metric_name(req, status_int, method)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_274f33c0","side":"PARENT","line":191,"in_reply_to":"5a890539_6dd4f1e8","updated":"2014-11-27 10:16:43.000000000","message":"Done","commit_id":"18acb03f436f3cdf0f25668a93220de8f03eda8b"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f2b7b385947e57f373b3c958ee0e866e2f184a3c","unresolved":false,"context_lines":[{"line_number":221,"context_line":"    def get_policy_index(self, req, status_int, method, env):"},{"line_number":222,"context_line":"        if req.path.startswith(\u0027/v1/\u0027) and req.path.strip(\u0027/\u0027).count(\u0027/\u0027) \u003e 0:"},{"line_number":223,"context_line":"            req_path \u003d get_valid_utf8_str(req.path).rstrip(\u0027/\u0027)"},{"line_number":224,"context_line":"            path_key \u003d \u0027swift.container/\u0027 + req_path.split(\u0027/\u0027, 2)[2]"},{"line_number":225,"context_line":"        else:"},{"line_number":226,"context_line":"            path_key \u003d None"},{"line_number":227,"context_line":"        if req.headers.get(\u0027X-Storage-Policy\u0027, None):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_2d23c905","line":224,"updated":"2014-11-25 21:52:53.000000000","message":"this is the container info envrion cache?  I think there\u0027s a utility method for that in proxy.controllers.base._get_cache_key.  Plus the whole thing would be easier to read if you used common.utils.split_path.\n\nAlso doc string on precedence might be useful.","commit_id":"1b1d15eee671645d194603baa27efb29dcbd36f4"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"71fbbe0186468383bdcc053409351e96d1e3fd23","unresolved":false,"context_lines":[{"line_number":221,"context_line":"    def get_policy_index(self, req, status_int, method, env):"},{"line_number":222,"context_line":"        if req.path.startswith(\u0027/v1/\u0027) and req.path.strip(\u0027/\u0027).count(\u0027/\u0027) \u003e 0:"},{"line_number":223,"context_line":"            req_path \u003d get_valid_utf8_str(req.path).rstrip(\u0027/\u0027)"},{"line_number":224,"context_line":"            path_key \u003d \u0027swift.container/\u0027 + req_path.split(\u0027/\u0027, 2)[2]"},{"line_number":225,"context_line":"        else:"},{"line_number":226,"context_line":"            path_key \u003d None"},{"line_number":227,"context_line":"        if req.headers.get(\u0027X-Storage-Policy\u0027, None):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_67493bb7","line":224,"in_reply_to":"5a890539_2d23c905","updated":"2014-11-27 10:16:43.000000000","message":"Done","commit_id":"1b1d15eee671645d194603baa27efb29dcbd36f4"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f2b7b385947e57f373b3c958ee0e866e2f184a3c","unresolved":false,"context_lines":[{"line_number":315,"context_line":"            status_int \u003d status_int_for_logging(start_status\u003d500)"},{"line_number":316,"context_line":"            self.log_request("},{"line_number":317,"context_line":"                req, status_int, input_proxy.bytes_received, 0, start_time,"},{"line_number":318,"context_line":"                time.time(), None)"},{"line_number":319,"context_line":"            raise"},{"line_number":320,"context_line":"        else:"},{"line_number":321,"context_line":"            return iter_response(iterable)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_adcc1936","line":318,"updated":"2014-11-25 21:52:53.000000000","message":"hrmm... maybe the whole thing would be simpler if you just append to the log_info list on the request when we make the backend requests like we do with x-delete-at.","commit_id":"1b1d15eee671645d194603baa27efb29dcbd36f4"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"71fbbe0186468383bdcc053409351e96d1e3fd23","unresolved":false,"context_lines":[{"line_number":315,"context_line":"            status_int \u003d status_int_for_logging(start_status\u003d500)"},{"line_number":316,"context_line":"            self.log_request("},{"line_number":317,"context_line":"                req, status_int, input_proxy.bytes_received, 0, start_time,"},{"line_number":318,"context_line":"                time.time(), None)"},{"line_number":319,"context_line":"            raise"},{"line_number":320,"context_line":"        else:"},{"line_number":321,"context_line":"            return iter_response(iterable)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_2759f35b","line":318,"in_reply_to":"5a890539_adcc1936","updated":"2014-11-27 10:16:43.000000000","message":"Maybe we need discussion. Currently I kindly disagree with your comment. From ver 2.0, almost all requests have relationships with policy indices, so it seems better to add another field for the storage policy.","commit_id":"1b1d15eee671645d194603baa27efb29dcbd36f4"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"1647870ecfbf9a27d43defe3632927389f688be4","unresolved":false,"context_lines":[{"line_number":236,"context_line":"            pathkey \u003d \u0027swift.\u0027 + get_container_memcache_key(account, container)"},{"line_number":237,"context_line":"        except ValueError:"},{"line_number":238,"context_line":"            return None"},{"line_number":239,"context_line":"        if req.headers.get(\u0027X-Storage-Policy\u0027, None):"},{"line_number":240,"context_line":"            policy_name \u003d req.headers.get(\u0027X-Storage-Policy\u0027)"},{"line_number":241,"context_line":"            policy \u003d POLICIES.get_by_name(policy_name)"},{"line_number":242,"context_line":"            if not policy:"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a890539_2271afde","line":239,"updated":"2014-12-01 04:03:09.000000000","message":"None is already the default return value of the get method, so can be left out.","commit_id":"22bd6b17ba92232c9248675a4b94917e50e6780b"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"f91c067275c92fa723f53f620e4ba1be246ecfb8","unresolved":false,"context_lines":[{"line_number":236,"context_line":"            pathkey \u003d \u0027swift.\u0027 + get_container_memcache_key(account, container)"},{"line_number":237,"context_line":"        except ValueError:"},{"line_number":238,"context_line":"            return None"},{"line_number":239,"context_line":"        if req.headers.get(\u0027X-Storage-Policy\u0027, None):"},{"line_number":240,"context_line":"            policy_name \u003d req.headers.get(\u0027X-Storage-Policy\u0027)"},{"line_number":241,"context_line":"            policy \u003d POLICIES.get_by_name(policy_name)"},{"line_number":242,"context_line":"            if not policy:"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a890539_3971b8de","line":239,"in_reply_to":"5a890539_2271afde","updated":"2014-12-02 11:13:04.000000000","message":"Done","commit_id":"22bd6b17ba92232c9248675a4b94917e50e6780b"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"7a4d4a8e96b67cd70db134f44e91f79c9ba90aa2","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        duration_time_str \u003d \"%.4f\" % (end_time - start_time)"},{"line_number":170,"context_line":"        start_time_str \u003d \"%.9f\" % start_time"},{"line_number":171,"context_line":"        end_time_str \u003d \"%.9f\" % end_time"},{"line_number":172,"context_line":"        self.access_logger.info(\u0027 \u0027.join("},{"line_number":173,"context_line":"            quote(str(x) if x else \u0027-\u0027, QUOTE_SAFE)"},{"line_number":174,"context_line":"            for x in ("},{"line_number":175,"context_line":"                get_remote_client(req),"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_fea1b2a9","line":172,"updated":"2014-12-03 05:17:38.000000000","message":"if policy_index is integer 0, x is evaluated as False in this if statement, so policy_index was probably output as \u0027-\u0027.","commit_id":"fab596077974ff6d8130fd44fd17dcc67448f7e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"1768e2c5ad81ece1fea689e3ad80dccac9662e11","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        \"\"\""},{"line_number":224,"context_line":"        Returns the appropriate index of the storage policy for the user"},{"line_number":225,"context_line":"        request"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"        :param req: swob.Request object for the request"},{"line_number":228,"context_line":"        :param status_int: integer code for the response status"},{"line_number":229,"context_line":"        :param method: HTTP method of the request"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_70e4210d","line":226,"updated":"2014-12-02 19:56:38.000000000","message":"What is the appropriate index for an account request?\n\nI think only object requests *need* to have a storage policy index, certainly it makes no sense on /info - *some* container requests might have one (i would expect container delete wouldn\u0027t), but containers are also the point of reconciliation for split-brain so it\u0027s not going to be entirely consistent?","commit_id":"fab596077974ff6d8130fd44fd17dcc67448f7e9"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"09ee80ec9a24b2392a5612b4329b346fd383fa17","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        \"\"\""},{"line_number":224,"context_line":"        Returns the appropriate index of the storage policy for the user"},{"line_number":225,"context_line":"        request"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"        :param req: swob.Request object for the request"},{"line_number":228,"context_line":"        :param status_int: integer code for the response status"},{"line_number":229,"context_line":"        :param method: HTTP method of the request"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_aa5b6852","line":226,"in_reply_to":"5a890539_70e4210d","updated":"2014-12-03 02:27:25.000000000","message":"I employed the strategy of \"best effort\" to get the policy index from requests.\n\nAccount requests always return None in this method.\nObject requests return the value which is extracted from X-Backend-Storage-Policy-Index header.\n\nAs you mentioned, some container requests can return a policy index but others (like DELETE, POST, and PUT request without X-Storage-Policy header) cannot. According to the above strategy, a policy index of a PUT request can be extracted from X-Storage-Policy header, and one of GET and HEAD requests can be extracted from env dict.\n\nIs it necessary to add DocString here about the above strategy?\n\nAs you also pointed, containers\u0027 policies can be inconsistent. However, for this reason, it can be very useful for swift operator to output the policy index.","commit_id":"fab596077974ff6d8130fd44fd17dcc67448f7e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"1768e2c5ad81ece1fea689e3ad80dccac9662e11","unresolved":false,"context_lines":[{"line_number":226,"context_line":""},{"line_number":227,"context_line":"        :param req: swob.Request object for the request"},{"line_number":228,"context_line":"        :param status_int: integer code for the response status"},{"line_number":229,"context_line":"        :param method: HTTP method of the request"},{"line_number":230,"context_line":"        :param env: WSGI environment dict"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        :returns: integer index of storage policy, or None"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_5002c53e","line":229,"updated":"2014-12-02 19:56:38.000000000","message":"are the status_int or HTTP method params used in this method anywhere?","commit_id":"fab596077974ff6d8130fd44fd17dcc67448f7e9"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"09ee80ec9a24b2392a5612b4329b346fd383fa17","unresolved":false,"context_lines":[{"line_number":226,"context_line":""},{"line_number":227,"context_line":"        :param req: swob.Request object for the request"},{"line_number":228,"context_line":"        :param status_int: integer code for the response status"},{"line_number":229,"context_line":"        :param method: HTTP method of the request"},{"line_number":230,"context_line":"        :param env: WSGI environment dict"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        :returns: integer index of storage policy, or None"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_179669f0","line":229,"in_reply_to":"5a890539_5002c53e","updated":"2014-12-03 02:27:25.000000000","message":"Oops. You are right. These are remains which I added when considering how to implement this function...","commit_id":"fab596077974ff6d8130fd44fd17dcc67448f7e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"1768e2c5ad81ece1fea689e3ad80dccac9662e11","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        :param req: swob.Request object for the request"},{"line_number":228,"context_line":"        :param status_int: integer code for the response status"},{"line_number":229,"context_line":"        :param method: HTTP method of the request"},{"line_number":230,"context_line":"        :param env: WSGI environment dict"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        :returns: integer index of storage policy, or None"},{"line_number":233,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_ab4298a8","line":230,"updated":"2014-12-02 19:56:38.000000000","message":"Can\u0027t you just pull this out of req.environ?","commit_id":"fab596077974ff6d8130fd44fd17dcc67448f7e9"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"09ee80ec9a24b2392a5612b4329b346fd383fa17","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        :param req: swob.Request object for the request"},{"line_number":228,"context_line":"        :param status_int: integer code for the response status"},{"line_number":229,"context_line":"        :param method: HTTP method of the request"},{"line_number":230,"context_line":"        :param env: WSGI environment dict"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        :returns: integer index of storage policy, or None"},{"line_number":233,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_579c710e","line":230,"in_reply_to":"5a890539_ab4298a8","updated":"2014-12-03 02:27:25.000000000","message":"I will fix it.","commit_id":"fab596077974ff6d8130fd44fd17dcc67448f7e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"1768e2c5ad81ece1fea689e3ad80dccac9662e11","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        :param method: HTTP method of the request"},{"line_number":230,"context_line":"        :param env: WSGI environment dict"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        :returns: integer index of storage policy, or None"},{"line_number":233,"context_line":"        \"\"\""},{"line_number":234,"context_line":"        try:"},{"line_number":235,"context_line":"            ver, account, container, obj \u003d req.split_path(1, 4, True)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_9068ad89","line":232,"updated":"2014-12-02 19:56:38.000000000","message":"I don\u0027t think this method always returns an integer or None.  Doesn\u0027t it sometimes return a string like \u00271\u0027?","commit_id":"fab596077974ff6d8130fd44fd17dcc67448f7e9"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"09ee80ec9a24b2392a5612b4329b346fd383fa17","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        :param method: HTTP method of the request"},{"line_number":230,"context_line":"        :param env: WSGI environment dict"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        :returns: integer index of storage policy, or None"},{"line_number":233,"context_line":"        \"\"\""},{"line_number":234,"context_line":"        try:"},{"line_number":235,"context_line":"            ver, account, container, obj \u003d req.split_path(1, 4, True)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_ea13b0fe","line":232,"in_reply_to":"5a890539_9068ad89","updated":"2014-12-03 02:27:25.000000000","message":"You are right. I rechecked my code and found that the type of a policy_index extracted from \u0027X-Backend-Storage-Policy-Index\u0027 is string. I will modify line 247 to transform it into string type.","commit_id":"fab596077974ff6d8130fd44fd17dcc67448f7e9"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"7a4d4a8e96b67cd70db134f44e91f79c9ba90aa2","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        :param method: HTTP method of the request"},{"line_number":230,"context_line":"        :param env: WSGI environment dict"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        :returns: integer index of storage policy, or None"},{"line_number":233,"context_line":"        \"\"\""},{"line_number":234,"context_line":"        try:"},{"line_number":235,"context_line":"            ver, account, container, obj \u003d req.split_path(1, 4, True)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_9e798e31","line":232,"in_reply_to":"5a890539_ea13b0fe","updated":"2014-12-03 05:17:38.000000000","message":"All returned value should be string or None in order to prevent from evaluating returned value as False in line 173 in log_request method.","commit_id":"fab596077974ff6d8130fd44fd17dcc67448f7e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"1768e2c5ad81ece1fea689e3ad80dccac9662e11","unresolved":false,"context_lines":[{"line_number":244,"context_line":"            else:"},{"line_number":245,"context_line":"                policy_index \u003d policy.idx"},{"line_number":246,"context_line":"        elif req.headers.get(\u0027X-Backend-Storage-Policy-Index\u0027):"},{"line_number":247,"context_line":"            policy_index \u003d req.headers.get(\u0027X-Backend-Storage-Policy-Index\u0027)"},{"line_number":248,"context_line":"        elif pathkey in env:"},{"line_number":249,"context_line":"            policy_index \u003d env.get(pathkey).get(\u0027storage_policy\u0027)"},{"line_number":250,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_b0a689a9","line":247,"updated":"2014-12-02 19:56:38.000000000","message":"The X-Backend-Storage-Policy-Index used in the request should almost certainly have the highest precedence.  If you make a request for an object with X-Storage-Policy: turd it\u0027s not even validated... but the backend request is going to be made with an Backend header regardless and *that\u0027s* the truth of the storage policy for the request.","commit_id":"fab596077974ff6d8130fd44fd17dcc67448f7e9"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"09ee80ec9a24b2392a5612b4329b346fd383fa17","unresolved":false,"context_lines":[{"line_number":244,"context_line":"            else:"},{"line_number":245,"context_line":"                policy_index \u003d policy.idx"},{"line_number":246,"context_line":"        elif req.headers.get(\u0027X-Backend-Storage-Policy-Index\u0027):"},{"line_number":247,"context_line":"            policy_index \u003d req.headers.get(\u0027X-Backend-Storage-Policy-Index\u0027)"},{"line_number":248,"context_line":"        elif pathkey in env:"},{"line_number":249,"context_line":"            policy_index \u003d env.get(pathkey).get(\u0027storage_policy\u0027)"},{"line_number":250,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_6a2260a4","line":247,"in_reply_to":"5a890539_b0a689a9","updated":"2014-12-03 02:27:25.000000000","message":"I missed this point. Thank you so much!","commit_id":"fab596077974ff6d8130fd44fd17dcc67448f7e9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"1768e2c5ad81ece1fea689e3ad80dccac9662e11","unresolved":false,"context_lines":[{"line_number":330,"context_line":"            status_int \u003d status_int_for_logging(start_status\u003d500)"},{"line_number":331,"context_line":"            self.log_request("},{"line_number":332,"context_line":"                req, status_int, input_proxy.bytes_received, 0, start_time,"},{"line_number":333,"context_line":"                time.time(), None)"},{"line_number":334,"context_line":"            raise"},{"line_number":335,"context_line":"        else:"},{"line_number":336,"context_line":"            return iter_response(iterable)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_4b3f7425","line":333,"updated":"2014-12-02 19:56:38.000000000","message":"I\u0027m not so sure that every exception on the body needs to have a policy_index of None.  In fact I\u0027m pretty sure this doesn\u0027t need to be a parameter to this method at all... log_request already has everything that get_policy_index could possibly need?","commit_id":"fab596077974ff6d8130fd44fd17dcc67448f7e9"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"09ee80ec9a24b2392a5612b4329b346fd383fa17","unresolved":false,"context_lines":[{"line_number":330,"context_line":"            status_int \u003d status_int_for_logging(start_status\u003d500)"},{"line_number":331,"context_line":"            self.log_request("},{"line_number":332,"context_line":"                req, status_int, input_proxy.bytes_received, 0, start_time,"},{"line_number":333,"context_line":"                time.time(), None)"},{"line_number":334,"context_line":"            raise"},{"line_number":335,"context_line":"        else:"},{"line_number":336,"context_line":"            return iter_response(iterable)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_cd19ae7b","line":333,"in_reply_to":"5a890539_4b3f7425","updated":"2014-12-03 02:27:25.000000000","message":"I agreed. get_policy_index method can be called in log_request method.","commit_id":"fab596077974ff6d8130fd44fd17dcc67448f7e9"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"41db167d72658f25f1274cae549b4c4ab0ae891d","unresolved":false,"context_lines":[{"line_number":219,"context_line":"            else \u0027BAD_METHOD\u0027"},{"line_number":220,"context_line":"        return \u0027.\u0027.join((stat_type, stat_method, str(status_int)))"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    def get_policy_index(self, req, resp_headers):"},{"line_number":223,"context_line":"        \"\"\""},{"line_number":224,"context_line":"        Returns the appropriate index of the storage policy for the user"},{"line_number":225,"context_line":"        request"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a930d6b_7ee9867f","line":222,"updated":"2015-01-22 21:26:59.000000000","message":"this method looks very similar to the one in utils.py, could we reuse that one?","commit_id":"975d43e20c70a9443e7b713611ebddaca5fddb1e"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"058c47c611278f131f3dc6f6f7d16030e23b5430","unresolved":false,"context_lines":[{"line_number":219,"context_line":"            else \u0027BAD_METHOD\u0027"},{"line_number":220,"context_line":"        return \u0027.\u0027.join((stat_type, stat_method, str(status_int)))"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    def get_policy_index(self, req, resp_headers):"},{"line_number":223,"context_line":"        \"\"\""},{"line_number":224,"context_line":"        Returns the appropriate index of the storage policy for the user"},{"line_number":225,"context_line":"        request"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a930d6b_4835ecf5","line":222,"in_reply_to":"1a930d6b_7ee9867f","updated":"2015-01-23 01:26:40.000000000","message":"When I submitted a first patch, there are differences from the one in utils.py. However, the logic of extracting policy index results in the same one through the discussion so I will fix it as you commented. Thanks.","commit_id":"975d43e20c70a9443e7b713611ebddaca5fddb1e"}],"swift/common/utils.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"1647870ecfbf9a27d43defe3632927389f688be4","unresolved":false,"context_lines":[{"line_number":341,"context_line":""},{"line_number":342,"context_line":"    :returns: integer index of storage policy, or None"},{"line_number":343,"context_line":"    \"\"\""},{"line_number":344,"context_line":"    if res.headers.get(\u0027X-Backend-Storage-Policy-Index\u0027, None):"},{"line_number":345,"context_line":"        policy_index \u003d res.headers.get(\u0027X-Backend-Storage-Policy-Index\u0027)"},{"line_number":346,"context_line":"    elif req.headers.get(\u0027X-Backend-Storage-Policy-Index\u0027, None):"},{"line_number":347,"context_line":"        policy_index \u003d req.headers.get(\u0027X-Backend-Storage-Policy-Index\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a890539_42fb1b47","line":344,"updated":"2014-12-01 04:03:09.000000000","message":"The default return of the dict get method is None, so you don\u0027t need to specify it here. You only need to specify a default return value if it is something other then None:\n\n  if res.headers.get(\u0027X-Backend-Storage-Policy-Index\u0027):\n\nNOTE: this goes for below as well.","commit_id":"22bd6b17ba92232c9248675a4b94917e50e6780b"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"f91c067275c92fa723f53f620e4ba1be246ecfb8","unresolved":false,"context_lines":[{"line_number":341,"context_line":""},{"line_number":342,"context_line":"    :returns: integer index of storage policy, or None"},{"line_number":343,"context_line":"    \"\"\""},{"line_number":344,"context_line":"    if res.headers.get(\u0027X-Backend-Storage-Policy-Index\u0027, None):"},{"line_number":345,"context_line":"        policy_index \u003d res.headers.get(\u0027X-Backend-Storage-Policy-Index\u0027)"},{"line_number":346,"context_line":"    elif req.headers.get(\u0027X-Backend-Storage-Policy-Index\u0027, None):"},{"line_number":347,"context_line":"        policy_index \u003d req.headers.get(\u0027X-Backend-Storage-Policy-Index\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a890539_5980448b","line":344,"in_reply_to":"5a890539_42fb1b47","updated":"2014-12-02 11:13:04.000000000","message":"Done","commit_id":"22bd6b17ba92232c9248675a4b94917e50e6780b"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"cdae0b3a167333a6ba3228e4acb609324fe5b7e5","unresolved":false,"context_lines":[{"line_number":339,"context_line":"    :param req: the request."},{"line_number":340,"context_line":"    :param res: the response."},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"    :returns: integer index of storage policy, or None"},{"line_number":343,"context_line":"    \"\"\""},{"line_number":344,"context_line":"    if res.headers.get(\u0027X-Backend-Storage-Policy-Index\u0027):"},{"line_number":345,"context_line":"        policy_index \u003d res.headers.get(\u0027X-Backend-Storage-Policy-Index\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_1a61ca38","line":342,"updated":"2014-12-05 03:21:09.000000000","message":"nit: not an integer","commit_id":"9120577cf7b4fc87fa001a0cb61065d609bae754"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"cdae0b3a167333a6ba3228e4acb609324fe5b7e5","unresolved":false,"context_lines":[{"line_number":344,"context_line":"    if res.headers.get(\u0027X-Backend-Storage-Policy-Index\u0027):"},{"line_number":345,"context_line":"        policy_index \u003d res.headers.get(\u0027X-Backend-Storage-Policy-Index\u0027)"},{"line_number":346,"context_line":"    elif req.headers.get(\u0027X-Backend-Storage-Policy-Index\u0027):"},{"line_number":347,"context_line":"        policy_index \u003d req.headers.get(\u0027X-Backend-Storage-Policy-Index\u0027)"},{"line_number":348,"context_line":"    elif req.method.upper() \u003d\u003d \u0027PUT\u0027 and \\"},{"line_number":349,"context_line":"            req.headers.get(\u0027X-Backend-Storage-Policy-Default\u0027):"},{"line_number":350,"context_line":"        policy_index \u003d req.headers.get(\u0027X-Backend-Storage-Policy-Default\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_fa6ebe2a","line":347,"updated":"2014-12-05 03:21:09.000000000","message":"oic, response first the request... hrmm...","commit_id":"9120577cf7b4fc87fa001a0cb61065d609bae754"}]}
