)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"037aa3623a2343dde3f658ede7ab083be01d9536","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"c4837335_b7b13d65","updated":"2023-06-28 08:38:44.000000000","message":"those test failures appear to be volume attach timeouts, need to try and find that bug somewhere to do a recheck.","commit_id":"73db9f9dd353031d3ba934be48411c553d34b4da"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c9669032c1804a0de2a7d249d31bc3907f25bd00","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"96c1ea6c_8759597b","updated":"2023-08-30 15:44:06.000000000","message":"I\u0027m OK with the patch, it unfortunately required me a lot of time to understand the driver logic, but I got it. Many more explicit testing would have saved me some time, but for the sake of this feature, let\u0027s not bikeshed about it.","commit_id":"9ef50ecb3085d76701809e66593d5d9f71617390"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"2f34fa5ff4978977e0ebaba18240545bec52694f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"0a10cb3b_f369abaf","updated":"2023-08-31 14:02:40.000000000","message":"OK, lgtm, you\u0027re now passing the right microversion. I just wonder unfortunately why testing didn\u0027t caught it, but I guess this is only testable end-to-end with Tempest or something else.","commit_id":"f5a12f511b26858131ee79ae5bce38e3f60b156d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6cf9dec0ddbed93b4fa0c716ab6a155f28769265","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"d5b5a1e2_8f00b361","updated":"2023-08-31 18:08:08.000000000","message":"holding +w since i have not reviewd the next patch but also the mutable config option look sus to me.","commit_id":"f5a12f511b26858131ee79ae5bce38e3f60b156d"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f0b7fdfb2375e4f7b9b726bb736eb1394cf94489","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"779a1c07_b3b86fa7","in_reply_to":"0a10cb3b_f369abaf","updated":"2023-08-31 14:12:54.000000000","message":"Yes, exactly. I haven\u0027t had chance to test this outside of unit tests yet. I was trying to get someone other than me to do that, but I haven\u0027t charmed anyone into that yet.\n\nI have done the DB change manually a few times, for \"reasons\", so I know the transfer should work. Similarly, I have clouds I support running with a peer_list of one, targeting different shards of nodes via conductor groups, so that bit should be fine too. So the worrying bits are mostly de-risked.","commit_id":"f5a12f511b26858131ee79ae5bce38e3f60b156d"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"32078ac6f7406daa928484d1b6f09a776e6c9a72","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"07709c6c_6d78ed9f","in_reply_to":"779a1c07_b3b86fa7","updated":"2023-08-31 16:19:33.000000000","message":"Yeah, JayF explained me why he didn\u0027t noticed the microversion problem when testing your branch : it was due to its own series being tested at the same time (and this merge was changing the microversion too)\n\nHonestly, I think it\u0027s OK to me to merge this by now.","commit_id":"f5a12f511b26858131ee79ae5bce38e3f60b156d"}],"nova/conf/ironic.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"e5f9821ef4fbb9f81abd7f89c50e8b97f27406f2","unresolved":true,"context_lines":[{"line_number":90,"context_line":"        regex\u003dr\u0027^[a-zA-Z0-9_.-]*$\u0027,"},{"line_number":91,"context_line":"        help\u003d\u0027Specify which ironic shard this nova-compute will manage. \u0027"},{"line_number":92,"context_line":"             \u0027This allows you to shard ironic nodes between compute \u0027"},{"line_number":93,"context_line":"             \u0027services without the need to create conductor groups.\u0027),"},{"line_number":94,"context_line":"    cfg.ListOpt("},{"line_number":95,"context_line":"        \u0027peer_list\u0027,"},{"line_number":96,"context_line":"        deprecated_for_removal\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":3,"id":"fc4d3366_2eb1e1e5","line":93,"updated":"2023-06-26 16:12:01.000000000","message":"I\u0027d suggest rewording this in a more positive manner, e.g.:\n\n\"Specify which Ironic shard this nova-compute will manage. This allows you to shard Ironic nodes between compute services across conductors and conductor groups.\"","commit_id":"417e50cc3e5188358d030862164f0704b68d2e76"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"ee5bb6209f100572c68e8152135c33bac810713a","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        regex\u003dr\u0027^[a-zA-Z0-9_.-]*$\u0027,"},{"line_number":91,"context_line":"        help\u003d\u0027Specify which ironic shard this nova-compute will manage. \u0027"},{"line_number":92,"context_line":"             \u0027This allows you to shard ironic nodes between compute \u0027"},{"line_number":93,"context_line":"             \u0027services without the need to create conductor groups.\u0027),"},{"line_number":94,"context_line":"    cfg.ListOpt("},{"line_number":95,"context_line":"        \u0027peer_list\u0027,"},{"line_number":96,"context_line":"        deprecated_for_removal\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9e2ac3ff_dbbc2af0","line":93,"in_reply_to":"fc4d3366_2eb1e1e5","updated":"2023-06-28 11:22:29.000000000","message":"yeah, good idea.","commit_id":"417e50cc3e5188358d030862164f0704b68d2e76"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6cf9dec0ddbed93b4fa0c716ab6a155f28769265","unresolved":true,"context_lines":[{"line_number":85,"context_line":"    cfg.StrOpt("},{"line_number":86,"context_line":"        \u0027shard\u0027,"},{"line_number":87,"context_line":"        default\u003dNone,"},{"line_number":88,"context_line":"        mutable\u003dTrue,"},{"line_number":89,"context_line":"        max_length\u003d255,"},{"line_number":90,"context_line":"        regex\u003dr\u0027^[a-zA-Z0-9_.-]*$\u0027,"},{"line_number":91,"context_line":"        help\u003d\u0027Specify which ironic shard this nova-compute will manage. \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"59d27279_f283ea18","line":88,"range":{"start_line":88,"start_character":7,"end_line":88,"end_character":21},"updated":"2023-08-31 18:08:08.000000000","message":"nit this probably should not be mutable, which means it ok for this to change at runtime without a full agent restart.\nthat might work but logically that is probably wrong we don\u0027t want to change the shard an agent is managing like this.","commit_id":"f5a12f511b26858131ee79ae5bce38e3f60b156d"}],"nova/tests/unit/virt/ironic/test_driver.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c9669032c1804a0de2a7d249d31bc3907f25bd00","unresolved":false,"context_lines":[{"line_number":3028,"context_line":"        mock_can_send.assert_called_once_with(min_version\u003d\u00271.46\u0027)"},{"line_number":3029,"context_line":""},{"line_number":3030,"context_line":"    @mock.patch.object(ironic_driver.IronicDriver, \u0027_can_send_version\u0027)"},{"line_number":3031,"context_line":"    def test__refresh_hash_ring_peer_list_shard(self, mock_can_send):"},{"line_number":3032,"context_line":"        services \u003d [\u0027host1\u0027, \u0027host2\u0027, \u0027host3\u0027]"},{"line_number":3033,"context_line":"        expected_hosts \u003d {\u0027host1\u0027}"},{"line_number":3034,"context_line":"        self.mock_is_up.return_value \u003d True"}],"source_content_type":"text/x-python","patch_set":6,"id":"f75b22c4_12246416","line":3031,"updated":"2023-08-30 15:44:06.000000000","message":"given we just call the method in https://review.opendev.org/c/openstack/nova/+/886980/6/nova/virt/ironic/driver.py#786, only mocking it is sufficient.\n\nthis is a bit obfuscating what we internally check but I understand the logic.","commit_id":"9ef50ecb3085d76701809e66593d5d9f71617390"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"2f34fa5ff4978977e0ebaba18240545bec52694f","unresolved":false,"context_lines":[{"line_number":3028,"context_line":"        mock_can_send.assert_called_once_with(min_version\u003d\u00271.46\u0027)"},{"line_number":3029,"context_line":""},{"line_number":3030,"context_line":"    @mock.patch.object(ironic_driver.IronicDriver, \u0027_can_send_version\u0027)"},{"line_number":3031,"context_line":"    def test__refresh_hash_ring_peer_list_shard(self, mock_can_send):"},{"line_number":3032,"context_line":"        services \u003d [\u0027host1\u0027, \u0027host2\u0027, \u0027host3\u0027]"},{"line_number":3033,"context_line":"        expected_hosts \u003d {\u0027host1\u0027}"},{"line_number":3034,"context_line":"        self.mock_is_up.return_value \u003d True"}],"source_content_type":"text/x-python","patch_set":6,"id":"fb2fdd93_71dbd277","line":3031,"in_reply_to":"efdc3910_23160bf2","updated":"2023-08-31 14:02:40.000000000","message":"thanks for explaining","commit_id":"9ef50ecb3085d76701809e66593d5d9f71617390"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"18d2365ed866da7b6d7b5d1d7c6994ed3239f960","unresolved":false,"context_lines":[{"line_number":3028,"context_line":"        mock_can_send.assert_called_once_with(min_version\u003d\u00271.46\u0027)"},{"line_number":3029,"context_line":""},{"line_number":3030,"context_line":"    @mock.patch.object(ironic_driver.IronicDriver, \u0027_can_send_version\u0027)"},{"line_number":3031,"context_line":"    def test__refresh_hash_ring_peer_list_shard(self, mock_can_send):"},{"line_number":3032,"context_line":"        services \u003d [\u0027host1\u0027, \u0027host2\u0027, \u0027host3\u0027]"},{"line_number":3033,"context_line":"        expected_hosts \u003d {\u0027host1\u0027}"},{"line_number":3034,"context_line":"        self.mock_is_up.return_value \u003d True"}],"source_content_type":"text/x-python","patch_set":6,"id":"efdc3910_23160bf2","line":3031,"in_reply_to":"f75b22c4_12246416","updated":"2023-08-31 13:30:47.000000000","message":"that code isn\u0027t being tested here.","commit_id":"9ef50ecb3085d76701809e66593d5d9f71617390"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c9669032c1804a0de2a7d249d31bc3907f25bd00","unresolved":true,"context_lines":[{"line_number":3035,"context_line":"        self.flags(host\u003d\u0027host1\u0027)"},{"line_number":3036,"context_line":"        self.flags(shard\u003d\u0027shard1\u0027, group\u003d\u0027ironic\u0027)"},{"line_number":3037,"context_line":"        self._test__refresh_hash_ring(services, expected_hosts,"},{"line_number":3038,"context_line":"                                      uncalled\u003d[\u0027host2\u0027, \u0027host3\u0027])"},{"line_number":3039,"context_line":""},{"line_number":3040,"context_line":"    @mock.patch.object(ironic_driver.IronicDriver, \u0027_can_send_version\u0027)"},{"line_number":3041,"context_line":"    def test__refresh_hash_ring_peer_list_shard_and_cg(self, mock_can_send):"}],"source_content_type":"text/x-python","patch_set":6,"id":"0f4272cc_23aeed81","line":3038,"updated":"2023-08-30 15:44:06.000000000","message":"yeah, since we are on host1, we just check host1 (we default back peer_list to the host), gotcha.","commit_id":"9ef50ecb3085d76701809e66593d5d9f71617390"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"18d2365ed866da7b6d7b5d1d7c6994ed3239f960","unresolved":false,"context_lines":[{"line_number":3035,"context_line":"        self.flags(host\u003d\u0027host1\u0027)"},{"line_number":3036,"context_line":"        self.flags(shard\u003d\u0027shard1\u0027, group\u003d\u0027ironic\u0027)"},{"line_number":3037,"context_line":"        self._test__refresh_hash_ring(services, expected_hosts,"},{"line_number":3038,"context_line":"                                      uncalled\u003d[\u0027host2\u0027, \u0027host3\u0027])"},{"line_number":3039,"context_line":""},{"line_number":3040,"context_line":"    @mock.patch.object(ironic_driver.IronicDriver, \u0027_can_send_version\u0027)"},{"line_number":3041,"context_line":"    def test__refresh_hash_ring_peer_list_shard_and_cg(self, mock_can_send):"}],"source_content_type":"text/x-python","patch_set":6,"id":"53aaf85f_6e530643","line":3038,"in_reply_to":"0f4272cc_23aeed81","updated":"2023-08-31 13:30:47.000000000","message":"Ack","commit_id":"9ef50ecb3085d76701809e66593d5d9f71617390"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c9669032c1804a0de2a7d249d31bc3907f25bd00","unresolved":true,"context_lines":[{"line_number":3036,"context_line":"        self.flags(shard\u003d\u0027shard1\u0027, group\u003d\u0027ironic\u0027)"},{"line_number":3037,"context_line":"        self._test__refresh_hash_ring(services, expected_hosts,"},{"line_number":3038,"context_line":"                                      uncalled\u003d[\u0027host2\u0027, \u0027host3\u0027])"},{"line_number":3039,"context_line":""},{"line_number":3040,"context_line":"    @mock.patch.object(ironic_driver.IronicDriver, \u0027_can_send_version\u0027)"},{"line_number":3041,"context_line":"    def test__refresh_hash_ring_peer_list_shard_and_cg(self, mock_can_send):"},{"line_number":3042,"context_line":"        services \u003d [\u0027host1\u0027, \u0027host2\u0027, \u0027host3\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"1c556111_0012b5a6","line":3039,"updated":"2023-08-30 15:44:06.000000000","message":"I\u0027d somehow have appreciated to see all the mocked calls to _can_send_version so we could have identified which code paths we\u0027re entering based on the values.","commit_id":"9ef50ecb3085d76701809e66593d5d9f71617390"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"18d2365ed866da7b6d7b5d1d7c6994ed3239f960","unresolved":false,"context_lines":[{"line_number":3036,"context_line":"        self.flags(shard\u003d\u0027shard1\u0027, group\u003d\u0027ironic\u0027)"},{"line_number":3037,"context_line":"        self._test__refresh_hash_ring(services, expected_hosts,"},{"line_number":3038,"context_line":"                                      uncalled\u003d[\u0027host2\u0027, \u0027host3\u0027])"},{"line_number":3039,"context_line":""},{"line_number":3040,"context_line":"    @mock.patch.object(ironic_driver.IronicDriver, \u0027_can_send_version\u0027)"},{"line_number":3041,"context_line":"    def test__refresh_hash_ring_peer_list_shard_and_cg(self, mock_can_send):"},{"line_number":3042,"context_line":"        services \u003d [\u0027host1\u0027, \u0027host2\u0027, \u0027host3\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"79b73c6f_ebb11be9","line":3039,"in_reply_to":"1c556111_0012b5a6","updated":"2023-08-31 13:30:47.000000000","message":"let me look into that actually, I missed that... Right I remember, its not called in these cases, I can assert that.","commit_id":"9ef50ecb3085d76701809e66593d5d9f71617390"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c9669032c1804a0de2a7d249d31bc3907f25bd00","unresolved":true,"context_lines":[{"line_number":3048,"context_line":"        # Note that this is getting ignored, because the shard is set"},{"line_number":3049,"context_line":"        self.flags(peer_list\u003d[\u0027host1\u0027, \u0027host2\u0027], group\u003d\u0027ironic\u0027)"},{"line_number":3050,"context_line":"        self._test__refresh_hash_ring(services, expected_hosts,"},{"line_number":3051,"context_line":"                                      uncalled\u003d[\u0027host2\u0027, \u0027host3\u0027])"},{"line_number":3052,"context_line":""},{"line_number":3053,"context_line":"    @mock.patch.object(ironic_driver.IronicDriver, \u0027_can_send_version\u0027)"},{"line_number":3054,"context_line":"    def test__refresh_hash_ring_peer_list_old_api(self, mock_can_send):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffbcd45a_15b58c92","line":3051,"updated":"2023-08-30 15:44:06.000000000","message":"So, I understand that we restrict on host1 given the code I just read, but I\u0027d have appreciated that we could introspect the call to _get_node_list by doublechechecking we were passing the conductor group.","commit_id":"9ef50ecb3085d76701809e66593d5d9f71617390"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"2f34fa5ff4978977e0ebaba18240545bec52694f","unresolved":false,"context_lines":[{"line_number":3048,"context_line":"        # Note that this is getting ignored, because the shard is set"},{"line_number":3049,"context_line":"        self.flags(peer_list\u003d[\u0027host1\u0027, \u0027host2\u0027], group\u003d\u0027ironic\u0027)"},{"line_number":3050,"context_line":"        self._test__refresh_hash_ring(services, expected_hosts,"},{"line_number":3051,"context_line":"                                      uncalled\u003d[\u0027host2\u0027, \u0027host3\u0027])"},{"line_number":3052,"context_line":""},{"line_number":3053,"context_line":"    @mock.patch.object(ironic_driver.IronicDriver, \u0027_can_send_version\u0027)"},{"line_number":3054,"context_line":"    def test__refresh_hash_ring_peer_list_old_api(self, mock_can_send):"}],"source_content_type":"text/x-python","patch_set":6,"id":"20dcd0c9_6b269687","line":3051,"in_reply_to":"bf33a588_fe7ecdc8","updated":"2023-08-31 14:02:40.000000000","message":"yup, I got this.","commit_id":"9ef50ecb3085d76701809e66593d5d9f71617390"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"18d2365ed866da7b6d7b5d1d7c6994ed3239f960","unresolved":false,"context_lines":[{"line_number":3048,"context_line":"        # Note that this is getting ignored, because the shard is set"},{"line_number":3049,"context_line":"        self.flags(peer_list\u003d[\u0027host1\u0027, \u0027host2\u0027], group\u003d\u0027ironic\u0027)"},{"line_number":3050,"context_line":"        self._test__refresh_hash_ring(services, expected_hosts,"},{"line_number":3051,"context_line":"                                      uncalled\u003d[\u0027host2\u0027, \u0027host3\u0027])"},{"line_number":3052,"context_line":""},{"line_number":3053,"context_line":"    @mock.patch.object(ironic_driver.IronicDriver, \u0027_can_send_version\u0027)"},{"line_number":3054,"context_line":"    def test__refresh_hash_ring_peer_list_old_api(self, mock_can_send):"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf33a588_fe7ecdc8","line":3051,"in_reply_to":"ffbcd45a_15b58c92","updated":"2023-08-31 13:30:47.000000000","message":"This is only testing _refresh_hash_ring, all those calls are check below in _test__refresh_cache. Its a bit opaque due to the sharing of code, but I didn\u0027t want to break the local style in here.","commit_id":"9ef50ecb3085d76701809e66593d5d9f71617390"}],"nova/virt/ironic/driver.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"53d1995bad2c7636886f3d1e964c081dbcf7c078","unresolved":true,"context_lines":[{"line_number":135,"context_line":"    # these configs are mutable; need to check at runtime and init"},{"line_number":136,"context_line":"    if CONF.ironic.conductor_group is not None:"},{"line_number":137,"context_line":"        peer_list \u003d set(CONF.ironic.peer_list)"},{"line_number":138,"context_line":"        if not peer_list:"},{"line_number":139,"context_line":"            LOG.error(\u0027FATAL: Peer list is not configured in the \u0027"},{"line_number":140,"context_line":"                      \u0027[ironic]/peer_list option; cannot map \u0027"},{"line_number":141,"context_line":"                      \u0027ironic nodes to compute services.\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"df2dd908_125f352e","line":138,"updated":"2023-06-28 08:50:24.000000000","message":"Ah, I think we should enforce we have an empty peer_list in the case where we have the sharding turned on, else we will have a royal mess.","commit_id":"73db9f9dd353031d3ba934be48411c553d34b4da"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"8f8114cb8ef1509978b9f212f5abeaa1114ef0db","unresolved":false,"context_lines":[{"line_number":135,"context_line":"    # these configs are mutable; need to check at runtime and init"},{"line_number":136,"context_line":"    if CONF.ironic.conductor_group is not None:"},{"line_number":137,"context_line":"        peer_list \u003d set(CONF.ironic.peer_list)"},{"line_number":138,"context_line":"        if not peer_list:"},{"line_number":139,"context_line":"            LOG.error(\u0027FATAL: Peer list is not configured in the \u0027"},{"line_number":140,"context_line":"                      \u0027[ironic]/peer_list option; cannot map \u0027"},{"line_number":141,"context_line":"                      \u0027ironic nodes to compute services.\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"f8a7fb23_9035ccde","line":138,"in_reply_to":"df2dd908_125f352e","updated":"2023-06-28 11:21:37.000000000","message":"Done","commit_id":"73db9f9dd353031d3ba934be48411c553d34b4da"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"18d2365ed866da7b6d7b5d1d7c6994ed3239f960","unresolved":true,"context_lines":[{"line_number":784,"context_line":"                kwargs[\u0027conductor_group\u0027] \u003d conductor_group"},{"line_number":785,"context_line":"            if shard is not None:"},{"line_number":786,"context_line":"                self._can_send_version(min_version\u003d\u00271.82\u0027)"},{"line_number":787,"context_line":"                kwargs[\u0027shard\u0027] \u003d shard"},{"line_number":788,"context_line":"            nodes \u003d _get_node_list(**kwargs)"},{"line_number":789,"context_line":"        except exception.IronicAPIVersionNotAvailable:"},{"line_number":790,"context_line":"            LOG.error(\u0027Required Ironic API version is not \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"df2705c7_6b850148","line":787,"updated":"2023-08-31 13:30:47.000000000","message":"Arg... this can\u0027t possibly work, I need to bump the Ironic microversion we request :facepalm:","commit_id":"9ef50ecb3085d76701809e66593d5d9f71617390"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6cf9dec0ddbed93b4fa0c716ab6a155f28769265","unresolved":false,"context_lines":[{"line_number":784,"context_line":"                kwargs[\u0027conductor_group\u0027] \u003d conductor_group"},{"line_number":785,"context_line":"            if shard is not None:"},{"line_number":786,"context_line":"                self._can_send_version(min_version\u003d\u00271.82\u0027)"},{"line_number":787,"context_line":"                kwargs[\u0027shard\u0027] \u003d shard"},{"line_number":788,"context_line":"            nodes \u003d _get_node_list(**kwargs)"},{"line_number":789,"context_line":"        except exception.IronicAPIVersionNotAvailable:"},{"line_number":790,"context_line":"            LOG.error(\u0027Required Ironic API version is not \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"05556dad_cea01547","line":787,"in_reply_to":"df2705c7_6b850148","updated":"2023-08-31 18:08:08.000000000","message":"Done","commit_id":"9ef50ecb3085d76701809e66593d5d9f71617390"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c9669032c1804a0de2a7d249d31bc3907f25bd00","unresolved":false,"context_lines":[{"line_number":790,"context_line":"            LOG.error(\u0027Required Ironic API version is not \u0027"},{"line_number":791,"context_line":"                      \u0027available to filter nodes by conductor group \u0027"},{"line_number":792,"context_line":"                      \u0027and shard.\u0027)"},{"line_number":793,"context_line":"            nodes \u003d _get_node_list(**kwargs)"},{"line_number":794,"context_line":""},{"line_number":795,"context_line":"        # NOTE(saga): As _get_node_list() will take a long"},{"line_number":796,"context_line":"        # time to return in large clusters we need to call it before"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffad89f7_50ea1b14","line":793,"updated":"2023-08-30 15:44:06.000000000","message":"yeah, backwards compat lgtm.","commit_id":"9ef50ecb3085d76701809e66593d5d9f71617390"}]}
