)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"fecd1ff5157b7f77a7e719b7b4051e54c18838dc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":38,"id":"d5d135df_4002cbe2","updated":"2026-09-09 18:30:46.000000000","message":"I think we\u0027ve got a miscorrection in `test/functional/test_symlink.py`, though the value of the comment seems dubious.","commit_id":"e1e4f8ea47b0f13219dc440c42cd5efd28887d11"},{"author":{"_account_id":37598,"name":"Ivan Anfimov","display_name":"Ivan Anfimov","email":"lazekteam@gmail.com","username":"anfimovir"},"change_message_id":"9509dbd6cc369e8eaab48f240eb87f2de2c940e4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":39,"id":"a76a42b7_7499ba0f","updated":"2026-09-18 21:57:30.000000000","message":"Thank you, Tim @tburke@nvidia.com","commit_id":"39ba31f469b2f51679ddf82dafd428944fd3fef0"},{"author":{"_account_id":37632,"name":"Dmitriy Chubinidze","email":"dcu995@gmail.com","username":"chubinidzedr"},"change_message_id":"c138643358f8dfd45c52a41fae451d277893cfb8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":39,"id":"2138a147_496daa94","updated":"2026-09-19 17:01:49.000000000","message":"recheck - retry limit","commit_id":"39ba31f469b2f51679ddf82dafd428944fd3fef0"}],"swift/common/internal_client.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"430a16a921a6b35b8ea6e5a424ee1638592e05a1","unresolved":false,"context_lines":[{"line_number":220,"context_line":"            if params:"},{"line_number":221,"context_line":"                req.params \u003d params"},{"line_number":222,"context_line":"            try:"},{"line_number":223,"context_line":"                # execute in a separate greenthread to avoid polluting corolocals"},{"line_number":224,"context_line":"                resp \u003d spawn(req.get_response, self.app).wait()"},{"line_number":225,"context_line":"            except (Exception, Timeout) as e:"},{"line_number":226,"context_line":"                err \u003d e"}],"source_content_type":"text/x-python","patch_set":35,"id":"ea0b7783_4e10d7fa","line":223,"updated":"2026-09-07 03:03:46.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"0f1ddf14834682f68ccc2a9a0d7a9a3eb8514ba1"}],"swift/common/wsgi.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"430a16a921a6b35b8ea6e5a424ee1638592e05a1","unresolved":false,"context_lines":[{"line_number":1026,"context_line":"    if kwargs.get(\u0027test_config\u0027):"},{"line_number":1027,"context_line":"        return 0"},{"line_number":1028,"context_line":""},{"line_number":1029,"context_line":"    # Do some daemonization process hygiene before we fork any children or run a"},{"line_number":1030,"context_line":"    # server without forking."},{"line_number":1031,"context_line":"    clean_up_daemon_hygiene()"},{"line_number":1032,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"67ea1649_a7a940c8","line":1029,"updated":"2026-09-07 03:03:46.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"0f1ddf14834682f68ccc2a9a0d7a9a3eb8514ba1"}],"test/functional/test_symlink.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"fecd1ff5157b7f77a7e719b7b4051e54c18838dc","unresolved":true,"context_lines":[{"line_number":620,"context_line":"                link_cont\u003dcontainer, link_obj\u003dlink_obj,"},{"line_number":621,"context_line":"                tgt_cont\u003dcontainer, tgt_obj\u003dprevious)"},{"line_number":622,"context_line":""},{"line_number":623,"context_line":"            # set correct link_obj to previous"},{"line_number":624,"context_line":"            previous \u003d link_obj"},{"line_number":625,"context_line":""},{"line_number":626,"context_line":"        # the last link is valid for symloop_max constraint"}],"source_content_type":"text/x-python","patch_set":38,"id":"e64bb98c_301163da","line":623,"range":{"start_line":623,"start_character":18,"end_line":623,"end_character":25},"updated":"2026-09-09 18:30:46.000000000","message":"I think \"current\" was intended here.\n\nOTOH, I\u0027d be partial toward just deleting the comment; it seems to be stating the line of code exactly and not adding any additional context.","commit_id":"e1e4f8ea47b0f13219dc440c42cd5efd28887d11"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"72093a8b7ec62775b0ef3f60c2a3f9c6ce23fa39","unresolved":false,"context_lines":[{"line_number":620,"context_line":"                link_cont\u003dcontainer, link_obj\u003dlink_obj,"},{"line_number":621,"context_line":"                tgt_cont\u003dcontainer, tgt_obj\u003dprevious)"},{"line_number":622,"context_line":""},{"line_number":623,"context_line":"            # set correct link_obj to previous"},{"line_number":624,"context_line":"            previous \u003d link_obj"},{"line_number":625,"context_line":""},{"line_number":626,"context_line":"        # the last link is valid for symloop_max constraint"}],"source_content_type":"text/x-python","patch_set":38,"id":"3f3d56f7_94acd866","line":623,"range":{"start_line":623,"start_character":18,"end_line":623,"end_character":25},"in_reply_to":"e64bb98c_301163da","updated":"2026-09-18 21:38:29.000000000","message":"Done","commit_id":"e1e4f8ea47b0f13219dc440c42cd5efd28887d11"}],"test/probe/test_object_expirer.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"fecd1ff5157b7f77a7e719b7b4051e54c18838dc","unresolved":true,"context_lines":[{"line_number":186,"context_line":"        # header that it can be deleted by expirer. If there are objects"},{"line_number":187,"context_line":"        # either which don\u0027t have x-delete-at header as metadata or which"},{"line_number":188,"context_line":"        # have different x-delete-at value from x-if-delete-at value,"},{"line_number":189,"context_line":"        # object-expirer\u0027s delete will fail with 412 PreconditionFailed."},{"line_number":190,"context_line":"        # However, if some of the objects are in handoff nodes, the expirer"},{"line_number":191,"context_line":"        # can put the tombstone with the timestamp the same as x-delete-at and"},{"line_number":192,"context_line":"        # the object consistency will be resolved as the newer timestamp will"}],"source_content_type":"text/x-python","patch_set":38,"id":"54ad7c8e_f1431b81","line":189,"range":{"start_line":189,"start_character":53,"end_line":189,"end_character":71},"updated":"2026-09-09 18:30:46.000000000","message":"Probably want to add a space here, while we\u0027re at it.","commit_id":"e1e4f8ea47b0f13219dc440c42cd5efd28887d11"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"72093a8b7ec62775b0ef3f60c2a3f9c6ce23fa39","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        # header that it can be deleted by expirer. If there are objects"},{"line_number":187,"context_line":"        # either which don\u0027t have x-delete-at header as metadata or which"},{"line_number":188,"context_line":"        # have different x-delete-at value from x-if-delete-at value,"},{"line_number":189,"context_line":"        # object-expirer\u0027s delete will fail with 412 PreconditionFailed."},{"line_number":190,"context_line":"        # However, if some of the objects are in handoff nodes, the expirer"},{"line_number":191,"context_line":"        # can put the tombstone with the timestamp the same as x-delete-at and"},{"line_number":192,"context_line":"        # the object consistency will be resolved as the newer timestamp will"}],"source_content_type":"text/x-python","patch_set":38,"id":"b75c6964_c63e09a5","line":189,"range":{"start_line":189,"start_character":53,"end_line":189,"end_character":71},"in_reply_to":"54ad7c8e_f1431b81","updated":"2026-09-18 21:38:29.000000000","message":"Done","commit_id":"e1e4f8ea47b0f13219dc440c42cd5efd28887d11"}],"test/unit/common/middleware/s3api/__init__.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"430a16a921a6b35b8ea6e5a424ee1638592e05a1","unresolved":false,"context_lines":[{"line_number":348,"context_line":"                    \u0027Date\u0027: self.get_date_header()})"},{"line_number":349,"context_line":"                status, headers, body \u003d self.call_s3api(req)"},{"line_number":350,"context_line":"                self.assertEqual(int(status.split()[0]), expected,"},{"line_number":351,"context_line":"                                 \u0027In tearDown it seems the test (accidentally?) \u0027"},{"line_number":352,"context_line":"                                 \u0027broke ACL access for %s to %s\u0027 % ("},{"line_number":353,"context_line":"                                     account, path))"}],"source_content_type":"text/x-python","patch_set":35,"id":"554956d5_9f270791","line":351,"updated":"2026-09-07 03:03:46.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"0f1ddf14834682f68ccc2a9a0d7a9a3eb8514ba1"}],"test/unit/common/middleware/s3api/test_service.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"430a16a921a6b35b8ea6e5a424ee1638592e05a1","unresolved":false,"context_lines":[{"line_number":27,"context_line":"def create_bucket_list_json(buckets):"},{"line_number":28,"context_line":"    \"\"\""},{"line_number":29,"context_line":"    Create a json from bucket list"},{"line_number":30,"context_line":"    :param buckets: a list of tuples (or lists) consisting of elements ordered as"},{"line_number":31,"context_line":"                    name, count, bytes"},{"line_number":32,"context_line":"    \"\"\""},{"line_number":33,"context_line":"    bucket_list \u003d [{\u0027name\u0027: item[0], \u0027count\u0027: item[1], \u0027bytes\u0027: item[2]}"}],"source_content_type":"text/x-python","patch_set":35,"id":"5e5e54a7_fc64bb20","line":30,"updated":"2026-09-07 03:03:46.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"0f1ddf14834682f68ccc2a9a0d7a9a3eb8514ba1"}],"test/unit/obj/test_diskfile.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"fecd1ff5157b7f77a7e719b7b4051e54c18838dc","unresolved":true,"context_lines":[{"line_number":7467,"context_line":"    def test_reader_frag_check_does_not_quarantine_if_its_not_binary(self):"},{"line_number":7468,"context_line":"        # This may look weird but for super-safety, check the"},{"line_number":7469,"context_line":"        # ECDiskFileReader._frag_check doesn\u0027t quarantine when non-binary"},{"line_number":7470,"context_line":"        # type chunk incoming (that would occurre only from coding bug)"},{"line_number":7471,"context_line":"        policy \u003d POLICIES.default"},{"line_number":7472,"context_line":""},{"line_number":7473,"context_line":"        df, df_data \u003d self._create_test_file(b\u0027x\u0027 * policy.ec_segment_size,"}],"source_content_type":"text/x-python","patch_set":38,"id":"b34daef2_1273ff4c","line":7470,"range":{"start_line":7470,"start_character":42,"end_line":7470,"end_character":49},"updated":"2026-09-09 18:30:46.000000000","message":"May as well fix this, too: \"occur\"","commit_id":"e1e4f8ea47b0f13219dc440c42cd5efd28887d11"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"72093a8b7ec62775b0ef3f60c2a3f9c6ce23fa39","unresolved":false,"context_lines":[{"line_number":7467,"context_line":"    def test_reader_frag_check_does_not_quarantine_if_its_not_binary(self):"},{"line_number":7468,"context_line":"        # This may look weird but for super-safety, check the"},{"line_number":7469,"context_line":"        # ECDiskFileReader._frag_check doesn\u0027t quarantine when non-binary"},{"line_number":7470,"context_line":"        # type chunk incoming (that would occurre only from coding bug)"},{"line_number":7471,"context_line":"        policy \u003d POLICIES.default"},{"line_number":7472,"context_line":""},{"line_number":7473,"context_line":"        df, df_data \u003d self._create_test_file(b\u0027x\u0027 * policy.ec_segment_size,"}],"source_content_type":"text/x-python","patch_set":38,"id":"4e3651c1_4f00bf7f","line":7470,"range":{"start_line":7470,"start_character":42,"end_line":7470,"end_character":49},"in_reply_to":"b34daef2_1273ff4c","updated":"2026-09-18 21:38:29.000000000","message":"Done","commit_id":"e1e4f8ea47b0f13219dc440c42cd5efd28887d11"}],"test/unit/obj/test_replicator.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"fecd1ff5157b7f77a7e719b7b4051e54c18838dc","unresolved":true,"context_lines":[{"line_number":1920,"context_line":"                             \u0027Expected %s but got %s for path %s\u0027 %"},{"line_number":1921,"context_line":"                             (expected_node_count[path_end], len(nodes), path))"},{"line_number":1922,"context_line":"        # partitions 0 and 2 attempt 3 calls each per policy to get_hashes \u003d 12"},{"line_number":1923,"context_line":"        # partitions 3 attempts 2 calls per policy to get_hashes \u003d 4"},{"line_number":1924,"context_line":"        # partitions 1 doesn\u0027t get_hashes because of revert"},{"line_number":1925,"context_line":"        self.assertEqual(16, self.get_hash_count)"},{"line_number":1926,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"883be90d_f43e576e","line":1923,"range":{"start_line":1923,"start_character":10,"end_line":1923,"end_character":20},"updated":"2026-09-09 18:30:46.000000000","message":"Might as well fix this to just be \"partition 3\" -- and below for \"partition 1\".","commit_id":"e1e4f8ea47b0f13219dc440c42cd5efd28887d11"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"72093a8b7ec62775b0ef3f60c2a3f9c6ce23fa39","unresolved":false,"context_lines":[{"line_number":1920,"context_line":"                             \u0027Expected %s but got %s for path %s\u0027 %"},{"line_number":1921,"context_line":"                             (expected_node_count[path_end], len(nodes), path))"},{"line_number":1922,"context_line":"        # partitions 0 and 2 attempt 3 calls each per policy to get_hashes \u003d 12"},{"line_number":1923,"context_line":"        # partitions 3 attempts 2 calls per policy to get_hashes \u003d 4"},{"line_number":1924,"context_line":"        # partitions 1 doesn\u0027t get_hashes because of revert"},{"line_number":1925,"context_line":"        self.assertEqual(16, self.get_hash_count)"},{"line_number":1926,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"55fae467_54796b08","line":1923,"range":{"start_line":1923,"start_character":10,"end_line":1923,"end_character":20},"in_reply_to":"883be90d_f43e576e","updated":"2026-09-18 21:38:29.000000000","message":"Done","commit_id":"e1e4f8ea47b0f13219dc440c42cd5efd28887d11"}],"test/unit/proxy/test_server.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"fecd1ff5157b7f77a7e719b7b4051e54c18838dc","unresolved":false,"context_lines":[{"line_number":8896,"context_line":""},{"line_number":8897,"context_line":"        @public"},{"line_number":8898,"context_line":"        def bad_disk(req):"},{"line_number":8899,"context_line":"            return Response(status\u003d507, body\u003d\"broken\")"},{"line_number":8900,"context_line":""},{"line_number":8901,"context_line":"        ensure_container \u003d Request.blank("},{"line_number":8902,"context_line":"            \"/v1/a/ec-crazytown\","}],"source_content_type":"text/x-python","patch_set":38,"id":"32006ada_6110832d","line":8899,"updated":"2026-09-09 18:30:46.000000000","message":"May have been intentional: http://www.catb.org/~esr/jargon/html/B/borken.html\n\nBut also, it doesn\u0027t really matter. I\u0027m happy either way.","commit_id":"e1e4f8ea47b0f13219dc440c42cd5efd28887d11"}]}
