)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6069e25cc7055cb471336a157945e9e9684ea629","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch changes the response code from Internal Server Error to"},{"line_number":10,"context_line":"Conflict when there is a missing segment and the position is first."},{"line_number":11,"context_line":"And this patch also modifies the response code to OK when there is"},{"line_number":12,"context_line":"an empty manifest in SLO or no segment related to manifest in DLO."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Co-Authored-By: Samuel Merritt \u003csam@swiftstack.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3a961159_0e2d4795","line":11,"updated":"2014-12-12 15:34:46.000000000","message":"this change wasn\u0027t obvious to me - where does that happen?","commit_id":"fc915207c4ede6c616b02d7c8b1fb051926523b0"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"383f94e109513fd245fe9478b151285f82d6ae4d","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch changes the response code from Internal Server Error to"},{"line_number":10,"context_line":"Conflict when there is a missing segment and the position is first."},{"line_number":11,"context_line":"And this patch also modifies the response code to OK when there is"},{"line_number":12,"context_line":"an empty manifest in SLO or no segment related to manifest in DLO."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Co-Authored-By: Samuel Merritt \u003csam@swiftstack.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3a961159_f8489a2e","line":11,"in_reply_to":"3a961159_054efd96","updated":"2014-12-15 05:35:01.000000000","message":"@Alistair, Thanks for the review.\n@Samuel, Thanks for your help.\n\nSorry, my commit message here makes mis-leading.\nSamuel already explained the situations so I think it is\nbetter to remove the line in commit message.\nIt is too details.","commit_id":"fc915207c4ede6c616b02d7c8b1fb051926523b0"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"74e52e039fc1b875efbec76263523a2d4a1a12c3","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch changes the response code from Internal Server Error to"},{"line_number":10,"context_line":"Conflict when there is a missing segment and the position is first."},{"line_number":11,"context_line":"And this patch also modifies the response code to OK when there is"},{"line_number":12,"context_line":"an empty manifest in SLO or no segment related to manifest in DLO."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Co-Authored-By: Samuel Merritt \u003csam@swiftstack.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3a961159_054efd96","line":11,"in_reply_to":"3a961159_0e2d4795","updated":"2014-12-12 18:57:39.000000000","message":"I don\u0027t think it\u0027s a modification so much as a preservation of existing behavior.\n\nYou can make this happen for DLOs pretty easily. SLOs, it\u0027s impossible to do without removing the validation in the middleware or by making your own empty manifest by talking directly to the object servers.","commit_id":"fc915207c4ede6c616b02d7c8b1fb051926523b0"}],"swift/common/middleware/dlo.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d0da2217a4b1ebeba4ac5da3b3e9589824ab617a","unresolved":false,"context_lines":[{"line_number":213,"context_line":"                        app_iter\u003dapp_iter)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        try:"},{"line_number":216,"context_line":"            resp.app_iter.validate_first_segment()"},{"line_number":217,"context_line":"        except (SegmentError, ListingIterError):"},{"line_number":218,"context_line":"            return HTTPConflict(request\u003dreq)"},{"line_number":219,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_8d8ea82c","line":216,"updated":"2014-12-22 12:25:48.000000000","message":"validate_first_segment causes an unnecessary backend GET request to be issued even when the client request is a HEAD.\n\nCan the construction of app_iter and validation of the first segment be made conditional on the client request being a GET? Then for a HEAD, app_iter \u003d None","commit_id":"1d93ab59cce3ea769c7bd33b6d4ceefacff0459b"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"ed9246db08950cb3f5d6c73c02bab1d941a534c9","unresolved":false,"context_lines":[{"line_number":213,"context_line":"                        app_iter\u003dapp_iter)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        try:"},{"line_number":216,"context_line":"            resp.app_iter.validate_first_segment()"},{"line_number":217,"context_line":"        except (SegmentError, ListingIterError):"},{"line_number":218,"context_line":"            return HTTPConflict(request\u003dreq)"},{"line_number":219,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_ad6ecffd","line":216,"in_reply_to":"3a961159_8d8ea82c","updated":"2014-12-24 09:38:26.000000000","message":"Thanks for the review. You are right! I didn\u0027t notice it. I will fix this with your suggested code.","commit_id":"1d93ab59cce3ea769c7bd33b6d4ceefacff0459b"}],"swift/common/middleware/slo.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6069e25cc7055cb471336a157945e9e9684ea629","unresolved":false,"context_lines":[{"line_number":478,"context_line":"            # Copy from the SLO explanation in top of this file."},{"line_number":479,"context_line":"            # If any of the segments from the manifest are not found or"},{"line_number":480,"context_line":"            # their Etag/Content Length no longer match the connection"},{"line_number":481,"context_line":"            # will drop. In this case a 409 Conflict will be logged in"},{"line_number":482,"context_line":"            # the proxy logs and the user will receive incomplete results."},{"line_number":483,"context_line":"            return HTTPConflict(request\u003dreq)"},{"line_number":484,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_4e7f4f66","line":481,"updated":"2014-12-12 15:34:46.000000000","message":"this logging now only seems to happen if first segment is bad","commit_id":"fc915207c4ede6c616b02d7c8b1fb051926523b0"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"383f94e109513fd245fe9478b151285f82d6ae4d","unresolved":false,"context_lines":[{"line_number":478,"context_line":"            # Copy from the SLO explanation in top of this file."},{"line_number":479,"context_line":"            # If any of the segments from the manifest are not found or"},{"line_number":480,"context_line":"            # their Etag/Content Length no longer match the connection"},{"line_number":481,"context_line":"            # will drop. In this case a 409 Conflict will be logged in"},{"line_number":482,"context_line":"            # the proxy logs and the user will receive incomplete results."},{"line_number":483,"context_line":"            return HTTPConflict(request\u003dreq)"},{"line_number":484,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_35178b46","line":481,"in_reply_to":"3a961159_4e7f4f66","updated":"2014-12-15 05:35:01.000000000","message":"@Alistair, Thank you for the review. I will log for the exceptions here and similar place in dlo because there is no exception log in logging middleware.","commit_id":"fc915207c4ede6c616b02d7c8b1fb051926523b0"}],"swift/common/request_helpers.py":[{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"7a17117bcf3e70f2e7dcc267217a44fc139ace52","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        self.response \u003d response"},{"line_number":296,"context_line":"        self.chunk \u003d None"},{"line_number":297,"context_line":"        self.app_iter \u003d self._internal_iter()"},{"line_number":298,"context_line":"        self.validated_first_segment \u003d True"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    def _internal_iter(self):"},{"line_number":301,"context_line":"        start_time \u003d time.time()"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a890539_bb952541","line":298,"updated":"2014-12-04 19:42:57.000000000","message":"This assignment is a lie; nothing has been validated yet. Is it necessary, or can it be removed?","commit_id":"05016c0ec071f72a4de280a88d38c2dcb1920b90"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"7a17117bcf3e70f2e7dcc267217a44fc139ace52","unresolved":false,"context_lines":[{"line_number":426,"context_line":"        except StopIteration:"},{"line_number":427,"context_line":"            raise SegmentError("},{"line_number":428,"context_line":"                \u0027ERROR: While processing manifest %s, \u0027"},{"line_number":429,"context_line":"                \u0027no segments in the manifest\u0027 % self.req.path)"},{"line_number":430,"context_line":"        finally:"},{"line_number":431,"context_line":"            self.validated_first_segment \u003d True"},{"line_number":432,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5a890539_db903150","line":429,"updated":"2014-12-04 19:42:57.000000000","message":"I\u0027m not sure this is a particularly good change, as it introduces an inconsistency between SLO and DLO.\n\nWith DLOs, a GET of a zero-segment manifest does not produce an error; it produces a 200 with a Content-Length of 0. With SLOs, you can\u0027t get a zero-segment manifest without bypassing some validation, but assuming you could, I don\u0027t see why that should be an error.","commit_id":"05016c0ec071f72a4de280a88d38c2dcb1920b90"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6069e25cc7055cb471336a157945e9e9684ea629","unresolved":false,"context_lines":[{"line_number":418,"context_line":"            # late for that), but this does make it to the logs."},{"line_number":419,"context_line":"            if self.response:"},{"line_number":420,"context_line":"                self.response.status \u003d HTTP_SERVICE_UNAVAILABLE"},{"line_number":421,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_6870830b","side":"PARENT","line":421,"updated":"2014-12-12 15:34:46.000000000","message":"Removing the try/except clauses means that Errors raised while reading other-than-first chunk do not get logged","commit_id":"2792fe81a93dbaa95e58f14099db5e11dd8cde68"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"383f94e109513fd245fe9478b151285f82d6ae4d","unresolved":false,"context_lines":[{"line_number":418,"context_line":"            # late for that), but this does make it to the logs."},{"line_number":419,"context_line":"            if self.response:"},{"line_number":420,"context_line":"                self.response.status \u003d HTTP_SERVICE_UNAVAILABLE"},{"line_number":421,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_c2284f35","side":"PARENT","line":421,"in_reply_to":"3a961159_6870830b","updated":"2014-12-15 05:35:01.000000000","message":"@Alistair, Thank you for the review. I think it is better to remove try/except here because when an exception raises here, it is catched in logging middleware even if it is a same logging info. So we can reduce consumption of logging for same info.","commit_id":"2792fe81a93dbaa95e58f14099db5e11dd8cde68"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"bcde5cc6f35a99de2a72c5883c43df6efc0c11c1","unresolved":false,"context_lines":[{"line_number":276,"context_line":"                         (just for logging)"},{"line_number":277,"context_line":"    :param ua_suffix: string to append to user-agent."},{"line_number":278,"context_line":"    :param name: name of manifest (used in logging only)"},{"line_number":279,"context_line":"    :param response: optional response object for the response being sent"},{"line_number":280,"context_line":"                     to the client."},{"line_number":281,"context_line":"    \"\"\""},{"line_number":282,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_3066b2bb","line":279,"updated":"2014-12-15 11:36:00.000000000","message":"param definition needs updating to response_body_length","commit_id":"e823568a6fe1b543f0a27328a02e24ab58d71376"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"78fd39dca9d3138256442029fc62ee9760c34388","unresolved":false,"context_lines":[{"line_number":276,"context_line":"                         (just for logging)"},{"line_number":277,"context_line":"    :param ua_suffix: string to append to user-agent."},{"line_number":278,"context_line":"    :param name: name of manifest (used in logging only)"},{"line_number":279,"context_line":"    :param response: optional response object for the response being sent"},{"line_number":280,"context_line":"                     to the client."},{"line_number":281,"context_line":"    \"\"\""},{"line_number":282,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_3ee3c734","line":279,"in_reply_to":"3a961159_3066b2bb","updated":"2014-12-16 02:51:08.000000000","message":"@Alistair, Thanks for the review. I changed this.","commit_id":"e823568a6fe1b543f0a27328a02e24ab58d71376"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1119ab7c408169ec7e5b2138c4826716a7b34f31","unresolved":false,"context_lines":[{"line_number":385,"context_line":"                    \u0027Not enough bytes for %s; closing connection\u0027 % self.name)"},{"line_number":386,"context_line":"        except (ListingIterError, SegmentError):"},{"line_number":387,"context_line":"            self.logger.exception(_(\u0027ERROR: An error occurred \u0027"},{"line_number":388,"context_line":"                                    \u0027while retrieving segments\u0027))"},{"line_number":389,"context_line":"            raise"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"    def app_iter_range(self, *a, **kw):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_417cfdb5","line":388,"updated":"2014-12-17 14:33:42.000000000","message":"I\u0027d prefer to see the err included in the log message (as it is on master) otherwise we are throwing away all the useful info constructed e.g. at lines 347-354. So:\n\n self.logger.exception(_(\u0027ERROR: An error occurred while retrieving segments: %s\u0027), err)","commit_id":"1d93ab59cce3ea769c7bd33b6d4ceefacff0459b"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"36376ff4d5697ddcc89dab8776e5ef1baf2bc1f5","unresolved":false,"context_lines":[{"line_number":385,"context_line":"                    \u0027Not enough bytes for %s; closing connection\u0027 % self.name)"},{"line_number":386,"context_line":"        except (ListingIterError, SegmentError):"},{"line_number":387,"context_line":"            self.logger.exception(_(\u0027ERROR: An error occurred \u0027"},{"line_number":388,"context_line":"                                    \u0027while retrieving segments\u0027))"},{"line_number":389,"context_line":"            raise"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"    def app_iter_range(self, *a, **kw):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_862cd003","line":388,"in_reply_to":"3a961159_417cfdb5","updated":"2014-12-22 03:30:22.000000000","message":"@Alistair, Thanks for the review. Please see the following url.\nBoth cases we can see the log message \"Object segment...\" and\nthe difference is only the duplicated output. From the size of log\npoint of view, I preffer to use the current way but I understand that\nit is easy to recognize the message if it is on the top message.\n\nhttp://paste.openstack.org/show/153744/","commit_id":"1d93ab59cce3ea769c7bd33b6d4ceefacff0459b"}],"test/unit/common/middleware/test_dlo.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d0da2217a4b1ebeba4ac5da3b3e9589824ab617a","unresolved":false,"context_lines":[{"line_number":637,"context_line":"                        {\"hash\": \"def\", \"bytes\": 5, \"name\": \"quotetags2\","},{"line_number":638,"context_line":"                         \"last_modified\": \"2013-11-22T02:42:14.261620\","},{"line_number":639,"context_line":"                         \"content-type\": \"application/octet-stream\"}]))"},{"line_number":640,"context_line":"        self.app.register("},{"line_number":641,"context_line":"            \u0027GET\u0027, \u0027/v1/AUTH_test/c/quotetags1?multipart-manifest\u003dget\u0027,"},{"line_number":642,"context_line":"            swob.HTTPOk, {\u0027Content-Length\u0027: \u002710\u0027, \u0027Etag\u0027: \u0027abc\u0027,"},{"line_number":643,"context_line":"                          \u0027X-Object-Manifest\u0027: \u0027c/quotetags\u0027}, \"quotetags1\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_6dd17c56","line":640,"updated":"2014-12-22 12:25:48.000000000","message":"This GET request has to be added because of the first segment validation, but this is testing a HEAD when the content body should not be returned, so there should be no need to validate the first segment.","commit_id":"1d93ab59cce3ea769c7bd33b6d4ceefacff0459b"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"ed9246db08950cb3f5d6c73c02bab1d941a534c9","unresolved":false,"context_lines":[{"line_number":637,"context_line":"                        {\"hash\": \"def\", \"bytes\": 5, \"name\": \"quotetags2\","},{"line_number":638,"context_line":"                         \"last_modified\": \"2013-11-22T02:42:14.261620\","},{"line_number":639,"context_line":"                         \"content-type\": \"application/octet-stream\"}]))"},{"line_number":640,"context_line":"        self.app.register("},{"line_number":641,"context_line":"            \u0027GET\u0027, \u0027/v1/AUTH_test/c/quotetags1?multipart-manifest\u003dget\u0027,"},{"line_number":642,"context_line":"            swob.HTTPOk, {\u0027Content-Length\u0027: \u002710\u0027, \u0027Etag\u0027: \u0027abc\u0027,"},{"line_number":643,"context_line":"                          \u0027X-Object-Manifest\u0027: \u0027c/quotetags\u0027}, \"quotetags1\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_93f13003","line":640,"in_reply_to":"3a961159_6dd17c56","updated":"2014-12-24 09:38:26.000000000","message":"Thanks for the review. I will remove this.","commit_id":"1d93ab59cce3ea769c7bd33b6d4ceefacff0459b"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d0da2217a4b1ebeba4ac5da3b3e9589824ab617a","unresolved":false,"context_lines":[{"line_number":641,"context_line":"            \u0027GET\u0027, \u0027/v1/AUTH_test/c/quotetags1?multipart-manifest\u003dget\u0027,"},{"line_number":642,"context_line":"            swob.HTTPOk, {\u0027Content-Length\u0027: \u002710\u0027, \u0027Etag\u0027: \u0027abc\u0027,"},{"line_number":643,"context_line":"                          \u0027X-Object-Manifest\u0027: \u0027c/quotetags\u0027}, \"quotetags1\")"},{"line_number":644,"context_line":"        self.app.register("},{"line_number":645,"context_line":"            \u0027GET\u0027, \u0027/v1/AUTH_test/c/quotetags2?multipart-manifest\u003dget\u0027,"},{"line_number":646,"context_line":"            swob.HTTPOk, {\u0027Content-Length\u0027: \u002710\u0027, \u0027Etag\u0027: \u0027def\u0027,"},{"line_number":647,"context_line":"                          \u0027X-Object-Manifest\u0027: \u0027c/quotetags\u0027}, \"quotetags2\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_ed3acccb","line":644,"updated":"2014-12-22 12:25:48.000000000","message":"this \u0027register\u0027 does not seem necessary for test to pass - the client request is a HEAD so only the first segment is read for validation.","commit_id":"1d93ab59cce3ea769c7bd33b6d4ceefacff0459b"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"ed9246db08950cb3f5d6c73c02bab1d941a534c9","unresolved":false,"context_lines":[{"line_number":641,"context_line":"            \u0027GET\u0027, \u0027/v1/AUTH_test/c/quotetags1?multipart-manifest\u003dget\u0027,"},{"line_number":642,"context_line":"            swob.HTTPOk, {\u0027Content-Length\u0027: \u002710\u0027, \u0027Etag\u0027: \u0027abc\u0027,"},{"line_number":643,"context_line":"                          \u0027X-Object-Manifest\u0027: \u0027c/quotetags\u0027}, \"quotetags1\")"},{"line_number":644,"context_line":"        self.app.register("},{"line_number":645,"context_line":"            \u0027GET\u0027, \u0027/v1/AUTH_test/c/quotetags2?multipart-manifest\u003dget\u0027,"},{"line_number":646,"context_line":"            swob.HTTPOk, {\u0027Content-Length\u0027: \u002710\u0027, \u0027Etag\u0027: \u0027def\u0027,"},{"line_number":647,"context_line":"                          \u0027X-Object-Manifest\u0027: \u0027c/quotetags\u0027}, \"quotetags2\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_53d2685c","line":644,"in_reply_to":"3a961159_ed3acccb","updated":"2014-12-24 09:38:26.000000000","message":"Thanks for the review. I will remove this.","commit_id":"1d93ab59cce3ea769c7bd33b6d4ceefacff0459b"}],"test/unit/common/middleware/test_slo.py":[{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"ed9246db08950cb3f5d6c73c02bab1d941a534c9","unresolved":false,"context_lines":[{"line_number":1393,"context_line":"            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027GET\u0027})"},{"line_number":1394,"context_line":"        status, headers, body \u003d self.call_slo(req)"},{"line_number":1395,"context_line":""},{"line_number":1396,"context_line":"        self.assertEqual(status, \u0027409 Conflict\u0027)"},{"line_number":1397,"context_line":"        self.assertEqual(self.app.call_count, 10)"},{"line_number":1398,"context_line":""},{"line_number":1399,"context_line":"    def test_get_with_if_modified_since(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_bee8b3e2","line":1396,"updated":"2014-12-24 09:38:26.000000000","message":"I put an assertion for log here.","commit_id":"1d93ab59cce3ea769c7bd33b6d4ceefacff0459b"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d0da2217a4b1ebeba4ac5da3b3e9589824ab617a","unresolved":false,"context_lines":[{"line_number":1468,"context_line":"            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027GET\u0027})"},{"line_number":1469,"context_line":"        status, headers, body \u003d self.call_slo(req)"},{"line_number":1470,"context_line":""},{"line_number":1471,"context_line":"        self.assertEqual(\u0027409 Conflict\u0027, status)"},{"line_number":1472,"context_line":""},{"line_number":1473,"context_line":"    def test_invalid_json_submanifest(self):"},{"line_number":1474,"context_line":"        self.app.register("}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_a85512c3","line":1471,"updated":"2014-12-22 12:25:48.000000000","message":"It would be nice to assert that the exception is logged in SegmentedIterable","commit_id":"1d93ab59cce3ea769c7bd33b6d4ceefacff0459b"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"ed9246db08950cb3f5d6c73c02bab1d941a534c9","unresolved":false,"context_lines":[{"line_number":1468,"context_line":"            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027GET\u0027})"},{"line_number":1469,"context_line":"        status, headers, body \u003d self.call_slo(req)"},{"line_number":1470,"context_line":""},{"line_number":1471,"context_line":"        self.assertEqual(\u0027409 Conflict\u0027, status)"},{"line_number":1472,"context_line":""},{"line_number":1473,"context_line":"    def test_invalid_json_submanifest(self):"},{"line_number":1474,"context_line":"        self.app.register("}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_1e162749","line":1471,"in_reply_to":"3a961159_a85512c3","updated":"2014-12-24 09:38:26.000000000","message":"Thanks for the review. I put an assertion for log here. So far I don\u0027t know how to put assertions for log but I got your suggested code for dlo so I can put it here. Thanks!","commit_id":"1d93ab59cce3ea769c7bd33b6d4ceefacff0459b"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d0da2217a4b1ebeba4ac5da3b3e9589824ab617a","unresolved":false,"context_lines":[{"line_number":1542,"context_line":"                            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027GET\u0027})"},{"line_number":1543,"context_line":"        status, headers, body \u003d self.call_slo(req)"},{"line_number":1544,"context_line":""},{"line_number":1545,"context_line":"        self.assertEqual(\u0027409 Conflict\u0027, status)"},{"line_number":1546,"context_line":""},{"line_number":1547,"context_line":"    def test_first_segment_mismatched_size(self):"},{"line_number":1548,"context_line":"        self.app.register(\u0027GET\u0027, \u0027/v1/AUTH_test/gettest/manifest-badsize\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_c8b25ee4","line":1545,"updated":"2014-12-22 12:25:48.000000000","message":"It would be nice to assert that the exception is logged in SegmentedIterable","commit_id":"1d93ab59cce3ea769c7bd33b6d4ceefacff0459b"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"ed9246db08950cb3f5d6c73c02bab1d941a534c9","unresolved":false,"context_lines":[{"line_number":1542,"context_line":"                            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027GET\u0027})"},{"line_number":1543,"context_line":"        status, headers, body \u003d self.call_slo(req)"},{"line_number":1544,"context_line":""},{"line_number":1545,"context_line":"        self.assertEqual(\u0027409 Conflict\u0027, status)"},{"line_number":1546,"context_line":""},{"line_number":1547,"context_line":"    def test_first_segment_mismatched_size(self):"},{"line_number":1548,"context_line":"        self.app.register(\u0027GET\u0027, \u0027/v1/AUTH_test/gettest/manifest-badsize\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_5e2b4f81","line":1545,"in_reply_to":"3a961159_c8b25ee4","updated":"2014-12-24 09:38:26.000000000","message":"Thanks for the review. I put an assertion for log here.","commit_id":"1d93ab59cce3ea769c7bd33b6d4ceefacff0459b"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d0da2217a4b1ebeba4ac5da3b3e9589824ab617a","unresolved":false,"context_lines":[{"line_number":1557,"context_line":"                            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027GET\u0027})"},{"line_number":1558,"context_line":"        status, headers, body \u003d self.call_slo(req)"},{"line_number":1559,"context_line":""},{"line_number":1560,"context_line":"        self.assertEqual(\u0027409 Conflict\u0027, status)"},{"line_number":1561,"context_line":""},{"line_number":1562,"context_line":"    def test_download_takes_too_long(self):"},{"line_number":1563,"context_line":"        the_time \u003d [time.time()]"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_08c8e653","line":1560,"updated":"2014-12-22 12:25:48.000000000","message":"It would be nice to assert that the exception is logged in SegmentedIterable","commit_id":"1d93ab59cce3ea769c7bd33b6d4ceefacff0459b"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"ed9246db08950cb3f5d6c73c02bab1d941a534c9","unresolved":false,"context_lines":[{"line_number":1557,"context_line":"                            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027GET\u0027})"},{"line_number":1558,"context_line":"        status, headers, body \u003d self.call_slo(req)"},{"line_number":1559,"context_line":""},{"line_number":1560,"context_line":"        self.assertEqual(\u0027409 Conflict\u0027, status)"},{"line_number":1561,"context_line":""},{"line_number":1562,"context_line":"    def test_download_takes_too_long(self):"},{"line_number":1563,"context_line":"        the_time \u003d [time.time()]"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_de365fe6","line":1560,"in_reply_to":"3a961159_08c8e653","updated":"2014-12-24 09:38:26.000000000","message":"Thanks for the review. I put an assertion for log here.","commit_id":"1d93ab59cce3ea769c7bd33b6d4ceefacff0459b"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"ed9246db08950cb3f5d6c73c02bab1d941a534c9","unresolved":false,"context_lines":[{"line_number":1608,"context_line":"                            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027GET\u0027})"},{"line_number":1609,"context_line":"        status, headers, body \u003d self.call_slo(req)"},{"line_number":1610,"context_line":""},{"line_number":1611,"context_line":"        self.assertEqual(\u0027409 Conflict\u0027, status)"},{"line_number":1612,"context_line":""},{"line_number":1613,"context_line":""},{"line_number":1614,"context_line":"class TestSloBulkLogger(unittest.TestCase):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_1e4707a4","line":1611,"updated":"2014-12-24 09:38:26.000000000","message":"Thanks for the review. I put an assertion for log here.","commit_id":"1d93ab59cce3ea769c7bd33b6d4ceefacff0459b"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d0da2217a4b1ebeba4ac5da3b3e9589824ab617a","unresolved":false,"context_lines":[{"line_number":1631,"context_line":"            json.dumps([{\u0027name\u0027: \u0027/c/o\u0027, \u0027hash\u0027: md5hex(\"obj\"),"},{"line_number":1632,"context_line":"                         \u0027bytes\u0027: \u00273\u0027}]))"},{"line_number":1633,"context_line":"        self.app.register("},{"line_number":1634,"context_line":"            \u0027COPY\u0027, \u0027/v1/AUTH_test/c/o\u0027, swob.HTTPCreated, {})"},{"line_number":1635,"context_line":""},{"line_number":1636,"context_line":"        copy_hook \u003d [None]"},{"line_number":1637,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_68616a38","line":1634,"updated":"2014-12-22 12:25:48.000000000","message":"I am not sure why the changes are made to this setUp() method? swift.copy_hook is set for every request method by SLO so the test setUp was valid using a GET request","commit_id":"1d93ab59cce3ea769c7bd33b6d4ceefacff0459b"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"ed9246db08950cb3f5d6c73c02bab1d941a534c9","unresolved":false,"context_lines":[{"line_number":1631,"context_line":"            json.dumps([{\u0027name\u0027: \u0027/c/o\u0027, \u0027hash\u0027: md5hex(\"obj\"),"},{"line_number":1632,"context_line":"                         \u0027bytes\u0027: \u00273\u0027}]))"},{"line_number":1633,"context_line":"        self.app.register("},{"line_number":1634,"context_line":"            \u0027COPY\u0027, \u0027/v1/AUTH_test/c/o\u0027, swob.HTTPCreated, {})"},{"line_number":1635,"context_line":""},{"line_number":1636,"context_line":"        copy_hook \u003d [None]"},{"line_number":1637,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_79074518","line":1634,"in_reply_to":"3a961159_68616a38","updated":"2014-12-24 09:38:26.000000000","message":"Thanks for the review. swift.copy_hook is not copied to new env when make_subrequest is executed for segments so this test could not pass. Without my fix there is no make_subrequest for segments in  this test so it worked.\nAnd swift.copy_hook is used for COPY or PUT so I think one of the methods is good for here.","commit_id":"1d93ab59cce3ea769c7bd33b6d4ceefacff0459b"}]}
