)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"bb66a7ace948dbb4dad0c93c169d3646266224d1","unresolved":false,"context_lines":[{"line_number":10,"context_line":"a lot of TODOs for untangling the use of the object with the scheduler.utils"},{"line_number":11,"context_line":"methods instead of the legacy dictionaries."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Some other changes will be provided for changing how we use the objects in the"},{"line_number":14,"context_line":"conductor (and fixing how we pass them to the scheduler.utils) but for the"},{"line_number":15,"context_line":"moment, just modifying the needed setup_instance_group() method to also support"},{"line_number":16,"context_line":"a RequestSpec object."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3f1d235d_b4b4f536","line":13,"range":{"start_line":13,"start_character":27,"end_line":13,"end_character":35},"updated":"2017-06-29 10:35:50.000000000","message":"required?","commit_id":"e211fca55a11c80058d5d78e31dc3ad466d7edfd"}],"nova/conductor/manager.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"62f390ae4b5ccb7ce48d1d3098500631769ffa00","unresolved":false,"context_lines":[{"line_number":622,"context_line":"        scheduler_utils.setup_instance_group(context, request_spec)"},{"line_number":623,"context_line":"        hosts \u003d self.scheduler_client.select_destinations(context,"},{"line_number":624,"context_line":"            request_spec, instance_uuids)"},{"line_number":625,"context_line":"                instance_uuids)"},{"line_number":626,"context_line":"        return hosts"},{"line_number":627,"context_line":""},{"line_number":628,"context_line":"    @targets_cell"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f231b9d_bac2b751","line":625,"updated":"2017-06-19 13:28:00.000000000","message":"shit, wrong rebase","commit_id":"da6289ceec60caff426f028806f9a6c64960313b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"bb66a7ace948dbb4dad0c93c169d3646266224d1","unresolved":false,"context_lines":[{"line_number":733,"context_line":"                    # NOTE(sbauza): We were unable to find an original"},{"line_number":734,"context_line":"                    # RequestSpec object - probably because the instance is old"},{"line_number":735,"context_line":"                    # We need to mock that the old way"},{"line_number":736,"context_line":"                    # TODO(sbauza): Provide directly the RequestSpec object"},{"line_number":737,"context_line":"                    # when _set_vm_state_and_notify() accepts it"},{"line_number":738,"context_line":"                    filter_properties \u003d {\u0027ignore_hosts\u0027: [instance.host]}"},{"line_number":739,"context_line":"                    request_spec \u003d scheduler_utils.build_request_spec("},{"line_number":740,"context_line":"                            context, image_ref, [instance])"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f1d235d_b4e2b52e","line":737,"range":{"start_line":736,"start_character":20,"end_line":737,"end_character":64},"updated":"2017-06-29 10:35:50.000000000","message":"What do you mean? Provide it from \u0027build_request_spec\u0027? If so, I imagine this comment should go into that function?","commit_id":"e211fca55a11c80058d5d78e31dc3ad466d7edfd"}],"nova/conductor/tasks/live_migrate.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"fac585ad01ddb53f4fa71c5bbe54b8fa11c7ec2b","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        image \u003d utils.get_image_from_system_metadata("},{"line_number":157,"context_line":"            self.instance.system_metadata)"},{"line_number":158,"context_line":"        filter_properties \u003d {\u0027ignore_hosts\u0027: attempted_hosts}"},{"line_number":159,"context_line":"        if not self.request_spec:"},{"line_number":160,"context_line":"            # NOTE(sbauza): We were unable to find an original RequestSpec"},{"line_number":161,"context_line":"            # object - probably because the instance is old."},{"line_number":162,"context_line":"            # We need to mock that the old way"}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_c670be75","line":159,"updated":"2017-05-30 14:34:23.000000000","message":"This will now never be true, correct?","commit_id":"67eaefb4ab8de966d93ec4204c833a2d4d8514d8"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"db5c09e2baf02ca165093f1543850fd39ee626af","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        image \u003d utils.get_image_from_system_metadata("},{"line_number":157,"context_line":"            self.instance.system_metadata)"},{"line_number":158,"context_line":"        filter_properties \u003d {\u0027ignore_hosts\u0027: attempted_hosts}"},{"line_number":159,"context_line":"        if not self.request_spec:"},{"line_number":160,"context_line":"            # NOTE(sbauza): We were unable to find an original RequestSpec"},{"line_number":161,"context_line":"            # object - probably because the instance is old."},{"line_number":162,"context_line":"            # We need to mock that the old way"}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_9dc5713f","line":159,"in_reply_to":"df140735_c670be75","updated":"2017-05-30 16:50:26.000000000","message":"Unfortunately not. Cells V1 instances could not having related RequestSpec records if they were created before we persisted it, since the migration I provided by Newton doesn\u0027t work for cells v1.","commit_id":"67eaefb4ab8de966d93ec4204c833a2d4d8514d8"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"fac585ad01ddb53f4fa71c5bbe54b8fa11c7ec2b","unresolved":false,"context_lines":[{"line_number":172,"context_line":"            # if we want to make sure that the next destination"},{"line_number":173,"context_line":"            # is not forced to be the original host"},{"line_number":174,"context_line":"            request_spec.reset_forced_destinations()"},{"line_number":175,"context_line":"        scheduler_utils.setup_instance_group(self.context, request_spec)"},{"line_number":176,"context_line":"        host \u003d None"},{"line_number":177,"context_line":"        while host is None:"},{"line_number":178,"context_line":"            self._check_not_over_max_retries(attempted_hosts)"}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_e6e62217","line":175,"updated":"2017-05-30 14:34:23.000000000","message":"Any reason to move this call location from line 162 to here?","commit_id":"67eaefb4ab8de966d93ec4204c833a2d4d8514d8"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"351bc29ffd0183f369ed12491ae639b70ad27e6d","unresolved":false,"context_lines":[{"line_number":172,"context_line":"            # if we want to make sure that the next destination"},{"line_number":173,"context_line":"            # is not forced to be the original host"},{"line_number":174,"context_line":"            request_spec.reset_forced_destinations()"},{"line_number":175,"context_line":"        scheduler_utils.setup_instance_group(self.context, request_spec)"},{"line_number":176,"context_line":"        host \u003d None"},{"line_number":177,"context_line":"        while host is None:"},{"line_number":178,"context_line":"            self._check_not_over_max_retries(attempted_hosts)"}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_bd0a7523","line":175,"in_reply_to":"df140735_bd003536","updated":"2017-05-30 17:01:28.000000000","message":"I see now... the self.request_spec vs. request_spec was confusing me...","commit_id":"67eaefb4ab8de966d93ec4204c833a2d4d8514d8"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"f336ce2344dd7d7b5f48e62f286dc2dd032a0787","unresolved":false,"context_lines":[{"line_number":172,"context_line":"            # if we want to make sure that the next destination"},{"line_number":173,"context_line":"            # is not forced to be the original host"},{"line_number":174,"context_line":"            request_spec.reset_forced_destinations()"},{"line_number":175,"context_line":"        scheduler_utils.setup_instance_group(self.context, request_spec)"},{"line_number":176,"context_line":"        host \u003d None"},{"line_number":177,"context_line":"        while host is None:"},{"line_number":178,"context_line":"            self._check_not_over_max_retries(attempted_hosts)"}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_b80f232d","line":175,"in_reply_to":"df140735_bd003536","updated":"2017-05-30 17:01:33.000000000","message":"No, because I\u0027m using a newly assigned variable named request_spec which is either the class attribute or some fake RequestSpec hydrated thanks to from_components().","commit_id":"67eaefb4ab8de966d93ec4204c833a2d4d8514d8"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"e90cb91a498585e8ae6d85934d2ac81d42a66606","unresolved":false,"context_lines":[{"line_number":172,"context_line":"            # if we want to make sure that the next destination"},{"line_number":173,"context_line":"            # is not forced to be the original host"},{"line_number":174,"context_line":"            request_spec.reset_forced_destinations()"},{"line_number":175,"context_line":"        scheduler_utils.setup_instance_group(self.context, request_spec)"},{"line_number":176,"context_line":"        host \u003d None"},{"line_number":177,"context_line":"        while host is None:"},{"line_number":178,"context_line":"            self._check_not_over_max_retries(attempted_hosts)"}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_bd003536","line":175,"in_reply_to":"df140735_ddf9a980","updated":"2017-05-30 16:57:34.000000000","message":"I don\u0027t understand... if request_spec is None, though -- as you say can happen in a cellsv1 world -- then\n\n scheduler_utils.setup_instance_group(self.context, request_spec)\n\nwill blow up on line 343:\n\n if request_spec.instance_group and request_spec.instance_group.hosts:\n\nwith an AttributeError that NoneType has no attribute instance_group.","commit_id":"67eaefb4ab8de966d93ec4204c833a2d4d8514d8"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"db5c09e2baf02ca165093f1543850fd39ee626af","unresolved":false,"context_lines":[{"line_number":172,"context_line":"            # if we want to make sure that the next destination"},{"line_number":173,"context_line":"            # is not forced to be the original host"},{"line_number":174,"context_line":"            request_spec.reset_forced_destinations()"},{"line_number":175,"context_line":"        scheduler_utils.setup_instance_group(self.context, request_spec)"},{"line_number":176,"context_line":"        host \u003d None"},{"line_number":177,"context_line":"        while host is None:"},{"line_number":178,"context_line":"            self._check_not_over_max_retries(attempted_hosts)"}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_ddf9a980","line":175,"in_reply_to":"df140735_e6e62217","updated":"2017-05-30 16:50:26.000000000","message":"Because of the conditional at L159 ;) If we don\u0027t have a provided RequestSpec, then we need to use a fake one.","commit_id":"67eaefb4ab8de966d93ec4204c833a2d4d8514d8"}],"nova/conductor/tasks/migrate.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"fac585ad01ddb53f4fa71c5bbe54b8fa11c7ec2b","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        self.quotas \u003d objects.Quotas.from_reservations(self.context,"},{"line_number":40,"context_line":"                                                       self.reservations,"},{"line_number":41,"context_line":"                                                       instance\u003dself.instance)"},{"line_number":42,"context_line":"        scheduler_utils.setup_instance_group(self.context, self.request_spec)"},{"line_number":43,"context_line":"        # TODO(sbauza): Remove that once prep_resize() accepts a  RequestSpec"},{"line_number":44,"context_line":"        # object in the signature and all the scheduler.utils methods too"},{"line_number":45,"context_line":"        legacy_spec \u003d self.request_spec.to_legacy_request_spec_dict()"}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_66d3323a","line":42,"updated":"2017-05-30 14:34:23.000000000","message":"Any reason to move this call location from where it used to be? I don\u0027t see any problem with the move, just wondering why it was done.","commit_id":"67eaefb4ab8de966d93ec4204c833a2d4d8514d8"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"db5c09e2baf02ca165093f1543850fd39ee626af","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        self.quotas \u003d objects.Quotas.from_reservations(self.context,"},{"line_number":40,"context_line":"                                                       self.reservations,"},{"line_number":41,"context_line":"                                                       instance\u003dself.instance)"},{"line_number":42,"context_line":"        scheduler_utils.setup_instance_group(self.context, self.request_spec)"},{"line_number":43,"context_line":"        # TODO(sbauza): Remove that once prep_resize() accepts a  RequestSpec"},{"line_number":44,"context_line":"        # object in the signature and all the scheduler.utils methods too"},{"line_number":45,"context_line":"        legacy_spec \u003d self.request_spec.to_legacy_request_spec_dict()"}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_9d48d1cc","line":42,"in_reply_to":"df140735_66d3323a","updated":"2017-05-30 16:50:26.000000000","message":"Not really honestly, for sure.","commit_id":"67eaefb4ab8de966d93ec4204c833a2d4d8514d8"}],"nova/objects/request_spec.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c6f0223a3e735c1a9ada66a927d0193e93b97499","unresolved":false,"context_lines":[{"line_number":202,"context_line":"            # NOTE(sbauza): Can be dropped once select_destinations is removed"},{"line_number":203,"context_line":"            policies \u003d list(filter_properties.get(\u0027group_policies\u0027))"},{"line_number":204,"context_line":"            hosts \u003d list(filter_properties.get(\u0027group_hosts\u0027))"},{"line_number":205,"context_line":"            members \u003d list(filter_properties.get(\u0027group_members\u0027))"},{"line_number":206,"context_line":"            self.instance_group \u003d objects.InstanceGroup(policies\u003dpolicies,"},{"line_number":207,"context_line":"                                                        hosts\u003dhosts,"},{"line_number":208,"context_line":"                                                        members\u003dmembers)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f515b1d_ea17aaa2","line":205,"range":{"start_line":205,"start_character":27,"end_line":205,"end_character":65},"updated":"2017-09-26 20:15:17.000000000","message":"This isn\u0027t set now, resulting in a NoneType error when you send it to list().","commit_id":"e211fca55a11c80058d5d78e31dc3ad466d7edfd"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"fa2eccc088f0cfc776af5f9992e03521d6ced588","unresolved":false,"context_lines":[{"line_number":202,"context_line":"            # NOTE(sbauza): Can be dropped once select_destinations is removed"},{"line_number":203,"context_line":"            policies \u003d list(filter_properties.get(\u0027group_policies\u0027))"},{"line_number":204,"context_line":"            hosts \u003d list(filter_properties.get(\u0027group_hosts\u0027))"},{"line_number":205,"context_line":"            members \u003d list(filter_properties.get(\u0027group_members\u0027))"},{"line_number":206,"context_line":"            self.instance_group \u003d objects.InstanceGroup(policies\u003dpolicies,"},{"line_number":207,"context_line":"                                                        hosts\u003dhosts,"},{"line_number":208,"context_line":"                                                        members\u003dmembers)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f515b1d_40f1fdcc","line":205,"range":{"start_line":205,"start_character":27,"end_line":205,"end_character":65},"in_reply_to":"7f515b1d_7ddb86ec","updated":"2017-09-26 20:58:09.000000000","message":"I hit this locally, see this bug for details:\n\nhttps://bugs.launchpad.net/nova/+bug/1719730","commit_id":"e211fca55a11c80058d5d78e31dc3ad466d7edfd"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"5c96445a517c8ab49d0cefa5981de7b9311f0d62","unresolved":false,"context_lines":[{"line_number":202,"context_line":"            # NOTE(sbauza): Can be dropped once select_destinations is removed"},{"line_number":203,"context_line":"            policies \u003d list(filter_properties.get(\u0027group_policies\u0027))"},{"line_number":204,"context_line":"            hosts \u003d list(filter_properties.get(\u0027group_hosts\u0027))"},{"line_number":205,"context_line":"            members \u003d list(filter_properties.get(\u0027group_members\u0027))"},{"line_number":206,"context_line":"            self.instance_group \u003d objects.InstanceGroup(policies\u003dpolicies,"},{"line_number":207,"context_line":"                                                        hosts\u003dhosts,"},{"line_number":208,"context_line":"                                                        members\u003dmembers)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f515b1d_7ddb86ec","line":205,"range":{"start_line":205,"start_character":27,"end_line":205,"end_character":65},"in_reply_to":"7f515b1d_ea17aaa2","updated":"2017-09-26 20:45:31.000000000","message":"Is there a test where you are seeing this behaviour, Matt?","commit_id":"e211fca55a11c80058d5d78e31dc3ad466d7edfd"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c6f0223a3e735c1a9ada66a927d0193e93b97499","unresolved":false,"context_lines":[{"line_number":314,"context_line":"            instance[field] \u003d getattr(self.flavor, field)"},{"line_number":315,"context_line":"        return instance"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"    def _to_legacy_group_info(self):"},{"line_number":318,"context_line":"        # NOTE(sbauza): Since this is only needed until the AffinityFilters are"},{"line_number":319,"context_line":"        # modified by using directly the RequestSpec object, we need to keep"},{"line_number":320,"context_line":"        # the existing dictionary as a primitive."}],"source_content_type":"text/x-python","patch_set":6,"id":"7f515b1d_ca0e2e8c","line":317,"range":{"start_line":317,"start_character":8,"end_line":317,"end_character":29},"updated":"2017-09-26 20:15:17.000000000","message":"This needs to include group_members.","commit_id":"e211fca55a11c80058d5d78e31dc3ad466d7edfd"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"5c96445a517c8ab49d0cefa5981de7b9311f0d62","unresolved":false,"context_lines":[{"line_number":314,"context_line":"            instance[field] \u003d getattr(self.flavor, field)"},{"line_number":315,"context_line":"        return instance"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"    def _to_legacy_group_info(self):"},{"line_number":318,"context_line":"        # NOTE(sbauza): Since this is only needed until the AffinityFilters are"},{"line_number":319,"context_line":"        # modified by using directly the RequestSpec object, we need to keep"},{"line_number":320,"context_line":"        # the existing dictionary as a primitive."}],"source_content_type":"text/x-python","patch_set":6,"id":"7f515b1d_ddf39a72","line":317,"range":{"start_line":317,"start_character":8,"end_line":317,"end_character":29},"in_reply_to":"7f515b1d_ca0e2e8c","updated":"2017-09-26 20:45:31.000000000","message":"/me not sure how this *ever* worked in the past, considering group_members is apparently never set anywhere.","commit_id":"e211fca55a11c80058d5d78e31dc3ad466d7edfd"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"bd99e90cc94ab53d5aefcd8437930529ce746680","unresolved":false,"context_lines":[{"line_number":314,"context_line":"            instance[field] \u003d getattr(self.flavor, field)"},{"line_number":315,"context_line":"        return instance"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"    def _to_legacy_group_info(self):"},{"line_number":318,"context_line":"        # NOTE(sbauza): Since this is only needed until the AffinityFilters are"},{"line_number":319,"context_line":"        # modified by using directly the RequestSpec object, we need to keep"},{"line_number":320,"context_line":"        # the existing dictionary as a primitive."}],"source_content_type":"text/x-python","patch_set":6,"id":"7f515b1d_b670fba6","line":317,"range":{"start_line":317,"start_character":8,"end_line":317,"end_character":29},"in_reply_to":"7f515b1d_ddf39a72","updated":"2017-09-26 22:01:54.000000000","message":"It isn\u0027t set anywhere now, but it was in the past. A more recent change removed the setting of it (explained in LP bug).","commit_id":"e211fca55a11c80058d5d78e31dc3ad466d7edfd"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"bd99e90cc94ab53d5aefcd8437930529ce746680","unresolved":false,"context_lines":[{"line_number":320,"context_line":"        # the existing dictionary as a primitive."},{"line_number":321,"context_line":"        return {\u0027group_updated\u0027: True,"},{"line_number":322,"context_line":"                \u0027group_hosts\u0027: set(self.instance_group.hosts),"},{"line_number":323,"context_line":"                \u0027group_policies\u0027: set(self.instance_group.policies)}"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"    def to_legacy_request_spec_dict(self):"},{"line_number":326,"context_line":"        \"\"\"Returns a legacy request_spec dict from the RequestSpec object."}],"source_content_type":"text/x-python","patch_set":6,"id":"7f515b1d_8095b542","line":323,"updated":"2017-09-26 22:01:54.000000000","message":"I tried what mriedem mentioned and adding:\n\n \u0027group_members\u0027: set(self.instance_group.members)\n\nto this has fixed the problem locally for me.","commit_id":"e211fca55a11c80058d5d78e31dc3ad466d7edfd"}],"nova/scheduler/utils.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"e90cb91a498585e8ae6d85934d2ac81d42a66606","unresolved":false,"context_lines":[{"line_number":340,"context_line":""},{"line_number":341,"context_line":"    :param request_spec: Request spec"},{"line_number":342,"context_line":"    \"\"\""},{"line_number":343,"context_line":"    if request_spec.instance_group and request_spec.instance_group.hosts:"},{"line_number":344,"context_line":"        group_hosts \u003d request_spec.instance_group.hosts"},{"line_number":345,"context_line":"    else:"},{"line_number":346,"context_line":"        group_hosts \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_7dfa9d42","line":343,"updated":"2017-05-30 16:57:34.000000000","message":"This will blow up if request_spec is None, which will occur in a cellsv1 world, as you say...","commit_id":"67eaefb4ab8de966d93ec4204c833a2d4d8514d8"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"351bc29ffd0183f369ed12491ae639b70ad27e6d","unresolved":false,"context_lines":[{"line_number":340,"context_line":""},{"line_number":341,"context_line":"    :param request_spec: Request spec"},{"line_number":342,"context_line":"    \"\"\""},{"line_number":343,"context_line":"    if request_spec.instance_group and request_spec.instance_group.hosts:"},{"line_number":344,"context_line":"        group_hosts \u003d request_spec.instance_group.hosts"},{"line_number":345,"context_line":"    else:"},{"line_number":346,"context_line":"        group_hosts \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_18096f2b","line":343,"in_reply_to":"df140735_7dfa9d42","updated":"2017-05-30 17:01:28.000000000","message":"I see now the code is never going to pass a None for request_spec....","commit_id":"67eaefb4ab8de966d93ec4204c833a2d4d8514d8"}],"nova/tests/unit/conductor/test_conductor.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"62f390ae4b5ccb7ce48d1d3098500631769ffa00","unresolved":false,"context_lines":[{"line_number":947,"context_line":"            reset_forced_destinations.assert_called_once_with()"},{"line_number":948,"context_line":"            from_primitives.assert_called_once_with(self.context, request_spec,"},{"line_number":949,"context_line":"                    filter_properties, [instance.uuid])"},{"line_number":950,"context_line":"            sched_instances.assert_called_once_with(self.context, fake_spec)"},{"line_number":951,"context_line":"            # NOTE(sbauza): Since the instance is dehydrated when passing"},{"line_number":952,"context_line":"            # through the RPC API, we can only assert mock.ANY for it"},{"line_number":953,"context_line":"            unshelve_instance.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":4,"id":"7f231b9d_1aa52ba2","line":950,"updated":"2017-06-19 13:28:00.000000000","message":"wrong rebase too","commit_id":"da6289ceec60caff426f028806f9a6c64960313b"}],"nova/tests/unit/scheduler/test_scheduler_utils.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"fac585ad01ddb53f4fa71c5bbe54b8fa11c7ec2b","unresolved":false,"context_lines":[{"line_number":372,"context_line":"        spec.instance_group \u003d objects.InstanceGroup(hosts\u003d[\u0027hostC\u0027])"},{"line_number":373,"context_line":"        self.assertRaises(exception.NoValidHost,"},{"line_number":374,"context_line":"                          scheduler_utils.setup_instance_group,"},{"line_number":375,"context_line":"                          self.context, spec)"}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_06ec76c5","line":375,"updated":"2017-05-30 14:34:23.000000000","message":"++ good unit test improvements here...","commit_id":"67eaefb4ab8de966d93ec4204c833a2d4d8514d8"}]}
