)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"233972abcb3fd5f0e4ae7ac0c20a230bca79ec26","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"13155d1c_a3841342","updated":"2025-11-26 02:34:21.000000000","message":"Nice one Al","commit_id":"c8da8676fdda47b66aa8dda6576b9311be6f57eb"}],"test/unit/obj/test_server.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"381a81044a2bd56813d97858fbfd96b072cce5f2","unresolved":true,"context_lines":[{"line_number":995,"context_line":"        resp, head_resp \u003d self._do_test_diskfile_metadata_unavailable(req)"},{"line_number":996,"context_line":"        self.assertEqual(resp.status_int, 201)"},{"line_number":997,"context_line":"        self.assertEqual(head_resp.status_int, 200)"},{"line_number":998,"context_line":"        self.assertEqual(Timestamp(req.headers[\u0027X-Timestamp\u0027]).normal,"},{"line_number":999,"context_line":"                         head_resp.headers[\u0027X-Timestamp\u0027])"},{"line_number":1000,"context_line":"        self.assertNotIn(\u0027X-Object-Meta-Test\u0027, head_resp.headers)"},{"line_number":1001,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"d0ed50ef_bb4eefc9","line":998,"range":{"start_line":998,"start_character":63,"end_line":998,"end_character":69},"updated":"2025-11-24 22:07:32.000000000","message":"It seems like most places you wanted to go using `internal` -- why `normal` here?","commit_id":"c5744de5c90714cdeb12d13c0daa65ea842e57ba"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"381a81044a2bd56813d97858fbfd96b072cce5f2","unresolved":true,"context_lines":[{"line_number":2023,"context_line":""},{"line_number":2024,"context_line":"        req \u003d Request.blank("},{"line_number":2025,"context_line":"            \u0027/sda1/p/a/c/o\u0027, environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027PUT\u0027},"},{"line_number":2026,"context_line":"            headers\u003d{\u0027X-Timestamp\u0027: new_timestamp.internal,"},{"line_number":2027,"context_line":"                     \u0027Content-Type\u0027: \u0027text/plain\u0027,"},{"line_number":2028,"context_line":"                     \u0027Content-Encoding\u0027: \u0027gzip\u0027})"},{"line_number":2029,"context_line":"        req.body \u003d \u0027VERIFY TWO\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"76a34938_507c82ff","line":2026,"updated":"2025-11-24 22:07:32.000000000","message":"I felt like something was off here at first; it took me a while to remember that provided there\u0027s no offset, `.normal` and `.internal` produce identical strings.\n\nIt also kinda bugs me that `make_timestamp_iter` can\u0027t produce timestamps with an offset, so they\u0027ll *always* be the same in most tests... 😞\n\nSide note: it\u0027s unfortunate that `make_timestamp_iter`\u0027s arg is named `offset`... but `delta` would *also* be confusing/inaccurate, and I don\u0027t have any better ideas offhand.","commit_id":"c5744de5c90714cdeb12d13c0daa65ea842e57ba"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"381a81044a2bd56813d97858fbfd96b072cce5f2","unresolved":true,"context_lines":[{"line_number":9680,"context_line":"                            headers\u003d{\u0027X-Timestamp\u0027: head_timestamp.internal})"},{"line_number":9681,"context_line":"        resp \u003d req.get_response(self.object_controller)"},{"line_number":9682,"context_line":"        self.assertEqual(resp.status_int, 200)"},{"line_number":9683,"context_line":"        self.assertEqual(resp.headers[\u0027X-Timestamp\u0027], put_timestamp.normal)"},{"line_number":9684,"context_line":""},{"line_number":9685,"context_line":"    def test_race_with_PUT_POST_PUT(self):"},{"line_number":9686,"context_line":"        existing_timestamp \u003d next(self.ts)"}],"source_content_type":"text/x-python","patch_set":2,"id":"6f64c065_01aac7ac","line":9683,"range":{"start_line":9683,"start_character":68,"end_line":9683,"end_character":74},"updated":"2025-11-24 22:07:32.000000000","message":"Not `internal`?","commit_id":"c5744de5c90714cdeb12d13c0daa65ea842e57ba"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"381a81044a2bd56813d97858fbfd96b072cce5f2","unresolved":true,"context_lines":[{"line_number":9730,"context_line":"                            headers\u003d{\u0027X-Timestamp\u0027: head_timestamp.internal})"},{"line_number":9731,"context_line":"        resp \u003d req.get_response(self.object_controller)"},{"line_number":9732,"context_line":"        self.assertEqual(resp.status_int, 200)"},{"line_number":9733,"context_line":"        self.assertEqual(resp.headers[\u0027X-Timestamp\u0027], put_timestamp.normal)"},{"line_number":9734,"context_line":""},{"line_number":9735,"context_line":"    def test_multiphase_put_draining(self):"},{"line_number":9736,"context_line":"        # We want to ensure that we read the whole response body even if"}],"source_content_type":"text/x-python","patch_set":2,"id":"51e37a68_72d477c7","line":9733,"range":{"start_line":9733,"start_character":68,"end_line":9733,"end_character":74},"updated":"2025-11-24 22:07:32.000000000","message":"Not `internal`?","commit_id":"c5744de5c90714cdeb12d13c0daa65ea842e57ba"}],"test/unit/proxy/controllers/test_obj.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"381a81044a2bd56813d97858fbfd96b072cce5f2","unresolved":true,"context_lines":[{"line_number":1081,"context_line":"        req \u003d swob.Request.blank(\u0027/v1/a/c/o\u0027, method\u003d\u0027HEAD\u0027,"},{"line_number":1082,"context_line":"                                 headers\u003d{\u0027X-Newest\u0027: \u0027true\u0027})"},{"line_number":1083,"context_line":"        num_expected_requests \u003d 2 * self.replicas()"},{"line_number":1084,"context_line":"        timestamps \u003d [self.ts() for i in range(num_expected_requests)]"},{"line_number":1085,"context_line":"        newest_timestamp \u003d timestamps[-1]"},{"line_number":1086,"context_line":"        random.shuffle(timestamps)"},{"line_number":1087,"context_line":"        backend_response_headers \u003d [{"}],"source_content_type":"text/x-python","patch_set":2,"id":"1be21d0d_e9230577","line":1084,"updated":"2025-11-24 22:07:32.000000000","message":"I was so confused for a sec -- I was *not* expecting the helper method just to wrap `next()`... but that\u0027s not this patch\u0027s fault.","commit_id":"c5744de5c90714cdeb12d13c0daa65ea842e57ba"}]}
