)]}'
{"test/functional/s3api/test_multi_upload.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ab29a79fae09d6022f850998b1b0eac05540065c","unresolved":false,"context_lines":[{"line_number":327,"context_line":"        swift_etag \u003d \u0027\"%s\"\u0027 % md5(concatted_etags).hexdigest()"},{"line_number":328,"context_line":"        # TODO: GET via swift api, check against swift_etag"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"        if tf.cluster_info[\u0027s3api\u0027].get(\u0027completed_grace_period\u0027, 0) \u003e 10:"},{"line_number":331,"context_line":"            # Should be safe to retry"},{"line_number":332,"context_line":"            status, headers, body \u003d \\"},{"line_number":333,"context_line":"                self._complete_multi_upload(bucket, key, upload_id, xml)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_0e345892","side":"PARENT","line":330,"updated":"2020-06-23 16:35:19.000000000","message":"Heh, whoops. Thanks!","commit_id":"008d720f1abb4f379e301d0073560c4fee41fa19"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ab29a79fae09d6022f850998b1b0eac05540065c","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    def _upload_part(self, bucket, key, upload_id, content\u003dNone, part_num\u003d1):"},{"line_number":79,"context_line":"        query \u003d \u0027partNumber\u003d%s\u0026uploadId\u003d%s\u0027 % (part_num, upload_id)"},{"line_number":80,"context_line":"        content \u003d content if content else b\u0027a\u0027 * self.min_segment_size"},{"line_number":81,"context_line":"        with self.quiet_boto_logging():"},{"line_number":82,"context_line":"            status, headers, body \u003d self.conn.make_request("},{"line_number":83,"context_line":"                \u0027PUT\u0027, bucket, key, body\u003dcontent, query\u003dquery)"},{"line_number":84,"context_line":"        return status, headers, body"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_8e1fc806","line":81,"updated":"2020-06-23 16:35:19.000000000","message":"+1000\n\nI often add something like\n\n import logging; logging.getLogger(\u0027boto\u0027).setLevel(logging.WARNING)\n\nwhen debugging test troubles; this is *way* better, kudos!","commit_id":"15dafa00248da12915a208434beef9426dddc980"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"67ad0e23485af6c0ce0dc201c00a3bf12944ec23","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    def _upload_part(self, bucket, key, upload_id, content\u003dNone, part_num\u003d1):"},{"line_number":79,"context_line":"        query \u003d \u0027partNumber\u003d%s\u0026uploadId\u003d%s\u0027 % (part_num, upload_id)"},{"line_number":80,"context_line":"        content \u003d content if content else b\u0027a\u0027 * self.min_segment_size"},{"line_number":81,"context_line":"        with self.quiet_boto_logging():"},{"line_number":82,"context_line":"            status, headers, body \u003d self.conn.make_request("},{"line_number":83,"context_line":"                \u0027PUT\u0027, bucket, key, body\u003dcontent, query\u003dquery)"},{"line_number":84,"context_line":"        return status, headers, body"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_a5cc4235","line":81,"in_reply_to":"bf51134e_8e1fc806","updated":"2020-06-25 15:01:56.000000000","message":"this got lost in translation yeah?","commit_id":"15dafa00248da12915a208434beef9426dddc980"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"75779fbfdc30eb38a315e5117fb360cede70b203","unresolved":false,"context_lines":[{"line_number":618,"context_line":"        query \u003d \u0027uploadId\u003d%s\u0027 % upload_id"},{"line_number":619,"context_line":"        status, headers, body \u003d \\"},{"line_number":620,"context_line":"            self.conn.make_request(\u0027DELETE\u0027, bucket, key, query\u003dquery)"},{"line_number":621,"context_line":"        self.assertEqual(status, 204)"},{"line_number":622,"context_line":"        # ... but it still works"},{"line_number":623,"context_line":"        status, headers, body \u003d \\"},{"line_number":624,"context_line":"            self.conn.make_request(\u0027HEAD\u0027, bucket, key)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_f00728c9","line":621,"updated":"2020-06-24 17:01:54.000000000","message":"Hol up\n\n Captured traceback:\n ~~~~~~~~~~~~~~~~~~~\n     Traceback (most recent call last):\n       File \"test/functional/s3api/test_multi_upload.py\", line 621, in test_abort_multi_upload_after_complete\n         self.assertEqual(status, 204)\n       File \"/usr/lib/python2.7/unittest/case.py\", line 513, in assertEqual\n         assertion_func(first, second, msg\u003dmsg)\n       File \"/usr/lib/python2.7/unittest/case.py\", line 506, in _baseAssertEqual\n         raise self.failureException(msg)\n     AssertionError: 404 !\u003d 204","commit_id":"15dafa00248da12915a208434beef9426dddc980"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ab29a79fae09d6022f850998b1b0eac05540065c","unresolved":false,"context_lines":[{"line_number":621,"context_line":"        self.assertEqual(status, 204)"},{"line_number":622,"context_line":"        # ... but it still works"},{"line_number":623,"context_line":"        status, headers, body \u003d \\"},{"line_number":624,"context_line":"            self.conn.make_request(\u0027HEAD\u0027, bucket, key)"},{"line_number":625,"context_line":"        self.assertEqual(status, 200)"},{"line_number":626,"context_line":""},{"line_number":627,"context_line":"    def test_abort_multi_upload_error(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_4eb810e4","line":624,"range":{"start_line":624,"start_character":36,"end_line":624,"end_character":40},"updated":"2020-06-23 16:35:19.000000000","message":"Stronger check if we go with a GET -- if we just HEAD, it won\u0027t validate that the segment still exists.","commit_id":"15dafa00248da12915a208434beef9426dddc980"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9e2f3946e32ad4af166ee45910b5a0191dc422d9","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    def _upload_part(self, bucket, key, upload_id, content\u003dNone, part_num\u003d1):"},{"line_number":79,"context_line":"        query \u003d \u0027partNumber\u003d%s\u0026uploadId\u003d%s\u0027 % (part_num, upload_id)"},{"line_number":80,"context_line":"        content \u003d content if content else b\u0027a\u0027 * self.min_segment_size"},{"line_number":81,"context_line":"        with self.quiet_boto_logging():"},{"line_number":82,"context_line":"            status, headers, body \u003d self.conn.make_request("},{"line_number":83,"context_line":"                \u0027PUT\u0027, bucket, key, body\u003dcontent, query\u003dquery)"},{"line_number":84,"context_line":"        return status, headers, body"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf51134e_ab36d301","line":81,"updated":"2020-06-25 17:11:58.000000000","message":"Not lost -- just squashed into parent.","commit_id":"b82f1d8a7fbc75ba707ef6e6a712ffd94e323034"}]}
