)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"2243ebc00c42a1f5c7db437a7d8e83f302e84871","unresolved":false,"context_lines":[{"line_number":11,"context_line":"likely on single-node (i.e. undercloud) installations, we will"},{"line_number":12,"context_line":"attempt to do the plug and can fail because no ironic conductors"},{"line_number":13,"context_line":"are available to do the job. It sounds like ironic should be"},{"line_number":14,"context_line":"returning 500 in this case, and maybe the long-term solution is"},{"line_number":15,"context_line":"to do that and have ironicclient manage the retry for us."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"For the moment, ironic shows its hand in the message, indicating"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"5f7c97a3_af1a1b15","line":14,"range":{"start_line":14,"start_character":10,"end_line":14,"end_character":13},"updated":"2018-06-20 09:56:31.000000000","message":"nit: 503","commit_id":"07f027d2b068caa1ebde81e476ce01f55a0fa5b1"}],"nova/tests/unit/virt/ironic/test_driver.py":[{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"2243ebc00c42a1f5c7db437a7d8e83f302e84871","unresolved":false,"context_lines":[{"line_number":1895,"context_line":"    @mock.patch(\u0027time.sleep\u0027)"},{"line_number":1896,"context_line":"    @mock.patch.object(FAKE_CLIENT, \u0027node\u0027)"},{"line_number":1897,"context_line":"    def test_plug_vifs_failure_no_conductor(self, mock_node, mock_sleep):"},{"line_number":1898,"context_line":"        node_uuid \u003d \u0027aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\u0027"},{"line_number":1899,"context_line":"        node \u003d _get_cached_node(uuid\u003dnode_uuid)"},{"line_number":1900,"context_line":"        instance \u003d fake_instance.fake_instance_obj(self.ctx,"},{"line_number":1901,"context_line":"                                                   node\u003dnode_uuid)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_4f9ca769","line":1898,"updated":"2018-06-20 09:56:31.000000000","message":"nit: should probably use uuids module for real uuids here and throughout. It\u0027s following the pattern, though, so meh.","commit_id":"07f027d2b068caa1ebde81e476ce01f55a0fa5b1"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"2243ebc00c42a1f5c7db437a7d8e83f302e84871","unresolved":false,"context_lines":[{"line_number":1905,"context_line":"                                              id\u003dfirst_vif_id)"},{"line_number":1906,"context_line":"        second_vif \u003d ironic_utils.get_test_vif(address\u003d\u002711:FF:FF:FF:FF:FF\u0027,"},{"line_number":1907,"context_line":"                                               id\u003dsecond_vif_id)"},{"line_number":1908,"context_line":"        msg \u003d \u0027No conductor service registered which supports driver ipmi.\u0027"},{"line_number":1909,"context_line":"        mock_node.vif_attach.side_effect \u003d [None,"},{"line_number":1910,"context_line":"                                            ironic_exception.BadRequest(msg),"},{"line_number":1911,"context_line":"                                            None]"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_92ac28ef","line":1908,"updated":"2018-06-20 09:56:31.000000000","message":"ACK. This is the correct error message:\n\nhttps://git.openstack.org/cgit/openstack/ironic/tree/ironic/conductor/rpcapi.py#n137","commit_id":"07f027d2b068caa1ebde81e476ce01f55a0fa5b1"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"2243ebc00c42a1f5c7db437a7d8e83f302e84871","unresolved":false,"context_lines":[{"line_number":1907,"context_line":"                                               id\u003dsecond_vif_id)"},{"line_number":1908,"context_line":"        msg \u003d \u0027No conductor service registered which supports driver ipmi.\u0027"},{"line_number":1909,"context_line":"        mock_node.vif_attach.side_effect \u003d [None,"},{"line_number":1910,"context_line":"                                            ironic_exception.BadRequest(msg),"},{"line_number":1911,"context_line":"                                            None]"},{"line_number":1912,"context_line":"        network_info \u003d [first_vif, second_vif]"},{"line_number":1913,"context_line":"        self.driver._plug_vifs(node, instance, network_info)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_92dae876","line":1910,"updated":"2018-06-20 09:56:31.000000000","message":"ACK. This the error we see:\n\nhttps://bugzilla.redhat.com/show_bug.cgi?id\u003d1590297#c14","commit_id":"07f027d2b068caa1ebde81e476ce01f55a0fa5b1"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"2243ebc00c42a1f5c7db437a7d8e83f302e84871","unresolved":false,"context_lines":[{"line_number":1913,"context_line":"        self.driver._plug_vifs(node, instance, network_info)"},{"line_number":1914,"context_line":"        calls \u003d [mock.call(node.uuid, first_vif_id),"},{"line_number":1915,"context_line":"                 mock.call(node.uuid, second_vif_id),"},{"line_number":1916,"context_line":"                 mock.call(node.uuid, second_vif_id)]"},{"line_number":1917,"context_line":"        mock_node.vif_attach.assert_has_calls(calls, any_order\u003dTrue)"},{"line_number":1918,"context_line":""},{"line_number":1919,"context_line":"    @mock.patch.object(FAKE_CLIENT, \u0027node\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_525210e0","line":1916,"updated":"2018-06-20 09:56:31.000000000","message":"ACK. Tested retry.","commit_id":"07f027d2b068caa1ebde81e476ce01f55a0fa5b1"}],"nova/virt/ironic/driver.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"637a76d2894e85e183037ce9d50bdbd0fa135c28","unresolved":false,"context_lines":[{"line_number":1414,"context_line":"                raise exception.VirtualInterfacePlugException(msg)"},{"line_number":1415,"context_line":"            except ironic.exc.Conflict:"},{"line_number":1416,"context_line":"                # NOTE (vsaienko) Pass since VIF already attached."},{"line_number":1417,"context_line":"                pass"},{"line_number":1418,"context_line":""},{"line_number":1419,"context_line":"            # Success, so don\u0027t retry"},{"line_number":1420,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_1984c2d2","line":1417,"range":{"start_line":1417,"start_character":16,"end_line":1417,"end_character":20},"updated":"2018-06-20 07:25:43.000000000","message":"this has to be break otherwise we\u0027ll keep looping for already attached VIFs","commit_id":"4fb346635c456e03a5b97b4efff52169732f09a2"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"2243ebc00c42a1f5c7db437a7d8e83f302e84871","unresolved":false,"context_lines":[{"line_number":1398,"context_line":"                # NOTE(danms): If we race with ironic startup, there"},{"line_number":1399,"context_line":"                # will be no ironic-conductor running, which will"},{"line_number":1400,"context_line":"                # give us a failure to do this plug operation. So,"},{"line_number":1401,"context_line":"                # be graceful in that case and wait/retry."},{"line_number":1402,"context_line":"                if (\u0027No conductor\u0027 in six.text_type(e) and"},{"line_number":1403,"context_line":"                        attempt \u003c last_attempt):"},{"line_number":1404,"context_line":"                    LOG.warning(\u0027No ironic conductor is running; \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_8ff63fd8","line":1401,"updated":"2018-06-20 09:56:31.000000000","message":"There\u0027s an ironic patch up for this already: https://review.openstack.org/#/c/576608/\n\nMight be good to link it here so we know when it\u0027s safe to remove this.","commit_id":"07f027d2b068caa1ebde81e476ce01f55a0fa5b1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1ed7fe1d742f8c2830a6da78f01167ead48da742","unresolved":false,"context_lines":[{"line_number":1490,"context_line":"        # event from neutron or by _heal_instance_info_cache periodic task. In"},{"line_number":1491,"context_line":"        # both cases, this is done asynchronously, so the cache may not be up"},{"line_number":1492,"context_line":"        # to date immediately after attachment."},{"line_number":1493,"context_line":"        self.plug_vifs(instance, [vif])"},{"line_number":1494,"context_line":""},{"line_number":1495,"context_line":"    def detach_interface(self, context, instance, vif):"},{"line_number":1496,"context_line":"        \"\"\"Use hotunplug to remove a network interface from a running instance."}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_d6e562a5","line":1493,"updated":"2018-06-25 11:59:48.000000000","message":"We could potentially hit the same timeouts here I guess, and in this case we\u0027re in an RPC call so we\u0027d hit a MessagingTimeout after 60 seconds and the user would get a 500 from the attach port API call, which is the correct response.","commit_id":"07f027d2b068caa1ebde81e476ce01f55a0fa5b1"}]}
