)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ca2280d9098e7e1ac8e1768fd88f77b386bfa88c","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Surya Seetharaman \u003csuryaseetharaman.9@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2019-02-06 13:22:57 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Plumbing required in ViewBuilder to construct partial results"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch specifically adds the returning of the partial"},{"line_number":10,"context_line":"results in the ViewBuilder. Note that this will be enabled in"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9fdfeff1_239199f2","line":7,"range":{"start_line":7,"start_character":21,"end_line":7,"end_character":32},"updated":"2019-02-06 14:01:03.000000000","message":"servers ViewBuilder","commit_id":"95c01d25e95da9a5ad704e8f945f03a252b42ed5"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"6eb7cf0b8ac5c6657e0b990207326f33eca35a47","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Surya Seetharaman \u003csuryaseetharaman.9@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2019-02-06 13:22:57 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Plumbing required in ViewBuilder to construct partial results"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch specifically adds the returning of the partial"},{"line_number":10,"context_line":"results in the ViewBuilder. Note that this will be enabled in"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9fdfeff1_ea010f08","line":7,"range":{"start_line":7,"start_character":21,"end_line":7,"end_character":32},"in_reply_to":"9fdfeff1_239199f2","updated":"2019-02-07 10:13:41.000000000","message":"Done","commit_id":"95c01d25e95da9a5ad704e8f945f03a252b42ed5"}],"nova/api/openstack/compute/servers.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b8c32db59aa2f98fd128f55d2823d8b058bfeeb9","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        if is_detail:"},{"line_number":271,"context_line":"            instance_list._context \u003d context"},{"line_number":272,"context_line":"            instance_list.fill_faults()"},{"line_number":273,"context_line":"            response \u003d self._view_builder.detail(req, instance_list,"},{"line_number":274,"context_line":"                    cell_down_support\u003dcell_down_support)"},{"line_number":275,"context_line":"        else:"},{"line_number":276,"context_line":"            response \u003d self._view_builder.index(req, instance_list,"},{"line_number":277,"context_line":"                    cell_down_support\u003dcell_down_support)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_b2f6d1d6","line":274,"range":{"start_line":273,"start_character":49,"end_line":274,"end_character":56},"updated":"2019-02-12 14:07:20.000000000","message":"nit: the alignment here bugs me, I\u0027d drop the whole line down together but that\u0027s just me","commit_id":"87f4b2365837fc97175bcdefa2499ea23d92c948"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"a3be02e763ea1729a591a7efcbaf6bac4add96fd","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        if is_detail:"},{"line_number":271,"context_line":"            instance_list._context \u003d context"},{"line_number":272,"context_line":"            instance_list.fill_faults()"},{"line_number":273,"context_line":"            response \u003d self._view_builder.detail(req, instance_list,"},{"line_number":274,"context_line":"                    cell_down_support\u003dcell_down_support)"},{"line_number":275,"context_line":"        else:"},{"line_number":276,"context_line":"            response \u003d self._view_builder.index(req, instance_list,"},{"line_number":277,"context_line":"                    cell_down_support\u003dcell_down_support)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_8d8930cb","line":274,"range":{"start_line":273,"start_character":49,"end_line":274,"end_character":56},"in_reply_to":"9fdfeff1_b2f6d1d6","updated":"2019-02-12 15:36:08.000000000","message":"Done","commit_id":"87f4b2365837fc97175bcdefa2499ea23d92c948"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b8c32db59aa2f98fd128f55d2823d8b058bfeeb9","unresolved":false,"context_lines":[{"line_number":393,"context_line":"        context.can(server_policies.SERVERS % \u0027show\u0027)"},{"line_number":394,"context_line":"        instance \u003d self._get_server(context, req, id, is_detail\u003dTrue)"},{"line_number":395,"context_line":"        return self._view_builder.show(req, instance,"},{"line_number":396,"context_line":"                                       cell_down_support\u003dFalse)"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"    @wsgi.response(202)"},{"line_number":399,"context_line":"    @wsgi.expected_errors((400, 403, 409))"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_b21fb106","line":396,"range":{"start_line":396,"start_character":39,"end_line":396,"end_character":56},"updated":"2019-02-12 14:07:20.000000000","message":"self._get_server() is also hard-coding this when calling compute API.get() so in the patch that adds the microversion it would be nice to only have to check the microversion once for GET /servers/{server_id} which would mean checking that in this method and passing the cell_down_support flag to the _get_server() method.","commit_id":"87f4b2365837fc97175bcdefa2499ea23d92c948"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"a3be02e763ea1729a591a7efcbaf6bac4add96fd","unresolved":false,"context_lines":[{"line_number":393,"context_line":"        context.can(server_policies.SERVERS % \u0027show\u0027)"},{"line_number":394,"context_line":"        instance \u003d self._get_server(context, req, id, is_detail\u003dTrue)"},{"line_number":395,"context_line":"        return self._view_builder.show(req, instance,"},{"line_number":396,"context_line":"                                       cell_down_support\u003dFalse)"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"    @wsgi.response(202)"},{"line_number":399,"context_line":"    @wsgi.expected_errors((400, 403, 409))"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_6d7accba","line":396,"range":{"start_line":396,"start_character":39,"end_line":396,"end_character":56},"in_reply_to":"9fdfeff1_b21fb106","updated":"2019-02-12 15:36:08.000000000","message":"Done","commit_id":"87f4b2365837fc97175bcdefa2499ea23d92c948"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"250bb6438a6f3c7c57729c123c1d3c3697286d3f","unresolved":false,"context_lines":[{"line_number":396,"context_line":"        \"\"\"Returns server details by server id.\"\"\""},{"line_number":397,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":398,"context_line":"        context.can(server_policies.SERVERS % \u0027show\u0027)"},{"line_number":399,"context_line":"        instance \u003d self._get_server("},{"line_number":400,"context_line":"            context, req, id, is_detail\u003dTrue, cell_down_support\u003dFalse)"},{"line_number":401,"context_line":"        return self._view_builder.show("},{"line_number":402,"context_line":"            req, instance, cell_down_support\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":9,"id":"9fdfeff1_c9e71e12","line":399,"updated":"2019-02-13 01:17:05.000000000","message":"nit: I was a little confused because this doesn\u0027t contain the chage  related to v2.69. It would be nice to contain NOTE/TODO for next patch.","commit_id":"684e4ffc522c6e0f6079308274b1899046e45120"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"1d0d071da92dc77df1b8ad1dfd30972c7da906ef","unresolved":false,"context_lines":[{"line_number":396,"context_line":"        \"\"\"Returns server details by server id.\"\"\""},{"line_number":397,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":398,"context_line":"        context.can(server_policies.SERVERS % \u0027show\u0027)"},{"line_number":399,"context_line":"        instance \u003d self._get_server("},{"line_number":400,"context_line":"            context, req, id, is_detail\u003dTrue, cell_down_support\u003dFalse)"},{"line_number":401,"context_line":"        return self._view_builder.show("},{"line_number":402,"context_line":"            req, instance, cell_down_support\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":9,"id":"9fdfeff1_24928c58","line":399,"in_reply_to":"9fdfeff1_c9e71e12","updated":"2019-02-13 09:33:07.000000000","message":"Done","commit_id":"684e4ffc522c6e0f6079308274b1899046e45120"}],"nova/api/openstack/compute/views/servers.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ca2280d9098e7e1ac8e1768fd88f77b386bfa88c","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                # information from the request_spec of the instance like"},{"line_number":166,"context_line":"                # its flavor, image, avz, and user_id in addition to the"},{"line_number":167,"context_line":"                # basic information from its instance_mapping."},{"line_number":168,"context_line":"                avz \u003d instance.availability_zone"},{"line_number":169,"context_line":"                context \u003d request.environ[\u0027nova.context\u0027]"},{"line_number":170,"context_line":"                show_extra_specs \u003d context.can("},{"line_number":171,"context_line":"                    fes_policies.POLICY_ROOT % \u0027index\u0027, fatal\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_03f4955a","line":168,"range":{"start_line":168,"start_character":16,"end_line":168,"end_character":48},"updated":"2019-02-06 14:01:03.000000000","message":"This is where I\u0027d handle None:\n\navz \u003d instance.availability_zone or \"UNKNOWN\"","commit_id":"95c01d25e95da9a5ad704e8f945f03a252b42ed5"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"6eb7cf0b8ac5c6657e0b990207326f33eca35a47","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                # information from the request_spec of the instance like"},{"line_number":166,"context_line":"                # its flavor, image, avz, and user_id in addition to the"},{"line_number":167,"context_line":"                # basic information from its instance_mapping."},{"line_number":168,"context_line":"                avz \u003d instance.availability_zone"},{"line_number":169,"context_line":"                context \u003d request.environ[\u0027nova.context\u0027]"},{"line_number":170,"context_line":"                show_extra_specs \u003d context.can("},{"line_number":171,"context_line":"                    fes_policies.POLICY_ROOT % \u0027index\u0027, fatal\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_8a5f23e4","line":168,"range":{"start_line":168,"start_character":16,"end_line":168,"end_character":48},"in_reply_to":"9fdfeff1_03f4955a","updated":"2019-02-07 10:13:41.000000000","message":"Done","commit_id":"95c01d25e95da9a5ad704e8f945f03a252b42ed5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ca2280d9098e7e1ac8e1768fd88f77b386bfa88c","unresolved":false,"context_lines":[{"line_number":469,"context_line":""},{"line_number":470,"context_line":"    def _get_flavor(self, request, instance, show_extra_specs,"},{"line_number":471,"context_line":"                    cell_down_support\u003dFalse):"},{"line_number":472,"context_line":"        if cell_down_support:"},{"line_number":473,"context_line":"            # NOTE(tssurya): From microversion 2.68 we handle down cells for"},{"line_number":474,"context_line":"            # which we may get partial constructs with certain keys like"},{"line_number":475,"context_line":"            # ``flavor`` for the ``GET /servers{server_id}`` request for the"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_23fc393d","line":472,"updated":"2019-02-06 14:01:03.000000000","message":"See comments in:\n\nhttps://review.openstack.org/#/c/591657/29/nova/api/openstack/compute/views/servers.py@507","commit_id":"95c01d25e95da9a5ad704e8f945f03a252b42ed5"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"6eb7cf0b8ac5c6657e0b990207326f33eca35a47","unresolved":false,"context_lines":[{"line_number":469,"context_line":""},{"line_number":470,"context_line":"    def _get_flavor(self, request, instance, show_extra_specs,"},{"line_number":471,"context_line":"                    cell_down_support\u003dFalse):"},{"line_number":472,"context_line":"        if cell_down_support:"},{"line_number":473,"context_line":"            # NOTE(tssurya): From microversion 2.68 we handle down cells for"},{"line_number":474,"context_line":"            # which we may get partial constructs with certain keys like"},{"line_number":475,"context_line":"            # ``flavor`` for the ``GET /servers{server_id}`` request for the"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_4d087527","line":472,"in_reply_to":"9fdfeff1_23fc393d","updated":"2019-02-07 10:13:41.000000000","message":"Done","commit_id":"95c01d25e95da9a5ad704e8f945f03a252b42ed5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0fab597e72df9b45befbb54adb04654d47d40c5b","unresolved":false,"context_lines":[{"line_number":96,"context_line":"              show_sec_grp\u003dNone, bdms\u003dNone, cell_down_support\u003dFalse):"},{"line_number":97,"context_line":"        \"\"\"Generic, non-detailed view of an instance.\"\"\""},{"line_number":98,"context_line":"        if cell_down_support and \u0027display_name\u0027 not in instance:"},{"line_number":99,"context_line":"            # NOTE(tssurya): If the microversion is \u003e\u003d 2.68, this boolean will"},{"line_number":100,"context_line":"            # be true in which case we check if there are instances from down"},{"line_number":101,"context_line":"            # cells (by checking if their objects have missing keys like"},{"line_number":102,"context_line":"            # `display_name`) and return partial constructs based on the"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_e1d1ff58","line":99,"updated":"2019-02-11 16:57:07.000000000","message":"So, if we get here and they didn\u0027t use 2.68, but we get an instance without display_name in it, we will continue to L110 and then explode right?\n\nPresumably the cell_down_support should all match up with what we passed down to the lower layers such that we never get here where cell_down_support\u003dFalse and \"\u0027display_name\u0027 not instance\u003dTrue\". However, seems like since we have the potential to be out of sync, we should do something here to prevent us from getting to L110, or even worse, getting to L110 and returning the instance with display_name\u003dNone or something, right?\n\nSo maybe change this to:\n\n if \"display_name\" not in instance:\n     if cell_down_support:\n         return { .. }\n     else:\n         LOG.warning(\u0027Tell the nova devs they messed up\u0027)\n         return  # I dunno what this would do in the caller, but.. something\n\n return { ...regular thing... }\n\nOr something like that?","commit_id":"87f4b2365837fc97175bcdefa2499ea23d92c948"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b8c32db59aa2f98fd128f55d2823d8b058bfeeb9","unresolved":false,"context_lines":[{"line_number":96,"context_line":"              show_sec_grp\u003dNone, bdms\u003dNone, cell_down_support\u003dFalse):"},{"line_number":97,"context_line":"        \"\"\"Generic, non-detailed view of an instance.\"\"\""},{"line_number":98,"context_line":"        if cell_down_support and \u0027display_name\u0027 not in instance:"},{"line_number":99,"context_line":"            # NOTE(tssurya): If the microversion is \u003e\u003d 2.68, this boolean will"},{"line_number":100,"context_line":"            # be true in which case we check if there are instances from down"},{"line_number":101,"context_line":"            # cells (by checking if their objects have missing keys like"},{"line_number":102,"context_line":"            # `display_name`) and return partial constructs based on the"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_12a23daf","line":99,"range":{"start_line":99,"start_character":57,"end_line":99,"end_character":59},"updated":"2019-02-12 14:07:20.000000000","message":"This 2.68 mention is going to have to change since 2.68 is taken now and you have to rebase. So either respin and change it here or remember to update it in the change that adds the microversion. Or just re-word this to be generic, like \"If the microversion is high enough, ...\".","commit_id":"87f4b2365837fc97175bcdefa2499ea23d92c948"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fb615d840609b38afdcc60a820f24c9907b5918c","unresolved":false,"context_lines":[{"line_number":96,"context_line":"              show_sec_grp\u003dNone, bdms\u003dNone, cell_down_support\u003dFalse):"},{"line_number":97,"context_line":"        \"\"\"Generic, non-detailed view of an instance.\"\"\""},{"line_number":98,"context_line":"        if cell_down_support and \u0027display_name\u0027 not in instance:"},{"line_number":99,"context_line":"            # NOTE(tssurya): If the microversion is \u003e\u003d 2.68, this boolean will"},{"line_number":100,"context_line":"            # be true in which case we check if there are instances from down"},{"line_number":101,"context_line":"            # cells (by checking if their objects have missing keys like"},{"line_number":102,"context_line":"            # `display_name`) and return partial constructs based on the"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_7445cb14","line":99,"in_reply_to":"9fdfeff1_01d68328","updated":"2019-02-11 17:58:51.000000000","message":"Matt, yeah I\u0027m thinking about something in the future where we refactor the layers in the middle that all use cell_down_support as the key, and assume that display_name is the sentinel for a thing being a minimal construct. Not saying it can happen today, it\u0027s just that it seems fragile and like a potential for a bug down the road, is all.","commit_id":"87f4b2365837fc97175bcdefa2499ea23d92c948"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"42af8299cbbf23fd4e4bbc14697b6030478ce4f9","unresolved":false,"context_lines":[{"line_number":96,"context_line":"              show_sec_grp\u003dNone, bdms\u003dNone, cell_down_support\u003dFalse):"},{"line_number":97,"context_line":"        \"\"\"Generic, non-detailed view of an instance.\"\"\""},{"line_number":98,"context_line":"        if cell_down_support and \u0027display_name\u0027 not in instance:"},{"line_number":99,"context_line":"            # NOTE(tssurya): If the microversion is \u003e\u003d 2.68, this boolean will"},{"line_number":100,"context_line":"            # be true in which case we check if there are instances from down"},{"line_number":101,"context_line":"            # cells (by checking if their objects have missing keys like"},{"line_number":102,"context_line":"            # `display_name`) and return partial constructs based on the"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_ede8fcb3","line":99,"in_reply_to":"9fdfeff1_12bd5dd7","updated":"2019-02-12 14:37:45.000000000","message":"ok yea, I am going to rebase this series now. The issue regarding future scenarios where display_name key might be missing, we can handle in a followup then.","commit_id":"87f4b2365837fc97175bcdefa2499ea23d92c948"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b8c32db59aa2f98fd128f55d2823d8b058bfeeb9","unresolved":false,"context_lines":[{"line_number":96,"context_line":"              show_sec_grp\u003dNone, bdms\u003dNone, cell_down_support\u003dFalse):"},{"line_number":97,"context_line":"        \"\"\"Generic, non-detailed view of an instance.\"\"\""},{"line_number":98,"context_line":"        if cell_down_support and \u0027display_name\u0027 not in instance:"},{"line_number":99,"context_line":"            # NOTE(tssurya): If the microversion is \u003e\u003d 2.68, this boolean will"},{"line_number":100,"context_line":"            # be true in which case we check if there are instances from down"},{"line_number":101,"context_line":"            # cells (by checking if their objects have missing keys like"},{"line_number":102,"context_line":"            # `display_name`) and return partial constructs based on the"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_12bd5dd7","line":99,"in_reply_to":"9fdfeff1_7445cb14","updated":"2019-02-12 14:07:20.000000000","message":"I\u0027m OK with it either way. That guard could also be done in a follow up IMO. I\u0027m not sure if the compute API setting a different sentinel attribute on the Instance object would be better than randomly picking display_name, like an Instance.from_down_cell flag or something; it wouldn\u0027t be persisted but would be a sentinel the caller could check that is specific to the down-cell scenario.","commit_id":"87f4b2365837fc97175bcdefa2499ea23d92c948"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d772a93b5c9ca99475932e1773b2216c113a1c53","unresolved":false,"context_lines":[{"line_number":96,"context_line":"              show_sec_grp\u003dNone, bdms\u003dNone, cell_down_support\u003dFalse):"},{"line_number":97,"context_line":"        \"\"\"Generic, non-detailed view of an instance.\"\"\""},{"line_number":98,"context_line":"        if cell_down_support and \u0027display_name\u0027 not in instance:"},{"line_number":99,"context_line":"            # NOTE(tssurya): If the microversion is \u003e\u003d 2.68, this boolean will"},{"line_number":100,"context_line":"            # be true in which case we check if there are instances from down"},{"line_number":101,"context_line":"            # cells (by checking if their objects have missing keys like"},{"line_number":102,"context_line":"            # `display_name`) and return partial constructs based on the"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_e12d7f46","line":99,"in_reply_to":"9fdfeff1_a10e97e2","updated":"2019-02-11 17:05:31.000000000","message":"To be clear, I\u0027m OK without the extra guard and returning None / raising an exception. I think if someone is adding code later that returns instances from an up cell without a display_name, they are likely going to have some bigger issues where because we\u0027re only returning a partial response.","commit_id":"87f4b2365837fc97175bcdefa2499ea23d92c948"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"8ead584ed723b29901c2147701657d35fcadc130","unresolved":false,"context_lines":[{"line_number":96,"context_line":"              show_sec_grp\u003dNone, bdms\u003dNone, cell_down_support\u003dFalse):"},{"line_number":97,"context_line":"        \"\"\"Generic, non-detailed view of an instance.\"\"\""},{"line_number":98,"context_line":"        if cell_down_support and \u0027display_name\u0027 not in instance:"},{"line_number":99,"context_line":"            # NOTE(tssurya): If the microversion is \u003e\u003d 2.68, this boolean will"},{"line_number":100,"context_line":"            # be true in which case we check if there are instances from down"},{"line_number":101,"context_line":"            # cells (by checking if their objects have missing keys like"},{"line_number":102,"context_line":"            # `display_name`) and return partial constructs based on the"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_01d68328","line":99,"in_reply_to":"9fdfeff1_e12d7f46","updated":"2019-02-11 17:06:48.000000000","message":"ah ok, I honestly did not think of the situation where instances from up cells may not have display_name :(","commit_id":"87f4b2365837fc97175bcdefa2499ea23d92c948"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f9eb8dfd80d0535668f620eb5062c890d72d2853","unresolved":false,"context_lines":[{"line_number":96,"context_line":"              show_sec_grp\u003dNone, bdms\u003dNone, cell_down_support\u003dFalse):"},{"line_number":97,"context_line":"        \"\"\"Generic, non-detailed view of an instance.\"\"\""},{"line_number":98,"context_line":"        if cell_down_support and \u0027display_name\u0027 not in instance:"},{"line_number":99,"context_line":"            # NOTE(tssurya): If the microversion is \u003e\u003d 2.68, this boolean will"},{"line_number":100,"context_line":"            # be true in which case we check if there are instances from down"},{"line_number":101,"context_line":"            # cells (by checking if their objects have missing keys like"},{"line_number":102,"context_line":"            # `display_name`) and return partial constructs based on the"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_c12abb2a","line":99,"in_reply_to":"9fdfeff1_e12d7f46","updated":"2019-02-11 17:06:07.000000000","message":"s/where/here/","commit_id":"87f4b2365837fc97175bcdefa2499ea23d92c948"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"8f5411709125ec4accbff50ddecbbd9038f86308","unresolved":false,"context_lines":[{"line_number":96,"context_line":"              show_sec_grp\u003dNone, bdms\u003dNone, cell_down_support\u003dFalse):"},{"line_number":97,"context_line":"        \"\"\"Generic, non-detailed view of an instance.\"\"\""},{"line_number":98,"context_line":"        if cell_down_support and \u0027display_name\u0027 not in instance:"},{"line_number":99,"context_line":"            # NOTE(tssurya): If the microversion is \u003e\u003d 2.68, this boolean will"},{"line_number":100,"context_line":"            # be true in which case we check if there are instances from down"},{"line_number":101,"context_line":"            # cells (by checking if their objects have missing keys like"},{"line_number":102,"context_line":"            # `display_name`) and return partial constructs based on the"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_816ef393","line":99,"in_reply_to":"9fdfeff1_e1d1ff58","updated":"2019-02-11 17:03:27.000000000","message":"\u003e So, if we get here and they didn\u0027t use 2.68, but we get an instance\n \u003e without display_name in it, \n\nwe won\u0027t have this condition right ? before 2.68 we have the CONF.api.list_records_by_skipping_down_cells, so we will either get the exception there and explode if its False, or skip those records if its True. And for the versions before we started skipping we were always exploding at the multi-cell-list level, so I guess its ok ?","commit_id":"87f4b2365837fc97175bcdefa2499ea23d92c948"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"76807386f4f7814c0b1dd0052e099766851cc85c","unresolved":false,"context_lines":[{"line_number":96,"context_line":"              show_sec_grp\u003dNone, bdms\u003dNone, cell_down_support\u003dFalse):"},{"line_number":97,"context_line":"        \"\"\"Generic, non-detailed view of an instance.\"\"\""},{"line_number":98,"context_line":"        if cell_down_support and \u0027display_name\u0027 not in instance:"},{"line_number":99,"context_line":"            # NOTE(tssurya): If the microversion is \u003e\u003d 2.68, this boolean will"},{"line_number":100,"context_line":"            # be true in which case we check if there are instances from down"},{"line_number":101,"context_line":"            # cells (by checking if their objects have missing keys like"},{"line_number":102,"context_line":"            # `display_name`) and return partial constructs based on the"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_a10e97e2","line":99,"in_reply_to":"9fdfeff1_e1d1ff58","updated":"2019-02-11 17:03:40.000000000","message":"When would we ever get an instance from an up-cell without display_name set in it? I guess display_name is nullable in the DB and the object, but \"name\" is required when creating a server, so we shouldn\u0027t really hit that case. I guess you\u0027re just guarding against some future scenario where someone forgets about this and shoots themselves in the foot.\n\nIf we did add this, rather than return None and let the client blow up in some weird way, I\u0027d probably just raise some exception here so it\u0027s explicit.","commit_id":"87f4b2365837fc97175bcdefa2499ea23d92c948"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b8c32db59aa2f98fd128f55d2823d8b058bfeeb9","unresolved":false,"context_lines":[{"line_number":145,"context_line":"             bdms\u003dNone, cell_down_support\u003dFalse):"},{"line_number":146,"context_line":"        \"\"\"Detailed view of a single instance.\"\"\""},{"line_number":147,"context_line":"        if cell_down_support and \u0027display_name\u0027 not in instance:"},{"line_number":148,"context_line":"            # NOTE(tssurya): If the microversion is \u003e\u003d 2.68, this boolean will"},{"line_number":149,"context_line":"            # be true in which case we check if there are instances from down"},{"line_number":150,"context_line":"            # cells (by checking if their objects have missing keys like"},{"line_number":151,"context_line":"            # `display_name`) and return partial constructs based on the"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_f2ac59a0","line":148,"range":{"start_line":148,"start_character":55,"end_line":148,"end_character":59},"updated":"2019-02-12 14:07:20.000000000","message":"same as above\n\nAlso, a nit but I\u0027d probably split this whole chunk out into a private method like:\n\ndef _show_from_down_cell(...)\n\nAnd then you just have:\n\nif cell_down_support and \u0027display_name\u0027 not in instance:\n    return self._show_from_down_cell(...)","commit_id":"87f4b2365837fc97175bcdefa2499ea23d92c948"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"a3be02e763ea1729a591a7efcbaf6bac4add96fd","unresolved":false,"context_lines":[{"line_number":145,"context_line":"             bdms\u003dNone, cell_down_support\u003dFalse):"},{"line_number":146,"context_line":"        \"\"\"Detailed view of a single instance.\"\"\""},{"line_number":147,"context_line":"        if cell_down_support and \u0027display_name\u0027 not in instance:"},{"line_number":148,"context_line":"            # NOTE(tssurya): If the microversion is \u003e\u003d 2.68, this boolean will"},{"line_number":149,"context_line":"            # be true in which case we check if there are instances from down"},{"line_number":150,"context_line":"            # cells (by checking if their objects have missing keys like"},{"line_number":151,"context_line":"            # `display_name`) and return partial constructs based on the"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_918b8a66","line":148,"range":{"start_line":148,"start_character":55,"end_line":148,"end_character":59},"in_reply_to":"9fdfeff1_f2ac59a0","updated":"2019-02-12 15:36:08.000000000","message":"Done","commit_id":"87f4b2365837fc97175bcdefa2499ea23d92c948"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b8c32db59aa2f98fd128f55d2823d8b058bfeeb9","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                \"server\": {"},{"line_number":155,"context_line":"                    \"id\": instance.uuid,"},{"line_number":156,"context_line":"                    \"status\": \"UNKNOWN\","},{"line_number":157,"context_line":"                    \"tenant_id\": instance.get(\"project_id\"),"},{"line_number":158,"context_line":"                    \"created\": utils.isotime(instance[\"created_at\"]),"},{"line_number":159,"context_line":"                },"},{"line_number":160,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_529be571","line":157,"range":{"start_line":157,"start_character":42,"end_line":157,"end_character":45},"updated":"2019-02-12 14:07:20.000000000","message":"I would like to avoid the dict-like get() usage here, the attribute should be set so use instance.project_id.","commit_id":"87f4b2365837fc97175bcdefa2499ea23d92c948"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6ff1855bec6b09b20a6f499402b6bb93c1c33b73","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                \"server\": {"},{"line_number":155,"context_line":"                    \"id\": instance.uuid,"},{"line_number":156,"context_line":"                    \"status\": \"UNKNOWN\","},{"line_number":157,"context_line":"                    \"tenant_id\": instance.get(\"project_id\"),"},{"line_number":158,"context_line":"                    \"created\": utils.isotime(instance[\"created_at\"]),"},{"line_number":159,"context_line":"                },"},{"line_number":160,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_6dd40cea","line":157,"range":{"start_line":157,"start_character":42,"end_line":157,"end_character":45},"in_reply_to":"9fdfeff1_529be571","updated":"2019-02-12 14:40:14.000000000","message":"This is probably copied from below (L198). I dunno if there is a reason for it, but I can\u0027t really think of what it would be.","commit_id":"87f4b2365837fc97175bcdefa2499ea23d92c948"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"a3be02e763ea1729a591a7efcbaf6bac4add96fd","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                \"server\": {"},{"line_number":155,"context_line":"                    \"id\": instance.uuid,"},{"line_number":156,"context_line":"                    \"status\": \"UNKNOWN\","},{"line_number":157,"context_line":"                    \"tenant_id\": instance.get(\"project_id\"),"},{"line_number":158,"context_line":"                    \"created\": utils.isotime(instance[\"created_at\"]),"},{"line_number":159,"context_line":"                },"},{"line_number":160,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_b1c6ce99","line":157,"range":{"start_line":157,"start_character":42,"end_line":157,"end_character":45},"in_reply_to":"9fdfeff1_6dd40cea","updated":"2019-02-12 15:36:08.000000000","message":"Done","commit_id":"87f4b2365837fc97175bcdefa2499ea23d92c948"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b8c32db59aa2f98fd128f55d2823d8b058bfeeb9","unresolved":false,"context_lines":[{"line_number":155,"context_line":"                    \"id\": instance.uuid,"},{"line_number":156,"context_line":"                    \"status\": \"UNKNOWN\","},{"line_number":157,"context_line":"                    \"tenant_id\": instance.get(\"project_id\"),"},{"line_number":158,"context_line":"                    \"created\": utils.isotime(instance[\"created_at\"]),"},{"line_number":159,"context_line":"                },"},{"line_number":160,"context_line":"            }"},{"line_number":161,"context_line":"            if \u0027flavor\u0027 in instance:"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_3290a14a","line":158,"range":{"start_line":158,"start_character":45,"end_line":158,"end_character":67},"updated":"2019-02-12 14:07:20.000000000","message":"Use attribute access notation, not dict:\n\ninstance.created_at\n\nThe reason the dict-like access works is because of the NovaObjectDictCompat on the Instance object which we want to eventually remove.","commit_id":"87f4b2365837fc97175bcdefa2499ea23d92c948"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"a3be02e763ea1729a591a7efcbaf6bac4add96fd","unresolved":false,"context_lines":[{"line_number":155,"context_line":"                    \"id\": instance.uuid,"},{"line_number":156,"context_line":"                    \"status\": \"UNKNOWN\","},{"line_number":157,"context_line":"                    \"tenant_id\": instance.get(\"project_id\"),"},{"line_number":158,"context_line":"                    \"created\": utils.isotime(instance[\"created_at\"]),"},{"line_number":159,"context_line":"                },"},{"line_number":160,"context_line":"            }"},{"line_number":161,"context_line":"            if \u0027flavor\u0027 in instance:"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_31389e9e","line":158,"range":{"start_line":158,"start_character":45,"end_line":158,"end_character":67},"in_reply_to":"9fdfeff1_3290a14a","updated":"2019-02-12 15:36:08.000000000","message":"Done","commit_id":"87f4b2365837fc97175bcdefa2499ea23d92c948"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b8c32db59aa2f98fd128f55d2823d8b058bfeeb9","unresolved":false,"context_lines":[{"line_number":164,"context_line":"                # ``GET /servers{server_id}`` and thus we include the"},{"line_number":165,"context_line":"                # information from the request_spec of the instance like"},{"line_number":166,"context_line":"                # its flavor, image, avz, and user_id in addition to the"},{"line_number":167,"context_line":"                # basic information from its instance_mapping."},{"line_number":168,"context_line":"                avz \u003d (instance.availability_zone"},{"line_number":169,"context_line":"                       if instance.availability_zone is not None"},{"line_number":170,"context_line":"                       else \"UNKNOWN\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_52744536","line":167,"updated":"2019-02-12 14:07:20.000000000","message":"nit: You might add, \"If \u0027flavor\u0027 is not in the instance then it is GET /servers/detail and we do not expose the flavor in the response when listing servers with details.\"","commit_id":"87f4b2365837fc97175bcdefa2499ea23d92c948"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"a3be02e763ea1729a591a7efcbaf6bac4add96fd","unresolved":false,"context_lines":[{"line_number":164,"context_line":"                # ``GET /servers{server_id}`` and thus we include the"},{"line_number":165,"context_line":"                # information from the request_spec of the instance like"},{"line_number":166,"context_line":"                # its flavor, image, avz, and user_id in addition to the"},{"line_number":167,"context_line":"                # basic information from its instance_mapping."},{"line_number":168,"context_line":"                avz \u003d (instance.availability_zone"},{"line_number":169,"context_line":"                       if instance.availability_zone is not None"},{"line_number":170,"context_line":"                       else \"UNKNOWN\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_d1e4b20f","line":167,"in_reply_to":"9fdfeff1_52744536","updated":"2019-02-12 15:36:08.000000000","message":"Done","commit_id":"87f4b2365837fc97175bcdefa2499ea23d92c948"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b8c32db59aa2f98fd128f55d2823d8b058bfeeb9","unresolved":false,"context_lines":[{"line_number":168,"context_line":"                avz \u003d (instance.availability_zone"},{"line_number":169,"context_line":"                       if instance.availability_zone is not None"},{"line_number":170,"context_line":"                       else \"UNKNOWN\")"},{"line_number":171,"context_line":"                context \u003d request.environ[\u0027nova.context\u0027]"},{"line_number":172,"context_line":"                show_extra_specs \u003d context.can("},{"line_number":173,"context_line":"                    fes_policies.POLICY_ROOT % \u0027index\u0027, fatal\u003dFalse)"},{"line_number":174,"context_line":"                ret[\"server\"][\"user_id\"] \u003d instance.get(\"user_id\") or \"\""},{"line_number":175,"context_line":"                ret[\"server\"][\"image\"] \u003d self._get_image(request, instance)"},{"line_number":176,"context_line":"                ret[\"server\"][\"flavor\"] \u003d self._get_flavor(request, instance,"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_92d14dfe","line":173,"range":{"start_line":171,"start_character":16,"end_line":173,"end_character":68},"updated":"2019-02-12 14:07:20.000000000","message":"If you move the conditional block at L184 above this new block of code we can DRY up this code and then you can just rely on the show_extra_specs variable already being set.","commit_id":"87f4b2365837fc97175bcdefa2499ea23d92c948"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"a3be02e763ea1729a591a7efcbaf6bac4add96fd","unresolved":false,"context_lines":[{"line_number":168,"context_line":"                avz \u003d (instance.availability_zone"},{"line_number":169,"context_line":"                       if instance.availability_zone is not None"},{"line_number":170,"context_line":"                       else \"UNKNOWN\")"},{"line_number":171,"context_line":"                context \u003d request.environ[\u0027nova.context\u0027]"},{"line_number":172,"context_line":"                show_extra_specs \u003d context.can("},{"line_number":173,"context_line":"                    fes_policies.POLICY_ROOT % \u0027index\u0027, fatal\u003dFalse)"},{"line_number":174,"context_line":"                ret[\"server\"][\"user_id\"] \u003d instance.get(\"user_id\") or \"\""},{"line_number":175,"context_line":"                ret[\"server\"][\"image\"] \u003d self._get_image(request, instance)"},{"line_number":176,"context_line":"                ret[\"server\"][\"flavor\"] \u003d self._get_flavor(request, instance,"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_d186f2b9","line":173,"range":{"start_line":171,"start_character":16,"end_line":173,"end_character":68},"in_reply_to":"9fdfeff1_92d14dfe","updated":"2019-02-12 15:36:08.000000000","message":"Done","commit_id":"87f4b2365837fc97175bcdefa2499ea23d92c948"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b8c32db59aa2f98fd128f55d2823d8b058bfeeb9","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                context \u003d request.environ[\u0027nova.context\u0027]"},{"line_number":172,"context_line":"                show_extra_specs \u003d context.can("},{"line_number":173,"context_line":"                    fes_policies.POLICY_ROOT % \u0027index\u0027, fatal\u003dFalse)"},{"line_number":174,"context_line":"                ret[\"server\"][\"user_id\"] \u003d instance.get(\"user_id\") or \"\""},{"line_number":175,"context_line":"                ret[\"server\"][\"image\"] \u003d self._get_image(request, instance)"},{"line_number":176,"context_line":"                ret[\"server\"][\"flavor\"] \u003d self._get_flavor(request, instance,"},{"line_number":177,"context_line":"                                                           show_extra_specs)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_524525b3","line":174,"range":{"start_line":174,"start_character":67,"end_line":174,"end_character":72},"updated":"2019-02-12 14:07:20.000000000","message":"Why wouldn\u0027t user_id be set? I guess because we could have pulled an old RequestSpec which doesn\u0027t have user_id set? Let\u0027s add a comment for that. And why wouldn\u0027t we return \"UNKNOWN\" in that case rather than the empty string? Should also have a test wrinkle for that case.","commit_id":"87f4b2365837fc97175bcdefa2499ea23d92c948"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b8c32db59aa2f98fd128f55d2823d8b058bfeeb9","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                context \u003d request.environ[\u0027nova.context\u0027]"},{"line_number":172,"context_line":"                show_extra_specs \u003d context.can("},{"line_number":173,"context_line":"                    fes_policies.POLICY_ROOT % \u0027index\u0027, fatal\u003dFalse)"},{"line_number":174,"context_line":"                ret[\"server\"][\"user_id\"] \u003d instance.get(\"user_id\") or \"\""},{"line_number":175,"context_line":"                ret[\"server\"][\"image\"] \u003d self._get_image(request, instance)"},{"line_number":176,"context_line":"                ret[\"server\"][\"flavor\"] \u003d self._get_flavor(request, instance,"},{"line_number":177,"context_line":"                                                           show_extra_specs)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_f201b96b","line":174,"range":{"start_line":174,"start_character":43,"end_line":174,"end_character":66},"updated":"2019-02-12 14:07:20.000000000","message":"instance.user_id","commit_id":"87f4b2365837fc97175bcdefa2499ea23d92c948"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"a3be02e763ea1729a591a7efcbaf6bac4add96fd","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                context \u003d request.environ[\u0027nova.context\u0027]"},{"line_number":172,"context_line":"                show_extra_specs \u003d context.can("},{"line_number":173,"context_line":"                    fes_policies.POLICY_ROOT % \u0027index\u0027, fatal\u003dFalse)"},{"line_number":174,"context_line":"                ret[\"server\"][\"user_id\"] \u003d instance.get(\"user_id\") or \"\""},{"line_number":175,"context_line":"                ret[\"server\"][\"image\"] \u003d self._get_image(request, instance)"},{"line_number":176,"context_line":"                ret[\"server\"][\"flavor\"] \u003d self._get_flavor(request, instance,"},{"line_number":177,"context_line":"                                                           show_extra_specs)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_f1421668","line":174,"range":{"start_line":174,"start_character":67,"end_line":174,"end_character":72},"in_reply_to":"9fdfeff1_524525b3","updated":"2019-02-12 15:36:08.000000000","message":"Done","commit_id":"87f4b2365837fc97175bcdefa2499ea23d92c948"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6ff1855bec6b09b20a6f499402b6bb93c1c33b73","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                context \u003d request.environ[\u0027nova.context\u0027]"},{"line_number":172,"context_line":"                show_extra_specs \u003d context.can("},{"line_number":173,"context_line":"                    fes_policies.POLICY_ROOT % \u0027index\u0027, fatal\u003dFalse)"},{"line_number":174,"context_line":"                ret[\"server\"][\"user_id\"] \u003d instance.get(\"user_id\") or \"\""},{"line_number":175,"context_line":"                ret[\"server\"][\"image\"] \u003d self._get_image(request, instance)"},{"line_number":176,"context_line":"                ret[\"server\"][\"flavor\"] \u003d self._get_flavor(request, instance,"},{"line_number":177,"context_line":"                                                           show_extra_specs)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_8dfa9072","line":174,"range":{"start_line":174,"start_character":67,"end_line":174,"end_character":72},"in_reply_to":"9fdfeff1_524525b3","updated":"2019-02-12 14:40:14.000000000","message":"I think it\u0027s because of L199 :)","commit_id":"87f4b2365837fc97175bcdefa2499ea23d92c948"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"a3be02e763ea1729a591a7efcbaf6bac4add96fd","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                context \u003d request.environ[\u0027nova.context\u0027]"},{"line_number":172,"context_line":"                show_extra_specs \u003d context.can("},{"line_number":173,"context_line":"                    fes_policies.POLICY_ROOT % \u0027index\u0027, fatal\u003dFalse)"},{"line_number":174,"context_line":"                ret[\"server\"][\"user_id\"] \u003d instance.get(\"user_id\") or \"\""},{"line_number":175,"context_line":"                ret[\"server\"][\"image\"] \u003d self._get_image(request, instance)"},{"line_number":176,"context_line":"                ret[\"server\"][\"flavor\"] \u003d self._get_flavor(request, instance,"},{"line_number":177,"context_line":"                                                           show_extra_specs)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_71e38635","line":174,"range":{"start_line":174,"start_character":67,"end_line":174,"end_character":72},"in_reply_to":"9fdfeff1_8dfa9072","updated":"2019-02-12 15:36:08.000000000","message":"yea I just copied the user_id and project_id stuff from the original code. I can change this.","commit_id":"87f4b2365837fc97175bcdefa2499ea23d92c948"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f258e6ca296472bef41ac10c7cfcebd18ec1ebce","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                context \u003d request.environ[\u0027nova.context\u0027]"},{"line_number":172,"context_line":"                show_extra_specs \u003d context.can("},{"line_number":173,"context_line":"                    fes_policies.POLICY_ROOT % \u0027index\u0027, fatal\u003dFalse)"},{"line_number":174,"context_line":"                ret[\"server\"][\"user_id\"] \u003d instance.get(\"user_id\") or \"\""},{"line_number":175,"context_line":"                ret[\"server\"][\"image\"] \u003d self._get_image(request, instance)"},{"line_number":176,"context_line":"                ret[\"server\"][\"flavor\"] \u003d self._get_flavor(request, instance,"},{"line_number":177,"context_line":"                                                           show_extra_specs)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_1416a856","line":174,"range":{"start_line":174,"start_character":67,"end_line":174,"end_character":72},"in_reply_to":"9fdfeff1_f1421668","updated":"2019-02-12 16:15:19.000000000","message":"OK yeah if it\u0027s copied that\u0027s one thing, but the user_id in this case comes from the RequestSpec and RequestSpec.user_id was added in Rocky [1], so any instances older than that release won\u0027t have user_id set, which would mean we don\u0027t know the user_id and UNKNOWN is probably valid yeah?\n\n[1] https://review.openstack.org/#/c/565340/","commit_id":"87f4b2365837fc97175bcdefa2499ea23d92c948"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4456c51e887d187d1716dbae0d28991deb4e08ca","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        return sorted(list(set(self._show_expected_attrs + expected_attrs)))"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def _show_from_down_cell(self, request, instance, show_extra_specs):"},{"line_number":141,"context_line":"        \"\"\"Function that constructs the partial reponse for the instance.\"\"\""},{"line_number":142,"context_line":"        ret \u003d {"},{"line_number":143,"context_line":"            \"server\": {"},{"line_number":144,"context_line":"                \"id\": instance.uuid,"}],"source_content_type":"text/x-python","patch_set":9,"id":"9fdfeff1_daa3629d","line":141,"range":{"start_line":141,"start_character":48,"end_line":141,"end_character":55},"updated":"2019-02-12 21:01:36.000000000","message":"response","commit_id":"684e4ffc522c6e0f6079308274b1899046e45120"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"1d0d071da92dc77df1b8ad1dfd30972c7da906ef","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        return sorted(list(set(self._show_expected_attrs + expected_attrs)))"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def _show_from_down_cell(self, request, instance, show_extra_specs):"},{"line_number":141,"context_line":"        \"\"\"Function that constructs the partial reponse for the instance.\"\"\""},{"line_number":142,"context_line":"        ret \u003d {"},{"line_number":143,"context_line":"            \"server\": {"},{"line_number":144,"context_line":"                \"id\": instance.uuid,"}],"source_content_type":"text/x-python","patch_set":9,"id":"9fdfeff1_848a5818","line":141,"range":{"start_line":141,"start_character":48,"end_line":141,"end_character":55},"in_reply_to":"9fdfeff1_daa3629d","updated":"2019-02-13 09:33:07.000000000","message":"Done","commit_id":"684e4ffc522c6e0f6079308274b1899046e45120"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"ace5eec502f93a72af2b0c37761e187d8d4df744","unresolved":false,"context_lines":[{"line_number":96,"context_line":"              show_sec_grp\u003dNone, bdms\u003dNone, cell_down_support\u003dFalse):"},{"line_number":97,"context_line":"        \"\"\"Generic, non-detailed view of an instance.\"\"\""},{"line_number":98,"context_line":"        if cell_down_support and \u0027display_name\u0027 not in instance:"},{"line_number":99,"context_line":"            # NOTE(tssurya): If the microversion is \u003e\u003d 2.69, this boolean will"},{"line_number":100,"context_line":"            # be true in which case we check if there are instances from down"},{"line_number":101,"context_line":"            # cells (by checking if their objects have missing keys like"},{"line_number":102,"context_line":"            # `display_name`) and return partial constructs based on the"}],"source_content_type":"text/x-python","patch_set":10,"id":"9fdfeff1_3cd8261c","line":99,"range":{"start_line":99,"start_character":55,"end_line":99,"end_character":59},"updated":"2019-02-15 15:58:59.000000000","message":"I still wish we could avoid landing these with microversions called out, but.. not that big of a deal I guess.","commit_id":"8c1c0e2b2bd028d894ed60b24f1a7a2ba54d0215"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"55b1942095642e7ab68405176f6e09db483a1786","unresolved":false,"context_lines":[{"line_number":111,"context_line":"            \"server\": {"},{"line_number":112,"context_line":"                \"id\": instance[\"uuid\"],"},{"line_number":113,"context_line":"                \"name\": instance[\"display_name\"],"},{"line_number":114,"context_line":"                \"links\": self._get_links(request,"},{"line_number":115,"context_line":"                                         instance[\"uuid\"],"},{"line_number":116,"context_line":"                                         self._collection_name),"},{"line_number":117,"context_line":"            },"},{"line_number":118,"context_line":"        }"},{"line_number":119,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9fdfeff1_d603f60b","line":116,"range":{"start_line":114,"start_character":16,"end_line":116,"end_character":64},"updated":"2019-02-15 17:30:31.000000000","message":"Now that I\u0027m looking at the example in the docs patch on top of this why didn\u0027t we include the links?","commit_id":"8c1c0e2b2bd028d894ed60b24f1a7a2ba54d0215"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"92e3d0f79cd7790086deb96f1fdad02fdd9b9c17","unresolved":false,"context_lines":[{"line_number":111,"context_line":"            \"server\": {"},{"line_number":112,"context_line":"                \"id\": instance[\"uuid\"],"},{"line_number":113,"context_line":"                \"name\": instance[\"display_name\"],"},{"line_number":114,"context_line":"                \"links\": self._get_links(request,"},{"line_number":115,"context_line":"                                         instance[\"uuid\"],"},{"line_number":116,"context_line":"                                         self._collection_name),"},{"line_number":117,"context_line":"            },"},{"line_number":118,"context_line":"        }"},{"line_number":119,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9fdfeff1_b985035c","line":116,"range":{"start_line":114,"start_character":16,"end_line":116,"end_character":64},"in_reply_to":"9fdfeff1_d603f60b","updated":"2019-02-15 18:22:31.000000000","message":"Done","commit_id":"8c1c0e2b2bd028d894ed60b24f1a7a2ba54d0215"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"ace5eec502f93a72af2b0c37761e187d8d4df744","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        # results."},{"line_number":138,"context_line":"        return sorted(list(set(self._show_expected_attrs + expected_attrs)))"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def _show_from_down_cell(self, request, instance, show_extra_specs):"},{"line_number":141,"context_line":"        \"\"\"Function that constructs the partial response for the instance.\"\"\""},{"line_number":142,"context_line":"        ret \u003d {"},{"line_number":143,"context_line":"            \"server\": {"}],"source_content_type":"text/x-python","patch_set":10,"id":"9fdfeff1_7cfb0e78","line":140,"updated":"2019-02-15 15:58:59.000000000","message":"This is nice","commit_id":"8c1c0e2b2bd028d894ed60b24f1a7a2ba54d0215"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fe8799e896d88d73d8875fedfda65ce98c9ec40c","unresolved":false,"context_lines":[{"line_number":140,"context_line":"    def _show_from_down_cell(self, request, instance, show_extra_specs):"},{"line_number":141,"context_line":"        \"\"\"Function that constructs the partial response for the instance.\"\"\""},{"line_number":142,"context_line":"        ret \u003d {"},{"line_number":143,"context_line":"            \"server\": {"},{"line_number":144,"context_line":"                \"id\": instance.uuid,"},{"line_number":145,"context_line":"                \"status\": \"UNKNOWN\","},{"line_number":146,"context_line":"                \"tenant_id\": instance.project_id,"}],"source_content_type":"text/x-python","patch_set":10,"id":"9fdfeff1_d62c569a","line":143,"updated":"2019-02-15 17:33:01.000000000","message":"Same as above - why no links?","commit_id":"8c1c0e2b2bd028d894ed60b24f1a7a2ba54d0215"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"92e3d0f79cd7790086deb96f1fdad02fdd9b9c17","unresolved":false,"context_lines":[{"line_number":140,"context_line":"    def _show_from_down_cell(self, request, instance, show_extra_specs):"},{"line_number":141,"context_line":"        \"\"\"Function that constructs the partial response for the instance.\"\"\""},{"line_number":142,"context_line":"        ret \u003d {"},{"line_number":143,"context_line":"            \"server\": {"},{"line_number":144,"context_line":"                \"id\": instance.uuid,"},{"line_number":145,"context_line":"                \"status\": \"UNKNOWN\","},{"line_number":146,"context_line":"                \"tenant_id\": instance.project_id,"}],"source_content_type":"text/x-python","patch_set":10,"id":"9fdfeff1_d9880772","line":143,"in_reply_to":"9fdfeff1_d62c569a","updated":"2019-02-15 18:22:31.000000000","message":"Done","commit_id":"8c1c0e2b2bd028d894ed60b24f1a7a2ba54d0215"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"456322e9c2b7da2b5d05d683bd880d8c951b235d","unresolved":false,"context_lines":[{"line_number":173,"context_line":"            # data migrated, return UNKNOWN."},{"line_number":174,"context_line":"            ret[\"server\"][\"user_id\"] \u003d instance.user_id or \"UNKNOWN\""},{"line_number":175,"context_line":"        else:"},{"line_number":176,"context_line":"            # GET /servers/detail includes links for GET /servers/{serer_id}."},{"line_number":177,"context_line":"            ret[\u0027server\u0027][\"links\"] \u003d self._get_links("},{"line_number":178,"context_line":"                request, instance.uuid, self._collection_name)"},{"line_number":179,"context_line":"        return ret"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_9c5cad7d","line":176,"range":{"start_line":176,"start_character":67,"end_line":176,"end_character":75},"updated":"2019-02-15 19:37:51.000000000","message":"Wah wah.","commit_id":"24d3c138b5b682c5f966bd5003b823d8eec6bc18"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"45f208bf9e062b0e0eed1982ce5a47a21788bd84","unresolved":false,"context_lines":[{"line_number":173,"context_line":"            # data migrated, return UNKNOWN."},{"line_number":174,"context_line":"            ret[\"server\"][\"user_id\"] \u003d instance.user_id or \"UNKNOWN\""},{"line_number":175,"context_line":"        else:"},{"line_number":176,"context_line":"            # GET /servers/detail includes links for GET /servers/{serer_id}."},{"line_number":177,"context_line":"            ret[\u0027server\u0027][\"links\"] \u003d self._get_links("},{"line_number":178,"context_line":"                request, instance.uuid, self._collection_name)"},{"line_number":179,"context_line":"        return ret"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_9cd10dcf","line":176,"range":{"start_line":176,"start_character":67,"end_line":176,"end_character":75},"in_reply_to":"9fdfeff1_9c5cad7d","updated":"2019-02-15 19:39:25.000000000","message":"Done","commit_id":"24d3c138b5b682c5f966bd5003b823d8eec6bc18"}],"nova/tests/unit/api/openstack/compute/test_serversV21.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b8c32db59aa2f98fd128f55d2823d8b058bfeeb9","unresolved":false,"context_lines":[{"line_number":7340,"context_line":""},{"line_number":7341,"context_line":""},{"line_number":7342,"context_line":"class ServersViewBuilderTestV268(ServersViewBuilderTest):"},{"line_number":7343,"context_line":"    \"\"\"Server ViewBuilder test for microversion 2.68"},{"line_number":7344,"context_line":""},{"line_number":7345,"context_line":"    The intent here is simply to verify that when showing server details"},{"line_number":7346,"context_line":"    after microversion 2.68 the response could have missing keys for those"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_d27fd5dc","line":7343,"range":{"start_line":7343,"start_character":48,"end_line":7343,"end_character":52},"updated":"2019-02-12 14:07:20.000000000","message":"This will have to be updated since 2.68 is taken.","commit_id":"87f4b2365837fc97175bcdefa2499ea23d92c948"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"a3be02e763ea1729a591a7efcbaf6bac4add96fd","unresolved":false,"context_lines":[{"line_number":7340,"context_line":""},{"line_number":7341,"context_line":""},{"line_number":7342,"context_line":"class ServersViewBuilderTestV268(ServersViewBuilderTest):"},{"line_number":7343,"context_line":"    \"\"\"Server ViewBuilder test for microversion 2.68"},{"line_number":7344,"context_line":""},{"line_number":7345,"context_line":"    The intent here is simply to verify that when showing server details"},{"line_number":7346,"context_line":"    after microversion 2.68 the response could have missing keys for those"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_11ba3a6d","line":7343,"range":{"start_line":7343,"start_character":48,"end_line":7343,"end_character":52},"in_reply_to":"9fdfeff1_d27fd5dc","updated":"2019-02-12 15:36:08.000000000","message":"Done","commit_id":"87f4b2365837fc97175bcdefa2499ea23d92c948"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b8c32db59aa2f98fd128f55d2823d8b058bfeeb9","unresolved":false,"context_lines":[{"line_number":7549,"context_line":"                \"tenant_id\": \"fake_project\","},{"line_number":7550,"context_line":"                \"created\": \u00271955-11-05T00:00:00Z\u0027,"},{"line_number":7551,"context_line":"                \"status\": \"UNKNOWN\","},{"line_number":7552,"context_line":"                \"image\": {"},{"line_number":7553,"context_line":"                    \"id\": \"5\","},{"line_number":7554,"context_line":"                    \"links\": ["},{"line_number":7555,"context_line":"                        {"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_b201f13a","line":7552,"updated":"2019-02-12 14:07:20.000000000","message":"We should also have a test wrinkle where image is not set so it would be an empty string.\n\nSo I think if you just added another test server which satisfies the conditionals (image, AZ and user_id) that would cover those.","commit_id":"87f4b2365837fc97175bcdefa2499ea23d92c948"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"1658668dd3b2e275f4e07a1ba85bc5445ba782ea","unresolved":false,"context_lines":[{"line_number":7549,"context_line":"                \"tenant_id\": \"fake_project\","},{"line_number":7550,"context_line":"                \"created\": \u00271955-11-05T00:00:00Z\u0027,"},{"line_number":7551,"context_line":"                \"status\": \"UNKNOWN\","},{"line_number":7552,"context_line":"                \"image\": {"},{"line_number":7553,"context_line":"                    \"id\": \"5\","},{"line_number":7554,"context_line":"                    \"links\": ["},{"line_number":7555,"context_line":"                        {"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_540bd0d4","line":7552,"in_reply_to":"9fdfeff1_b201f13a","updated":"2019-02-12 15:53:49.000000000","message":"Done","commit_id":"87f4b2365837fc97175bcdefa2499ea23d92c948"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b8c32db59aa2f98fd128f55d2823d8b058bfeeb9","unresolved":false,"context_lines":[{"line_number":7567,"context_line":"                    \u0027extra_specs\u0027: {},"},{"line_number":7568,"context_line":"                    \u0027swap\u0027: 0"},{"line_number":7569,"context_line":"                },"},{"line_number":7570,"context_line":"                \"OS-EXT-AZ:availability_zone\": \"nova\","},{"line_number":7571,"context_line":"                \"OS-EXT-STS:power_state\": 0"},{"line_number":7572,"context_line":"            }"},{"line_number":7573,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_32cd0131","line":7570,"range":{"start_line":7570,"start_character":16,"end_line":7570,"end_character":54},"updated":"2019-02-12 14:07:20.000000000","message":"We should have a wrinkle where the AZ is going to be UNKNOWN.","commit_id":"87f4b2365837fc97175bcdefa2499ea23d92c948"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"1658668dd3b2e275f4e07a1ba85bc5445ba782ea","unresolved":false,"context_lines":[{"line_number":7567,"context_line":"                    \u0027extra_specs\u0027: {},"},{"line_number":7568,"context_line":"                    \u0027swap\u0027: 0"},{"line_number":7569,"context_line":"                },"},{"line_number":7570,"context_line":"                \"OS-EXT-AZ:availability_zone\": \"nova\","},{"line_number":7571,"context_line":"                \"OS-EXT-STS:power_state\": 0"},{"line_number":7572,"context_line":"            }"},{"line_number":7573,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_f40be4d1","line":7570,"range":{"start_line":7570,"start_character":16,"end_line":7570,"end_character":54},"in_reply_to":"9fdfeff1_32cd0131","updated":"2019-02-12 15:53:49.000000000","message":"Done","commit_id":"87f4b2365837fc97175bcdefa2499ea23d92c948"}]}
