)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"c9f992df45f08a6cd85024acbd14b5b99d761a69","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Pradeep Kumar Singh \u003cpradeep.singh@nectechnologies.in\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-05-20 20:00:45 +0530"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Modify internal_client so that it  reads the response if response status is not 200."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"internal_client was not reading response if response status is not 200."},{"line_number":10,"context_line":"So proxy server treats this as client disconnect and logs 499 in log file."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"7a016987_ebc6d798","line":7,"updated":"2015-05-20 21:32:12.000000000","message":"Please limit the length of commit message titles.  See\n\nhttps://wiki.openstack.org/wiki/GitCommitMessages","commit_id":"b37fb16c8c14cdc709763b3f343f4c41cfb23c4a"}],"swift/common/internal_client.py":[{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"d53932c9e7ea7bb5785b30b4ac98b4ab13b2a2aa","unresolved":false,"context_lines":[{"line_number":255,"context_line":"                {}, acceptable_statuses)"},{"line_number":256,"context_line":"            if not resp.status_int \u003d\u003d 200:"},{"line_number":257,"context_line":"                if resp.status_int \u003e\u003d HTTP_MULTIPLE_CHOICES:"},{"line_number":258,"context_line":"                    \u0027\u0027.join(resp.app_iter)"},{"line_number":259,"context_line":"                break"},{"line_number":260,"context_line":"            data \u003d json.loads(resp.body)"},{"line_number":261,"context_line":"            if not data:"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_be9f4002","line":258,"updated":"2015-06-16 09:27:58.000000000","message":"This draining seems to work only when make_request doesn\u0027t raise UnexpectedResponse error, right?","commit_id":"9d3de7d9e60a8c58756d552a9b118eed7e2806c9"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"499914efbea9521c30bef9259c8ace593a755485","unresolved":false,"context_lines":[{"line_number":255,"context_line":"                {}, acceptable_statuses)"},{"line_number":256,"context_line":"            if not resp.status_int \u003d\u003d 200:"},{"line_number":257,"context_line":"                if resp.status_int \u003e\u003d HTTP_MULTIPLE_CHOICES:"},{"line_number":258,"context_line":"                    \u0027\u0027.join(resp.app_iter)"},{"line_number":259,"context_line":"                break"},{"line_number":260,"context_line":"            data \u003d json.loads(resp.body)"},{"line_number":261,"context_line":"            if not data:"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba3cc151_ba56c104","line":258,"in_reply_to":"ba3cc151_f4b540d0","updated":"2015-06-29 04:26:49.000000000","message":"Hi, i checked the code and UnexpectedResponse is already being handled in container reconciler so i dont think it is necessary to handle the exception in _iter_items because it will change the method signature when it stops to generate the UnexpectedResponse exception. What do you think?","commit_id":"9d3de7d9e60a8c58756d552a9b118eed7e2806c9"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"e93651c2e4c9df449326c03940c58746da0e93ab","unresolved":false,"context_lines":[{"line_number":255,"context_line":"                {}, acceptable_statuses)"},{"line_number":256,"context_line":"            if not resp.status_int \u003d\u003d 200:"},{"line_number":257,"context_line":"                if resp.status_int \u003e\u003d HTTP_MULTIPLE_CHOICES:"},{"line_number":258,"context_line":"                    \u0027\u0027.join(resp.app_iter)"},{"line_number":259,"context_line":"                break"},{"line_number":260,"context_line":"            data \u003d json.loads(resp.body)"},{"line_number":261,"context_line":"            if not data:"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_a434fcfa","line":258,"in_reply_to":"fa32b979_243d4cbb","updated":"2015-06-23 07:18:20.000000000","message":"I think it will be better to handle UnexpectedResponse. What do you think?","commit_id":"9d3de7d9e60a8c58756d552a9b118eed7e2806c9"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"a2b81acba57e120580c16d9a7c7aab9982ae760c","unresolved":false,"context_lines":[{"line_number":255,"context_line":"                {}, acceptable_statuses)"},{"line_number":256,"context_line":"            if not resp.status_int \u003d\u003d 200:"},{"line_number":257,"context_line":"                if resp.status_int \u003e\u003d HTTP_MULTIPLE_CHOICES:"},{"line_number":258,"context_line":"                    \u0027\u0027.join(resp.app_iter)"},{"line_number":259,"context_line":"                break"},{"line_number":260,"context_line":"            data \u003d json.loads(resp.body)"},{"line_number":261,"context_line":"            if not data:"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_243d4cbb","line":258,"in_reply_to":"fa32b979_a204ef7d","updated":"2015-06-23 06:58:30.000000000","message":"thanks for pointing this out :).\nDo i need to handle UnexpectedResponse exception and read the body of UnexpectedResponse?","commit_id":"9d3de7d9e60a8c58756d552a9b118eed7e2806c9"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"1ea85835ac8cbd04b095998fbf5c23d26ce9e9bd","unresolved":false,"context_lines":[{"line_number":255,"context_line":"                {}, acceptable_statuses)"},{"line_number":256,"context_line":"            if not resp.status_int \u003d\u003d 200:"},{"line_number":257,"context_line":"                if resp.status_int \u003e\u003d HTTP_MULTIPLE_CHOICES:"},{"line_number":258,"context_line":"                    \u0027\u0027.join(resp.app_iter)"},{"line_number":259,"context_line":"                break"},{"line_number":260,"context_line":"            data \u003d json.loads(resp.body)"},{"line_number":261,"context_line":"            if not data:"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba3cc151_f4b540d0","line":258,"in_reply_to":"fa32b979_a434fcfa","updated":"2015-06-29 03:03:33.000000000","message":"As you said, we can handle the UnexpectedResponse here. That seems not so worse to me. Thanks for waiting a long time for my comment.","commit_id":"9d3de7d9e60a8c58756d552a9b118eed7e2806c9"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"9f90a315607a595ecc6ea28db622deb3a963871c","unresolved":false,"context_lines":[{"line_number":255,"context_line":"                {}, acceptable_statuses)"},{"line_number":256,"context_line":"            if not resp.status_int \u003d\u003d 200:"},{"line_number":257,"context_line":"                if resp.status_int \u003e\u003d HTTP_MULTIPLE_CHOICES:"},{"line_number":258,"context_line":"                    \u0027\u0027.join(resp.app_iter)"},{"line_number":259,"context_line":"                break"},{"line_number":260,"context_line":"            data \u003d json.loads(resp.body)"},{"line_number":261,"context_line":"            if not data:"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_e9607bd1","line":258,"in_reply_to":"fa32b979_be9f4002","updated":"2015-06-17 08:42:51.000000000","message":"Yes in that case this code will not read body.","commit_id":"9d3de7d9e60a8c58756d552a9b118eed7e2806c9"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"822dfd0fddbdcd2accc61a9f6da270c8a771b1f9","unresolved":false,"context_lines":[{"line_number":255,"context_line":"                {}, acceptable_statuses)"},{"line_number":256,"context_line":"            if not resp.status_int \u003d\u003d 200:"},{"line_number":257,"context_line":"                if resp.status_int \u003e\u003d HTTP_MULTIPLE_CHOICES:"},{"line_number":258,"context_line":"                    \u0027\u0027.join(resp.app_iter)"},{"line_number":259,"context_line":"                break"},{"line_number":260,"context_line":"            data \u003d json.loads(resp.body)"},{"line_number":261,"context_line":"            if not data:"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_a204ef7d","line":258,"in_reply_to":"fa32b979_e9607bd1","updated":"2015-06-23 06:44:00.000000000","message":"According to Clay\u0027s comment on LP bug report, should we maintain the unexpected error case (something like as 503), too?","commit_id":"9d3de7d9e60a8c58756d552a9b118eed7e2806c9"}],"test/unit/common/test_internal_client.py":[{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"1912f358f7f1fb6f687a75e5d86b172dd06d0a58","unresolved":false,"context_lines":[{"line_number":548,"context_line":"        self.assertRaises(ValueError, c.make_path, \u0027account\u0027, None, \u0027obj\u0027)"},{"line_number":549,"context_line":""},{"line_number":550,"context_line":"    def test_iter_items(self):"},{"line_number":551,"context_line":"        class Response(object):"},{"line_number":552,"context_line":"            def __init__(self, status_int, body, app_iter):"},{"line_number":553,"context_line":"                self.status_int \u003d status_int"},{"line_number":554,"context_line":"                self.body \u003d body"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba3cc151_557ab525","line":551,"updated":"2015-06-30 04:59:58.000000000","message":"Don\u0027t we have to add app_iter into Response class on test_iter_items and test_iter_items_with_markers, right?\n\nIt seems not to affect any behaviors and once I tried to get rid of the changes from actual InternalClient, these tests never failed. (If the additional app_iter has some meaning, it should fail if we don\u0027t have the changes)","commit_id":"9d3de7d9e60a8c58756d552a9b118eed7e2806c9"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"1912f358f7f1fb6f687a75e5d86b172dd06d0a58","unresolved":false,"context_lines":[{"line_number":629,"context_line":""},{"line_number":630,"context_line":"        self.assertEquals(\u0027one\\xc3\\xa9 two\u0027.split(), items)"},{"line_number":631,"context_line":""},{"line_number":632,"context_line":"    def test_iter_item_read_response_if_status_is_not_200(self):"},{"line_number":633,"context_line":"        class Response(object):"},{"line_number":634,"context_line":"            def __init__(self, status_int, body, app_iter):"},{"line_number":635,"context_line":"                self.status_int \u003d status_int"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba3cc151_955fdd71","line":632,"updated":"2015-06-30 04:59:58.000000000","message":"I\u0027d prefer to change the name like as \u0027status_is_acceptable\u0027.","commit_id":"9d3de7d9e60a8c58756d552a9b118eed7e2806c9"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"1912f358f7f1fb6f687a75e5d86b172dd06d0a58","unresolved":false,"context_lines":[{"line_number":631,"context_line":""},{"line_number":632,"context_line":"    def test_iter_item_read_response_if_status_is_not_200(self):"},{"line_number":633,"context_line":"        class Response(object):"},{"line_number":634,"context_line":"            def __init__(self, status_int, body, app_iter):"},{"line_number":635,"context_line":"                self.status_int \u003d status_int"},{"line_number":636,"context_line":"                self.body \u003d body"},{"line_number":637,"context_line":"                self.app_iter \u003d app_iter"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba3cc151_b51221b3","line":634,"updated":"2015-06-30 04:59:58.000000000","message":"we don\u0027t need body argument in this test. just only app_iter is enough for us.","commit_id":"9d3de7d9e60a8c58756d552a9b118eed7e2806c9"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"1912f358f7f1fb6f687a75e5d86b172dd06d0a58","unresolved":false,"context_lines":[{"line_number":653,"context_line":"                num_list.append(i)"},{"line_number":654,"context_line":""},{"line_number":655,"context_line":"        exp_items \u003d []"},{"line_number":656,"context_line":"        responses \u003d [Response(204, json.dumps([]), generate_resp_body())]"},{"line_number":657,"context_line":"        items \u003d []"},{"line_number":658,"context_line":"        client \u003d InternalClient(self, responses)"},{"line_number":659,"context_line":"        for item in client._iter_items(\u0027/\u0027):"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba3cc151_d5cc8537","line":656,"updated":"2015-06-30 04:59:58.000000000","message":"This is acceptable status because 2xx series are accepepted so the body should be drained.","commit_id":"9d3de7d9e60a8c58756d552a9b118eed7e2806c9"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"1912f358f7f1fb6f687a75e5d86b172dd06d0a58","unresolved":false,"context_lines":[{"line_number":662,"context_line":"        self.assertEquals(len(num_list), 0)"},{"line_number":663,"context_line":""},{"line_number":664,"context_line":"        exp_items \u003d []"},{"line_number":665,"context_line":"        responses \u003d [Response(300, json.dumps([]), generate_resp_body())]"},{"line_number":666,"context_line":"        items \u003d []"},{"line_number":667,"context_line":"        client \u003d InternalClient(self, responses)"},{"line_number":668,"context_line":"        for item in client._iter_items(\u0027/\u0027):"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba3cc151_75e8197d","line":665,"updated":"2015-06-30 04:59:58.000000000","message":"This is not acceptable in default so we should expect Exception raised and then the body should be still there.\n(*BUT* it won\u0027t trigger 499 on proxy_logging, we maybe should make a note for that)","commit_id":"9d3de7d9e60a8c58756d552a9b118eed7e2806c9"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"1912f358f7f1fb6f687a75e5d86b172dd06d0a58","unresolved":false,"context_lines":[{"line_number":669,"context_line":"            items.append(item)"},{"line_number":670,"context_line":"        self.assertEquals(exp_items, items)"},{"line_number":671,"context_line":"        self.assertEquals(len(num_list), 4)"},{"line_number":672,"context_line":""},{"line_number":673,"context_line":"    def test_set_metadata(self):"},{"line_number":674,"context_line":"        class InternalClient(internal_client.InternalClient):"},{"line_number":675,"context_line":"            def __init__(self, test, path, exp_headers):"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba3cc151_d59a4514","line":672,"updated":"2015-06-30 04:59:58.000000000","message":"And then, please add 404 status we should *mainly* maintain. It is an error response but it should not raise Exception because it should be *acceptable*.","commit_id":"9d3de7d9e60a8c58756d552a9b118eed7e2806c9"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"8fce7979abd4c50b4212f732049cbc945aae4079","unresolved":false,"context_lines":[{"line_number":657,"context_line":"                yield str(i)"},{"line_number":658,"context_line":"                num_list.append(i)"},{"line_number":659,"context_line":""},{"line_number":660,"context_line":"        def call_iter_tems():"},{"line_number":661,"context_line":"            [item for item in client._iter_items(\u0027/\u0027)]"},{"line_number":662,"context_line":""},{"line_number":663,"context_line":"        exp_items \u003d []"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_0d568406","line":660,"updated":"2015-07-06 09:20:28.000000000","message":"call_iter_items?\n\nAnyways, this function seems unnecessary to me :(\n\nThat is because the reason is described in my comment since L674.","commit_id":"8e19abadf6cb0f7c3451d8d7b288cb8fa523aaa7"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"8fce7979abd4c50b4212f732049cbc945aae4079","unresolved":false,"context_lines":[{"line_number":671,"context_line":""},{"line_number":672,"context_line":"        responses \u003d [Response(300, json.dumps([]), generate_resp_body())]"},{"line_number":673,"context_line":"        client \u003d InternalClient(self, responses)"},{"line_number":674,"context_line":"        self.assertRaises(internal_client.UnexpectedResponse, call_iter_tems)"},{"line_number":675,"context_line":""},{"line_number":676,"context_line":"        exp_items \u003d []"},{"line_number":677,"context_line":"        responses \u003d [Response(404, json.dumps([]), generate_resp_body())]"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_4d49ec8d","line":674,"updated":"2015-07-06 09:20:28.000000000","message":"something like as?:\n # the first yield will raise UnexpectedResponse\n self.assertRaises(internal_client.UnexpectedResponse, next, client._iter_items(\u0027/\u0027))","commit_id":"8e19abadf6cb0f7c3451d8d7b288cb8fa523aaa7"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"8fce7979abd4c50b4212f732049cbc945aae4079","unresolved":false,"context_lines":[{"line_number":672,"context_line":"        responses \u003d [Response(300, json.dumps([]), generate_resp_body())]"},{"line_number":673,"context_line":"        client \u003d InternalClient(self, responses)"},{"line_number":674,"context_line":"        self.assertRaises(internal_client.UnexpectedResponse, call_iter_tems)"},{"line_number":675,"context_line":""},{"line_number":676,"context_line":"        exp_items \u003d []"},{"line_number":677,"context_line":"        responses \u003d [Response(404, json.dumps([]), generate_resp_body())]"},{"line_number":678,"context_line":"        items \u003d []"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_08d0b2c8","line":675,"updated":"2015-07-06 09:20:28.000000000","message":"(nits)\n # 404 is acceptable and only \u003e\u003d 300 response will drain the response body.","commit_id":"8e19abadf6cb0f7c3451d8d7b288cb8fa523aaa7"}]}
