)]}'
{"nova/cells/manager.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"08c93be7d559059932a45068ae3d6d7c4d72c328","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        parent cells."},{"line_number":190,"context_line":"        \"\"\""},{"line_number":191,"context_line":"        if instance.deleted:"},{"line_number":192,"context_line":"            self.instance_destroy_at_top(ctxt, instance)"},{"line_number":193,"context_line":"        else:"},{"line_number":194,"context_line":"            self.instance_update_at_top(ctxt, instance)"},{"line_number":195,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1aca2d91_ace397a3","line":192,"updated":"2015-05-08 20:06:48.000000000","message":"Here instance_destroy_at_top is being passed an instance object.","commit_id":"af5da1efd23e90ae68b7857bb2116798fb4a0cf5"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"77fb0164c7ac23a863bb5dd06cff54d2b1e7d6ab","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        parent cells."},{"line_number":190,"context_line":"        \"\"\""},{"line_number":191,"context_line":"        if instance.deleted:"},{"line_number":192,"context_line":"            self.instance_destroy_at_top(ctxt, instance)"},{"line_number":193,"context_line":"        else:"},{"line_number":194,"context_line":"            self.instance_update_at_top(ctxt, instance)"},{"line_number":195,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1aca2d91_b26ace7f","line":192,"in_reply_to":"1aca2d91_ace397a3","updated":"2015-05-08 22:22:52.000000000","message":"Oops, thanks.","commit_id":"af5da1efd23e90ae68b7857bb2116798fb4a0cf5"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"5f3feca4bb4817c6cc8b878c93dea583bda97892","unresolved":false,"context_lines":[{"line_number":428,"context_line":"    def validate_console_port(self, ctxt, instance_uuid, console_port,"},{"line_number":429,"context_line":"                              console_type):"},{"line_number":430,"context_line":"        \"\"\"Validate console port with child cell compute node.\"\"\""},{"line_number":431,"context_line":"        instance \u003d objects.Instance.get_by_uuid(ctxt, instance_uuid)"},{"line_number":432,"context_line":"        if not instance.cell_name:"},{"line_number":433,"context_line":"            raise exception.InstanceUnknownCell(instance_uuid\u003dinstance_uuid)"},{"line_number":434,"context_line":"        response \u003d self.msg_runner.validate_console_port(ctxt,"}],"source_content_type":"text/x-python","patch_set":12,"id":"5afe65bd_0286f6b8","line":431,"updated":"2015-06-03 21:51:30.000000000","message":"This isn\u0027t strictly necessary to change in this patch.  But it\u0027s a nice cleanup.","commit_id":"59089501088a8130541f4530f718ee61cd0d8757"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"1fc80d10a0013c0156b84519d65b3b34bb62b943","unresolved":false,"context_lines":[{"line_number":428,"context_line":"    def validate_console_port(self, ctxt, instance_uuid, console_port,"},{"line_number":429,"context_line":"                              console_type):"},{"line_number":430,"context_line":"        \"\"\"Validate console port with child cell compute node.\"\"\""},{"line_number":431,"context_line":"        instance \u003d objects.Instance.get_by_uuid(ctxt, instance_uuid)"},{"line_number":432,"context_line":"        if not instance.cell_name:"},{"line_number":433,"context_line":"            raise exception.InstanceUnknownCell(instance_uuid\u003dinstance_uuid)"},{"line_number":434,"context_line":"        response \u003d self.msg_runner.validate_console_port(ctxt,"}],"source_content_type":"text/x-python","patch_set":12,"id":"5afe65bd_9338faa1","line":431,"in_reply_to":"5afe65bd_0286f6b8","updated":"2015-06-03 22:19:10.000000000","message":"I had to think awhile to remember why I did this. After the needed changes, it was the last remaining use of self.db in this file, so I thought to just remove it.","commit_id":"59089501088a8130541f4530f718ee61cd0d8757"}],"nova/cells/messaging.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"72bc9bbc3b685362d9e966cb11079c9c80d293ad","unresolved":false,"context_lines":[{"line_number":1034,"context_line":"        # it with permissions that allows us to read deleted."},{"line_number":1035,"context_line":"        with utils.temporary_mutation(message.ctxt, read_deleted\u003d\"yes\"):"},{"line_number":1036,"context_line":"            try:"},{"line_number":1037,"context_line":"                instance.save(expected_vm_state\u003dexpected_vm_state,"},{"line_number":1038,"context_line":"                              expected_task_state\u003dexpected_task_state)"},{"line_number":1039,"context_line":"            except exception.NotFound:"},{"line_number":1040,"context_line":"                # FIXME(comstud): Strange.  Need to handle quotas here,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3acd31a7_60761740","line":1037,"updated":"2015-04-29 19:30:29.000000000","message":"As you already know, need to use with instance.skip_cells_sync here.","commit_id":"88b1d6f9bcb6372f6dc0ed18041b9fb7d03b7d1f"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"315b56a111f3c103a3d7b74a4f317ab2384f50bb","unresolved":false,"context_lines":[{"line_number":1034,"context_line":"        # it with permissions that allows us to read deleted."},{"line_number":1035,"context_line":"        with utils.temporary_mutation(message.ctxt, read_deleted\u003d\"yes\"):"},{"line_number":1036,"context_line":"            try:"},{"line_number":1037,"context_line":"                instance.save(expected_vm_state\u003dexpected_vm_state,"},{"line_number":1038,"context_line":"                              expected_task_state\u003dexpected_task_state)"},{"line_number":1039,"context_line":"            except exception.NotFound:"},{"line_number":1040,"context_line":"                # FIXME(comstud): Strange.  Need to handle quotas here,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3acd31a7_8f34bfde","line":1037,"in_reply_to":"3acd31a7_09442f72","updated":"2015-04-29 21:01:45.000000000","message":"Ah, yeah. You addressed my concern when you said \"propagating changes that have been made locally before they\u0027re called.\" The places I was concerned are in nova/db/api.py and those indeed have updated locally first. I think these are always terminal points","commit_id":"88b1d6f9bcb6372f6dc0ed18041b9fb7d03b7d1f"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"57c30fd1502a0a4d871aad77fce59dda65dc6daf","unresolved":false,"context_lines":[{"line_number":1034,"context_line":"        # it with permissions that allows us to read deleted."},{"line_number":1035,"context_line":"        with utils.temporary_mutation(message.ctxt, read_deleted\u003d\"yes\"):"},{"line_number":1036,"context_line":"            try:"},{"line_number":1037,"context_line":"                instance.save(expected_vm_state\u003dexpected_vm_state,"},{"line_number":1038,"context_line":"                              expected_task_state\u003dexpected_task_state)"},{"line_number":1039,"context_line":"            except exception.NotFound:"},{"line_number":1040,"context_line":"                # FIXME(comstud): Strange.  Need to handle quotas here,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3acd31a7_8955dfc7","line":1037,"in_reply_to":"3acd31a7_60761740","updated":"2015-04-29 20:13:03.000000000","message":"Actually I wasn\u0027t sure. I thought because instance_update_at_top is also called outside of instance.save, we would want it to sync down in those cases and the cycle stops in instance_update_from_api. Am I understanding it wrong?","commit_id":"88b1d6f9bcb6372f6dc0ed18041b9fb7d03b7d1f"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"47606b6394c592ee0503e5f347b347486d29f72c","unresolved":false,"context_lines":[{"line_number":1034,"context_line":"        # it with permissions that allows us to read deleted."},{"line_number":1035,"context_line":"        with utils.temporary_mutation(message.ctxt, read_deleted\u003d\"yes\"):"},{"line_number":1036,"context_line":"            try:"},{"line_number":1037,"context_line":"                instance.save(expected_vm_state\u003dexpected_vm_state,"},{"line_number":1038,"context_line":"                              expected_task_state\u003dexpected_task_state)"},{"line_number":1039,"context_line":"            except exception.NotFound:"},{"line_number":1040,"context_line":"                # FIXME(comstud): Strange.  Need to handle quotas here,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3acd31a7_09442f72","line":1037,"in_reply_to":"3acd31a7_8955dfc7","updated":"2015-04-29 20:29:40.000000000","message":"Hmm, I guess we need to look at where all this is called from.  I think both instance_update_at_top and instance_update_from_api should be terminal points.  But this relies on them only propagating changes that have been made locally before they\u0027re called.","commit_id":"88b1d6f9bcb6372f6dc0ed18041b9fb7d03b7d1f"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"08c93be7d559059932a45068ae3d6d7c4d72c328","unresolved":false,"context_lines":[{"line_number":966,"context_line":"        checking on the VM and task states.  Add some requirements for"},{"line_number":967,"context_line":"        vm_state and task_state to the instance_update() DB call if"},{"line_number":968,"context_line":"        necessary."},{"line_number":969,"context_line":"        \"\"\""},{"line_number":970,"context_line":"        expected_vm_state_map \u003d {"},{"line_number":971,"context_line":"                # For updates containing \u0027vm_state\u0027 of \u0027building\u0027,"},{"line_number":972,"context_line":"                # only allow them to occur if the DB already says"}],"source_content_type":"text/x-python","patch_set":6,"id":"1aca2d91_0c384b3c","line":969,"updated":"2015-05-08 20:06:48.000000000","message":"Minor nit, but this docstring could be replicated for the method below.","commit_id":"af5da1efd23e90ae68b7857bb2116798fb4a0cf5"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"77fb0164c7ac23a863bb5dd06cff54d2b1e7d6ab","unresolved":false,"context_lines":[{"line_number":966,"context_line":"        checking on the VM and task states.  Add some requirements for"},{"line_number":967,"context_line":"        vm_state and task_state to the instance_update() DB call if"},{"line_number":968,"context_line":"        necessary."},{"line_number":969,"context_line":"        \"\"\""},{"line_number":970,"context_line":"        expected_vm_state_map \u003d {"},{"line_number":971,"context_line":"                # For updates containing \u0027vm_state\u0027 of \u0027building\u0027,"},{"line_number":972,"context_line":"                # only allow them to occur if the DB already says"}],"source_content_type":"text/x-python","patch_set":6,"id":"1aca2d91_12b98279","line":969,"in_reply_to":"1aca2d91_0c384b3c","updated":"2015-05-08 22:22:52.000000000","message":"I overlooked this. Also, I need to update them since they\u0027re talking about instance_update DB call","commit_id":"af5da1efd23e90ae68b7857bb2116798fb4a0cf5"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"08c93be7d559059932a45068ae3d6d7c4d72c328","unresolved":false,"context_lines":[{"line_number":1042,"context_line":"                # if we actually want this code to remain.."},{"line_number":1043,"context_line":"                instance.create()"},{"line_number":1044,"context_line":""},{"line_number":1045,"context_line":"    def instance_destroy_at_top(self, message, instance, **kwargs):"},{"line_number":1046,"context_line":"        \"\"\"Destroy an instance from the DB if we\u0027re a top level cell.\"\"\""},{"line_number":1047,"context_line":"        if not self._at_the_top():"},{"line_number":1048,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":6,"id":"1aca2d91_4cf52355","line":1045,"updated":"2015-05-08 20:06:48.000000000","message":"This should be converted to using an instance object.","commit_id":"af5da1efd23e90ae68b7857bb2116798fb4a0cf5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bf4a0a7afaa693b1284f2d93b035cb4fad543b80","unresolved":false,"context_lines":[{"line_number":782,"context_line":"        try:"},{"line_number":783,"context_line":"            instance \u003d objects.Instance.get_by_uuid(message.ctxt,"},{"line_number":784,"context_line":"                                                    instance_uuid)"},{"line_number":785,"context_line":""},{"line_number":786,"context_line":"        except exception.InstanceNotFound:"},{"line_number":787,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":788,"context_line":"                # Must be a race condition.  Let\u0027s try to resolve it by"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aca2d91_4fb2b007","line":785,"updated":"2015-05-08 23:41:08.000000000","message":"Stray whitespace!","commit_id":"4c906b9f8c92244e8693f12755f50b0a02ea2828"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"cf6d3a7b9789c4847610115bdcfefee9754e41ec","unresolved":false,"context_lines":[{"line_number":782,"context_line":"        try:"},{"line_number":783,"context_line":"            instance \u003d objects.Instance.get_by_uuid(message.ctxt,"},{"line_number":784,"context_line":"                                                    instance_uuid)"},{"line_number":785,"context_line":""},{"line_number":786,"context_line":"        except exception.InstanceNotFound:"},{"line_number":787,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":788,"context_line":"                # Must be a race condition.  Let\u0027s try to resolve it by"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aca2d91_cf4c80ca","line":785,"in_reply_to":"1aca2d91_4fb2b007","updated":"2015-05-08 23:51:22.000000000","message":"Darn it","commit_id":"4c906b9f8c92244e8693f12755f50b0a02ea2828"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bf4a0a7afaa693b1284f2d93b035cb4fad543b80","unresolved":false,"context_lines":[{"line_number":1034,"context_line":"            except exception.NotFound:"},{"line_number":1035,"context_line":"                # FIXME(comstud): Strange.  Need to handle quotas here,"},{"line_number":1036,"context_line":"                # if we actually want this code to remain.."},{"line_number":1037,"context_line":"                instance.create()"},{"line_number":1038,"context_line":""},{"line_number":1039,"context_line":"    def instance_destroy_at_top(self, message, instance, **kwargs):"},{"line_number":1040,"context_line":"        \"\"\"Destroy an instance from the DB if we\u0027re a top level cell.\"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"1aca2d91_2fae5498","line":1037,"updated":"2015-05-08 23:41:08.000000000","message":"This is weird, but not your deal.","commit_id":"4c906b9f8c92244e8693f12755f50b0a02ea2828"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"5f3feca4bb4817c6cc8b878c93dea583bda97892","unresolved":false,"context_lines":[{"line_number":965,"context_line":"                # start out in \u0027building\u0027 anyway.. but just in case."},{"line_number":966,"context_line":"                vm_states.BUILDING: [vm_states.BUILDING, None]}"},{"line_number":967,"context_line":""},{"line_number":968,"context_line":"        if instance.obj_attr_is_set(\u0027vm_state\u0027):"},{"line_number":969,"context_line":"            return expected_vm_state_map.get(instance.vm_state)"},{"line_number":970,"context_line":""},{"line_number":971,"context_line":"    def _get_expected_task_state(self, instance):"}],"source_content_type":"text/x-python","patch_set":12,"id":"5afe65bd_e591a49a","line":968,"updated":"2015-06-03 21:51:30.000000000","message":"If I had to guess I would say that these are here because the update info cache method in rpcapi didn\u0027t send a full instance.  This may not be necessary any longer, but should probably be cleaned up in another patch if so.","commit_id":"59089501088a8130541f4530f718ee61cd0d8757"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"1fc80d10a0013c0156b84519d65b3b34bb62b943","unresolved":false,"context_lines":[{"line_number":965,"context_line":"                # start out in \u0027building\u0027 anyway.. but just in case."},{"line_number":966,"context_line":"                vm_states.BUILDING: [vm_states.BUILDING, None]}"},{"line_number":967,"context_line":""},{"line_number":968,"context_line":"        if instance.obj_attr_is_set(\u0027vm_state\u0027):"},{"line_number":969,"context_line":"            return expected_vm_state_map.get(instance.vm_state)"},{"line_number":970,"context_line":""},{"line_number":971,"context_line":"    def _get_expected_task_state(self, instance):"}],"source_content_type":"text/x-python","patch_set":12,"id":"5afe65bd_48164d56","line":968,"in_reply_to":"5afe65bd_e591a49a","updated":"2015-06-03 22:19:10.000000000","message":"You\u0027re right, please see my comment in nova/cells/rpcapi.py","commit_id":"59089501088a8130541f4530f718ee61cd0d8757"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"01a6bd0abc1098455c8216afa268310c0ff9d565","unresolved":false,"context_lines":[{"line_number":1024,"context_line":"        info_cache \u003d instance.pop(\u0027info_cache\u0027, None)"},{"line_number":1025,"context_line":"        if info_cache is not None:"},{"line_number":1026,"context_line":"            info_cache.pop(\u0027id\u0027, None)"},{"line_number":1027,"context_line":"            info_cache.pop(\u0027instance\u0027, None)"},{"line_number":1028,"context_line":""},{"line_number":1029,"context_line":"        if \u0027system_metadata\u0027 in instance:"},{"line_number":1030,"context_line":"            # Make sure we have the dict form that we need for"}],"source_content_type":"text/x-python","patch_set":13,"id":"3afb71cf_2adb7b1d","side":"PARENT","line":1027,"updated":"2015-06-04 20:07:52.000000000","message":"I guess the object move made it not necessary, right ?","commit_id":"e8b4eaa2a6c6d56dabe2908d105abfe97e289185"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"42b5ad8c503c1e091aaeafa6e9b182c1b15d2160","unresolved":false,"context_lines":[{"line_number":1024,"context_line":"        info_cache \u003d instance.pop(\u0027info_cache\u0027, None)"},{"line_number":1025,"context_line":"        if info_cache is not None:"},{"line_number":1026,"context_line":"            info_cache.pop(\u0027id\u0027, None)"},{"line_number":1027,"context_line":"            info_cache.pop(\u0027instance\u0027, None)"},{"line_number":1028,"context_line":""},{"line_number":1029,"context_line":"        if \u0027system_metadata\u0027 in instance:"},{"line_number":1030,"context_line":"            # Make sure we have the dict form that we need for"}],"source_content_type":"text/x-python","patch_set":13,"id":"3afb71cf_ed8e9d26","side":"PARENT","line":1027,"in_reply_to":"3afb71cf_2adb7b1d","updated":"2015-06-04 20:48:22.000000000","message":"Yes, that\u0027s right. The info_cache field in the instance object is itself an object with a save method, which will self.info_cache.save() if the field is dirty. The network_info hydrate stuff isn\u0027t necessary anymore when using the InstanceInfoCache object because its network_info field is of type NetworkModel which does the hydration in it.","commit_id":"e8b4eaa2a6c6d56dabe2908d105abfe97e289185"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"42b5ad8c503c1e091aaeafa6e9b182c1b15d2160","unresolved":false,"context_lines":[{"line_number":1060,"context_line":"            except exception.InstanceInfoCacheNotFound:"},{"line_number":1061,"context_line":"                # Can happen if we try to update a deleted instance\u0027s"},{"line_number":1062,"context_line":"                # network information."},{"line_number":1063,"context_line":"                pass"},{"line_number":1064,"context_line":""},{"line_number":1065,"context_line":"    def instance_destroy_at_top(self, message, instance, **kwargs):"},{"line_number":1066,"context_line":"        \"\"\"Destroy an instance from the DB if we\u0027re a top level cell.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"3afb71cf_2d815590","side":"PARENT","line":1063,"updated":"2015-06-04 20:48:22.000000000","message":"After explaining that, I\u0027m thinking maybe we still need to catch and ignore this InstanceInfoCacheNotFound.","commit_id":"e8b4eaa2a6c6d56dabe2908d105abfe97e289185"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"578227a21244d1d16d0e3d998199ca7c7beb26a5","unresolved":false,"context_lines":[{"line_number":1060,"context_line":"            except exception.InstanceInfoCacheNotFound:"},{"line_number":1061,"context_line":"                # Can happen if we try to update a deleted instance\u0027s"},{"line_number":1062,"context_line":"                # network information."},{"line_number":1063,"context_line":"                pass"},{"line_number":1064,"context_line":""},{"line_number":1065,"context_line":"    def instance_destroy_at_top(self, message, instance, **kwargs):"},{"line_number":1066,"context_line":"        \"\"\"Destroy an instance from the DB if we\u0027re a top level cell.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"3afb71cf_6b1a8319","side":"PARENT","line":1063,"in_reply_to":"3afb71cf_0bbc3e6b","updated":"2015-06-05 09:55:34.000000000","message":"Either we care about the Exception and then it would be catched in _save_info_cache() IMHO (and not there), or we consider that raising this exception is not a show-stopper (as you explained).\n\nI tend to agree with you on the latter.","commit_id":"e8b4eaa2a6c6d56dabe2908d105abfe97e289185"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"c507833585494c92fc0b164af604b05e4fd613ab","unresolved":false,"context_lines":[{"line_number":1060,"context_line":"            except exception.InstanceInfoCacheNotFound:"},{"line_number":1061,"context_line":"                # Can happen if we try to update a deleted instance\u0027s"},{"line_number":1062,"context_line":"                # network information."},{"line_number":1063,"context_line":"                pass"},{"line_number":1064,"context_line":""},{"line_number":1065,"context_line":"    def instance_destroy_at_top(self, message, instance, **kwargs):"},{"line_number":1066,"context_line":"        \"\"\"Destroy an instance from the DB if we\u0027re a top level cell.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"3afb71cf_01d3fd39","side":"PARENT","line":1063,"in_reply_to":"3afb71cf_0bbc3e6b","updated":"2015-06-10 21:20:19.000000000","message":"The distinction is the read_deleted\u003d\"yes\". I think the intent was to create the instance record if no record is found during db.instance_update even with reading deleted records. InstanceInfoCacheNotFound is raised when an info_cache record is found but is \"deleted\".","commit_id":"e8b4eaa2a6c6d56dabe2908d105abfe97e289185"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"bbe4a331eceacd87b95473f345ab24405f313ef4","unresolved":false,"context_lines":[{"line_number":1060,"context_line":"            except exception.InstanceInfoCacheNotFound:"},{"line_number":1061,"context_line":"                # Can happen if we try to update a deleted instance\u0027s"},{"line_number":1062,"context_line":"                # network information."},{"line_number":1063,"context_line":"                pass"},{"line_number":1064,"context_line":""},{"line_number":1065,"context_line":"    def instance_destroy_at_top(self, message, instance, **kwargs):"},{"line_number":1066,"context_line":"        \"\"\"Destroy an instance from the DB if we\u0027re a top level cell.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"3afb71cf_0bbc3e6b","side":"PARENT","line":1063,"in_reply_to":"3afb71cf_2d815590","updated":"2015-06-04 23:27:11.000000000","message":"Thinking about it more, I\u0027m not sure. These catches are to handle instance being deleted underneath us. In one case, NotFound creates the instance. In this other case, NotFound is just doing a pass. If I leave the patch the way it is, at least all NotFound will do the same thing, create the instance record.","commit_id":"e8b4eaa2a6c6d56dabe2908d105abfe97e289185"}],"nova/cells/rpcapi.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"08c93be7d559059932a45068ae3d6d7c4d72c328","unresolved":false,"context_lines":[{"line_number":205,"context_line":"        \"\"\"Destroy instance at API level.\"\"\""},{"line_number":206,"context_line":"        if not CONF.cells.enable:"},{"line_number":207,"context_line":"            return"},{"line_number":208,"context_line":"        instance_p \u003d jsonutils.to_primitive(instance)"},{"line_number":209,"context_line":"        self.client.cast(ctxt, \u0027instance_destroy_at_top\u0027, instance\u003dinstance_p)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def instance_delete_everywhere(self, ctxt, instance, delete_type):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1aca2d91_8cf7bb58","line":208,"updated":"2015-05-08 20:06:48.000000000","message":"This should be updated as well.","commit_id":"af5da1efd23e90ae68b7857bb2116798fb4a0cf5"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"77fb0164c7ac23a863bb5dd06cff54d2b1e7d6ab","unresolved":false,"context_lines":[{"line_number":205,"context_line":"        \"\"\"Destroy instance at API level.\"\"\""},{"line_number":206,"context_line":"        if not CONF.cells.enable:"},{"line_number":207,"context_line":"            return"},{"line_number":208,"context_line":"        instance_p \u003d jsonutils.to_primitive(instance)"},{"line_number":209,"context_line":"        self.client.cast(ctxt, \u0027instance_destroy_at_top\u0027, instance\u003dinstance_p)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def instance_delete_everywhere(self, ctxt, instance, delete_type):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1aca2d91_d2af8a28","line":208,"in_reply_to":"1aca2d91_8cf7bb58","updated":"2015-05-08 22:22:52.000000000","message":"Done","commit_id":"af5da1efd23e90ae68b7857bb2116798fb4a0cf5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bf4a0a7afaa693b1284f2d93b035cb4fad543b80","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        can handle the version_cap being set to 1.34."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        * 1.35 - Make instance_update_at_top and instance_destroy_at_top"},{"line_number":118,"context_line":"                 use instance objects"},{"line_number":119,"context_line":"    \u0027\u0027\u0027"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    VERSION_ALIASES \u003d {"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aca2d91_0f7f1816","line":118,"updated":"2015-05-08 23:41:08.000000000","message":"....and instance_info_cache_update_at_top() ?","commit_id":"4c906b9f8c92244e8693f12755f50b0a02ea2828"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"cf6d3a7b9789c4847610115bdcfefee9754e41ec","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        can handle the version_cap being set to 1.34."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        * 1.35 - Make instance_update_at_top and instance_destroy_at_top"},{"line_number":118,"context_line":"                 use instance objects"},{"line_number":119,"context_line":"    \u0027\u0027\u0027"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    VERSION_ALIASES \u003d {"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aca2d91_6f67ac4d","line":118,"in_reply_to":"1aca2d91_0f7f1816","updated":"2015-05-08 23:51:22.000000000","message":"Done","commit_id":"4c906b9f8c92244e8693f12755f50b0a02ea2828"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"1fc80d10a0013c0156b84519d65b3b34bb62b943","unresolved":false,"context_lines":[{"line_number":264,"context_line":"            instance \u003d objects_base.obj_to_primitive(instance)"},{"line_number":265,"context_line":"            version \u003d \u00271.34\u0027"},{"line_number":266,"context_line":"        cctxt \u003d self.client.prepare(version\u003dversion)"},{"line_number":267,"context_line":"        cctxt.cast(ctxt, \u0027instance_update_at_top\u0027, instance\u003dinstance)"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    def get_cell_info_for_neighbors(self, ctxt):"},{"line_number":270,"context_line":"        \"\"\"Get information about our neighbor cells from the manager.\"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"5afe65bd_133c0ac7","line":267,"updated":"2015-06-03 22:19:10.000000000","message":"This is the culprit. The instance_update_at_top in cells messaging is being leveraged to update the info cache too. First idea that comes to mind is a future patch where we add instance_info_cache_update_at_top to cells messaging and send only the info cache to that.","commit_id":"59089501088a8130541f4530f718ee61cd0d8757"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"512d85b65e4c76632201bac492307a6bd443d6c0","unresolved":false,"context_lines":[{"line_number":264,"context_line":"            instance \u003d objects_base.obj_to_primitive(instance)"},{"line_number":265,"context_line":"            version \u003d \u00271.34\u0027"},{"line_number":266,"context_line":"        cctxt \u003d self.client.prepare(version\u003dversion)"},{"line_number":267,"context_line":"        cctxt.cast(ctxt, \u0027instance_update_at_top\u0027, instance\u003dinstance)"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    def get_cell_info_for_neighbors(self, ctxt):"},{"line_number":270,"context_line":"        \"\"\"Get information about our neighbor cells from the manager.\"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"5afe65bd_43017569","line":267,"in_reply_to":"5afe65bd_133c0ac7","updated":"2015-06-04 14:12:16.000000000","message":"That seems like a good idea.  I\u0027m sure it was easier to do it this way when it was first implemented, but it is an odd way to do it.","commit_id":"59089501088a8130541f4530f718ee61cd0d8757"}],"nova/conductor/manager.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"5f3feca4bb4817c6cc8b878c93dea583bda97892","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        instance \u003d objects.Instance(context\u003dcontext, uuid\u003dinstance_uuid,"},{"line_number":124,"context_line":"                                    **updates)"},{"line_number":125,"context_line":"        instance.obj_reset_changes([\u0027uuid\u0027])"},{"line_number":126,"context_line":"        instance.save()"},{"line_number":127,"context_line":"        return nova_object.obj_to_primitive(instance)"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5afe65bd_c516a8f0","line":125,"updated":"2015-06-03 21:51:30.000000000","message":"Is this necessary?  I\u0027m curious because it\u0027s not done in the cells scheduler where a similar object save is done.","commit_id":"59089501088a8130541f4530f718ee61cd0d8757"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"512d85b65e4c76632201bac492307a6bd443d6c0","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        instance \u003d objects.Instance(context\u003dcontext, uuid\u003dinstance_uuid,"},{"line_number":124,"context_line":"                                    **updates)"},{"line_number":125,"context_line":"        instance.obj_reset_changes([\u0027uuid\u0027])"},{"line_number":126,"context_line":"        instance.save()"},{"line_number":127,"context_line":"        return nova_object.obj_to_primitive(instance)"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5afe65bd_a365c8b5","line":125,"in_reply_to":"5afe65bd_53de0240","updated":"2015-06-04 14:12:16.000000000","message":"Okay.  That\u0027s what I thought it would be.  Seems good to leave it here, I just wonder if it couldn\u0027t be excluded automatically by save() and only updated during a create().","commit_id":"59089501088a8130541f4530f718ee61cd0d8757"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"1fc80d10a0013c0156b84519d65b3b34bb62b943","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        instance \u003d objects.Instance(context\u003dcontext, uuid\u003dinstance_uuid,"},{"line_number":124,"context_line":"                                    **updates)"},{"line_number":125,"context_line":"        instance.obj_reset_changes([\u0027uuid\u0027])"},{"line_number":126,"context_line":"        instance.save()"},{"line_number":127,"context_line":"        return nova_object.obj_to_primitive(instance)"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5afe65bd_53de0240","line":125,"in_reply_to":"5afe65bd_c516a8f0","updated":"2015-06-03 22:19:10.000000000","message":"It is if you don\u0027t want the db.instance_update to save the uuid too. Instance updates are a little quirky with objects because you have to specify the uuid for it to find the record to update, but it will also update the uuid field if you don\u0027t tell it not to. That said, I don\u0027t think it really hurts to update the uuid field unnecessarily.","commit_id":"59089501088a8130541f4530f718ee61cd0d8757"}],"nova/db/api.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"08c93be7d559059932a45068ae3d6d7c4d72c328","unresolved":false,"context_lines":[{"line_number":745,"context_line":""},{"line_number":746,"context_line":"    \"\"\""},{"line_number":747,"context_line":"    rv \u003d IMPL.instance_update(context, instance_uuid, values)"},{"line_number":748,"context_line":"    if update_cells:"},{"line_number":749,"context_line":"        try:"},{"line_number":750,"context_line":"            instance \u003d objects.Instance._from_db_object(context,"},{"line_number":751,"context_line":"                                                        objects.Instance(),"}],"source_content_type":"text/x-python","patch_set":6,"id":"1aca2d91_8c01fb08","line":748,"updated":"2015-05-08 20:06:48.000000000","message":"We should be able to get away from this soon, if we can\u0027t yet.\n\nHeh, just noticed the comment on line #759.","commit_id":"af5da1efd23e90ae68b7857bb2116798fb4a0cf5"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"77fb0164c7ac23a863bb5dd06cff54d2b1e7d6ab","unresolved":false,"context_lines":[{"line_number":745,"context_line":""},{"line_number":746,"context_line":"    \"\"\""},{"line_number":747,"context_line":"    rv \u003d IMPL.instance_update(context, instance_uuid, values)"},{"line_number":748,"context_line":"    if update_cells:"},{"line_number":749,"context_line":"        try:"},{"line_number":750,"context_line":"            instance \u003d objects.Instance._from_db_object(context,"},{"line_number":751,"context_line":"                                                        objects.Instance(),"}],"source_content_type":"text/x-python","patch_set":6,"id":"1aca2d91_72be7666","line":748,"in_reply_to":"1aca2d91_8c01fb08","updated":"2015-05-08 22:22:52.000000000","message":"Good point. I\u0027ll check around for that","commit_id":"af5da1efd23e90ae68b7857bb2116798fb4a0cf5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bf4a0a7afaa693b1284f2d93b035cb4fad543b80","unresolved":false,"context_lines":[{"line_number":749,"context_line":"        try:"},{"line_number":750,"context_line":"            instance \u003d objects.Instance._from_db_object(context,"},{"line_number":751,"context_line":"                                                        objects.Instance(),"},{"line_number":752,"context_line":"                                                        rv)"},{"line_number":753,"context_line":"            cells_rpcapi.CellsAPI().instance_update_at_top(context, instance)"},{"line_number":754,"context_line":"        except Exception:"},{"line_number":755,"context_line":"            LOG.exception(_LE(\"Failed to notify cells of instance update\"))"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aca2d91_afbf04a9","line":752,"updated":"2015-05-08 23:41:08.000000000","message":"You\u0027re going to be missing things like system_metadata, etc.\n\nDoes this really work? Calls to instance_update() include only a few things, right? If so, then this _from_db_object() is horking on missing boring attributes and your except Exception below is hiding it.\n\nIf we do this as part of Instance.save(), do we still need this logic here?","commit_id":"4c906b9f8c92244e8693f12755f50b0a02ea2828"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"cf6d3a7b9789c4847610115bdcfefee9754e41ec","unresolved":false,"context_lines":[{"line_number":749,"context_line":"        try:"},{"line_number":750,"context_line":"            instance \u003d objects.Instance._from_db_object(context,"},{"line_number":751,"context_line":"                                                        objects.Instance(),"},{"line_number":752,"context_line":"                                                        rv)"},{"line_number":753,"context_line":"            cells_rpcapi.CellsAPI().instance_update_at_top(context, instance)"},{"line_number":754,"context_line":"        except Exception:"},{"line_number":755,"context_line":"            LOG.exception(_LE(\"Failed to notify cells of instance update\"))"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aca2d91_afe02497","line":752,"in_reply_to":"1aca2d91_afbf04a9","updated":"2015-05-08 23:51:22.000000000","message":"Hm. :(  I planned to check if we can remove this as a separate patch but since this would take more to get right, I\u0027ll figure it out now and maybe do a cleanup patch to precede this","commit_id":"4c906b9f8c92244e8693f12755f50b0a02ea2828"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bf4a0a7afaa693b1284f2d93b035cb4fad543b80","unresolved":false,"context_lines":[{"line_number":778,"context_line":"                                               columns_to_join\u003dcolumns_to_join)"},{"line_number":779,"context_line":"    if update_cells:"},{"line_number":780,"context_line":"        try:"},{"line_number":781,"context_line":"            instance \u003d objects.Instance._from_db_object(context,"},{"line_number":782,"context_line":"                                                        objects.Instance(),"},{"line_number":783,"context_line":"                                                        rv[1])"},{"line_number":784,"context_line":"            cells_rpcapi.CellsAPI().instance_update_at_top(context, instance)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aca2d91_8fdfa80c","line":781,"updated":"2015-05-08 23:41:08.000000000","message":"Same here.","commit_id":"4c906b9f8c92244e8693f12755f50b0a02ea2828"}],"nova/objects/instance.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"72bc9bbc3b685362d9e966cb11079c9c80d293ad","unresolved":false,"context_lines":[{"line_number":773,"context_line":""},{"line_number":774,"context_line":"        context \u003d self._context"},{"line_number":775,"context_line":"        cell_type \u003d cells_opts.get_cell_type()"},{"line_number":776,"context_line":"        if cell_type \u003d\u003d \u0027api\u0027 and self.cell_name:"},{"line_number":777,"context_line":"            # NOTE(comstud): We need to stash a copy of ourselves"},{"line_number":778,"context_line":"            # before any updates are applied.  When we call the save"},{"line_number":779,"context_line":"            # methods on nested objects, we will lose any changes to"}],"source_content_type":"text/x-python","patch_set":3,"id":"3acd31a7_80cb7372","line":776,"updated":"2015-04-29 19:30:29.000000000","message":"stale_instance is only set if this is true.  It could be set if cells are enabled and then used below.  It also currently acts as a flag that we made it past this if statement so that would need to be handled separately.","commit_id":"88b1d6f9bcb6372f6dc0ed18041b9fb7d03b7d1f"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"57c30fd1502a0a4d871aad77fce59dda65dc6daf","unresolved":false,"context_lines":[{"line_number":773,"context_line":""},{"line_number":774,"context_line":"        context \u003d self._context"},{"line_number":775,"context_line":"        cell_type \u003d cells_opts.get_cell_type()"},{"line_number":776,"context_line":"        if cell_type \u003d\u003d \u0027api\u0027 and self.cell_name:"},{"line_number":777,"context_line":"            # NOTE(comstud): We need to stash a copy of ourselves"},{"line_number":778,"context_line":"            # before any updates are applied.  When we call the save"},{"line_number":779,"context_line":"            # methods on nested objects, we will lose any changes to"}],"source_content_type":"text/x-python","patch_set":3,"id":"3acd31a7_69b6033f","line":776,"in_reply_to":"3acd31a7_80cb7372","updated":"2015-04-29 20:13:03.000000000","message":"Makes sense. I was thinking of cloning early on to avoid having to set the changed fields, but didn\u0027t want to clone if it wouldn\u0027t be needed. I didn\u0027t think to change stale_instance around a bit","commit_id":"88b1d6f9bcb6372f6dc0ed18041b9fb7d03b7d1f"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"72bc9bbc3b685362d9e966cb11079c9c80d293ad","unresolved":false,"context_lines":[{"line_number":867,"context_line":"        elif cell_type \u003d\u003d \u0027compute\u0027:"},{"line_number":868,"context_line":"            if self._sync_cells:"},{"line_number":869,"context_line":"                cells_api \u003d cells_rpcapi.CellsAPI()"},{"line_number":870,"context_line":"                new_ref \u003d self.obj_clone()"},{"line_number":871,"context_line":"                # NOTE(melwitt): Set changed fields for syncing cells since we"},{"line_number":872,"context_line":"                #                already reset ourselves in _from_db_object"},{"line_number":873,"context_line":"                new_ref._changed_fields \u003d set([x for x in changes"}],"source_content_type":"text/x-python","patch_set":3,"id":"3acd31a7_008d2331","line":870,"updated":"2015-04-29 19:30:29.000000000","message":"It should be possible to use stale_instance here.  I think everything would be preserved so that the save method at top would update properly.","commit_id":"88b1d6f9bcb6372f6dc0ed18041b9fb7d03b7d1f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bf4a0a7afaa693b1284f2d93b035cb4fad543b80","unresolved":false,"context_lines":[{"line_number":786,"context_line":"            # authoritative for their view of vm_state and task_state."},{"line_number":787,"context_line":"            stale_instance \u003d self.obj_clone()"},{"line_number":788,"context_line":""},{"line_number":789,"context_line":"        cells_update_from_api \u003d cell_type \u003d\u003d \u0027api\u0027 and self.cell_name"},{"line_number":790,"context_line":""},{"line_number":791,"context_line":"        if cells_update_from_api:"},{"line_number":792,"context_line":"            def _handle_cell_update_from_api():"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aca2d91_4ffcf071","line":789,"updated":"2015-05-08 23:41:08.000000000","message":"If you include self._sync_cells in this result, I think you can avoid the extra if statement in the closure below.","commit_id":"4c906b9f8c92244e8693f12755f50b0a02ea2828"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bf4a0a7afaa693b1284f2d93b035cb4fad543b80","unresolved":false,"context_lines":[{"line_number":790,"context_line":""},{"line_number":791,"context_line":"        if cells_update_from_api:"},{"line_number":792,"context_line":"            def _handle_cell_update_from_api():"},{"line_number":793,"context_line":"                if self._sync_cells:"},{"line_number":794,"context_line":"                    cells_api \u003d cells_rpcapi.CellsAPI()"},{"line_number":795,"context_line":"                    cells_api.instance_update_from_api(context, stale_instance,"},{"line_number":796,"context_line":"                            expected_vm_state,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aca2d91_cff00094","line":793,"updated":"2015-05-08 23:41:08.000000000","message":"here. This is impressively deeply nested. You didn\u0027t add it, but you\u0027re adding the new variable above that makes it easier to clean up. Just sayin\u0027 :)","commit_id":"4c906b9f8c92244e8693f12755f50b0a02ea2828"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"cf6d3a7b9789c4847610115bdcfefee9754e41ec","unresolved":false,"context_lines":[{"line_number":790,"context_line":""},{"line_number":791,"context_line":"        if cells_update_from_api:"},{"line_number":792,"context_line":"            def _handle_cell_update_from_api():"},{"line_number":793,"context_line":"                if self._sync_cells:"},{"line_number":794,"context_line":"                    cells_api \u003d cells_rpcapi.CellsAPI()"},{"line_number":795,"context_line":"                    cells_api.instance_update_from_api(context, stale_instance,"},{"line_number":796,"context_line":"                            expected_vm_state,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aca2d91_6ff56c55","line":793,"in_reply_to":"1aca2d91_cff00094","updated":"2015-05-08 23:51:22.000000000","message":"Haha, okay","commit_id":"4c906b9f8c92244e8693f12755f50b0a02ea2828"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"5f3feca4bb4817c6cc8b878c93dea583bda97892","unresolved":false,"context_lines":[{"line_number":668,"context_line":"            self._from_db_object(context, self, db_inst)"},{"line_number":669,"context_line":"            if cell_type \u003d\u003d \u0027compute\u0027:"},{"line_number":670,"context_line":"                cells_api \u003d cells_rpcapi.CellsAPI()"},{"line_number":671,"context_line":"                cells_api.instance_destroy_at_top(context, stale_instance)"},{"line_number":672,"context_line":"        except exception.ConstraintNotMet:"},{"line_number":673,"context_line":"            raise exception.ObjectActionError(action\u003d\u0027destroy\u0027,"},{"line_number":674,"context_line":"                                              reason\u003d\u0027host changed\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5afe65bd_4502b870","line":671,"updated":"2015-06-03 21:51:30.000000000","message":"This cells logic should move out of the try/except.  Even the _from_db_object should be outside of it, but that\u0027s not your doing.\n\nThis is my -1.","commit_id":"59089501088a8130541f4530f718ee61cd0d8757"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"1fc80d10a0013c0156b84519d65b3b34bb62b943","unresolved":false,"context_lines":[{"line_number":668,"context_line":"            self._from_db_object(context, self, db_inst)"},{"line_number":669,"context_line":"            if cell_type \u003d\u003d \u0027compute\u0027:"},{"line_number":670,"context_line":"                cells_api \u003d cells_rpcapi.CellsAPI()"},{"line_number":671,"context_line":"                cells_api.instance_destroy_at_top(context, stale_instance)"},{"line_number":672,"context_line":"        except exception.ConstraintNotMet:"},{"line_number":673,"context_line":"            raise exception.ObjectActionError(action\u003d\u0027destroy\u0027,"},{"line_number":674,"context_line":"                                              reason\u003d\u0027host changed\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5afe65bd_93bb5ae5","line":671,"in_reply_to":"5afe65bd_4502b870","updated":"2015-06-03 22:19:10.000000000","message":"Oops, good point. I\u0027ll move it out.","commit_id":"59089501088a8130541f4530f718ee61cd0d8757"}],"nova/objects/instance_info_cache.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"cf6d3a7b9789c4847610115bdcfefee9754e41ec","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            return"},{"line_number":81,"context_line":"        cells_api \u003d cells_rpcapi.CellsAPI()"},{"line_number":82,"context_line":"        try:"},{"line_number":83,"context_line":"            cells_api.instance_info_cache_update_at_top(ctxt, info_cache)"},{"line_number":84,"context_line":"        except Exception:"},{"line_number":85,"context_line":"            LOG.exception(_LE(\"Failed to notify cells of instance info \""},{"line_number":86,"context_line":"                              \"cache update\"))"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aca2d91_ef017c39","line":83,"updated":"2015-05-08 23:51:22.000000000","message":"This passes through to nova/cells/rpcapi.py so the changes are in there","commit_id":"4c906b9f8c92244e8693f12755f50b0a02ea2828"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bf4a0a7afaa693b1284f2d93b035cb4fad543b80","unresolved":false,"context_lines":[{"line_number":99,"context_line":"                                               {\u0027network_info\u0027: nw_info_json})"},{"line_number":100,"context_line":"            self._from_db_object(self._context, self, rv)"},{"line_number":101,"context_line":"            if update_cells:"},{"line_number":102,"context_line":"                self._info_cache_cells_update(self._context, stale_instance)"},{"line_number":103,"context_line":"        self.obj_reset_changes()"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    @base.remotable"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aca2d91_cf1ec0ba","line":102,"updated":"2015-05-08 23:41:08.000000000","message":"So, this is clearly a change in what we\u0027re passing to this function. However, I don\u0027t see where the change is made to account for that. Was this always wrong? If not, can you point me at where we\u0027re expecting this different thing now?","commit_id":"4c906b9f8c92244e8693f12755f50b0a02ea2828"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"054f96be39da15e87e6e2226bb42cbad0e2ef8d8","unresolved":false,"context_lines":[{"line_number":99,"context_line":"                                               {\u0027network_info\u0027: nw_info_json})"},{"line_number":100,"context_line":"            self._from_db_object(self._context, self, rv)"},{"line_number":101,"context_line":"            if update_cells:"},{"line_number":102,"context_line":"                self._info_cache_cells_update(self._context, stale_instance)"},{"line_number":103,"context_line":"        self.obj_reset_changes()"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    @base.remotable"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aca2d91_023dafc3","line":102,"in_reply_to":"1aca2d91_cf1ec0ba","updated":"2015-05-09 00:02:25.000000000","message":"I think maybe a comment here like this would  help:\n\n We need to send the dirty instance up to the other cells, so they can tell what \n needs to be saved in their databases too","commit_id":"4c906b9f8c92244e8693f12755f50b0a02ea2828"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"054f96be39da15e87e6e2226bb42cbad0e2ef8d8","unresolved":false,"context_lines":[{"line_number":99,"context_line":"                                               {\u0027network_info\u0027: nw_info_json})"},{"line_number":100,"context_line":"            self._from_db_object(self._context, self, rv)"},{"line_number":101,"context_line":"            if update_cells:"},{"line_number":102,"context_line":"                self._info_cache_cells_update(self._context, stale_instance)"},{"line_number":103,"context_line":"        self.obj_reset_changes()"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    @base.remotable"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aca2d91_625463fe","line":102,"in_reply_to":"1aca2d91_cf1ec0ba","updated":"2015-05-09 00:02:25.000000000","message":"I think maybe a comment here like this would  help:\n\n We need to send the dirty instance up to the other cells, so they can tell what \n needs to be saved in their databases too","commit_id":"4c906b9f8c92244e8693f12755f50b0a02ea2828"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"054f96be39da15e87e6e2226bb42cbad0e2ef8d8","unresolved":false,"context_lines":[{"line_number":99,"context_line":"                                               {\u0027network_info\u0027: nw_info_json})"},{"line_number":100,"context_line":"            self._from_db_object(self._context, self, rv)"},{"line_number":101,"context_line":"            if update_cells:"},{"line_number":102,"context_line":"                self._info_cache_cells_update(self._context, stale_instance)"},{"line_number":103,"context_line":"        self.obj_reset_changes()"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    @base.remotable"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aca2d91_e23993d8","line":102,"in_reply_to":"1aca2d91_cf1ec0ba","updated":"2015-05-09 00:02:25.000000000","message":"I think maybe a comment here like this would  help:\n\n We need to send the dirty instance up to the other cells, so they can tell what \n needs to be saved in their databases too","commit_id":"4c906b9f8c92244e8693f12755f50b0a02ea2828"}]}
