)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"421a9edb94091afe4eb2ed654e4a9c3f154e48eb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"666d7709_8cb42850","updated":"2022-01-06 20:35:50.000000000","message":"These timeouts are getting more and more annoying :-/","commit_id":"87f52218791c3988144bd6317f2bc5709153ecfc"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"752337fa717e9aff4b6be5dcf7a6a660188fc454","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"e9d83579_8de89b60","updated":"2022-01-28 01:15:13.000000000","message":"I like how simple the change is. Nice. ","commit_id":"1907594bd8b63b48c86fcb0dc95105484d97bbf8"}],"swift/obj/reconstructor.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"fde7acf8aa56cd71e25d5d5a50c763b4bd4728fc","unresolved":true,"context_lines":[{"line_number":1440,"context_line":"            self.run_pool \u003d GreenPool(size\u003dself.concurrency)"},{"line_number":1441,"context_line":"            for part_info in self.collect_parts(**kwargs):"},{"line_number":1442,"context_line":"                sleep()  # Give spawns a cycle"},{"line_number":1443,"context_line":"                if not self.check_ring(part_info[\u0027policy\u0027].object_ring):"},{"line_number":1444,"context_line":"                    if not ring_changes.get(part_info[\u0027policy\u0027]):"},{"line_number":1445,"context_line":"                        ring_changes[part_info[\u0027policy\u0027]] \u003d True"},{"line_number":1446,"context_line":"                        self.logger.info("}],"source_content_type":"text/x-python","patch_set":1,"id":"8cc4693b_cdb22826","line":1443,"range":{"start_line":1443,"start_character":16,"end_line":1443,"end_character":71},"updated":"2022-01-05 10:24:37.000000000","message":"we could also check in ring_changes to save some disk io once the ring change has been detected","commit_id":"69eb52a2e8689ee6cff936309ad479f7e3b6ebb0"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"3a3c13d5cd45352c68154eaa4bd737308b71a159","unresolved":false,"context_lines":[{"line_number":1440,"context_line":"            self.run_pool \u003d GreenPool(size\u003dself.concurrency)"},{"line_number":1441,"context_line":"            for part_info in self.collect_parts(**kwargs):"},{"line_number":1442,"context_line":"                sleep()  # Give spawns a cycle"},{"line_number":1443,"context_line":"                if not self.check_ring(part_info[\u0027policy\u0027].object_ring):"},{"line_number":1444,"context_line":"                    if not ring_changes.get(part_info[\u0027policy\u0027]):"},{"line_number":1445,"context_line":"                        ring_changes[part_info[\u0027policy\u0027]] \u003d True"},{"line_number":1446,"context_line":"                        self.logger.info("}],"source_content_type":"text/x-python","patch_set":1,"id":"a4b0159d_c27b8f7c","line":1443,"range":{"start_line":1443,"start_character":16,"end_line":1443,"end_character":71},"in_reply_to":"8cc4693b_cdb22826","updated":"2022-01-05 23:55:14.000000000","message":"Done","commit_id":"69eb52a2e8689ee6cff936309ad479f7e3b6ebb0"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"fde7acf8aa56cd71e25d5d5a50c763b4bd4728fc","unresolved":true,"context_lines":[{"line_number":1445,"context_line":"                        ring_changes[part_info[\u0027policy\u0027]] \u003d True"},{"line_number":1446,"context_line":"                        self.logger.info("},{"line_number":1447,"context_line":"                            \"Ring change detected for policy %d (%s). \""},{"line_number":1448,"context_line":"                            \"Aborting current reconstruction pass.\","},{"line_number":1449,"context_line":"                            part_info[\u0027policy\u0027].idx, part_info[\u0027policy\u0027].name)"},{"line_number":1450,"context_line":"                    continue"},{"line_number":1451,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"71ab5e34_9630a36c","line":1448,"range":{"start_line":1448,"start_character":29,"end_line":1448,"end_character":65},"updated":"2022-01-05 10:24:37.000000000","message":"nit: maybe add \"for this policy\" for clarity","commit_id":"69eb52a2e8689ee6cff936309ad479f7e3b6ebb0"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"3a3c13d5cd45352c68154eaa4bd737308b71a159","unresolved":false,"context_lines":[{"line_number":1445,"context_line":"                        ring_changes[part_info[\u0027policy\u0027]] \u003d True"},{"line_number":1446,"context_line":"                        self.logger.info("},{"line_number":1447,"context_line":"                            \"Ring change detected for policy %d (%s). \""},{"line_number":1448,"context_line":"                            \"Aborting current reconstruction pass.\","},{"line_number":1449,"context_line":"                            part_info[\u0027policy\u0027].idx, part_info[\u0027policy\u0027].name)"},{"line_number":1450,"context_line":"                    continue"},{"line_number":1451,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"4abea3b2_c09603ba","line":1448,"range":{"start_line":1448,"start_character":29,"end_line":1448,"end_character":65},"in_reply_to":"71ab5e34_9630a36c","updated":"2022-01-05 23:55:14.000000000","message":"Done","commit_id":"69eb52a2e8689ee6cff936309ad479f7e3b6ebb0"}],"test/unit/obj/test_reconstructor.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"fde7acf8aa56cd71e25d5d5a50c763b4bd4728fc","unresolved":true,"context_lines":[{"line_number":874,"context_line":"        msgs \u003d self.logger.get_lines_for_level(\u0027info\u0027)"},{"line_number":875,"context_line":"        self.assertIn(\u0027Ring change detected for policy 1 (one). \u0027"},{"line_number":876,"context_line":"                      \u0027Aborting current reconstruction pass.\u0027, msgs[0])"},{"line_number":877,"context_line":"        self.assertEqual(self.reconstructor.reconstruction_count, 0)"},{"line_number":878,"context_line":""},{"line_number":879,"context_line":"    def test_build_reconstruction_jobs(self):"},{"line_number":880,"context_line":"        self.reconstructor._reset_stats()"}],"source_content_type":"text/x-python","patch_set":1,"id":"1acbba76_5deae25a","line":877,"updated":"2022-01-05 10:24:37.000000000","message":"hmmm, so no assertion that jobs are built for other policies ?","commit_id":"69eb52a2e8689ee6cff936309ad479f7e3b6ebb0"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"3a3c13d5cd45352c68154eaa4bd737308b71a159","unresolved":false,"context_lines":[{"line_number":874,"context_line":"        msgs \u003d self.logger.get_lines_for_level(\u0027info\u0027)"},{"line_number":875,"context_line":"        self.assertIn(\u0027Ring change detected for policy 1 (one). \u0027"},{"line_number":876,"context_line":"                      \u0027Aborting current reconstruction pass.\u0027, msgs[0])"},{"line_number":877,"context_line":"        self.assertEqual(self.reconstructor.reconstruction_count, 0)"},{"line_number":878,"context_line":""},{"line_number":879,"context_line":"    def test_build_reconstruction_jobs(self):"},{"line_number":880,"context_line":"        self.reconstructor._reset_stats()"}],"source_content_type":"text/x-python","patch_set":1,"id":"ccc74997_b89c6f61","line":877,"in_reply_to":"1acbba76_5deae25a","updated":"2022-01-05 23:55:14.000000000","message":"Done","commit_id":"69eb52a2e8689ee6cff936309ad479f7e3b6ebb0"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1096a048f2314b3baa6d7f1696f5fa2c85c167bc","unresolved":true,"context_lines":[{"line_number":885,"context_line":"            self.reconstructor.reconstruct()"},{"line_number":886,"context_line":"        msgs \u003d self.logger.get_lines_for_level(\u0027info\u0027)"},{"line_number":887,"context_line":"        self.assertIn(\u0027Ring change detected for policy 1 (one). Aborting \u0027"},{"line_number":888,"context_line":"                      \u0027current reconstruction pass for this policy.\u0027, msgs)"},{"line_number":889,"context_line":"        self.assertEqual("},{"line_number":890,"context_line":"            [call[1][0][\u0027job_type\u0027] for call in mock_pj.mock_calls],"},{"line_number":891,"context_line":"            [\u0027sync_only\u0027] * 2)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9040b0c1_ade4092c","line":888,"updated":"2022-01-06 11:51:57.000000000","message":"the check for policy already in changed_rings would also be covered if this assertion was:\n\n          self.assertEqual(1, len(\n              [msg for msg in msgs\n               if msg \u003d\u003d \u0027Ring change detected for policy 1 (one). \u0027\n                         \u0027Aborting current reconstruction pass for this policy.\u0027\n             ]))","commit_id":"87f52218791c3988144bd6317f2bc5709153ecfc"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"421a9edb94091afe4eb2ed654e4a9c3f154e48eb","unresolved":false,"context_lines":[{"line_number":885,"context_line":"            self.reconstructor.reconstruct()"},{"line_number":886,"context_line":"        msgs \u003d self.logger.get_lines_for_level(\u0027info\u0027)"},{"line_number":887,"context_line":"        self.assertIn(\u0027Ring change detected for policy 1 (one). Aborting \u0027"},{"line_number":888,"context_line":"                      \u0027current reconstruction pass for this policy.\u0027, msgs)"},{"line_number":889,"context_line":"        self.assertEqual("},{"line_number":890,"context_line":"            [call[1][0][\u0027job_type\u0027] for call in mock_pj.mock_calls],"},{"line_number":891,"context_line":"            [\u0027sync_only\u0027] * 2)"}],"source_content_type":"text/x-python","patch_set":2,"id":"2a8afd15_48fb8e46","line":888,"in_reply_to":"9040b0c1_ade4092c","updated":"2022-01-06 20:35:50.000000000","message":"Done","commit_id":"87f52218791c3988144bd6317f2bc5709153ecfc"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"1096a048f2314b3baa6d7f1696f5fa2c85c167bc","unresolved":true,"context_lines":[{"line_number":892,"context_line":"        self.assertEqual("},{"line_number":893,"context_line":"            [call[1][0][\u0027policy\u0027] for call in mock_pj.mock_calls],"},{"line_number":894,"context_line":"            [POLICIES[2]] * 2)"},{"line_number":895,"context_line":"        # It\u0027s a little unclear why partition 2 just gets cleaned up..."},{"line_number":896,"context_line":"        self.assertEqual("},{"line_number":897,"context_line":"            {call[1][0][\u0027partition\u0027] for call in mock_pj.mock_calls},"},{"line_number":898,"context_line":"            {0, 1})"}],"source_content_type":"text/x-python","patch_set":2,"id":"6e94e5b8_4023d6e2","line":895,"range":{"start_line":895,"start_character":10,"end_line":895,"end_character":71},"updated":"2022-01-06 11:51:57.000000000","message":"part 2 doesn\u0027t belong on sda1 in the fake ring so it gets deleted (see line 1455 onwards in reconstructor.py)","commit_id":"87f52218791c3988144bd6317f2bc5709153ecfc"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"421a9edb94091afe4eb2ed654e4a9c3f154e48eb","unresolved":false,"context_lines":[{"line_number":892,"context_line":"        self.assertEqual("},{"line_number":893,"context_line":"            [call[1][0][\u0027policy\u0027] for call in mock_pj.mock_calls],"},{"line_number":894,"context_line":"            [POLICIES[2]] * 2)"},{"line_number":895,"context_line":"        # It\u0027s a little unclear why partition 2 just gets cleaned up..."},{"line_number":896,"context_line":"        self.assertEqual("},{"line_number":897,"context_line":"            {call[1][0][\u0027partition\u0027] for call in mock_pj.mock_calls},"},{"line_number":898,"context_line":"            {0, 1})"}],"source_content_type":"text/x-python","patch_set":2,"id":"85421655_46228210","line":895,"range":{"start_line":895,"start_character":10,"end_line":895,"end_character":71},"in_reply_to":"6e94e5b8_4023d6e2","updated":"2022-01-06 20:35:50.000000000","message":"Ack","commit_id":"87f52218791c3988144bd6317f2bc5709153ecfc"}]}
