)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"78c86b8a49b19d41e7fcd9ae66de7355a7a63e4a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"a1b1a30e_cf3827df","updated":"2025-11-04 10:49:14.000000000","message":"LGTM","commit_id":"e450b8c670dcc769f8b64d5f4e0c182518592dee"},{"author":{"_account_id":34892,"name":"ASHWIN A NAIR","display_name":"indianwhocodes","email":"nairashwin952013@gmail.com","username":"indianwhocodes","status":"Nvidia"},"change_message_id":"bcff180c60141bca211ed7434c8409fedaac1a08","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"045481b0_8c6bcea9","updated":"2025-10-28 15:10:28.000000000","message":"LGTM!","commit_id":"e450b8c670dcc769f8b64d5f4e0c182518592dee"}],"test/unit/container/test_replicator.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"78c86b8a49b19d41e7fcd9ae66de7355a7a63e4a","unresolved":true,"context_lines":[{"line_number":391,"context_line":"            path \u003d \u0027/a/c/o_missing_%s\u0027 % next(missing_counter)"},{"line_number":392,"context_line":"            broker.put_object(path, time.time(), 0, \u0027content-type\u0027, \u0027etag\u0027,"},{"line_number":393,"context_line":"                              storage_policy_index\u003ddb.storage_policy_index)"},{"line_number":394,"context_line":"        test_db_replicator.FakeReplConnection \u003d \\"},{"line_number":395,"context_line":"            test_db_replicator.attach_fake_replication_rpc("},{"line_number":396,"context_line":"                self.rpc, replicate_hook\u003dput_more_objects)"},{"line_number":397,"context_line":"        db_replicator.ReplConnection \u003d test_db_replicator.FakeReplConnection"}],"source_content_type":"text/x-python","patch_set":1,"id":"ddb0a134_3d8974ed","side":"PARENT","line":394,"updated":"2025-11-04 10:49:14.000000000","message":"I\u0027m not sure why it was ever necessary to have this be a property of test_db_replicator, and then monkey-patch it","commit_id":"89e9ced9e56c0f3c5f7cdf75f40ff8c5f0dc04c3"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"78c86b8a49b19d41e7fcd9ae66de7355a7a63e4a","unresolved":true,"context_lines":[{"line_number":1833,"context_line":"        self.assertFalse(broker.sharding_initiated())"},{"line_number":1834,"context_line":""},{"line_number":1835,"context_line":"        replicate_hook \u003d mock.MagicMock()"},{"line_number":1836,"context_line":"        fake_repl_connection \u003d attach_fake_replication_rpc("},{"line_number":1837,"context_line":"            self.rpc, errors\u003d{\u0027merge_shard_ranges\u0027: ["},{"line_number":1838,"context_line":"                FakeHTTPResponse(HTTPServerError())]},"},{"line_number":1839,"context_line":"            replicate_hook\u003dreplicate_hook)"}],"source_content_type":"text/x-python","patch_set":1,"id":"8f0a36f5_cf719a4d","side":"PARENT","line":1836,"range":{"start_line":1836,"start_character":8,"end_line":1836,"end_character":28},"updated":"2025-11-04 10:49:14.000000000","message":"lol apparently I wasn\u0027t so keen on camel case variable names 😊","commit_id":"89e9ced9e56c0f3c5f7cdf75f40ff8c5f0dc04c3"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"78c86b8a49b19d41e7fcd9ae66de7355a7a63e4a","unresolved":true,"context_lines":[{"line_number":1837,"context_line":"            self.rpc, errors\u003d{\u0027merge_shard_ranges\u0027: ["},{"line_number":1838,"context_line":"                FakeHTTPResponse(HTTPServerError())]},"},{"line_number":1839,"context_line":"            replicate_hook\u003dreplicate_hook)"},{"line_number":1840,"context_line":"        db_replicator.ReplConnection \u003d fake_repl_connection"},{"line_number":1841,"context_line":"        part, node \u003d self._get_broker_part_node(remote_broker)"},{"line_number":1842,"context_line":"        info \u003d broker.get_replication_info()"},{"line_number":1843,"context_line":"        daemon \u003d replicator.ContainerReplicator({})"}],"source_content_type":"text/x-python","patch_set":1,"id":"04cd4099_95c54444","side":"PARENT","line":1840,"updated":"2025-11-04 10:49:14.000000000","message":"...but I was happy to run with the open-ended patching pattern 😮","commit_id":"89e9ced9e56c0f3c5f7cdf75f40ff8c5f0dc04c3"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"78c86b8a49b19d41e7fcd9ae66de7355a7a63e4a","unresolved":true,"context_lines":[{"line_number":2995,"context_line":"        broker \u003d self._get_broker(\u0027a\u0027, \u0027c\u0027, node_index\u003d0)"},{"line_number":2996,"context_line":""},{"line_number":2997,"context_line":"        daemon.sync_store.remove_synced_container.side_effect \u003d Exception("},{"line_number":2998,"context_line":"            \u0027Failed to remove sync_store entry\u0027)"},{"line_number":2999,"context_line":""},{"line_number":3000,"context_line":"        with mock.patch.object(db_replicator.Replicator, \u0027delete_db\u0027,"},{"line_number":3001,"context_line":"                               return_value\u003dTrue) as mock_delete_db:"}],"source_content_type":"text/x-python","patch_set":1,"id":"a7760e10_95003606","side":"PARENT","line":2998,"range":{"start_line":2998,"start_character":12,"end_line":2998,"end_character":47},"updated":"2025-11-04 10:49:14.000000000","message":"this wants you to believe that this exception message is significant w.r.t. the log message...but it isn\u0027t!\n\nSee https://review.opendev.org/c/openstack/swift/+/966022","commit_id":"89e9ced9e56c0f3c5f7cdf75f40ff8c5f0dc04c3"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"78c86b8a49b19d41e7fcd9ae66de7355a7a63e4a","unresolved":true,"context_lines":[{"line_number":2998,"context_line":"            \u0027Failed to remove sync_store entry\u0027)"},{"line_number":2999,"context_line":""},{"line_number":3000,"context_line":"        with mock.patch.object(db_replicator.Replicator, \u0027delete_db\u0027,"},{"line_number":3001,"context_line":"                               return_value\u003dTrue) as mock_delete_db:"},{"line_number":3002,"context_line":"            delete_success \u003d daemon.delete_db(broker)"},{"line_number":3003,"context_line":""},{"line_number":3004,"context_line":"        lines \u003d self.logger.get_lines_for_level(\u0027error\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fc3bed5d_a545bf0a","side":"PARENT","line":3001,"updated":"2025-11-04 10:49:14.000000000","message":"ok, we don\u0027t mind cleaning up the db as a side-effect of the test","commit_id":"89e9ced9e56c0f3c5f7cdf75f40ff8c5f0dc04c3"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"78c86b8a49b19d41e7fcd9ae66de7355a7a63e4a","unresolved":true,"context_lines":[{"line_number":402,"context_line":"        info \u003d broker.get_replication_info()"},{"line_number":403,"context_line":"        with mock.patch.object(db_replicator, \u0027ReplConnection\u0027,"},{"line_number":404,"context_line":"                               FakeReplConnection):"},{"line_number":405,"context_line":"            success \u003d daemon._repl_to_node(node, broker, part, info)"},{"line_number":406,"context_line":"        self.assertFalse(success)"},{"line_number":407,"context_line":"        # back off on the PUTs during replication..."},{"line_number":408,"context_line":"        FakeReplConnection \u003d test_db_replicator.attach_fake_replication_rpc("}],"source_content_type":"text/x-python","patch_set":1,"id":"9e70eec6_07d05466","line":405,"updated":"2025-11-04 10:49:14.000000000","message":"+1 this is definitely the pattern I\u0027d promote. Focussed patch, in and out, no lingering effects.","commit_id":"e450b8c670dcc769f8b64d5f4e0c182518592dee"}]}
