)]}'
{"nova/api/openstack/api_version_request.py":[{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"e6e707b2d02bf138f7e604d7d9c6888b307505a3","unresolved":false,"context_lines":[{"line_number":89,"context_line":"# Note(cyeoh): This only applies for the v2.1 API once microversions"},{"line_number":90,"context_line":"# support is fully merged. It does not affect the V2 API."},{"line_number":91,"context_line":"_MIN_API_VERSION \u003d \"2.1\""},{"line_number":92,"context_line":"_MAX_API_VERSION \u003d \"2.31\""},{"line_number":93,"context_line":"DEFAULT_API_VERSION \u003d _MIN_API_VERSION"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3aaa91ec_b39e8c60","line":92,"range":{"start_line":92,"start_character":19,"end_line":92,"end_character":25},"updated":"2016-06-27 08:36:47.000000000","message":"This should be changed to 2.32","commit_id":"ae01f5a18d352380baf3cb9f51eb6b1591669c9c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"113826da0d850e9173df8d085c2a1ff5e301ee42","unresolved":false,"context_lines":[{"line_number":102,"context_line":"             re-introduce the tag attribute that, due to bugs, was lost"},{"line_number":103,"context_line":"             starting with version 2.33 for block devices and starting with"},{"line_number":104,"context_line":"             version 2.37 for network interfaces."},{"line_number":105,"context_line":"    * 2.43 - Allow live migration of rescued instances for libvirt driver."},{"line_number":106,"context_line":"\"\"\""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"# The minimum and maximum versions of the API supported"}],"source_content_type":"text/x-python","patch_set":26,"id":"ffe62b97_dfbfed5e","line":105,"range":{"start_line":105,"start_character":55,"end_line":105,"end_character":73},"updated":"2017-03-28 17:47:34.000000000","message":"I would note instead: \"this is currently only supported by the libvirt driver\".\n\nWe can add support in drivers without creating a new microversion. We should make that clear here.","commit_id":"3e45a7831727d1390b9f070d276db28510a44126"},{"author":{"_account_id":18339,"name":"Sivasathurappan Radhakrishnan","email":"siva.radhakrishnan@intel.com","username":"sivakrishnan"},"change_message_id":"847817c272b1dec4738468992c288c100cb8bf66","unresolved":false,"context_lines":[{"line_number":102,"context_line":"             re-introduce the tag attribute that, due to bugs, was lost"},{"line_number":103,"context_line":"             starting with version 2.33 for block devices and starting with"},{"line_number":104,"context_line":"             version 2.37 for network interfaces."},{"line_number":105,"context_line":"    * 2.43 - Allow live migration of rescued instances for libvirt driver."},{"line_number":106,"context_line":"\"\"\""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"# The minimum and maximum versions of the API supported"}],"source_content_type":"text/x-python","patch_set":26,"id":"bff0334d_55836605","line":105,"range":{"start_line":105,"start_character":55,"end_line":105,"end_character":73},"in_reply_to":"ffe62b97_dfbfed5e","updated":"2017-04-05 15:31:24.000000000","message":"Done","commit_id":"3e45a7831727d1390b9f070d276db28510a44126"}],"nova/api/openstack/compute/migrate_server.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"5d123658da66843c43f3a637f7331c4f7359a81c","unresolved":false,"context_lines":[{"line_number":31,"context_line":"ALIAS \u003d \"os-migrate-server\""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"authorize \u003d extensions.os_compute_authorizer(ALIAS)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"def _check_request_version(req, min_version, method, server_id, server_state):"}],"source_content_type":"text/x-python","patch_set":17,"id":"1aa78d24_ca6fafc3","line":34,"range":{"start_line":34,"start_character":0,"end_line":34,"end_character":51},"updated":"2016-07-05 12:34:04.000000000","message":"I think we do not need this now.","commit_id":"ac448eb85763632bc907f641109ee235da06c7ab"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"6247f558fd3e6b5c564a20a0648765dfa0abf68c","unresolved":false,"context_lines":[{"line_number":31,"context_line":"ALIAS \u003d \"os-migrate-server\""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"authorize \u003d extensions.os_compute_authorizer(ALIAS)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"def _check_request_version(req, min_version, method, server_id, server_state):"}],"source_content_type":"text/x-python","patch_set":17,"id":"1aa78d24_adb4fdd0","line":34,"range":{"start_line":34,"start_character":0,"end_line":34,"end_character":51},"in_reply_to":"1aa78d24_2aaab370","updated":"2016-07-05 13:08:27.000000000","message":"Done","commit_id":"ac448eb85763632bc907f641109ee235da06c7ab"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"6247f558fd3e6b5c564a20a0648765dfa0abf68c","unresolved":false,"context_lines":[{"line_number":31,"context_line":"ALIAS \u003d \"os-migrate-server\""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"authorize \u003d extensions.os_compute_authorizer(ALIAS)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"def _check_request_version(req, min_version, method, server_id, server_state):"}],"source_content_type":"text/x-python","patch_set":17,"id":"1aa78d24_cdb189e3","line":34,"range":{"start_line":34,"start_character":0,"end_line":34,"end_character":51},"in_reply_to":"1aa78d24_ca6fafc3","updated":"2016-07-05 13:08:27.000000000","message":"Done","commit_id":"ac448eb85763632bc907f641109ee235da06c7ab"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"27d24bb0da449ab908264115856c7d14c3888905","unresolved":false,"context_lines":[{"line_number":31,"context_line":"ALIAS \u003d \"os-migrate-server\""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"authorize \u003d extensions.os_compute_authorizer(ALIAS)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"def _check_request_version(req, min_version, method, server_id, server_state):"}],"source_content_type":"text/x-python","patch_set":17,"id":"1aa78d24_2aaab370","line":34,"range":{"start_line":34,"start_character":0,"end_line":34,"end_character":51},"in_reply_to":"1aa78d24_ca6fafc3","updated":"2016-07-05 12:39:44.000000000","message":"This causing tempest tests to fail.","commit_id":"ac448eb85763632bc907f641109ee235da06c7ab"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"113826da0d850e9173df8d085c2a1ff5e301ee42","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"def _check_request_version(req, min_version, method, server_id, server_state):"},{"line_number":39,"context_line":"    if not api_version_request.is_supported(req, min_version\u003dmin_version):"},{"line_number":40,"context_line":"        exc_inv \u003d exception.InstanceInvalidState("},{"line_number":41,"context_line":"                attr\u003d\u0027vm_state\u0027,"},{"line_number":42,"context_line":"                instance_uuid\u003dserver_id,"}],"source_content_type":"text/x-python","patch_set":26,"id":"ffe62b97_6205e445","line":39,"updated":"2017-03-28 17:47:34.000000000","message":"Its tempting to check we have upgraded in here, and double check the service version is correct here.\n\nWe can drop that code in a release or so, so its good to keep that explicit and here I think.","commit_id":"3e45a7831727d1390b9f070d276db28510a44126"},{"author":{"_account_id":18339,"name":"Sivasathurappan Radhakrishnan","email":"siva.radhakrishnan@intel.com","username":"sivakrishnan"},"change_message_id":"847817c272b1dec4738468992c288c100cb8bf66","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"def _check_request_version(req, min_version, method, server_id, server_state):"},{"line_number":39,"context_line":"    if not api_version_request.is_supported(req, min_version\u003dmin_version):"},{"line_number":40,"context_line":"        exc_inv \u003d exception.InstanceInvalidState("},{"line_number":41,"context_line":"                attr\u003d\u0027vm_state\u0027,"},{"line_number":42,"context_line":"                instance_uuid\u003dserver_id,"}],"source_content_type":"text/x-python","patch_set":26,"id":"bff0334d_f5903a51","line":39,"in_reply_to":"ffe62b97_6205e445","updated":"2017-04-05 15:31:24.000000000","message":"Done. service version checking is in separate method, so that it would be easy to  remove it in future.","commit_id":"3e45a7831727d1390b9f070d276db28510a44126"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"113826da0d850e9173df8d085c2a1ff5e301ee42","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        instance \u003d common.get_instance(self.compute_api, context, id)"},{"line_number":112,"context_line":"        try:"},{"line_number":113,"context_line":"            if instance.vm_state \u003d\u003d vm_states.RESCUED:"},{"line_number":114,"context_line":"                _check_request_version(req, \u00272.43\u0027, \u0027live_migrate\u0027,"},{"line_number":115,"context_line":"                                       instance.uuid, instance.vm_state)"},{"line_number":116,"context_line":"            self.compute_api.live_migrate(context, instance, block_migration,"},{"line_number":117,"context_line":"                                          disk_over_commit, host, force, async)"},{"line_number":118,"context_line":"        except exception.InstanceUnknownCell as e:"}],"source_content_type":"text/x-python","patch_set":26,"id":"ffe62b97_8210e8a9","line":115,"range":{"start_line":113,"start_character":0,"end_line":115,"end_character":72},"updated":"2017-03-28 17:47:34.000000000","message":"I find this really confusing I am afraid.\n\nI think this code should be outside of the try/except block.\n\nI would be tempted to move it into a method called: _ensure_live_migrate_rescue_allowed(req, instance) it can do all the checks needed, and raise the correct exceptions.","commit_id":"3e45a7831727d1390b9f070d276db28510a44126"},{"author":{"_account_id":18339,"name":"Sivasathurappan Radhakrishnan","email":"siva.radhakrishnan@intel.com","username":"sivakrishnan"},"change_message_id":"847817c272b1dec4738468992c288c100cb8bf66","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        instance \u003d common.get_instance(self.compute_api, context, id)"},{"line_number":112,"context_line":"        try:"},{"line_number":113,"context_line":"            if instance.vm_state \u003d\u003d vm_states.RESCUED:"},{"line_number":114,"context_line":"                _check_request_version(req, \u00272.43\u0027, \u0027live_migrate\u0027,"},{"line_number":115,"context_line":"                                       instance.uuid, instance.vm_state)"},{"line_number":116,"context_line":"            self.compute_api.live_migrate(context, instance, block_migration,"},{"line_number":117,"context_line":"                                          disk_over_commit, host, force, async)"},{"line_number":118,"context_line":"        except exception.InstanceUnknownCell as e:"}],"source_content_type":"text/x-python","patch_set":26,"id":"bff0334d_d59d3667","line":115,"range":{"start_line":113,"start_character":0,"end_line":115,"end_character":72},"in_reply_to":"ffe62b97_8210e8a9","updated":"2017-04-05 15:31:24.000000000","message":"Done","commit_id":"3e45a7831727d1390b9f070d276db28510a44126"},{"author":{"_account_id":18339,"name":"Sivasathurappan Radhakrishnan","email":"siva.radhakrishnan@intel.com","username":"sivakrishnan"},"change_message_id":"b59f45ed59d4791e7f6aec100421df02b03c9564","unresolved":false,"context_lines":[{"line_number":51,"context_line":"def can_migrate_rescued():"},{"line_number":52,"context_line":"    # NOTE(siva_krishnan): Only migrate rescued instances if all compute"},{"line_number":53,"context_line":"    # services are up to at least version 18"},{"line_number":54,"context_line":"    min_migrate_rescued_version \u003d 18"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    min_deployed \u003d objects.Service.get_minimum_version("},{"line_number":57,"context_line":"        context.get_admin_context(), \u0027nova-compute\u0027)"}],"source_content_type":"text/x-python","patch_set":27,"id":"bff0334d_0d77cfd6","line":54,"range":{"start_line":54,"start_character":4,"end_line":54,"end_character":36},"updated":"2017-04-07 04:53:36.000000000","message":"i think its better to pass this version as parameter and rename it more generalized name, so that it can be used for any other future enhancements  made in this API","commit_id":"ada809e55d965d3e3267db0744910bcc94ed46db"}],"nova/api/openstack/compute/rest_api_version_history.rst":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"113826da0d850e9173df8d085c2a1ff5e301ee42","unresolved":false,"context_lines":[{"line_number":480,"context_line":""},{"line_number":481,"context_line":"2.43"},{"line_number":482,"context_line":"----"},{"line_number":483,"context_line":"  Allow live migration of rescued instances for libvirt driver."},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"  The live migration of instances in a rescued state is now permitted."},{"line_number":486,"context_line":"  Previously an attempt to live migrate an instance in the state RESCUE"}],"source_content_type":"text/x-rst","patch_set":26,"id":"ffe62b97_bf68a91c","line":483,"updated":"2017-03-28 17:47:34.000000000","message":"I would drop this line.","commit_id":"3e45a7831727d1390b9f070d276db28510a44126"},{"author":{"_account_id":18339,"name":"Sivasathurappan Radhakrishnan","email":"siva.radhakrishnan@intel.com","username":"sivakrishnan"},"change_message_id":"847817c272b1dec4738468992c288c100cb8bf66","unresolved":false,"context_lines":[{"line_number":480,"context_line":""},{"line_number":481,"context_line":"2.43"},{"line_number":482,"context_line":"----"},{"line_number":483,"context_line":"  Allow live migration of rescued instances for libvirt driver."},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"  The live migration of instances in a rescued state is now permitted."},{"line_number":486,"context_line":"  Previously an attempt to live migrate an instance in the state RESCUE"}],"source_content_type":"text/x-rst","patch_set":26,"id":"bff0334d_b573d24d","line":483,"in_reply_to":"ffe62b97_bf68a91c","updated":"2017-04-05 15:31:24.000000000","message":"Done","commit_id":"3e45a7831727d1390b9f070d276db28510a44126"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"113826da0d850e9173df8d085c2a1ff5e301ee42","unresolved":false,"context_lines":[{"line_number":482,"context_line":"----"},{"line_number":483,"context_line":"  Allow live migration of rescued instances for libvirt driver."},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"  The live migration of instances in a rescued state is now permitted."},{"line_number":486,"context_line":"  Previously an attempt to live migrate an instance in the state RESCUE"},{"line_number":487,"context_line":"  would result in a 409 response code. At present only the libvirt"},{"line_number":488,"context_line":"  driver supports live migration of rescued instances.  Any failures due to"},{"line_number":489,"context_line":"  driver\u0027s capability to support live migration of rescued instance, will be"},{"line_number":490,"context_line":"  updated in instance-actions with the error message, just as we do for any"},{"line_number":491,"context_line":"  other pre-live migration errors."}],"source_content_type":"text/x-rst","patch_set":26,"id":"ffe62b97_df636d41","line":488,"range":{"start_line":485,"start_character":2,"end_line":488,"end_character":54},"updated":"2017-03-28 17:47:34.000000000","message":"This info looks great.\n\nBut we need to update the API-ref with details of this change too:\nhttps://github.com/openstack/nova/blob/master/api-ref/source/server-migrations.inc","commit_id":"3e45a7831727d1390b9f070d276db28510a44126"},{"author":{"_account_id":18339,"name":"Sivasathurappan Radhakrishnan","email":"siva.radhakrishnan@intel.com","username":"sivakrishnan"},"change_message_id":"847817c272b1dec4738468992c288c100cb8bf66","unresolved":false,"context_lines":[{"line_number":482,"context_line":"----"},{"line_number":483,"context_line":"  Allow live migration of rescued instances for libvirt driver."},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"  The live migration of instances in a rescued state is now permitted."},{"line_number":486,"context_line":"  Previously an attempt to live migrate an instance in the state RESCUE"},{"line_number":487,"context_line":"  would result in a 409 response code. At present only the libvirt"},{"line_number":488,"context_line":"  driver supports live migration of rescued instances.  Any failures due to"},{"line_number":489,"context_line":"  driver\u0027s capability to support live migration of rescued instance, will be"},{"line_number":490,"context_line":"  updated in instance-actions with the error message, just as we do for any"},{"line_number":491,"context_line":"  other pre-live migration errors."}],"source_content_type":"text/x-rst","patch_set":26,"id":"bff0334d_d5f2d69a","line":488,"range":{"start_line":485,"start_character":2,"end_line":488,"end_character":54},"in_reply_to":"ffe62b97_df636d41","updated":"2017-04-05 15:31:24.000000000","message":"Should we need separate patchset for this or you want me to do it along with this one. I prefer do it separately. let me know your thoughts on this one","commit_id":"3e45a7831727d1390b9f070d276db28510a44126"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"113826da0d850e9173df8d085c2a1ff5e301ee42","unresolved":false,"context_lines":[{"line_number":487,"context_line":"  would result in a 409 response code. At present only the libvirt"},{"line_number":488,"context_line":"  driver supports live migration of rescued instances.  Any failures due to"},{"line_number":489,"context_line":"  driver\u0027s capability to support live migration of rescued instance, will be"},{"line_number":490,"context_line":"  updated in instance-actions with the error message, just as we do for any"},{"line_number":491,"context_line":"  other pre-live migration errors."},{"line_number":492,"context_line":""}],"source_content_type":"text/x-rst","patch_set":26,"id":"ffe62b97_5f575d59","line":491,"range":{"start_line":490,"start_character":0,"end_line":491,"end_character":34},"updated":"2017-03-28 17:47:34.000000000","message":"I think we should just drop this detail, it seems confusing. Basically there is no change.","commit_id":"3e45a7831727d1390b9f070d276db28510a44126"},{"author":{"_account_id":18339,"name":"Sivasathurappan Radhakrishnan","email":"siva.radhakrishnan@intel.com","username":"sivakrishnan"},"change_message_id":"847817c272b1dec4738468992c288c100cb8bf66","unresolved":false,"context_lines":[{"line_number":487,"context_line":"  would result in a 409 response code. At present only the libvirt"},{"line_number":488,"context_line":"  driver supports live migration of rescued instances.  Any failures due to"},{"line_number":489,"context_line":"  driver\u0027s capability to support live migration of rescued instance, will be"},{"line_number":490,"context_line":"  updated in instance-actions with the error message, just as we do for any"},{"line_number":491,"context_line":"  other pre-live migration errors."},{"line_number":492,"context_line":""}],"source_content_type":"text/x-rst","patch_set":26,"id":"bff0334d_156cbe34","line":491,"range":{"start_line":490,"start_character":0,"end_line":491,"end_character":34},"in_reply_to":"ffe62b97_5f575d59","updated":"2017-04-05 15:31:24.000000000","message":"True.remove it.","commit_id":"3e45a7831727d1390b9f070d276db28510a44126"}],"nova/api/openstack/rest_api_version_history.rst":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"5d123658da66843c43f3a637f7331c4f7359a81c","unresolved":false,"context_lines":[{"line_number":363,"context_line":"   Where \u003cnode\u003e is either \u0027source\u0027 or \u0027destination\u0027 and \u003cname\u003e is the"},{"line_number":364,"context_line":"   name of the compute node."},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e 9e4c459... API changes for live migration of rescued instance"}],"source_content_type":"text/x-rst","patch_set":17,"id":"1aa78d24_6aeddb24","line":366,"range":{"start_line":366,"start_character":0,"end_line":366,"end_character":69},"updated":"2016-07-05 12:34:04.000000000","message":"ops.","commit_id":"ac448eb85763632bc907f641109ee235da06c7ab"}],"nova/compute/api.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7ce8d68ba45c96632f44654fb7043d462e0087b8","unresolved":false,"context_lines":[{"line_number":3230,"context_line":"        \"\"\"Migrate a server lively to a new host.\"\"\""},{"line_number":3231,"context_line":"        LOG.debug(\"Going to try to live migrate instance to %s\","},{"line_number":3232,"context_line":"                  host_name or \"another host\", instance\u003dinstance)"},{"line_number":3233,"context_line":"        instance.task_state \u003d task_states.MIGRATING"},{"line_number":3234,"context_line":"        instance.save(expected_task_state\u003d[None])"},{"line_number":3235,"context_line":"        self._record_action_start(context, instance,"},{"line_number":3236,"context_line":"                                  instance_actions.LIVE_MIGRATION)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_7f55a9c4","line":3233,"updated":"2016-06-28 16:22:53.000000000","message":"I think before this line, we should make sure that the min_service version of all the compute nodes is such that live-migrate of a rescued image is possible.\n\nFor an example see:\nhttps://github.com/openstack/nova/blob/d498645806cc203e5471b08f833c3cc0566eeeb3/nova/objects/pci_device.py#L118","commit_id":"aa379a697f6b820a34ddc284cd6c7caf448d20f7"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"113826da0d850e9173df8d085c2a1ff5e301ee42","unresolved":false,"context_lines":[{"line_number":3937,"context_line":"        \"\"\"Migrate a server lively to a new host.\"\"\""},{"line_number":3938,"context_line":"        LOG.debug(\"Going to try to live migrate instance to %s\","},{"line_number":3939,"context_line":"                  host_name or \"another host\", instance\u003dinstance)"},{"line_number":3940,"context_line":"        if instance.vm_state \u003d\u003d vm_states.RESCUED:"},{"line_number":3941,"context_line":"            if not objects.Instance.should_migrate_rescued():"},{"line_number":3942,"context_line":"                raise exception.RescuedInstanceLiveMigrationNotYetSafe()"},{"line_number":3943,"context_line":"        instance.task_state \u003d task_states.MIGRATING"},{"line_number":3944,"context_line":"        instance.save(expected_task_state\u003d[None])"},{"line_number":3945,"context_line":"        self._record_action_start(context, instance,"}],"source_content_type":"text/x-python","patch_set":26,"id":"ffe62b97_2290fcec","line":3942,"range":{"start_line":3940,"start_character":0,"end_line":3942,"end_character":72},"updated":"2017-03-28 17:47:34.000000000","message":"I think we should move this into the API code, and just raise an explicit 400 error on this sort of a problem.","commit_id":"3e45a7831727d1390b9f070d276db28510a44126"},{"author":{"_account_id":18339,"name":"Sivasathurappan Radhakrishnan","email":"siva.radhakrishnan@intel.com","username":"sivakrishnan"},"change_message_id":"847817c272b1dec4738468992c288c100cb8bf66","unresolved":false,"context_lines":[{"line_number":3937,"context_line":"        \"\"\"Migrate a server lively to a new host.\"\"\""},{"line_number":3938,"context_line":"        LOG.debug(\"Going to try to live migrate instance to %s\","},{"line_number":3939,"context_line":"                  host_name or \"another host\", instance\u003dinstance)"},{"line_number":3940,"context_line":"        if instance.vm_state \u003d\u003d vm_states.RESCUED:"},{"line_number":3941,"context_line":"            if not objects.Instance.should_migrate_rescued():"},{"line_number":3942,"context_line":"                raise exception.RescuedInstanceLiveMigrationNotYetSafe()"},{"line_number":3943,"context_line":"        instance.task_state \u003d task_states.MIGRATING"},{"line_number":3944,"context_line":"        instance.save(expected_task_state\u003d[None])"},{"line_number":3945,"context_line":"        self._record_action_start(context, instance,"}],"source_content_type":"text/x-python","patch_set":26,"id":"bff0334d_d5aad617","line":3942,"range":{"start_line":3940,"start_character":0,"end_line":3942,"end_character":72},"in_reply_to":"ffe62b97_2290fcec","updated":"2017-04-05 15:31:24.000000000","message":"I prefer to have it as 409 as 400 would indicate that there is an issue with client request. Even in spec it has agreed to have 409 for checking service versions.","commit_id":"3e45a7831727d1390b9f070d276db28510a44126"}],"nova/objects/instance.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"113826da0d850e9173df8d085c2a1ff5e301ee42","unresolved":false,"context_lines":[{"line_number":1154,"context_line":"            self._normalize_cell_name()"},{"line_number":1155,"context_line":""},{"line_number":1156,"context_line":"    @staticmethod"},{"line_number":1157,"context_line":"    def should_migrate_rescued():"},{"line_number":1158,"context_line":"        # NOTE(paul-carlton2): Only migrate rescued instances if all compute"},{"line_number":1159,"context_line":"        # services are up to at least version 15"},{"line_number":1160,"context_line":"        min_migrate_rescued_version \u003d 18"}],"source_content_type":"text/x-python","patch_set":26,"id":"ffe62b97_3f02593e","line":1157,"range":{"start_line":1157,"start_character":8,"end_line":1157,"end_character":30},"updated":"2017-03-28 17:47:34.000000000","message":"maybe can_migrate_rescued would be better here?\n\nhonestly we should move this into the API code.","commit_id":"3e45a7831727d1390b9f070d276db28510a44126"},{"author":{"_account_id":18339,"name":"Sivasathurappan Radhakrishnan","email":"siva.radhakrishnan@intel.com","username":"sivakrishnan"},"change_message_id":"847817c272b1dec4738468992c288c100cb8bf66","unresolved":false,"context_lines":[{"line_number":1154,"context_line":"            self._normalize_cell_name()"},{"line_number":1155,"context_line":""},{"line_number":1156,"context_line":"    @staticmethod"},{"line_number":1157,"context_line":"    def should_migrate_rescued():"},{"line_number":1158,"context_line":"        # NOTE(paul-carlton2): Only migrate rescued instances if all compute"},{"line_number":1159,"context_line":"        # services are up to at least version 15"},{"line_number":1160,"context_line":"        min_migrate_rescued_version \u003d 18"}],"source_content_type":"text/x-python","patch_set":26,"id":"bff0334d_5545a66f","line":1157,"range":{"start_line":1157,"start_character":8,"end_line":1157,"end_character":30},"in_reply_to":"ffe62b97_3f02593e","updated":"2017-04-05 15:31:24.000000000","message":"yeah you are right. moving all checks to API make more sense.","commit_id":"3e45a7831727d1390b9f070d276db28510a44126"}],"nova/tests/unit/api/openstack/compute/test_migrate_server.py":[{"author":{"_account_id":17814,"name":"fengzhr","email":"fengzhr@awcloud.com","username":"space"},"change_message_id":"3ea4a35cfc128bf9479b6dbb66bc260f07fa9438","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        self._test_migrate_exception(exc_info, webob.exc.HTTPForbidden)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def _test_migrate_live_succeeded(self, param, state\u003dvm_states.ACTIVE,"},{"line_number":129,"context_line":"                                     block_mig\u003dFalse):"},{"line_number":130,"context_line":"        self.mox.StubOutWithMock(self.compute_api, \u0027live_migrate\u0027)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        instance \u003d self._stub_instance_get(state\u003dstate)"}],"source_content_type":"text/x-python","patch_set":26,"id":"ffe62b97_d4b5a033","line":129,"range":{"start_line":129,"start_character":37,"end_line":129,"end_character":46},"updated":"2017-03-28 12:46:08.000000000","message":"This abbreviation is strange. It\u0027s better to replace it with \u0027block_migration\u0027, please.","commit_id":"3e45a7831727d1390b9f070d276db28510a44126"},{"author":{"_account_id":17814,"name":"fengzhr","email":"fengzhr@awcloud.com","username":"space"},"change_message_id":"3ea4a35cfc128bf9479b6dbb66bc260f07fa9438","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        self.mox.StubOutWithMock(self.compute_api, \u0027live_migrate\u0027)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        instance \u003d self._stub_instance_get(state\u003dstate)"},{"line_number":133,"context_line":"        self.compute_api.live_migrate(self.context, instance, block_mig,"},{"line_number":134,"context_line":"                                      self.disk_over_commit, \u0027hostname\u0027,"},{"line_number":135,"context_line":"                                      self.force, self.async)"},{"line_number":136,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"ffe62b97_743db48d","line":133,"range":{"start_line":133,"start_character":62,"end_line":133,"end_character":71},"updated":"2017-03-28 12:46:08.000000000","message":"ditto","commit_id":"3e45a7831727d1390b9f070d276db28510a44126"},{"author":{"_account_id":18339,"name":"Sivasathurappan Radhakrishnan","email":"siva.radhakrishnan@intel.com","username":"sivakrishnan"},"change_message_id":"847817c272b1dec4738468992c288c100cb8bf66","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        self.mox.StubOutWithMock(self.compute_api, \u0027live_migrate\u0027)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        instance \u003d self._stub_instance_get(state\u003dstate)"},{"line_number":133,"context_line":"        self.compute_api.live_migrate(self.context, instance, block_mig,"},{"line_number":134,"context_line":"                                      self.disk_over_commit, \u0027hostname\u0027,"},{"line_number":135,"context_line":"                                      self.force, self.async)"},{"line_number":136,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"bff0334d_155f1e42","line":133,"range":{"start_line":133,"start_character":62,"end_line":133,"end_character":71},"in_reply_to":"ffe62b97_743db48d","updated":"2017-04-05 15:31:24.000000000","message":"Done","commit_id":"3e45a7831727d1390b9f070d276db28510a44126"},{"author":{"_account_id":17814,"name":"fengzhr","email":"fengzhr@awcloud.com","username":"space"},"change_message_id":"3ea4a35cfc128bf9479b6dbb66bc260f07fa9438","unresolved":false,"context_lines":[{"line_number":467,"context_line":"                 \u0027force\u0027: \u0027false\u0027"},{"line_number":468,"context_line":"                 }"},{"line_number":469,"context_line":"        self._test_migrate_live_succeeded(param, state\u003dvm_states.RESCUED,"},{"line_number":470,"context_line":"                                          block_mig\u003dNone)"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"class MigrateServerPolicyEnforcementV21(test.NoDBTestCase):"}],"source_content_type":"text/x-python","patch_set":26,"id":"ffe62b97_b498dc74","line":470,"range":{"start_line":470,"start_character":42,"end_line":470,"end_character":51},"updated":"2017-03-28 12:46:08.000000000","message":"ditto","commit_id":"3e45a7831727d1390b9f070d276db28510a44126"},{"author":{"_account_id":18339,"name":"Sivasathurappan Radhakrishnan","email":"siva.radhakrishnan@intel.com","username":"sivakrishnan"},"change_message_id":"847817c272b1dec4738468992c288c100cb8bf66","unresolved":false,"context_lines":[{"line_number":467,"context_line":"                 \u0027force\u0027: \u0027false\u0027"},{"line_number":468,"context_line":"                 }"},{"line_number":469,"context_line":"        self._test_migrate_live_succeeded(param, state\u003dvm_states.RESCUED,"},{"line_number":470,"context_line":"                                          block_mig\u003dNone)"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"class MigrateServerPolicyEnforcementV21(test.NoDBTestCase):"}],"source_content_type":"text/x-python","patch_set":26,"id":"bff0334d_f55b9a51","line":470,"range":{"start_line":470,"start_character":42,"end_line":470,"end_character":51},"in_reply_to":"ffe62b97_b498dc74","updated":"2017-04-05 15:31:24.000000000","message":"Done","commit_id":"3e45a7831727d1390b9f070d276db28510a44126"}],"nova/tests/unit/compute/test_compute_api.py":[{"author":{"_account_id":17814,"name":"fengzhr","email":"fengzhr@awcloud.com","username":"space"},"change_message_id":"3ea4a35cfc128bf9479b6dbb66bc260f07fa9438","unresolved":false,"context_lines":[{"line_number":2368,"context_line":"    @mock.patch.object(objects.Instance, \u0027save\u0027)"},{"line_number":2369,"context_line":"    @mock.patch.object(objects.InstanceAction, \u0027action_start\u0027)"},{"line_number":2370,"context_line":"    def _live_migrate_instance(self, instance, _save, _action, get_spec,"},{"line_number":2371,"context_line":"                               should_mig_rescued):"},{"line_number":2372,"context_line":"        # TODO(gilliard): This logic is upside-down (different"},{"line_number":2373,"context_line":"        # behaviour depending on which class this method is mixed-into. Once"},{"line_number":2374,"context_line":"        # we have cellsv2 we can remove this kind of logic from this test"}],"source_content_type":"text/x-python","patch_set":26,"id":"ffe62b97_34df2c3b","line":2371,"range":{"start_line":2371,"start_character":31,"end_line":2371,"end_character":49},"updated":"2017-03-28 12:46:08.000000000","message":"ditto","commit_id":"3e45a7831727d1390b9f070d276db28510a44126"},{"author":{"_account_id":18339,"name":"Sivasathurappan Radhakrishnan","email":"siva.radhakrishnan@intel.com","username":"sivakrishnan"},"change_message_id":"847817c272b1dec4738468992c288c100cb8bf66","unresolved":false,"context_lines":[{"line_number":2368,"context_line":"    @mock.patch.object(objects.Instance, \u0027save\u0027)"},{"line_number":2369,"context_line":"    @mock.patch.object(objects.InstanceAction, \u0027action_start\u0027)"},{"line_number":2370,"context_line":"    def _live_migrate_instance(self, instance, _save, _action, get_spec,"},{"line_number":2371,"context_line":"                               should_mig_rescued):"},{"line_number":2372,"context_line":"        # TODO(gilliard): This logic is upside-down (different"},{"line_number":2373,"context_line":"        # behaviour depending on which class this method is mixed-into. Once"},{"line_number":2374,"context_line":"        # we have cellsv2 we can remove this kind of logic from this test"}],"source_content_type":"text/x-python","patch_set":26,"id":"bff0334d_9519ee89","line":2371,"range":{"start_line":2371,"start_character":31,"end_line":2371,"end_character":49},"in_reply_to":"ffe62b97_34df2c3b","updated":"2017-04-05 15:31:24.000000000","message":"removed this parameter due to change in code.","commit_id":"3e45a7831727d1390b9f070d276db28510a44126"},{"author":{"_account_id":17814,"name":"fengzhr","email":"fengzhr@awcloud.com","username":"space"},"change_message_id":"3ea4a35cfc128bf9479b6dbb66bc260f07fa9438","unresolved":false,"context_lines":[{"line_number":2378,"context_line":"            api \u003d conductor.api.ComputeTaskAPI"},{"line_number":2379,"context_line":"        fake_spec \u003d objects.RequestSpec()"},{"line_number":2380,"context_line":"        get_spec.return_value \u003d fake_spec"},{"line_number":2381,"context_line":"        should_mig_rescued.return_value \u003d True"},{"line_number":2382,"context_line":"        with mock.patch.object(api, \u0027live_migrate_instance\u0027) as task:"},{"line_number":2383,"context_line":"            self.compute_api.live_migrate(self.context, instance,"},{"line_number":2384,"context_line":"                                          block_migration\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":26,"id":"ffe62b97_f4e4240f","line":2381,"range":{"start_line":2381,"start_character":8,"end_line":2381,"end_character":26},"updated":"2017-03-28 12:46:08.000000000","message":"ditto","commit_id":"3e45a7831727d1390b9f070d276db28510a44126"},{"author":{"_account_id":18339,"name":"Sivasathurappan Radhakrishnan","email":"siva.radhakrishnan@intel.com","username":"sivakrishnan"},"change_message_id":"847817c272b1dec4738468992c288c100cb8bf66","unresolved":false,"context_lines":[{"line_number":2378,"context_line":"            api \u003d conductor.api.ComputeTaskAPI"},{"line_number":2379,"context_line":"        fake_spec \u003d objects.RequestSpec()"},{"line_number":2380,"context_line":"        get_spec.return_value \u003d fake_spec"},{"line_number":2381,"context_line":"        should_mig_rescued.return_value \u003d True"},{"line_number":2382,"context_line":"        with mock.patch.object(api, \u0027live_migrate_instance\u0027) as task:"},{"line_number":2383,"context_line":"            self.compute_api.live_migrate(self.context, instance,"},{"line_number":2384,"context_line":"                                          block_migration\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":26,"id":"bff0334d_751e6a71","line":2381,"range":{"start_line":2381,"start_character":8,"end_line":2381,"end_character":26},"in_reply_to":"ffe62b97_f4e4240f","updated":"2017-04-05 15:31:24.000000000","message":"same as above","commit_id":"3e45a7831727d1390b9f070d276db28510a44126"},{"author":{"_account_id":17814,"name":"fengzhr","email":"fengzhr@awcloud.com","username":"space"},"change_message_id":"3ea4a35cfc128bf9479b6dbb66bc260f07fa9438","unresolved":false,"context_lines":[{"line_number":2381,"context_line":"        should_mig_rescued.return_value \u003d True"},{"line_number":2382,"context_line":"        with mock.patch.object(api, \u0027live_migrate_instance\u0027) as task:"},{"line_number":2383,"context_line":"            self.compute_api.live_migrate(self.context, instance,"},{"line_number":2384,"context_line":"                                          block_migration\u003dTrue,"},{"line_number":2385,"context_line":"                                          disk_over_commit\u003dTrue,"},{"line_number":2386,"context_line":"                                          host_name\u003d\u0027fake_dest_host\u0027)"},{"line_number":2387,"context_line":"            self.assertEqual(task_states.MIGRATING, instance.task_state)"}],"source_content_type":"text/x-python","patch_set":26,"id":"ffe62b97_f47b0425","line":2384,"range":{"start_line":2384,"start_character":42,"end_line":2384,"end_character":57},"updated":"2017-03-28 12:46:08.000000000","message":"Here is an example.","commit_id":"3e45a7831727d1390b9f070d276db28510a44126"}],"releasenotes/notes/bp-allow-live-migration-of-rescued-instances-3dee978e3c3a83bd.yaml":[{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"cae121daf84fa1d42325abab76e4ed71998fe9c0","unresolved":false,"context_lines":[{"line_number":2,"context_line":"feature:"},{"line_number":3,"context_line":"  - os-migrateLive action in microversion 2.31 has been enhanced to make it"},{"line_number":4,"context_line":"  - possible to live migrate instances in a state of rescued. This feature"},{"line_number":5,"context_line":"  - is currently only supported for the libvirt virtuization driver."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"3aaa91ec_372f5aa2","line":5,"updated":"2016-06-24 15:36:26.000000000","message":"I think you have 3 items here, not one long item. Remove some -s","commit_id":"c3331f10ce2ad20d7014284b3c0084d38b4c2442"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"9a04960ae75a865ecba5a1dfb96903a561ddcbcd","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"feature:"},{"line_number":3,"context_line":"  - os-migrateLive action in microversion 2.32 has been enhanced to make it"},{"line_number":4,"context_line":"    possible to live migrate instances in a state of rescued. This feature"},{"line_number":5,"context_line":"    is currently only supported for the libvirt virtuization driver."}],"source_content_type":"text/x-yaml","patch_set":21,"id":"3a98d1f4_24764806","line":3,"updated":"2016-09-30 14:59:12.000000000","message":"Needs updating","commit_id":"f2408ce81924b11e9ba3d28ce90dcedc1b286eec"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"113826da0d850e9173df8d085c2a1ff5e301ee42","unresolved":false,"context_lines":[{"line_number":2,"context_line":"feature:"},{"line_number":3,"context_line":"  - os-migrateLive action in microversion 2.4 has been enhanced to make it"},{"line_number":4,"context_line":"    possible to live migrate instances in a state of rescued. This feature"},{"line_number":5,"context_line":"    is currently only supported for the libvirt virtualization driver."}],"source_content_type":"text/x-yaml","patch_set":26,"id":"ffe62b97_3fd939f2","line":5,"updated":"2017-03-28 17:47:34.000000000","message":"This seems out of date, lets mention the api-microversion you are adding here.","commit_id":"3e45a7831727d1390b9f070d276db28510a44126"},{"author":{"_account_id":18339,"name":"Sivasathurappan Radhakrishnan","email":"siva.radhakrishnan@intel.com","username":"sivakrishnan"},"change_message_id":"847817c272b1dec4738468992c288c100cb8bf66","unresolved":false,"context_lines":[{"line_number":2,"context_line":"feature:"},{"line_number":3,"context_line":"  - os-migrateLive action in microversion 2.4 has been enhanced to make it"},{"line_number":4,"context_line":"    possible to live migrate instances in a state of rescued. This feature"},{"line_number":5,"context_line":"    is currently only supported for the libvirt virtualization driver."}],"source_content_type":"text/x-yaml","patch_set":26,"id":"bff0334d_e71bf170","line":5,"in_reply_to":"ffe62b97_3fd939f2","updated":"2017-04-05 15:31:24.000000000","message":"my bad. left the work half done. should have changed it to 2.43.","commit_id":"3e45a7831727d1390b9f070d276db28510a44126"}]}
