)]}'
{"ironic/conductor/manager.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"6703eb0280d64f2e2d5a45ca932e914d071dadfa","unresolved":false,"context_lines":[{"line_number":1191,"context_line":""},{"line_number":1192,"context_line":"        :param context: an admin context."},{"line_number":1193,"context_line":"        :param node_id: the id or uuid of a node."},{"line_number":1194,"context_line":"        :param *args:"},{"line_number":1195,"context_line":"        :raises: InvalidStateRequested if the node is not in CLEANWAIT state"},{"line_number":1196,"context_line":"        :raises: NoFreeConductorWorker when there is no free worker to start"},{"line_number":1197,"context_line":"                 async task"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_d1640ee8","line":1194,"updated":"2019-02-20 15:16:29.000000000","message":"I think *args is incorrect syntax. Also, it\u0027s one string, no? Why not call it network_state or something?","commit_id":"4aa56d71f62bc4597ad887da9fbf4bf02ab521ab"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"6703eb0280d64f2e2d5a45ca932e914d071dadfa","unresolved":false,"context_lines":[{"line_number":1229,"context_line":""},{"line_number":1230,"context_line":"            if \u0027network_error\u0027 in args:"},{"line_number":1231,"context_line":"                msg \u003d (_(\u0027The cleaning operation for node %s failed. A \u0027"},{"line_number":1232,"context_line":"                         \u0027network error occured when connectiong the node to \u0027"},{"line_number":1233,"context_line":"                         \u0027the cleaning network.\u0027) % node.uuid)"},{"line_number":1234,"context_line":"                return utils.cleaning_error_handler(task, msg)"},{"line_number":1235,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_7161a2d3","line":1232,"updated":"2019-02-20 15:16:29.000000000","message":"nit: connecting","commit_id":"4aa56d71f62bc4597ad887da9fbf4bf02ab521ab"}],"ironic/drivers/modules/network/flat.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"6703eb0280d64f2e2d5a45ca932e914d071dadfa","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        # NOTE(hjensas): Need to sleep 10 seconds here to ensure we don\u0027t do"},{"line_number":67,"context_line":"        # the callback before the task is in wait state. Otherwise the callback"},{"line_number":68,"context_line":"        # fail with NodeLocked exception."},{"line_number":69,"context_line":"        # TODO(hjensas) Find out why create port ironic/common/neutron.py:286"},{"line_number":70,"context_line":"        # takes 20 seconds, 10 seconds and we get the event, 10 seconds after"},{"line_number":71,"context_line":"        # we recive the event it returns."}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_b1670aeb","line":68,"updated":"2019-02-20 15:16:29.000000000","message":"This has to be fixed in the final version..","commit_id":"4aa56d71f62bc4597ad887da9fbf4bf02ab521ab"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"2c76fcaae0df2458e1b5c509f530d5139657b470","unresolved":false,"context_lines":[{"line_number":88,"context_line":"                 node.uuid)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        try:"},{"line_number":91,"context_line":"            # Remove waiting_for network event"},{"line_number":92,"context_line":"            node.refresh()"},{"line_number":93,"context_line":"            info \u003d node.driver_internal_info"},{"line_number":94,"context_line":"            info[\u0027waiting_for\u0027].pop(\u0027network\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_45432e40","line":91,"range":{"start_line":91,"start_character":12,"end_line":91,"end_character":46},"updated":"2019-02-25 11:19:53.000000000","message":"What if there are other ports waiting for an event?","commit_id":"4aa56d71f62bc4597ad887da9fbf4bf02ab521ab"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"ac905c9324ebc4863c3c42443465bdb8d64c0aaf","unresolved":false,"context_lines":[{"line_number":88,"context_line":"                 node.uuid)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        try:"},{"line_number":91,"context_line":"            # Remove waiting_for network event"},{"line_number":92,"context_line":"            node.refresh()"},{"line_number":93,"context_line":"            info \u003d node.driver_internal_info"},{"line_number":94,"context_line":"            info[\u0027waiting_for\u0027].pop(\u0027network\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5fc1f717_e74a9953","line":91,"range":{"start_line":91,"start_character":12,"end_line":91,"end_character":46},"in_reply_to":"9fdfeff1_33ef50b2","updated":"2019-03-08 12:38:13.000000000","message":"I changed this, to require all ports to succeed.\n\nNote, doing so changes the current behaviour which does accept failures unless all ports failed:\nhttps://github.com/openstack/ironic/blob/master/ironic/common/neutron.py#L288-L308\n\nIf we are requiring all ports to succeed here. We probably want to change the other code to do a bulk create of ports in neutron? (Bulk create is atomic in neutron, so if one port failed neutron would handle the cleanup, so we could remove the call to rollback_ports().","commit_id":"4aa56d71f62bc4597ad887da9fbf4bf02ab521ab"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"43501b65fef7caf76d6ea21121ef9be1e967a913","unresolved":false,"context_lines":[{"line_number":88,"context_line":"                 node.uuid)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        try:"},{"line_number":91,"context_line":"            # Remove waiting_for network event"},{"line_number":92,"context_line":"            node.refresh()"},{"line_number":93,"context_line":"            info \u003d node.driver_internal_info"},{"line_number":94,"context_line":"            info[\u0027waiting_for\u0027].pop(\u0027network\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_5370d440","line":91,"range":{"start_line":91,"start_character":12,"end_line":91,"end_character":46},"in_reply_to":"9fdfeff1_45432e40","updated":"2019-02-25 13:32:15.000000000","message":"Do we care in the cleaning case?\n\nI guess we could set status \u003d \u0027BUILD\u0027 before calling a port update, and ensure all ports are out of \u0027BUILD\u0027 state. But if we have one or more \u0027ACTIVE\u0027 port we should try to clean anyway?","commit_id":"4aa56d71f62bc4597ad887da9fbf4bf02ab521ab"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"ad6e086bee05752a01307041f3f72334be155167","unresolved":false,"context_lines":[{"line_number":88,"context_line":"                 node.uuid)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        try:"},{"line_number":91,"context_line":"            # Remove waiting_for network event"},{"line_number":92,"context_line":"            node.refresh()"},{"line_number":93,"context_line":"            info \u003d node.driver_internal_info"},{"line_number":94,"context_line":"            info[\u0027waiting_for\u0027].pop(\u0027network\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_33ef50b2","line":91,"range":{"start_line":91,"start_character":12,"end_line":91,"end_character":46},"in_reply_to":"9fdfeff1_5370d440","updated":"2019-02-25 13:34:12.000000000","message":"If we\u0027ve marked multiple ports as pxe_enabled, they will be enabled when cleaning. I don\u0027t think we should make any assumptions about which are necessary and which are not.","commit_id":"4aa56d71f62bc4597ad887da9fbf4bf02ab521ab"}],"ironic/drivers/modules/network/neutron.py":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"2c76fcaae0df2458e1b5c509f530d5139657b470","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        \"\"\"Ensures that all provisioning ports are deleted.\"\"\""},{"line_number":51,"context_line":"        pass"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def add_cleaning_network(self, task):"},{"line_number":54,"context_line":"        \"\"\"Ensures that at least one cleaning port is active."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        :returns: True if at least one cleaning port is active."}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_e5758299","line":53,"updated":"2019-02-25 11:19:53.000000000","message":"Lots of common code with the flat interface, would be a shame to duplicate it.","commit_id":"4aa56d71f62bc4597ad887da9fbf4bf02ab521ab"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"43501b65fef7caf76d6ea21121ef9be1e967a913","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        \"\"\"Ensures that all provisioning ports are deleted.\"\"\""},{"line_number":51,"context_line":"        pass"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def add_cleaning_network(self, task):"},{"line_number":54,"context_line":"        \"\"\"Ensures that at least one cleaning port is active."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        :returns: True if at least one cleaning port is active."}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_33c19030","line":53,"in_reply_to":"9fdfeff1_e5758299","updated":"2019-02-25 13:32:15.000000000","message":"yes, and the other methods [add|remove]_[provisionig|rescue]_network will probably be very similar as well.","commit_id":"4aa56d71f62bc4597ad887da9fbf4bf02ab521ab"}]}
