)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"d481617c3135c68614fc0d7b52572e0e4fcbc54b","unresolved":false,"context_lines":[{"line_number":12,"context_line":"This option determines what actions will be taken against a VM after"},{"line_number":13,"context_line":"``live_migration_completion_timeout`` expires. This option is set to"},{"line_number":14,"context_line":"\u0027abort\u0027 action by default, that means the live migrate operation will"},{"line_number":15,"context_line":"be aborted after completion timeout expires. If opetion is set to"},{"line_number":16,"context_line":"\u0027force_complete\u0027, that means will either pause the VM or trigger"},{"line_number":17,"context_line":"post_copy depending on if post copy is enabled and available."},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3f79a3b5_fc566f5d","line":15,"range":{"start_line":15,"start_character":48,"end_line":15,"end_character":54},"updated":"2018-11-22 06:56:33.000000000","message":"nit","commit_id":"1bb477e778be8c793cd65b74b4a373be50f3420a"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"fccda5c8e7e17074de923287895447db1d65941e","unresolved":false,"context_lines":[{"line_number":12,"context_line":"This option determines what actions will be taken against a VM after"},{"line_number":13,"context_line":"``live_migration_completion_timeout`` expires. This option is set to"},{"line_number":14,"context_line":"\u0027abort\u0027 action by default, that means the live migrate operation will"},{"line_number":15,"context_line":"be aborted after completion timeout expires. If opetion is set to"},{"line_number":16,"context_line":"\u0027force_complete\u0027, that means will either pause the VM or trigger"},{"line_number":17,"context_line":"post_copy depending on if post copy is enabled and available."},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3f79a3b5_3f305906","line":15,"range":{"start_line":15,"start_character":48,"end_line":15,"end_character":54},"in_reply_to":"3f79a3b5_fc566f5d","updated":"2018-12-11 11:40:15.000000000","message":"Done","commit_id":"1bb477e778be8c793cd65b74b4a373be50f3420a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b07c3084a47096ab68916177df98fb851f27915a","unresolved":false,"context_lines":[{"line_number":15,"context_line":"be aborted after completion timeout expires. If option is set to"},{"line_number":16,"context_line":"\u0027force_complete\u0027, that means will either pause the VM or trigger"},{"line_number":17,"context_line":"post_copy depending on if post copy is enabled and available."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I0d286d12e588b431df3d94cf2e65d636bcdea2f8"},{"line_number":20,"context_line":"blueprint: live-migration-force-after-timeout"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"3f79a3b5_88947999","line":18,"updated":"2018-12-11 09:00:09.000000000","message":"For the future reader please mention that the next patch removes progress based post-copy triggering from the libvirt driver.","commit_id":"256e35fe49da9d3dac430c3b92d6ed2e5c500a12"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"fccda5c8e7e17074de923287895447db1d65941e","unresolved":false,"context_lines":[{"line_number":15,"context_line":"be aborted after completion timeout expires. If option is set to"},{"line_number":16,"context_line":"\u0027force_complete\u0027, that means will either pause the VM or trigger"},{"line_number":17,"context_line":"post_copy depending on if post copy is enabled and available."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I0d286d12e588b431df3d94cf2e65d636bcdea2f8"},{"line_number":20,"context_line":"blueprint: live-migration-force-after-timeout"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"3f79a3b5_f1a71409","line":18,"in_reply_to":"3f79a3b5_88947999","updated":"2018-12-11 11:40:15.000000000","message":"Done","commit_id":"256e35fe49da9d3dac430c3b92d6ed2e5c500a12"}],"doc/source/admin/live-migration-usage.rst":[{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"36287057492af17f479c24b22c79be0688ead144","unresolved":false,"context_lines":[{"line_number":225,"context_line":"1. ``abort`` (default), By default, the live migrations operation will be"},{"line_number":226,"context_line":"   cancel after completion timeout."},{"line_number":227,"context_line":"2. ``force_complete``,  compute service will either pause the VM or trigger"},{"line_number":228,"context_line":"    post_copy depending on if post copy is enabled and available."},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"The following remarks assume the KVM/Libvirt hypervisor."},{"line_number":231,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_b1167ca1","line":228,"range":{"start_line":228,"start_character":25,"end_line":228,"end_character":64},"updated":"2018-12-11 11:51:32.000000000","message":"mention the config option here.","commit_id":"bf45bd89a104ddf108fcf6676c59195878d432a8"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cf46c802c4ab4bdbe2ea9b753085a785af114173","unresolved":false,"context_lines":[{"line_number":219,"context_line":"that page has been copied to the destination. When that happens, the same page"},{"line_number":220,"context_line":"has to be copied again. The instance may write to memory pages faster than they"},{"line_number":221,"context_line":"can be copied, so that the migration cannot complete. There are two optional"},{"line_number":222,"context_line":"actions, which is controlled by ``libivirt.live_migration_timeout_action``,"},{"line_number":223,"context_line":"can be taken against a VM after ``libivirt.live_migration_completion_timeout``"},{"line_number":224,"context_line":"is reached:"},{"line_number":225,"context_line":"1. ``abort`` (default), By default, the live migrations operation will be"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_4caaee6b","line":222,"range":{"start_line":222,"start_character":32,"end_line":222,"end_character":74},"updated":"2018-12-11 14:31:00.000000000","message":"Use the oslo.config option format to link this:\n\n:oslo.config:option:`libivirt.live_migration_timeout_action`","commit_id":"31e7f0bb82b93b50b5c50076fcd8c2d133f6eb00"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cf46c802c4ab4bdbe2ea9b753085a785af114173","unresolved":false,"context_lines":[{"line_number":219,"context_line":"that page has been copied to the destination. When that happens, the same page"},{"line_number":220,"context_line":"has to be copied again. The instance may write to memory pages faster than they"},{"line_number":221,"context_line":"can be copied, so that the migration cannot complete. There are two optional"},{"line_number":222,"context_line":"actions, which is controlled by ``libivirt.live_migration_timeout_action``,"},{"line_number":223,"context_line":"can be taken against a VM after ``libivirt.live_migration_completion_timeout``"},{"line_number":224,"context_line":"is reached:"},{"line_number":225,"context_line":"1. ``abort`` (default), By default, the live migrations operation will be"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_ecc97a51","line":222,"range":{"start_line":222,"start_character":9,"end_line":222,"end_character":18},"updated":"2018-12-11 14:31:00.000000000","message":"s/which is//","commit_id":"31e7f0bb82b93b50b5c50076fcd8c2d133f6eb00"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"383b449a3548ba6c242e0c8aa5a0f4f89915aae7","unresolved":false,"context_lines":[{"line_number":219,"context_line":"that page has been copied to the destination. When that happens, the same page"},{"line_number":220,"context_line":"has to be copied again. The instance may write to memory pages faster than they"},{"line_number":221,"context_line":"can be copied, so that the migration cannot complete. There are two optional"},{"line_number":222,"context_line":"actions, which is controlled by ``libivirt.live_migration_timeout_action``,"},{"line_number":223,"context_line":"can be taken against a VM after ``libivirt.live_migration_completion_timeout``"},{"line_number":224,"context_line":"is reached:"},{"line_number":225,"context_line":"1. ``abort`` (default), By default, the live migrations operation will be"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_c90ee12f","line":222,"range":{"start_line":222,"start_character":32,"end_line":222,"end_character":74},"in_reply_to":"3f79a3b5_4caaee6b","updated":"2018-12-12 02:10:54.000000000","message":"Done","commit_id":"31e7f0bb82b93b50b5c50076fcd8c2d133f6eb00"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"383b449a3548ba6c242e0c8aa5a0f4f89915aae7","unresolved":false,"context_lines":[{"line_number":219,"context_line":"that page has been copied to the destination. When that happens, the same page"},{"line_number":220,"context_line":"has to be copied again. The instance may write to memory pages faster than they"},{"line_number":221,"context_line":"can be copied, so that the migration cannot complete. There are two optional"},{"line_number":222,"context_line":"actions, which is controlled by ``libivirt.live_migration_timeout_action``,"},{"line_number":223,"context_line":"can be taken against a VM after ``libivirt.live_migration_completion_timeout``"},{"line_number":224,"context_line":"is reached:"},{"line_number":225,"context_line":"1. ``abort`` (default), By default, the live migrations operation will be"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_a9112554","line":222,"range":{"start_line":222,"start_character":9,"end_line":222,"end_character":18},"in_reply_to":"3f79a3b5_ecc97a51","updated":"2018-12-12 02:10:54.000000000","message":"Done","commit_id":"31e7f0bb82b93b50b5c50076fcd8c2d133f6eb00"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cf46c802c4ab4bdbe2ea9b753085a785af114173","unresolved":false,"context_lines":[{"line_number":220,"context_line":"has to be copied again. The instance may write to memory pages faster than they"},{"line_number":221,"context_line":"can be copied, so that the migration cannot complete. There are two optional"},{"line_number":222,"context_line":"actions, which is controlled by ``libivirt.live_migration_timeout_action``,"},{"line_number":223,"context_line":"can be taken against a VM after ``libivirt.live_migration_completion_timeout``"},{"line_number":224,"context_line":"is reached:"},{"line_number":225,"context_line":"1. ``abort`` (default), By default, the live migrations operation will be"},{"line_number":226,"context_line":"   cancel after completion timeout."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_ace862a7","line":223,"range":{"start_line":223,"start_character":32,"end_line":223,"end_character":77},"updated":"2018-12-11 14:31:00.000000000","message":"same - oslo.config:option formatting","commit_id":"31e7f0bb82b93b50b5c50076fcd8c2d133f6eb00"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cf46c802c4ab4bdbe2ea9b753085a785af114173","unresolved":false,"context_lines":[{"line_number":220,"context_line":"has to be copied again. The instance may write to memory pages faster than they"},{"line_number":221,"context_line":"can be copied, so that the migration cannot complete. There are two optional"},{"line_number":222,"context_line":"actions, which is controlled by ``libivirt.live_migration_timeout_action``,"},{"line_number":223,"context_line":"can be taken against a VM after ``libivirt.live_migration_completion_timeout``"},{"line_number":224,"context_line":"is reached:"},{"line_number":225,"context_line":"1. ``abort`` (default), By default, the live migrations operation will be"},{"line_number":226,"context_line":"   cancel after completion timeout."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_accf0253","line":223,"range":{"start_line":223,"start_character":0,"end_line":223,"end_character":3},"updated":"2018-12-11 14:31:00.000000000","message":"which can be","commit_id":"31e7f0bb82b93b50b5c50076fcd8c2d133f6eb00"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"383b449a3548ba6c242e0c8aa5a0f4f89915aae7","unresolved":false,"context_lines":[{"line_number":220,"context_line":"has to be copied again. The instance may write to memory pages faster than they"},{"line_number":221,"context_line":"can be copied, so that the migration cannot complete. There are two optional"},{"line_number":222,"context_line":"actions, which is controlled by ``libivirt.live_migration_timeout_action``,"},{"line_number":223,"context_line":"can be taken against a VM after ``libivirt.live_migration_completion_timeout``"},{"line_number":224,"context_line":"is reached:"},{"line_number":225,"context_line":"1. ``abort`` (default), By default, the live migrations operation will be"},{"line_number":226,"context_line":"   cancel after completion timeout."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_691d4d63","line":223,"range":{"start_line":223,"start_character":0,"end_line":223,"end_character":3},"in_reply_to":"3f79a3b5_accf0253","updated":"2018-12-12 02:10:54.000000000","message":"Done","commit_id":"31e7f0bb82b93b50b5c50076fcd8c2d133f6eb00"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"383b449a3548ba6c242e0c8aa5a0f4f89915aae7","unresolved":false,"context_lines":[{"line_number":220,"context_line":"has to be copied again. The instance may write to memory pages faster than they"},{"line_number":221,"context_line":"can be copied, so that the migration cannot complete. There are two optional"},{"line_number":222,"context_line":"actions, which is controlled by ``libivirt.live_migration_timeout_action``,"},{"line_number":223,"context_line":"can be taken against a VM after ``libivirt.live_migration_completion_timeout``"},{"line_number":224,"context_line":"is reached:"},{"line_number":225,"context_line":"1. ``abort`` (default), By default, the live migrations operation will be"},{"line_number":226,"context_line":"   cancel after completion timeout."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_491c1165","line":223,"range":{"start_line":223,"start_character":32,"end_line":223,"end_character":77},"in_reply_to":"3f79a3b5_ace862a7","updated":"2018-12-12 02:10:54.000000000","message":"Done","commit_id":"31e7f0bb82b93b50b5c50076fcd8c2d133f6eb00"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cf46c802c4ab4bdbe2ea9b753085a785af114173","unresolved":false,"context_lines":[{"line_number":222,"context_line":"actions, which is controlled by ``libivirt.live_migration_timeout_action``,"},{"line_number":223,"context_line":"can be taken against a VM after ``libivirt.live_migration_completion_timeout``"},{"line_number":224,"context_line":"is reached:"},{"line_number":225,"context_line":"1. ``abort`` (default), By default, the live migrations operation will be"},{"line_number":226,"context_line":"   cancel after completion timeout."},{"line_number":227,"context_line":"2. ``force_complete``,  compute service will either pause the VM or trigger"},{"line_number":228,"context_line":"    post_copy depending on if post copy is enabled and available."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_0c1cf6c0","line":225,"range":{"start_line":225,"start_character":22,"end_line":225,"end_character":37},"updated":"2018-12-11 14:31:00.000000000","message":"1. ``abort`` (default): The live migration operation will be cancelled after the completion timeout is reached. This is similar to using API ``DELETE /servers/{server_id}/migrations/{migration_id}``.","commit_id":"31e7f0bb82b93b50b5c50076fcd8c2d133f6eb00"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cf46c802c4ab4bdbe2ea9b753085a785af114173","unresolved":false,"context_lines":[{"line_number":222,"context_line":"actions, which is controlled by ``libivirt.live_migration_timeout_action``,"},{"line_number":223,"context_line":"can be taken against a VM after ``libivirt.live_migration_completion_timeout``"},{"line_number":224,"context_line":"is reached:"},{"line_number":225,"context_line":"1. ``abort`` (default), By default, the live migrations operation will be"},{"line_number":226,"context_line":"   cancel after completion timeout."},{"line_number":227,"context_line":"2. ``force_complete``,  compute service will either pause the VM or trigger"},{"line_number":228,"context_line":"    post_copy depending on if post copy is enabled and available."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_cc8efe2e","line":225,"updated":"2018-12-11 14:31:00.000000000","message":"You need a blank line before the numbered list.","commit_id":"31e7f0bb82b93b50b5c50076fcd8c2d133f6eb00"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"383b449a3548ba6c242e0c8aa5a0f4f89915aae7","unresolved":false,"context_lines":[{"line_number":222,"context_line":"actions, which is controlled by ``libivirt.live_migration_timeout_action``,"},{"line_number":223,"context_line":"can be taken against a VM after ``libivirt.live_migration_completion_timeout``"},{"line_number":224,"context_line":"is reached:"},{"line_number":225,"context_line":"1. ``abort`` (default), By default, the live migrations operation will be"},{"line_number":226,"context_line":"   cancel after completion timeout."},{"line_number":227,"context_line":"2. ``force_complete``,  compute service will either pause the VM or trigger"},{"line_number":228,"context_line":"    post_copy depending on if post copy is enabled and available."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_e935ddd5","line":225,"range":{"start_line":225,"start_character":22,"end_line":225,"end_character":37},"in_reply_to":"3f79a3b5_0c1cf6c0","updated":"2018-12-12 02:10:54.000000000","message":"Done","commit_id":"31e7f0bb82b93b50b5c50076fcd8c2d133f6eb00"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"383b449a3548ba6c242e0c8aa5a0f4f89915aae7","unresolved":false,"context_lines":[{"line_number":222,"context_line":"actions, which is controlled by ``libivirt.live_migration_timeout_action``,"},{"line_number":223,"context_line":"can be taken against a VM after ``libivirt.live_migration_completion_timeout``"},{"line_number":224,"context_line":"is reached:"},{"line_number":225,"context_line":"1. ``abort`` (default), By default, the live migrations operation will be"},{"line_number":226,"context_line":"   cancel after completion timeout."},{"line_number":227,"context_line":"2. ``force_complete``,  compute service will either pause the VM or trigger"},{"line_number":228,"context_line":"    post_copy depending on if post copy is enabled and available."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_093379f1","line":225,"in_reply_to":"3f79a3b5_cc8efe2e","updated":"2018-12-12 02:10:54.000000000","message":"Done","commit_id":"31e7f0bb82b93b50b5c50076fcd8c2d133f6eb00"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cf46c802c4ab4bdbe2ea9b753085a785af114173","unresolved":false,"context_lines":[{"line_number":224,"context_line":"is reached:"},{"line_number":225,"context_line":"1. ``abort`` (default), By default, the live migrations operation will be"},{"line_number":226,"context_line":"   cancel after completion timeout."},{"line_number":227,"context_line":"2. ``force_complete``,  compute service will either pause the VM or trigger"},{"line_number":228,"context_line":"    post_copy depending on if post copy is enabled and available."},{"line_number":229,"context_line":"    (``libivirt.live_migration_permit_post_copy`` is set to `True`) "},{"line_number":230,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_cc66fe53","line":227,"range":{"start_line":227,"start_character":21,"end_line":227,"end_character":39},"updated":"2018-12-11 14:31:00.000000000","message":"2. ``force_complete``: The compute service will either pause the VM or trigger post-copy depending on if post copy is enabled and available (...).","commit_id":"31e7f0bb82b93b50b5c50076fcd8c2d133f6eb00"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"383b449a3548ba6c242e0c8aa5a0f4f89915aae7","unresolved":false,"context_lines":[{"line_number":224,"context_line":"is reached:"},{"line_number":225,"context_line":"1. ``abort`` (default), By default, the live migrations operation will be"},{"line_number":226,"context_line":"   cancel after completion timeout."},{"line_number":227,"context_line":"2. ``force_complete``,  compute service will either pause the VM or trigger"},{"line_number":228,"context_line":"    post_copy depending on if post copy is enabled and available."},{"line_number":229,"context_line":"    (``libivirt.live_migration_permit_post_copy`` is set to `True`) "},{"line_number":230,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_299af5c2","line":227,"range":{"start_line":227,"start_character":21,"end_line":227,"end_character":39},"in_reply_to":"3f79a3b5_6cb7aa89","updated":"2018-12-12 02:10:54.000000000","message":"Done","commit_id":"31e7f0bb82b93b50b5c50076fcd8c2d133f6eb00"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d4a6e8d2b40dbde3b3dfba80481c6a1a9ec4e9b7","unresolved":false,"context_lines":[{"line_number":224,"context_line":"is reached:"},{"line_number":225,"context_line":"1. ``abort`` (default), By default, the live migrations operation will be"},{"line_number":226,"context_line":"   cancel after completion timeout."},{"line_number":227,"context_line":"2. ``force_complete``,  compute service will either pause the VM or trigger"},{"line_number":228,"context_line":"    post_copy depending on if post copy is enabled and available."},{"line_number":229,"context_line":"    (``libivirt.live_migration_permit_post_copy`` is set to `True`) "},{"line_number":230,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_6cb7aa89","line":227,"range":{"start_line":227,"start_character":21,"end_line":227,"end_character":39},"in_reply_to":"3f79a3b5_cc66fe53","updated":"2018-12-11 14:32:31.000000000","message":"Also add:\n\nThis is similar to using API ``POST /servers/{server_id}/migrations/{migration_id}/action (force_complete)``.","commit_id":"31e7f0bb82b93b50b5c50076fcd8c2d133f6eb00"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"383b449a3548ba6c242e0c8aa5a0f4f89915aae7","unresolved":false,"context_lines":[{"line_number":224,"context_line":"is reached:"},{"line_number":225,"context_line":"1. ``abort`` (default), By default, the live migrations operation will be"},{"line_number":226,"context_line":"   cancel after completion timeout."},{"line_number":227,"context_line":"2. ``force_complete``,  compute service will either pause the VM or trigger"},{"line_number":228,"context_line":"    post_copy depending on if post copy is enabled and available."},{"line_number":229,"context_line":"    (``libivirt.live_migration_permit_post_copy`` is set to `True`) "},{"line_number":230,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_8970e9a8","line":227,"range":{"start_line":227,"start_character":21,"end_line":227,"end_character":39},"in_reply_to":"3f79a3b5_cc66fe53","updated":"2018-12-12 02:10:54.000000000","message":"Done","commit_id":"31e7f0bb82b93b50b5c50076fcd8c2d133f6eb00"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cf46c802c4ab4bdbe2ea9b753085a785af114173","unresolved":false,"context_lines":[{"line_number":226,"context_line":"   cancel after completion timeout."},{"line_number":227,"context_line":"2. ``force_complete``,  compute service will either pause the VM or trigger"},{"line_number":228,"context_line":"    post_copy depending on if post copy is enabled and available."},{"line_number":229,"context_line":"    (``libivirt.live_migration_permit_post_copy`` is set to `True`) "},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"The following remarks assume the KVM/Libvirt hypervisor."},{"line_number":232,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_ac6b821a","line":229,"range":{"start_line":229,"start_character":5,"end_line":229,"end_character":48},"updated":"2018-12-11 14:31:00.000000000","message":"oslo.config:option formatting","commit_id":"31e7f0bb82b93b50b5c50076fcd8c2d133f6eb00"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cf46c802c4ab4bdbe2ea9b753085a785af114173","unresolved":false,"context_lines":[{"line_number":226,"context_line":"   cancel after completion timeout."},{"line_number":227,"context_line":"2. ``force_complete``,  compute service will either pause the VM or trigger"},{"line_number":228,"context_line":"    post_copy depending on if post copy is enabled and available."},{"line_number":229,"context_line":"    (``libivirt.live_migration_permit_post_copy`` is set to `True`) "},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"The following remarks assume the KVM/Libvirt hypervisor."},{"line_number":232,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_ec8dfa35","line":229,"range":{"start_line":229,"start_character":67,"end_line":229,"end_character":68},"updated":"2018-12-11 14:31:00.000000000","message":"whitespace","commit_id":"31e7f0bb82b93b50b5c50076fcd8c2d133f6eb00"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"383b449a3548ba6c242e0c8aa5a0f4f89915aae7","unresolved":false,"context_lines":[{"line_number":226,"context_line":"   cancel after completion timeout."},{"line_number":227,"context_line":"2. ``force_complete``,  compute service will either pause the VM or trigger"},{"line_number":228,"context_line":"    post_copy depending on if post copy is enabled and available."},{"line_number":229,"context_line":"    (``libivirt.live_migration_permit_post_copy`` is set to `True`) "},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"The following remarks assume the KVM/Libvirt hypervisor."},{"line_number":232,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_09a139f5","line":229,"range":{"start_line":229,"start_character":5,"end_line":229,"end_character":48},"in_reply_to":"3f79a3b5_ac6b821a","updated":"2018-12-12 02:10:54.000000000","message":"Done","commit_id":"31e7f0bb82b93b50b5c50076fcd8c2d133f6eb00"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"383b449a3548ba6c242e0c8aa5a0f4f89915aae7","unresolved":false,"context_lines":[{"line_number":226,"context_line":"   cancel after completion timeout."},{"line_number":227,"context_line":"2. ``force_complete``,  compute service will either pause the VM or trigger"},{"line_number":228,"context_line":"    post_copy depending on if post copy is enabled and available."},{"line_number":229,"context_line":"    (``libivirt.live_migration_permit_post_copy`` is set to `True`) "},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"The following remarks assume the KVM/Libvirt hypervisor."},{"line_number":232,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_a9ada5e9","line":229,"range":{"start_line":229,"start_character":67,"end_line":229,"end_character":68},"in_reply_to":"3f79a3b5_ec8dfa35","updated":"2018-12-12 02:10:54.000000000","message":"Done","commit_id":"31e7f0bb82b93b50b5c50076fcd8c2d133f6eb00"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cf46c802c4ab4bdbe2ea9b753085a785af114173","unresolved":false,"context_lines":[{"line_number":227,"context_line":"2. ``force_complete``,  compute service will either pause the VM or trigger"},{"line_number":228,"context_line":"    post_copy depending on if post copy is enabled and available."},{"line_number":229,"context_line":"    (``libivirt.live_migration_permit_post_copy`` is set to `True`) "},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"The following remarks assume the KVM/Libvirt hypervisor."},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"How to know that the migration timed out"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_4cc98e20","line":230,"updated":"2018-12-11 14:31:00.000000000","message":"If this is redundant with what is in the live_migration_timeout_action option help, maybe we don\u0027t need to put it all in this doc again, and instead could just link from this doc to that option and say to read the configuration option help for more details.","commit_id":"31e7f0bb82b93b50b5c50076fcd8c2d133f6eb00"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"383b449a3548ba6c242e0c8aa5a0f4f89915aae7","unresolved":false,"context_lines":[{"line_number":227,"context_line":"2. ``force_complete``,  compute service will either pause the VM or trigger"},{"line_number":228,"context_line":"    post_copy depending on if post copy is enabled and available."},{"line_number":229,"context_line":"    (``libivirt.live_migration_permit_post_copy`` is set to `True`) "},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"The following remarks assume the KVM/Libvirt hypervisor."},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"How to know that the migration timed out"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_293675b4","line":230,"in_reply_to":"3f79a3b5_4cc98e20","updated":"2018-12-12 02:10:54.000000000","message":"Done","commit_id":"31e7f0bb82b93b50b5c50076fcd8c2d133f6eb00"}],"nova/conf/libvirt.py":[{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"b8ec05bbc168bdfa76cde345c2e77f24fa0dc3c3","unresolved":false,"context_lines":[{"line_number":393,"context_line":"    cfg.StrOpt(\u0027live_migration_timeout_action\u0027,"},{"line_number":394,"context_line":"               default\u003d\u0027abort\u0027,"},{"line_number":395,"context_line":"               choices\u003d(\u0027abort\u0027, \u0027force_complete\u0027),"},{"line_number":396,"context_line":"               mutable\u003dTrue,"},{"line_number":397,"context_line":"               help\u003d\"\"\""},{"line_number":398,"context_line":"This option will determine what actions will be taken against a VM after"},{"line_number":399,"context_line":"``live_migration_completion_timeout`` expires. Currently nova just aborts"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_96fdda3d","line":396,"range":{"start_line":396,"start_character":15,"end_line":396,"end_character":28},"updated":"2018-11-22 02:40:32.000000000","message":"the option seems means we can change it on the fly (through SIGHUP?) but looks like it\u0027s only using in timeout options now, will this kind of `choice` option works seems need some info","commit_id":"6aa9ed7fcce9339b922b630b60afa21d3b70d7e4"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"196c3facbf6b58fcf04935126b0ffe54acb9873b","unresolved":false,"context_lines":[{"line_number":393,"context_line":"    cfg.StrOpt(\u0027live_migration_timeout_action\u0027,"},{"line_number":394,"context_line":"               default\u003d\u0027abort\u0027,"},{"line_number":395,"context_line":"               choices\u003d(\u0027abort\u0027, \u0027force_complete\u0027),"},{"line_number":396,"context_line":"               mutable\u003dTrue,"},{"line_number":397,"context_line":"               help\u003d\"\"\""},{"line_number":398,"context_line":"This option will determine what actions will be taken against a VM after"},{"line_number":399,"context_line":"``live_migration_completion_timeout`` expires. Currently nova just aborts"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_19281d34","line":396,"range":{"start_line":396,"start_character":15,"end_line":396,"end_character":28},"in_reply_to":"3f79a3b5_96fdda3d","updated":"2018-11-22 03:36:57.000000000","message":"The idea comes from here.\nhttps://review.openstack.org/#/c/600608/4/specs/stein/approved/live-migration-force-after-timeout.rst@66","commit_id":"6aa9ed7fcce9339b922b630b60afa21d3b70d7e4"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"d481617c3135c68614fc0d7b52572e0e4fcbc54b","unresolved":false,"context_lines":[{"line_number":433,"context_line":"migration is complete, therefore ensuring an upper bound on the memory that"},{"line_number":434,"context_line":"needs to be transferred. Post-copy requires libvirt\u003e\u003d1.3.3 and QEMU\u003e\u003d2.5.0."},{"line_number":435,"context_line":""},{"line_number":436,"context_line":"When permitted, post-copy mode will be automatically activated if a"},{"line_number":437,"context_line":"live-migration memory copy iteration does not make percentage increase of at"},{"line_number":438,"context_line":"least 10% over the last iteration, or we reach the timeout defined by"},{"line_number":439,"context_line":"``live_migration_completion_timeout``. Note if you change to not timeout, i.e."},{"line_number":440,"context_line":"``live_migration_completion_timeout \u003d 0``, then there will be no automatic"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_9c4f3bbe","line":437,"range":{"start_line":436,"start_character":0,"end_line":437,"end_character":76},"updated":"2018-11-22 06:56:33.000000000","message":"should we change this also? as we may not automatically active post-copy according to the choice of the new option?","commit_id":"1bb477e778be8c793cd65b74b4a373be50f3420a"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"fccda5c8e7e17074de923287895447db1d65941e","unresolved":false,"context_lines":[{"line_number":433,"context_line":"migration is complete, therefore ensuring an upper bound on the memory that"},{"line_number":434,"context_line":"needs to be transferred. Post-copy requires libvirt\u003e\u003d1.3.3 and QEMU\u003e\u003d2.5.0."},{"line_number":435,"context_line":""},{"line_number":436,"context_line":"When permitted, post-copy mode will be automatically activated if a"},{"line_number":437,"context_line":"live-migration memory copy iteration does not make percentage increase of at"},{"line_number":438,"context_line":"least 10% over the last iteration, or we reach the timeout defined by"},{"line_number":439,"context_line":"``live_migration_completion_timeout``. Note if you change to not timeout, i.e."},{"line_number":440,"context_line":"``live_migration_completion_timeout \u003d 0``, then there will be no automatic"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_7f4c9196","line":437,"range":{"start_line":436,"start_character":0,"end_line":437,"end_character":76},"in_reply_to":"3f79a3b5_9c4f3bbe","updated":"2018-12-11 11:40:15.000000000","message":"Done","commit_id":"1bb477e778be8c793cd65b74b4a373be50f3420a"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"bf59ff3d6707e6c290293930ed5ab313872a0da5","unresolved":false,"context_lines":[{"line_number":414,"context_line":"               mutable\u003dTrue,"},{"line_number":415,"context_line":"               help\u003d\"\"\""},{"line_number":416,"context_line":"This option will determine what actions will be taken against a VM after"},{"line_number":417,"context_line":"``live_migration_completion_timeout`` expires. Currently nova just aborts"},{"line_number":418,"context_line":"the LM operation after completion timeout expires. By default, we keep the"},{"line_number":419,"context_line":"same behavior of aborting after completion timeout. ``force_complete`` will"},{"line_number":420,"context_line":"either pause the VM or trigger post_copy depending on if post copy is"},{"line_number":421,"context_line":"enabled and available."},{"line_number":422,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_eb164ea2","line":419,"range":{"start_line":417,"start_character":46,"end_line":419,"end_character":51},"updated":"2018-12-11 03:15:51.000000000","message":"I think we don\u0027t have to say the backward competibility here, we just say ``abort`` is the default behavior.","commit_id":"ba0c1fbc6cd84e33ab35e6d467fd2a361e6cc7fa"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"fccda5c8e7e17074de923287895447db1d65941e","unresolved":false,"context_lines":[{"line_number":414,"context_line":"               mutable\u003dTrue,"},{"line_number":415,"context_line":"               help\u003d\"\"\""},{"line_number":416,"context_line":"This option will determine what actions will be taken against a VM after"},{"line_number":417,"context_line":"``live_migration_completion_timeout`` expires. Currently nova just aborts"},{"line_number":418,"context_line":"the LM operation after completion timeout expires. By default, we keep the"},{"line_number":419,"context_line":"same behavior of aborting after completion timeout. ``force_complete`` will"},{"line_number":420,"context_line":"either pause the VM or trigger post_copy depending on if post copy is"},{"line_number":421,"context_line":"enabled and available."},{"line_number":422,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_266d5b99","line":419,"range":{"start_line":417,"start_character":46,"end_line":419,"end_character":51},"in_reply_to":"3f79a3b5_eb164ea2","updated":"2018-12-11 11:40:15.000000000","message":"Done","commit_id":"ba0c1fbc6cd84e33ab35e6d467fd2a361e6cc7fa"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"329314f563a3fe9678e51b7fd8cec63ccbff43a0","unresolved":false,"context_lines":[{"line_number":437,"context_line":"least 10% over the last iteration, or will be activated if"},{"line_number":438,"context_line":"``live_migration_timeout_action`` is set to \u0027force_complete\u0027 and we reach the"},{"line_number":439,"context_line":"timeout defined by ``live_migration_completion_timeout``. Note if you change"},{"line_number":440,"context_line":"to not timeout, i.e. ``live_migration_completion_timeout \u003d 0``, then there"},{"line_number":441,"context_line":"will be no automatic switch to post-copy."},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"The live-migration force complete API also uses post-copy when permitted. If"},{"line_number":444,"context_line":"post-copy mode is not available, force complete falls back to pausing the VM"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_855c6258","line":441,"range":{"start_line":440,"start_character":64,"end_line":441,"end_character":41},"updated":"2018-12-11 08:54:13.000000000","message":"Not even if \u0027 live-migration memory copy iteration does not make percentage increase of at least 10% over the last iteration,\u0027 ?","commit_id":"256e35fe49da9d3dac430c3b92d6ed2e5c500a12"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b07c3084a47096ab68916177df98fb851f27915a","unresolved":false,"context_lines":[{"line_number":437,"context_line":"least 10% over the last iteration, or will be activated if"},{"line_number":438,"context_line":"``live_migration_timeout_action`` is set to \u0027force_complete\u0027 and we reach the"},{"line_number":439,"context_line":"timeout defined by ``live_migration_completion_timeout``. Note if you change"},{"line_number":440,"context_line":"to not timeout, i.e. ``live_migration_completion_timeout \u003d 0``, then there"},{"line_number":441,"context_line":"will be no automatic switch to post-copy."},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"The live-migration force complete API also uses post-copy when permitted. If"},{"line_number":444,"context_line":"post-copy mode is not available, force complete falls back to pausing the VM"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_c8583127","line":441,"range":{"start_line":440,"start_character":64,"end_line":441,"end_character":41},"in_reply_to":"3f79a3b5_855c6258","updated":"2018-12-11 09:00:09.000000000","message":"And now read the next patch that removes the progress calculation based post copy. So this text will be simplified in the next patch.","commit_id":"256e35fe49da9d3dac430c3b92d6ed2e5c500a12"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"fccda5c8e7e17074de923287895447db1d65941e","unresolved":false,"context_lines":[{"line_number":437,"context_line":"least 10% over the last iteration, or will be activated if"},{"line_number":438,"context_line":"``live_migration_timeout_action`` is set to \u0027force_complete\u0027 and we reach the"},{"line_number":439,"context_line":"timeout defined by ``live_migration_completion_timeout``. Note if you change"},{"line_number":440,"context_line":"to not timeout, i.e. ``live_migration_completion_timeout \u003d 0``, then there"},{"line_number":441,"context_line":"will be no automatic switch to post-copy."},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"The live-migration force complete API also uses post-copy when permitted. If"},{"line_number":444,"context_line":"post-copy mode is not available, force complete falls back to pausing the VM"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_f61dca77","line":441,"range":{"start_line":440,"start_character":64,"end_line":441,"end_character":41},"in_reply_to":"3f79a3b5_c8583127","updated":"2018-12-11 11:40:15.000000000","message":"Yes","commit_id":"256e35fe49da9d3dac430c3b92d6ed2e5c500a12"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"22a0d03aa457cc6f22322173ef4d0b600d4d09e1","unresolved":false,"context_lines":[{"line_number":413,"context_line":"               choices\u003d(\u0027abort\u0027, \u0027force_complete\u0027),"},{"line_number":414,"context_line":"               mutable\u003dTrue,"},{"line_number":415,"context_line":"               help\u003d\"\"\""},{"line_number":416,"context_line":"This option will determine what actions will be taken against a VM after"},{"line_number":417,"context_line":"``live_migration_completion_timeout`` expires. By default, we keep the"},{"line_number":418,"context_line":"same behavior of aborting after completion timeout. ``force_complete`` will"},{"line_number":419,"context_line":"either pause the VM or trigger post_copy depending on if post copy is"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_f14e34c1","line":416,"range":{"start_line":416,"start_character":12,"end_line":416,"end_character":17},"updated":"2018-12-11 11:57:47.000000000","message":"will be used to determine","commit_id":"bf45bd89a104ddf108fcf6676c59195878d432a8"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"22a0d03aa457cc6f22322173ef4d0b600d4d09e1","unresolved":false,"context_lines":[{"line_number":416,"context_line":"This option will determine what actions will be taken against a VM after"},{"line_number":417,"context_line":"``live_migration_completion_timeout`` expires. By default, we keep the"},{"line_number":418,"context_line":"same behavior of aborting after completion timeout. ``force_complete`` will"},{"line_number":419,"context_line":"either pause the VM or trigger post_copy depending on if post copy is"},{"line_number":420,"context_line":"enabled and available."},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"Related options:"},{"line_number":423,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_71e9c47f","line":420,"range":{"start_line":419,"start_character":53,"end_line":420,"end_character":22},"updated":"2018-12-11 11:57:47.000000000","message":"mention the config here","commit_id":"bf45bd89a104ddf108fcf6676c59195878d432a8"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"df8fd7e6eab7f59e1181adb4e9f432bd53555446","unresolved":false,"context_lines":[{"line_number":413,"context_line":"               choices\u003d(\u0027abort\u0027, \u0027force_complete\u0027),"},{"line_number":414,"context_line":"               mutable\u003dTrue,"},{"line_number":415,"context_line":"               help\u003d\"\"\""},{"line_number":416,"context_line":"This option will be used to determine what the action will be taken against a"},{"line_number":417,"context_line":"VM after ``live_migration_completion_timeout`` expires. By default, the live"},{"line_number":418,"context_line":"migrate operation will be aborted after completion timeout. If it is set to"},{"line_number":419,"context_line":"``force_complete``, compute service will either pause the VM or trigger"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_ec6f3af8","line":416,"range":{"start_line":416,"start_character":43,"end_line":416,"end_character":46},"updated":"2018-12-11 14:35:49.000000000","message":"s/the//","commit_id":"31e7f0bb82b93b50b5c50076fcd8c2d133f6eb00"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"383b449a3548ba6c242e0c8aa5a0f4f89915aae7","unresolved":false,"context_lines":[{"line_number":413,"context_line":"               choices\u003d(\u0027abort\u0027, \u0027force_complete\u0027),"},{"line_number":414,"context_line":"               mutable\u003dTrue,"},{"line_number":415,"context_line":"               help\u003d\"\"\""},{"line_number":416,"context_line":"This option will be used to determine what the action will be taken against a"},{"line_number":417,"context_line":"VM after ``live_migration_completion_timeout`` expires. By default, the live"},{"line_number":418,"context_line":"migrate operation will be aborted after completion timeout. If it is set to"},{"line_number":419,"context_line":"``force_complete``, compute service will either pause the VM or trigger"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_093db98a","line":416,"range":{"start_line":416,"start_character":43,"end_line":416,"end_character":46},"in_reply_to":"3f79a3b5_ec6f3af8","updated":"2018-12-12 02:10:54.000000000","message":"Done","commit_id":"31e7f0bb82b93b50b5c50076fcd8c2d133f6eb00"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"df8fd7e6eab7f59e1181adb4e9f432bd53555446","unresolved":false,"context_lines":[{"line_number":416,"context_line":"This option will be used to determine what the action will be taken against a"},{"line_number":417,"context_line":"VM after ``live_migration_completion_timeout`` expires. By default, the live"},{"line_number":418,"context_line":"migrate operation will be aborted after completion timeout. If it is set to"},{"line_number":419,"context_line":"``force_complete``, compute service will either pause the VM or trigger"},{"line_number":420,"context_line":"post_copy depending on if post copy is enabled and available"},{"line_number":421,"context_line":"(``live_migration_permit_post_copy`` is set to True)."},{"line_number":422,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_ac75c2cb","line":419,"range":{"start_line":419,"start_character":20,"end_line":419,"end_character":27},"updated":"2018-12-11 14:35:49.000000000","message":"the compute service","commit_id":"31e7f0bb82b93b50b5c50076fcd8c2d133f6eb00"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"383b449a3548ba6c242e0c8aa5a0f4f89915aae7","unresolved":false,"context_lines":[{"line_number":416,"context_line":"This option will be used to determine what the action will be taken against a"},{"line_number":417,"context_line":"VM after ``live_migration_completion_timeout`` expires. By default, the live"},{"line_number":418,"context_line":"migrate operation will be aborted after completion timeout. If it is set to"},{"line_number":419,"context_line":"``force_complete``, compute service will either pause the VM or trigger"},{"line_number":420,"context_line":"post_copy depending on if post copy is enabled and available"},{"line_number":421,"context_line":"(``live_migration_permit_post_copy`` is set to True)."},{"line_number":422,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_69fa2dc2","line":419,"range":{"start_line":419,"start_character":20,"end_line":419,"end_character":27},"in_reply_to":"3f79a3b5_ac75c2cb","updated":"2018-12-12 02:10:54.000000000","message":"Done","commit_id":"31e7f0bb82b93b50b5c50076fcd8c2d133f6eb00"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"df8fd7e6eab7f59e1181adb4e9f432bd53555446","unresolved":false,"context_lines":[{"line_number":417,"context_line":"VM after ``live_migration_completion_timeout`` expires. By default, the live"},{"line_number":418,"context_line":"migrate operation will be aborted after completion timeout. If it is set to"},{"line_number":419,"context_line":"``force_complete``, compute service will either pause the VM or trigger"},{"line_number":420,"context_line":"post_copy depending on if post copy is enabled and available"},{"line_number":421,"context_line":"(``live_migration_permit_post_copy`` is set to True)."},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"Related options:"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_8c480689","line":420,"range":{"start_line":420,"start_character":0,"end_line":420,"end_character":9},"updated":"2018-12-11 14:35:49.000000000","message":"post-copy","commit_id":"31e7f0bb82b93b50b5c50076fcd8c2d133f6eb00"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"383b449a3548ba6c242e0c8aa5a0f4f89915aae7","unresolved":false,"context_lines":[{"line_number":417,"context_line":"VM after ``live_migration_completion_timeout`` expires. By default, the live"},{"line_number":418,"context_line":"migrate operation will be aborted after completion timeout. If it is set to"},{"line_number":419,"context_line":"``force_complete``, compute service will either pause the VM or trigger"},{"line_number":420,"context_line":"post_copy depending on if post copy is enabled and available"},{"line_number":421,"context_line":"(``live_migration_permit_post_copy`` is set to True)."},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"Related options:"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_89ff89af","line":420,"range":{"start_line":420,"start_character":0,"end_line":420,"end_character":9},"in_reply_to":"3f79a3b5_8c480689","updated":"2018-12-12 02:10:54.000000000","message":"Done","commit_id":"31e7f0bb82b93b50b5c50076fcd8c2d133f6eb00"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"df8fd7e6eab7f59e1181adb4e9f432bd53555446","unresolved":false,"context_lines":[{"line_number":451,"context_line":""},{"line_number":452,"context_line":"Related options:"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"    * live_migration_permit_auto_converge"},{"line_number":455,"context_line":"\"\"\"),"},{"line_number":456,"context_line":"    cfg.BoolOpt(\u0027live_migration_permit_auto_converge\u0027,"},{"line_number":457,"context_line":"                default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_8c5fa64a","line":454,"updated":"2018-12-11 14:35:49.000000000","message":"live_migration_timeout_action should also be listed here.","commit_id":"31e7f0bb82b93b50b5c50076fcd8c2d133f6eb00"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"383b449a3548ba6c242e0c8aa5a0f4f89915aae7","unresolved":false,"context_lines":[{"line_number":451,"context_line":""},{"line_number":452,"context_line":"Related options:"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"    * live_migration_permit_auto_converge"},{"line_number":455,"context_line":"\"\"\"),"},{"line_number":456,"context_line":"    cfg.BoolOpt(\u0027live_migration_permit_auto_converge\u0027,"},{"line_number":457,"context_line":"                default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_490971d9","line":454,"in_reply_to":"3f79a3b5_8c5fa64a","updated":"2018-12-12 02:10:54.000000000","message":"Done","commit_id":"31e7f0bb82b93b50b5c50076fcd8c2d133f6eb00"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"93c252369e3e326481d1cbef4280a501c30e18d6","unresolved":false,"context_lines":[{"line_number":435,"context_line":""},{"line_number":436,"context_line":"When permitted, post-copy mode will be automatically activated if a"},{"line_number":437,"context_line":"live-migration memory copy iteration does not make percentage increase of at"},{"line_number":438,"context_line":"least 10% over the last iteration, or will be activated if"},{"line_number":439,"context_line":"``live_migration_timeout_action`` is set to \u0027force_complete\u0027 and we reach the"},{"line_number":440,"context_line":"timeout defined by ``live_migration_completion_timeout``. Note if you change"},{"line_number":441,"context_line":"to not timeout, i.e. ``live_migration_completion_timeout \u003d 0``, then there"},{"line_number":442,"context_line":"will be no automatic switch to post-copy."},{"line_number":443,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_a7735b50","line":440,"range":{"start_line":438,"start_character":56,"end_line":440,"end_character":57},"updated":"2018-12-13 22:36:40.000000000","message":"nit: I would reverse the option usage here - you have to hit live_migration_completion_timeout before live_migration_timeout_action is used.","commit_id":"8cdd57d91088ffc1d6f8ca60b5fa0dc3ec822bd3"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"100c908d7ae3158f2c8ff6d84e1620f8124bc326","unresolved":false,"context_lines":[{"line_number":435,"context_line":""},{"line_number":436,"context_line":"When permitted, post-copy mode will be automatically activated if a"},{"line_number":437,"context_line":"live-migration memory copy iteration does not make percentage increase of at"},{"line_number":438,"context_line":"least 10% over the last iteration, or will be activated if"},{"line_number":439,"context_line":"``live_migration_timeout_action`` is set to \u0027force_complete\u0027 and we reach the"},{"line_number":440,"context_line":"timeout defined by ``live_migration_completion_timeout``. Note if you change"},{"line_number":441,"context_line":"to not timeout, i.e. ``live_migration_completion_timeout \u003d 0``, then there"},{"line_number":442,"context_line":"will be no automatic switch to post-copy."},{"line_number":443,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_dce66515","line":440,"range":{"start_line":438,"start_character":56,"end_line":440,"end_character":57},"in_reply_to":"3f79a3b5_a7735b50","updated":"2018-12-14 06:52:36.000000000","message":"Done","commit_id":"8cdd57d91088ffc1d6f8ca60b5fa0dc3ec822bd3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"93c252369e3e326481d1cbef4280a501c30e18d6","unresolved":false,"context_lines":[{"line_number":438,"context_line":"least 10% over the last iteration, or will be activated if"},{"line_number":439,"context_line":"``live_migration_timeout_action`` is set to \u0027force_complete\u0027 and we reach the"},{"line_number":440,"context_line":"timeout defined by ``live_migration_completion_timeout``. Note if you change"},{"line_number":441,"context_line":"to not timeout, i.e. ``live_migration_completion_timeout \u003d 0``, then there"},{"line_number":442,"context_line":"will be no automatic switch to post-copy."},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"The live-migration force complete API also uses post-copy when permitted. If"},{"line_number":445,"context_line":"post-copy mode is not available, force complete falls back to pausing the VM"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_07948f34","line":442,"range":{"start_line":441,"start_character":64,"end_line":442,"end_character":41},"updated":"2018-12-13 22:36:40.000000000","message":"Does \"if a\nlive-migration memory copy iteration does not make percentage increase of at\nleast 10% over the last iteration\" still apply though? Because before this change, if we reach live_migration_completion_timeout we just abort, right? But now post-copy is triggered if we\u0027re (1) not progressing or (2) we\u0027ve reached live_migration_completion_timeout and the action is \u0027force_complete\u0027, but if I set live_migration_completion_timeout\u003d0 will post-copy still be activated if the live migration iterations are not making progress as live_migration_permit_post_copy was originally intended?\n\nMaybe this should just say, \"Note if you change\nto not timeout, i.e. ``live_migration_completion_timeout \u003d 0``, then there will be no automatic switch to post-copy unless ``live_migration_permit_post_copy\u003dTrue`` and the live migration is not progressing.\"","commit_id":"8cdd57d91088ffc1d6f8ca60b5fa0dc3ec822bd3"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"100c908d7ae3158f2c8ff6d84e1620f8124bc326","unresolved":false,"context_lines":[{"line_number":438,"context_line":"least 10% over the last iteration, or will be activated if"},{"line_number":439,"context_line":"``live_migration_timeout_action`` is set to \u0027force_complete\u0027 and we reach the"},{"line_number":440,"context_line":"timeout defined by ``live_migration_completion_timeout``. Note if you change"},{"line_number":441,"context_line":"to not timeout, i.e. ``live_migration_completion_timeout \u003d 0``, then there"},{"line_number":442,"context_line":"will be no automatic switch to post-copy."},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"The live-migration force complete API also uses post-copy when permitted. If"},{"line_number":445,"context_line":"post-copy mode is not available, force complete falls back to pausing the VM"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_7b3b9a35","line":442,"range":{"start_line":441,"start_character":64,"end_line":442,"end_character":41},"in_reply_to":"3f79a3b5_07948f34","updated":"2018-12-14 06:52:36.000000000","message":"\u003e Does \"if a\nlive-migration memory copy iteration does not make percentage increase of at\nleast 10% over the last iteration\" still apply though?\n\nStill apply, and until next patch is merged [1], we will remove this.\n[1] https://review.openstack.org/#/c/619142/14/nova/conf/libvirt.py@418\n\nAfter this patch, post-copy is triggered\n(1) not progressing\n(2) reach time and force_complete\n\nand after next patch, post-copy is triggered only reach timeout and force_complete.","commit_id":"8cdd57d91088ffc1d6f8ca60b5fa0dc3ec822bd3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5b42de90f3402422087633fd6c0c08191ef7d488","unresolved":false,"context_lines":[{"line_number":438,"context_line":"least 10% over the last iteration, or will be activated if"},{"line_number":439,"context_line":"``live_migration_timeout_action`` is set to \u0027force_complete\u0027 and we reach the"},{"line_number":440,"context_line":"timeout defined by ``live_migration_completion_timeout``. Note if you change"},{"line_number":441,"context_line":"to not timeout, i.e. ``live_migration_completion_timeout \u003d 0``, then there"},{"line_number":442,"context_line":"will be no automatic switch to post-copy."},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"The live-migration force complete API also uses post-copy when permitted. If"},{"line_number":445,"context_line":"post-copy mode is not available, force complete falls back to pausing the VM"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_ad924a48","line":442,"range":{"start_line":441,"start_character":64,"end_line":442,"end_character":41},"in_reply_to":"3f79a3b5_7b3b9a35","updated":"2018-12-14 19:16:51.000000000","message":"Ah OK, I forgot that the main reason behind this blueprint is that live_migration_progress_timeout is buggy and shouldn\u0027t be used, so yeah that clears things up.","commit_id":"8cdd57d91088ffc1d6f8ca60b5fa0dc3ec822bd3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"93c252369e3e326481d1cbef4280a501c30e18d6","unresolved":false,"context_lines":[{"line_number":451,"context_line":""},{"line_number":452,"context_line":"Related options:"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"    * live_migration_permit_auto_converge"},{"line_number":455,"context_line":"    * live_migration_timeout_action"},{"line_number":456,"context_line":"\"\"\"),"},{"line_number":457,"context_line":"    cfg.BoolOpt(\u0027live_migration_permit_auto_converge\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_87917f53","line":454,"range":{"start_line":454,"start_character":0,"end_line":454,"end_character":4},"updated":"2018-12-13 22:36:40.000000000","message":"nit: not really your fault, but we could drop the indent to fix the formatting","commit_id":"8cdd57d91088ffc1d6f8ca60b5fa0dc3ec822bd3"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"100c908d7ae3158f2c8ff6d84e1620f8124bc326","unresolved":false,"context_lines":[{"line_number":451,"context_line":""},{"line_number":452,"context_line":"Related options:"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"    * live_migration_permit_auto_converge"},{"line_number":455,"context_line":"    * live_migration_timeout_action"},{"line_number":456,"context_line":"\"\"\"),"},{"line_number":457,"context_line":"    cfg.BoolOpt(\u0027live_migration_permit_auto_converge\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_7bd71abf","line":454,"range":{"start_line":454,"start_character":0,"end_line":454,"end_character":4},"in_reply_to":"3f79a3b5_87917f53","updated":"2018-12-14 06:52:36.000000000","message":"Done","commit_id":"8cdd57d91088ffc1d6f8ca60b5fa0dc3ec822bd3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bcf01cdbbed98d65a05924a17a2b1ad5981a818c","unresolved":false,"context_lines":[{"line_number":375,"context_line":"\"\"\"),"},{"line_number":376,"context_line":"    cfg.IntOpt(\u0027live_migration_completion_timeout\u0027,"},{"line_number":377,"context_line":"               default\u003d800,"},{"line_number":378,"context_line":"               min\u003d0,"},{"line_number":379,"context_line":"               mutable\u003dTrue,"},{"line_number":380,"context_line":"               help\u003d\"\"\""},{"line_number":381,"context_line":"Time to wait, in seconds, for migration to successfully complete transferring"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f79a3b5_ad2ecaf5","line":378,"updated":"2018-12-14 19:29:30.000000000","message":"This didn\u0027t really need to be added in this change, I was just commenting on it as weird that we didn\u0027t have it in PS12. I\u0027m not sure how other reviewers will feel about munging this into this patch. Some could think it\u0027s reason for an upgrade impact release note, but I think that is probably excessive. Given the logic in how this option is used, it\u0027s not doing \"live_migration_completion_timeout \u003e 0\" it\u0027s doing \"live_migration_completion_timeout !\u003d 0\" so if anyone has this set to a value \u003c0 they are already broken; given that I\u0027m OK with including it here and not adding a specific upgrade note for it.\n\n(later)\n\nOK I see you mentioned it in the release note here. That\u0027s good enough for me.","commit_id":"1a38ae6bc3e4a2d0369731ed7f906cc2426b7dce"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"bf59ff3d6707e6c290293930ed5ab313872a0da5","unresolved":false,"context_lines":[{"line_number":11430,"context_line":""},{"line_number":11431,"context_line":"    @mock.patch.object(libvirt_driver.LibvirtDriver,"},{"line_number":11432,"context_line":"                       \"_is_post_copy_enabled\")"},{"line_number":11433,"context_line":"    def test_live_migration_monitor_postcopy_switch(self,"},{"line_number":11434,"context_line":"            mock_postcopy_enabled):"},{"line_number":11435,"context_line":"        self.flags(live_migration_completion_timeout\u003d40,"},{"line_number":11436,"context_line":"                   live_migration_timeout_action\u003d\u0027force_complete\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_6b78fef4","line":11433,"range":{"start_line":11433,"start_character":9,"end_line":11433,"end_character":52},"updated":"2018-12-11 03:15:51.000000000","message":"probably should change the test name as this now has nothing to do with the switch function? Or probably you should add another test","commit_id":"ba0c1fbc6cd84e33ab35e6d467fd2a361e6cc7fa"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"fccda5c8e7e17074de923287895447db1d65941e","unresolved":false,"context_lines":[{"line_number":11430,"context_line":""},{"line_number":11431,"context_line":"    @mock.patch.object(libvirt_driver.LibvirtDriver,"},{"line_number":11432,"context_line":"                       \"_is_post_copy_enabled\")"},{"line_number":11433,"context_line":"    def test_live_migration_monitor_postcopy_switch(self,"},{"line_number":11434,"context_line":"            mock_postcopy_enabled):"},{"line_number":11435,"context_line":"        self.flags(live_migration_completion_timeout\u003d40,"},{"line_number":11436,"context_line":"                   live_migration_timeout_action\u003d\u0027force_complete\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_66a033a4","line":11433,"range":{"start_line":11433,"start_character":9,"end_line":11433,"end_character":52},"in_reply_to":"3f79a3b5_6b78fef4","updated":"2018-12-11 11:40:15.000000000","message":"Done","commit_id":"ba0c1fbc6cd84e33ab35e6d467fd2a361e6cc7fa"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"329314f563a3fe9678e51b7fd8cec63ccbff43a0","unresolved":false,"context_lines":[{"line_number":11430,"context_line":""},{"line_number":11431,"context_line":"    @mock.patch.object(libvirt_driver.LibvirtDriver,"},{"line_number":11432,"context_line":"                       \"_is_post_copy_enabled\")"},{"line_number":11433,"context_line":"    def test_live_migration_monitor_force_complete_postcopy(self,"},{"line_number":11434,"context_line":"            mock_postcopy_enabled):"},{"line_number":11435,"context_line":"        self.flags(live_migration_completion_timeout\u003d40,"},{"line_number":11436,"context_line":"                   live_migration_timeout_action\u003d\u0027force_complete\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_283525d3","line":11433,"updated":"2018-12-11 08:54:13.000000000","message":"I think by this change we lost test coverage over the if starting at: \nhttps://review.openstack.org/#/c/619143/8/nova/virt/libvirt/driver.py@7404","commit_id":"256e35fe49da9d3dac430c3b92d6ed2e5c500a12"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b07c3084a47096ab68916177df98fb851f27915a","unresolved":false,"context_lines":[{"line_number":11430,"context_line":""},{"line_number":11431,"context_line":"    @mock.patch.object(libvirt_driver.LibvirtDriver,"},{"line_number":11432,"context_line":"                       \"_is_post_copy_enabled\")"},{"line_number":11433,"context_line":"    def test_live_migration_monitor_force_complete_postcopy(self,"},{"line_number":11434,"context_line":"            mock_postcopy_enabled):"},{"line_number":11435,"context_line":"        self.flags(live_migration_completion_timeout\u003d40,"},{"line_number":11436,"context_line":"                   live_migration_timeout_action\u003d\u0027force_complete\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_489ae1c2","line":11433,"in_reply_to":"3f79a3b5_283525d3","updated":"2018-12-11 09:00:09.000000000","message":"And now read the next patch that removes the progress calculation based post copy. So we are loosing the test coverage over a piece of code that will go away in the next patch, so I can live with this.","commit_id":"256e35fe49da9d3dac430c3b92d6ed2e5c500a12"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"93c252369e3e326481d1cbef4280a501c30e18d6","unresolved":false,"context_lines":[{"line_number":11431,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.migration.should_switch_to_postcopy\u0027)"},{"line_number":11432,"context_line":"    @mock.patch.object(libvirt_driver.LibvirtDriver,"},{"line_number":11433,"context_line":"                       \"_is_post_copy_enabled\")"},{"line_number":11434,"context_line":"    def test_live_migration_monitor_postcopy_switch(self,"},{"line_number":11435,"context_line":"            mock_postcopy_enabled, mock_should_switch):"},{"line_number":11436,"context_line":"        # A normal sequence where migration is switched to postcopy mode"},{"line_number":11437,"context_line":"        mock_postcopy_enabled.return_value \u003d True"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_07ad6f82","side":"PARENT","line":11434,"range":{"start_line":11434,"start_character":8,"end_line":11434,"end_character":51},"updated":"2018-12-13 22:36:40.000000000","message":"Rather than change this test, shouldn\u0027t it be a new test for the new option? Again, going back to my comment in the post-copy option help, there are two ways to activate post-copy, right?\n\n1. we hit the completion timeout and the action is \u0027force_complete\u0027\n\n2. or should_switch_to_postcopy returns True because the post_copy option is true and the live migration has stalled (regardless of the completion timeout)","commit_id":"ae3064b7a820ea02f7fc8a1aa4a41f35a06534f1"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"188a6341d58dc2cfc7b7628ec0dc9eb3c9961b64","unresolved":false,"context_lines":[{"line_number":11431,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.migration.should_switch_to_postcopy\u0027)"},{"line_number":11432,"context_line":"    @mock.patch.object(libvirt_driver.LibvirtDriver,"},{"line_number":11433,"context_line":"                       \"_is_post_copy_enabled\")"},{"line_number":11434,"context_line":"    def test_live_migration_monitor_postcopy_switch(self,"},{"line_number":11435,"context_line":"            mock_postcopy_enabled, mock_should_switch):"},{"line_number":11436,"context_line":"        # A normal sequence where migration is switched to postcopy mode"},{"line_number":11437,"context_line":"        mock_postcopy_enabled.return_value \u003d True"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_a08d817f","side":"PARENT","line":11434,"range":{"start_line":11434,"start_character":8,"end_line":11434,"end_character":51},"in_reply_to":"3f79a3b5_07ad6f82","updated":"2018-12-14 01:47:57.000000000","message":"Oops, yeah, I asked for this for in few patchests before, somehow missed this one here.","commit_id":"ae3064b7a820ea02f7fc8a1aa4a41f35a06534f1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5b42de90f3402422087633fd6c0c08191ef7d488","unresolved":false,"context_lines":[{"line_number":11431,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.migration.should_switch_to_postcopy\u0027)"},{"line_number":11432,"context_line":"    @mock.patch.object(libvirt_driver.LibvirtDriver,"},{"line_number":11433,"context_line":"                       \"_is_post_copy_enabled\")"},{"line_number":11434,"context_line":"    def test_live_migration_monitor_postcopy_switch(self,"},{"line_number":11435,"context_line":"            mock_postcopy_enabled, mock_should_switch):"},{"line_number":11436,"context_line":"        # A normal sequence where migration is switched to postcopy mode"},{"line_number":11437,"context_line":"        mock_postcopy_enabled.return_value \u003d True"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_edd602f8","side":"PARENT","line":11434,"range":{"start_line":11434,"start_character":8,"end_line":11434,"end_character":51},"in_reply_to":"3f79a3b5_7bf07a61","updated":"2018-12-14 19:16:51.000000000","message":"\u003e Again, the way 2nd would be remove in next patch.\n \u003e \n \u003e But I agree with you we should keep this old test case and remove\n \u003e it in next patch.\n\nYeah the changes are tightly coupled but it would be easier to separate the changes as much as possible by introducing only new functionality in this change and then do the clean drop of the deprecated functionality in the next change.","commit_id":"ae3064b7a820ea02f7fc8a1aa4a41f35a06534f1"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"100c908d7ae3158f2c8ff6d84e1620f8124bc326","unresolved":false,"context_lines":[{"line_number":11431,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.migration.should_switch_to_postcopy\u0027)"},{"line_number":11432,"context_line":"    @mock.patch.object(libvirt_driver.LibvirtDriver,"},{"line_number":11433,"context_line":"                       \"_is_post_copy_enabled\")"},{"line_number":11434,"context_line":"    def test_live_migration_monitor_postcopy_switch(self,"},{"line_number":11435,"context_line":"            mock_postcopy_enabled, mock_should_switch):"},{"line_number":11436,"context_line":"        # A normal sequence where migration is switched to postcopy mode"},{"line_number":11437,"context_line":"        mock_postcopy_enabled.return_value \u003d True"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_7bf07a61","side":"PARENT","line":11434,"range":{"start_line":11434,"start_character":8,"end_line":11434,"end_character":51},"in_reply_to":"3f79a3b5_a08d817f","updated":"2018-12-14 06:52:36.000000000","message":"Again, the way 2nd would be remove in next patch.\n\nBut I agree with you we should keep this old test case and remove it in next patch.","commit_id":"ae3064b7a820ea02f7fc8a1aa4a41f35a06534f1"}],"nova/tests/unit/virt/libvirt/test_migration.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"329314f563a3fe9678e51b7fd8cec63ccbff43a0","unresolved":false,"context_lines":[{"line_number":977,"context_line":"    def test_live_migration_abort_stuck(self):"},{"line_number":978,"context_line":"        # Progress time exceeds progress timeout"},{"line_number":979,"context_line":"        self.assertTrue(migration.should_trigger_timeout_action("},{"line_number":980,"context_line":"            self.instance, 5000, 1000, 2000, 4500, 9000, \"running\"))"},{"line_number":981,"context_line":""},{"line_number":982,"context_line":"    def test_live_migration_abort_no_prog_timeout(self):"},{"line_number":983,"context_line":"        # Progress timeout is disabled"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_c82a7177","line":980,"updated":"2018-12-11 08:54:13.000000000","message":"+1 for the re-indention to a sane format","commit_id":"256e35fe49da9d3dac430c3b92d6ed2e5c500a12"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"b8ec05bbc168bdfa76cde345c2e77f24fa0dc3c3","unresolved":false,"context_lines":[{"line_number":7331,"context_line":""},{"line_number":7332,"context_line":"                completion_timeout \u003d int("},{"line_number":7333,"context_line":"                    CONF.libvirt.live_migration_completion_timeout * data_gb)"},{"line_number":7334,"context_line":"                if libvirt_migrate.should_abort(instance, elapsed,"},{"line_number":7335,"context_line":"                                                completion_timeout,"},{"line_number":7336,"context_line":"                                                migration.status):"},{"line_number":7337,"context_line":"                    timeout_act \u003d CONF.libvirt.live_migration_timeout_action"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_b67fb6ba","line":7334,"range":{"start_line":7334,"start_character":35,"end_line":7334,"end_character":47},"updated":"2018-11-22 02:40:32.000000000","message":"the check force_complete and abort are under this logic check\nat least the name seems confusing now...","commit_id":"6aa9ed7fcce9339b922b630b60afa21d3b70d7e4"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"196c3facbf6b58fcf04935126b0ffe54acb9873b","unresolved":false,"context_lines":[{"line_number":7331,"context_line":""},{"line_number":7332,"context_line":"                completion_timeout \u003d int("},{"line_number":7333,"context_line":"                    CONF.libvirt.live_migration_completion_timeout * data_gb)"},{"line_number":7334,"context_line":"                if libvirt_migrate.should_abort(instance, elapsed,"},{"line_number":7335,"context_line":"                                                completion_timeout,"},{"line_number":7336,"context_line":"                                                migration.status):"},{"line_number":7337,"context_line":"                    timeout_act \u003d CONF.libvirt.live_migration_timeout_action"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_b9efa9f8","line":7334,"range":{"start_line":7334,"start_character":35,"end_line":7334,"end_character":47},"in_reply_to":"3f79a3b5_b67fb6ba","updated":"2018-11-22 03:36:57.000000000","message":"Done","commit_id":"6aa9ed7fcce9339b922b630b60afa21d3b70d7e4"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"bf59ff3d6707e6c290293930ed5ab313872a0da5","unresolved":false,"context_lines":[{"line_number":7389,"context_line":"                        elapsed, completion_timeout, migration.status):"},{"line_number":7390,"context_line":"                    timeout_act \u003d CONF.libvirt.live_migration_timeout_action"},{"line_number":7391,"context_line":"                    if timeout_act \u003d\u003d \u0027force_complete\u0027:"},{"line_number":7392,"context_line":"                        self.live_migration_force_complete(instance)"},{"line_number":7393,"context_line":"                    else:"},{"line_number":7394,"context_line":"                        # timeout action is \u0027abort\u0027"},{"line_number":7395,"context_line":"                        try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_6b623e16","line":7392,"range":{"start_line":7392,"start_character":24,"end_line":7392,"end_character":68},"updated":"2018-12-11 03:15:51.000000000","message":"should probably handle exception.NoActiveMigrationForInstance raised in: http://git.openstack.org/cgit/openstack/nova/tree/nova/virt/libvirt/driver.py#n7573","commit_id":"ba0c1fbc6cd84e33ab35e6d467fd2a361e6cc7fa"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"fccda5c8e7e17074de923287895447db1d65941e","unresolved":false,"context_lines":[{"line_number":7389,"context_line":"                        elapsed, completion_timeout, migration.status):"},{"line_number":7390,"context_line":"                    timeout_act \u003d CONF.libvirt.live_migration_timeout_action"},{"line_number":7391,"context_line":"                    if timeout_act \u003d\u003d \u0027force_complete\u0027:"},{"line_number":7392,"context_line":"                        self.live_migration_force_complete(instance)"},{"line_number":7393,"context_line":"                    else:"},{"line_number":7394,"context_line":"                        # timeout action is \u0027abort\u0027"},{"line_number":7395,"context_line":"                        try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_26e0fbf8","line":7392,"range":{"start_line":7392,"start_character":24,"end_line":7392,"end_character":68},"in_reply_to":"3f79a3b5_6b623e16","updated":"2018-12-11 11:40:15.000000000","message":"I prefer this raise this exception and process in [1]\n\n[1] https://review.openstack.org/#/c/619143/7/nova/virt/libvirt/driver.py@7555","commit_id":"ba0c1fbc6cd84e33ab35e6d467fd2a361e6cc7fa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"93c252369e3e326481d1cbef4280a501c30e18d6","unresolved":false,"context_lines":[{"line_number":7383,"context_line":""},{"line_number":7384,"context_line":"                progress_timeout \u003d CONF.libvirt.live_migration_progress_timeout"},{"line_number":7385,"context_line":"                completion_timeout \u003d int("},{"line_number":7386,"context_line":"                    CONF.libvirt.live_migration_completion_timeout * data_gb)"},{"line_number":7387,"context_line":"                if libvirt_migrate.should_trigger_timeout_action("},{"line_number":7388,"context_line":"                        instance, now, progress_time, progress_timeout,"},{"line_number":7389,"context_line":"                        elapsed, completion_timeout, migration.status):"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_c7f69760","line":7386,"range":{"start_line":7386,"start_character":33,"end_line":7386,"end_character":66},"updated":"2018-12-13 22:36:40.000000000","message":"I just realized there is no min value on this option, which seems weird, I would have expected to see min\u003d0 on this option. That\u0027s sort of outside of this change but could be done in a separate patch.","commit_id":"8cdd57d91088ffc1d6f8ca60b5fa0dc3ec822bd3"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"100c908d7ae3158f2c8ff6d84e1620f8124bc326","unresolved":false,"context_lines":[{"line_number":7383,"context_line":""},{"line_number":7384,"context_line":"                progress_timeout \u003d CONF.libvirt.live_migration_progress_timeout"},{"line_number":7385,"context_line":"                completion_timeout \u003d int("},{"line_number":7386,"context_line":"                    CONF.libvirt.live_migration_completion_timeout * data_gb)"},{"line_number":7387,"context_line":"                if libvirt_migrate.should_trigger_timeout_action("},{"line_number":7388,"context_line":"                        instance, now, progress_time, progress_timeout,"},{"line_number":7389,"context_line":"                        elapsed, completion_timeout, migration.status):"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_dbad0e35","line":7386,"range":{"start_line":7386,"start_character":33,"end_line":7386,"end_character":66},"in_reply_to":"3f79a3b5_c7f69760","updated":"2018-12-14 06:52:36.000000000","message":"OK, will do","commit_id":"8cdd57d91088ffc1d6f8ca60b5fa0dc3ec822bd3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"93c252369e3e326481d1cbef4280a501c30e18d6","unresolved":false,"context_lines":[{"line_number":7384,"context_line":"                progress_timeout \u003d CONF.libvirt.live_migration_progress_timeout"},{"line_number":7385,"context_line":"                completion_timeout \u003d int("},{"line_number":7386,"context_line":"                    CONF.libvirt.live_migration_completion_timeout * data_gb)"},{"line_number":7387,"context_line":"                if libvirt_migrate.should_trigger_timeout_action("},{"line_number":7388,"context_line":"                        instance, now, progress_time, progress_timeout,"},{"line_number":7389,"context_line":"                        elapsed, completion_timeout, migration.status):"},{"line_number":7390,"context_line":"                    timeout_act \u003d CONF.libvirt.live_migration_timeout_action"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_c7be97af","line":7387,"updated":"2018-12-13 22:36:40.000000000","message":"A comment here would be nice to indicate what this is checking and if true, what happens. There is a lot of confusing code in this method so it really needs to be documented well.","commit_id":"8cdd57d91088ffc1d6f8ca60b5fa0dc3ec822bd3"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"100c908d7ae3158f2c8ff6d84e1620f8124bc326","unresolved":false,"context_lines":[{"line_number":7384,"context_line":"                progress_timeout \u003d CONF.libvirt.live_migration_progress_timeout"},{"line_number":7385,"context_line":"                completion_timeout \u003d int("},{"line_number":7386,"context_line":"                    CONF.libvirt.live_migration_completion_timeout * data_gb)"},{"line_number":7387,"context_line":"                if libvirt_migrate.should_trigger_timeout_action("},{"line_number":7388,"context_line":"                        instance, now, progress_time, progress_timeout,"},{"line_number":7389,"context_line":"                        elapsed, completion_timeout, migration.status):"},{"line_number":7390,"context_line":"                    timeout_act \u003d CONF.libvirt.live_migration_timeout_action"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_5cdd7510","line":7387,"in_reply_to":"3f79a3b5_c7be97af","updated":"2018-12-14 06:52:36.000000000","message":"Done","commit_id":"8cdd57d91088ffc1d6f8ca60b5fa0dc3ec822bd3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"93c252369e3e326481d1cbef4280a501c30e18d6","unresolved":false,"context_lines":[{"line_number":7389,"context_line":"                        elapsed, completion_timeout, migration.status):"},{"line_number":7390,"context_line":"                    timeout_act \u003d CONF.libvirt.live_migration_timeout_action"},{"line_number":7391,"context_line":"                    if timeout_act \u003d\u003d \u0027force_complete\u0027:"},{"line_number":7392,"context_line":"                        self.live_migration_force_complete(instance)"},{"line_number":7393,"context_line":"                    else:"},{"line_number":7394,"context_line":"                        # timeout action is \u0027abort\u0027"},{"line_number":7395,"context_line":"                        try:"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_0757af5b","line":7392,"range":{"start_line":7392,"start_character":29,"end_line":7392,"end_character":58},"updated":"2018-12-13 22:36:40.000000000","message":"I was wondering why we just don\u0027t call trigger_postcopy_switch here like L7408 below, but I guess we do it in a roundabout way by calling live_migration_force_complete because that will make us hit this code:\n\nhttps://review.openstack.org/#/c/619143/12/nova/virt/libvirt/migration.py@579\n\nAm I following this correctly? If so, wouldn\u0027t it just be easier to call trigger_postcopy_switch and avoid that in-between logic?","commit_id":"8cdd57d91088ffc1d6f8ca60b5fa0dc3ec822bd3"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"188a6341d58dc2cfc7b7628ec0dc9eb3c9961b64","unresolved":false,"context_lines":[{"line_number":7389,"context_line":"                        elapsed, completion_timeout, migration.status):"},{"line_number":7390,"context_line":"                    timeout_act \u003d CONF.libvirt.live_migration_timeout_action"},{"line_number":7391,"context_line":"                    if timeout_act \u003d\u003d \u0027force_complete\u0027:"},{"line_number":7392,"context_line":"                        self.live_migration_force_complete(instance)"},{"line_number":7393,"context_line":"                    else:"},{"line_number":7394,"context_line":"                        # timeout action is \u0027abort\u0027"},{"line_number":7395,"context_line":"                        try:"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_6063e9ad","line":7392,"range":{"start_line":7392,"start_character":29,"end_line":7392,"end_character":58},"in_reply_to":"3f79a3b5_0757af5b","updated":"2018-12-14 01:47:57.000000000","message":"There are also some \"if\" conditions, maybe the current way is easier to read. I think he did not checked the below logic as there is a function called live_migration_force_complete and so he used it directly.","commit_id":"8cdd57d91088ffc1d6f8ca60b5fa0dc3ec822bd3"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"100c908d7ae3158f2c8ff6d84e1620f8124bc326","unresolved":false,"context_lines":[{"line_number":7389,"context_line":"                        elapsed, completion_timeout, migration.status):"},{"line_number":7390,"context_line":"                    timeout_act \u003d CONF.libvirt.live_migration_timeout_action"},{"line_number":7391,"context_line":"                    if timeout_act \u003d\u003d \u0027force_complete\u0027:"},{"line_number":7392,"context_line":"                        self.live_migration_force_complete(instance)"},{"line_number":7393,"context_line":"                    else:"},{"line_number":7394,"context_line":"                        # timeout action is \u0027abort\u0027"},{"line_number":7395,"context_line":"                        try:"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_7b215ab2","line":7392,"range":{"start_line":7392,"start_character":29,"end_line":7392,"end_character":58},"in_reply_to":"3f79a3b5_6063e9ad","updated":"2018-12-14 06:52:36.000000000","message":"Yes, I just think is easier to read, and let others know we do the same thing like we do force-complete-migrations.","commit_id":"8cdd57d91088ffc1d6f8ca60b5fa0dc3ec822bd3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5b42de90f3402422087633fd6c0c08191ef7d488","unresolved":false,"context_lines":[{"line_number":7389,"context_line":"                        elapsed, completion_timeout, migration.status):"},{"line_number":7390,"context_line":"                    timeout_act \u003d CONF.libvirt.live_migration_timeout_action"},{"line_number":7391,"context_line":"                    if timeout_act \u003d\u003d \u0027force_complete\u0027:"},{"line_number":7392,"context_line":"                        self.live_migration_force_complete(instance)"},{"line_number":7393,"context_line":"                    else:"},{"line_number":7394,"context_line":"                        # timeout action is \u0027abort\u0027"},{"line_number":7395,"context_line":"                        try:"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_edffe265","line":7392,"range":{"start_line":7392,"start_character":29,"end_line":7392,"end_character":58},"in_reply_to":"3f79a3b5_7b215ab2","updated":"2018-12-14 19:16:51.000000000","message":"Sure. The comment that gets added should help too.","commit_id":"8cdd57d91088ffc1d6f8ca60b5fa0dc3ec822bd3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bcf01cdbbed98d65a05924a17a2b1ad5981a818c","unresolved":false,"context_lines":[{"line_number":7386,"context_line":"                    CONF.libvirt.live_migration_completion_timeout * data_gb)"},{"line_number":7387,"context_line":"                # NOTE(yikun): Check the completion timeout to determine"},{"line_number":7388,"context_line":"                # should trigger the timeout action, and there are two choices"},{"line_number":7389,"context_line":"                # ``abort`` (default) or ``force_complete``, if the action is"},{"line_number":7390,"context_line":"                # set to ``force_complete``, the post-copy will be triggered,"},{"line_number":7391,"context_line":"                # otherwise the live migrate operation will be aborted."},{"line_number":7392,"context_line":"                if libvirt_migrate.should_trigger_timeout_action("}],"source_content_type":"text/x-python","patch_set":14,"id":"3f79a3b5_6d30b253","line":7389,"range":{"start_line":7389,"start_character":59,"end_line":7389,"end_character":63},"updated":"2018-12-14 19:29:30.000000000","message":"nit: either \". If the...\" or \"; if the...\".","commit_id":"1a38ae6bc3e4a2d0369731ed7f906cc2426b7dce"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"56d400bcab2bc65b397319496c762b4c05f588b9","unresolved":false,"context_lines":[{"line_number":7386,"context_line":"                    CONF.libvirt.live_migration_completion_timeout * data_gb)"},{"line_number":7387,"context_line":"                # NOTE(yikun): Check the completion timeout to determine"},{"line_number":7388,"context_line":"                # should trigger the timeout action, and there are two choices"},{"line_number":7389,"context_line":"                # ``abort`` (default) or ``force_complete``, if the action is"},{"line_number":7390,"context_line":"                # set to ``force_complete``, the post-copy will be triggered,"},{"line_number":7391,"context_line":"                # otherwise the live migrate operation will be aborted."},{"line_number":7392,"context_line":"                if libvirt_migrate.should_trigger_timeout_action("}],"source_content_type":"text/x-python","patch_set":14,"id":"3f79a3b5_082c8c92","line":7389,"range":{"start_line":7389,"start_character":59,"end_line":7389,"end_character":63},"in_reply_to":"3f79a3b5_6d30b253","updated":"2018-12-14 19:41:41.000000000","message":"Done","commit_id":"1a38ae6bc3e4a2d0369731ed7f906cc2426b7dce"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bcf01cdbbed98d65a05924a17a2b1ad5981a818c","unresolved":false,"context_lines":[{"line_number":7393,"context_line":"                        instance, now, progress_time, progress_timeout,"},{"line_number":7394,"context_line":"                        elapsed, completion_timeout, migration.status):"},{"line_number":7395,"context_line":"                    timeout_act \u003d CONF.libvirt.live_migration_timeout_action"},{"line_number":7396,"context_line":"                    if timeout_act \u003d\u003d \u0027force_complete\u0027:"},{"line_number":7397,"context_line":"                        self.live_migration_force_complete(instance)"},{"line_number":7398,"context_line":"                    else:"},{"line_number":7399,"context_line":"                        # timeout action is \u0027abort\u0027"},{"line_number":7400,"context_line":"                        try:"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f79a3b5_6d7af2cc","line":7397,"range":{"start_line":7396,"start_character":20,"end_line":7397,"end_character":68},"updated":"2018-12-14 19:29:30.000000000","message":"I was wondering if this should check is_post_copy_enabled but looking at live_migration_force_complete, that will trigger this code:\n\nhttps://github.com/openstack/nova/blob/f6996903d2ef0fdb40135b506c83ed6517b28e19/nova/virt/libvirt/migration.py#L548\n\nAnd if post-copy is not enabled, then it will just pause the VM to complete the transfer.","commit_id":"1a38ae6bc3e4a2d0369731ed7f906cc2426b7dce"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"56d400bcab2bc65b397319496c762b4c05f588b9","unresolved":false,"context_lines":[{"line_number":7393,"context_line":"                        instance, now, progress_time, progress_timeout,"},{"line_number":7394,"context_line":"                        elapsed, completion_timeout, migration.status):"},{"line_number":7395,"context_line":"                    timeout_act \u003d CONF.libvirt.live_migration_timeout_action"},{"line_number":7396,"context_line":"                    if timeout_act \u003d\u003d \u0027force_complete\u0027:"},{"line_number":7397,"context_line":"                        self.live_migration_force_complete(instance)"},{"line_number":7398,"context_line":"                    else:"},{"line_number":7399,"context_line":"                        # timeout action is \u0027abort\u0027"},{"line_number":7400,"context_line":"                        try:"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f79a3b5_283ce8bb","line":7397,"range":{"start_line":7396,"start_character":20,"end_line":7397,"end_character":68},"in_reply_to":"3f79a3b5_6d7af2cc","updated":"2018-12-14 19:41:41.000000000","message":"Done","commit_id":"1a38ae6bc3e4a2d0369731ed7f906cc2426b7dce"}],"nova/virt/libvirt/migration.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"93c252369e3e326481d1cbef4280a501c30e18d6","unresolved":false,"context_lines":[{"line_number":387,"context_line":"    :param progress_time: when progress was last made in secs since epoch"},{"line_number":388,"context_line":"    :param progress_timeout: time in secs to allow for progress"},{"line_number":389,"context_line":"    :param elapsed: total elapsed time of migration in secs"},{"line_number":390,"context_line":"    :param completion_timeout: time in secs to allow for completion"},{"line_number":391,"context_line":"    :param migration_status: current status of the migration"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"    Check the progress and completion timeouts to determine if either"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_67da23e8","line":390,"range":{"start_line":390,"start_character":11,"end_line":390,"end_character":29},"updated":"2018-12-13 22:36:40.000000000","message":"Could we short-circuit this method by simply returning False immediately if this value is 0?","commit_id":"8cdd57d91088ffc1d6f8ca60b5fa0dc3ec822bd3"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"100c908d7ae3158f2c8ff6d84e1620f8124bc326","unresolved":false,"context_lines":[{"line_number":387,"context_line":"    :param progress_time: when progress was last made in secs since epoch"},{"line_number":388,"context_line":"    :param progress_timeout: time in secs to allow for progress"},{"line_number":389,"context_line":"    :param elapsed: total elapsed time of migration in secs"},{"line_number":390,"context_line":"    :param completion_timeout: time in secs to allow for completion"},{"line_number":391,"context_line":"    :param migration_status: current status of the migration"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"    Check the progress and completion timeouts to determine if either"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_5c79f5f7","line":390,"range":{"start_line":390,"start_character":11,"end_line":390,"end_character":29},"in_reply_to":"3f79a3b5_67da23e8","updated":"2018-12-14 06:52:36.000000000","message":"Sure, it makes the check more simple and readable.","commit_id":"8cdd57d91088ffc1d6f8ca60b5fa0dc3ec822bd3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"93c252369e3e326481d1cbef4280a501c30e18d6","unresolved":false,"context_lines":[{"line_number":396,"context_line":""},{"line_number":397,"context_line":"    Avoid migration to be aborted if it is running in post-copy mode"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"    :returns: True if migration should be aborted, False otherwise"},{"line_number":400,"context_line":"    \"\"\""},{"line_number":401,"context_line":"    if migration_status \u003d\u003d \u0027running (post-copy)\u0027:"},{"line_number":402,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_8742df92","line":399,"range":{"start_line":399,"start_character":42,"end_line":399,"end_character":49},"updated":"2018-12-13 22:36:40.000000000","message":"This could be updated, right? Meaning there is now a configurable action and abort might not be what happens.","commit_id":"8cdd57d91088ffc1d6f8ca60b5fa0dc3ec822bd3"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"100c908d7ae3158f2c8ff6d84e1620f8124bc326","unresolved":false,"context_lines":[{"line_number":396,"context_line":""},{"line_number":397,"context_line":"    Avoid migration to be aborted if it is running in post-copy mode"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"    :returns: True if migration should be aborted, False otherwise"},{"line_number":400,"context_line":"    \"\"\""},{"line_number":401,"context_line":"    if migration_status \u003d\u003d \u0027running (post-copy)\u0027:"},{"line_number":402,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_fc1241ad","line":399,"range":{"start_line":399,"start_character":42,"end_line":399,"end_character":49},"in_reply_to":"3f79a3b5_8742df92","updated":"2018-12-14 06:52:36.000000000","message":"Done","commit_id":"8cdd57d91088ffc1d6f8ca60b5fa0dc3ec822bd3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bcf01cdbbed98d65a05924a17a2b1ad5981a818c","unresolved":false,"context_lines":[{"line_number":394,"context_line":"    of them have been hit, and should thus cause migration timeout action to"},{"line_number":395,"context_line":"    be triggered."},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"    Avoid migration to be aborted or triggered post-copy agian if it is"},{"line_number":398,"context_line":"    running in post-copy mode"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"    :returns: True if migration should be aborted, False otherwise"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f79a3b5_2d139ab3","line":397,"range":{"start_line":397,"start_character":57,"end_line":397,"end_character":62},"updated":"2018-12-14 19:29:30.000000000","message":"again","commit_id":"1a38ae6bc3e4a2d0369731ed7f906cc2426b7dce"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"56d400bcab2bc65b397319496c762b4c05f588b9","unresolved":false,"context_lines":[{"line_number":394,"context_line":"    of them have been hit, and should thus cause migration timeout action to"},{"line_number":395,"context_line":"    be triggered."},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"    Avoid migration to be aborted or triggered post-copy agian if it is"},{"line_number":398,"context_line":"    running in post-copy mode"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"    :returns: True if migration should be aborted, False otherwise"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f79a3b5_c86c54d4","line":397,"range":{"start_line":397,"start_character":57,"end_line":397,"end_character":62},"in_reply_to":"3f79a3b5_2d139ab3","updated":"2018-12-14 19:41:41.000000000","message":"Done","commit_id":"1a38ae6bc3e4a2d0369731ed7f906cc2426b7dce"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7e8e53efd7d9c2ceba8c1d3ee89e0b53c8bd2cf2","unresolved":false,"context_lines":[{"line_number":397,"context_line":"    Avoid migration to be aborted or triggered post-copy agian if it is"},{"line_number":398,"context_line":"    running in post-copy mode"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"    :returns: True if migration should be aborted, False otherwise"},{"line_number":401,"context_line":"    \"\"\""},{"line_number":402,"context_line":"    if not completion_timeout:"},{"line_number":403,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f79a3b5_e894b099","line":400,"range":{"start_line":400,"start_character":42,"end_line":400,"end_character":49},"updated":"2018-12-14 19:44:45.000000000","message":"should update this","commit_id":"1a38ae6bc3e4a2d0369731ed7f906cc2426b7dce"}],"releasenotes/notes/live-migration-force-after-timeout-54f2a4b631d295bb.yaml":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"329314f563a3fe9678e51b7fd8cec63ccbff43a0","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    is added. This new option will have choices to ``abort`` (default)"},{"line_number":6,"context_line":"    or ``force_complete``. This option will determine what actions will be"},{"line_number":7,"context_line":"    taken against a VM after ``live_migration_completion_timeout`` expires."},{"line_number":8,"context_line":"    Currently nova just aborts the LM operation after completion timeout"},{"line_number":9,"context_line":"    expires. By default, we keep the same behavior of aborting after"},{"line_number":10,"context_line":"    completion timeout. ``force_complete`` will either pause the VM or trigger"},{"line_number":11,"context_line":"    post_copy depending on if post copy is enabled and available."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"3f79a3b5_e80c0d38","line":8,"range":{"start_line":8,"start_character":35,"end_line":8,"end_character":37},"updated":"2018-12-11 08:54:13.000000000","message":"nit: VM?","commit_id":"256e35fe49da9d3dac430c3b92d6ed2e5c500a12"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"fccda5c8e7e17074de923287895447db1d65941e","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    is added. This new option will have choices to ``abort`` (default)"},{"line_number":6,"context_line":"    or ``force_complete``. This option will determine what actions will be"},{"line_number":7,"context_line":"    taken against a VM after ``live_migration_completion_timeout`` expires."},{"line_number":8,"context_line":"    Currently nova just aborts the LM operation after completion timeout"},{"line_number":9,"context_line":"    expires. By default, we keep the same behavior of aborting after"},{"line_number":10,"context_line":"    completion timeout. ``force_complete`` will either pause the VM or trigger"},{"line_number":11,"context_line":"    post_copy depending on if post copy is enabled and available."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"3f79a3b5_f162b4d9","line":8,"range":{"start_line":8,"start_character":35,"end_line":8,"end_character":37},"in_reply_to":"3f79a3b5_e80c0d38","updated":"2018-12-11 11:40:15.000000000","message":"live migrate :), and I will fix it.","commit_id":"256e35fe49da9d3dac430c3b92d6ed2e5c500a12"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ac6f1fdfb531f9d0f8228948ece81f0c64a3ff3d","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    is added. This new option will have choices to ``abort`` (default)"},{"line_number":6,"context_line":"    or ``force_complete``. This option will determine what actions will be"},{"line_number":7,"context_line":"    taken against a VM after ``live_migration_completion_timeout`` expires."},{"line_number":8,"context_line":"    Currently nova just aborts the LM operation after completion timeout"},{"line_number":9,"context_line":"    expires. By default, we keep the same behavior of aborting after"},{"line_number":10,"context_line":"    completion timeout. ``force_complete`` will either pause the VM or trigger"},{"line_number":11,"context_line":"    post_copy depending on if post copy is enabled and available."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"3f79a3b5_78ebb2ed","line":8,"range":{"start_line":8,"start_character":35,"end_line":8,"end_character":37},"in_reply_to":"3f79a3b5_f162b4d9","updated":"2018-12-13 11:17:27.000000000","message":":)","commit_id":"256e35fe49da9d3dac430c3b92d6ed2e5c500a12"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"329314f563a3fe9678e51b7fd8cec63ccbff43a0","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    completion timeout. ``force_complete`` will either pause the VM or trigger"},{"line_number":11,"context_line":"    post_copy depending on if post copy is enabled and available."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"    Note if you configure Nova to have no timeout, post copy will never be"},{"line_number":14,"context_line":"    automatically triggered. None of this affects triggering post copy via"},{"line_number":15,"context_line":"    the force live-migration API, that continues to work in the same way."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"3f79a3b5_681a3d6a","line":14,"range":{"start_line":13,"start_character":60,"end_line":14,"end_character":28},"updated":"2018-12-11 08:54:13.000000000","message":"I doubt that. The libvirt driver still has the check for two slow migration that will trigger a post copy even if timeout is set to 0. \n\nhttps://review.openstack.org/#/c/619143/8/nova/virt/libvirt/driver.py@7408","commit_id":"256e35fe49da9d3dac430c3b92d6ed2e5c500a12"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"fccda5c8e7e17074de923287895447db1d65941e","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    completion timeout. ``force_complete`` will either pause the VM or trigger"},{"line_number":11,"context_line":"    post_copy depending on if post copy is enabled and available."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"    Note if you configure Nova to have no timeout, post copy will never be"},{"line_number":14,"context_line":"    automatically triggered. None of this affects triggering post copy via"},{"line_number":15,"context_line":"    the force live-migration API, that continues to work in the same way."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"3f79a3b5_319a6cc2","line":14,"range":{"start_line":13,"start_character":60,"end_line":14,"end_character":28},"in_reply_to":"3f79a3b5_08a869d7","updated":"2018-12-11 11:40:15.000000000","message":"Yes, thanks for your suggestion.","commit_id":"256e35fe49da9d3dac430c3b92d6ed2e5c500a12"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b07c3084a47096ab68916177df98fb851f27915a","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    completion timeout. ``force_complete`` will either pause the VM or trigger"},{"line_number":11,"context_line":"    post_copy depending on if post copy is enabled and available."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"    Note if you configure Nova to have no timeout, post copy will never be"},{"line_number":14,"context_line":"    automatically triggered. None of this affects triggering post copy via"},{"line_number":15,"context_line":"    the force live-migration API, that continues to work in the same way."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"3f79a3b5_08a869d7","line":14,"range":{"start_line":13,"start_character":60,"end_line":14,"end_character":28},"in_reply_to":"3f79a3b5_681a3d6a","updated":"2018-12-11 09:00:09.000000000","message":"And now read the next patch that removes the progress calculation based post copy. I think we should move this release notes to the end of this patch series to be less confusing.","commit_id":"256e35fe49da9d3dac430c3b92d6ed2e5c500a12"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"df8fd7e6eab7f59e1181adb4e9f432bd53555446","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A new configuration option ``libvirt.live_migration_timeout_action``"},{"line_number":5,"context_line":"    is added. This new option will have choices to ``abort`` (default)"},{"line_number":6,"context_line":"    or ``force_complete``. This option will determine what actions will be"},{"line_number":7,"context_line":"    taken against a VM after ``live_migration_completion_timeout`` expires."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"3f79a3b5_6c2a4a97","line":4,"range":{"start_line":4,"start_character":33,"end_line":4,"end_character":41},"updated":"2018-12-11 14:35:49.000000000","message":"[libvirt]/live_migration_timeout_action","commit_id":"31e7f0bb82b93b50b5c50076fcd8c2d133f6eb00"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"383b449a3548ba6c242e0c8aa5a0f4f89915aae7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A new configuration option ``libvirt.live_migration_timeout_action``"},{"line_number":5,"context_line":"    is added. This new option will have choices to ``abort`` (default)"},{"line_number":6,"context_line":"    or ``force_complete``. This option will determine what actions will be"},{"line_number":7,"context_line":"    taken against a VM after ``live_migration_completion_timeout`` expires."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"3f79a3b5_c9f4a1d0","line":4,"range":{"start_line":4,"start_character":33,"end_line":4,"end_character":41},"in_reply_to":"3f79a3b5_6c2a4a97","updated":"2018-12-12 02:10:54.000000000","message":"Done","commit_id":"31e7f0bb82b93b50b5c50076fcd8c2d133f6eb00"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"df8fd7e6eab7f59e1181adb4e9f432bd53555446","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A new configuration option ``libvirt.live_migration_timeout_action``"},{"line_number":5,"context_line":"    is added. This new option will have choices to ``abort`` (default)"},{"line_number":6,"context_line":"    or ``force_complete``. This option will determine what actions will be"},{"line_number":7,"context_line":"    taken against a VM after ``live_migration_completion_timeout`` expires."},{"line_number":8,"context_line":"    Currently nova just aborts the live migrate operation after completion"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"3f79a3b5_4c33ce11","line":5,"range":{"start_line":5,"start_character":48,"end_line":5,"end_character":50},"updated":"2018-12-11 14:35:49.000000000","message":"s/to//","commit_id":"31e7f0bb82b93b50b5c50076fcd8c2d133f6eb00"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"383b449a3548ba6c242e0c8aa5a0f4f89915aae7","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A new configuration option ``libvirt.live_migration_timeout_action``"},{"line_number":5,"context_line":"    is added. This new option will have choices to ``abort`` (default)"},{"line_number":6,"context_line":"    or ``force_complete``. This option will determine what actions will be"},{"line_number":7,"context_line":"    taken against a VM after ``live_migration_completion_timeout`` expires."},{"line_number":8,"context_line":"    Currently nova just aborts the live migrate operation after completion"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"3f79a3b5_a9f7e5d2","line":5,"range":{"start_line":5,"start_character":48,"end_line":5,"end_character":50},"in_reply_to":"3f79a3b5_4c33ce11","updated":"2018-12-12 02:10:54.000000000","message":"Done","commit_id":"31e7f0bb82b93b50b5c50076fcd8c2d133f6eb00"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"df8fd7e6eab7f59e1181adb4e9f432bd53555446","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    Currently nova just aborts the live migrate operation after completion"},{"line_number":9,"context_line":"    timeout expires. By default, we keep the same behavior of aborting after"},{"line_number":10,"context_line":"    completion timeout. ``force_complete`` will either pause the VM or trigger"},{"line_number":11,"context_line":"    post_copy depending on if post copy is enabled and available."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"3f79a3b5_8c16c656","line":11,"range":{"start_line":11,"start_character":4,"end_line":11,"end_character":13},"updated":"2018-12-11 14:35:49.000000000","message":"post-copy","commit_id":"31e7f0bb82b93b50b5c50076fcd8c2d133f6eb00"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"383b449a3548ba6c242e0c8aa5a0f4f89915aae7","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    Currently nova just aborts the live migrate operation after completion"},{"line_number":9,"context_line":"    timeout expires. By default, we keep the same behavior of aborting after"},{"line_number":10,"context_line":"    completion timeout. ``force_complete`` will either pause the VM or trigger"},{"line_number":11,"context_line":"    post_copy depending on if post copy is enabled and available."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"3f79a3b5_09eb79ee","line":11,"range":{"start_line":11,"start_character":4,"end_line":11,"end_character":13},"in_reply_to":"3f79a3b5_8c16c656","updated":"2018-12-12 02:10:54.000000000","message":"Done","commit_id":"31e7f0bb82b93b50b5c50076fcd8c2d133f6eb00"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"93c252369e3e326481d1cbef4280a501c30e18d6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A new configuration option ``[libvirt]/live_migration_timeout_action``"},{"line_number":5,"context_line":"    is added. This new option will have choices ``abort`` (default)"},{"line_number":6,"context_line":"    or ``force_complete``. This option will determine what actions will be"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"3f79a3b5_67f30370","line":3,"updated":"2018-12-13 22:36:40.000000000","message":"nicely worded release note :)","commit_id":"8cdd57d91088ffc1d6f8ca60b5fa0dc3ec822bd3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bcf01cdbbed98d65a05924a17a2b1ad5981a818c","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"    The ``[libvirt]/live_migration_completion_timeout`` is restricted by"},{"line_number":14,"context_line":"    minimum 0 and will now raise a ValueError if this configuration option\u0027s"},{"line_number":15,"context_line":"    value less than minimum value."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"3f79a3b5_0d6d7e2f","line":15,"range":{"start_line":15,"start_character":10,"end_line":15,"end_character":14},"updated":"2018-12-14 19:29:30.000000000","message":"is less","commit_id":"1a38ae6bc3e4a2d0369731ed7f906cc2426b7dce"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"56d400bcab2bc65b397319496c762b4c05f588b9","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"    The ``[libvirt]/live_migration_completion_timeout`` is restricted by"},{"line_number":14,"context_line":"    minimum 0 and will now raise a ValueError if this configuration option\u0027s"},{"line_number":15,"context_line":"    value less than minimum value."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"3f79a3b5_e86fd0c3","line":15,"range":{"start_line":15,"start_character":10,"end_line":15,"end_character":14},"in_reply_to":"3f79a3b5_0d6d7e2f","updated":"2018-12-14 19:41:41.000000000","message":"Done","commit_id":"1a38ae6bc3e4a2d0369731ed7f906cc2426b7dce"}]}
