)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"9f783924b323c3fef9846527f098be0e90fe60a5","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Cold migrate and resize can now get the Spec object and pass it"},{"line_number":12,"context_line":"down the wire to the conductor so that it could use it for the"},{"line_number":13,"context_line":"move."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Partially-Implements: blueprint check-destination-on-migrations"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3afc51ec_0b045413","line":13,"updated":"2016-03-11 18:47:15.000000000","message":"hmm, maybe we should reference the bug this is fixing:\nhttps://bugs.launchpad.net/nova/+bug/1497100/","commit_id":"4d9cc7cab0db230456b38683d6309412063fee8a"}],"nova/compute/api.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"792f89854bb8277319edd397f0b3653459a7de4c","unresolved":false,"context_lines":[{"line_number":2671,"context_line":"        filter_properties \u003d {\u0027ignore_hosts\u0027: []}"},{"line_number":2672,"context_line":""},{"line_number":2673,"context_line":"        if not CONF.allow_resize_to_same_host:"},{"line_number":2674,"context_line":"            filter_properties[\u0027ignore_hosts\u0027].append(instance.host)"},{"line_number":2675,"context_line":""},{"line_number":2676,"context_line":"        if self.cell_type \u003d\u003d \u0027api\u0027:"},{"line_number":2677,"context_line":"            # Commit reservations early and create migration record."}],"source_content_type":"text/x-python","patch_set":9,"id":"da0c15f0_69ffd101","line":2674,"updated":"2016-03-25 11:49:01.000000000","message":"this needs to be moved below, see","commit_id":"5a53bb9212752fe7df057d468a7ad472065e962b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"792f89854bb8277319edd397f0b3653459a7de4c","unresolved":false,"context_lines":[{"line_number":2696,"context_line":""},{"line_number":2697,"context_line":"        # NOTE(pkoniszewski): In case request_spec was found in database we"},{"line_number":2698,"context_line":"        # need to repopulate ignore_hosts that are part of filter_properties."},{"line_number":2699,"context_line":"        # Without this step we will always allow instances without request_spec"},{"line_number":2700,"context_line":"        # to resize to the same host."},{"line_number":2701,"context_line":"        if request_spec:"},{"line_number":2702,"context_line":"            request_spec.ignore_hosts \u003d filter_properties[\u0027ignore_hosts\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"da0c15f0_49048d14","line":2699,"updated":"2016-03-25 11:49:01.000000000","message":"No, the comment is wrong, it was working with legacy instances (not having a spec object attached) because we were hydrating a new ReqSpec object in https://review.openstack.org/#/c/284974/8/nova/conductor/manager.py@219\n\nThe problem is rather when you have a new-style instance where we don\u0027t amend the existing ignore_hosts field.","commit_id":"5a53bb9212752fe7df057d468a7ad472065e962b"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"37ac9a826617a84770aae6471ecc8916ad721440","unresolved":false,"context_lines":[{"line_number":2696,"context_line":""},{"line_number":2697,"context_line":"        # NOTE(pkoniszewski): In case request_spec was found in database we"},{"line_number":2698,"context_line":"        # need to repopulate ignore_hosts that are part of filter_properties."},{"line_number":2699,"context_line":"        # Without this step we will always allow instances without request_spec"},{"line_number":2700,"context_line":"        # to resize to the same host."},{"line_number":2701,"context_line":"        if request_spec:"},{"line_number":2702,"context_line":"            request_spec.ignore_hosts \u003d filter_properties[\u0027ignore_hosts\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"da0c15f0_8914e5f5","line":2699,"in_reply_to":"da0c15f0_49048d14","updated":"2016-03-25 11:59:11.000000000","message":"Yeah, sure, you are right. This is what I wanted to write, but somehow inverted my logic there.","commit_id":"5a53bb9212752fe7df057d468a7ad472065e962b"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"2a98e9682b19f3c929fc8975cff778b477f4f219","unresolved":false,"context_lines":[{"line_number":2696,"context_line":""},{"line_number":2697,"context_line":"        # NOTE(pkoniszewski): In case request_spec was found in database we"},{"line_number":2698,"context_line":"        # need to repopulate ignore_hosts that are part of filter_properties."},{"line_number":2699,"context_line":"        # Without this step we will always allow instances without request_spec"},{"line_number":2700,"context_line":"        # to resize to the same host."},{"line_number":2701,"context_line":"        if request_spec:"},{"line_number":2702,"context_line":"            request_spec.ignore_hosts \u003d filter_properties[\u0027ignore_hosts\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba0121b8_095c4b4a","line":2699,"in_reply_to":"da0c15f0_8914e5f5","updated":"2016-03-29 13:13:48.000000000","message":"Done","commit_id":"5a53bb9212752fe7df057d468a7ad472065e962b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"792f89854bb8277319edd397f0b3653459a7de4c","unresolved":false,"context_lines":[{"line_number":2699,"context_line":"        # Without this step we will always allow instances without request_spec"},{"line_number":2700,"context_line":"        # to resize to the same host."},{"line_number":2701,"context_line":"        if request_spec:"},{"line_number":2702,"context_line":"            request_spec.ignore_hosts \u003d filter_properties[\u0027ignore_hosts\u0027]"},{"line_number":2703,"context_line":""},{"line_number":2704,"context_line":"        scheduler_hint \u003d {\u0027filter_properties\u0027: filter_properties}"},{"line_number":2705,"context_line":"        self.compute_task_api.resize_instance(context, instance,"}],"source_content_type":"text/x-python","patch_set":9,"id":"da0c15f0_c9109d51","line":2702,"updated":"2016-03-25 11:49:01.000000000","message":"I\u0027d rather do this :\n\nif not CONF.allow_resize_to_same_host:\n  request_spec.ignore_hosts.append(instance.host)\n\nand move this to L2691 (just after getting the Spec obj\n\nbut good catch !","commit_id":"5a53bb9212752fe7df057d468a7ad472065e962b"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"2a98e9682b19f3c929fc8975cff778b477f4f219","unresolved":false,"context_lines":[{"line_number":2699,"context_line":"        # Without this step we will always allow instances without request_spec"},{"line_number":2700,"context_line":"        # to resize to the same host."},{"line_number":2701,"context_line":"        if request_spec:"},{"line_number":2702,"context_line":"            request_spec.ignore_hosts \u003d filter_properties[\u0027ignore_hosts\u0027]"},{"line_number":2703,"context_line":""},{"line_number":2704,"context_line":"        scheduler_hint \u003d {\u0027filter_properties\u0027: filter_properties}"},{"line_number":2705,"context_line":"        self.compute_task_api.resize_instance(context, instance,"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba0121b8_4956432a","line":2702,"in_reply_to":"da0c15f0_462d8ea6","updated":"2016-03-29 13:13:48.000000000","message":"Done","commit_id":"5a53bb9212752fe7df057d468a7ad472065e962b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"4d344481f1b09a1a02ca0abd389f1701862406cc","unresolved":false,"context_lines":[{"line_number":2699,"context_line":"        # Without this step we will always allow instances without request_spec"},{"line_number":2700,"context_line":"        # to resize to the same host."},{"line_number":2701,"context_line":"        if request_spec:"},{"line_number":2702,"context_line":"            request_spec.ignore_hosts \u003d filter_properties[\u0027ignore_hosts\u0027]"},{"line_number":2703,"context_line":""},{"line_number":2704,"context_line":"        scheduler_hint \u003d {\u0027filter_properties\u0027: filter_properties}"},{"line_number":2705,"context_line":"        self.compute_task_api.resize_instance(context, instance,"}],"source_content_type":"text/x-python","patch_set":9,"id":"da0c15f0_462d8ea6","line":2702,"in_reply_to":"da0c15f0_69887123","updated":"2016-03-25 16:11:29.000000000","message":"Correct, I was too quickly explaining the problem.","commit_id":"5a53bb9212752fe7df057d468a7ad472065e962b"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"37ac9a826617a84770aae6471ecc8916ad721440","unresolved":false,"context_lines":[{"line_number":2699,"context_line":"        # Without this step we will always allow instances without request_spec"},{"line_number":2700,"context_line":"        # to resize to the same host."},{"line_number":2701,"context_line":"        if request_spec:"},{"line_number":2702,"context_line":"            request_spec.ignore_hosts \u003d filter_properties[\u0027ignore_hosts\u0027]"},{"line_number":2703,"context_line":""},{"line_number":2704,"context_line":"        scheduler_hint \u003d {\u0027filter_properties\u0027: filter_properties}"},{"line_number":2705,"context_line":"        self.compute_task_api.resize_instance(context, instance,"}],"source_content_type":"text/x-python","patch_set":9,"id":"da0c15f0_69887123","line":2702,"in_reply_to":"da0c15f0_c9109d51","updated":"2016-03-25 11:59:11.000000000","message":"In case we don\u0027t have request spec there we still need filter_properties to carry this information, so that from_components will be able to hydrate whole object including ignore_hosts. Shouldn\u0027t we leave line 2674 as it is and just move this one to try-except block?","commit_id":"5a53bb9212752fe7df057d468a7ad472065e962b"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"0e1048927589170153b4aae13176c1377cc919d8","unresolved":false,"context_lines":[{"line_number":2725,"context_line":"        except exception.RequestSpecNotFound:"},{"line_number":2726,"context_line":"            # Some old instances can still have no RequestSpec object attached"},{"line_number":2727,"context_line":"            # to them, we need to support the old way"},{"line_number":2728,"context_line":"            # TODO(sbauza): Remove this case once Ocata (15.0.0) opens because"},{"line_number":2729,"context_line":"            # all instances will have to be migrated in the previous cycle."},{"line_number":2730,"context_line":"            request_spec \u003d None"},{"line_number":2731,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"dab17558_4cc0bc2a","line":2728,"updated":"2016-05-10 13:40:27.000000000","message":"This isn\u0027t actually true because of cellsv1. Currently the request spec is not being saved in the child cells, so when this code is run there it will raise the exception.","commit_id":"98c42bfc84c46c22add4e6c4230c07186bed64b5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0fc5eaebc5072f534c5b328ba22c6de84417c002","unresolved":false,"context_lines":[{"line_number":2739,"context_line":"            request_spec.ignore_hosts \u003d filter_properties[\u0027ignore_hosts\u0027]"},{"line_number":2740,"context_line":"        except exception.RequestSpecNotFound:"},{"line_number":2741,"context_line":"            # Some old instances can still have no RequestSpec object attached"},{"line_number":2742,"context_line":"            # to them, we need to support the old way"},{"line_number":2743,"context_line":"            request_spec \u003d None"},{"line_number":2744,"context_line":""},{"line_number":2745,"context_line":"        scheduler_hint \u003d {\u0027filter_properties\u0027: filter_properties}"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_285fb173","line":2742,"updated":"2016-05-18 10:34:30.000000000","message":"Its tempting to mention cells v1 in here too, but thats overkill.","commit_id":"76dfb4ba9fa0fed1350021591956c4e8143b1ce9"}],"nova/conductor/manager.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"0e1048927589170153b4aae13176c1377cc919d8","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        # NOTE(sbauza): If a reschedule occurs when prep_resize(), then"},{"line_number":212,"context_line":"        # it only provides filter_properties legacy dict back to the"},{"line_number":213,"context_line":"        # conductor with no RequestSpec part of the payload."},{"line_number":214,"context_line":"        # TODO(sbauza): Remove that at least in Ocata (once all instances are"},{"line_number":215,"context_line":"        # migrated) and when the compute manager calls back the conductor with"},{"line_number":216,"context_line":"        # a RequestSpec object included."},{"line_number":217,"context_line":"        if not request_spec:"}],"source_content_type":"text/x-python","patch_set":12,"id":"dab17558_07afafe2","line":214,"updated":"2016-05-10 13:40:27.000000000","message":"Same here. The cells database is not currently being populated with request specs so there\u0027s no guarantee that it will be provided here.","commit_id":"98c42bfc84c46c22add4e6c4230c07186bed64b5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0fc5eaebc5072f534c5b328ba22c6de84417c002","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                                             reservations, clean_shutdown)"},{"line_number":224,"context_line":"        # TODO(sbauza): Provide directly the RequestSpec object once"},{"line_number":225,"context_line":"        # _set_vm_state_and_notify() accepts it"},{"line_number":226,"context_line":"        legacy_spec \u003d request_spec.to_legacy_request_spec_dict()"},{"line_number":227,"context_line":"        try:"},{"line_number":228,"context_line":"            task.execute()"},{"line_number":229,"context_line":"        except exception.NoValidHost as ex:"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_4ba5cf02","line":226,"updated":"2016-05-18 10:34:30.000000000","message":"I worry about request_spec being updated inside the task, and so we loose info in the uses below, but I don\u0027t think thats an issue in practice, and this is temporary.","commit_id":"76dfb4ba9fa0fed1350021591956c4e8143b1ce9"}],"nova/conductor/tasks/migrate.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"792f89854bb8277319edd397f0b3653459a7de4c","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        # just pass it to rehydration. If it is not let from_components"},{"line_number":50,"context_line":"        # rehydrate it basing on filter properties."},{"line_number":51,"context_line":"        instance_group \u003d (self.request_spec.instance_group"},{"line_number":52,"context_line":"                          if \u0027instance_group\u0027 in self.request_spec else None)"},{"line_number":53,"context_line":"        # TODO(sbauza): Remove that RequestSpec rehydratation once"},{"line_number":54,"context_line":"        # scheduler.utils methods use directly the NovaObject."},{"line_number":55,"context_line":"        self.request_spec \u003d objects.RequestSpec.from_components("}],"source_content_type":"text/x-python","patch_set":9,"id":"da0c15f0_895ce526","line":52,"updated":"2016-03-25 11:49:01.000000000","message":"Well, we merged https://review.openstack.org/#/c/296596/, I guess this is no longer needed, right?","commit_id":"5a53bb9212752fe7df057d468a7ad472065e962b"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"2a98e9682b19f3c929fc8975cff778b477f4f219","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        # just pass it to rehydration. If it is not let from_components"},{"line_number":50,"context_line":"        # rehydrate it basing on filter properties."},{"line_number":51,"context_line":"        instance_group \u003d (self.request_spec.instance_group"},{"line_number":52,"context_line":"                          if \u0027instance_group\u0027 in self.request_spec else None)"},{"line_number":53,"context_line":"        # TODO(sbauza): Remove that RequestSpec rehydratation once"},{"line_number":54,"context_line":"        # scheduler.utils methods use directly the NovaObject."},{"line_number":55,"context_line":"        self.request_spec \u003d objects.RequestSpec.from_components("}],"source_content_type":"text/x-python","patch_set":9,"id":"ba0121b8_e93bd7e9","line":52,"in_reply_to":"da0c15f0_69dd1114","updated":"2016-03-29 13:13:48.000000000","message":"Done","commit_id":"5a53bb9212752fe7df057d468a7ad472065e962b"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"37ac9a826617a84770aae6471ecc8916ad721440","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        # just pass it to rehydration. If it is not let from_components"},{"line_number":50,"context_line":"        # rehydrate it basing on filter properties."},{"line_number":51,"context_line":"        instance_group \u003d (self.request_spec.instance_group"},{"line_number":52,"context_line":"                          if \u0027instance_group\u0027 in self.request_spec else None)"},{"line_number":53,"context_line":"        # TODO(sbauza): Remove that RequestSpec rehydratation once"},{"line_number":54,"context_line":"        # scheduler.utils methods use directly the NovaObject."},{"line_number":55,"context_line":"        self.request_spec \u003d objects.RequestSpec.from_components("}],"source_content_type":"text/x-python","patch_set":9,"id":"da0c15f0_69dd1114","line":52,"in_reply_to":"da0c15f0_895ce526","updated":"2016-03-25 11:59:11.000000000","message":"If filter properties will always carry this information then we can remove it. I just didn\u0027t want to re-populate this data with the sama data that we already might have.","commit_id":"5a53bb9212752fe7df057d468a7ad472065e962b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0fc5eaebc5072f534c5b328ba22c6de84417c002","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                                                       self.reservations,"},{"line_number":38,"context_line":"                                                       instance\u003dself.instance)"},{"line_number":39,"context_line":"        # TODO(sbauza): Remove that once prep_resize() accepts a  RequestSpec"},{"line_number":40,"context_line":"        # object in the signature and all the scheduler.utils methods too"},{"line_number":41,"context_line":"        legacy_spec \u003d self.request_spec.to_legacy_request_spec_dict()"},{"line_number":42,"context_line":"        legacy_props \u003d self.request_spec.to_legacy_filter_properties_dict()"},{"line_number":43,"context_line":"        scheduler_utils.setup_instance_group(self.context, legacy_spec,"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_8b7cd721","line":40,"updated":"2016-05-18 10:34:30.000000000","message":"looking forward to getting that fix up merged!!","commit_id":"76dfb4ba9fa0fed1350021591956c4e8143b1ce9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"04104d36bacd099b8de7077a313d5025962512f0","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        legacy_props \u003d self.request_spec.to_legacy_filter_properties_dict()"},{"line_number":43,"context_line":"        scheduler_utils.setup_instance_group(self.context, legacy_spec,"},{"line_number":44,"context_line":"                                             legacy_props)"},{"line_number":45,"context_line":"        scheduler_utils.populate_retry(legacy_props,"},{"line_number":46,"context_line":"                                       self.instance.uuid)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        # TODO(sbauza): Remove that RequestSpec rehydratation once"},{"line_number":49,"context_line":"        # scheduler.utils methods use directly the NovaObject."}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa7e38b_b8c4af60","line":46,"range":{"start_line":45,"start_character":8,"end_line":46,"end_character":58},"updated":"2019-09-20 13:14:38.000000000","message":"This will disable reschedules if force_hosts or force_nodes is set in legacy_props.","commit_id":"76dfb4ba9fa0fed1350021591956c4e8143b1ce9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"04104d36bacd099b8de7077a313d5025962512f0","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        # NOTE(sbauza): Force_hosts/nodes needs to be reset"},{"line_number":56,"context_line":"        # if we want to make sure that the next destination"},{"line_number":57,"context_line":"        # is not forced to be the original host"},{"line_number":58,"context_line":"        self.request_spec.reset_forced_destinations()"},{"line_number":59,"context_line":"        hosts \u003d self.scheduler_client.select_destinations("},{"line_number":60,"context_line":"            self.context, self.request_spec)"},{"line_number":61,"context_line":"        host_state \u003d hosts[0]"}],"source_content_type":"text/x-python","patch_set":18,"id":"3fa7e38b_78a4f7b9","line":58,"updated":"2019-09-20 13:14:38.000000000","message":"And this sets force_hosts/force_nodes to None so the scheduler doesn\u0027t pick the original forced host/node, but it also means that if you forced a host/node and the destination the scheduler gives us for resize fails, we won\u0027t reschedule.","commit_id":"76dfb4ba9fa0fed1350021591956c4e8143b1ce9"}]}
