)]}'
{"nova/virt/ironic/driver.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"eddab93187ea53679ff14870d469671506a0661b","unresolved":false,"context_lines":[{"line_number":486,"context_line":"            # since cleaning support was added in ironic."},{"line_number":487,"context_line":"            # Ultimately this call can likely just be removed as nova is not"},{"line_number":488,"context_line":"            # supported with versions of ironic that do not do this."},{"line_number":489,"context_line":"            pass"},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"    def _wait_for_active(self, instance):"},{"line_number":492,"context_line":"        \"\"\"Wait for the node to be marked as ACTIVE in Ironic.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"5fc1f717_ef0d15e8","line":489,"updated":"2019-03-14 23:05:36.000000000","message":"IIRC, jroll had said we shouldn\u0027t do this unilaterally in _cleanup_deploy because of other places _cleanup_deploy is called.\n\nAnd instead need to catch/ignore in destroy() only.","commit_id":"aba28a7f9fe90fb862dbeb280898fb6c7fd6cf55"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d4399e9c4cc6427f4e5fc0fee7ffb2c3af7d73f0","unresolved":false,"context_lines":[{"line_number":486,"context_line":"            # since cleaning support was added in ironic."},{"line_number":487,"context_line":"            # Ultimately this call can likely just be removed as nova is not"},{"line_number":488,"context_line":"            # supported with versions of ironic that do not do this."},{"line_number":489,"context_line":"            pass"},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"    def _wait_for_active(self, instance):"},{"line_number":492,"context_line":"        \"\"\"Wait for the node to be marked as ACTIVE in Ironic.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"5fc1f717_cfc93959","line":489,"in_reply_to":"5fc1f717_cfa05993","updated":"2019-03-14 23:27:56.000000000","message":"I believe so. Maybe Julia can add a little more to the code comment to explain why.","commit_id":"aba28a7f9fe90fb862dbeb280898fb6c7fd6cf55"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f2ebddd4b87bc63df1df34f41f6c13de4c63a37d","unresolved":false,"context_lines":[{"line_number":486,"context_line":"            # since cleaning support was added in ironic."},{"line_number":487,"context_line":"            # Ultimately this call can likely just be removed as nova is not"},{"line_number":488,"context_line":"            # supported with versions of ironic that do not do this."},{"line_number":489,"context_line":"            pass"},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"    def _wait_for_active(self, instance):"},{"line_number":492,"context_line":"        \"\"\"Wait for the node to be marked as ACTIVE in Ironic.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"5fc1f717_6a7593f9","line":489,"in_reply_to":"5fc1f717_cfc93959","updated":"2019-03-15 01:39:43.000000000","message":"I updated the comment on the latest patch set. I walked the code in ironic, and after the unprovision is called, ironic will autopilot on the teardown and eventually purge out all the records, detach all of the vifs, etc.  Ironic\u0027s deploy.tear_down interface along with the final exit on the general teardown calls.","commit_id":"aba28a7f9fe90fb862dbeb280898fb6c7fd6cf55"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dc2cfc47bab657c618b81bb5d78b06149772c6ca","unresolved":false,"context_lines":[{"line_number":486,"context_line":"            # since cleaning support was added in ironic."},{"line_number":487,"context_line":"            # Ultimately this call can likely just be removed as nova is not"},{"line_number":488,"context_line":"            # supported with versions of ironic that do not do this."},{"line_number":489,"context_line":"            pass"},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"    def _wait_for_active(self, instance):"},{"line_number":492,"context_line":"        \"\"\"Wait for the node to be marked as ACTIVE in Ironic.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"5fc1f717_cfa05993","line":489,"in_reply_to":"5fc1f717_ef0d15e8","updated":"2019-03-14 23:22:05.000000000","message":"Also, how do we know the conflict is a safe one to ignore? Is there only one expected way this will ever return a 409?","commit_id":"aba28a7f9fe90fb862dbeb280898fb6c7fd6cf55"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"7e3205c80bcd656bc6469880d627cc1e044d0254","unresolved":false,"context_lines":[{"line_number":1327,"context_line":"            try:"},{"line_number":1328,"context_line":"                self._cleanup_deploy(node, instance, network_info)"},{"line_number":1329,"context_line":"            except ironic.exc.Conflict:"},{"line_number":1330,"context_line":"                LOG.debug(\"Receieved API conflict from ironic upon \""},{"line_number":1331,"context_line":"                          \"attempt to perform final cleanup for instance \""},{"line_number":1332,"context_line":"                          \"%s. This can be disregarded as ironic will \""},{"line_number":1333,"context_line":"                          \"perform the same clean-up activites \""}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_afd38d03","line":1330,"range":{"start_line":1330,"start_character":27,"end_line":1330,"end_character":36},"updated":"2019-03-14 23:29:20.000000000","message":"Received","commit_id":"447e392d94607e9368358bde2873704bc8903d89"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"83bffd8e211174c5b565761069bdd59c6d720a98","unresolved":false,"context_lines":[{"line_number":1326,"context_line":"        finally:"},{"line_number":1327,"context_line":"            try:"},{"line_number":1328,"context_line":"                self._cleanup_deploy(node, instance, network_info)"},{"line_number":1329,"context_line":"            except ironic.exc.Conflict:"},{"line_number":1330,"context_line":"                # NOTE(TheJulia): Ironic will independently perform clean"},{"line_number":1331,"context_line":"                # up activites, and any conflict that is encountered can"},{"line_number":1332,"context_line":"                # be ignored."}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_031ab4ca","line":1329,"range":{"start_line":1329,"start_character":0,"end_line":1329,"end_character":39},"updated":"2019-03-15 12:45:03.000000000","message":"Why not move this catch to where it\u0027s triggered (i.e. both unplug_vifs and remove_instance_info)? With this approach you\u0027re risking skipping other actions in _cleanup_deploy on the first confict.","commit_id":"4571b5353c00d232c7fbd1240e3d19e874b70a91"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a8113c53a26280d7eeaed342a77fb231ab0ccd8e","unresolved":false,"context_lines":[{"line_number":1326,"context_line":"        finally:"},{"line_number":1327,"context_line":"            try:"},{"line_number":1328,"context_line":"                self._cleanup_deploy(node, instance, network_info)"},{"line_number":1329,"context_line":"            except ironic.exc.Conflict:"},{"line_number":1330,"context_line":"                # NOTE(TheJulia): Ironic will independently perform clean"},{"line_number":1331,"context_line":"                # up activites, and any conflict that is encountered can"},{"line_number":1332,"context_line":"                # be ignored."}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_092e5391","line":1329,"range":{"start_line":1329,"start_character":0,"end_line":1329,"end_character":39},"in_reply_to":"5fc1f717_031ab4ca","updated":"2019-03-15 13:37:19.000000000","message":"See the discussion on the earlier patchset. We can perform all of the other steps in ironic already so we could actually even remove this _cleanup_deploy call completely as the unprovision operation has been called.\n\ntl;dr your right, we could miss calling the other actions, but we don\u0027t need to actually call them if vif removal hits a conflict.","commit_id":"4571b5353c00d232c7fbd1240e3d19e874b70a91"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"83bffd8e211174c5b565761069bdd59c6d720a98","unresolved":false,"context_lines":[{"line_number":1330,"context_line":"                # NOTE(TheJulia): Ironic will independently perform clean"},{"line_number":1331,"context_line":"                # up activites, and any conflict that is encountered can"},{"line_number":1332,"context_line":"                # be ignored."},{"line_number":1333,"context_line":"                LOG.debug(\"Received API conflict from ironic upon \""},{"line_number":1334,"context_line":"                          \"attempt to perform final cleanup for instance \""},{"line_number":1335,"context_line":"                          \"%s. This can be disregarded as ironic will \""},{"line_number":1336,"context_line":"                          \"perform the same clean-up activites \""}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_632a98db","line":1333,"updated":"2019-03-15 12:45:03.000000000","message":"Let\u0027s log the error message?","commit_id":"4571b5353c00d232c7fbd1240e3d19e874b70a91"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"7e5a7992d98ce73f722a9688a2daefbc2282cc6a","unresolved":false,"context_lines":[{"line_number":1330,"context_line":"                # NOTE(TheJulia): Ironic will independently perform clean"},{"line_number":1331,"context_line":"                # up activites, and any conflict that is encountered can"},{"line_number":1332,"context_line":"                # be ignored."},{"line_number":1333,"context_line":"                LOG.debug(\"Received API conflict from ironic upon \""},{"line_number":1334,"context_line":"                          \"attempt to perform final cleanup for instance \""},{"line_number":1335,"context_line":"                          \"%s. This can be disregarded as ironic will \""},{"line_number":1336,"context_line":"                          \"perform the same clean-up activites \""}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_dc008605","line":1333,"in_reply_to":"5fc1f717_49169b4b","updated":"2019-04-03 22:15:52.000000000","message":"It wouldn\u0027t hurt. Could help with debugging to know what error message came back from ironic i.e. which step in _cleanup_deploy returned 409? I\u0027d defer to you [ironic folks] about whether that\u0027s useful. That is, I\u0027d think that info could help with debugging an potential issue with someone\u0027s ironic deployment.","commit_id":"4571b5353c00d232c7fbd1240e3d19e874b70a91"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a8113c53a26280d7eeaed342a77fb231ab0ccd8e","unresolved":false,"context_lines":[{"line_number":1330,"context_line":"                # NOTE(TheJulia): Ironic will independently perform clean"},{"line_number":1331,"context_line":"                # up activites, and any conflict that is encountered can"},{"line_number":1332,"context_line":"                # be ignored."},{"line_number":1333,"context_line":"                LOG.debug(\"Received API conflict from ironic upon \""},{"line_number":1334,"context_line":"                          \"attempt to perform final cleanup for instance \""},{"line_number":1335,"context_line":"                          \"%s. This can be disregarded as ironic will \""},{"line_number":1336,"context_line":"                          \"perform the same clean-up activites \""}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_49169b4b","line":1333,"in_reply_to":"5fc1f717_632a98db","updated":"2019-03-15 13:37:19.000000000","message":"Nova folks, thoughts? Does doing so add value? I\u0027m personally thinking we can just remove _cleanup_deploy in the end but I also want something we can backport to Rocky with minimal concern.","commit_id":"4571b5353c00d232c7fbd1240e3d19e874b70a91"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"cd86915c54e8bb73addc6dfac8b024ecd0ea274d","unresolved":false,"context_lines":[{"line_number":1325,"context_line":"                self._remove_instance_info_from_node(node, instance)"},{"line_number":1326,"context_line":"        finally:"},{"line_number":1327,"context_line":"            try:"},{"line_number":1328,"context_line":"                self._cleanup_deploy(node, instance, network_info)"},{"line_number":1329,"context_line":"            except ironic.exc.Conflict as err:"},{"line_number":1330,"context_line":"                # NOTE(TheJulia): Ironic will independently perform clean"},{"line_number":1331,"context_line":"                # up activites, and any conflict that is encountered can"}],"source_content_type":"text/x-python","patch_set":4,"id":"bfb3d3c7_6bed5d24","line":1328,"updated":"2019-05-16 18:51:05.000000000","message":"Also hitting this. I started a patch to fix it which used a slightly different approach - add a remove_instance_info argument to _cleanup_deploy and don\u0027t even attempt it in this case. Otherwise we need to wait for the retry timeout, the default is 2 minutes IIRC.","commit_id":"4c2e2248f9dfc2dbc69535aef928faa720f620f9"}]}
