)]}'
{"swift/obj/reconstructor.py":[{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"7f5cf999c03d493efcc6200feb3098cd1410b603","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    ]"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"def _full_path(node, part, relative_path, policy):"},{"line_number":72,"context_line":"    \"\"\""},{"line_number":73,"context_line":"    Combines the node properties, partition, relative-path and policy into a"},{"line_number":74,"context_line":"    single string representation."}],"source_content_type":"text/x-python","patch_set":2,"id":"1a1ced50_f27a23f0","line":71,"updated":"2017-03-22 08:46:49.000000000","message":"Hopefully, it could be good to add test directly asserting this function like:\n\n def test_full_path(self):\n     \u003cprepare the statement\u003e\n     returned_str \u003d _full_path(node, part, path, policy)\n     self.assertEqual(expected_str, returned_str)\n\nSorry, I didn\u0027t try it yet. Just an idea.","commit_id":"56349e022dbbd90fbf9edb5d3d50dd1dd90ce7e2"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"7f5cf999c03d493efcc6200feb3098cd1410b603","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    :param part: partition number"},{"line_number":78,"context_line":"    :param path: path of the desired EC archive relative to partition dir"},{"line_number":79,"context_line":"    :param policy: an instance of"},{"line_number":80,"context_line":"                   :class:`~swift.common.storage_policy.BaseStoragePolicy`"},{"line_number":81,"context_line":"    :return: string representation of absolute path on node plus policy index"},{"line_number":82,"context_line":"    \"\"\""},{"line_number":83,"context_line":"    return \u0027%(replication_ip)s:%(replication_port)s\u0027 \\"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a1ced50_f2dea30f","line":80,"range":{"start_line":80,"start_character":19,"end_line":80,"end_character":73},"updated":"2017-03-22 08:46:49.000000000","message":"To say strictly, this should be ECStoragePolicy because this function is called only in reconstructor doing the job but it seems ok since this may be able to be more generic in the future?","commit_id":"56349e022dbbd90fbf9edb5d3d50dd1dd90ce7e2"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"7f5cf999c03d493efcc6200feb3098cd1410b603","unresolved":false,"context_lines":[{"line_number":306,"context_line":"                # frag index to reconstruct and dump warning log for that"},{"line_number":307,"context_line":"                self.logger.warning("},{"line_number":308,"context_line":"                    \u0027Invalid resp from %s \u0027"},{"line_number":309,"context_line":"                    \u0027(invalid X-Object-Sysmeta-Ec-Frag-Index: %r)\u0027,"},{"line_number":310,"context_line":"                    resp.full_path, frag_index)"},{"line_number":311,"context_line":"                continue"},{"line_number":312,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a1ced50_32b4bb80","line":309,"range":{"start_line":309,"start_character":21,"end_line":309,"end_character":65},"updated":"2017-03-22 08:46:49.000000000","message":"OK, this will be \"(invalid X-Object-Sysmeta-Ec-Frag-Index: None)\"","commit_id":"56349e022dbbd90fbf9edb5d3d50dd1dd90ce7e2"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"7f5cf999c03d493efcc6200feb3098cd1410b603","unresolved":false,"context_lines":[{"line_number":326,"context_line":""},{"line_number":327,"context_line":"            timestamp \u003d resp.headers.get(\u0027X-Backend-Timestamp\u0027)"},{"line_number":328,"context_line":"            if not timestamp:"},{"line_number":329,"context_line":"                self.logger.warning(\u0027Invalid resp from %s, frag index %s \u0027"},{"line_number":330,"context_line":"                                    \u0027(missing X-Backend-Timestamp)\u0027,"},{"line_number":331,"context_line":"                                    resp.full_path, resp_frag_index)"},{"line_number":332,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a1ced50_326bdbf2","line":329,"updated":"2017-03-22 08:46:49.000000000","message":"And like this, once we have resp_frag_index, we will use it in the logs.","commit_id":"56349e022dbbd90fbf9edb5d3d50dd1dd90ce7e2"}],"test/unit/obj/test_reconstructor.py":[{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"7f5cf999c03d493efcc6200feb3098cd1410b603","unresolved":false,"context_lines":[{"line_number":3404,"context_line":"            # explicitly instead of deleting the key because if no key exists"},{"line_number":3405,"context_line":"            # in the dict, fake_http_connect will insert some key/value pairs"},{"line_number":3406,"context_line":"            # automatically (e.g. X-Backend-Timestamp)"},{"line_number":3407,"context_line":"            responses[0][2].update({missing_header: None})"},{"line_number":3408,"context_line":""},{"line_number":3409,"context_line":"            codes, body_iter, headers \u003d zip(*responses)"},{"line_number":3410,"context_line":"            with mocked_http_conn("}],"source_content_type":"text/x-python","patch_set":2,"id":"1a1ced50_356ca5cf","line":3407,"range":{"start_line":3407,"start_character":22,"end_line":3407,"end_character":23},"updated":"2017-03-22 08:46:49.000000000","message":"yeah, response[0] is for frag_index 0. ok, it looks all good to me.","commit_id":"56349e022dbbd90fbf9edb5d3d50dd1dd90ce7e2"}]}
