)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"418b28e845a8a746fbff0040f31155567baa609a","unresolved":false,"context_lines":[{"line_number":21,"context_line":"the volume, it will fail with this error when the attempt to detach"},{"line_number":22,"context_line":"from the persistent domain is made:"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"  libvirtError: invalid argument: no target device \u003cdevice\u003e"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"because the volume was detached from the persistent domain the first"},{"line_number":27,"context_line":"time. Because of this, the volume can only be detached by rebooting"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3a71b18c_f1b0d8df","line":24,"updated":"2016-12-02 12:48:30.000000000","message":"That is very nice Melanie so now we know the root cause of [1]. Like you I was surprising to see that error to occur.\n\n[1] https://review.openstack.org/#/c/401375/","commit_id":"63b2c8962697280f37fa888f1ab1d255757d1154"}],"nova/virt/libvirt/guest.py":[{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"1dd6b6480486bcdbe439821f8433b727de07b272","unresolved":false,"context_lines":[{"line_number":397,"context_line":"                                                   reason\u003dreason)"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"        # Return a function that will retry the detach if needed."},{"line_number":400,"context_line":"        return _do_wait_and_retry_detach"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"    def detach_device(self, conf, persistent\u003dFalse, live\u003dFalse):"},{"line_number":403,"context_line":"        \"\"\"Detaches device to the guest."}],"source_content_type":"text/x-python","patch_set":2,"id":"7a77a97e_43921b4d","line":400,"updated":"2016-11-18 16:03:51.000000000","message":"Hmm, so the main question is whether we have the right behaviour here in the case where we hit the max retry count.\n\nThe detach operation from the running guest is asynchronous so there\u0027s four possible outcomes\n\n 1. It completes in time we see that\n 2. It does not complete before we hit max retries, but it *does* complete some time later, without the user re-requesting the detach operation\n 3. It does not complete before we hit max retires, but it *will* complete if the user re-requests the detach op some time later\n 4. It does not ever complete no matter what we do\n\nIn the previous logic, if we hit scenario 2, then the final result is that both the persistent config and live XML have the device removed.\n\nWith this new logic, if we hit scenario 2, then the final result is that only the live XML has the device removed.\n\nYour new logic does help ensure scenario 3 will work though.\n\nI wonder if an alternative is to keep the detach order that we was there originally. Then modify the code so that it when the user re-runs the detach API call, it will skip detach from the persistent config if it doesn\u0027t have the device. eg so we gracefully degrade if the dev is in live config but not persistent config, instead of failing as we do today.","commit_id":"65ffeff26dc5afa7640fc9eec4b708e1f5a2bef1"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"075a54d48d9d7fe0b3470f3fcc1beeb38c6ccf58","unresolved":false,"context_lines":[{"line_number":397,"context_line":"                                                   reason\u003dreason)"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"        # Return a function that will retry the detach if needed."},{"line_number":400,"context_line":"        return _do_wait_and_retry_detach"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"    def detach_device(self, conf, persistent\u003dFalse, live\u003dFalse):"},{"line_number":403,"context_line":"        \"\"\"Detaches device to the guest."}],"source_content_type":"text/x-python","patch_set":2,"id":"5a74a57a_32f7f0f6","line":400,"in_reply_to":"7a77a97e_43921b4d","updated":"2016-11-30 00:17:39.000000000","message":"Good point and I like your idea. I\u0027ll update this to do as you suggested.","commit_id":"65ffeff26dc5afa7640fc9eec4b708e1f5a2bef1"}]}
