)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cee1b411e11bfeaeaa1175fe81981bbe6c472853","unresolved":false,"context_lines":[{"line_number":10,"context_line":"gives a 500 when the cell in which the instance lives is down"},{"line_number":11,"context_line":"to returning a partial construct consisting of uuid, project_id,"},{"line_number":12,"context_line":"created_at from instance_mappings table and user_id, flavor,"},{"line_number":13,"context_line":"image_ref and availability_zone info from request_specs table"},{"line_number":14,"context_line":"in the API database by introducing a new API microversion."},{"line_number":15,"context_line":"Note that the rest of the keys will be missing."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"3f79a3b5_e28f6f73","line":13,"updated":"2018-10-26 13:09:44.000000000","message":"The spec also says the power_state will be NOSTATE:\n\nhttps://specs.openstack.org/openstack/nova-specs/specs/stein/approved/handling-down-cell_new.html#proposed-change\n\nBut that\u0027s probably a detail for the view builder code later in the series.","commit_id":"d0ec8581b56b3f2471c54dc6fbc2280b75504765"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cee1b411e11bfeaeaa1175fe81981bbe6c472853","unresolved":false,"context_lines":[{"line_number":11,"context_line":"to returning a partial construct consisting of uuid, project_id,"},{"line_number":12,"context_line":"created_at from instance_mappings table and user_id, flavor,"},{"line_number":13,"context_line":"image_ref and availability_zone info from request_specs table"},{"line_number":14,"context_line":"in the API database by introducing a new API microversion."},{"line_number":15,"context_line":"Note that the rest of the keys will be missing."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Related to blueprint handling-down-cell"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"3f79a3b5_227a4775","line":14,"range":{"start_line":14,"start_character":20,"end_line":14,"end_character":58},"updated":"2018-10-26 13:09:44.000000000","message":"This change doesn\u0027t actually introduce the new microversion though, right? This is just plumbing. Let\u0027s be clear about that in the commit message.","commit_id":"d0ec8581b56b3f2471c54dc6fbc2280b75504765"}],"nova/api/openstack/compute/servers.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e8d898e2a5dbfbc6493b9b52dd3690739fc37aec","unresolved":false,"context_lines":[{"line_number":309,"context_line":"                                       instance_uuid,"},{"line_number":310,"context_line":"                                       expected_attrs\u003dexpected_attrs,"},{"line_number":311,"context_line":"                                       cell_down_support\u003dFalse)"},{"line_number":312,"context_line":"        req.cache_db_instance(instance)"},{"line_number":313,"context_line":"        return instance"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":15,"id":"3f79a3b5_115577f9","line":312,"updated":"2018-10-22 22:06:54.000000000","message":"I think this stuff has all been removed, looks like you need to rebase?","commit_id":"877ee5885ceae01e2733dbbbc3b00218f5fe1d4f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fa9ba33774bf4f3cf883689734c89ff8e77a17a0","unresolved":false,"context_lines":[{"line_number":309,"context_line":"                                       instance_uuid,"},{"line_number":310,"context_line":"                                       expected_attrs\u003dexpected_attrs,"},{"line_number":311,"context_line":"                                       cell_down_support\u003dFalse)"},{"line_number":312,"context_line":"        req.cache_db_instance(instance)"},{"line_number":313,"context_line":"        return instance"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":15,"id":"3f79a3b5_08fd3e06","line":312,"in_reply_to":"3f79a3b5_115577f9","updated":"2018-10-23 13:35:25.000000000","message":"I did a rebase and this is noise from it, yeah.","commit_id":"877ee5885ceae01e2733dbbbc3b00218f5fe1d4f"}],"nova/compute/api.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5959b090f8d87f4d09798517032f2a90053273c9","unresolved":false,"context_lines":[{"line_number":2320,"context_line":"                                cell_down_support):"},{"line_number":2321,"context_line":"        result \u003d nova_context.scatter_gather_cells(context, [im.cell_mapping],"},{"line_number":2322,"context_line":"            60, objects.Instance.get_by_uuid, uuid,"},{"line_number":2323,"context_line":"            expected_attrs\u003dexpected_attrs)"},{"line_number":2324,"context_line":"        instance \u003d None"},{"line_number":2325,"context_line":"        if (result[im.cell_mapping.uuid] not in"},{"line_number":2326,"context_line":"            (nova_context.did_not_respond_sentinel,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_e3c0407f","line":2323,"updated":"2018-08-21 15:17:08.000000000","message":"It took me a while to figure out what was going on here, but.. you\u0027re using scatter/gather to call a single cell in order to get the timeout/failed behavior. At a minimum I think a comment to that effect is needed, but it might also be good to create a single-cell variant of the scatter method, akin to the other two we have (skip_cell0 and all_cells) just so it\u0027s clear in the name (single_cell) what you\u0027re doing here.\n\nBut, if not, a comment at least :)","commit_id":"75893fb1d694823f199bf7102a6cde4b6f50ceaa"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"9d0f778f4e560a74a657e7f22c2b7327945d2e34","unresolved":false,"context_lines":[{"line_number":2320,"context_line":"                                cell_down_support):"},{"line_number":2321,"context_line":"        result \u003d nova_context.scatter_gather_cells(context, [im.cell_mapping],"},{"line_number":2322,"context_line":"            60, objects.Instance.get_by_uuid, uuid,"},{"line_number":2323,"context_line":"            expected_attrs\u003dexpected_attrs)"},{"line_number":2324,"context_line":"        instance \u003d None"},{"line_number":2325,"context_line":"        if (result[im.cell_mapping.uuid] not in"},{"line_number":2326,"context_line":"            (nova_context.did_not_respond_sentinel,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_fa645de7","line":2323,"in_reply_to":"3f79a3b5_e3c0407f","updated":"2018-08-22 11:19:56.000000000","message":"\u003e It took me a while to figure out what was going on here, but..\n \u003e you\u0027re using scatter/gather to call a single cell in order to get\n \u003e the timeout/failed behavior. At a minimum I think a comment to that\n \u003e effect is needed, but it might also be good to create a single-cell\n \u003e variant of the scatter method, akin to the other two we have\n \u003e (skip_cell0 and all_cells) just so it\u0027s clear in the name\n \u003e (single_cell) what you\u0027re doing here.\n \u003e \n\nack, I will do this :)\n\n \u003e But, if not, a comment at least :)","commit_id":"75893fb1d694823f199bf7102a6cde4b6f50ceaa"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5959b090f8d87f4d09798517032f2a90053273c9","unresolved":false,"context_lines":[{"line_number":2324,"context_line":"        instance \u003d None"},{"line_number":2325,"context_line":"        if (result[im.cell_mapping.uuid] not in"},{"line_number":2326,"context_line":"            (nova_context.did_not_respond_sentinel,"},{"line_number":2327,"context_line":"            nova_context.raised_exception_sentinel)):"},{"line_number":2328,"context_line":"                instance \u003d result[im.cell_mapping.uuid]"},{"line_number":2329,"context_line":"        elif cell_down_support:"},{"line_number":2330,"context_line":"            # instance in down cell, return a minimal construct"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_a34fa832","line":2327,"updated":"2018-08-21 15:17:08.000000000","message":"Over-indent these lines and not the body fo the block to be in line with the rest of our code.","commit_id":"75893fb1d694823f199bf7102a6cde4b6f50ceaa"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"9d0f778f4e560a74a657e7f22c2b7327945d2e34","unresolved":false,"context_lines":[{"line_number":2324,"context_line":"        instance \u003d None"},{"line_number":2325,"context_line":"        if (result[im.cell_mapping.uuid] not in"},{"line_number":2326,"context_line":"            (nova_context.did_not_respond_sentinel,"},{"line_number":2327,"context_line":"            nova_context.raised_exception_sentinel)):"},{"line_number":2328,"context_line":"                instance \u003d result[im.cell_mapping.uuid]"},{"line_number":2329,"context_line":"        elif cell_down_support:"},{"line_number":2330,"context_line":"            # instance in down cell, return a minimal construct"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_9a63e9dc","line":2327,"in_reply_to":"3f79a3b5_a34fa832","updated":"2018-08-22 11:19:56.000000000","message":"Done","commit_id":"75893fb1d694823f199bf7102a6cde4b6f50ceaa"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"574c6f9d94f82a65327fe06ce6675ae310f35545","unresolved":false,"context_lines":[{"line_number":2324,"context_line":"        instance \u003d None"},{"line_number":2325,"context_line":"        if (result[im.cell_mapping.uuid] not in"},{"line_number":2326,"context_line":"            (nova_context.did_not_respond_sentinel,"},{"line_number":2327,"context_line":"             nova_context.raised_exception_sentinel)):"},{"line_number":2328,"context_line":"                instance \u003d result[im.cell_mapping.uuid]"},{"line_number":2329,"context_line":"        elif cell_down_support:"},{"line_number":2330,"context_line":"            if im.queued_for_delete:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_be0e0b31","line":2327,"range":{"start_line":2327,"start_character":26,"end_line":2327,"end_character":51},"updated":"2018-09-25 16:11:03.000000000","message":"this is bad because it hides the InstanceNotFound exception which should not be hidden.","commit_id":"919608aaef3b8cbcce261e83ad28647d95a2e257"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"c8b6a3b8d529d7910e03ad58d5de0f381ded43f6","unresolved":false,"context_lines":[{"line_number":2341,"context_line":"                    flavor\u003drs.flavor, image_ref\u003drs.image.id,"},{"line_number":2342,"context_line":"                    availability_zone\u003drs.availability_zone)"},{"line_number":2343,"context_line":"        else:"},{"line_number":2344,"context_line":"            LOG.warning(\"Cell %s is not responding and hence instance \""},{"line_number":2345,"context_line":"                        \"info is not available.\", im.cell_mapping.uuid)"},{"line_number":2346,"context_line":"        return instance"},{"line_number":2347,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_82bd3869","line":2344,"updated":"2018-09-21 09:37:43.000000000","message":"legit test failures; I should be raising an exception here instead of returning a None instance.","commit_id":"919608aaef3b8cbcce261e83ad28647d95a2e257"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cee1b411e11bfeaeaa1175fe81981bbe6c472853","unresolved":false,"context_lines":[{"line_number":2395,"context_line":"        cell_uuid \u003d im.cell_mapping.uuid"},{"line_number":2396,"context_line":"        if not nova_context.is_cell_failure_sentinel(result[cell_uuid]):"},{"line_number":2397,"context_line":"            return result[cell_uuid]"},{"line_number":2398,"context_line":"        elif isinstance(result[cell_uuid], exception.InstanceNotFound):"},{"line_number":2399,"context_line":"            raise exception.InstanceNotFound(instance_id\u003duuid)"},{"line_number":2400,"context_line":"        elif cell_down_support:"},{"line_number":2401,"context_line":"            if im.queued_for_delete:"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f79a3b5_223d678c","line":2398,"range":{"start_line":2398,"start_character":8,"end_line":2398,"end_character":71},"updated":"2018-10-26 13:09:44.000000000","message":"Ah OK this is where being able to distinguish the results pays off.","commit_id":"d0ec8581b56b3f2471c54dc6fbc2280b75504765"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cee1b411e11bfeaeaa1175fe81981bbe6c472853","unresolved":false,"context_lines":[{"line_number":2401,"context_line":"            if im.queued_for_delete:"},{"line_number":2402,"context_line":"                # should be treated like deleted instance."},{"line_number":2403,"context_line":"                raise exception.InstanceNotFound(instance_id\u003duuid)"},{"line_number":2404,"context_line":"            else:"},{"line_number":2405,"context_line":"                # instance in down cell, return a minimal construct"},{"line_number":2406,"context_line":"                LOG.warning(\"Cell %s is not responding and hence only \""},{"line_number":2407,"context_line":"                            \"partial results are available from this \""}],"source_content_type":"text/x-python","patch_set":18,"id":"3f79a3b5_02538bdf","line":2404,"range":{"start_line":2404,"start_character":12,"end_line":2404,"end_character":17},"updated":"2018-10-26 13:09:44.000000000","message":"nit: don\u0027t need the else here because if is True above, we raise and won\u0027t hit the else block anyway. Could drop the intend that way. Mostly a style preference.","commit_id":"d0ec8581b56b3f2471c54dc6fbc2280b75504765"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cee1b411e11bfeaeaa1175fe81981bbe6c472853","unresolved":false,"context_lines":[{"line_number":2405,"context_line":"                # instance in down cell, return a minimal construct"},{"line_number":2406,"context_line":"                LOG.warning(\"Cell %s is not responding and hence only \""},{"line_number":2407,"context_line":"                            \"partial results are available from this \""},{"line_number":2408,"context_line":"                            \"cell.\", im.cell_mapping.uuid)"},{"line_number":2409,"context_line":"                try:"},{"line_number":2410,"context_line":"                    rs \u003d objects.RequestSpec.get_by_instance_uuid(context,"},{"line_number":2411,"context_line":"                                                                  uuid)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f79a3b5_8266bbbb","line":2408,"range":{"start_line":2408,"start_character":37,"end_line":2408,"end_character":57},"updated":"2018-10-26 13:09:44.000000000","message":"nit: re-use cell_uuid variable","commit_id":"d0ec8581b56b3f2471c54dc6fbc2280b75504765"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cee1b411e11bfeaeaa1175fe81981bbe6c472853","unresolved":false,"context_lines":[{"line_number":2409,"context_line":"                try:"},{"line_number":2410,"context_line":"                    rs \u003d objects.RequestSpec.get_by_instance_uuid(context,"},{"line_number":2411,"context_line":"                                                                  uuid)"},{"line_number":2412,"context_line":"                    return objects.Instance(context\u003dcontext, power_state\u003d0,"},{"line_number":2413,"context_line":"                        uuid\u003dim.instance_uuid, project_id\u003dim.project_id,"},{"line_number":2414,"context_line":"                        created_at\u003dim.created_at, user_id\u003drs.user_id,"},{"line_number":2415,"context_line":"                        flavor\u003drs.flavor, image_ref\u003drs.image.id,"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f79a3b5_42d0a32b","line":2412,"range":{"start_line":2412,"start_character":61,"end_line":2412,"end_character":74},"updated":"2018-10-26 13:09:44.000000000","message":"ack NOSTATE","commit_id":"d0ec8581b56b3f2471c54dc6fbc2280b75504765"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cee1b411e11bfeaeaa1175fe81981bbe6c472853","unresolved":false,"context_lines":[{"line_number":2410,"context_line":"                    rs \u003d objects.RequestSpec.get_by_instance_uuid(context,"},{"line_number":2411,"context_line":"                                                                  uuid)"},{"line_number":2412,"context_line":"                    return objects.Instance(context\u003dcontext, power_state\u003d0,"},{"line_number":2413,"context_line":"                        uuid\u003dim.instance_uuid, project_id\u003dim.project_id,"},{"line_number":2414,"context_line":"                        created_at\u003dim.created_at, user_id\u003drs.user_id,"},{"line_number":2415,"context_line":"                        flavor\u003drs.flavor, image_ref\u003drs.image.id,"},{"line_number":2416,"context_line":"                        availability_zone\u003drs.availability_zone)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f79a3b5_e2de8f3a","line":2413,"range":{"start_line":2413,"start_character":29,"end_line":2413,"end_character":45},"updated":"2018-10-26 13:09:44.000000000","message":"nit: re-use uuid variable","commit_id":"d0ec8581b56b3f2471c54dc6fbc2280b75504765"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cee1b411e11bfeaeaa1175fe81981bbe6c472853","unresolved":false,"context_lines":[{"line_number":2412,"context_line":"                    return objects.Instance(context\u003dcontext, power_state\u003d0,"},{"line_number":2413,"context_line":"                        uuid\u003dim.instance_uuid, project_id\u003dim.project_id,"},{"line_number":2414,"context_line":"                        created_at\u003dim.created_at, user_id\u003drs.user_id,"},{"line_number":2415,"context_line":"                        flavor\u003drs.flavor, image_ref\u003drs.image.id,"},{"line_number":2416,"context_line":"                        availability_zone\u003drs.availability_zone)"},{"line_number":2417,"context_line":"                except exception.RequestSpecNotFound:"},{"line_number":2418,"context_line":"                    # could be that a deleted instance whose request"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f79a3b5_82979b46","line":2415,"range":{"start_line":2415,"start_character":52,"end_line":2415,"end_character":63},"updated":"2018-10-26 13:09:44.000000000","message":"This is dangerous to assume rs.image is not null, because I think it can be for volume-backed servers. I know we\u0027ve hit this in the scheduler filters before:\n\nhttps://github.com/openstack/nova/blob/6256c60716dd7cedfcaf1557ba44de80a8de3d91/nova/scheduler/filters/isolated_hosts_filter.py#L65\n\n-1 for this.","commit_id":"d0ec8581b56b3f2471c54dc6fbc2280b75504765"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cee1b411e11bfeaeaa1175fe81981bbe6c472853","unresolved":false,"context_lines":[{"line_number":2415,"context_line":"                        flavor\u003drs.flavor, image_ref\u003drs.image.id,"},{"line_number":2416,"context_line":"                        availability_zone\u003drs.availability_zone)"},{"line_number":2417,"context_line":"                except exception.RequestSpecNotFound:"},{"line_number":2418,"context_line":"                    # could be that a deleted instance whose request"},{"line_number":2419,"context_line":"                    # spec has been archived is being queried."},{"line_number":2420,"context_line":"                    raise exception.InstanceNotFound(instance_id\u003duuid)"},{"line_number":2421,"context_line":"        else:"},{"line_number":2422,"context_line":"            raise exception.NovaException("}],"source_content_type":"text/x-python","patch_set":18,"id":"3f79a3b5_e219af22","line":2419,"range":{"start_line":2418,"start_character":20,"end_line":2419,"end_character":62},"updated":"2018-10-26 13:09:44.000000000","message":"Is it possible to archive the instance and request spec w/o the instance mapping?\n\nhttps://github.com/openstack/nova/blob/6256c60716dd7cedfcaf1557ba44de80a8de3d91/nova/cmd/manage.py#L558-L562\n\nI guess it\u0027s OK to be safe.","commit_id":"d0ec8581b56b3f2471c54dc6fbc2280b75504765"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cee1b411e11bfeaeaa1175fe81981bbe6c472853","unresolved":false,"context_lines":[{"line_number":2482,"context_line":"        return instance"},{"line_number":2483,"context_line":""},{"line_number":2484,"context_line":"    def get(self, context, instance_id, expected_attrs\u003dNone,"},{"line_number":2485,"context_line":"            cell_down_support\u003dFalse):"},{"line_number":2486,"context_line":"        \"\"\"Get a single instance with the given instance_id.\"\"\""},{"line_number":2487,"context_line":"        if not expected_attrs:"},{"line_number":2488,"context_line":"            expected_attrs \u003d []"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f79a3b5_a2dad772","line":2485,"range":{"start_line":2485,"start_character":12,"end_line":2485,"end_character":29},"updated":"2018-10-26 13:09:44.000000000","message":"nit: add this to the docstring like get_all below.","commit_id":"d0ec8581b56b3f2471c54dc6fbc2280b75504765"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"bcfd18be5d6b53e9a7a6b7f878e156fef8cf3eaf","unresolved":false,"context_lines":[{"line_number":2382,"context_line":"            inst_map \u003d None"},{"line_number":2383,"context_line":"        return inst_map"},{"line_number":2384,"context_line":""},{"line_number":2385,"context_line":"    def _get_instance_from_cell(self, context, im, uuid, expected_attrs,"},{"line_number":2386,"context_line":"                                cell_down_support):"},{"line_number":2387,"context_line":"        # NOTE(danms): Even though we\u0027re going to scatter/gather to the"},{"line_number":2388,"context_line":"        # right cell, other code depends on this being force targeted when"}],"source_content_type":"text/x-python","patch_set":19,"id":"3f79a3b5_9820634d","line":2385,"range":{"start_line":2385,"start_character":51,"end_line":2385,"end_character":55},"updated":"2018-10-26 20:04:39.000000000","message":"Urgh, the instance uuid is already part of InstanceMapping. Shouldn\u0027t we not have this passed in and instead:\n\n uuid \u003d im.instance_uuid","commit_id":"3572a6caf0887bb99a973cac470ec66f2c77e6e7"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"822a13a308642e9aa360c6e6ec558f3f045c4710","unresolved":false,"context_lines":[{"line_number":2382,"context_line":"            inst_map \u003d None"},{"line_number":2383,"context_line":"        return inst_map"},{"line_number":2384,"context_line":""},{"line_number":2385,"context_line":"    def _get_instance_from_cell(self, context, im, uuid, expected_attrs,"},{"line_number":2386,"context_line":"                                cell_down_support):"},{"line_number":2387,"context_line":"        # NOTE(danms): Even though we\u0027re going to scatter/gather to the"},{"line_number":2388,"context_line":"        # right cell, other code depends on this being force targeted when"}],"source_content_type":"text/x-python","patch_set":19,"id":"3f79a3b5_01149be9","line":2385,"range":{"start_line":2385,"start_character":51,"end_line":2385,"end_character":55},"in_reply_to":"3f79a3b5_9820634d","updated":"2018-10-31 14:02:33.000000000","message":"Done","commit_id":"3572a6caf0887bb99a973cac470ec66f2c77e6e7"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"bcfd18be5d6b53e9a7a6b7f878e156fef8cf3eaf","unresolved":false,"context_lines":[{"line_number":2387,"context_line":"        # NOTE(danms): Even though we\u0027re going to scatter/gather to the"},{"line_number":2388,"context_line":"        # right cell, other code depends on this being force targeted when"},{"line_number":2389,"context_line":"        # the get call returns."},{"line_number":2390,"context_line":"        nova_context.set_target_cell(context, im.cell_mapping)"},{"line_number":2391,"context_line":""},{"line_number":2392,"context_line":"        result \u003d nova_context.scatter_gather_single_cell(context,"},{"line_number":2393,"context_line":"            im.cell_mapping, objects.Instance.get_by_uuid, uuid,"}],"source_content_type":"text/x-python","patch_set":19,"id":"3f79a3b5_b8551fc3","line":2390,"updated":"2018-10-26 20:04:39.000000000","message":"Yarp, this is moving the previous set_target_cell up here which we indeed need because of how the REST API code works (get instance, do action with gotten targeted instance). And thanks for the code comment.","commit_id":"3572a6caf0887bb99a973cac470ec66f2c77e6e7"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"bcfd18be5d6b53e9a7a6b7f878e156fef8cf3eaf","unresolved":false,"context_lines":[{"line_number":2403,"context_line":"                raise exception.InstanceNotFound(instance_id\u003duuid)"},{"line_number":2404,"context_line":""},{"line_number":2405,"context_line":"            # instance in down cell, return a minimal construct"},{"line_number":2406,"context_line":"            LOG.warning(\"Cell %s is not responding and hence only \""},{"line_number":2407,"context_line":"                        \"partial results are available from this \""},{"line_number":2408,"context_line":"                        \"cell.\", cell_uuid)"},{"line_number":2409,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":19,"id":"3f79a3b5_b8b19f02","line":2406,"range":{"start_line":2406,"start_character":36,"end_line":2406,"end_character":50},"updated":"2018-10-26 20:04:39.000000000","message":"Not necessarily true, right? (I\u0027m concerned about potentially misleading operators). I\u0027m taking \"not responding\" to mean a timeout. It could also be that the cell raised an exception other than InstanceNotFound. But looks like exceptions are logged by nova_context.scatter_gather_cells itself so maybe not a big deal.","commit_id":"3572a6caf0887bb99a973cac470ec66f2c77e6e7"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"822a13a308642e9aa360c6e6ec558f3f045c4710","unresolved":false,"context_lines":[{"line_number":2403,"context_line":"                raise exception.InstanceNotFound(instance_id\u003duuid)"},{"line_number":2404,"context_line":""},{"line_number":2405,"context_line":"            # instance in down cell, return a minimal construct"},{"line_number":2406,"context_line":"            LOG.warning(\"Cell %s is not responding and hence only \""},{"line_number":2407,"context_line":"                        \"partial results are available from this \""},{"line_number":2408,"context_line":"                        \"cell.\", cell_uuid)"},{"line_number":2409,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":19,"id":"3f79a3b5_e1b95feb","line":2406,"range":{"start_line":2406,"start_character":36,"end_line":2406,"end_character":50},"in_reply_to":"3f79a3b5_b8b19f02","updated":"2018-10-31 14:02:33.000000000","message":"yea, scatter-gather anyways logs the exact exception of whether its a timeout or a raised exception.","commit_id":"3572a6caf0887bb99a973cac470ec66f2c77e6e7"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"822a13a308642e9aa360c6e6ec558f3f045c4710","unresolved":false,"context_lines":[{"line_number":2388,"context_line":""},{"line_number":2389,"context_line":"    def _get_instance_from_cell(self, context, im, uuid, expected_attrs,"},{"line_number":2390,"context_line":"                                cell_down_support):"},{"line_number":2391,"context_line":"        # NOTE(danms): Even though we\u0027re going to scatter/gather to the"},{"line_number":2392,"context_line":"        # right cell, other code depends on this being force targeted when"},{"line_number":2393,"context_line":"        # the get call returns."},{"line_number":2394,"context_line":"        nova_context.set_target_cell(context, im.cell_mapping)"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f79a3b5_e1b5dfd0","line":2391,"updated":"2018-10-31 14:02:33.000000000","message":"thanks dansmith, hadn\u0027t thought of this..","commit_id":"dd64c06a73f143ec34f2f2b30fd97e4c8b3b3de1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0fec18f56ed88ef065e4e3f17956ae4d68a2e2a2","unresolved":false,"context_lines":[{"line_number":2413,"context_line":"            try:"},{"line_number":2414,"context_line":"                rs \u003d objects.RequestSpec.get_by_instance_uuid(context,"},{"line_number":2415,"context_line":"                                                              uuid)"},{"line_number":2416,"context_line":"                image_ref \u003d rs.image.id if rs.image else None"},{"line_number":2417,"context_line":"                return objects.Instance(context\u003dcontext, power_state\u003d0,"},{"line_number":2418,"context_line":"                                        uuid\u003duuid,"},{"line_number":2419,"context_line":"                                        project_id\u003dim.project_id,"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f79a3b5_3357f0f7","line":2416,"range":{"start_line":2416,"start_character":16,"end_line":2416,"end_character":61},"updated":"2018-10-26 20:07:00.000000000","message":"I don\u0027t think this is good enough, because while rs.image can be set, rs.image.id might not be. For boot from volume, this is the call chain that sets this:\n\nhttps://github.com/openstack/nova/blob/9ef70d31f38ff76b11d1667a491935dd9cf15e77/nova/compute/api.py#L1148\n\nThat won\u0027t have the image id in it:\n\nhttps://github.com/openstack/nova/blob/9ef70d31f38ff76b11d1667a491935dd9cf15e77/nova/utils.py#L925\n\nAnd the request spec sets it from here:\n\nhttps://github.com/openstack/nova/blob/9ef70d31f38ff76b11d1667a491935dd9cf15e77/nova/compute/api.py#L881\n\nhttps://github.com/openstack/nova/blob/9ef70d31f38ff76b11d1667a491935dd9cf15e77/nova/objects/request_spec.py#L155\n\nhttps://github.com/openstack/nova/blob/9ef70d31f38ff76b11d1667a491935dd9cf15e77/nova/objects/image_meta.py#L80\n\nI remember this from making this fix:\n\nIeb8abb1a3f04ce008f9617e051e4d720dbe6917a","commit_id":"dd64c06a73f143ec34f2f2b30fd97e4c8b3b3de1"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"822a13a308642e9aa360c6e6ec558f3f045c4710","unresolved":false,"context_lines":[{"line_number":2413,"context_line":"            try:"},{"line_number":2414,"context_line":"                rs \u003d objects.RequestSpec.get_by_instance_uuid(context,"},{"line_number":2415,"context_line":"                                                              uuid)"},{"line_number":2416,"context_line":"                image_ref \u003d rs.image.id if rs.image else None"},{"line_number":2417,"context_line":"                return objects.Instance(context\u003dcontext, power_state\u003d0,"},{"line_number":2418,"context_line":"                                        uuid\u003duuid,"},{"line_number":2419,"context_line":"                                        project_id\u003dim.project_id,"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f79a3b5_41f133df","line":2416,"range":{"start_line":2416,"start_character":16,"end_line":2416,"end_character":61},"in_reply_to":"3f79a3b5_3357f0f7","updated":"2018-10-31 14:02:33.000000000","message":"okay, then we will set the image_ref only if rs.image.id exists, else we will put it to None.","commit_id":"dd64c06a73f143ec34f2f2b30fd97e4c8b3b3de1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2abc47bcfc24f5e1b35ce10df1663161c83a9d6a","unresolved":false,"context_lines":[{"line_number":2419,"context_line":"                # still not be set. So we check the existence of both image"},{"line_number":2420,"context_line":"                # and its id."},{"line_number":2421,"context_line":"                image_ref \u003d (rs.image.id if rs.image and"},{"line_number":2422,"context_line":"                             hasattr(rs.image, \u0027id\u0027) else None)"},{"line_number":2423,"context_line":"                return objects.Instance(context\u003dcontext, power_state\u003d0,"},{"line_number":2424,"context_line":"                                        uuid\u003duuid,"},{"line_number":2425,"context_line":"                                        project_id\u003dim.project_id,"}],"source_content_type":"text/x-python","patch_set":21,"id":"3f79a3b5_47005c04","line":2422,"range":{"start_line":2422,"start_character":29,"end_line":2422,"end_character":53},"updated":"2018-10-31 18:57:25.000000000","message":"This attempts to lazy-load the field, which won\u0027t work. You just need the same logic as in the IsolatedHostsFilter:\n\nimage_ref \u003d spec_obj.image.id \\\n            if spec_obj.image and \u0027id\u0027 in spec_obj.image else None","commit_id":"3f5459f3c022cca40e6dfcd11817e24719ad37ce"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e7f4c88eab35e3b0869ce7de9c435ca92da7648a","unresolved":false,"context_lines":[{"line_number":2419,"context_line":"                # still not be set. So we check the existence of both image"},{"line_number":2420,"context_line":"                # and its id."},{"line_number":2421,"context_line":"                image_ref \u003d (rs.image.id if rs.image and"},{"line_number":2422,"context_line":"                             hasattr(rs.image, \u0027id\u0027) else None)"},{"line_number":2423,"context_line":"                return objects.Instance(context\u003dcontext, power_state\u003d0,"},{"line_number":2424,"context_line":"                                        uuid\u003duuid,"},{"line_number":2425,"context_line":"                                        project_id\u003dim.project_id,"}],"source_content_type":"text/x-python","patch_set":21,"id":"3f79a3b5_72943442","line":2422,"range":{"start_line":2422,"start_character":29,"end_line":2422,"end_character":53},"in_reply_to":"3f79a3b5_47005c04","updated":"2018-10-31 19:21:58.000000000","message":"Done","commit_id":"3f5459f3c022cca40e6dfcd11817e24719ad37ce"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1bd8b2878e4502014b90a86424bf350a1928d858","unresolved":false,"context_lines":[{"line_number":2496,"context_line":"        return instance"},{"line_number":2497,"context_line":""},{"line_number":2498,"context_line":"    def get(self, context, instance_id, expected_attrs\u003dNone,"},{"line_number":2499,"context_line":"            cell_down_support\u003dFalse):"},{"line_number":2500,"context_line":"        \"\"\"Get a single instance with the given instance_id.\"\"\""},{"line_number":2501,"context_line":"        if not expected_attrs:"},{"line_number":2502,"context_line":"            expected_attrs \u003d []"}],"source_content_type":"text/x-python","patch_set":21,"id":"3f79a3b5_32fd5c07","line":2499,"range":{"start_line":2499,"start_character":12,"end_line":2499,"end_character":29},"updated":"2018-10-31 18:57:51.000000000","message":"nit: could docstring this as well like in get_all","commit_id":"3f5459f3c022cca40e6dfcd11817e24719ad37ce"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e7f4c88eab35e3b0869ce7de9c435ca92da7648a","unresolved":false,"context_lines":[{"line_number":2496,"context_line":"        return instance"},{"line_number":2497,"context_line":""},{"line_number":2498,"context_line":"    def get(self, context, instance_id, expected_attrs\u003dNone,"},{"line_number":2499,"context_line":"            cell_down_support\u003dFalse):"},{"line_number":2500,"context_line":"        \"\"\"Get a single instance with the given instance_id.\"\"\""},{"line_number":2501,"context_line":"        if not expected_attrs:"},{"line_number":2502,"context_line":"            expected_attrs \u003d []"}],"source_content_type":"text/x-python","patch_set":21,"id":"3f79a3b5_12838008","line":2499,"range":{"start_line":2499,"start_character":12,"end_line":2499,"end_character":29},"in_reply_to":"3f79a3b5_32fd5c07","updated":"2018-10-31 19:21:58.000000000","message":"Done","commit_id":"3f5459f3c022cca40e6dfcd11817e24719ad37ce"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f8a0e1914e9c0d90d65970347961dd3aa15a5934","unresolved":false,"context_lines":[{"line_number":2395,"context_line":"        nova_context.set_target_cell(context, im.cell_mapping)"},{"line_number":2396,"context_line":""},{"line_number":2397,"context_line":"        uuid \u003d im.instance_uuid"},{"line_number":2398,"context_line":"        result \u003d nova_context.scatter_gather_single_cell(context,"},{"line_number":2399,"context_line":"            im.cell_mapping, objects.Instance.get_by_uuid, uuid,"},{"line_number":2400,"context_line":"            expected_attrs\u003dexpected_attrs)"},{"line_number":2401,"context_line":"        cell_uuid \u003d im.cell_mapping.uuid"}],"source_content_type":"text/x-python","patch_set":22,"id":"3f79a3b5_ff079dc7","line":2398,"range":{"start_line":2398,"start_character":30,"end_line":2398,"end_character":56},"updated":"2018-11-01 16:09:07.000000000","message":"One thing I thought about later on this is will we have any weirdness with using eventlet here to run that single DB query? I know we\u0027re using scatter_gather_single_cell for the fault handling, I just worry about the eventlet stuff involved. But it doesn\u0027t seem to have been a problem up to this point when listing instances so I guess I shouldn\u0027t worry about this.","commit_id":"ef5aa8a818b18e4882b4ab5093c8f7db2ad0f7d1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"db7acfc8816b5814a597a655d33106605af05d12","unresolved":false,"context_lines":[{"line_number":2401,"context_line":"        cell_uuid \u003d im.cell_mapping.uuid"},{"line_number":2402,"context_line":"        if not nova_context.is_cell_failure_sentinel(result[cell_uuid]):"},{"line_number":2403,"context_line":"            return result[cell_uuid]"},{"line_number":2404,"context_line":"        elif isinstance(result[cell_uuid], exception.InstanceNotFound):"},{"line_number":2405,"context_line":"            raise exception.InstanceNotFound(instance_id\u003duuid)"},{"line_number":2406,"context_line":"        elif cell_down_support:"},{"line_number":2407,"context_line":"            if im.queued_for_delete:"},{"line_number":2408,"context_line":"                # should be treated like deleted instance."}],"source_content_type":"text/x-python","patch_set":22,"id":"3f79a3b5_3952d237","line":2405,"range":{"start_line":2404,"start_character":8,"end_line":2405,"end_character":62},"updated":"2018-11-20 22:15:26.000000000","message":"Looks like the scatter gather utility is logging failures even for expected cases:\n\nhttp://logs.openstack.org/58/591658/22/check/tempest-full/04cf08b/controller/logs/screen-n-api.txt.gz?level\u003dERROR","commit_id":"ef5aa8a818b18e4882b4ab5093c8f7db2ad0f7d1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e0216b0418ff6b53e17f2b2b303aaa22427fc9e0","unresolved":false,"context_lines":[{"line_number":2401,"context_line":"        cell_uuid \u003d im.cell_mapping.uuid"},{"line_number":2402,"context_line":"        if not nova_context.is_cell_failure_sentinel(result[cell_uuid]):"},{"line_number":2403,"context_line":"            return result[cell_uuid]"},{"line_number":2404,"context_line":"        elif isinstance(result[cell_uuid], exception.InstanceNotFound):"},{"line_number":2405,"context_line":"            raise exception.InstanceNotFound(instance_id\u003duuid)"},{"line_number":2406,"context_line":"        elif cell_down_support:"},{"line_number":2407,"context_line":"            if im.queued_for_delete:"},{"line_number":2408,"context_line":"                # should be treated like deleted instance."}],"source_content_type":"text/x-python","patch_set":22,"id":"3f79a3b5_2f14c4e9","line":2405,"range":{"start_line":2404,"start_character":8,"end_line":2405,"end_character":62},"in_reply_to":"3f79a3b5_3952d237","updated":"2018-11-21 00:14:57.000000000","message":"https://review.openstack.org/#/c/619110/","commit_id":"ef5aa8a818b18e4882b4ab5093c8f7db2ad0f7d1"}],"nova/tests/unit/compute/test_compute_api.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cee1b411e11bfeaeaa1175fe81981bbe6c472853","unresolved":false,"context_lines":[{"line_number":5750,"context_line":"        mock_get_inst.return_value \u003d objects.Instance(uuid\u003duuids.inst)"},{"line_number":5751,"context_line":"        result \u003d self.compute_api._get_instance_from_cell(self.context,"},{"line_number":5752,"context_line":"            im, uuids.inst, [], True)"},{"line_number":5753,"context_line":"        self.assertEqual(result.uuid, uuids.inst)"},{"line_number":5754,"context_line":"        mock_get_inst.assert_called_once()"},{"line_number":5755,"context_line":""},{"line_number":5756,"context_line":"    @mock.patch.object(objects.Instance, \u0027get_by_uuid\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f79a3b5_82d31b02","line":5753,"range":{"start_line":5753,"start_character":25,"end_line":5753,"end_character":48},"updated":"2018-10-26 13:09:44.000000000","message":"nit: swap the args (expected, actual)","commit_id":"d0ec8581b56b3f2471c54dc6fbc2280b75504765"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cee1b411e11bfeaeaa1175fe81981bbe6c472853","unresolved":false,"context_lines":[{"line_number":5755,"context_line":""},{"line_number":5756,"context_line":"    @mock.patch.object(objects.Instance, \u0027get_by_uuid\u0027)"},{"line_number":5757,"context_line":"    def test_get_instance_from_cell_failure(self, mock_get_inst):"},{"line_number":5758,"context_line":"        # case where cell_down_support\u003dFalse and instance doesn\u0027t exist."},{"line_number":5759,"context_line":"        mock_get_inst.side_effect \u003d exception.InstanceNotFound("},{"line_number":5760,"context_line":"            instance_id\u003duuids.inst)"},{"line_number":5761,"context_line":"        cell_mapping \u003d objects.CellMapping(uuid\u003duuids.cell1,"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f79a3b5_e2f1af97","line":5758,"range":{"start_line":5758,"start_character":21,"end_line":5758,"end_character":44},"updated":"2018-10-26 13:09:44.000000000","message":"I\u0027m not sure this really matters for this test does it? I don\u0027t think we get that far to check the variable.","commit_id":"d0ec8581b56b3f2471c54dc6fbc2280b75504765"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cee1b411e11bfeaeaa1175fe81981bbe6c472853","unresolved":false,"context_lines":[{"line_number":5775,"context_line":"        im1 \u003d objects.InstanceMapping(instance_uuid\u003duuids.inst,"},{"line_number":5776,"context_line":"                                      cell_mapping\u003dcell_mapping,"},{"line_number":5777,"context_line":"                                      queued_for_delete\u003dTrue)"},{"line_number":5778,"context_line":"        im2 \u003d objects.InstanceMapping(instance_uuid\u003duuids.inst,"},{"line_number":5779,"context_line":"                                      cell_mapping\u003dcell_mapping,"},{"line_number":5780,"context_line":"                                      queued_for_delete\u003dFalse,"},{"line_number":5781,"context_line":"                                      project_id\u003d\u0027fake\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f79a3b5_a2e737d7","line":5778,"range":{"start_line":5778,"start_character":52,"end_line":5778,"end_character":62},"updated":"2018-10-26 13:09:44.000000000","message":"Would make more sense to use a unique instance uuid here compared to im1.","commit_id":"d0ec8581b56b3f2471c54dc6fbc2280b75504765"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cee1b411e11bfeaeaa1175fe81981bbe6c472853","unresolved":false,"context_lines":[{"line_number":5778,"context_line":"        im2 \u003d objects.InstanceMapping(instance_uuid\u003duuids.inst,"},{"line_number":5779,"context_line":"                                      cell_mapping\u003dcell_mapping,"},{"line_number":5780,"context_line":"                                      queued_for_delete\u003dFalse,"},{"line_number":5781,"context_line":"                                      project_id\u003d\u0027fake\u0027,"},{"line_number":5782,"context_line":"                                      created_at\u003dNone)"},{"line_number":5783,"context_line":"        mock_sg.return_value \u003d {"},{"line_number":5784,"context_line":"            uuids.cell1: context.did_not_respond_sentinel"},{"line_number":5785,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f79a3b5_6214bf9f","line":5782,"range":{"start_line":5781,"start_character":38,"end_line":5782,"end_character":54},"updated":"2018-10-26 13:09:44.000000000","message":"OK we don\u0027t have to care about these other fields in im1 because that one has queued_for_delete\u003dTrue.","commit_id":"d0ec8581b56b3f2471c54dc6fbc2280b75504765"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cee1b411e11bfeaeaa1175fe81981bbe6c472853","unresolved":false,"context_lines":[{"line_number":5787,"context_line":"            self.compute_api._get_instance_from_cell, self.context,"},{"line_number":5788,"context_line":"            im1, uuids.inst, [], False)"},{"line_number":5789,"context_line":"        self.assertIn(\u0027info is not available\u0027, six.text_type(exp))"},{"line_number":5790,"context_line":"        exp \u003d self.assertRaises(exception.InstanceNotFound,"},{"line_number":5791,"context_line":"            self.compute_api._get_instance_from_cell, self.context,"},{"line_number":5792,"context_line":"            im1, uuids.inst, [], True)"},{"line_number":5793,"context_line":"        self.assertIn(\u0027could not be found\u0027, six.text_type(exp))"},{"line_number":5794,"context_line":"        mock_rs.side_effect \u003d exception.RequestSpecNotFound("},{"line_number":5795,"context_line":"            instance_uuid\u003duuids.inst)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f79a3b5_e2644f4f","line":5792,"range":{"start_line":5790,"start_character":8,"end_line":5792,"end_character":38},"updated":"2018-10-26 13:09:44.000000000","message":"I\u0027m not sure how we get this without resetting the mock_sg mock? Would be nice to have comments with each scenario.","commit_id":"d0ec8581b56b3f2471c54dc6fbc2280b75504765"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cee1b411e11bfeaeaa1175fe81981bbe6c472853","unresolved":false,"context_lines":[{"line_number":5805,"context_line":"                                       availability_zone\u003d\u0027nova\u0027)"},{"line_number":5806,"context_line":"        mock_rs.return_value \u003d req_spec"},{"line_number":5807,"context_line":"        mock_rs.side_effect \u003d None"},{"line_number":5808,"context_line":"        result \u003d self.compute_api._get_instance_from_cell(self.context,"},{"line_number":5809,"context_line":"            im2, uuids.inst, [], True)"},{"line_number":5810,"context_line":"        self.assertIn(\u0027user_id\u0027, result)"},{"line_number":5811,"context_line":"        self.assertNotIn(\u0027display_name\u0027, result)"},{"line_number":5812,"context_line":"        self.assertEqual(result.uuid, uuids.inst)"},{"line_number":5813,"context_line":"        self.assertEqual(result.availability_zone, \u0027nova\u0027)"},{"line_number":5814,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"3f79a3b5_22b48780","line":5811,"range":{"start_line":5808,"start_character":8,"end_line":5811,"end_character":48},"updated":"2018-10-26 13:09:44.000000000","message":"Could also check imageRef, power_state, project_id, created_at, and flavor.","commit_id":"d0ec8581b56b3f2471c54dc6fbc2280b75504765"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cee1b411e11bfeaeaa1175fe81981bbe6c472853","unresolved":false,"context_lines":[{"line_number":5809,"context_line":"            im2, uuids.inst, [], True)"},{"line_number":5810,"context_line":"        self.assertIn(\u0027user_id\u0027, result)"},{"line_number":5811,"context_line":"        self.assertNotIn(\u0027display_name\u0027, result)"},{"line_number":5812,"context_line":"        self.assertEqual(result.uuid, uuids.inst)"},{"line_number":5813,"context_line":"        self.assertEqual(result.availability_zone, \u0027nova\u0027)"},{"line_number":5814,"context_line":""},{"line_number":5815,"context_line":"    @mock.patch.object(objects.InstanceMapping, \u0027get_by_instance_uuid\u0027,"},{"line_number":5816,"context_line":"            side_effect\u003dexception.InstanceMappingNotFound(uuid\u003d\u0027fake\u0027))"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f79a3b5_a28657b6","line":5813,"range":{"start_line":5812,"start_character":8,"end_line":5813,"end_character":58},"updated":"2018-10-26 13:09:44.000000000","message":"nit: swap the args","commit_id":"d0ec8581b56b3f2471c54dc6fbc2280b75504765"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0fec18f56ed88ef065e4e3f17956ae4d68a2e2a2","unresolved":false,"context_lines":[{"line_number":5830,"context_line":"        self.assertEqual(\u0027nova\u0027, result.availability_zone)"},{"line_number":5831,"context_line":"        self.assertEqual(uuids.image, result.image_ref)"},{"line_number":5832,"context_line":""},{"line_number":5833,"context_line":"        # Same as above, but boot-from-volume"},{"line_number":5834,"context_line":"        req_spec.image \u003d None"},{"line_number":5835,"context_line":"        result \u003d self.compute_api._get_instance_from_cell(self.context,"},{"line_number":5836,"context_line":"            im2, uuids.inst2, [], True)"},{"line_number":5837,"context_line":"        self.assertIsNone(result.image_ref)"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f79a3b5_33acd0e9","line":5834,"range":{"start_line":5833,"start_character":8,"end_line":5834,"end_character":29},"updated":"2018-10-26 20:07:00.000000000","message":"As noted, for BFV RequestSpec.image will be set but won\u0027t have an id attribute set.","commit_id":"dd64c06a73f143ec34f2f2b30fd97e4c8b3b3de1"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"822a13a308642e9aa360c6e6ec558f3f045c4710","unresolved":false,"context_lines":[{"line_number":5830,"context_line":"        self.assertEqual(\u0027nova\u0027, result.availability_zone)"},{"line_number":5831,"context_line":"        self.assertEqual(uuids.image, result.image_ref)"},{"line_number":5832,"context_line":""},{"line_number":5833,"context_line":"        # Same as above, but boot-from-volume"},{"line_number":5834,"context_line":"        req_spec.image \u003d None"},{"line_number":5835,"context_line":"        result \u003d self.compute_api._get_instance_from_cell(self.context,"},{"line_number":5836,"context_line":"            im2, uuids.inst2, [], True)"},{"line_number":5837,"context_line":"        self.assertIsNone(result.image_ref)"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f79a3b5_2163d7ad","line":5834,"range":{"start_line":5833,"start_character":8,"end_line":5834,"end_character":29},"in_reply_to":"3f79a3b5_33acd0e9","updated":"2018-10-31 14:02:33.000000000","message":"Done","commit_id":"dd64c06a73f143ec34f2f2b30fd97e4c8b3b3de1"}]}
