)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"9338caa698413d2fc72f1a1769f3b547a22c55dc","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"It also allows live migration of rescued instances."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"A subsequent patch will add amend the compute api classes"},{"line_number":25,"context_line":"and add a new api microversion"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Change-Id: Idf75938b7b7a880afe235e579a6e179eed48ffe5"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"3aaa91ec_f7d15224","line":24,"range":{"start_line":24,"start_character":24,"end_line":24,"end_character":27},"updated":"2016-06-24 15:33:51.000000000","message":"nit s/add//\n\nnit means don\u0027t fix unless you\u0027re uploading a new patchset anyway","commit_id":"d8565fc050db9c22c54dcb40b7c0eda8862bd537"}],"nova/api/openstack/api_version_request.py":[{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"54b189f93f013840a6edb1f63d6593673913764d","unresolved":false,"context_lines":[{"line_number":89,"context_line":"# support is fully merged. It does not affect the V2 API."},{"line_number":90,"context_line":"_MIN_API_VERSION \u003d \"2.1\""},{"line_number":91,"context_line":"_MAX_API_VERSION \u003d \"2.31\""},{"line_number":92,"context_line":""},{"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":16,"id":"7aa08908_7d3d408e","line":92,"updated":"2016-06-08 15:23:28.000000000","message":"minor: please remove this empty line","commit_id":"e086ed1cb8ef05f9b58b27b97e468af3818124fc"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"7ea7113c50c6b0e99e1e42dade73e5d05cb4e645","unresolved":false,"context_lines":[{"line_number":89,"context_line":"# support is fully merged. It does not affect the V2 API."},{"line_number":90,"context_line":"_MIN_API_VERSION \u003d \"2.1\""},{"line_number":91,"context_line":"_MAX_API_VERSION \u003d \"2.31\""},{"line_number":92,"context_line":""},{"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":16,"id":"7aa08908_dbbe7f63","line":92,"in_reply_to":"7aa08908_7d3d408e","updated":"2016-06-10 11:28:09.000000000","message":"Done","commit_id":"e086ed1cb8ef05f9b58b27b97e468af3818124fc"}],"nova/api/openstack/compute/migrate_server.py":[{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"78949a6d31c8f41032181a1c4875d7f7d9c6b0ed","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        try:"},{"line_number":91,"context_line":"            instance \u003d common.get_instance(self.compute_api, context, id)"},{"line_number":92,"context_line":"            if api_version_request.is_supported(req, min_version\u003d\u00272.27\u0027):"},{"line_number":93,"context_line":"                self.compute_api.live_migrate_api_v2_27(context, instance,"},{"line_number":94,"context_line":"                                                        block_migration,"},{"line_number":95,"context_line":"                                                        disk_over_commit,"},{"line_number":96,"context_line":"                                                        host)"},{"line_number":97,"context_line":"            else:"},{"line_number":98,"context_line":"                self.compute_api.live_migrate(context, instance,"},{"line_number":99,"context_line":"                                              block_migration,"},{"line_number":100,"context_line":"                                              disk_over_commit, host)"},{"line_number":101,"context_line":"        except exception.InstanceUnknownCell as e:"},{"line_number":102,"context_line":"            raise exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":103,"context_line":"        except (exception.NoValidHost,"}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_c553dc15","line":100,"range":{"start_line":92,"start_character":0,"end_line":100,"end_character":69},"updated":"2016-05-20 14:17:30.000000000","message":"I do not like the idea to have two different methods, as we check the version here we should fail here if the requirements are not met.\nWe have an example here:\nhttps://github.com/openstack/nova/blob/5546df0f4110628a4b706f81657bf1da475d86ff/nova/api/openstack/compute/volumes.py#L309-L312\n\nWith new microversions if the logic is too complicated we can extrapolate all the logic in a method and fail at this lever but leaving a single entry point for the compute api.","commit_id":"68b9426aa0b363c9642cfe9521f42475b8f43607"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"082fed2338620cd489d7a61a620f4eda72ace5ba","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        try:"},{"line_number":91,"context_line":"            instance \u003d common.get_instance(self.compute_api, context, id)"},{"line_number":92,"context_line":"            if api_version_request.is_supported(req, min_version\u003d\u00272.27\u0027):"},{"line_number":93,"context_line":"                self.compute_api.live_migrate_api_v2_27(context, instance,"},{"line_number":94,"context_line":"                                                        block_migration,"},{"line_number":95,"context_line":"                                                        disk_over_commit,"},{"line_number":96,"context_line":"                                                        host)"},{"line_number":97,"context_line":"            else:"},{"line_number":98,"context_line":"                self.compute_api.live_migrate(context, instance,"},{"line_number":99,"context_line":"                                              block_migration,"},{"line_number":100,"context_line":"                                              disk_over_commit, host)"},{"line_number":101,"context_line":"        except exception.InstanceUnknownCell as e:"},{"line_number":102,"context_line":"            raise exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":103,"context_line":"        except (exception.NoValidHost,"}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_dec67448","line":100,"range":{"start_line":92,"start_character":0,"end_line":100,"end_character":69},"in_reply_to":"bab6814e_c553dc15","updated":"2016-05-24 17:39:25.000000000","message":"I looked at this but in nova.compute.api I don\u0027t have a request object to get the api version from so I\u0027d need pass it which make wonder if your suggestion is a better solution?","commit_id":"68b9426aa0b363c9642cfe9521f42475b8f43607"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"f528ed4134e2cb35a18f70ec6687003dc810ab9b","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        try:"},{"line_number":91,"context_line":"            instance \u003d common.get_instance(self.compute_api, context, id)"},{"line_number":92,"context_line":"            if api_version_request.is_supported(req, min_version\u003d\u00272.29\u0027):"},{"line_number":93,"context_line":"                self.compute_api.live_migrate_api_v2_29(context, instance,"},{"line_number":94,"context_line":"                                                        block_migration,"},{"line_number":95,"context_line":"                                                        disk_over_commit,"},{"line_number":96,"context_line":"                                                        host)"},{"line_number":97,"context_line":"            else:"},{"line_number":98,"context_line":"                self.compute_api.live_migrate(context, instance,"},{"line_number":99,"context_line":"                                              block_migration,"},{"line_number":100,"context_line":"                                              disk_over_commit, host)"},{"line_number":101,"context_line":"        except exception.InstanceUnknownCell as e:"},{"line_number":102,"context_line":"            raise exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":103,"context_line":"        except (exception.NoValidHost,"}],"source_content_type":"text/x-python","patch_set":11,"id":"9abb7d3a_948186fe","line":100,"range":{"start_line":92,"start_character":10,"end_line":100,"end_character":69},"updated":"2016-06-02 17:07:41.000000000","message":"my apologies for not coming back to you in time. What I meant with my comment on your PS6 is that here, in this file, you check the version, then if the version passed is the one which supports the live-migration for rescued instances then you call the live migration, if the version is less than the min_version you required to live migrate a rescued instance then you raise the exception here.\nBasically you keep the if here but instead of calling a different method according to the version if the version is less than the expected and the vm_state is RESCUED you raise the exception here, as the LM won\u0027t be supported.\n\nPutting the logic in this method avoids to change the compute/api/py adding a new method to deal with a different API versions.","commit_id":"1e11e8da4eee3f94747a33882f190ede6d379cb7"}],"nova/compute/api.py":[{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"78949a6d31c8f41032181a1c4875d7f7d9c6b0ed","unresolved":false,"context_lines":[{"line_number":3418,"context_line":"    @check_instance_cell"},{"line_number":3419,"context_line":"    @check_instance_state(vm_state\u003d[vm_states.ACTIVE, vm_states.PAUSED,"},{"line_number":3420,"context_line":"                                    vm_states.RESCUED])"},{"line_number":3421,"context_line":"    def live_migrate_api_v2_27(self, context, instance, block_migration,"},{"line_number":3422,"context_line":"                     disk_over_commit, host_name):"},{"line_number":3423,"context_line":"        \"\"\"Migrate a server lively to a new host.\"\"\""},{"line_number":3424,"context_line":"        self._live_migrate(context, instance, block_migration,"},{"line_number":3425,"context_line":"                           disk_over_commit, host_name)"},{"line_number":3426,"context_line":""},{"line_number":3427,"context_line":"    @check_instance_lock"},{"line_number":3428,"context_line":"    @check_instance_cell"}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_05a844da","line":3425,"range":{"start_line":3421,"start_character":0,"end_line":3425,"end_character":55},"updated":"2016-05-20 14:17:30.000000000","message":"we can make a proper check at the upper level in the API and do not add this method here, instead we just change the original method adding the RESCUED state as a valid state for calling the live_migrate","commit_id":"68b9426aa0b363c9642cfe9521f42475b8f43607"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"082fed2338620cd489d7a61a620f4eda72ace5ba","unresolved":false,"context_lines":[{"line_number":3418,"context_line":"    @check_instance_cell"},{"line_number":3419,"context_line":"    @check_instance_state(vm_state\u003d[vm_states.ACTIVE, vm_states.PAUSED,"},{"line_number":3420,"context_line":"                                    vm_states.RESCUED])"},{"line_number":3421,"context_line":"    def live_migrate_api_v2_27(self, context, instance, block_migration,"},{"line_number":3422,"context_line":"                     disk_over_commit, host_name):"},{"line_number":3423,"context_line":"        \"\"\"Migrate a server lively to a new host.\"\"\""},{"line_number":3424,"context_line":"        self._live_migrate(context, instance, block_migration,"},{"line_number":3425,"context_line":"                           disk_over_commit, host_name)"},{"line_number":3426,"context_line":""},{"line_number":3427,"context_line":"    @check_instance_lock"},{"line_number":3428,"context_line":"    @check_instance_cell"}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_7e2ae8e8","line":3425,"range":{"start_line":3421,"start_character":0,"end_line":3425,"end_character":55},"in_reply_to":"bab6814e_05a844da","updated":"2016-05-24 17:39:25.000000000","message":"see comment on \tnova/api/openstack/compute/migrate_server.py","commit_id":"68b9426aa0b363c9642cfe9521f42475b8f43607"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"54b189f93f013840a6edb1f63d6593673913764d","unresolved":false,"context_lines":[{"line_number":3356,"context_line":"        \"\"\"Migrate a server lively to a new host.\"\"\""},{"line_number":3357,"context_line":"        LOG.debug(\"Going to try to live migrate instance to %s\","},{"line_number":3358,"context_line":"                  host_name or \"another host\", instance\u003dinstance)"},{"line_number":3359,"context_line":""},{"line_number":3360,"context_line":"        instance.task_state \u003d task_states.MIGRATING"},{"line_number":3361,"context_line":"        instance.save(expected_task_state\u003d[None])"},{"line_number":3362,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"7aa08908_a085bb5a","side":"PARENT","line":3359,"updated":"2016-06-08 15:23:28.000000000","message":"please put it back this empty line","commit_id":"e1e04bb227eb1eeb9c036ebc427682f2a4c3e1fe"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"7ea7113c50c6b0e99e1e42dade73e5d05cb4e645","unresolved":false,"context_lines":[{"line_number":3356,"context_line":"        \"\"\"Migrate a server lively to a new host.\"\"\""},{"line_number":3357,"context_line":"        LOG.debug(\"Going to try to live migrate instance to %s\","},{"line_number":3358,"context_line":"                  host_name or \"another host\", instance\u003dinstance)"},{"line_number":3359,"context_line":""},{"line_number":3360,"context_line":"        instance.task_state \u003d task_states.MIGRATING"},{"line_number":3361,"context_line":"        instance.save(expected_task_state\u003d[None])"},{"line_number":3362,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"7aa08908_5b844fb0","side":"PARENT","line":3359,"in_reply_to":"7aa08908_a085bb5a","updated":"2016-06-10 11:28:09.000000000","message":"Done","commit_id":"e1e04bb227eb1eeb9c036ebc427682f2a4c3e1fe"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"54b189f93f013840a6edb1f63d6593673913764d","unresolved":false,"context_lines":[{"line_number":3359,"context_line":""},{"line_number":3360,"context_line":"        instance.task_state \u003d task_states.MIGRATING"},{"line_number":3361,"context_line":"        instance.save(expected_task_state\u003d[None])"},{"line_number":3362,"context_line":""},{"line_number":3363,"context_line":"        self._record_action_start(context, instance,"},{"line_number":3364,"context_line":"                                  instance_actions.LIVE_MIGRATION)"},{"line_number":3365,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":16,"id":"7aa08908_a0ec9b2a","side":"PARENT","line":3362,"updated":"2016-06-08 15:23:28.000000000","message":"same as above","commit_id":"e1e04bb227eb1eeb9c036ebc427682f2a4c3e1fe"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"7ea7113c50c6b0e99e1e42dade73e5d05cb4e645","unresolved":false,"context_lines":[{"line_number":3359,"context_line":""},{"line_number":3360,"context_line":"        instance.task_state \u003d task_states.MIGRATING"},{"line_number":3361,"context_line":"        instance.save(expected_task_state\u003d[None])"},{"line_number":3362,"context_line":""},{"line_number":3363,"context_line":"        self._record_action_start(context, instance,"},{"line_number":3364,"context_line":"                                  instance_actions.LIVE_MIGRATION)"},{"line_number":3365,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":16,"id":"7aa08908_bb93b3f9","side":"PARENT","line":3362,"in_reply_to":"7aa08908_a0ec9b2a","updated":"2016-06-10 11:28:09.000000000","message":"Done","commit_id":"e1e04bb227eb1eeb9c036ebc427682f2a4c3e1fe"}],"nova/compute/manager.py":[{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"54b189f93f013840a6edb1f63d6593673913764d","unresolved":false,"context_lines":[{"line_number":4969,"context_line":"        \"\"\"Check if instance is rescued and if so if the driver can live"},{"line_number":4970,"context_line":"        migrate rescued instances."},{"line_number":4971,"context_line":""},{"line_number":4972,"context_line":"        :param instance: dict of instance data"},{"line_number":4973,"context_line":"        :returns: nothing, exception raised if unable to migrate instance"},{"line_number":4974,"context_line":"        \"\"\""},{"line_number":4975,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"7aa08908_e225035c","line":4972,"updated":"2016-06-08 15:23:28.000000000","message":"minor: missing the description for the param called \"node\"","commit_id":"e086ed1cb8ef05f9b58b27b97e468af3818124fc"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"7ea7113c50c6b0e99e1e42dade73e5d05cb4e645","unresolved":false,"context_lines":[{"line_number":4969,"context_line":"        \"\"\"Check if instance is rescued and if so if the driver can live"},{"line_number":4970,"context_line":"        migrate rescued instances."},{"line_number":4971,"context_line":""},{"line_number":4972,"context_line":"        :param instance: dict of instance data"},{"line_number":4973,"context_line":"        :returns: nothing, exception raised if unable to migrate instance"},{"line_number":4974,"context_line":"        \"\"\""},{"line_number":4975,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"7aa08908_db784a2e","line":4972,"in_reply_to":"7aa08908_e225035c","updated":"2016-06-10 11:28:09.000000000","message":"Done","commit_id":"e086ed1cb8ef05f9b58b27b97e468af3818124fc"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"439dd2ed8064c536b1a43141901b3cb7f44bc558","unresolved":false,"context_lines":[{"line_number":4991,"context_line":"                                                            block_migration,"},{"line_number":4992,"context_line":"                                                            disk_over_commit)"},{"line_number":4993,"context_line":""},{"line_number":4994,"context_line":"    def _can_migrate_rescued_instance(self, instance, node):"},{"line_number":4995,"context_line":"        \"\"\"Check if instance is rescued and if so if the driver can live"},{"line_number":4996,"context_line":"        migrate rescued instances."},{"line_number":4997,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"3aaa91ec_d0306e58","line":4994,"range":{"start_line":4994,"start_character":54,"end_line":4994,"end_character":58},"updated":"2016-06-27 07:48:28.000000000","message":"This argument is not needed. Instead you can use node\u003dself.host and instance\u003dinstance in exception to match which exception failed on which host.","commit_id":"d561afe994ab6fc9bc7ba82f6e2a0ad93da6c5f3"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"63612e72a6a141e66f6664dab1d583007478386f","unresolved":false,"context_lines":[{"line_number":4991,"context_line":"                                                            block_migration,"},{"line_number":4992,"context_line":"                                                            disk_over_commit)"},{"line_number":4993,"context_line":""},{"line_number":4994,"context_line":"    def _can_migrate_rescued_instance(self, instance, node):"},{"line_number":4995,"context_line":"        \"\"\"Check if instance is rescued and if so if the driver can live"},{"line_number":4996,"context_line":"        migrate rescued instances."},{"line_number":4997,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"3aaa91ec_fc50a360","line":4994,"range":{"start_line":4994,"start_character":54,"end_line":4994,"end_character":58},"in_reply_to":"3aaa91ec_13dfa03a","updated":"2016-06-28 13:10:32.000000000","message":"Not sure I follow, the node parameter is there to allow the caller to specify if they are source or destination node, the host name is also included in the the exception","commit_id":"d561afe994ab6fc9bc7ba82f6e2a0ad93da6c5f3"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"3c52c034fca2ced3e40a14b27f6c07927b750c39","unresolved":false,"context_lines":[{"line_number":4991,"context_line":"                                                            block_migration,"},{"line_number":4992,"context_line":"                                                            disk_over_commit)"},{"line_number":4993,"context_line":""},{"line_number":4994,"context_line":"    def _can_migrate_rescued_instance(self, instance, node):"},{"line_number":4995,"context_line":"        \"\"\"Check if instance is rescued and if so if the driver can live"},{"line_number":4996,"context_line":"        migrate rescued instances."},{"line_number":4997,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"3aaa91ec_13dfa03a","line":4994,"range":{"start_line":4994,"start_character":54,"end_line":4994,"end_character":58},"in_reply_to":"3aaa91ec_d0306e58","updated":"2016-06-27 07:49:08.000000000","message":"I meant which instance failed on which host","commit_id":"d561afe994ab6fc9bc7ba82f6e2a0ad93da6c5f3"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"439dd2ed8064c536b1a43141901b3cb7f44bc558","unresolved":false,"context_lines":[{"line_number":5004,"context_line":"        migrate_rescued \u003d self.driver.capabilities.get(capability, False)"},{"line_number":5005,"context_line":"        if instance.vm_state \u003d\u003d vm_states.RESCUED and not migrate_rescued:"},{"line_number":5006,"context_line":"            raise \\"},{"line_number":5007,"context_line":"                exception.RescuedInstanceLiveMigrationNotSupported("},{"line_number":5008,"context_line":"                    node\u003dnode, name\u003dCONF.host)"},{"line_number":5009,"context_line":""},{"line_number":5010,"context_line":"    def _do_check_can_live_migrate_destination(self, ctxt, instance,"},{"line_number":5011,"context_line":"                                               block_migration,"}],"source_content_type":"text/x-python","patch_set":25,"id":"3aaa91ec_70e09a29","line":5008,"range":{"start_line":5007,"start_character":16,"end_line":5008,"end_character":46},"updated":"2016-06-27 07:48:28.000000000","message":"This exception is missing which instance failed live migration","commit_id":"d561afe994ab6fc9bc7ba82f6e2a0ad93da6c5f3"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"63612e72a6a141e66f6664dab1d583007478386f","unresolved":false,"context_lines":[{"line_number":5004,"context_line":"        migrate_rescued \u003d self.driver.capabilities.get(capability, False)"},{"line_number":5005,"context_line":"        if instance.vm_state \u003d\u003d vm_states.RESCUED and not migrate_rescued:"},{"line_number":5006,"context_line":"            raise \\"},{"line_number":5007,"context_line":"                exception.RescuedInstanceLiveMigrationNotSupported("},{"line_number":5008,"context_line":"                    node\u003dnode, name\u003dCONF.host)"},{"line_number":5009,"context_line":""},{"line_number":5010,"context_line":"    def _do_check_can_live_migrate_destination(self, ctxt, instance,"},{"line_number":5011,"context_line":"                                               block_migration,"}],"source_content_type":"text/x-python","patch_set":25,"id":"3aaa91ec_8c4cce77","line":5008,"range":{"start_line":5007,"start_character":16,"end_line":5008,"end_character":46},"in_reply_to":"3aaa91ec_70e09a29","updated":"2016-06-28 13:10:32.000000000","message":"The exception is generated during pre live migration checks which occur as part of API call so the exception is returned to the caller.  In the case of a single instance migration they will know the error relates to the instance they tried to migrate. In the case of host-evacuate-live the call returns a list of outcomes for each instance so it is clear which instance failed.","commit_id":"d561afe994ab6fc9bc7ba82f6e2a0ad93da6c5f3"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"345dbd958ef2c0aceae4884d0b0ad7d046e231aa","unresolved":false,"context_lines":[{"line_number":3226,"context_line":""},{"line_number":3227,"context_line":"        rescue_image_meta \u003d self._get_rescue_image(context, instance,"},{"line_number":3228,"context_line":"                                                   rescue_image_ref)"},{"line_number":3229,"context_line":""},{"line_number":3230,"context_line":"        extra_usage_info \u003d {\u0027rescue_image_name\u0027:"},{"line_number":3231,"context_line":"                            self._get_image_name(rescue_image_meta)}"},{"line_number":3232,"context_line":"        self._notify_about_instance_usage(context, instance,"}],"source_content_type":"text/x-python","patch_set":28,"id":"3aaa91ec_d6e92ab9","side":"PARENT","line":3229,"updated":"2016-06-28 16:35:48.000000000","message":"Nit: its good to exclude these kinds of changes","commit_id":"d2c9c2ed76de8a1763e15ac72f7c39de1051aacb"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"9ae32a354ba90e8dddbdb89af5a7b6b8c47df863","unresolved":false,"context_lines":[{"line_number":3226,"context_line":""},{"line_number":3227,"context_line":"        rescue_image_meta \u003d self._get_rescue_image(context, instance,"},{"line_number":3228,"context_line":"                                                   rescue_image_ref)"},{"line_number":3229,"context_line":""},{"line_number":3230,"context_line":"        extra_usage_info \u003d {\u0027rescue_image_name\u0027:"},{"line_number":3231,"context_line":"                            self._get_image_name(rescue_image_meta)}"},{"line_number":3232,"context_line":"        self._notify_about_instance_usage(context, instance,"}],"source_content_type":"text/x-python","patch_set":28,"id":"3aaa91ec_efd6e7ef","side":"PARENT","line":3229,"in_reply_to":"3aaa91ec_d6e92ab9","updated":"2016-06-29 12:45:51.000000000","message":"Done","commit_id":"d2c9c2ed76de8a1763e15ac72f7c39de1051aacb"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7bbb2c93130a4b6429f6e8158fcf0b14271fea05","unresolved":false,"context_lines":[{"line_number":3215,"context_line":"        if kernel_id:"},{"line_number":3216,"context_line":"            system_meta[\u0027rescue_kernel_id\u0027] \u003d kernel_id"},{"line_number":3217,"context_line":"        if ramdisk_id:"},{"line_number":3218,"context_line":"            system_meta[\u0027rescue_ramdisk_id\u0027] \u003d ramdisk_id"},{"line_number":3219,"context_line":""},{"line_number":3220,"context_line":"        return objects.ImageMeta.from_image_ref("},{"line_number":3221,"context_line":"            context, self.image_api, rescue_image_ref)"}],"source_content_type":"text/x-python","patch_set":28,"id":"3aaa91ec_4a158de3","line":3218,"updated":"2016-06-28 16:43:07.000000000","message":"Hmm, don\u0027t we need other details of the rescue image here as well?","commit_id":"adf51e2672dcd25a091355f2cc91384b470925f3"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"9ae32a354ba90e8dddbdb89af5a7b6b8c47df863","unresolved":false,"context_lines":[{"line_number":3215,"context_line":"        if kernel_id:"},{"line_number":3216,"context_line":"            system_meta[\u0027rescue_kernel_id\u0027] \u003d kernel_id"},{"line_number":3217,"context_line":"        if ramdisk_id:"},{"line_number":3218,"context_line":"            system_meta[\u0027rescue_ramdisk_id\u0027] \u003d ramdisk_id"},{"line_number":3219,"context_line":""},{"line_number":3220,"context_line":"        return objects.ImageMeta.from_image_ref("},{"line_number":3221,"context_line":"            context, self.image_api, rescue_image_ref)"}],"source_content_type":"text/x-python","patch_set":28,"id":"3aaa91ec_407c30eb","line":3218,"in_reply_to":"3aaa91ec_4a158de3","updated":"2016-06-29 12:45:51.000000000","message":"good catch, it does need rescue image too, my tests worked because cirros-0.3.0 and cirros-0.3.4 base images are not too different!  Fixed now.","commit_id":"adf51e2672dcd25a091355f2cc91384b470925f3"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"b712707fb0fc7ceaf1c6fdf8f73f9ee409fe202c","unresolved":false,"context_lines":[{"line_number":4992,"context_line":"                                                            block_migration,"},{"line_number":4993,"context_line":"                                                            disk_over_commit)"},{"line_number":4994,"context_line":""},{"line_number":4995,"context_line":"    def _can_migrate_rescued_instance(self, instance, node):"},{"line_number":4996,"context_line":"        \"\"\"Check if instance is rescued and if so if the driver can live"},{"line_number":4997,"context_line":"        migrate rescued instances."},{"line_number":4998,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"3aaa91ec_1aee3a8b","line":4995,"range":{"start_line":4995,"start_character":54,"end_line":4995,"end_character":58},"updated":"2016-06-28 15:02:22.000000000","message":"I still don\u0027t like passing this argument there. You can, e.g., use instance.host and self.host to see if it is source or destination node. If instance.host \u003d\u003d self.host it is source, otherwise destination.","commit_id":"adf51e2672dcd25a091355f2cc91384b470925f3"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"9ae32a354ba90e8dddbdb89af5a7b6b8c47df863","unresolved":false,"context_lines":[{"line_number":4992,"context_line":"                                                            block_migration,"},{"line_number":4993,"context_line":"                                                            disk_over_commit)"},{"line_number":4994,"context_line":""},{"line_number":4995,"context_line":"    def _can_migrate_rescued_instance(self, instance, node):"},{"line_number":4996,"context_line":"        \"\"\"Check if instance is rescued and if so if the driver can live"},{"line_number":4997,"context_line":"        migrate rescued instances."},{"line_number":4998,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"3aaa91ec_aff33f9e","line":4995,"range":{"start_line":4995,"start_character":54,"end_line":4995,"end_character":58},"in_reply_to":"3aaa91ec_1aee3a8b","updated":"2016-06-29 12:45:51.000000000","message":"Done","commit_id":"adf51e2672dcd25a091355f2cc91384b470925f3"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"345dbd958ef2c0aceae4884d0b0ad7d046e231aa","unresolved":false,"context_lines":[{"line_number":4992,"context_line":"                                                            block_migration,"},{"line_number":4993,"context_line":"                                                            disk_over_commit)"},{"line_number":4994,"context_line":""},{"line_number":4995,"context_line":"    def _can_migrate_rescued_instance(self, instance, node):"},{"line_number":4996,"context_line":"        \"\"\"Check if instance is rescued and if so if the driver can live"},{"line_number":4997,"context_line":"        migrate rescued instances."},{"line_number":4998,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"3aaa91ec_9fdfb50b","line":4995,"range":{"start_line":4995,"start_character":54,"end_line":4995,"end_character":58},"in_reply_to":"3aaa91ec_1aee3a8b","updated":"2016-06-28 16:35:48.000000000","message":"Its just source vs destination being passed in here, maybe just needs a better name, location?","commit_id":"adf51e2672dcd25a091355f2cc91384b470925f3"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"9ae32a354ba90e8dddbdb89af5a7b6b8c47df863","unresolved":false,"context_lines":[{"line_number":4992,"context_line":"                                                            block_migration,"},{"line_number":4993,"context_line":"                                                            disk_over_commit)"},{"line_number":4994,"context_line":""},{"line_number":4995,"context_line":"    def _can_migrate_rescued_instance(self, instance, node):"},{"line_number":4996,"context_line":"        \"\"\"Check if instance is rescued and if so if the driver can live"},{"line_number":4997,"context_line":"        migrate rescued instances."},{"line_number":4998,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"3aaa91ec_0ff3739f","line":4995,"range":{"start_line":4995,"start_character":54,"end_line":4995,"end_character":58},"in_reply_to":"3aaa91ec_9fdfb50b","updated":"2016-06-29 12:45:51.000000000","message":"Done","commit_id":"adf51e2672dcd25a091355f2cc91384b470925f3"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"20dc7e157d7d191a5ef12249ddc9ef6212a4321e","unresolved":false,"context_lines":[{"line_number":3213,"context_line":"        image_properties \u003d rescue_image.get(\u0027properties\u0027, {})"},{"line_number":3214,"context_line":"        kernel_id \u003d image_properties.get(\u0027kernel_id\u0027)"},{"line_number":3215,"context_line":"        ramdisk_id \u003d image_properties.get(\u0027ramdisk_id\u0027)"},{"line_number":3216,"context_line":"        system_meta \u003d utils.instance_sys_meta(instance)"},{"line_number":3217,"context_line":"        system_meta[\u0027rescue_image_ref\u0027] \u003d rescue_image_ref"},{"line_number":3218,"context_line":"        if kernel_id:"},{"line_number":3219,"context_line":"            system_meta[\u0027rescue_kernel_id\u0027] \u003d kernel_id"}],"source_content_type":"text/x-python","patch_set":30,"id":"3aaa91ec_a6fb577a","line":3216,"range":{"start_line":3216,"start_character":8,"end_line":3216,"end_character":55},"updated":"2016-06-29 15:19:45.000000000","message":"we should move this line at the beginning of the method in order to have the system_meta soon so we can use it if it is required by line #3204 and get rid of the line #3203","commit_id":"1d557a79c052eb21273b0c2c0f619610993df12f"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"fbbfcf97c1bb9a1b9f285d0334cab32e0dad5395","unresolved":false,"context_lines":[{"line_number":3213,"context_line":"        image_properties \u003d rescue_image.get(\u0027properties\u0027, {})"},{"line_number":3214,"context_line":"        kernel_id \u003d image_properties.get(\u0027kernel_id\u0027)"},{"line_number":3215,"context_line":"        ramdisk_id \u003d image_properties.get(\u0027ramdisk_id\u0027)"},{"line_number":3216,"context_line":"        system_meta \u003d utils.instance_sys_meta(instance)"},{"line_number":3217,"context_line":"        system_meta[\u0027rescue_image_ref\u0027] \u003d rescue_image_ref"},{"line_number":3218,"context_line":"        if kernel_id:"},{"line_number":3219,"context_line":"            system_meta[\u0027rescue_kernel_id\u0027] \u003d kernel_id"}],"source_content_type":"text/x-python","patch_set":30,"id":"3aaa91ec_110edc3a","line":3216,"range":{"start_line":3216,"start_character":8,"end_line":3216,"end_character":55},"in_reply_to":"3aaa91ec_a6fb577a","updated":"2016-06-29 17:14:36.000000000","message":"Done","commit_id":"1d557a79c052eb21273b0c2c0f619610993df12f"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"20dc7e157d7d191a5ef12249ddc9ef6212a4321e","unresolved":false,"context_lines":[{"line_number":5020,"context_line":"                                               block_migration,"},{"line_number":5021,"context_line":"                                               disk_over_commit):"},{"line_number":5022,"context_line":""},{"line_number":5023,"context_line":"        self._can_migrate_rescued_instance(instance)"},{"line_number":5024,"context_line":"        src_compute_info \u003d obj_base.obj_to_primitive("},{"line_number":5025,"context_line":"            self._get_compute_info(ctxt, instance.host))"},{"line_number":5026,"context_line":"        dst_compute_info \u003d obj_base.obj_to_primitive("}],"source_content_type":"text/x-python","patch_set":30,"id":"3aaa91ec_c66b031d","line":5023,"range":{"start_line":5023,"start_character":8,"end_line":5023,"end_character":52},"updated":"2016-06-29 15:19:45.000000000","message":"minor: The name of the method is confusing me, to me it would be better to check here if the instance is in RESCUED and if so then check if the driver supports the migration. \nDoing that we check the capabilities only when it is necessary and not for each migrations and we can have a more clear method name.","commit_id":"1d557a79c052eb21273b0c2c0f619610993df12f"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"fbbfcf97c1bb9a1b9f285d0334cab32e0dad5395","unresolved":false,"context_lines":[{"line_number":5020,"context_line":"                                               block_migration,"},{"line_number":5021,"context_line":"                                               disk_over_commit):"},{"line_number":5022,"context_line":""},{"line_number":5023,"context_line":"        self._can_migrate_rescued_instance(instance)"},{"line_number":5024,"context_line":"        src_compute_info \u003d obj_base.obj_to_primitive("},{"line_number":5025,"context_line":"            self._get_compute_info(ctxt, instance.host))"},{"line_number":5026,"context_line":"        dst_compute_info \u003d obj_base.obj_to_primitive("}],"source_content_type":"text/x-python","patch_set":30,"id":"3aaa91ec_62883072","line":5023,"range":{"start_line":5023,"start_character":8,"end_line":5023,"end_character":52},"in_reply_to":"3aaa91ec_c66b031d","updated":"2016-06-29 17:14:36.000000000","message":"Done","commit_id":"1d557a79c052eb21273b0c2c0f619610993df12f"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"20dc7e157d7d191a5ef12249ddc9ef6212a4321e","unresolved":false,"context_lines":[{"line_number":5052,"context_line":"        :param dest_check_data: result of check_can_live_migrate_destination"},{"line_number":5053,"context_line":"        :returns: a dict containing migration info"},{"line_number":5054,"context_line":"        \"\"\""},{"line_number":5055,"context_line":"        self._can_migrate_rescued_instance(instance)"},{"line_number":5056,"context_line":"        is_volume_backed \u003d compute_utils.is_volume_backed_instance(ctxt,"},{"line_number":5057,"context_line":"                                                                   instance)"},{"line_number":5058,"context_line":"        got_migrate_data_object \u003d isinstance(dest_check_data,"}],"source_content_type":"text/x-python","patch_set":30,"id":"3aaa91ec_e6555f50","line":5055,"range":{"start_line":5055,"start_character":7,"end_line":5055,"end_character":52},"updated":"2016-06-29 15:19:45.000000000","message":"same as above","commit_id":"1d557a79c052eb21273b0c2c0f619610993df12f"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"fbbfcf97c1bb9a1b9f285d0334cab32e0dad5395","unresolved":false,"context_lines":[{"line_number":5052,"context_line":"        :param dest_check_data: result of check_can_live_migrate_destination"},{"line_number":5053,"context_line":"        :returns: a dict containing migration info"},{"line_number":5054,"context_line":"        \"\"\""},{"line_number":5055,"context_line":"        self._can_migrate_rescued_instance(instance)"},{"line_number":5056,"context_line":"        is_volume_backed \u003d compute_utils.is_volume_backed_instance(ctxt,"},{"line_number":5057,"context_line":"                                                                   instance)"},{"line_number":5058,"context_line":"        got_migrate_data_object \u003d isinstance(dest_check_data,"}],"source_content_type":"text/x-python","patch_set":30,"id":"3aaa91ec_c2792484","line":5055,"range":{"start_line":5055,"start_character":7,"end_line":5055,"end_character":52},"in_reply_to":"3aaa91ec_e6555f50","updated":"2016-06-29 17:14:36.000000000","message":"Done","commit_id":"1d557a79c052eb21273b0c2c0f619610993df12f"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"a1b28018efbd30771e801af8b11628c09a0f8079","unresolved":false,"context_lines":[{"line_number":5026,"context_line":"                                                            disk_over_commit)"},{"line_number":5027,"context_line":""},{"line_number":5028,"context_line":"    def _check_supports_rescued_instance_migration(self, instance):"},{"line_number":5029,"context_line":"        \"\"\"Check if instance is rescued and if so if the driver can live"},{"line_number":5030,"context_line":"        migrate rescued instances."},{"line_number":5031,"context_line":""},{"line_number":5032,"context_line":"        :param instance: dict of instance data"},{"line_number":5033,"context_line":"        :returns: nothing, exception raised if unable to migrate instance"}],"source_content_type":"text/x-python","patch_set":36,"id":"3aaa91ec_cf52c8dd","line":5030,"range":{"start_line":5029,"start_character":0,"end_line":5030,"end_character":34},"updated":"2016-06-30 14:18:48.000000000","message":"based on the recent change that doc string is not valid anymore","commit_id":"c3a0b3d1f682856e55a6f41b4e002bf2dd7f50ea"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"42de5a3df66a5be3e7f6373321f8cd027220602b","unresolved":false,"context_lines":[{"line_number":5026,"context_line":"                                                            disk_over_commit)"},{"line_number":5027,"context_line":""},{"line_number":5028,"context_line":"    def _check_supports_rescued_instance_migration(self, instance):"},{"line_number":5029,"context_line":"        \"\"\"Check if instance is rescued and if so if the driver can live"},{"line_number":5030,"context_line":"        migrate rescued instances."},{"line_number":5031,"context_line":""},{"line_number":5032,"context_line":"        :param instance: dict of instance data"},{"line_number":5033,"context_line":"        :returns: nothing, exception raised if unable to migrate instance"}],"source_content_type":"text/x-python","patch_set":36,"id":"3aaa91ec_f422e5b7","line":5030,"range":{"start_line":5029,"start_character":0,"end_line":5030,"end_character":34},"in_reply_to":"3aaa91ec_cf52c8dd","updated":"2016-06-30 16:15:32.000000000","message":"Done","commit_id":"c3a0b3d1f682856e55a6f41b4e002bf2dd7f50ea"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1cd6a21d4b3246613132a315a8a5c0b3b39ad263","unresolved":false,"context_lines":[{"line_number":5203,"context_line":"        capability \u003d \"supports_live_migrate_rescued\""},{"line_number":5204,"context_line":"        if not self.driver.capabilities.get(capability, False):"},{"line_number":5205,"context_line":"            loc \u003d \u0027source\u0027 if instance.host \u003d\u003d CONF.host else \u0027destination\u0027"},{"line_number":5206,"context_line":"            raise \\"},{"line_number":5207,"context_line":"                exception.RescuedInstanceLiveMigrationNotSupported("},{"line_number":5208,"context_line":"                    location\u003dloc, name\u003dCONF.host)"},{"line_number":5209,"context_line":""},{"line_number":5210,"context_line":"    def _do_check_can_live_migrate_destination(self, ctxt, instance,"}],"source_content_type":"text/x-python","patch_set":49,"id":"bff0334d_cfea90d6","line":5207,"range":{"start_line":5206,"start_character":17,"end_line":5207,"end_character":16},"updated":"2017-04-11 11:37:37.000000000","message":"nit: this could fit on one line?","commit_id":"7ef91534fa23eb7d5f017c102fcc3d0773f416c9"}],"nova/compute/rpcapi.py":[{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"54b189f93f013840a6edb1f63d6593673913764d","unresolved":false,"context_lines":[{"line_number":448,"context_line":"                                instance\u003dinstance,"},{"line_number":449,"context_line":"                                block_migration\u003dblock_migration,"},{"line_number":450,"context_line":"                                disk_over_commit\u003ddisk_over_commit)"},{"line_number":451,"context_line":"        except messaging.RemoteError as e:"},{"line_number":452,"context_line":"            t \u003d \"UnsupportedVersion Endpoint does not support RPC version %s\""},{"line_number":453,"context_line":"            if e.message.find(t % version) \u003c 0:"},{"line_number":454,"context_line":"                raise e"}],"source_content_type":"text/x-python","patch_set":16,"id":"7aa08908_87509133","line":451,"range":{"start_line":451,"start_character":0,"end_line":451,"end_character":42},"updated":"2016-06-08 15:23:28.000000000","message":"why here we can\u0027t do the same check we do at line #432?\nit is because we need to wait fro the response back from the actual compute manager?","commit_id":"e086ed1cb8ef05f9b58b27b97e468af3818124fc"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"7ea7113c50c6b0e99e1e42dade73e5d05cb4e645","unresolved":false,"context_lines":[{"line_number":448,"context_line":"                                instance\u003dinstance,"},{"line_number":449,"context_line":"                                block_migration\u003dblock_migration,"},{"line_number":450,"context_line":"                                disk_over_commit\u003ddisk_over_commit)"},{"line_number":451,"context_line":"        except messaging.RemoteError as e:"},{"line_number":452,"context_line":"            t \u003d \"UnsupportedVersion Endpoint does not support RPC version %s\""},{"line_number":453,"context_line":"            if e.message.find(t % version) \u003c 0:"},{"line_number":454,"context_line":"                raise e"}],"source_content_type":"text/x-python","patch_set":16,"id":"7aa08908_5b7d7ae6","line":451,"range":{"start_line":451,"start_character":0,"end_line":451,"end_character":42},"in_reply_to":"7aa08908_87509133","updated":"2016-06-10 11:28:09.000000000","message":"Yes, the check in #432 simply verifies that the target cell conductor can support the specified version of the compute API. This line handles the case where the target compute node has not yet been updated ad thus is not running the version of the code required to support live migration of rescued instances.","commit_id":"e086ed1cb8ef05f9b58b27b97e468af3818124fc"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"54b189f93f013840a6edb1f63d6593673913764d","unresolved":false,"context_lines":[{"line_number":449,"context_line":"                                block_migration\u003dblock_migration,"},{"line_number":450,"context_line":"                                disk_over_commit\u003ddisk_over_commit)"},{"line_number":451,"context_line":"        except messaging.RemoteError as e:"},{"line_number":452,"context_line":"            t \u003d \"UnsupportedVersion Endpoint does not support RPC version %s\""},{"line_number":453,"context_line":"            if e.message.find(t % version) \u003c 0:"},{"line_number":454,"context_line":"                raise e"},{"line_number":455,"context_line":"            raise exception.RescuedInstanceLiveMigrationNotSupported("},{"line_number":456,"context_line":"                    node\u003d\u0027destination\u0027, name\u003ddestination)"},{"line_number":457,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"7aa08908_82051f12","line":454,"range":{"start_line":452,"start_character":12,"end_line":454,"end_character":23},"updated":"2016-06-08 15:23:28.000000000","message":"that is very fragile. Please check e.exc_type to see if it is equal to UnsupportedVersion","commit_id":"e086ed1cb8ef05f9b58b27b97e468af3818124fc"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"7ea7113c50c6b0e99e1e42dade73e5d05cb4e645","unresolved":false,"context_lines":[{"line_number":449,"context_line":"                                block_migration\u003dblock_migration,"},{"line_number":450,"context_line":"                                disk_over_commit\u003ddisk_over_commit)"},{"line_number":451,"context_line":"        except messaging.RemoteError as e:"},{"line_number":452,"context_line":"            t \u003d \"UnsupportedVersion Endpoint does not support RPC version %s\""},{"line_number":453,"context_line":"            if e.message.find(t % version) \u003c 0:"},{"line_number":454,"context_line":"                raise e"},{"line_number":455,"context_line":"            raise exception.RescuedInstanceLiveMigrationNotSupported("},{"line_number":456,"context_line":"                    node\u003d\u0027destination\u0027, name\u003ddestination)"},{"line_number":457,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"7aa08908_db2e7f41","line":454,"range":{"start_line":452,"start_character":12,"end_line":454,"end_character":23},"in_reply_to":"7aa08908_82051f12","updated":"2016-06-10 11:28:09.000000000","message":"Unfortunately the oslo.messaging code catches the UnsupportedVersion exception and raises a RemoteError with the exception message set to the text from the UnsupportedVersion exception. The alternative is to remove this check and just assume that any remote exception is due to a version mismatch.","commit_id":"e086ed1cb8ef05f9b58b27b97e468af3818124fc"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"9338caa698413d2fc72f1a1769f3b547a22c55dc","unresolved":false,"context_lines":[{"line_number":441,"context_line":"                version \u003d \u00274.0\u0027"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"        if instance.vm_state \u003d\u003d vm_states.RESCUED:"},{"line_number":444,"context_line":"            version \u003d \u00274.13\u0027"},{"line_number":445,"context_line":"        try:"},{"line_number":446,"context_line":"            cctxt \u003d cell_client.prepare(server\u003ddestination, version\u003dversion)"},{"line_number":447,"context_line":"            result \u003d cctxt.call(ctxt, \u0027check_can_live_migrate_destination\u0027,"}],"source_content_type":"text/x-python","patch_set":23,"id":"3aaa91ec_f742f2ac","line":444,"updated":"2016-06-24 15:33:51.000000000","message":"so we\u0027re overriding cell_client.can_send_version ? You sure that\u0027s OK?","commit_id":"d8565fc050db9c22c54dcb40b7c0eda8862bd537"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"a71fe43328b38f7ddf4dd286e99fdec2f4847905","unresolved":false,"context_lines":[{"line_number":441,"context_line":"                version \u003d \u00274.0\u0027"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"        if instance.vm_state \u003d\u003d vm_states.RESCUED:"},{"line_number":444,"context_line":"            version \u003d \u00274.13\u0027"},{"line_number":445,"context_line":"        try:"},{"line_number":446,"context_line":"            cctxt \u003d cell_client.prepare(server\u003ddestination, version\u003dversion)"},{"line_number":447,"context_line":"            result \u003d cctxt.call(ctxt, \u0027check_can_live_migrate_destination\u0027,"}],"source_content_type":"text/x-python","patch_set":23,"id":"3aaa91ec_48ad2787","line":444,"in_reply_to":"3aaa91ec_f742f2ac","updated":"2016-06-24 16:25:47.000000000","message":"Just setting it the to current version in case previous block changed it","commit_id":"d8565fc050db9c22c54dcb40b7c0eda8862bd537"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"439dd2ed8064c536b1a43141901b3cb7f44bc558","unresolved":false,"context_lines":[{"line_number":429,"context_line":"                                           block_migration, disk_over_commit):"},{"line_number":430,"context_line":"        version \u003d \u00274.13\u0027"},{"line_number":431,"context_line":"        cell_client \u003d self.get_cell_client(ctxt)"},{"line_number":432,"context_line":"        if not cell_client.can_send_version(\u00274.11\u0027):"},{"line_number":433,"context_line":"            # NOTE(eliqiao): This is a new feature that is only available"},{"line_number":434,"context_line":"            # once all compute nodes support at least version 4.11."},{"line_number":435,"context_line":"            # This means the new REST API that supports this needs to handle"}],"source_content_type":"text/x-python","patch_set":25,"id":"3aaa91ec_50ad9ee7","line":432,"range":{"start_line":432,"start_character":44,"end_line":432,"end_character":50},"updated":"2016-06-27 07:48:28.000000000","message":"This shouldn\u0027t be changed, instead there should be one more check before this one (so that we will keep going back with version, starting with 4.13, if client can\u0027t send then try 4.11, and then 4.0), you can see check_can_live_migrate_source as an exemple. You can also see migrate_server or build_instances in conductor/rpcapi if you need other examples","commit_id":"d561afe994ab6fc9bc7ba82f6e2a0ad93da6c5f3"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"63612e72a6a141e66f6664dab1d583007478386f","unresolved":false,"context_lines":[{"line_number":429,"context_line":"                                           block_migration, disk_over_commit):"},{"line_number":430,"context_line":"        version \u003d \u00274.13\u0027"},{"line_number":431,"context_line":"        cell_client \u003d self.get_cell_client(ctxt)"},{"line_number":432,"context_line":"        if not cell_client.can_send_version(\u00274.11\u0027):"},{"line_number":433,"context_line":"            # NOTE(eliqiao): This is a new feature that is only available"},{"line_number":434,"context_line":"            # once all compute nodes support at least version 4.11."},{"line_number":435,"context_line":"            # This means the new REST API that supports this needs to handle"}],"source_content_type":"text/x-python","patch_set":25,"id":"3aaa91ec_0c257ec1","line":432,"range":{"start_line":432,"start_character":44,"end_line":432,"end_character":50},"in_reply_to":"3aaa91ec_50ad9ee7","updated":"2016-06-28 13:10:32.000000000","message":"Done","commit_id":"d561afe994ab6fc9bc7ba82f6e2a0ad93da6c5f3"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"345dbd958ef2c0aceae4884d0b0ad7d046e231aa","unresolved":false,"context_lines":[{"line_number":433,"context_line":"            if instance.vm_state \u003d\u003d vm_states.RESCUED:"},{"line_number":434,"context_line":"                raise exception.RescuedInstanceLiveMigrationNotSupported("},{"line_number":435,"context_line":"                    node\u003d\u0027source\u0027, name\u003ddestination)"},{"line_number":436,"context_line":"            version \u003d \u00274.11\u0027"},{"line_number":437,"context_line":"            if not cell_client.can_send_version(version):"},{"line_number":438,"context_line":"                # NOTE(eliqiao): This is a new feature that is only available"},{"line_number":439,"context_line":"                # once all compute nodes support at least version 4.11."}],"source_content_type":"text/x-python","patch_set":28,"id":"3aaa91ec_dcccabbd","line":436,"updated":"2016-06-28 16:35:48.000000000","message":"why the extra intent here? I don\u0027t think we really need it?","commit_id":"adf51e2672dcd25a091355f2cc91384b470925f3"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"9ae32a354ba90e8dddbdb89af5a7b6b8c47df863","unresolved":false,"context_lines":[{"line_number":433,"context_line":"            if instance.vm_state \u003d\u003d vm_states.RESCUED:"},{"line_number":434,"context_line":"                raise exception.RescuedInstanceLiveMigrationNotSupported("},{"line_number":435,"context_line":"                    node\u003d\u0027source\u0027, name\u003ddestination)"},{"line_number":436,"context_line":"            version \u003d \u00274.11\u0027"},{"line_number":437,"context_line":"            if not cell_client.can_send_version(version):"},{"line_number":438,"context_line":"                # NOTE(eliqiao): This is a new feature that is only available"},{"line_number":439,"context_line":"                # once all compute nodes support at least version 4.11."}],"source_content_type":"text/x-python","patch_set":28,"id":"3aaa91ec_a13513dc","line":436,"in_reply_to":"3aaa91ec_dcccabbd","updated":"2016-06-29 12:45:51.000000000","message":"Done","commit_id":"adf51e2672dcd25a091355f2cc91384b470925f3"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"345dbd958ef2c0aceae4884d0b0ad7d046e231aa","unresolved":false,"context_lines":[{"line_number":434,"context_line":"                raise exception.RescuedInstanceLiveMigrationNotSupported("},{"line_number":435,"context_line":"                    node\u003d\u0027source\u0027, name\u003ddestination)"},{"line_number":436,"context_line":"            version \u003d \u00274.11\u0027"},{"line_number":437,"context_line":"            if not cell_client.can_send_version(version):"},{"line_number":438,"context_line":"                # NOTE(eliqiao): This is a new feature that is only available"},{"line_number":439,"context_line":"                # once all compute nodes support at least version 4.11."},{"line_number":440,"context_line":"                # This means the new REST API that supports this needs to"}],"source_content_type":"text/x-python","patch_set":28,"id":"3aaa91ec_9c2ea340","line":437,"range":{"start_line":437,"start_character":48,"end_line":437,"end_character":55},"updated":"2016-06-28 16:35:48.000000000","message":"Why not just put \u00274.11\u0027 here, and update the version as needed?","commit_id":"adf51e2672dcd25a091355f2cc91384b470925f3"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"9ae32a354ba90e8dddbdb89af5a7b6b8c47df863","unresolved":false,"context_lines":[{"line_number":434,"context_line":"                raise exception.RescuedInstanceLiveMigrationNotSupported("},{"line_number":435,"context_line":"                    node\u003d\u0027source\u0027, name\u003ddestination)"},{"line_number":436,"context_line":"            version \u003d \u00274.11\u0027"},{"line_number":437,"context_line":"            if not cell_client.can_send_version(version):"},{"line_number":438,"context_line":"                # NOTE(eliqiao): This is a new feature that is only available"},{"line_number":439,"context_line":"                # once all compute nodes support at least version 4.11."},{"line_number":440,"context_line":"                # This means the new REST API that supports this needs to"}],"source_content_type":"text/x-python","patch_set":28,"id":"3aaa91ec_013507d9","line":437,"range":{"start_line":437,"start_character":48,"end_line":437,"end_character":55},"in_reply_to":"3aaa91ec_9c2ea340","updated":"2016-06-29 12:45:51.000000000","message":"Done","commit_id":"adf51e2672dcd25a091355f2cc91384b470925f3"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"345dbd958ef2c0aceae4884d0b0ad7d046e231aa","unresolved":false,"context_lines":[{"line_number":446,"context_line":"                    version \u003d \u00274.0\u0027"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"        if instance.vm_state \u003d\u003d vm_states.RESCUED:"},{"line_number":449,"context_line":"            version \u003d \u00274.13\u0027"},{"line_number":450,"context_line":"        try:"},{"line_number":451,"context_line":"            cctxt \u003d cell_client.prepare(server\u003ddestination, version\u003dversion)"},{"line_number":452,"context_line":"            result \u003d cctxt.call(ctxt, \u0027check_can_live_migrate_destination\u0027,"}],"source_content_type":"text/x-python","patch_set":28,"id":"3aaa91ec_fcdc0748","line":449,"updated":"2016-06-28 16:35:48.000000000","message":"This doesn\u0027t feel correct.\n\nWe should be sending 4.13 all the time, unless we can\u0027t sent it for some reason.","commit_id":"adf51e2672dcd25a091355f2cc91384b470925f3"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"9ae32a354ba90e8dddbdb89af5a7b6b8c47df863","unresolved":false,"context_lines":[{"line_number":446,"context_line":"                    version \u003d \u00274.0\u0027"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"        if instance.vm_state \u003d\u003d vm_states.RESCUED:"},{"line_number":449,"context_line":"            version \u003d \u00274.13\u0027"},{"line_number":450,"context_line":"        try:"},{"line_number":451,"context_line":"            cctxt \u003d cell_client.prepare(server\u003ddestination, version\u003dversion)"},{"line_number":452,"context_line":"            result \u003d cctxt.call(ctxt, \u0027check_can_live_migrate_destination\u0027,"}],"source_content_type":"text/x-python","patch_set":28,"id":"3aaa91ec_61296b37","line":449,"in_reply_to":"3aaa91ec_fcdc0748","updated":"2016-06-29 12:45:51.000000000","message":"The previous 4.11 test may have set the version back to 4.0, if so we need to reset the version to 4.13 if the instance is rescued otherwise it will potentially try to migrate a rescued instance to a node that has not yet been upgraded.","commit_id":"adf51e2672dcd25a091355f2cc91384b470925f3"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"345dbd958ef2c0aceae4884d0b0ad7d046e231aa","unresolved":false,"context_lines":[{"line_number":453,"context_line":"                                instance\u003dinstance,"},{"line_number":454,"context_line":"                                block_migration\u003dblock_migration,"},{"line_number":455,"context_line":"                                disk_over_commit\u003ddisk_over_commit)"},{"line_number":456,"context_line":"        except messaging.RemoteError as e:"},{"line_number":457,"context_line":"            t \u003d \"UnsupportedVersion Endpoint does not support RPC version %s\""},{"line_number":458,"context_line":"            if e.message.find(t % version) \u003c 0:"},{"line_number":459,"context_line":"                raise e"}],"source_content_type":"text/x-python","patch_set":28,"id":"3aaa91ec_dc9b0b65","line":456,"updated":"2016-06-28 16:35:48.000000000","message":"This isn\u0027t the pattern we usually use here, remote errors like this should just bubble up.\n\nAlso, given the above checks, isn\u0027t this unreachable.","commit_id":"adf51e2672dcd25a091355f2cc91384b470925f3"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"9ae32a354ba90e8dddbdb89af5a7b6b8c47df863","unresolved":false,"context_lines":[{"line_number":453,"context_line":"                                instance\u003dinstance,"},{"line_number":454,"context_line":"                                block_migration\u003dblock_migration,"},{"line_number":455,"context_line":"                                disk_over_commit\u003ddisk_over_commit)"},{"line_number":456,"context_line":"        except messaging.RemoteError as e:"},{"line_number":457,"context_line":"            t \u003d \"UnsupportedVersion Endpoint does not support RPC version %s\""},{"line_number":458,"context_line":"            if e.message.find(t % version) \u003c 0:"},{"line_number":459,"context_line":"                raise e"}],"source_content_type":"text/x-python","patch_set":28,"id":"3aaa91ec_c102df3d","line":456,"in_reply_to":"3aaa91ec_dc9b0b65","updated":"2016-06-29 12:45:51.000000000","message":"My testing indicates it is reachable, the above checks verify the conductor can support version 4.13, this verifies that the destination node can too.\n\nMy thinking was that if an cloud had been upgraded but one or more compute node had not been upgraded yet, possibly due to a rolling upgrade process not yet completed or could also occur if one or more node has issues which prevent upgrade from occurring, i.e. a chef/ansible issue on that node.  This check verifies that the destination node is at 4.13.\n\nIf I don\u0027t catch the remote exception it places the instance in an error state which is not a good user experience.\n\nHowever if I implement the change you recommend in https://review.openstack.org/#/c/328280 to check for any compute node with lower version then this is not required.  My concern is that if we do it at that stage then a single compute node failing to upgrade block live migration of rescued instances completely. However a broken node should be identified by monitoring processes and addressed reasonably soon so I\u0027ll remove this and go with your suggested approach.","commit_id":"adf51e2672dcd25a091355f2cc91384b470925f3"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"a3b4a45b45a821169e8d9bc38d3a298d1564f9fb","unresolved":false,"context_lines":[{"line_number":453,"context_line":"                                instance\u003dinstance,"},{"line_number":454,"context_line":"                                block_migration\u003dblock_migration,"},{"line_number":455,"context_line":"                                disk_over_commit\u003ddisk_over_commit)"},{"line_number":456,"context_line":"        except messaging.RemoteError as e:"},{"line_number":457,"context_line":"            t \u003d \"UnsupportedVersion Endpoint does not support RPC version %s\""},{"line_number":458,"context_line":"            if e.message.find(t % version) \u003c 0:"},{"line_number":459,"context_line":"                raise e"}],"source_content_type":"text/x-python","patch_set":28,"id":"3aaa91ec_3c4b0189","line":456,"in_reply_to":"3aaa91ec_dc9b0b65","updated":"2016-06-29 12:22:31.000000000","message":"This is reachable in case you don\u0027t have upgrade level set, but exception raised in line @460 is not accurate. Even if you have an instance that is active exception message will say that it isn\u0027t possible to live migrate VMs in rescued state","commit_id":"adf51e2672dcd25a091355f2cc91384b470925f3"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"20dc7e157d7d191a5ef12249ddc9ef6212a4321e","unresolved":false,"context_lines":[{"line_number":446,"context_line":"            else:"},{"line_number":447,"context_line":"                version \u003d \u00274.0\u0027"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"        if instance.vm_state \u003d\u003d vm_states.RESCUED:"},{"line_number":450,"context_line":"            version \u003d \u00274.14\u0027"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"        cctxt \u003d cell_client.prepare(server\u003ddestination, version\u003dversion)"},{"line_number":453,"context_line":"        result \u003d cctxt.call(ctxt, \u0027check_can_live_migrate_destination\u0027,"}],"source_content_type":"text/x-python","patch_set":30,"id":"3aaa91ec_17ed33b7","line":450,"range":{"start_line":449,"start_character":0,"end_line":450,"end_character":28},"updated":"2016-06-29 15:19:45.000000000","message":"every time I look at this code it seems wrong to me :(\ncase 1) it is not a RESCUED instance line #450 is never executed\ncase 2) it is a RESCUED instance and the client supports version 4.14 then from 433 we come here and the reset of the version is not necessary.\ncase 3) it is a RESCUED instance and the client does not support the version then we raise an exception at line #436 and we have done so again reset here is not necessary\ncase 4) it is a RESCUED instance and the client supports 4.14 then check at line #438 is always false as we support 4.14 means we support 4.11 as well even in this case the reset is not necessary.\n\nam I missing some cases?","commit_id":"1d557a79c052eb21273b0c2c0f619610993df12f"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"fbbfcf97c1bb9a1b9f285d0334cab32e0dad5395","unresolved":false,"context_lines":[{"line_number":446,"context_line":"            else:"},{"line_number":447,"context_line":"                version \u003d \u00274.0\u0027"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"        if instance.vm_state \u003d\u003d vm_states.RESCUED:"},{"line_number":450,"context_line":"            version \u003d \u00274.14\u0027"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"        cctxt \u003d cell_client.prepare(server\u003ddestination, version\u003dversion)"},{"line_number":453,"context_line":"        result \u003d cctxt.call(ctxt, \u0027check_can_live_migrate_destination\u0027,"}],"source_content_type":"text/x-python","patch_set":30,"id":"3aaa91ec_711e4071","line":450,"range":{"start_line":449,"start_character":0,"end_line":450,"end_character":28},"in_reply_to":"3aaa91ec_17ed33b7","updated":"2016-06-29 17:14:36.000000000","message":"Done","commit_id":"1d557a79c052eb21273b0c2c0f619610993df12f"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"20dc7e157d7d191a5ef12249ddc9ef6212a4321e","unresolved":false,"context_lines":[{"line_number":454,"context_line":"                            instance\u003dinstance,"},{"line_number":455,"context_line":"                            block_migration\u003dblock_migration,"},{"line_number":456,"context_line":"                            disk_over_commit\u003ddisk_over_commit)"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"        if isinstance(result, migrate_data_obj.LiveMigrateData):"},{"line_number":459,"context_line":"            return result"},{"line_number":460,"context_line":"        elif result:"}],"source_content_type":"text/x-python","patch_set":30,"id":"3aaa91ec_d73d6b2c","line":457,"updated":"2016-06-29 15:19:45.000000000","message":"nit: unecessary change","commit_id":"1d557a79c052eb21273b0c2c0f619610993df12f"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"fbbfcf97c1bb9a1b9f285d0334cab32e0dad5395","unresolved":false,"context_lines":[{"line_number":454,"context_line":"                            instance\u003dinstance,"},{"line_number":455,"context_line":"                            block_migration\u003dblock_migration,"},{"line_number":456,"context_line":"                            disk_over_commit\u003ddisk_over_commit)"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"        if isinstance(result, migrate_data_obj.LiveMigrateData):"},{"line_number":459,"context_line":"            return result"},{"line_number":460,"context_line":"        elif result:"}],"source_content_type":"text/x-python","patch_set":30,"id":"3aaa91ec_d10f3437","line":457,"in_reply_to":"3aaa91ec_d73d6b2c","updated":"2016-06-29 17:14:36.000000000","message":"Done","commit_id":"1d557a79c052eb21273b0c2c0f619610993df12f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"208593da833f3ace5bc4a27375e9e359adafac9f","unresolved":false,"context_lines":[{"line_number":434,"context_line":"        version \u003d \u00274.14\u0027"},{"line_number":435,"context_line":"        client \u003d self.router.by_host(ctxt, destination)"},{"line_number":436,"context_line":"        if not client.can_send_version(version):"},{"line_number":437,"context_line":"            if instance.vm_state \u003d\u003d vm_states.RESCUED:"},{"line_number":438,"context_line":"                raise exception.RescuedInstanceLiveMigrationNotSupported("},{"line_number":439,"context_line":"                    location\u003d\u0027source\u0027, name\u003ddestination)"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"        if not client.can_send_version(\u00274.11\u0027):"},{"line_number":442,"context_line":"            # NOTE(eliqiao): This is a new feature that is only available"}],"source_content_type":"text/x-python","patch_set":41,"id":"7a77a97e_beb004f6","line":439,"range":{"start_line":437,"start_character":12,"end_line":439,"end_character":56},"updated":"2016-11-15 20:57:13.000000000","message":"As noted in the spec here:\n\nhttps://review.openstack.org/#/c/347161/4/specs/ocata/approved/live-migrate-rescued-instances.rst@85\n\nAfter microversion 2.34 we\u0027ve already on the RPC cast at this point so this error isn\u0027t going to come back to the REST API and we\u0027ve already return a 202 to the user.","commit_id":"5fbc9f81aa53e96bd6ef553e21ba8a8cdf3238ba"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"00d14dd96e381aaa7bb9afce10f682691761a735","unresolved":false,"context_lines":[{"line_number":443,"context_line":"        version \u003d \u00274.14\u0027"},{"line_number":444,"context_line":"        client \u003d self.router.by_host(ctxt, destination)"},{"line_number":445,"context_line":"        if not client.can_send_version(version):"},{"line_number":446,"context_line":"            if instance.vm_state \u003d\u003d vm_states.RESCUED:"},{"line_number":447,"context_line":"                raise exception.RescuedInstanceLiveMigrationNotSupported("},{"line_number":448,"context_line":"                    location\u003d\u0027source\u0027, name\u003ddestination)"},{"line_number":449,"context_line":""},{"line_number":450,"context_line":"        if not client.can_send_version(\u00274.11\u0027):"},{"line_number":451,"context_line":"            # NOTE(eliqiao): This is a new feature that is only available"}],"source_content_type":"text/x-python","patch_set":45,"id":"ffe62b97_5a2e4e92","line":448,"range":{"start_line":446,"start_character":0,"end_line":448,"end_character":56},"updated":"2017-03-28 17:24:57.000000000","message":"It doesn\u0027t really feel like this kind of logic should live here.\n\nI am expecting to see this kind of thing in the compute.api.py file.","commit_id":"5777b031057c01ff2b1ab8f32367519455acfdc6"}],"nova/conductor/manager.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"345dbd958ef2c0aceae4884d0b0ad7d046e231aa","unresolved":false,"context_lines":[{"line_number":346,"context_line":"                exception.MigrationPreCheckError,"},{"line_number":347,"context_line":"                exception.MigrationPreCheckClientException,"},{"line_number":348,"context_line":"                exception.LiveMigrationWithOldNovaNotSupported,"},{"line_number":349,"context_line":"                exception.RescuedInstanceLiveMigrationNotSupported,"},{"line_number":350,"context_line":"                exception.MigrationSchedulerRPCError) as ex:"},{"line_number":351,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":352,"context_line":"                # TODO(johngarbutt) - eventually need instance actions here"}],"source_content_type":"text/x-python","patch_set":28,"id":"3aaa91ec_bcbb9f74","line":349,"updated":"2016-06-28 16:35:48.000000000","message":"Honestly, I was expecting to see a check in the API node to ensure the min_service version is high enough to allow the live-migrate of a rescue.\n\nNot sure we need all these extra checks.","commit_id":"adf51e2672dcd25a091355f2cc91384b470925f3"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"9ae32a354ba90e8dddbdb89af5a7b6b8c47df863","unresolved":false,"context_lines":[{"line_number":346,"context_line":"                exception.MigrationPreCheckError,"},{"line_number":347,"context_line":"                exception.MigrationPreCheckClientException,"},{"line_number":348,"context_line":"                exception.LiveMigrationWithOldNovaNotSupported,"},{"line_number":349,"context_line":"                exception.RescuedInstanceLiveMigrationNotSupported,"},{"line_number":350,"context_line":"                exception.MigrationSchedulerRPCError) as ex:"},{"line_number":351,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":352,"context_line":"                # TODO(johngarbutt) - eventually need instance actions here"}],"source_content_type":"text/x-python","patch_set":28,"id":"3aaa91ec_575a2d2b","line":349,"in_reply_to":"3aaa91ec_bcbb9f74","updated":"2016-06-29 12:45:51.000000000","message":"nova.compute.rpcapi.check_can_live_migrate_destination checks the compute service version and returns this exception if it finds the required version can\u0027t be supported so need to include this exception in the list.\n\nAs you say if I add a global check of service versions in the api as per you comment on https://review.openstack.org/#/c/328280/8/nova/compute/api.py then I can verify all compute nodes are at the right version there in which case I shouldn\u0027t need to check the version in the compute rpcapi method.  However it seems that people generally check the version there so I followed that convention.\n\nRe your suggested check in https://review.openstack.org/#/c/328280/8/nova/compute/api.py, I\u0027ll follow your guidance and add that but I wonder if that will check all conductors and compute nodes in a multiple cell environment?","commit_id":"adf51e2672dcd25a091355f2cc91384b470925f3"}],"nova/exception.py":[{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"78949a6d31c8f41032181a1c4875d7f7d9c6b0ed","unresolved":false,"context_lines":[{"line_number":2149,"context_line":"                \"config-reference.\")"},{"line_number":2150,"context_line":""},{"line_number":2151,"context_line":""},{"line_number":2152,"context_line":"class RescuedInstanceLiveMigrationNotSupported(NovaException):"},{"line_number":2153,"context_line":"    msg_fmt \u003d _(\"The driver does not support live migration of instances in \""},{"line_number":2154,"context_line":"                \"a rescued state\")"},{"line_number":2155,"context_line":"    code \u003d 409"}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_e55f00e3","line":2155,"range":{"start_line":2152,"start_character":0,"end_line":2155,"end_character":14},"updated":"2016-05-20 14:17:30.000000000","message":"we don\u0027t need a new exception we can use the existing InstanceInvalidState exception","commit_id":"68b9426aa0b363c9642cfe9521f42475b8f43607"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"082fed2338620cd489d7a61a620f4eda72ace5ba","unresolved":false,"context_lines":[{"line_number":2149,"context_line":"                \"config-reference.\")"},{"line_number":2150,"context_line":""},{"line_number":2151,"context_line":""},{"line_number":2152,"context_line":"class RescuedInstanceLiveMigrationNotSupported(NovaException):"},{"line_number":2153,"context_line":"    msg_fmt \u003d _(\"The driver does not support live migration of instances in \""},{"line_number":2154,"context_line":"                \"a rescued state\")"},{"line_number":2155,"context_line":"    code \u003d 409"}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_3e77c003","line":2155,"range":{"start_line":2152,"start_character":0,"end_line":2155,"end_character":14},"in_reply_to":"bab6814e_e55f00e3","updated":"2016-05-24 17:39:25.000000000","message":"I differ on this, I\u0027ve enhanced this exception in the next patch set to return which node (source or destination) does not support this feature","commit_id":"68b9426aa0b363c9642cfe9521f42475b8f43607"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"a1b28018efbd30771e801af8b11628c09a0f8079","unresolved":false,"context_lines":[{"line_number":2097,"context_line":"                \"config-reference.\")"},{"line_number":2098,"context_line":""},{"line_number":2099,"context_line":""},{"line_number":2100,"context_line":"class RescuedInstanceLiveMigrationNotSupported(NovaException):"},{"line_number":2101,"context_line":"    msg_fmt \u003d _(\"%(location)s compute node %(name)s, the driver does not \""},{"line_number":2102,"context_line":"                \"support live migration of instances in a rescued state\")"}],"source_content_type":"text/x-python","patch_set":36,"id":"3aaa91ec_fd9813c2","line":2102,"range":{"start_line":2100,"start_character":0,"end_line":2102,"end_character":73},"updated":"2016-06-30 14:18:48.000000000","message":"minor: It would be better go get this class defined where we have the specific exception for live migration.","commit_id":"c3a0b3d1f682856e55a6f41b4e002bf2dd7f50ea"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"42de5a3df66a5be3e7f6373321f8cd027220602b","unresolved":false,"context_lines":[{"line_number":2097,"context_line":"                \"config-reference.\")"},{"line_number":2098,"context_line":""},{"line_number":2099,"context_line":""},{"line_number":2100,"context_line":"class RescuedInstanceLiveMigrationNotSupported(NovaException):"},{"line_number":2101,"context_line":"    msg_fmt \u003d _(\"%(location)s compute node %(name)s, the driver does not \""},{"line_number":2102,"context_line":"                \"support live migration of instances in a rescued state\")"}],"source_content_type":"text/x-python","patch_set":36,"id":"3aaa91ec_d4424967","line":2102,"range":{"start_line":2100,"start_character":0,"end_line":2102,"end_character":73},"in_reply_to":"3aaa91ec_fd9813c2","updated":"2016-06-30 16:15:32.000000000","message":"Done","commit_id":"c3a0b3d1f682856e55a6f41b4e002bf2dd7f50ea"}],"nova/objects/image_meta.py":[{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"439dd2ed8064c536b1a43141901b3cb7f44bc558","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from nova.objects import fields"},{"line_number":23,"context_line":"from nova import utils"},{"line_number":24,"context_line":"from nova.virt import hardware"},{"line_number":25,"context_line":"from oslo_versionedobjects import base as ovoo_base"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"NULLABLE_STRING_FIELDS \u003d [\u0027name\u0027, \u0027checksum\u0027, \u0027owner\u0027,"},{"line_number":28,"context_line":"                          \u0027container_format\u0027, \u0027disk_format\u0027]"}],"source_content_type":"text/x-python","patch_set":25,"id":"3aaa91ec_b354ccc9","line":25,"range":{"start_line":25,"start_character":0,"end_line":25,"end_character":51},"updated":"2016-06-27 07:48:28.000000000","message":"This import is not used anywhere","commit_id":"d561afe994ab6fc9bc7ba82f6e2a0ad93da6c5f3"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"63612e72a6a141e66f6664dab1d583007478386f","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from nova.objects import fields"},{"line_number":23,"context_line":"from nova import utils"},{"line_number":24,"context_line":"from nova.virt import hardware"},{"line_number":25,"context_line":"from oslo_versionedobjects import base as ovoo_base"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"NULLABLE_STRING_FIELDS \u003d [\u0027name\u0027, \u0027checksum\u0027, \u0027owner\u0027,"},{"line_number":28,"context_line":"                          \u0027container_format\u0027, \u0027disk_format\u0027]"}],"source_content_type":"text/x-python","patch_set":25,"id":"3aaa91ec_9da3564f","line":25,"range":{"start_line":25,"start_character":0,"end_line":25,"end_character":51},"in_reply_to":"3aaa91ec_b354ccc9","updated":"2016-06-28 13:10:32.000000000","message":"Done","commit_id":"d561afe994ab6fc9bc7ba82f6e2a0ad93da6c5f3"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"20dc7e157d7d191a5ef12249ddc9ef6212a4321e","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from nova import utils"},{"line_number":24,"context_line":"from nova.virt import hardware"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"NULLABLE_STRING_FIELDS \u003d [\u0027name\u0027, \u0027checksum\u0027, \u0027owner\u0027,"},{"line_number":28,"context_line":"                          \u0027container_format\u0027, \u0027disk_format\u0027]"},{"line_number":29,"context_line":"NULLABLE_INTEGER_FIELDS \u003d [\u0027size\u0027, \u0027virtual_size\u0027]"}],"source_content_type":"text/x-python","patch_set":30,"id":"3aaa91ec_37914ff2","side":"PARENT","line":26,"updated":"2016-06-29 15:19:45.000000000","message":"not a required change","commit_id":"5ff36af47f2104b851155e592f6f8115eafd90f9"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"fbbfcf97c1bb9a1b9f285d0334cab32e0dad5395","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from nova import utils"},{"line_number":24,"context_line":"from nova.virt import hardware"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"NULLABLE_STRING_FIELDS \u003d [\u0027name\u0027, \u0027checksum\u0027, \u0027owner\u0027,"},{"line_number":28,"context_line":"                          \u0027container_format\u0027, \u0027disk_format\u0027]"},{"line_number":29,"context_line":"NULLABLE_INTEGER_FIELDS \u003d [\u0027size\u0027, \u0027virtual_size\u0027]"}],"source_content_type":"text/x-python","patch_set":30,"id":"3aaa91ec_74058e0f","side":"PARENT","line":26,"in_reply_to":"3aaa91ec_37914ff2","updated":"2016-06-29 17:14:36.000000000","message":"Done","commit_id":"5ff36af47f2104b851155e592f6f8115eafd90f9"}],"nova/tests/unit/api/openstack/compute/test_migrate_server.py":[{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"54b189f93f013840a6edb1f63d6593673913764d","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        self.mox.StubOutWithMock(self.compute_api, \u0027live_migrate\u0027)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        instance \u003d self._stub_instance_get(uuid\u003duuid, state\u003dstate)"},{"line_number":209,"context_line":"        if call_api:"},{"line_number":210,"context_line":"            self.compute_api.live_migrate(self.context, instance, False,"},{"line_number":211,"context_line":"                                          self.disk_over_commit,"},{"line_number":212,"context_line":"                                          \u0027hostname\u0027, self.force"}],"source_content_type":"text/x-python","patch_set":16,"id":"7aa08908_ca757d64","line":209,"range":{"start_line":209,"start_character":0,"end_line":209,"end_character":20},"updated":"2016-06-08 15:23:28.000000000","message":"you lost me here, why do we need this?","commit_id":"e086ed1cb8ef05f9b58b27b97e468af3818124fc"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"7ea7113c50c6b0e99e1e42dade73e5d05cb4e645","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        self.mox.StubOutWithMock(self.compute_api, \u0027live_migrate\u0027)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        instance \u003d self._stub_instance_get(uuid\u003duuid, state\u003dstate)"},{"line_number":209,"context_line":"        if call_api:"},{"line_number":210,"context_line":"            self.compute_api.live_migrate(self.context, instance, False,"},{"line_number":211,"context_line":"                                          self.disk_over_commit,"},{"line_number":212,"context_line":"                                          \u0027hostname\u0027, self.force"}],"source_content_type":"text/x-python","patch_set":16,"id":"7aa08908_bb20d3f8","line":209,"range":{"start_line":209,"start_character":0,"end_line":209,"end_character":20},"in_reply_to":"7aa08908_ca757d64","updated":"2016-06-10 11:28:09.000000000","message":"We are testing for failure due to not the right api version, i.e. if the api version is too low we don\u0027t support live migration of rescued instances.  The way it is implemented now there is an if api version check in the migrate_server method and if the version is not the required level then it will not call compute_api.live_migrate, instead it raises an exception.  Previously it called the compute_api.live_migrate method and the state check wrapper would raise an exception.  So now I need to tell this method that we don\u0027t expect a call to compute_api.live_migrate.","commit_id":"e086ed1cb8ef05f9b58b27b97e468af3818124fc"}],"nova/tests/unit/compute/test_compute.py":[{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"a1b28018efbd30771e801af8b11628c09a0f8079","unresolved":false,"context_lines":[{"line_number":2064,"context_line":"        self.compute.start_instance(self.context, instance\u003dinst_obj)"},{"line_number":2065,"context_line":"        self.compute.terminate_instance(self.context, instance, [], [])"},{"line_number":2066,"context_line":""},{"line_number":2067,"context_line":"    fake_image \u003d {\u0027id\u0027: \u0027fake-id\u0027,"},{"line_number":2068,"context_line":"                \u0027properties\u0027: {\u0027kernel_id\u0027: \u0027kernel\u0027,"},{"line_number":2069,"context_line":"                               \u0027ramdisk_id\u0027: \u0027ramdisk\u0027},"},{"line_number":2070,"context_line":"                \u0027size\u0027: 512}"},{"line_number":2071,"context_line":""},{"line_number":2072,"context_line":"    @mock.patch(\u0027nova.image.api.API.get\u0027, return_value\u003dfake_image)"},{"line_number":2073,"context_line":"    def test_rescue(self, _image_mock):"}],"source_content_type":"text/x-python","patch_set":36,"id":"3aaa91ec_5d7e87e4","line":2070,"range":{"start_line":2067,"start_character":0,"end_line":2070,"end_character":28},"updated":"2016-06-30 14:18:48.000000000","message":"we have a fake_image, please have a look at nova/test/unit/image/fake.py \ncan you check if one of the images there has the properties you are looking for and otherwise adding a new one?","commit_id":"c3a0b3d1f682856e55a6f41b4e002bf2dd7f50ea"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"42de5a3df66a5be3e7f6373321f8cd027220602b","unresolved":false,"context_lines":[{"line_number":2064,"context_line":"        self.compute.start_instance(self.context, instance\u003dinst_obj)"},{"line_number":2065,"context_line":"        self.compute.terminate_instance(self.context, instance, [], [])"},{"line_number":2066,"context_line":""},{"line_number":2067,"context_line":"    fake_image \u003d {\u0027id\u0027: \u0027fake-id\u0027,"},{"line_number":2068,"context_line":"                \u0027properties\u0027: {\u0027kernel_id\u0027: \u0027kernel\u0027,"},{"line_number":2069,"context_line":"                               \u0027ramdisk_id\u0027: \u0027ramdisk\u0027},"},{"line_number":2070,"context_line":"                \u0027size\u0027: 512}"},{"line_number":2071,"context_line":""},{"line_number":2072,"context_line":"    @mock.patch(\u0027nova.image.api.API.get\u0027, return_value\u003dfake_image)"},{"line_number":2073,"context_line":"    def test_rescue(self, _image_mock):"}],"source_content_type":"text/x-python","patch_set":36,"id":"3aaa91ec_0fd95ef3","line":2070,"range":{"start_line":2067,"start_character":0,"end_line":2070,"end_character":28},"in_reply_to":"3aaa91ec_5d7e87e4","updated":"2016-06-30 16:15:32.000000000","message":"I\u0027m not seeing how the images in the fake.py are being used in the things that we are testing here","commit_id":"c3a0b3d1f682856e55a6f41b4e002bf2dd7f50ea"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"3e0a07a830c14a2a10000d73cb51a5a948a544c3","unresolved":false,"context_lines":[{"line_number":2082,"context_line":""},{"line_number":2083,"context_line":"        self.stubs.Set(nova.virt.fake.FakeDriver, \u0027rescue\u0027, fake_rescue)"},{"line_number":2084,"context_line":""},{"line_number":2085,"context_line":"        def fake_unrescue(self, instance_ref, network_info,"},{"line_number":2086,"context_line":"                          context\u003dNone, block_device_info\u003dNone):"},{"line_number":2087,"context_line":"            called[\u0027unrescued\u0027] \u003d True"},{"line_number":2088,"context_line":""},{"line_number":2089,"context_line":"        self.stubs.Set(nova.virt.fake.FakeDriver, \u0027unrescue\u0027,"}],"source_content_type":"text/x-python","patch_set":36,"id":"3aaa91ec_4ec7ef63","line":2086,"range":{"start_line":2085,"start_character":26,"end_line":2086,"end_character":62},"updated":"2016-06-30 14:37:16.000000000","message":"Nit: incorrect order of arguments","commit_id":"c3a0b3d1f682856e55a6f41b4e002bf2dd7f50ea"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"42de5a3df66a5be3e7f6373321f8cd027220602b","unresolved":false,"context_lines":[{"line_number":2082,"context_line":""},{"line_number":2083,"context_line":"        self.stubs.Set(nova.virt.fake.FakeDriver, \u0027rescue\u0027, fake_rescue)"},{"line_number":2084,"context_line":""},{"line_number":2085,"context_line":"        def fake_unrescue(self, instance_ref, network_info,"},{"line_number":2086,"context_line":"                          context\u003dNone, block_device_info\u003dNone):"},{"line_number":2087,"context_line":"            called[\u0027unrescued\u0027] \u003d True"},{"line_number":2088,"context_line":""},{"line_number":2089,"context_line":"        self.stubs.Set(nova.virt.fake.FakeDriver, \u0027unrescue\u0027,"}],"source_content_type":"text/x-python","patch_set":36,"id":"3aaa91ec_8fa0aef5","line":2086,"range":{"start_line":2085,"start_character":26,"end_line":2086,"end_character":62},"in_reply_to":"3aaa91ec_4ec7ef63","updated":"2016-06-30 16:15:32.000000000","message":"Done","commit_id":"c3a0b3d1f682856e55a6f41b4e002bf2dd7f50ea"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"3e0a07a830c14a2a10000d73cb51a5a948a544c3","unresolved":false,"context_lines":[{"line_number":2149,"context_line":""},{"line_number":2150,"context_line":"    def test_unrescue_notifications(self):"},{"line_number":2151,"context_line":"        # Ensure notifications on instance rescue."},{"line_number":2152,"context_line":"        def fake_unrescue(self, instance_ref, network_info,"},{"line_number":2153,"context_line":"                          context\u003dNone, block_device_info\u003dNone):"},{"line_number":2154,"context_line":"            pass"},{"line_number":2155,"context_line":"        self.stubs.Set(nova.virt.fake.FakeDriver, \u0027unrescue\u0027,"},{"line_number":2156,"context_line":"                       fake_unrescue)"}],"source_content_type":"text/x-python","patch_set":36,"id":"3aaa91ec_aeb133e2","line":2153,"range":{"start_line":2152,"start_character":26,"end_line":2153,"end_character":62},"updated":"2016-06-30 14:37:16.000000000","message":"ditto","commit_id":"c3a0b3d1f682856e55a6f41b4e002bf2dd7f50ea"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"42de5a3df66a5be3e7f6373321f8cd027220602b","unresolved":false,"context_lines":[{"line_number":2149,"context_line":""},{"line_number":2150,"context_line":"    def test_unrescue_notifications(self):"},{"line_number":2151,"context_line":"        # Ensure notifications on instance rescue."},{"line_number":2152,"context_line":"        def fake_unrescue(self, instance_ref, network_info,"},{"line_number":2153,"context_line":"                          context\u003dNone, block_device_info\u003dNone):"},{"line_number":2154,"context_line":"            pass"},{"line_number":2155,"context_line":"        self.stubs.Set(nova.virt.fake.FakeDriver, \u0027unrescue\u0027,"},{"line_number":2156,"context_line":"                       fake_unrescue)"}],"source_content_type":"text/x-python","patch_set":36,"id":"3aaa91ec_2fb25a4c","line":2153,"range":{"start_line":2152,"start_character":26,"end_line":2153,"end_character":62},"in_reply_to":"3aaa91ec_aeb133e2","updated":"2016-06-30 16:15:32.000000000","message":"Done","commit_id":"c3a0b3d1f682856e55a6f41b4e002bf2dd7f50ea"}],"nova/tests/unit/compute/test_compute_mgr.py":[{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"a1b28018efbd30771e801af8b11628c09a0f8079","unresolved":false,"context_lines":[{"line_number":2455,"context_line":"            loads.assert_called_once_with(conn_info_str)"},{"line_number":2456,"context_line":""},{"line_number":2457,"context_line":"    def _test_rescue(self, clean_shutdown\u003dTrue):"},{"line_number":2458,"context_line":"        fake_image \u003d {\u0027id\u0027: \u0027fake-id\u0027,"},{"line_number":2459,"context_line":"                      \u0027name\u0027: \u0027fake-image-name\u0027,"},{"line_number":2460,"context_line":"                      \u0027properties\u0027: {\u0027kernel_id\u0027: \u0027kernel\u0027,"},{"line_number":2461,"context_line":"                                     \u0027ramdisk_id\u0027: \u0027ramdisk\u0027}}"},{"line_number":2462,"context_line":"        instance \u003d fake_instance.fake_instance_obj("},{"line_number":2463,"context_line":"            self.context, vm_state\u003dvm_states.ACTIVE,"},{"line_number":2464,"context_line":"            image_ref\u003d\u0027fake-id\u0027,"}],"source_content_type":"text/x-python","patch_set":36,"id":"3aaa91ec_28ec1bba","line":2461,"range":{"start_line":2458,"start_character":0,"end_line":2461,"end_character":62},"updated":"2016-06-30 14:18:48.000000000","message":"please see my comment about using the fake image","commit_id":"c3a0b3d1f682856e55a6f41b4e002bf2dd7f50ea"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"42de5a3df66a5be3e7f6373321f8cd027220602b","unresolved":false,"context_lines":[{"line_number":2455,"context_line":"            loads.assert_called_once_with(conn_info_str)"},{"line_number":2456,"context_line":""},{"line_number":2457,"context_line":"    def _test_rescue(self, clean_shutdown\u003dTrue):"},{"line_number":2458,"context_line":"        fake_image \u003d {\u0027id\u0027: \u0027fake-id\u0027,"},{"line_number":2459,"context_line":"                      \u0027name\u0027: \u0027fake-image-name\u0027,"},{"line_number":2460,"context_line":"                      \u0027properties\u0027: {\u0027kernel_id\u0027: \u0027kernel\u0027,"},{"line_number":2461,"context_line":"                                     \u0027ramdisk_id\u0027: \u0027ramdisk\u0027}}"},{"line_number":2462,"context_line":"        instance \u003d fake_instance.fake_instance_obj("},{"line_number":2463,"context_line":"            self.context, vm_state\u003dvm_states.ACTIVE,"},{"line_number":2464,"context_line":"            image_ref\u003d\u0027fake-id\u0027,"}],"source_content_type":"text/x-python","patch_set":36,"id":"3aaa91ec_efe692ae","line":2461,"range":{"start_line":2458,"start_character":0,"end_line":2461,"end_character":62},"in_reply_to":"3aaa91ec_28ec1bba","updated":"2016-06-30 16:15:32.000000000","message":"see my reply","commit_id":"c3a0b3d1f682856e55a6f41b4e002bf2dd7f50ea"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"9338caa698413d2fc72f1a1769f3b547a22c55dc","unresolved":false,"context_lines":[{"line_number":8944,"context_line":"            mock.patch.object(drvr,"},{"line_number":8945,"context_line":"                              \u0027ensure_filtering_rules_for_instance\u0027),"},{"line_number":8946,"context_line":"            mock.patch.object(drvr, \u0027plug_vifs\u0027),"},{"line_number":8947,"context_line":"            mock.patch.object(drvr, \u0027_try_fetch_image\u0027, return_value\u003dNone),"},{"line_number":8948,"context_line":"        ) as ("},{"line_number":8949,"context_line":"            create_image_mock,"},{"line_number":8950,"context_line":"            rules_mock,"}],"source_content_type":"text/x-python","patch_set":23,"id":"3aaa91ec_374e3ac1","line":8947,"updated":"2016-06-24 15:33:51.000000000","message":"any reason you\u0027re doing these with nested rather than using test method decorators? There\u0027s some preference for the latter I think","commit_id":"d8565fc050db9c22c54dcb40b7c0eda8862bd537"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"a71fe43328b38f7ddf4dd286e99fdec2f4847905","unresolved":false,"context_lines":[{"line_number":8944,"context_line":"            mock.patch.object(drvr,"},{"line_number":8945,"context_line":"                              \u0027ensure_filtering_rules_for_instance\u0027),"},{"line_number":8946,"context_line":"            mock.patch.object(drvr, \u0027plug_vifs\u0027),"},{"line_number":8947,"context_line":"            mock.patch.object(drvr, \u0027_try_fetch_image\u0027, return_value\u003dNone),"},{"line_number":8948,"context_line":"        ) as ("},{"line_number":8949,"context_line":"            create_image_mock,"},{"line_number":8950,"context_line":"            rules_mock,"}],"source_content_type":"text/x-python","patch_set":23,"id":"3aaa91ec_c8aab784","line":8947,"in_reply_to":"3aaa91ec_374e3ac1","updated":"2016-06-24 16:25:47.000000000","message":"just copying what was there already!","commit_id":"d8565fc050db9c22c54dcb40b7c0eda8862bd537"}],"nova/virt/driver.py":[{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"a45b492c23a0f0d4555582875dc573986e2671bf","unresolved":false,"context_lines":[{"line_number":716,"context_line":"        raise NotImplementedError()"},{"line_number":717,"context_line":""},{"line_number":718,"context_line":"    def unrescue(self, instance, network_info,"},{"line_number":719,"context_line":"                 context\u003dNone, block_device_info\u003dNone):"},{"line_number":720,"context_line":"        \"\"\"Unrescue the specified instance."},{"line_number":721,"context_line":""},{"line_number":722,"context_line":"        :param instance: nova.objects.instance.Instance"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_606f36fc","line":719,"range":{"start_line":719,"start_character":17,"end_line":719,"end_character":53},"updated":"2016-04-21 15:14:52.000000000","message":"add param description","commit_id":"2dcd8a83dff48cf6dea0452eff5fcd68df1072c7"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"439dd2ed8064c536b1a43141901b3cb7f44bc558","unresolved":false,"context_lines":[{"line_number":718,"context_line":"        raise NotImplementedError()"},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"    def unrescue(self, instance, network_info,"},{"line_number":721,"context_line":"                 context\u003dNone, block_device_info\u003dNone):"},{"line_number":722,"context_line":"        \"\"\"Unrescue the specified instance."},{"line_number":723,"context_line":""},{"line_number":724,"context_line":"        :param nova.objects.instance.Instance instance:"}],"source_content_type":"text/x-python","patch_set":25,"id":"3aaa91ec_f0bc8add","line":721,"range":{"start_line":721,"start_character":17,"end_line":721,"end_character":29},"updated":"2016-06-27 07:48:28.000000000","message":"You can\u0027t execute underlying methods without context so this shouldn\u0027t be optional. E.g. _hard_reboot in libvirt/driver.py will fail without context.","commit_id":"d561afe994ab6fc9bc7ba82f6e2a0ad93da6c5f3"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"63612e72a6a141e66f6664dab1d583007478386f","unresolved":false,"context_lines":[{"line_number":718,"context_line":"        raise NotImplementedError()"},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"    def unrescue(self, instance, network_info,"},{"line_number":721,"context_line":"                 context\u003dNone, block_device_info\u003dNone):"},{"line_number":722,"context_line":"        \"\"\"Unrescue the specified instance."},{"line_number":723,"context_line":""},{"line_number":724,"context_line":"        :param nova.objects.instance.Instance instance:"}],"source_content_type":"text/x-python","patch_set":25,"id":"3aaa91ec_6af97bc8","line":721,"range":{"start_line":721,"start_character":17,"end_line":721,"end_character":29},"in_reply_to":"3aaa91ec_f0bc8add","updated":"2016-06-28 13:10:32.000000000","message":"I added it as a named parameter so that driver implementations that did not use it would not need to set it.\nI can change this if the community opinion is that it should be a required parameter?","commit_id":"d561afe994ab6fc9bc7ba82f6e2a0ad93da6c5f3"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"63612e72a6a141e66f6664dab1d583007478386f","unresolved":false,"context_lines":[{"line_number":718,"context_line":"        raise NotImplementedError()"},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"    def unrescue(self, instance, network_info,"},{"line_number":721,"context_line":"                 context\u003dNone, block_device_info\u003dNone):"},{"line_number":722,"context_line":"        \"\"\"Unrescue the specified instance."},{"line_number":723,"context_line":""},{"line_number":724,"context_line":"        :param nova.objects.instance.Instance instance:"}],"source_content_type":"text/x-python","patch_set":25,"id":"3aaa91ec_4ae2bf02","line":721,"range":{"start_line":721,"start_character":17,"end_line":721,"end_character":29},"in_reply_to":"3aaa91ec_f0bc8add","updated":"2016-06-28 13:10:32.000000000","message":"I did this so as not to change the","commit_id":"d561afe994ab6fc9bc7ba82f6e2a0ad93da6c5f3"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"00d14dd96e381aaa7bb9afce10f682691761a735","unresolved":false,"context_lines":[{"line_number":712,"context_line":"        \"\"\"Unrescue the specified instance."},{"line_number":713,"context_line":""},{"line_number":714,"context_line":"        :param instance: nova.objects.instance.Instance:"},{"line_number":715,"context_line":"            The rescued instance to unrescue."},{"line_number":716,"context_line":"        \"\"\""},{"line_number":717,"context_line":"        # TODO(Vek): Need to pass context in for access to auth_token"},{"line_number":718,"context_line":"        raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":45,"id":"ffe62b97_fc5d1f15","line":715,"updated":"2017-03-28 17:24:57.000000000","message":"Nit: feels like an unrelated change.","commit_id":"5777b031057c01ff2b1ab8f32367519455acfdc6"}],"nova/virt/fake.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"3e4f2f192a7c6c6b17a6d5ac971e9baca1f27903","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        pass"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    def unrescue(self, instance, network_info,"},{"line_number":216,"context_line":"                 context\u003dNone, block_device_info\u003dNone):"},{"line_number":217,"context_line":"        pass"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def poll_rebooting_instances(self, timeout, instances):"}],"source_content_type":"text/x-python","patch_set":28,"id":"3aaa91ec_ea0ef9e3","line":216,"updated":"2016-06-28 16:38:58.000000000","message":"I would much rather we kept the order of (self, context, instance, ...)","commit_id":"adf51e2672dcd25a091355f2cc91384b470925f3"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"9ae32a354ba90e8dddbdb89af5a7b6b8c47df863","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        pass"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    def unrescue(self, instance, network_info,"},{"line_number":216,"context_line":"                 context\u003dNone, block_device_info\u003dNone):"},{"line_number":217,"context_line":"        pass"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def poll_rebooting_instances(self, timeout, instances):"}],"source_content_type":"text/x-python","patch_set":28,"id":"3aaa91ec_f7b9992f","line":216,"in_reply_to":"3aaa91ec_ea0ef9e3","updated":"2016-06-29 12:45:51.000000000","message":"Done","commit_id":"adf51e2672dcd25a091355f2cc91384b470925f3"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"345dbd958ef2c0aceae4884d0b0ad7d046e231aa","unresolved":false,"context_lines":[{"line_number":6447,"context_line":"                self._create_images_and_backing("},{"line_number":6448,"context_line":"                    context, instance, instance_dir, disk_info,"},{"line_number":6449,"context_line":"                    fallback_from_host\u003dinstance.host)"},{"line_number":6450,"context_line":"                if instance.vm_state \u003d\u003d vm_states.RESCUED:"},{"line_number":6451,"context_line":"                    self._fetch_rescue_kernel_ramdisk(context, instance,"},{"line_number":6452,"context_line":"                                        fallback_from_host\u003dinstance.host)"},{"line_number":6453,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"3aaa91ec_dfa13d48","line":6450,"updated":"2016-06-28 16:35:48.000000000","message":"What about the rescue base image, don\u0027t we also need to fetch that? Because you can pass an arbitry base image for rescue.","commit_id":"adf51e2672dcd25a091355f2cc91384b470925f3"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"9ae32a354ba90e8dddbdb89af5a7b6b8c47df863","unresolved":false,"context_lines":[{"line_number":6447,"context_line":"                self._create_images_and_backing("},{"line_number":6448,"context_line":"                    context, instance, instance_dir, disk_info,"},{"line_number":6449,"context_line":"                    fallback_from_host\u003dinstance.host)"},{"line_number":6450,"context_line":"                if instance.vm_state \u003d\u003d vm_states.RESCUED:"},{"line_number":6451,"context_line":"                    self._fetch_rescue_kernel_ramdisk(context, instance,"},{"line_number":6452,"context_line":"                                        fallback_from_host\u003dinstance.host)"},{"line_number":6453,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"3aaa91ec_77f3e90a","line":6450,"in_reply_to":"3aaa91ec_dfa13d48","updated":"2016-06-29 12:45:51.000000000","message":"Done","commit_id":"adf51e2672dcd25a091355f2cc91384b470925f3"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7bbb2c93130a4b6429f6e8158fcf0b14271fea05","unresolved":false,"context_lines":[{"line_number":6459,"context_line":""},{"line_number":6460,"context_line":"                # if image has kernel and ramdisk, just download"},{"line_number":6461,"context_line":"                # following normal way."},{"line_number":6462,"context_line":"                self._fetch_instance_kernel_ramdisk(context, instance)"},{"line_number":6463,"context_line":""},{"line_number":6464,"context_line":"        # Establishing connection to volume server."},{"line_number":6465,"context_line":"        block_device_mapping \u003d driver.block_device_info_get_mapping("}],"source_content_type":"text/x-python","patch_set":28,"id":"3aaa91ec_0ac5453c","line":6462,"updated":"2016-06-28 16:43:07.000000000","message":"What about this case, don\u0027t you also need to worry about rescue things here?","commit_id":"adf51e2672dcd25a091355f2cc91384b470925f3"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"9ae32a354ba90e8dddbdb89af5a7b6b8c47df863","unresolved":false,"context_lines":[{"line_number":6459,"context_line":""},{"line_number":6460,"context_line":"                # if image has kernel and ramdisk, just download"},{"line_number":6461,"context_line":"                # following normal way."},{"line_number":6462,"context_line":"                self._fetch_instance_kernel_ramdisk(context, instance)"},{"line_number":6463,"context_line":""},{"line_number":6464,"context_line":"        # Establishing connection to volume server."},{"line_number":6465,"context_line":"        block_device_mapping \u003d driver.block_device_info_get_mapping("}],"source_content_type":"text/x-python","patch_set":28,"id":"3aaa91ec_976db59b","line":6462,"in_reply_to":"3aaa91ec_0ac5453c","updated":"2016-06-29 12:45:51.000000000","message":"Done","commit_id":"adf51e2672dcd25a091355f2cc91384b470925f3"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"20dc7e157d7d191a5ef12249ddc9ef6212a4321e","unresolved":false,"context_lines":[{"line_number":6333,"context_line":"        \"\"\"Download rescue image kernel and ramdisk for instance in instance"},{"line_number":6334,"context_line":"         directory."},{"line_number":6335,"context_line":"        \"\"\""},{"line_number":6336,"context_line":"        rescue_kernel_id \u003d instance.system_metadata.get(\u0027rescue_kernel_id\u0027,"},{"line_number":6337,"context_line":"                                                    instance.kernel_id)"},{"line_number":6338,"context_line":"        rescue_ramdisk_id \u003d instance.system_metadata.get(\u0027rescue_ramdisk_id\u0027,"},{"line_number":6339,"context_line":"                                                    instance.ramdisk_id)"},{"line_number":6340,"context_line":"        instance_dir \u003d libvirt_utils.get_instance_path(instance)"},{"line_number":6341,"context_line":"        if rescue_kernel_id:"},{"line_number":6342,"context_line":"            kernel_path \u003d os.path.join(instance_dir, \u0027kernel.rescue\u0027)"}],"source_content_type":"text/x-python","patch_set":30,"id":"3aaa91ec_3c32d6a7","line":6339,"range":{"start_line":6336,"start_character":0,"end_line":6339,"end_character":72},"updated":"2016-06-29 15:19:45.000000000","message":"Do we really need a new method? It is a dangerous code duplication.\nIs it not enough to add this logic at the existing _fetch_instance_kernel_ramdisk","commit_id":"1d557a79c052eb21273b0c2c0f619610993df12f"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"fbbfcf97c1bb9a1b9f285d0334cab32e0dad5395","unresolved":false,"context_lines":[{"line_number":6333,"context_line":"        \"\"\"Download rescue image kernel and ramdisk for instance in instance"},{"line_number":6334,"context_line":"         directory."},{"line_number":6335,"context_line":"        \"\"\""},{"line_number":6336,"context_line":"        rescue_kernel_id \u003d instance.system_metadata.get(\u0027rescue_kernel_id\u0027,"},{"line_number":6337,"context_line":"                                                    instance.kernel_id)"},{"line_number":6338,"context_line":"        rescue_ramdisk_id \u003d instance.system_metadata.get(\u0027rescue_ramdisk_id\u0027,"},{"line_number":6339,"context_line":"                                                    instance.ramdisk_id)"},{"line_number":6340,"context_line":"        instance_dir \u003d libvirt_utils.get_instance_path(instance)"},{"line_number":6341,"context_line":"        if rescue_kernel_id:"},{"line_number":6342,"context_line":"            kernel_path \u003d os.path.join(instance_dir, \u0027kernel.rescue\u0027)"}],"source_content_type":"text/x-python","patch_set":30,"id":"3aaa91ec_428ed479","line":6339,"range":{"start_line":6336,"start_character":0,"end_line":6339,"end_character":72},"in_reply_to":"3aaa91ec_3c32d6a7","updated":"2016-06-29 17:14:36.000000000","message":"Done","commit_id":"1d557a79c052eb21273b0c2c0f619610993df12f"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"20dc7e157d7d191a5ef12249ddc9ef6212a4321e","unresolved":false,"context_lines":[{"line_number":6465,"context_line":""},{"line_number":6466,"context_line":"                # if image has kernel and ramdisk, just download"},{"line_number":6467,"context_line":"                # following normal way."},{"line_number":6468,"context_line":"                self._fetch_instance_kernel_ramdisk(context, instance)"},{"line_number":6469,"context_line":"                if instance.vm_state \u003d\u003d vm_states.RESCUED:"},{"line_number":6470,"context_line":"                    self._fetch_rescue_kernel_ramdisk(context, instance,"},{"line_number":6471,"context_line":"                                        fallback_from_host\u003dinstance.host)"},{"line_number":6472,"context_line":""},{"line_number":6473,"context_line":"        # Establishing connection to volume server."},{"line_number":6474,"context_line":"        block_device_mapping \u003d driver.block_device_info_get_mapping("}],"source_content_type":"text/x-python","patch_set":30,"id":"3aaa91ec_3cbc96ba","line":6471,"range":{"start_line":6468,"start_character":0,"end_line":6471,"end_character":73},"updated":"2016-06-29 15:19:45.000000000","message":"if we modify the logic in the _fetch_instance_kernel_ramdisk as suggested in my previous comment, then we do not need to do anything here.","commit_id":"1d557a79c052eb21273b0c2c0f619610993df12f"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"fbbfcf97c1bb9a1b9f285d0334cab32e0dad5395","unresolved":false,"context_lines":[{"line_number":6465,"context_line":""},{"line_number":6466,"context_line":"                # if image has kernel and ramdisk, just download"},{"line_number":6467,"context_line":"                # following normal way."},{"line_number":6468,"context_line":"                self._fetch_instance_kernel_ramdisk(context, instance)"},{"line_number":6469,"context_line":"                if instance.vm_state \u003d\u003d vm_states.RESCUED:"},{"line_number":6470,"context_line":"                    self._fetch_rescue_kernel_ramdisk(context, instance,"},{"line_number":6471,"context_line":"                                        fallback_from_host\u003dinstance.host)"},{"line_number":6472,"context_line":""},{"line_number":6473,"context_line":"        # Establishing connection to volume server."},{"line_number":6474,"context_line":"        block_device_mapping \u003d driver.block_device_info_get_mapping("}],"source_content_type":"text/x-python","patch_set":30,"id":"3aaa91ec_62ef901e","line":6471,"range":{"start_line":6468,"start_character":0,"end_line":6471,"end_character":73},"in_reply_to":"3aaa91ec_3cbc96ba","updated":"2016-06-29 17:14:36.000000000","message":"Done","commit_id":"1d557a79c052eb21273b0c2c0f619610993df12f"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"3e0a07a830c14a2a10000d73cb51a5a948a544c3","unresolved":false,"context_lines":[{"line_number":6490,"context_line":"                # if image has kernel and ramdisk, just download"},{"line_number":6491,"context_line":"                # following normal way."},{"line_number":6492,"context_line":"                self._fetch_instance_kernel_ramdisk(context, instance,"},{"line_number":6493,"context_line":"                                            fallback_from_host\u003dinstance.host)"},{"line_number":6494,"context_line":""},{"line_number":6495,"context_line":"        # Establishing connection to volume server."},{"line_number":6496,"context_line":"        block_device_mapping \u003d driver.block_device_info_get_mapping("}],"source_content_type":"text/x-python","patch_set":36,"id":"3aaa91ec_43806fbf","line":6493,"updated":"2016-06-30 14:37:16.000000000","message":"Nit: indentation","commit_id":"c3a0b3d1f682856e55a6f41b4e002bf2dd7f50ea"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"00d14dd96e381aaa7bb9afce10f682691761a735","unresolved":false,"context_lines":[{"line_number":6541,"context_line":"    def _fetch_instance_kernel_ramdisk(self, context, instance,"},{"line_number":6542,"context_line":"                                       fallback_from_host\u003dNone):"},{"line_number":6543,"context_line":"        \"\"\"Download kernel and ramdisk for instance in instance directory.\"\"\""},{"line_number":6544,"context_line":"        def get_kernel_ramdisk(disk_name, disk_id):"},{"line_number":6545,"context_line":"            disk_path \u003d os.path.join(instance_dir, disk_name)"},{"line_number":6546,"context_line":"            # NOTE(dsanders): only fetch image if it\u0027s not available at"},{"line_number":6547,"context_line":"            # ramdisk_path. This also avoids ImageNotFound exception if"}],"source_content_type":"text/x-python","patch_set":45,"id":"ffe62b97_9fc3a857","line":6544,"range":{"start_line":6544,"start_character":12,"end_line":6544,"end_character":30},"updated":"2017-03-28 17:24:57.000000000","message":"Its really image_id not disk_id.\n\nmaybe _safe_fetch_image(disk_name, image_id) would be a better name here?","commit_id":"5777b031057c01ff2b1ab8f32367519455acfdc6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"00d14dd96e381aaa7bb9afce10f682691761a735","unresolved":false,"context_lines":[{"line_number":6557,"context_line":"                get_kernel_ramdisk(\u0027ramdisk\u0027, instance.ramdisk_id)"},{"line_number":6558,"context_line":""},{"line_number":6559,"context_line":"        if instance.vm_state !\u003d vm_states.RESCUED:"},{"line_number":6560,"context_line":"            return"},{"line_number":6561,"context_line":"        # Download rescue image kernel and ramdisk for instance"},{"line_number":6562,"context_line":"        rescue_kernel_id \u003d instance.system_metadata.get(\u0027rescue_kernel_id\u0027,"},{"line_number":6563,"context_line":"                                                    instance.kernel_id)"}],"source_content_type":"text/x-python","patch_set":45,"id":"ffe62b97_dc8b7b1c","line":6560,"updated":"2017-03-28 17:24:57.000000000","message":"Nit: a new line after this statement would help readability a little. Personally I like to avoid early returns like this, unless at the very top of the function, but thats a personal thing.","commit_id":"5777b031057c01ff2b1ab8f32367519455acfdc6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"00d14dd96e381aaa7bb9afce10f682691761a735","unresolved":false,"context_lines":[{"line_number":6645,"context_line":"                    context, instance, instance_dir, disk_info,"},{"line_number":6646,"context_line":"                    fallback_from_host\u003dinstance.host)"},{"line_number":6647,"context_line":"                if instance.vm_state \u003d\u003d vm_states.RESCUED:"},{"line_number":6648,"context_line":"                    src \u003d \"%s:%s/unrescue.xml\" % (instance.host, instance_dir)"},{"line_number":6649,"context_line":"                    self._remotefs.copy_file(src, instance_dir)"},{"line_number":6650,"context_line":"                if (configdrive.required_by(instance) and"},{"line_number":6651,"context_line":"                        CONF.config_drive_format \u003d\u003d \u0027iso9660\u0027):"}],"source_content_type":"text/x-python","patch_set":45,"id":"ffe62b97_dcdedb0f","line":6648,"updated":"2017-03-28 17:24:57.000000000","message":"It might be worth a comment here, saying this is needed until we can restore the old domain XML from the instance object, or something like that.","commit_id":"5777b031057c01ff2b1ab8f32367519455acfdc6"}],"releasenotes/notes/bp-allow-live-migration-of-rescued-instances-3dee978e3c3a83bd.yaml":[{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"78949a6d31c8f41032181a1c4875d7f7d9c6b0ed","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.27 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":6,"id":"bab6814e_e5d42021","line":3,"updated":"2016-05-20 14:17:30.000000000","message":"minor: please remove that white space","commit_id":"68b9426aa0b363c9642cfe9521f42475b8f43607"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"54b189f93f013840a6edb1f63d6593673913764d","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.28 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":16,"id":"7aa08908_8457ecc8","line":3,"range":{"start_line":3,"start_character":41,"end_line":3,"end_character":46},"updated":"2016-06-08 15:23:28.000000000","message":"it is 2.31 now I know time flies :)","commit_id":"e086ed1cb8ef05f9b58b27b97e468af3818124fc"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"7ea7113c50c6b0e99e1e42dade73e5d05cb4e645","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.28 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":16,"id":"7aa08908_1bb767f6","line":3,"range":{"start_line":3,"start_character":41,"end_line":3,"end_character":46},"in_reply_to":"7aa08908_8457ecc8","updated":"2016-06-10 11:28:09.000000000","message":"Done","commit_id":"e086ed1cb8ef05f9b58b27b97e468af3818124fc"}]}
