)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"315f83c0e3b0f234bf23b22a305f0ed7fdb56c59","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"cd6a982d_efcb3a4b","updated":"2021-12-09 15:40:34.000000000","message":"what\u0027s this all about?  looks like a negative line diff - i love deleting code","commit_id":"c64515d5fc14616b81f41568d8323a622a930c09"}],"swift/common/direct_client.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"03419c41018a550822a54145082cc3ebb9496158","unresolved":false,"context_lines":[{"line_number":217,"context_line":"        headers \u003d {}"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    path \u003d \u0027/%s\u0027 % account"},{"line_number":220,"context_line":"    _make_req(node, part, \u0027DELETE\u0027, path, gen_headers(headers, True),"},{"line_number":221,"context_line":"              \u0027Account\u0027, conn_timeout, response_timeout)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_03608ace","side":"PARENT","line":220,"range":{"start_line":220,"start_character":62,"end_line":220,"end_character":67},"updated":"2018-08-24 02:03:52.000000000","message":"This seems to imply we _always_ want a new new timestamp, don\u0027t trust the one from the headers. Maybe to make sure a direct delete will be sure to set the delete timestamp of the account to the latest time.\n\nBut I can\u0027t really think of a reason we\u0027d really worry about that. Unless someone deleted an account with an earlier timestamp which may then bypass the reaping delay getting it reaped almost straight away. Can that be miss used? Or a feature we may want. I.E drain deleted accounts because there taking up too much space.","commit_id":"8e09b6740a3338c3814b705230cad57125c69fed"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"1c184b87be39f617c5217b58965ecb744bfe0a2f","unresolved":false,"context_lines":[{"line_number":155,"context_line":"    with Timeout(conn_timeout):"},{"line_number":156,"context_line":"        conn \u003d http_connect(node[\u0027ip\u0027], node[\u0027port\u0027], node[\u0027device\u0027], part,"},{"line_number":157,"context_line":"                            \u0027GET\u0027, path, query_string\u003dqs,"},{"line_number":158,"context_line":"                            headers\u003dgen_headers(hdrs_in\u003dheaders))"},{"line_number":159,"context_line":"    with Timeout(response_timeout):"},{"line_number":160,"context_line":"        resp \u003d conn.getresponse()"},{"line_number":161,"context_line":"    if not is_success(resp.status):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_61d50a43","line":158,"range":{"start_line":158,"start_character":36,"end_line":158,"end_character":65},"updated":"2018-05-22 18:46:50.000000000","message":"nits) now we have only an arg for gen_headers so I\u0027m not sure the explicit kwarg is suitable for us.","commit_id":"713010350d0fc8a8c547bd11d919b05346384a46"}],"test/unit/common/test_direct_client.py":[{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"1c184b87be39f617c5217b58965ecb744bfe0a2f","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        headers \u003d direct_client.gen_headers()"},{"line_number":134,"context_line":"        self.assertEqual(headers[\u0027user-agent\u0027], stub_user_agent)"},{"line_number":135,"context_line":"        self.assertIn(\u0027x-timestamp\u0027, headers)"},{"line_number":136,"context_line":"        self.assertTrue(now - 1 \u003c Timestamp(headers[\u0027x-timestamp\u0027]) \u003c now + 1)"},{"line_number":137,"context_line":"        self.assertEqual(headers[\u0027x-timestamp\u0027],"},{"line_number":138,"context_line":"                         Timestamp(headers[\u0027x-timestamp\u0027]).internal)"},{"line_number":139,"context_line":"        self.assertEqual(2, len(headers))"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_419b2ec8","line":136,"range":{"start_line":136,"start_character":7,"end_line":136,"end_character":78},"updated":"2018-05-22 18:46:50.000000000","message":"Off-Topic: this would fail periodically when gen_headers takes a long time, maybe? I know this is not changed from the original code so it should be off-topic.","commit_id":"713010350d0fc8a8c547bd11d919b05346384a46"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"03419c41018a550822a54145082cc3ebb9496158","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        headers \u003d direct_client.gen_headers()"},{"line_number":134,"context_line":"        self.assertEqual(headers[\u0027user-agent\u0027], stub_user_agent)"},{"line_number":135,"context_line":"        self.assertIn(\u0027x-timestamp\u0027, headers)"},{"line_number":136,"context_line":"        self.assertTrue(now - 1 \u003c Timestamp(headers[\u0027x-timestamp\u0027]) \u003c now + 1)"},{"line_number":137,"context_line":"        self.assertEqual(headers[\u0027x-timestamp\u0027],"},{"line_number":138,"context_line":"                         Timestamp(headers[\u0027x-timestamp\u0027]).internal)"},{"line_number":139,"context_line":"        self.assertEqual(2, len(headers))"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_c3fff2fe","line":136,"range":{"start_line":136,"start_character":7,"end_line":136,"end_character":78},"in_reply_to":"5f7c97a3_419b2ec8","updated":"2018-08-24 02:03:52.000000000","message":"True, maybe mocking time would suit. But we can worry about that if we see it maybe.","commit_id":"713010350d0fc8a8c547bd11d919b05346384a46"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"6dd610523d8ed6dba51fbc93bf6a0ef72e2c855a","unresolved":false,"context_lines":[{"line_number":594,"context_line":""},{"line_number":595,"context_line":"        self.assertEqual(conn.req_headers[\u0027user-agent\u0027], self.user_agent)"},{"line_number":596,"context_line":"        self.assertEqual(\u0027bar\u0027, conn.req_headers.get(\u0027x-foo\u0027))"},{"line_number":597,"context_line":"        # X-Timestamp should always be set; this can be used server-side to"},{"line_number":598,"context_line":"        # decide whether an object has expired, and it doesn\u0027t *hurt* anything"},{"line_number":599,"context_line":"        # to include it"},{"line_number":600,"context_line":"        self.assertIn(\u0027x-timestamp\u0027, conn.req_headers)"},{"line_number":601,"context_line":"        self.assertEqual(headers, resp)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_9288a8c6","line":598,"range":{"start_line":597,"start_character":44,"end_line":598,"end_character":46},"updated":"2018-05-23 21:39:02.000000000","message":"This is a lie ATM -- I thought https://review.openstack.org/#/c/532595/ had already landed. But we *do* use X-Timestamp to calculate X-Delete-At from X-Delete-After following https://review.openstack.org/#/c/531290/","commit_id":"713010350d0fc8a8c547bd11d919b05346384a46"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"03419c41018a550822a54145082cc3ebb9496158","unresolved":false,"context_lines":[{"line_number":594,"context_line":""},{"line_number":595,"context_line":"        self.assertEqual(conn.req_headers[\u0027user-agent\u0027], self.user_agent)"},{"line_number":596,"context_line":"        self.assertEqual(\u0027bar\u0027, conn.req_headers.get(\u0027x-foo\u0027))"},{"line_number":597,"context_line":"        # X-Timestamp should always be set; this can be used server-side to"},{"line_number":598,"context_line":"        # decide whether an object has expired, and it doesn\u0027t *hurt* anything"},{"line_number":599,"context_line":"        # to include it"},{"line_number":600,"context_line":"        self.assertIn(\u0027x-timestamp\u0027, conn.req_headers)"},{"line_number":601,"context_line":"        self.assertEqual(headers, resp)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_400e783b","line":598,"range":{"start_line":597,"start_character":44,"end_line":598,"end_character":46},"in_reply_to":"5f7c97a3_9288a8c6","updated":"2018-08-24 02:03:52.000000000","message":"It is now the truth, both patches mentioned have landed.","commit_id":"713010350d0fc8a8c547bd11d919b05346384a46"}]}
