)]}'
{"swift/common/middleware/copy.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"27354285ba02c94e0c0406e3a85149681abcfde1","unresolved":false,"context_lines":[{"line_number":461,"context_line":"        ssc_ctx \u003d ServerSideCopyWebContext(self.app, self.logger)"},{"line_number":462,"context_line":"        source_resp \u003d self._get_source_object(ssc_ctx, source_path, req)"},{"line_number":463,"context_line":"        if source_resp.status_int \u003e\u003d HTTP_MULTIPLE_CHOICES:"},{"line_number":464,"context_line":"            close_if_possible(source_resp.app_iter)"},{"line_number":465,"context_line":"            return source_resp(source_resp.environ, start_response)"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"        # Create a new Request object based on the original request instance."}],"source_content_type":"text/x-python","patch_set":1,"id":"7f231b9d_de1b6b7e","line":464,"updated":"2017-06-15 20:23:27.000000000","message":"Should we drop this? I think this patch demonstrates that it wasn\u0027t doing what we wanted...","commit_id":"f7bcbffab4902e00357dae49f52e6b4f748f72d5"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ee0900d23d35f439df4103a2fe22f6252bc39645","unresolved":false,"context_lines":[{"line_number":461,"context_line":"        ssc_ctx \u003d ServerSideCopyWebContext(self.app, self.logger)"},{"line_number":462,"context_line":"        source_resp \u003d self._get_source_object(ssc_ctx, source_path, req)"},{"line_number":463,"context_line":"        if source_resp.status_int \u003e\u003d HTTP_MULTIPLE_CHOICES:"},{"line_number":464,"context_line":"            close_if_possible(source_resp.app_iter)"},{"line_number":465,"context_line":"            return source_resp(source_resp.environ, start_response)"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"        # Create a new Request object based on the original request instance."}],"source_content_type":"text/x-python","patch_set":1,"id":"7f231b9d_0154e21f","line":464,"in_reply_to":"7f231b9d_214d9ec3","updated":"2017-06-15 20:57:43.000000000","message":"It\u0027s because we return that response to the client -- so it\u0027s on eventlet (or in unit tests, our call_app function) to close it out.","commit_id":"f7bcbffab4902e00357dae49f52e6b4f748f72d5"},{"author":{"_account_id":13852,"name":"Romain LE DISEZ","email":"romain.le-disez@corp.ovh.com","username":"rledisez"},"change_message_id":"6400dde8e63ec6ca608ca9e7b50648e67d5831bb","unresolved":false,"context_lines":[{"line_number":461,"context_line":"        ssc_ctx \u003d ServerSideCopyWebContext(self.app, self.logger)"},{"line_number":462,"context_line":"        source_resp \u003d self._get_source_object(ssc_ctx, source_path, req)"},{"line_number":463,"context_line":"        if source_resp.status_int \u003e\u003d HTTP_MULTIPLE_CHOICES:"},{"line_number":464,"context_line":"            close_if_possible(source_resp.app_iter)"},{"line_number":465,"context_line":"            return source_resp(source_resp.environ, start_response)"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"        # Create a new Request object based on the original request instance."}],"source_content_type":"text/x-python","patch_set":1,"id":"7f231b9d_214d9ec3","line":464,"in_reply_to":"7f231b9d_de1b6b7e","updated":"2017-06-15 20:54:51.000000000","message":"First though, I don\u0027t think it handles the same case:\n- the patch is for situations were the object servers returns 200 but the content-length is too big.\n- the close_if_possible() pointed here is for situations were the object servers returns 404, 500, ...\n\nBut, in my test, it does not seem to create a leak if removed (I checked that the code is tested). I guess the connections are automatically closed in case of error (because content-length\u003d0, so httplib close it?)\n\nIt seems safe to remove it.","commit_id":"f7bcbffab4902e00357dae49f52e6b4f748f72d5"}],"test/unit/common/middleware/test_copy.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"614ee85e29682a02ecd33f91148dba40b1d62c53","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        self.ssc.logger \u003d self.app.logger"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def tearDown(self):"},{"line_number":102,"context_line":"        self.assertEqual(self.app.unclosed_requests, {})"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def call_app(self, req, app\u003dNone, expect_exception\u003dFalse):"},{"line_number":105,"context_line":"        if app is None:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f231b9d_3dec9328","line":102,"updated":"2017-06-16 10:40:08.000000000","message":"nice!","commit_id":"a7c8becd4ed41dbf1c88d36b8601d965d6e7cb75"}]}
