)]}'
{"nova/cmd/compute.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"fcdfd19ffd4c799eeb0628c02a9974a78278a44d","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    cmd_common.block_db_access(\u0027nova-compute\u0027)"},{"line_number":54,"context_line":"    objects_base.NovaObject.indirection_api \u003d conductor_rpcapi.ConductorAPI()"},{"line_number":55,"context_line":"    objects.Service.enable_min_version_cache()"},{"line_number":56,"context_line":"    server \u003d service.Service.create(binary\u003d\u0027nova-compute\u0027,"},{"line_number":57,"context_line":"                                    topic\u003dcompute_rpcapi.RPC_TOPIC)"},{"line_number":58,"context_line":"    service.serve(server)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f436f4f_4e3159a2","line":55,"updated":"2017-08-10 15:02:41.000000000","message":"nit: we should note that the cache is for the local cell v2 but anyway, looks good to me.","commit_id":"ddef9dcfc0f7b8f80c6f67f2bfcaf752558a7788"}],"nova/compute/resource_tracker.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"896be371b73b02fb96e1600553f831cb38fed8f7","unresolved":false,"context_lines":[{"line_number":1212,"context_line":"                    # we\u0027re in a deployment with Ocata computes which will just"},{"line_number":1213,"context_line":"                    # blow away allocations if the instance happened to land on"},{"line_number":1214,"context_line":"                    # them as the destination host in a move. What do we do?"},{"line_number":1215,"context_line":"                    continue"},{"line_number":1216,"context_line":""},{"line_number":1217,"context_line":"    def _find_orphaned_instances(self):"},{"line_number":1218,"context_line":"        \"\"\"Given the set of instances and migrations already account for"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f436f4f_7ed526b9","line":1215,"updated":"2017-08-08 20:48:15.000000000","message":"I\u0027m confused about your intention here. There\u0027s no functional change by moving the continue behind the conditional. Especially since we\u0027re at the end of the for loop and the stack of conditionals.\n\nSo I don\u0027t know what you\u0027re trying to do.","commit_id":"be7f47d5ed92972d0e6a611c5cede496420987f5"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2ca6013fbaf4054dd9fee8966c4018b62ad259a6","unresolved":false,"context_lines":[{"line_number":1212,"context_line":"                    # we\u0027re in a deployment with Ocata computes which will just"},{"line_number":1213,"context_line":"                    # blow away allocations if the instance happened to land on"},{"line_number":1214,"context_line":"                    # them as the destination host in a move. What do we do?"},{"line_number":1215,"context_line":"                    continue"},{"line_number":1216,"context_line":""},{"line_number":1217,"context_line":"    def _find_orphaned_instances(self):"},{"line_number":1218,"context_line":"        \"\"\"Given the set of instances and migrations already account for"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f436f4f_d9278cb6","line":1215,"in_reply_to":"9f436f4f_7ed526b9","updated":"2017-08-08 20:57:35.000000000","message":"The last sentence in the code comment says it all :)\n\n\"What do we do?\"\n\nThis is really a placeholder for discussion. I\u0027m not entirely sure what we need to do here, if anything.","commit_id":"be7f47d5ed92972d0e6a611c5cede496420987f5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"854288d69f076f6a4502c35cbeba2fa01233e124","unresolved":false,"context_lines":[{"line_number":1124,"context_line":"        # or a Queens compute host, we do NOT want the Pike compute host to"},{"line_number":1125,"context_line":"        # be \"healing\" allocation information. Instead, we rely on the Pike"},{"line_number":1126,"context_line":"        # scheduler to properly create allocations during scheduling."},{"line_number":1127,"context_line":"        compute_version \u003d objects.Service.get_minimum_version("},{"line_number":1128,"context_line":"            context, \u0027nova-compute\u0027)"},{"line_number":1129,"context_line":"        has_ocata_computes \u003d False"},{"line_number":1130,"context_line":"        if compute_version \u003c 22:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9f436f4f_4c31850b","line":1127,"range":{"start_line":1127,"start_character":26,"end_line":1127,"end_character":61},"updated":"2017-08-09 14:54:07.000000000","message":"Should we enable the cache for this, like:\n\nhttps://github.com/openstack/nova/blob/f09ff27dffd3930bbe2958eeec2b64f6d607fcdf/nova/cmd/scheduler.py#L40\n\n?\n\nOr do we want a fresh lookup every time? I suppose the latter since you wouldn\u0027t want to have to restart all of your nova-compute services just because your last Ocata compute service finally got upgraded, out of maybe thousands.","commit_id":"337f2c87fd588f680f1bb6653c754cfd2177d6ec"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"854288d69f076f6a4502c35cbeba2fa01233e124","unresolved":false,"context_lines":[{"line_number":1126,"context_line":"        # scheduler to properly create allocations during scheduling."},{"line_number":1127,"context_line":"        compute_version \u003d objects.Service.get_minimum_version("},{"line_number":1128,"context_line":"            context, \u0027nova-compute\u0027)"},{"line_number":1129,"context_line":"        has_ocata_computes \u003d False"},{"line_number":1130,"context_line":"        if compute_version \u003c 22:"},{"line_number":1131,"context_line":"            has_ocata_computes \u003d True"},{"line_number":1132,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9f436f4f_8cabed1b","line":1129,"range":{"start_line":1129,"start_character":8,"end_line":1129,"end_character":26},"updated":"2017-08-09 14:54:07.000000000","message":"The has_ocata_computes name is a bit misleading since version 21 was added in Pike, but I get the point. Maybe a better name would be requires_healing.","commit_id":"337f2c87fd588f680f1bb6653c754cfd2177d6ec"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6e6d77ad638170d7c7ed4f5d963bb96a907cf9ea","unresolved":false,"context_lines":[{"line_number":1126,"context_line":"        # scheduler to properly create allocations during scheduling."},{"line_number":1127,"context_line":"        compute_version \u003d objects.Service.get_minimum_version("},{"line_number":1128,"context_line":"            context, \u0027nova-compute\u0027)"},{"line_number":1129,"context_line":"        has_ocata_computes \u003d False"},{"line_number":1130,"context_line":"        if compute_version \u003c 22:"},{"line_number":1131,"context_line":"            has_ocata_computes \u003d True"},{"line_number":1132,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9f436f4f_c67d511d","line":1129,"range":{"start_line":1129,"start_character":8,"end_line":1129,"end_character":26},"in_reply_to":"9f436f4f_8cabed1b","updated":"2017-08-09 16:09:56.000000000","message":"Well, we\u0027re checking for \"ocata compute behavior\" which includes early pike things. I think it\u0027s less descriptive to say \"requires healing\" because it may require healing for some other reason. The big comment above covers us pretty comprehensively, no?","commit_id":"337f2c87fd588f680f1bb6653c754cfd2177d6ec"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"7e6b653b5fe4f48a9493f693de68878fad507b8d","unresolved":false,"context_lines":[{"line_number":1126,"context_line":"        # scheduler to properly create allocations during scheduling."},{"line_number":1127,"context_line":"        compute_version \u003d objects.Service.get_minimum_version("},{"line_number":1128,"context_line":"            context, \u0027nova-compute\u0027)"},{"line_number":1129,"context_line":"        has_ocata_computes \u003d False"},{"line_number":1130,"context_line":"        if compute_version \u003c 22:"},{"line_number":1131,"context_line":"            has_ocata_computes \u003d True"},{"line_number":1132,"context_line":""},{"line_number":1133,"context_line":"        for instance in instances:"},{"line_number":1134,"context_line":"            if instance.vm_state not in vm_states.ALLOW_RESOURCE_REMOVAL:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9f436f4f_46d7264d","line":1131,"range":{"start_line":1129,"start_character":8,"end_line":1131,"end_character":37},"updated":"2017-08-09 13:29:45.000000000","message":"simplify:\n\n  has_ocata_computes \u003d compute_version \u003c 22","commit_id":"337f2c87fd588f680f1bb6653c754cfd2177d6ec"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"7e6b653b5fe4f48a9493f693de68878fad507b8d","unresolved":false,"context_lines":[{"line_number":1136,"context_line":"                    has_ocata_computes\u003dhas_ocata_computes)"},{"line_number":1137,"context_line":""},{"line_number":1138,"context_line":"        self._remove_deleted_instances_allocations(context, cn,"},{"line_number":1139,"context_line":"            has_ocata_computes))"},{"line_number":1140,"context_line":""},{"line_number":1141,"context_line":"    def _remove_deleted_instances_allocations(self, context, cn,"},{"line_number":1142,"context_line":"            has_ocata_computes):"}],"source_content_type":"text/x-python","patch_set":7,"id":"9f436f4f_e6c5fa8f","line":1139,"range":{"start_line":1139,"start_character":30,"end_line":1139,"end_character":32},"updated":"2017-08-09 13:29:45.000000000","message":"woopsie","commit_id":"337f2c87fd588f680f1bb6653c754cfd2177d6ec"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"7e6b653b5fe4f48a9493f693de68878fad507b8d","unresolved":false,"context_lines":[{"line_number":1212,"context_line":"                    # we\u0027re in a deployment with Ocata computes which will just"},{"line_number":1213,"context_line":"                    # blow away allocations if the instance happened to land on"},{"line_number":1214,"context_line":"                    # them as the destination host in a move. What do we do?"},{"line_number":1215,"context_line":"                    continue"},{"line_number":1216,"context_line":""},{"line_number":1217,"context_line":"    def _find_orphaned_instances(self):"},{"line_number":1218,"context_line":"        \"\"\"Given the set of instances and migrations already account for"}],"source_content_type":"text/x-python","patch_set":7,"id":"9f436f4f_c647961d","line":1215,"updated":"2017-08-09 13:29:45.000000000","message":"I\u0027m not clear what this block does. It\u0027s at the bottom of the loop, so a continue is superfluous. If it doesn\u0027t have an ocata compute, then it will return to the top of the loop anyway.","commit_id":"337f2c87fd588f680f1bb6653c754cfd2177d6ec"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"25d4113893d8b9a64018b6658ea9c4ba2e69a8d5","unresolved":false,"context_lines":[{"line_number":1212,"context_line":"                    # we\u0027re in a deployment with Ocata computes which will just"},{"line_number":1213,"context_line":"                    # blow away allocations if the instance happened to land on"},{"line_number":1214,"context_line":"                    # them as the destination host in a move. What do we do?"},{"line_number":1215,"context_line":"                    continue"},{"line_number":1216,"context_line":""},{"line_number":1217,"context_line":"    def _find_orphaned_instances(self):"},{"line_number":1218,"context_line":"        \"\"\"Given the set of instances and migrations already account for"}],"source_content_type":"text/x-python","patch_set":7,"id":"9f436f4f_acd7d1bf","line":1215,"in_reply_to":"9f436f4f_3130da56","updated":"2017-08-09 14:48:16.000000000","message":"Yeah, as the last sentence in the code comment indicates, I was at a loss as to what to do here. It\u0027s essentially a placeholder for discussion, as noted in previous review comments with @cdent. I literally have no idea what, if anything, we need to do here...","commit_id":"337f2c87fd588f680f1bb6653c754cfd2177d6ec"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"edaced96145d368c0480709d7194e9983a58ad6b","unresolved":false,"context_lines":[{"line_number":1212,"context_line":"                    # we\u0027re in a deployment with Ocata computes which will just"},{"line_number":1213,"context_line":"                    # blow away allocations if the instance happened to land on"},{"line_number":1214,"context_line":"                    # them as the destination host in a move. What do we do?"},{"line_number":1215,"context_line":"                    continue"},{"line_number":1216,"context_line":""},{"line_number":1217,"context_line":"    def _find_orphaned_instances(self):"},{"line_number":1218,"context_line":"        \"\"\"Given the set of instances and migrations already account for"}],"source_content_type":"text/x-python","patch_set":7,"id":"9f436f4f_3130da56","line":1215,"in_reply_to":"9f436f4f_c647961d","updated":"2017-08-09 14:13:43.000000000","message":"I wonder if this is leftover from when jay was planning to make this a heal operation or something? Regardless, I think we probably have to mirror the ocata behavior when we\u0027re in their presence. We\u0027re doing that for the update, so we probably need to do it for delete too, right?","commit_id":"337f2c87fd588f680f1bb6653c754cfd2177d6ec"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ac0faf9e95440fe056b63e059c493ef27195c78e","unresolved":false,"context_lines":[{"line_number":1141,"context_line":"                          \"There are allocations remaining against the source \""},{"line_number":1142,"context_line":"                          \"host that might need to be removed: %s.\","},{"line_number":1143,"context_line":"                          instance_uuid, instance.host, instance.node, alloc)"},{"line_number":1144,"context_line":"                continue"},{"line_number":1145,"context_line":""},{"line_number":1146,"context_line":"    def _find_orphaned_instances(self):"},{"line_number":1147,"context_line":"        \"\"\"Given the set of instances and migrations already account for"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f436f4f_a72b62e9","side":"PARENT","line":1144,"updated":"2017-08-09 21:53:21.000000000","message":"OK this is just removed because it\u0027s vestigial as it\u0027s the last thing in here. I think it\u0027s fine to leave it so someone doesn\u0027t mess up later, especially since we don\u0027t yet have a test for this case, but it\u0027s not a big deal. I plan on adding the missing unit tests in a follow up.","commit_id":"5390210a4fa46e2af6b6aec9b41c03147b52760c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4aca5fe3a67bca8b3074bcd996e8baee8ed00903","unresolved":false,"context_lines":[{"line_number":1010,"context_line":"                continue"},{"line_number":1011,"context_line":""},{"line_number":1012,"context_line":"    def _update_usage_from_instance(self, context, instance, nodename,"},{"line_number":1013,"context_line":"            is_removed\u003dFalse, has_ocata_computes\u003dFalse):"},{"line_number":1014,"context_line":"        \"\"\"Update usage for a single instance.\"\"\""},{"line_number":1015,"context_line":""},{"line_number":1016,"context_line":"        uuid \u003d instance[\u0027uuid\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f436f4f_fbb8df2a","line":1013,"range":{"start_line":1013,"start_character":30,"end_line":1013,"end_character":48},"updated":"2017-08-10 00:54:03.000000000","message":"Do we have any unit tests where this is actually ever True? Seems like all of the resource tracker tests are mocking this out to always be False.","commit_id":"cb99b92ab768d3bf39d8e2fe3ab356fc27013d01"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"e1685d64e5f55683aa2af885bc0f70a81f02c25e","unresolved":false,"context_lines":[{"line_number":1010,"context_line":"                continue"},{"line_number":1011,"context_line":""},{"line_number":1012,"context_line":"    def _update_usage_from_instance(self, context, instance, nodename,"},{"line_number":1013,"context_line":"            is_removed\u003dFalse, has_ocata_computes\u003dFalse):"},{"line_number":1014,"context_line":"        \"\"\"Update usage for a single instance.\"\"\""},{"line_number":1015,"context_line":""},{"line_number":1016,"context_line":"        uuid \u003d instance[\u0027uuid\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f436f4f_df1f396e","line":1013,"in_reply_to":"9f436f4f_9bbf93cf","updated":"2017-08-10 12:43:17.000000000","message":"Some of it is coming via test_abort_claim, which reaches here with is_removed True,  and goes on through _update_usage, but it doesn\u0027t do it while has_ocata_computes is also True","commit_id":"cb99b92ab768d3bf39d8e2fe3ab356fc27013d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d4bebf13190da01828f97fb017111469acb7f7c4","unresolved":false,"context_lines":[{"line_number":1010,"context_line":"                continue"},{"line_number":1011,"context_line":""},{"line_number":1012,"context_line":"    def _update_usage_from_instance(self, context, instance, nodename,"},{"line_number":1013,"context_line":"            is_removed\u003dFalse, has_ocata_computes\u003dFalse):"},{"line_number":1014,"context_line":"        \"\"\"Update usage for a single instance.\"\"\""},{"line_number":1015,"context_line":""},{"line_number":1016,"context_line":"        uuid \u003d instance[\u0027uuid\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f436f4f_9bbf93cf","line":1013,"range":{"start_line":1013,"start_character":30,"end_line":1013,"end_character":48},"in_reply_to":"9f436f4f_fbb8df2a","updated":"2017-08-10 01:09:20.000000000","message":"The coverage report says we do, but it\u0027s not obvious to me.","commit_id":"cb99b92ab768d3bf39d8e2fe3ab356fc27013d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ac0faf9e95440fe056b63e059c493ef27195c78e","unresolved":false,"context_lines":[{"line_number":1039,"context_line":"                                                         instance,"},{"line_number":1040,"context_line":"                                                         sign\u003dsign)"},{"line_number":1041,"context_line":"            if has_ocata_computes:"},{"line_number":1042,"context_line":"                LOG.debug(\"We\u0027re on a Pike compute host in a deployment \""},{"line_number":1043,"context_line":"                          \"with Ocata compute hosts. Auto-correcting \""},{"line_number":1044,"context_line":"                          \"allocations to handle Ocata-style assumptions.\")"},{"line_number":1045,"context_line":"                self.reportclient.update_instance_allocation(cn, instance,"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f436f4f_e7928af6","line":1042,"range":{"start_line":1042,"start_character":38,"end_line":1042,"end_character":42},"updated":"2017-08-09 21:53:21.000000000","message":"When we get to Queens this is going to be confusing, unless this code is removed in Queens.","commit_id":"cb99b92ab768d3bf39d8e2fe3ab356fc27013d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ac0faf9e95440fe056b63e059c493ef27195c78e","unresolved":false,"context_lines":[{"line_number":1042,"context_line":"                LOG.debug(\"We\u0027re on a Pike compute host in a deployment \""},{"line_number":1043,"context_line":"                          \"with Ocata compute hosts. Auto-correcting \""},{"line_number":1044,"context_line":"                          \"allocations to handle Ocata-style assumptions.\")"},{"line_number":1045,"context_line":"                self.reportclient.update_instance_allocation(cn, instance,"},{"line_number":1046,"context_line":"                                                             sign)"},{"line_number":1047,"context_line":"            else:"},{"line_number":1048,"context_line":"                # NOTE(jaypipes): We\u0027re on a Pike compute host or later in"},{"line_number":1049,"context_line":"                # a deployment with all compute hosts upgraded to Pike or"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f436f4f_27b2d295","line":1046,"range":{"start_line":1045,"start_character":16,"end_line":1046,"end_character":66},"updated":"2017-08-09 21:53:21.000000000","message":"OK and this will overwrite the allocations from the Ocata source host, or the doubled up allocation from the scheduler, but it gets us to the eventually consistent correct state once the move operation is over, like I described when migrating from a Pike compute to an Ocata compute, right?","commit_id":"cb99b92ab768d3bf39d8e2fe3ab356fc27013d01"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"e1685d64e5f55683aa2af885bc0f70a81f02c25e","unresolved":false,"context_lines":[{"line_number":1043,"context_line":"                          \"with Ocata compute hosts. Auto-correcting \""},{"line_number":1044,"context_line":"                          \"allocations to handle Ocata-style assumptions.\")"},{"line_number":1045,"context_line":"                self.reportclient.update_instance_allocation(cn, instance,"},{"line_number":1046,"context_line":"                                                             sign)"},{"line_number":1047,"context_line":"            else:"},{"line_number":1048,"context_line":"                # NOTE(jaypipes): We\u0027re on a Pike compute host or later in"},{"line_number":1049,"context_line":"                # a deployment with all compute hosts upgraded to Pike or"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f436f4f_df08592e","line":1046,"in_reply_to":"9f436f4f_27b2d295","updated":"2017-08-10 12:43:17.000000000","message":"eventually","commit_id":"cb99b92ab768d3bf39d8e2fe3ab356fc27013d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ac0faf9e95440fe056b63e059c493ef27195c78e","unresolved":false,"context_lines":[{"line_number":1054,"context_line":"                # hosts have not attempted to overwrite allocations"},{"line_number":1055,"context_line":"                # **during the periodic update_available_resource() call**."},{"line_number":1056,"context_line":"                # However, Pike compute hosts may still rework an"},{"line_number":1057,"context_line":"                # allocation for an instance in a move operation during"},{"line_number":1058,"context_line":"                # confirm_resize() on the source host which will remove the"},{"line_number":1059,"context_line":"                # source resource provider from any allocation for an"},{"line_number":1060,"context_line":"                # instance."},{"line_number":1061,"context_line":"                #"},{"line_number":1062,"context_line":"                # In Queens and beyond, the scheduler will understand when"},{"line_number":1063,"context_line":"                # a move operation has been requested and instead of"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f436f4f_07722ee4","line":1060,"range":{"start_line":1057,"start_character":65,"end_line":1060,"end_character":27},"updated":"2017-08-09 21:53:21.000000000","message":"or revert_resize() on the destination host which will remove the destination resource provider from any allocation for an instance.","commit_id":"cb99b92ab768d3bf39d8e2fe3ab356fc27013d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ac0faf9e95440fe056b63e059c493ef27195c78e","unresolved":false,"context_lines":[{"line_number":1059,"context_line":"                # source resource provider from any allocation for an"},{"line_number":1060,"context_line":"                # instance."},{"line_number":1061,"context_line":"                #"},{"line_number":1062,"context_line":"                # In Queens and beyond, the scheduler will understand when"},{"line_number":1063,"context_line":"                # a move operation has been requested and instead of"},{"line_number":1064,"context_line":"                # creating a doubled-up allocation that contains both the"},{"line_number":1065,"context_line":"                # source and destination host, the scheduler will take the"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f436f4f_874f3e91","line":1062,"updated":"2017-08-09 21:53:21.000000000","message":"Should probably have a TODO here?","commit_id":"cb99b92ab768d3bf39d8e2fe3ab356fc27013d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dfc75e684cba18b6fbd5cfe80afd0013c211a39e","unresolved":false,"context_lines":[{"line_number":1083,"context_line":"        else:"},{"line_number":1084,"context_line":"            cn.pci_device_pools \u003d objects.PciDevicePoolList()"},{"line_number":1085,"context_line":""},{"line_number":1086,"context_line":"    def _update_usage_from_instances(self, context, instances, nodename):"},{"line_number":1087,"context_line":"        \"\"\"Calculate resource usage based on instance utilization.  This is"},{"line_number":1088,"context_line":"        different than the hypervisor\u0027s view as it will account for all"},{"line_number":1089,"context_line":"        instances assigned to the local compute host, even if they are not"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f436f4f_adac4f8c","line":1086,"range":{"start_line":1086,"start_character":8,"end_line":1086,"end_character":36},"updated":"2017-08-10 13:28:57.000000000","message":"OK so this is only called from the update_available_resource task. Looking at the evacuate flow, I think this is what would happen:\n\n1. The scheduler picks the destination host (this one) and doubles the allocations for both the source host (the down one that we\u0027re evacuating from) and this destination host.\n2. The dest compute creates a rebuild_claim. That does not actually update allocations in Placement. The rebuild_claim calls _move_claim which calls _update_usage_from_migration which calls _update_usage but none of that updates allocations in Placement. So the allocation on the dest compute is only going to be set by the scheduler *or* the periodic heal task, if there are still ocata computes in the deployment.\n\nIn talking about evacuate in IRC today, it wasn\u0027t clear to me that there is an assumption that if the admin forces a compute service down, then they are also expected to be powering off the compute host or fencing it some other way, maybe cutting the network or something. Given that, the downed compute host shouldn\u0027t be running it\u0027s update_available_resource periodic task and overwriting allocations during the evacuate - which is key.\n\nSo I think we\u0027re probably good here from an evacuate perspective. I still plan on writing a functional test for it, but I think for the most part this is OK.","commit_id":"cb99b92ab768d3bf39d8e2fe3ab356fc27013d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ac0faf9e95440fe056b63e059c493ef27195c78e","unresolved":false,"context_lines":[{"line_number":1113,"context_line":"        # update_instance_allocation() in the report client. That call will"},{"line_number":1114,"context_line":"        # pull the allocations for the instance UUID which will contain"},{"line_number":1115,"context_line":"        # both the source and destination host providers in the allocation"},{"line_number":1116,"context_line":"        # set. Seeing that this is different from what the Ocata source"},{"line_number":1117,"context_line":"        # host thinks it should be and will overwrite the allocation to"},{"line_number":1118,"context_line":"        # only be an allocation against itself."},{"line_number":1119,"context_line":"        #"},{"line_number":1120,"context_line":"        # And therefore, here we need to have Pike compute hosts"},{"line_number":1121,"context_line":"        # \"correct\" the improper healing that the Ocata source host did"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f436f4f_272892e0","line":1118,"range":{"start_line":1116,"start_character":15,"end_line":1118,"end_character":47},"updated":"2017-08-09 21:53:21.000000000","message":"Which is this:\n\nhttps://github.com/openstack/nova/blob/15.0.6/nova/scheduler/client/report.py#L655","commit_id":"cb99b92ab768d3bf39d8e2fe3ab356fc27013d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ac0faf9e95440fe056b63e059c493ef27195c78e","unresolved":false,"context_lines":[{"line_number":1120,"context_line":"        # And therefore, here we need to have Pike compute hosts"},{"line_number":1121,"context_line":"        # \"correct\" the improper healing that the Ocata source host did"},{"line_number":1122,"context_line":"        # during its periodic interval. When the instance is fully migrated"},{"line_number":1123,"context_line":"        # to the Pike compute host, the Ocata compute host will find an"},{"line_number":1124,"context_line":"        # allocation that refers to itself for an instance it no longer"},{"line_number":1125,"context_line":"        # controls and will *delete* all allocations that refer to that"},{"line_number":1126,"context_line":"        # instance UUID, assuming that the instance has been deleted. We"},{"line_number":1127,"context_line":"        # need the destination Pike compute host to recreate that"},{"line_number":1128,"context_line":"        # allocation to refer to its own resource provider UUID."},{"line_number":1129,"context_line":"        #"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f436f4f_8765fe47","line":1126,"range":{"start_line":1123,"start_character":36,"end_line":1126,"end_character":69},"updated":"2017-08-09 21:53:21.000000000","message":"Which is this:\n\nhttps://github.com/openstack/nova/blob/15.0.6/nova/compute/resource_tracker.py#L955\n\nhttps://github.com/openstack/nova/blob/15.0.6/nova/scheduler/client/report.py#L751","commit_id":"cb99b92ab768d3bf39d8e2fe3ab356fc27013d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ac0faf9e95440fe056b63e059c493ef27195c78e","unresolved":false,"context_lines":[{"line_number":1127,"context_line":"        # need the destination Pike compute host to recreate that"},{"line_number":1128,"context_line":"        # allocation to refer to its own resource provider UUID."},{"line_number":1129,"context_line":"        #"},{"line_number":1130,"context_line":"        # For Pike compute nodes that migrate to either a Pike compute host"},{"line_number":1131,"context_line":"        # or a Queens compute host, we do NOT want the Pike compute host to"},{"line_number":1132,"context_line":"        # be \"healing\" allocation information. Instead, we rely on the Pike"},{"line_number":1133,"context_line":"        # scheduler to properly create allocations during scheduling."},{"line_number":1134,"context_line":"        compute_version \u003d objects.Service.get_minimum_version("},{"line_number":1135,"context_line":"            context, \u0027nova-compute\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f436f4f_2704124a","line":1132,"range":{"start_line":1130,"start_character":10,"end_line":1132,"end_character":46},"updated":"2017-08-09 21:53:21.000000000","message":"What about instances that migrate from a Pike compute to an Ocata compute? In that case, the Ocata compute will just overwrite the doubled up allocation too as described above. I think in that case, we just rely on the \u0027eventually consistent\u0027 state of the update_available_resource task fixing things once the move operation is complete, and the scheduler is going to be making potentially inaccurate decisions until then since we\u0027ll have lost the doubled allocations for a time, making Placement think there is more inventory for scheduling than what\u0027s actually available.\n\nRIGHT?!","commit_id":"cb99b92ab768d3bf39d8e2fe3ab356fc27013d01"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"e1685d64e5f55683aa2af885bc0f70a81f02c25e","unresolved":false,"context_lines":[{"line_number":1129,"context_line":"        #"},{"line_number":1130,"context_line":"        # For Pike compute nodes that migrate to either a Pike compute host"},{"line_number":1131,"context_line":"        # or a Queens compute host, we do NOT want the Pike compute host to"},{"line_number":1132,"context_line":"        # be \"healing\" allocation information. Instead, we rely on the Pike"},{"line_number":1133,"context_line":"        # scheduler to properly create allocations during scheduling."},{"line_number":1134,"context_line":"        compute_version \u003d objects.Service.get_minimum_version("},{"line_number":1135,"context_line":"            context, \u0027nova-compute\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f436f4f_4209322a","line":1132,"in_reply_to":"9f436f4f_2704124a","updated":"2017-08-10 12:43:17.000000000","message":"that\u0027s my understanding","commit_id":"cb99b92ab768d3bf39d8e2fe3ab356fc27013d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ac0faf9e95440fe056b63e059c493ef27195c78e","unresolved":false,"context_lines":[{"line_number":1131,"context_line":"        # or a Queens compute host, we do NOT want the Pike compute host to"},{"line_number":1132,"context_line":"        # be \"healing\" allocation information. Instead, we rely on the Pike"},{"line_number":1133,"context_line":"        # scheduler to properly create allocations during scheduling."},{"line_number":1134,"context_line":"        compute_version \u003d objects.Service.get_minimum_version("},{"line_number":1135,"context_line":"            context, \u0027nova-compute\u0027)"},{"line_number":1136,"context_line":"        has_ocata_computes \u003d compute_version \u003c 22"},{"line_number":1137,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"9f436f4f_0a46b322","line":1134,"range":{"start_line":1134,"start_character":42,"end_line":1134,"end_character":61},"updated":"2017-08-09 21:53:21.000000000","message":"So this gets the minimum based on:\n\n@pick_context_manager_reader_allow_async\ndef service_get_minimum_version(context, binaries):\n    min_versions \u003d context.session.query(\n        models.Service.binary,\n        func.min(models.Service.version)).\\\n                         filter(models.Service.binary.in_(binaries)).\\\n                         filter(models.Service.deleted \u003d\u003d 0).\\\n                         filter(models.Service.forced_down \u003d\u003d false()).\\\n                         group_by(models.Service.binary)\n    return dict(min_versions)\n\nDo we have any issues with down Ocata computes and the instance is being evacuated to a Pike host? Assuming the service wasn\u0027t forced down to evacuate from it I mean, but it\u0027s just not reporting in to the service group API.\n\nI think in that case, has_ocata_computes would be True and we\u0027d \"heal\" the allocations by overwriting any existing allocations to be what the destination host says is the current allocations.\n\nBut what if I have all Pike computes except for some that are down, which are Ocata, and I force those down to evacuate from them. Then the minimum version is \u003e\u003d22 and we won\u0027t auto-heal in that case. I guess we just expect the scheduler to still intervene there since it\u0027s a move operation from a downed Ocata compute to a Pike compute. The scheduler would still double up the allocations even though the source compute is down, and those allocations won\u0027t be removed for that host.\n\nWhat if the downed Ocata compute is brought back up - will it overwrite any allocations for the destination host? I think the safeguard against that is this:\n\nhttps://github.com/openstack/nova/blob/15.0.6/nova/objects/service.py#L278\n\nSo the Ocata compute service shouldn\u0027t be allowed to come back up if everything else is Pike, and would blow up here:\n\nhttps://github.com/openstack/nova/blob/15.0.6/nova/service.py#L150","commit_id":"cb99b92ab768d3bf39d8e2fe3ab356fc27013d01"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"687ac020a1df2b7e361d96988a039c5ec8b6428f","unresolved":false,"context_lines":[{"line_number":1131,"context_line":"        # or a Queens compute host, we do NOT want the Pike compute host to"},{"line_number":1132,"context_line":"        # be \"healing\" allocation information. Instead, we rely on the Pike"},{"line_number":1133,"context_line":"        # scheduler to properly create allocations during scheduling."},{"line_number":1134,"context_line":"        compute_version \u003d objects.Service.get_minimum_version("},{"line_number":1135,"context_line":"            context, \u0027nova-compute\u0027)"},{"line_number":1136,"context_line":"        has_ocata_computes \u003d compute_version \u003c 22"},{"line_number":1137,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"9f436f4f_8d34fdfc","line":1134,"range":{"start_line":1134,"start_character":42,"end_line":1134,"end_character":61},"in_reply_to":"9f436f4f_0a46b322","updated":"2017-08-09 23:20:02.000000000","message":"Another thing I was thinking about here, is if I have an Ocata compute and force it down to evacuate from it, then it won\u0027t be considered in the min version check, and then if I change forced_down\u003dFalse again, that should fail here:\n\nhttps://github.com/openstack/nova/blob/15.0.6/nova/objects/service.py#L278\n\nBecause it should fail on save() of the service object. Which is good as we don\u0027t want that thing coming back, however, the nova-compute service for that Ocata compute would still be running and trampling on allocations wouldn\u0027t it? Could be a race, but seems like something that could happen if the service isn\u0027t actually stopped by just forced down to evacuate off it. I guess the idea with forcing it down and evacuating from it is you expect to stop it for maintenance or it\u0027s going to crash. And when you evacuate the instances off it, they should no longer be tracked, so their allocations don\u0027t get trampled.","commit_id":"cb99b92ab768d3bf39d8e2fe3ab356fc27013d01"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"fcdfd19ffd4c799eeb0628c02a9974a78278a44d","unresolved":false,"context_lines":[{"line_number":1070,"context_line":"                # instance UUID."},{"line_number":1071,"context_line":"                LOG.debug(\"We\u0027re on a Pike compute host in a deployment \""},{"line_number":1072,"context_line":"                          \"with all Pike compute hosts. Skipping \""},{"line_number":1073,"context_line":"                          \"auto-correction of allocations.\")"},{"line_number":1074,"context_line":""},{"line_number":1075,"context_line":"            # new instance, update compute node resource usage:"},{"line_number":1076,"context_line":"            self._update_usage(self._get_usage_dict(instance), nodename,"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f436f4f_cee1c9fe","line":1073,"updated":"2017-08-10 15:02:41.000000000","message":"should we really log one debug line per instance every 60 seconds ?\n\nhttp://logs.openstack.org/12/491012/11/check/gate-tempest-dsvm-neutron-full-ubuntu-xenial/6d9fb5d/logs/screen-n-cpu.txt.gz#_Aug_09_23_33_25_844493","commit_id":"ddef9dcfc0f7b8f80c6f67f2bfcaf752558a7788"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d2af53bf7bc5abcade11f87e36d693d3555dd1cf","unresolved":false,"context_lines":[{"line_number":1070,"context_line":"                # instance UUID."},{"line_number":1071,"context_line":"                LOG.debug(\"We\u0027re on a Pike compute host in a deployment \""},{"line_number":1072,"context_line":"                          \"with all Pike compute hosts. Skipping \""},{"line_number":1073,"context_line":"                          \"auto-correction of allocations.\")"},{"line_number":1074,"context_line":""},{"line_number":1075,"context_line":"            # new instance, update compute node resource usage:"},{"line_number":1076,"context_line":"            self._update_usage(self._get_usage_dict(instance), nodename,"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f436f4f_ee036d41","line":1073,"in_reply_to":"9f436f4f_ced549b9","updated":"2017-08-10 15:09:32.000000000","message":"Deal.","commit_id":"ddef9dcfc0f7b8f80c6f67f2bfcaf752558a7788"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c7c177c7774db52ccc5b4a33d177c252be036957","unresolved":false,"context_lines":[{"line_number":1070,"context_line":"                # instance UUID."},{"line_number":1071,"context_line":"                LOG.debug(\"We\u0027re on a Pike compute host in a deployment \""},{"line_number":1072,"context_line":"                          \"with all Pike compute hosts. Skipping \""},{"line_number":1073,"context_line":"                          \"auto-correction of allocations.\")"},{"line_number":1074,"context_line":""},{"line_number":1075,"context_line":"            # new instance, update compute node resource usage:"},{"line_number":1076,"context_line":"            self._update_usage(self._get_usage_dict(instance), nodename,"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f436f4f_ced549b9","line":1073,"in_reply_to":"9f436f4f_cee1c9fe","updated":"2017-08-10 15:08:41.000000000","message":"Deal with this in a follow up. We log tons of stuff all the time in periodics.","commit_id":"ddef9dcfc0f7b8f80c6f67f2bfcaf752558a7788"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"e25f4b98c4a7f24ecc8d0b9d61508e74b39848e0","unresolved":false,"context_lines":[{"line_number":1132,"context_line":"        # be \"healing\" allocation information. Instead, we rely on the Pike"},{"line_number":1133,"context_line":"        # scheduler to properly create allocations during scheduling."},{"line_number":1134,"context_line":"        compute_version \u003d objects.Service.get_minimum_version("},{"line_number":1135,"context_line":"            context, \u0027nova-compute\u0027)"},{"line_number":1136,"context_line":"        has_ocata_computes \u003d compute_version \u003c 22"},{"line_number":1137,"context_line":""},{"line_number":1138,"context_line":"        for instance in instances:"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f436f4f_cea9c9dd","line":1135,"updated":"2017-08-10 14:48:52.000000000","message":"In a cellv2-world, that\u0027s an upcall right? :-(","commit_id":"ddef9dcfc0f7b8f80c6f67f2bfcaf752558a7788"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7e37b21ba756b5e8f2db9a3668f84ff95f35fc9a","unresolved":false,"context_lines":[{"line_number":1132,"context_line":"        # be \"healing\" allocation information. Instead, we rely on the Pike"},{"line_number":1133,"context_line":"        # scheduler to properly create allocations during scheduling."},{"line_number":1134,"context_line":"        compute_version \u003d objects.Service.get_minimum_version("},{"line_number":1135,"context_line":"            context, \u0027nova-compute\u0027)"},{"line_number":1136,"context_line":"        has_ocata_computes \u003d compute_version \u003c 22"},{"line_number":1137,"context_line":""},{"line_number":1138,"context_line":"        for instance in instances:"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f436f4f_aeac458c","line":1135,"in_reply_to":"9f436f4f_2e0f35e2","updated":"2017-08-10 15:00:26.000000000","message":"What specific release? We don\u0027t support move operations across cells right now, at all, and likely won\u0027t for a long time. This allocation accounting code in the computes/RT will likely be gone by the time we ever support cross-cell migrations.","commit_id":"ddef9dcfc0f7b8f80c6f67f2bfcaf752558a7788"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"f39b06beeaffb5573ff6ed2e36380a679236c11c","unresolved":false,"context_lines":[{"line_number":1132,"context_line":"        # be \"healing\" allocation information. Instead, we rely on the Pike"},{"line_number":1133,"context_line":"        # scheduler to properly create allocations during scheduling."},{"line_number":1134,"context_line":"        compute_version \u003d objects.Service.get_minimum_version("},{"line_number":1135,"context_line":"            context, \u0027nova-compute\u0027)"},{"line_number":1136,"context_line":"        has_ocata_computes \u003d compute_version \u003c 22"},{"line_number":1137,"context_line":""},{"line_number":1138,"context_line":"        for instance in instances:"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f436f4f_2e0f35e2","line":1135,"in_reply_to":"9f436f4f_6e377db2","updated":"2017-08-10 14:55:59.000000000","message":"So, that works because we only support move operations from one host to another in the same cell v2, at least for *that* specific release.","commit_id":"ddef9dcfc0f7b8f80c6f67f2bfcaf752558a7788"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"f566d47cdfd44e961de8de09882990757e11d199","unresolved":false,"context_lines":[{"line_number":1132,"context_line":"        # be \"healing\" allocation information. Instead, we rely on the Pike"},{"line_number":1133,"context_line":"        # scheduler to properly create allocations during scheduling."},{"line_number":1134,"context_line":"        compute_version \u003d objects.Service.get_minimum_version("},{"line_number":1135,"context_line":"            context, \u0027nova-compute\u0027)"},{"line_number":1136,"context_line":"        has_ocata_computes \u003d compute_version \u003c 22"},{"line_number":1137,"context_line":""},{"line_number":1138,"context_line":"        for instance in instances:"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f436f4f_aee68543","line":1135,"in_reply_to":"9f436f4f_cea9c9dd","updated":"2017-08-10 14:51:03.000000000","message":"Lemme clarify my thoughts. Getting all the service versions from a specific compute node means that we need to verify all the cells from the local conductor, right? Then, it would be an upcall, nope ?","commit_id":"ddef9dcfc0f7b8f80c6f67f2bfcaf752558a7788"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6c0029da0b90e444645e82e408221a8089f2c5ce","unresolved":false,"context_lines":[{"line_number":1132,"context_line":"        # be \"healing\" allocation information. Instead, we rely on the Pike"},{"line_number":1133,"context_line":"        # scheduler to properly create allocations during scheduling."},{"line_number":1134,"context_line":"        compute_version \u003d objects.Service.get_minimum_version("},{"line_number":1135,"context_line":"            context, \u0027nova-compute\u0027)"},{"line_number":1136,"context_line":"        has_ocata_computes \u003d compute_version \u003c 22"},{"line_number":1137,"context_line":""},{"line_number":1138,"context_line":"        for instance in instances:"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f436f4f_6e377db2","line":1135,"in_reply_to":"9f436f4f_cea9c9dd","updated":"2017-08-10 14:52:24.000000000","message":"No. Services are per-cell. This is why we added microversion 2.53 to expose the uuid as the id in the REST API so you can uniquely identify services across cells.","commit_id":"ddef9dcfc0f7b8f80c6f67f2bfcaf752558a7788"}],"nova/tests/functional/test_servers.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ac0faf9e95440fe056b63e059c493ef27195c78e","unresolved":false,"context_lines":[{"line_number":1081,"context_line":""},{"line_number":1082,"context_line":"        self.useFixture(policy_fixture.RealPolicyFixture())"},{"line_number":1083,"context_line":"        self.useFixture(nova_fixtures.NeutronFixture(self))"},{"line_number":1084,"context_line":"        self.useFixture(nova_fixtures.AllServicesCurrent())"},{"line_number":1085,"context_line":""},{"line_number":1086,"context_line":"        placement \u003d self.useFixture(nova_fixtures.PlacementFixture())"},{"line_number":1087,"context_line":"        self.placement_api \u003d placement.api"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f436f4f_0af473ce","line":1084,"range":{"start_line":1084,"start_character":8,"end_line":1084,"end_character":59},"updated":"2017-08-09 21:53:21.000000000","message":"We really need a functional resize test with mixed computes to make me feel safe here, but that could come in a follow up.\n\nI\u0027d also really like a functional test with mixed computes doing an evacuate from an ocata compute to a pike compute, where we then try to bring the ocata compute back up and see what happens. Again, could be follow up.","commit_id":"cb99b92ab768d3bf39d8e2fe3ab356fc27013d01"}]}
