)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f6162616b037ba86bb7ea0d63e103bfe24609635","unresolved":false,"context_lines":[{"line_number":21,"context_line":"block device mappings must be looked up to determine whether or"},{"line_number":22,"context_line":"not an instance is boot from volume, each resource update period."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"It also makes sure not to pollute instance records with root_gb\u003d0."},{"line_number":25,"context_line":"This seeks only to adjust scheduling/claims/reporting for boot"},{"line_number":26,"context_line":"from volume instances and not alter how instance records themselves"},{"line_number":27,"context_line":"are saved. Instance records should continue to reflect the flavor"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"9a629dbe_149e8906","line":24,"updated":"2016-11-11 17:26:56.000000000","message":"You mean instance_extra.flavor.root_gb, not instance.root_gb, right?","commit_id":"c3e23fc99bb12b00133d37719587d2fc07b9d72e"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"f75f3ed7e63f4f41f42d47c09d2df53d98912cc6","unresolved":false,"context_lines":[{"line_number":21,"context_line":"block device mappings must be looked up to determine whether or"},{"line_number":22,"context_line":"not an instance is boot from volume, each resource update period."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"It also makes sure not to pollute instance records with root_gb\u003d0."},{"line_number":25,"context_line":"This seeks only to adjust scheduling/claims/reporting for boot"},{"line_number":26,"context_line":"from volume instances and not alter how instance records themselves"},{"line_number":27,"context_line":"are saved. Instance records should continue to reflect the flavor"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"9a629dbe_c35c551b","line":24,"in_reply_to":"9a629dbe_149e8906","updated":"2016-11-11 19:34:06.000000000","message":"I meant both, actually. My functional tests verifies that neither instance.root_gb nor instance.flavor.root_gb are saved as 0, so I can update this sentence to be more clear.","commit_id":"c3e23fc99bb12b00133d37719587d2fc07b9d72e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3c2295dfa3c57e20ad0f896a2d4b21e82f6f6f9d","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from volume instances and not alter how instance records themselves"},{"line_number":28,"context_line":"are saved. Instance records should continue to reflect the flavor"},{"line_number":29,"context_line":"from which they were booted."},{"line_number":30,"context_line":"Note that the request spec will be saved with root_gb\u003d0, as the"},{"line_number":31,"context_line":"requested disk resources for boot from volume instances are"},{"line_number":32,"context_line":"actually zero."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Closes-Bug: #1469179"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"7a77a97e_4419a887","line":32,"range":{"start_line":30,"start_character":0,"end_line":32,"end_character":14},"updated":"2016-11-16 19:36:20.000000000","message":"If I\u0027m understanding the concerns correctly, the main issue with this patch is the hack in the request spec to store flavor.root_gb \u003d 0 for volume-backed instances. Which means that instance.flavor.root_gb \u003d\u003d 0 doesn\u0027t semantically mean the same thing as reqspec.flavor.root_gb \u003d\u003d 0, right?\n\nThe request spec code isn\u0027t the easiest to follow, especially given all of the legacy compat stuff around that in conductor.\n\nThis is something operators have been asking to fix, but that\u0027s what resource providers is for, and we should have that tied into the scheduler in Ocata.\n\nI\u0027d definitely not want to backport this back to mitaka, that\u0027s in phase 3 support now, which means the only reason we\u0027d land this on master now is to get into stable/newton, but then we just have to rip this out in ocata for resource providers and then still live with the semantic difference with the request spec in here, like if we ever rebuild a volume-backed instance that came about before resource providers. How messy and bug ridden is that going to be?\n\nSo I\u0027d like to understand the implications of this a bit more going forward, i.e. ripping the code out is easy, but what compat code do we have to live with after that? Or could we somehow do a data migration to remove the old hack when we encounter it?\n\nI\u0027m also worried about how this spec could impact or be impacted by any of this:\n\nhttps://specs.openstack.org/openstack/nova-specs/specs/newton/approved/flavor-root-disk-none.html","commit_id":"357fd6cf6fb0e05daccde546f82d3ffb9aff7356"}],"nova/compute/resource_tracker.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5bfba92e5a074e56c90d948f6e6159eae5e56888","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        # that numa_topology is saved while under COMPUTE_RESOURCE_SEMAPHORE"},{"line_number":155,"context_line":"        # so that the resource audit knows about any cpus we\u0027ve pinned."},{"line_number":156,"context_line":"        instance_numa_topology \u003d claim.claimed_numa_topology"},{"line_number":157,"context_line":"        instance.numa_topology \u003d instance_numa_topology"},{"line_number":158,"context_line":"        self._set_instance_host_and_node(instance)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        if self.pci_tracker:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_17f390d7","line":157,"updated":"2016-08-16 19:25:26.000000000","message":"So does this mean _update_usage_from_instance no longer knows about the active numa topology? That sounds bad, but my head is exploding trying work out if thats actually bad or not.","commit_id":"e47eeaa9bc317e12cb8777dbedbc6c89bdc5839c"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"a15e0bf62abb2a15161b7cf5059cb77d171d81fe","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        # that numa_topology is saved while under COMPUTE_RESOURCE_SEMAPHORE"},{"line_number":155,"context_line":"        # so that the resource audit knows about any cpus we\u0027ve pinned."},{"line_number":156,"context_line":"        instance_numa_topology \u003d claim.claimed_numa_topology"},{"line_number":157,"context_line":"        instance.numa_topology \u003d instance_numa_topology"},{"line_number":158,"context_line":"        self._set_instance_host_and_node(instance)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        if self.pci_tracker:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_823c5de3","line":157,"in_reply_to":"3ac371cc_17f390d7","updated":"2016-08-16 21:09:10.000000000","message":"Hmm ... yeah, I see your point. Looks like I should set these on the copy as well. Ideally I\u0027d want to move the clone as late as possible to before _update_usage_from_instance but I need to pass the copy to the Claim on L149.","commit_id":"e47eeaa9bc317e12cb8777dbedbc6c89bdc5839c"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"a2c4304fcdcb699037205a6c7007ef75826f10dd","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        # that numa_topology is saved while under COMPUTE_RESOURCE_SEMAPHORE"},{"line_number":155,"context_line":"        # so that the resource audit knows about any cpus we\u0027ve pinned."},{"line_number":156,"context_line":"        instance_numa_topology \u003d claim.claimed_numa_topology"},{"line_number":157,"context_line":"        instance.numa_topology \u003d instance_numa_topology"},{"line_number":158,"context_line":"        self._set_instance_host_and_node(instance)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        if self.pci_tracker:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_e2e50a09","line":157,"in_reply_to":"3ac371cc_823c5de3","updated":"2016-08-17 22:11:34.000000000","message":"I went through the unit tests and found there is test_claim_numa that verifies this, so it didn\u0027t break it in the test. Reason being, in the test case the claimed_numa_topology is equal to the original instance.numa_topology, so things check out. If the returned claimed_numa_topology were different than what was requested, it would fail. I\u0027m not sure whether that can happen in practice (without the claim failing and raising an exception).","commit_id":"e47eeaa9bc317e12cb8777dbedbc6c89bdc5839c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5bfba92e5a074e56c90d948f6e6159eae5e56888","unresolved":false,"context_lines":[{"line_number":164,"context_line":"                                            instance_numa_topology)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"        # Mark resources in-use and update stats"},{"line_number":167,"context_line":"        self._update_usage_from_instance(context, instance_copy)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        elevated \u003d context.elevated()"},{"line_number":170,"context_line":"        # persist changes to the compute node:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_77864414","line":167,"range":{"start_line":167,"start_character":50,"end_line":167,"end_character":63},"updated":"2016-08-16 19:25:26.000000000","message":"Maybe this should be instance, since it checks for BFV inside that call? unsure.","commit_id":"e47eeaa9bc317e12cb8777dbedbc6c89bdc5839c"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"a15e0bf62abb2a15161b7cf5059cb77d171d81fe","unresolved":false,"context_lines":[{"line_number":164,"context_line":"                                            instance_numa_topology)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"        # Mark resources in-use and update stats"},{"line_number":167,"context_line":"        self._update_usage_from_instance(context, instance_copy)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        elevated \u003d context.elevated()"},{"line_number":170,"context_line":"        # persist changes to the compute node:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_c2cbf551","line":167,"range":{"start_line":167,"start_character":50,"end_line":167,"end_character":63},"in_reply_to":"3ac371cc_77864414","updated":"2016-08-16 21:09:10.000000000","message":"Good point that _update_usage_from_instance also checks for BFV. I think what I\u0027ll want to do instead is earlier in here add to self.tracked_instances_is_bfv and then check that in _update_usage_from_instance and not check BFV a second time. And leave it as instance_copy.","commit_id":"e47eeaa9bc317e12cb8777dbedbc6c89bdc5839c"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"300ab82b950953ac829bdea898e05e64d46b3b6a","unresolved":false,"context_lines":[{"line_number":881,"context_line":"        is_removed_instance \u003d not is_new_instance and (is_removed or"},{"line_number":882,"context_line":"            instance[\u0027vm_state\u0027] in vm_states.ALLOW_RESOURCE_REMOVAL)"},{"line_number":883,"context_line":""},{"line_number":884,"context_line":"        # Avoid changing the original instance in the case of boot from volume"},{"line_number":885,"context_line":"        instance_copy \u003d None"},{"line_number":886,"context_line":""},{"line_number":887,"context_line":"        if is_new_instance:"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa7ab95a_627f1de0","line":884,"updated":"2016-08-30 13:14:04.000000000","message":"Why are we preventing to modify the original instance in case we know it\u0027s a BFV one ? In case we persist the change, why would it be bad ?","commit_id":"e46ea186fdca8e3208af43ee09b097bf59c3d3cc"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"300ab82b950953ac829bdea898e05e64d46b3b6a","unresolved":false,"context_lines":[{"line_number":900,"context_line":"            booted_from_volume \u003d self.tracked_instances_is_bfv.pop(uuid, False)"},{"line_number":901,"context_line":"            if booted_from_volume:"},{"line_number":902,"context_line":"                instance_copy \u003d instance.obj_clone()"},{"line_number":903,"context_line":"                instance_copy.flavor.root_gb \u003d 0"},{"line_number":904,"context_line":"            self.tracked_instances.pop(uuid)"},{"line_number":905,"context_line":"            sign \u003d -1"},{"line_number":906,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa7ab95a_6231dd59","line":903,"updated":"2016-08-30 13:14:04.000000000","message":"Just to be clear, that is cool for not taking in account the wrong disk space in case of a BFV instance","commit_id":"e46ea186fdca8e3208af43ee09b097bf59c3d3cc"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f6162616b037ba86bb7ea0d63e103bfe24609635","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        if is_bfv is None:"},{"line_number":115,"context_line":"            is_bfv \u003d compute_utils.is_volume_backed_instance(context, instance)"},{"line_number":116,"context_line":"            self.tracked_instances_is_bfv[uuid] \u003d is_bfv"},{"line_number":117,"context_line":"        return is_bfv"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    @utils.synchronized(COMPUTE_RESOURCE_SEMAPHORE)"},{"line_number":120,"context_line":"    def instance_claim(self, context, instance, limits\u003dNone):"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a629dbe_f70af7d0","line":117,"updated":"2016-11-11 17:26:56.000000000","message":"Instead of adding a new tracked_instance_is_bfv dict as a cache for just the BFV information, how about making a is_volume_backed() method on nova.objects.Instance and caching the result there.\n\nThat way, the resource tracker can simply look at the Instance object in self.tracked_instances and call the is_volume_backed() on it. And no need for this method at all.","commit_id":"c3e23fc99bb12b00133d37719587d2fc07b9d72e"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"f75f3ed7e63f4f41f42d47c09d2df53d98912cc6","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        if is_bfv is None:"},{"line_number":115,"context_line":"            is_bfv \u003d compute_utils.is_volume_backed_instance(context, instance)"},{"line_number":116,"context_line":"            self.tracked_instances_is_bfv[uuid] \u003d is_bfv"},{"line_number":117,"context_line":"        return is_bfv"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    @utils.synchronized(COMPUTE_RESOURCE_SEMAPHORE)"},{"line_number":120,"context_line":"    def instance_claim(self, context, instance, limits\u003dNone):"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a629dbe_238191fb","line":117,"in_reply_to":"9a629dbe_f70af7d0","updated":"2016-11-11 19:34:06.000000000","message":"I like that idea, let me give it a try in the next PS.","commit_id":"c3e23fc99bb12b00133d37719587d2fc07b9d72e"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f6162616b037ba86bb7ea0d63e103bfe24609635","unresolved":false,"context_lines":[{"line_number":150,"context_line":"                            \"until resources have been claimed.\"),"},{"line_number":151,"context_line":"                        instance\u003dinstance)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        # TODO(jaypipes): Remove this after resource-providers"},{"line_number":154,"context_line":"        instance_copy \u003d None"},{"line_number":155,"context_line":"        if self._check_and_track_is_volume_backed(context, instance):"},{"line_number":156,"context_line":"            instance_copy \u003d instance.obj_clone()"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a629dbe_b75cff19","line":153,"updated":"2016-11-11 17:26:56.000000000","message":"lol, ok, mission gratefully accepted! :)","commit_id":"c3e23fc99bb12b00133d37719587d2fc07b9d72e"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"f75f3ed7e63f4f41f42d47c09d2df53d98912cc6","unresolved":false,"context_lines":[{"line_number":150,"context_line":"                            \"until resources have been claimed.\"),"},{"line_number":151,"context_line":"                        instance\u003dinstance)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        # TODO(jaypipes): Remove this after resource-providers"},{"line_number":154,"context_line":"        instance_copy \u003d None"},{"line_number":155,"context_line":"        if self._check_and_track_is_volume_backed(context, instance):"},{"line_number":156,"context_line":"            instance_copy \u003d instance.obj_clone()"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a629dbe_83f6dd8c","line":153,"in_reply_to":"9a629dbe_b75cff19","updated":"2016-11-11 19:34:06.000000000","message":"I guess technically I should have put melwitt/jaypipes on this. I don\u0027t mean that YOU have to do it but figured you\u0027re going to be all over this code more than me in the future anyway. :)","commit_id":"c3e23fc99bb12b00133d37719587d2fc07b9d72e"}],"nova/conductor/manager.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5bfba92e5a074e56c90d948f6e6159eae5e56888","unresolved":false,"context_lines":[{"line_number":545,"context_line":"            context, request_spec, filter_properties)"},{"line_number":546,"context_line":"        # TODO(jaypipes): Remove this after resource-providers"},{"line_number":547,"context_line":"        if compute_utils.is_volume_backed_instance(context, instance):"},{"line_number":548,"context_line":"            spec_obj.flavor.root_gb \u003d 0"},{"line_number":549,"context_line":"        hosts \u003d self.scheduler_client.select_destinations(context, spec_obj)"},{"line_number":550,"context_line":"        return hosts"},{"line_number":551,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3ac371cc_d7cf387d","line":548,"updated":"2016-08-16 19:25:26.000000000","message":"+1 this change.","commit_id":"e47eeaa9bc317e12cb8777dbedbc6c89bdc5839c"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"300ab82b950953ac829bdea898e05e64d46b3b6a","unresolved":false,"context_lines":[{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        # TODO(jaypipes): Remove this after resource-providers"},{"line_number":234,"context_line":"        if compute_utils.is_volume_backed_instance(context, instance):"},{"line_number":235,"context_line":"            request_spec.flavor.root_gb \u003d 0"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"        task \u003d self._build_cold_migrate_task(context, instance, flavor,"},{"line_number":238,"context_line":"                                             request_spec,"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa7ab95a_024e51c0","line":235,"updated":"2016-08-30 13:14:04.000000000","message":"please note that here we will persist the flavor change given we call req_spec.save() later so that\u0027s why I\u0027m wondering why we want to not update the original instance.","commit_id":"e46ea186fdca8e3208af43ee09b097bf59c3d3cc"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"21da884247de63f4b6aea9b58be55d475fdd6605","unresolved":false,"context_lines":[{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        # TODO(jaypipes): Remove this after resource-providers"},{"line_number":234,"context_line":"        if compute_utils.is_volume_backed_instance(context, instance):"},{"line_number":235,"context_line":"            request_spec.flavor.root_gb \u003d 0"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"        task \u003d self._build_cold_migrate_task(context, instance, flavor,"},{"line_number":238,"context_line":"                                             request_spec,"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa7ab95a_e084e1d3","line":235,"in_reply_to":"fa7ab95a_024e51c0","updated":"2016-08-30 22:32:08.000000000","message":"We wanted to avoid updating the instance records with root_gb\u003d0 for some reasons. One is, I think we didn\u0027t want to persist instances that have a flavor saved with them, that potentially doesn\u0027t represent any flavor in the database. Another is, in case there are unknown side effects of persisting the instance root_gb\u003d0 in a way that cannot be easily cleaned up. For example, if other calculations/logic would break in unforeseen ways because of this, we can\u0027t easily \"fix\" all of the instance records that have had their root_gb persisted as 0 in the database. We thought it\u0027s much less bad for request spec to have its root_gb\u003d0 persisted to represent what was requested as a BFV. Whereas persisting the instance flavor as root_gb\u003d0 makes a mismatch with the flavor that was provided when it was booted.\n\nSo, we were trying to do a patch where only the calculations ignore root_gb for BFV instances and minimize persistence of this workaround that will be removed once we have resource-providers.\n\nThat said, this patch still has a problem wherein the instance will end up with root_gb\u003d0 persisted in the event of a resize.","commit_id":"e46ea186fdca8e3208af43ee09b097bf59c3d3cc"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"38a77dcfa4a7c4d322d382981bc0534decc4cf94","unresolved":false,"context_lines":[{"line_number":233,"context_line":"        # TODO(jaypipes): Remove this after resource-providers"},{"line_number":234,"context_line":"        if compute_utils.is_volume_backed_instance(context, instance):"},{"line_number":235,"context_line":"            # Clone this so we don\u0027t mutate the original flavor"},{"line_number":236,"context_line":"            request_spec.flavor \u003d request_spec.flavor.obj_clone()"},{"line_number":237,"context_line":"            request_spec.flavor.root_gb \u003d 0"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"        task \u003d self._build_cold_migrate_task(context, instance, flavor,"},{"line_number":240,"context_line":"                                             request_spec,"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa7ab95a_46e27430","line":237,"range":{"start_line":236,"start_character":12,"end_line":237,"end_character":43},"updated":"2016-09-01 22:59:47.000000000","message":"I need extra handling in resize_claim because of this now.","commit_id":"33e8a25ecdbe4c72a22bdded0b7731357651df39"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f6162616b037ba86bb7ea0d63e103bfe24609635","unresolved":false,"context_lines":[{"line_number":540,"context_line":"        spec_obj \u003d objects.RequestSpec.from_primitives("},{"line_number":541,"context_line":"            context, request_spec, filter_properties)"},{"line_number":542,"context_line":"        # TODO(jaypipes): Remove this after resource-providers"},{"line_number":543,"context_line":"        if compute_utils.is_volume_backed_instance(context, instance):"},{"line_number":544,"context_line":"            # Clone this so we don\u0027t mutate the original flavor"},{"line_number":545,"context_line":"            spec_obj.flavor \u003d spec_obj.flavor.obj_clone()"},{"line_number":546,"context_line":"            spec_obj.flavor.root_gb \u003d 0"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a629dbe_b7eb1fdb","line":543,"updated":"2016-11-11 17:26:56.000000000","message":"and this would just be:\n\n if instance.is_volume_backed():","commit_id":"c3e23fc99bb12b00133d37719587d2fc07b9d72e"}],"nova/conductor/tasks/migrate.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f6162616b037ba86bb7ea0d63e103bfe24609635","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            self.instance.availability_zone)"},{"line_number":56,"context_line":"        # TODO(jaypipes): Remove this after resource-providers"},{"line_number":57,"context_line":"        if compute_utils.is_volume_backed_instance(self.context,"},{"line_number":58,"context_line":"                                                   self.instance):"},{"line_number":59,"context_line":"            # Clone this so we don\u0027t mutate the flavor that was passed in"},{"line_number":60,"context_line":"            self.request_spec.flavor \u003d self.request_spec.flavor.obj_clone()"},{"line_number":61,"context_line":"            self.request_spec.flavor.root_gb \u003d 0"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a629dbe_77cc2789","line":58,"updated":"2016-11-11 17:26:56.000000000","message":"would just be:\n\n if self.instance.is_volume_backed():","commit_id":"c3e23fc99bb12b00133d37719587d2fc07b9d72e"}],"nova/objects/instance.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6e215975543c4ee54769904811fd3cd2e9792c67","unresolved":false,"context_lines":[{"line_number":1143,"context_line":"        if self._is_volume_backed is None:"},{"line_number":1144,"context_line":"            self._is_volume_backed \u003d compute_utils.is_volume_backed_instance("},{"line_number":1145,"context_line":"                self._context, self)"},{"line_number":1146,"context_line":"        return self._is_volume_backed"},{"line_number":1147,"context_line":""},{"line_number":1148,"context_line":""},{"line_number":1149,"context_line":"def _make_instance_list(context, inst_list, db_inst_list, expected_attrs):"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_270dc090","line":1146,"updated":"2016-11-16 00:55:10.000000000","message":"bueno.","commit_id":"357fd6cf6fb0e05daccde546f82d3ffb9aff7356"}],"nova/tests/functional/test_boot_from_volume.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6e215975543c4ee54769904811fd3cd2e9792c67","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        # Check that hypervisor local disk reporting is still 0"},{"line_number":132,"context_line":"        self._verify_zero_local_gb_used()"},{"line_number":133,"context_line":"        # Check that instance has not been saved with 0 root_gb"},{"line_number":134,"context_line":"        self._verify_instance_flavor_not_zero(server_id)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_8785b4ae","line":134,"updated":"2016-11-16 00:55:10.000000000","message":"Absolutely fantastic test, Melanie. Great work.","commit_id":"357fd6cf6fb0e05daccde546f82d3ffb9aff7356"}],"nova/tests/unit/compute/test_tracker.py":[{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"5c80f74ca57864049a3688a01da0e8ffdffaa77f","unresolved":false,"context_lines":[{"line_number":2007,"context_line":"                \u0027_update_usage\u0027)"},{"line_number":2008,"context_line":"    def test_unshelving(self, mock_update_usage, _mock_vol_backed):"},{"line_number":2009,"context_line":"        self.instance.vm_state \u003d vm_states.SHELVED_OFFLOADED"},{"line_number":2010,"context_line":""},{"line_number":2011,"context_line":"        self.rt._update_usage_from_instance(mock.sentinel.ctx, self.instance)"},{"line_number":2012,"context_line":""},{"line_number":2013,"context_line":"        mock_update_usage.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":2,"id":"7ac969e8_6ce54fa7","line":2010,"updated":"2016-08-12 22:20:02.000000000","message":"nit: whitespace","commit_id":"e47eeaa9bc317e12cb8777dbedbc6c89bdc5839c"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"23f691309cef149149afc7eb5bf299b0e83399a8","unresolved":false,"context_lines":[{"line_number":2007,"context_line":"                \u0027_update_usage\u0027)"},{"line_number":2008,"context_line":"    def test_unshelving(self, mock_update_usage, _mock_vol_backed):"},{"line_number":2009,"context_line":"        self.instance.vm_state \u003d vm_states.SHELVED_OFFLOADED"},{"line_number":2010,"context_line":""},{"line_number":2011,"context_line":"        self.rt._update_usage_from_instance(mock.sentinel.ctx, self.instance)"},{"line_number":2012,"context_line":""},{"line_number":2013,"context_line":"        mock_update_usage.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":2,"id":"7ac969e8_6f3421de","line":2010,"in_reply_to":"7ac969e8_6ce54fa7","updated":"2016-08-12 22:22:07.000000000","message":"dangit","commit_id":"e47eeaa9bc317e12cb8777dbedbc6c89bdc5839c"}]}
