)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"73ee61dba5bd304c568174a53c73d981358ba60d","unresolved":false,"context_lines":[{"line_number":14,"context_line":"appropriate record. In other words, the cell with the"},{"line_number":15,"context_line":"hidden instance should not be the one in the instance"},{"line_number":16,"context_line":"mapping and should not be returned when listing instances."},{"line_number":17,"context_line":"Note that the API already filters out duplicates (see"},{"line_number":18,"context_line":"_get_unique_filter_method in API.get_all) but this gives"},{"line_number":19,"context_line":"us a way to control which is shown rather than get lucky."},{"line_number":20,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"3fce034c_d0bae0dc","line":17,"range":{"start_line":17,"start_character":38,"end_line":17,"end_character":48},"updated":"2019-04-12 16:22:11.000000000","message":"so for us since we use the instance_mapping for listing instances https://docs.openstack.org/nova/latest/configuration/config.html#api.instance_list_per_project_cells this would not be a problem unless we are an admin listing instances.","commit_id":"c373d236c6d6f5d27008c2856197d865f722a25f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"975d60d83deea483f75892b11d8d4f72241e4326","unresolved":false,"context_lines":[{"line_number":14,"context_line":"appropriate record. In other words, the cell with the"},{"line_number":15,"context_line":"hidden instance should not be the one in the instance"},{"line_number":16,"context_line":"mapping and should not be returned when listing instances."},{"line_number":17,"context_line":"Note that the API already filters out duplicates (see"},{"line_number":18,"context_line":"_get_unique_filter_method in API.get_all) but this gives"},{"line_number":19,"context_line":"us a way to control which is shown rather than get lucky."},{"line_number":20,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"3fce034c_468f0fcc","line":17,"range":{"start_line":17,"start_character":38,"end_line":17,"end_character":48},"in_reply_to":"3fce034c_d0bae0dc","updated":"2019-04-12 21:04:21.000000000","message":"\u003e so for us since we use the instance_mapping for listing instances https://docs.openstack.org/nova/latest/configuration/config.html#api.instance_list_per_project_cells this would not be a problem\n\nBut that\u0027s not everyone.\n\n\u003e unless we are an admin listing instances.\n\nSo it is a problem for you still.","commit_id":"c373d236c6d6f5d27008c2856197d865f722a25f"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"73ee61dba5bd304c568174a53c73d981358ba60d","unresolved":false,"context_lines":[{"line_number":24,"context_line":"for the non-hidden copy of the instance in another cell DB."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Note that this change does not add the ability to filter"},{"line_number":27,"context_line":"instances by the new hidden field and it explicitly blacklists"},{"line_number":28,"context_line":"the hidden field from being a sort key or filter parameter"},{"line_number":29,"context_line":"when listing servers in the API since if we add that support"},{"line_number":30,"context_line":"it should be with a new microversion."},{"line_number":31,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"3fce034c_53a91a79","line":28,"range":{"start_line":27,"start_character":41,"end_line":28,"end_character":58},"updated":"2019-04-12 16:22:11.000000000","message":"we don\u0027t blacklist them explicitly right ? isn\u0027t that like adding it to the list of things to ignore (https://github.com/openstack/nova/blob/03322bb517925a9f5a04ebdb41c3fd31e7962440/nova/api/openstack/compute/schemas/servers.py#L526) ? or does blacklist simply mean \"its not included in the server schema for validation\" (https://github.com/openstack/nova/blob/03322bb517925a9f5a04ebdb41c3fd31e7962440/nova/api/openstack/compute/schemas/servers.py#L632)?","commit_id":"c373d236c6d6f5d27008c2856197d865f722a25f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"975d60d83deea483f75892b11d8d4f72241e4326","unresolved":false,"context_lines":[{"line_number":24,"context_line":"for the non-hidden copy of the instance in another cell DB."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Note that this change does not add the ability to filter"},{"line_number":27,"context_line":"instances by the new hidden field and it explicitly blacklists"},{"line_number":28,"context_line":"the hidden field from being a sort key or filter parameter"},{"line_number":29,"context_line":"when listing servers in the API since if we add that support"},{"line_number":30,"context_line":"it should be with a new microversion."},{"line_number":31,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"3fce034c_e662bb16","line":28,"range":{"start_line":27,"start_character":41,"end_line":28,"end_character":58},"in_reply_to":"3fce034c_53a91a79","updated":"2019-04-12 21:04:21.000000000","message":"This comment in the commit message looks old, I seem to remember needing to do something with this in the code which is why I had this, but yeah I don\u0027t see it in here now, and it\u0027s implicitly ignored because it\u0027s not in the whitelist. I\u0027ll have to investigate this, and likely need a test to make sure passing hidden as a sort key or filter parameter is ignored.","commit_id":"c373d236c6d6f5d27008c2856197d865f722a25f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fab57424f638d3227118530b64b5df36d0cfda87","unresolved":false,"context_lines":[{"line_number":24,"context_line":"for the non-hidden copy of the instance in another cell DB."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Note that this change does not add the ability to filter"},{"line_number":27,"context_line":"instances by the new hidden field and it explicitly blacklists"},{"line_number":28,"context_line":"the hidden field from being a sort key or filter parameter"},{"line_number":29,"context_line":"when listing servers in the API since if we add that support"},{"line_number":30,"context_line":"it should be with a new microversion."},{"line_number":31,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"3fce034c_458d70d1","line":28,"range":{"start_line":27,"start_character":41,"end_line":28,"end_character":58},"in_reply_to":"3fce034c_e662bb16","updated":"2019-04-17 21:26:41.000000000","message":"OK so trying to sort on hidden results in a 400 because it\u0027s not in VALID_SORT_KEYS in the schema, tested here:\n\nhttps://review.openstack.org/#/c/631123/18/nova/tests/unit/api/openstack/compute/test_serversV21.py@919\n\nAnd it\u0027s not blacklisted as a filter parameter but it\u0027s filtered out because it\u0027s not in the explicit whitelist - but not an error because additionalProperties\u003dFalse:\n\nhttps://github.com/openstack/nova/blob/f7fd6cb58b22ad925f10a736215f4f004b497dc7/nova/api/openstack/compute/schemas/servers.py#L609\n\nTested here:\n\nhttps://review.openstack.org/#/c/631123/18/nova/tests/unit/api/openstack/compute/test_serversV21.py@1478\n\nI\u0027ll update this part of the commit message.","commit_id":"c373d236c6d6f5d27008c2856197d865f722a25f"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"19415bac227b54106e8f7bdc698586d5f96ea92c","unresolved":false,"context_lines":[{"line_number":3,"context_line":"AuthorDate: 2019-01-15 18:32:44 -0500"},{"line_number":4,"context_line":"Commit:     Matt Riedemann \u003cmriedem.os@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2019-04-17 17:46:42 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add Instance.hidden field"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"During a cross-cell move operation, an instance can"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"3fce034c_77ee17b5","line":6,"updated":"2019-04-18 09:01:32.000000000","message":"++ thanks for the nice commit message update with separate sections.","commit_id":"4d48912ac088e0999a1a6e8fd84441305b96dead"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ce9b7d979bd9c0949b0fa58182fd66b7ddeb93aa","unresolved":false,"context_lines":[{"line_number":16,"context_line":"mapping and should not be returned when listing instances."},{"line_number":17,"context_line":"Note that the API already filters out duplicates (see"},{"line_number":18,"context_line":"_get_unique_filter_method in API.get_all) but this gives"},{"line_number":19,"context_line":"us a way to control which is shown rather than get lucky."},{"line_number":20,"context_line":"The DB API method to list instances will filter out hidden"},{"line_number":21,"context_line":"instances by default."},{"line_number":22,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":41,"id":"7faddb67_ff5eae74","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":57},"updated":"2019-08-09 16:05:26.000000000","message":"++","commit_id":"2d2cfc4aa55ae023633600ad0a2445b0bc187024"}],"nova/compute/api.py":[{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"1c21619743c6f03f071b38d8a827886c5580acfc","unresolved":false,"context_lines":[{"line_number":2658,"context_line":"            seen_uuids \u003d set()"},{"line_number":2659,"context_line":""},{"line_number":2660,"context_line":"            def _filter(instance):"},{"line_number":2661,"context_line":"                # During a cross-cell move operation we could have the instance"},{"line_number":2662,"context_line":"                # in more than one cell database so we not only have to filter"},{"line_number":2663,"context_line":"                # duplicates but we want to make sure we only return the"},{"line_number":2664,"context_line":"                # \"current\" one which should also be the one that the instance"},{"line_number":2665,"context_line":"                # mapping points to, but we don\u0027t want to do that expensive"},{"line_number":2666,"context_line":"                # lookup here."},{"line_number":2667,"context_line":"                if instance.uuid in seen_uuids or instance.hidden:"},{"line_number":2668,"context_line":"                    return False"},{"line_number":2669,"context_line":"                seen_uuids.add(instance.uuid)"},{"line_number":2670,"context_line":"                return True"},{"line_number":2671,"context_line":""},{"line_number":2672,"context_line":"            return _filter"},{"line_number":2673,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bfdaf3ff_0a0d5336","line":2670,"range":{"start_line":2661,"start_character":16,"end_line":2670,"end_character":27},"updated":"2019-01-16 08:45:17.000000000","message":"could it be possible to filter also by updated_at? which can prevent showing the wrong one in the short window where both instance.hidden\u003dFalse?","commit_id":"92b7cdfd6e47fb6fb63bd9d54881bc7736f3002d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"10abda9405d6d811c1e2db2a359b7d0d8cdf88f8","unresolved":false,"context_lines":[{"line_number":2658,"context_line":"            seen_uuids \u003d set()"},{"line_number":2659,"context_line":""},{"line_number":2660,"context_line":"            def _filter(instance):"},{"line_number":2661,"context_line":"                # During a cross-cell move operation we could have the instance"},{"line_number":2662,"context_line":"                # in more than one cell database so we not only have to filter"},{"line_number":2663,"context_line":"                # duplicates but we want to make sure we only return the"},{"line_number":2664,"context_line":"                # \"current\" one which should also be the one that the instance"},{"line_number":2665,"context_line":"                # mapping points to, but we don\u0027t want to do that expensive"},{"line_number":2666,"context_line":"                # lookup here."},{"line_number":2667,"context_line":"                if instance.uuid in seen_uuids or instance.hidden:"},{"line_number":2668,"context_line":"                    return False"},{"line_number":2669,"context_line":"                seen_uuids.add(instance.uuid)"},{"line_number":2670,"context_line":"                return True"},{"line_number":2671,"context_line":""},{"line_number":2672,"context_line":"            return _filter"},{"line_number":2673,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bfdaf3ff_f05a3128","line":2670,"range":{"start_line":2661,"start_character":16,"end_line":2670,"end_character":27},"in_reply_to":"bfdaf3ff_0a0d5336","updated":"2019-01-16 19:05:45.000000000","message":"Possibly, I can add a note about investigating that. The problem in this method is I don\u0027t really have the context on all of the instances since I\u0027m processing them one at a time. Filtering by updated_at is closer to what I did with duplicate migrations here:\n\nhttps://review.openstack.org/#/c/603930/20/nova/compute/api.py@4703","commit_id":"92b7cdfd6e47fb6fb63bd9d54881bc7736f3002d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"31042663f10ba405f7fc5a47e02ea4194a544713","unresolved":false,"context_lines":[{"line_number":2658,"context_line":"            seen_uuids \u003d set()"},{"line_number":2659,"context_line":""},{"line_number":2660,"context_line":"            def _filter(instance):"},{"line_number":2661,"context_line":"                # During a cross-cell move operation we could have the instance"},{"line_number":2662,"context_line":"                # in more than one cell database so we not only have to filter"},{"line_number":2663,"context_line":"                # duplicates but we want to make sure we only return the"},{"line_number":2664,"context_line":"                # \"current\" one which should also be the one that the instance"},{"line_number":2665,"context_line":"                # mapping points to, but we don\u0027t want to do that expensive"},{"line_number":2666,"context_line":"                # lookup here."},{"line_number":2667,"context_line":"                if instance.uuid in seen_uuids or instance.hidden:"},{"line_number":2668,"context_line":"                    return False"},{"line_number":2669,"context_line":"                seen_uuids.add(instance.uuid)"},{"line_number":2670,"context_line":"                return True"},{"line_number":2671,"context_line":""},{"line_number":2672,"context_line":"            return _filter"},{"line_number":2673,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bfdaf3ff_f6dd4a14","line":2670,"range":{"start_line":2661,"start_character":16,"end_line":2670,"end_character":27},"in_reply_to":"bfdaf3ff_f05a3128","updated":"2019-01-16 20:08:30.000000000","message":"One thing about filtering with updated_at is if the user is explicitly filtering on changes-since/updated_at or sorting on updated_at, we could screw that up if we pick the latest one...so it gets complicated. I\u0027ll leave a TODO since it\u0027s a more minor issue, but it\u0027s why I didn\u0027t originally plan on doing the updated_at filtering for instances like I did for migrations. And now that I think about changes-since, the updated_at filtering I\u0027m doing for duplicate migrations could be wrong there as well.","commit_id":"92b7cdfd6e47fb6fb63bd9d54881bc7736f3002d"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"73ee61dba5bd304c568174a53c73d981358ba60d","unresolved":false,"context_lines":[{"line_number":2774,"context_line":"                # but technically that was already potentially broken with this"},{"line_number":2775,"context_line":"                # _filter method if we return an older BuildRequest.instance,"},{"line_number":2776,"context_line":"                # and given the window should be very small where we have"},{"line_number":2777,"context_line":"                # duplicates, it\u0027s probably not worth the complexity."},{"line_number":2778,"context_line":"                if instance.uuid in seen_uuids or instance.hidden:"},{"line_number":2779,"context_line":"                    return False"},{"line_number":2780,"context_line":"                seen_uuids.add(instance.uuid)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3fce034c_73d0d6f8","line":2777,"range":{"start_line":2777,"start_character":30,"end_line":2777,"end_character":68},"updated":"2019-04-12 16:22:11.000000000","message":"++\n\nI think this is a small understandable race window where user might get two records of the same instance when hidden is False for both. We could use the \"updated_at\" logic but IMHO its not worth breaking the existing filtering based on changes-since like you said. Besides if operators are that concerned about the accuracy, they can set api.instance_list_per_project_cells to True as a workaround (this could be added to the API documentation in case people freak out when seeing two instances). Its a gamble between perf/accuracy.","commit_id":"c373d236c6d6f5d27008c2856197d865f722a25f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"975d60d83deea483f75892b11d8d4f72241e4326","unresolved":false,"context_lines":[{"line_number":2774,"context_line":"                # but technically that was already potentially broken with this"},{"line_number":2775,"context_line":"                # _filter method if we return an older BuildRequest.instance,"},{"line_number":2776,"context_line":"                # and given the window should be very small where we have"},{"line_number":2777,"context_line":"                # duplicates, it\u0027s probably not worth the complexity."},{"line_number":2778,"context_line":"                if instance.uuid in seen_uuids or instance.hidden:"},{"line_number":2779,"context_line":"                    return False"},{"line_number":2780,"context_line":"                seen_uuids.add(instance.uuid)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3fce034c_06510737","line":2777,"range":{"start_line":2777,"start_character":30,"end_line":2777,"end_character":68},"in_reply_to":"3fce034c_73d0d6f8","updated":"2019-04-12 21:04:21.000000000","message":"To be clear, you\u0027ll never see two instances because this _get_unique_filter_method method will only return one, but it could be one you weren\u0027t expecting if you hit the window and the exact right time, but as you said that window is extremely small.","commit_id":"c373d236c6d6f5d27008c2856197d865f722a25f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"169b7f73015ad0f1c01498e0d82b9483368b4dcb","unresolved":false,"context_lines":[{"line_number":2773,"context_line":"                # _filter method if we return an older BuildRequest.instance,"},{"line_number":2774,"context_line":"                # and given the window should be very small where we have"},{"line_number":2775,"context_line":"                # duplicates, it\u0027s probably not worth the complexity."},{"line_number":2776,"context_line":"                if instance.uuid in seen_uuids or instance.hidden:"},{"line_number":2777,"context_line":"                    return False"},{"line_number":2778,"context_line":"                seen_uuids.add(instance.uuid)"},{"line_number":2779,"context_line":"                return True"}],"source_content_type":"text/x-python","patch_set":34,"id":"9fb8cfa7_62ee20ee","line":2776,"updated":"2019-06-27 15:30:33.000000000","message":"I\u0027m kind of surprised to see this here. I would expect to just not have the hidden things in the instance list(s) we pulled...","commit_id":"3f8f2e76b1dbae326f20291fc0a6a855e40e5be2"}],"nova/db/sqlalchemy/migrate_repo/versions/393_add_instances_hidden.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9ea8709a63364561d499adc102952f7a906f9566","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"#    a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":17,"id":"3fce034c_b8aaae16","line":1,"updated":"2019-04-11 14:08:55.000000000","message":"This version is taken now so I need to rebase.","commit_id":"aacc601aee290dae0207544492646bd44b0cca3d"}],"nova/db/sqlalchemy/migrate_repo/versions/399_add_instances_hidden.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ce9b7d979bd9c0949b0fa58182fd66b7ddeb93aa","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    for prefix in (\u0027\u0027, \u0027shadow_\u0027):"},{"line_number":21,"context_line":"        instances \u003d Table(\u0027%sinstances\u0027 % prefix, meta, autoload\u003dTrue)"},{"line_number":22,"context_line":"        if not hasattr(instances.c, \u0027hidden\u0027):"},{"line_number":23,"context_line":"            hidden \u003d Column(\u0027hidden\u0027, Boolean, default\u003dFalse)"},{"line_number":24,"context_line":"            instances.create_column(hidden)"}],"source_content_type":"text/x-python","patch_set":41,"id":"7faddb67_bfacb635","line":23,"range":{"start_line":23,"start_character":47,"end_line":23,"end_character":54},"updated":"2019-08-09 16:05:26.000000000","message":"I\u0027m trying to remember why I had to use server_default instead of default in a now abandoned change to the ComputeNode object for cpu-resources. Something about the field not being set. I guess that\u0027s not a common thing though because I see lots of this done in our migrations.","commit_id":"2d2cfc4aa55ae023633600ad0a2445b0bc187024"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"91165496b7635040eef727ab902f71cd2b0916ad","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    for prefix in (\u0027\u0027, \u0027shadow_\u0027):"},{"line_number":21,"context_line":"        instances \u003d Table(\u0027%sinstances\u0027 % prefix, meta, autoload\u003dTrue)"},{"line_number":22,"context_line":"        if not hasattr(instances.c, \u0027hidden\u0027):"},{"line_number":23,"context_line":"            hidden \u003d Column(\u0027hidden\u0027, Boolean, default\u003dFalse)"},{"line_number":24,"context_line":"            instances.create_column(hidden)"}],"source_content_type":"text/x-python","patch_set":41,"id":"7faddb67_ee0b5a21","line":23,"range":{"start_line":23,"start_character":47,"end_line":23,"end_character":54},"in_reply_to":"7faddb67_bfacb635","updated":"2019-08-09 19:33:02.000000000","message":"Not sure. My understanding is default\u003d is the python default in the model and server_default is the server-side default for the schema.","commit_id":"2d2cfc4aa55ae023633600ad0a2445b0bc187024"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f0255a13832681d059a65d95954400a32a7674cc","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    for prefix in (\u0027\u0027, \u0027shadow_\u0027):"},{"line_number":21,"context_line":"        instances \u003d Table(\u0027%sinstances\u0027 % prefix, meta, autoload\u003dTrue)"},{"line_number":22,"context_line":"        if not hasattr(instances.c, \u0027hidden\u0027):"},{"line_number":23,"context_line":"            hidden \u003d Column(\u0027hidden\u0027, Boolean, default\u003dFalse)"},{"line_number":24,"context_line":"            instances.create_column(hidden)"}],"source_content_type":"text/x-python","patch_set":41,"id":"3fa7e38b_4b010b07","line":23,"range":{"start_line":23,"start_character":47,"end_line":23,"end_character":54},"in_reply_to":"7faddb67_ee0b5a21","updated":"2020-02-06 19:19:24.000000000","message":"Turns out it\u0027s a problem:\n\nhttps://review.opendev.org/#/c/706331/","commit_id":"2d2cfc4aa55ae023633600ad0a2445b0bc187024"}],"nova/objects/instance.py":[{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"73ee61dba5bd304c568174a53c73d981358ba60d","unresolved":false,"context_lines":[{"line_number":114,"context_line":"    # Version 2.1: Added services"},{"line_number":115,"context_line":"    # Version 2.2: Added keypairs"},{"line_number":116,"context_line":"    # Version 2.3: Added device_metadata"},{"line_number":117,"context_line":"    # Version 2.4: Added trusted_certs"},{"line_number":118,"context_line":"    # Version 2.6: Added hidden"},{"line_number":119,"context_line":"    VERSION \u003d \u00272.6\u0027"},{"line_number":120,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"3fce034c_53d7daee","line":117,"updated":"2019-04-12 16:22:11.000000000","message":"missed 2.5","commit_id":"c373d236c6d6f5d27008c2856197d865f722a25f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fab57424f638d3227118530b64b5df36d0cfda87","unresolved":false,"context_lines":[{"line_number":114,"context_line":"    # Version 2.1: Added services"},{"line_number":115,"context_line":"    # Version 2.2: Added keypairs"},{"line_number":116,"context_line":"    # Version 2.3: Added device_metadata"},{"line_number":117,"context_line":"    # Version 2.4: Added trusted_certs"},{"line_number":118,"context_line":"    # Version 2.6: Added hidden"},{"line_number":119,"context_line":"    VERSION \u003d \u00272.6\u0027"},{"line_number":120,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"3fce034c_7fcfdb55","line":117,"in_reply_to":"3fce034c_0636e704","updated":"2019-04-17 21:26:41.000000000","message":"Done","commit_id":"c373d236c6d6f5d27008c2856197d865f722a25f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"975d60d83deea483f75892b11d8d4f72241e4326","unresolved":false,"context_lines":[{"line_number":114,"context_line":"    # Version 2.1: Added services"},{"line_number":115,"context_line":"    # Version 2.2: Added keypairs"},{"line_number":116,"context_line":"    # Version 2.3: Added device_metadata"},{"line_number":117,"context_line":"    # Version 2.4: Added trusted_certs"},{"line_number":118,"context_line":"    # Version 2.6: Added hidden"},{"line_number":119,"context_line":"    VERSION \u003d \u00272.6\u0027"},{"line_number":120,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"3fce034c_0636e704","line":117,"in_reply_to":"3fce034c_53d7daee","updated":"2019-04-12 21:04:21.000000000","message":"This was rebase damage.","commit_id":"c373d236c6d6f5d27008c2856197d865f722a25f"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"73ee61dba5bd304c568174a53c73d981358ba60d","unresolved":false,"context_lines":[{"line_number":225,"context_line":"    def obj_make_compatible(self, primitive, target_version):"},{"line_number":226,"context_line":"        super(Instance, self).obj_make_compatible(primitive, target_version)"},{"line_number":227,"context_line":"        target_version \u003d versionutils.convert_version_to_tuple(target_version)"},{"line_number":228,"context_line":"        if target_version \u003c (2, 5) and \u0027hidden\u0027 in primitive:"},{"line_number":229,"context_line":"            del primitive[\u0027hidden\u0027]"},{"line_number":230,"context_line":"        if target_version \u003c (2, 4) and \u0027trusted_certs\u0027 in primitive:"},{"line_number":231,"context_line":"            del primitive[\u0027trusted_certs\u0027]"}],"source_content_type":"text/x-python","patch_set":18,"id":"3fce034c_f305a67b","line":228,"range":{"start_line":228,"start_character":32,"end_line":228,"end_character":33},"updated":"2019-04-12 16:22:11.000000000","message":"6","commit_id":"c373d236c6d6f5d27008c2856197d865f722a25f"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"73ee61dba5bd304c568174a53c73d981358ba60d","unresolved":false,"context_lines":[{"line_number":225,"context_line":"    def obj_make_compatible(self, primitive, target_version):"},{"line_number":226,"context_line":"        super(Instance, self).obj_make_compatible(primitive, target_version)"},{"line_number":227,"context_line":"        target_version \u003d versionutils.convert_version_to_tuple(target_version)"},{"line_number":228,"context_line":"        if target_version \u003c (2, 5) and \u0027hidden\u0027 in primitive:"},{"line_number":229,"context_line":"            del primitive[\u0027hidden\u0027]"},{"line_number":230,"context_line":"        if target_version \u003c (2, 4) and \u0027trusted_certs\u0027 in primitive:"},{"line_number":231,"context_line":"            del primitive[\u0027trusted_certs\u0027]"}],"source_content_type":"text/x-python","patch_set":18,"id":"3fce034c_130b928e","line":228,"range":{"start_line":228,"start_character":0,"end_line":228,"end_character":1},"updated":"2019-04-12 16:22:11.000000000","message":"missing test case for obj_compatibility.","commit_id":"c373d236c6d6f5d27008c2856197d865f722a25f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fab57424f638d3227118530b64b5df36d0cfda87","unresolved":false,"context_lines":[{"line_number":225,"context_line":"    def obj_make_compatible(self, primitive, target_version):"},{"line_number":226,"context_line":"        super(Instance, self).obj_make_compatible(primitive, target_version)"},{"line_number":227,"context_line":"        target_version \u003d versionutils.convert_version_to_tuple(target_version)"},{"line_number":228,"context_line":"        if target_version \u003c (2, 5) and \u0027hidden\u0027 in primitive:"},{"line_number":229,"context_line":"            del primitive[\u0027hidden\u0027]"},{"line_number":230,"context_line":"        if target_version \u003c (2, 4) and \u0027trusted_certs\u0027 in primitive:"},{"line_number":231,"context_line":"            del primitive[\u0027trusted_certs\u0027]"}],"source_content_type":"text/x-python","patch_set":18,"id":"3fce034c_9ffde76f","line":228,"range":{"start_line":228,"start_character":0,"end_line":228,"end_character":1},"in_reply_to":"3fce034c_130b928e","updated":"2019-04-17 21:26:41.000000000","message":"Done","commit_id":"c373d236c6d6f5d27008c2856197d865f722a25f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fab57424f638d3227118530b64b5df36d0cfda87","unresolved":false,"context_lines":[{"line_number":225,"context_line":"    def obj_make_compatible(self, primitive, target_version):"},{"line_number":226,"context_line":"        super(Instance, self).obj_make_compatible(primitive, target_version)"},{"line_number":227,"context_line":"        target_version \u003d versionutils.convert_version_to_tuple(target_version)"},{"line_number":228,"context_line":"        if target_version \u003c (2, 5) and \u0027hidden\u0027 in primitive:"},{"line_number":229,"context_line":"            del primitive[\u0027hidden\u0027]"},{"line_number":230,"context_line":"        if target_version \u003c (2, 4) and \u0027trusted_certs\u0027 in primitive:"},{"line_number":231,"context_line":"            del primitive[\u0027trusted_certs\u0027]"}],"source_content_type":"text/x-python","patch_set":18,"id":"3fce034c_bf02236e","line":228,"range":{"start_line":228,"start_character":32,"end_line":228,"end_character":33},"in_reply_to":"3fce034c_f305a67b","updated":"2019-04-17 21:26:41.000000000","message":"Done","commit_id":"c373d236c6d6f5d27008c2856197d865f722a25f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"975d60d83deea483f75892b11d8d4f72241e4326","unresolved":false,"context_lines":[{"line_number":225,"context_line":"    def obj_make_compatible(self, primitive, target_version):"},{"line_number":226,"context_line":"        super(Instance, self).obj_make_compatible(primitive, target_version)"},{"line_number":227,"context_line":"        target_version \u003d versionutils.convert_version_to_tuple(target_version)"},{"line_number":228,"context_line":"        if target_version \u003c (2, 5) and \u0027hidden\u0027 in primitive:"},{"line_number":229,"context_line":"            del primitive[\u0027hidden\u0027]"},{"line_number":230,"context_line":"        if target_version \u003c (2, 4) and \u0027trusted_certs\u0027 in primitive:"},{"line_number":231,"context_line":"            del primitive[\u0027trusted_certs\u0027]"}],"source_content_type":"text/x-python","patch_set":18,"id":"3fce034c_c63f7fd4","line":228,"range":{"start_line":228,"start_character":32,"end_line":228,"end_character":33},"in_reply_to":"3fce034c_f305a67b","updated":"2019-04-12 21:04:21.000000000","message":"same as above, rebase damage","commit_id":"c373d236c6d6f5d27008c2856197d865f722a25f"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"73ee61dba5bd304c568174a53c73d981358ba60d","unresolved":false,"context_lines":[{"line_number":1548,"context_line":"        # NOTE(mriedem): Filter out hidden instances since there should be a"},{"line_number":1549,"context_line":"        # non-hidden version of the instance in another cell database and the"},{"line_number":1550,"context_line":"        # API will only show one of them, so we don\u0027t count the hidden copy."},{"line_number":1551,"context_line":"        project_query \u003d project_query.filter_by(hidden\u003dfalse())"},{"line_number":1552,"context_line":""},{"line_number":1553,"context_line":"        project_result \u003d project_query.first()"},{"line_number":1554,"context_line":"        fields \u003d (\u0027instances\u0027, \u0027cores\u0027, \u0027ram\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3fce034c_f7f4ab5d","line":1551,"updated":"2019-04-12 16:22:11.000000000","message":"okay so for legacy quota counting also we just \"switch\" :)\n\nthis reminds me, wouldn\u0027t we race here : https://github.com/openstack/nova/blob/f7fd6cb58b22ad925f10a736215f4f004b497dc7/nova/quota.py#L1090 ?","commit_id":"c373d236c6d6f5d27008c2856197d865f722a25f"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"19415bac227b54106e8f7bdc698586d5f96ea92c","unresolved":false,"context_lines":[{"line_number":1548,"context_line":"        # NOTE(mriedem): Filter out hidden instances since there should be a"},{"line_number":1549,"context_line":"        # non-hidden version of the instance in another cell database and the"},{"line_number":1550,"context_line":"        # API will only show one of them, so we don\u0027t count the hidden copy."},{"line_number":1551,"context_line":"        project_query \u003d project_query.filter_by(hidden\u003dfalse())"},{"line_number":1552,"context_line":""},{"line_number":1553,"context_line":"        project_result \u003d project_query.first()"},{"line_number":1554,"context_line":"        fields \u003d (\u0027instances\u0027, \u0027cores\u0027, \u0027ram\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3fce034c_97d2a3ff","line":1551,"in_reply_to":"3fce034c_462b8f93","updated":"2019-04-18 09:01:32.000000000","message":"\u003e \u003e okay so for legacy quota counting also we just \"switch\" :)\n \u003e \n \u003e I\u0027m not following you - this is the legacy quota counting query\n \u003e method.\n \u003e \n\nah no, yes you are right, I was just blabbering to myself at this point. I mean I was talking about this quota counting only just made a mental note.","commit_id":"c373d236c6d6f5d27008c2856197d865f722a25f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fab57424f638d3227118530b64b5df36d0cfda87","unresolved":false,"context_lines":[{"line_number":1548,"context_line":"        # NOTE(mriedem): Filter out hidden instances since there should be a"},{"line_number":1549,"context_line":"        # non-hidden version of the instance in another cell database and the"},{"line_number":1550,"context_line":"        # API will only show one of them, so we don\u0027t count the hidden copy."},{"line_number":1551,"context_line":"        project_query \u003d project_query.filter_by(hidden\u003dfalse())"},{"line_number":1552,"context_line":""},{"line_number":1553,"context_line":"        project_result \u003d project_query.first()"},{"line_number":1554,"context_line":"        fields \u003d (\u0027instances\u0027, \u0027cores\u0027, \u0027ram\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3fce034c_e229f289","line":1551,"in_reply_to":"3fce034c_462b8f93","updated":"2019-04-17 21:26:41.000000000","message":"Hmm, we already handle duplicate UUIDs for build requests:\n\nhttps://github.com/openstack/nova/blob/f7fd6cb58b22ad925f10a736215f4f004b497dc7/nova/quota.py#L1101\n\nBut not instances, so yeah filtering on hidden\u003dFalse there or simply making instance_uuids a set and then counting that should fix any duplicates during a cross-cell resize. I\u0027ll add a test either way.","commit_id":"c373d236c6d6f5d27008c2856197d865f722a25f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"975d60d83deea483f75892b11d8d4f72241e4326","unresolved":false,"context_lines":[{"line_number":1548,"context_line":"        # NOTE(mriedem): Filter out hidden instances since there should be a"},{"line_number":1549,"context_line":"        # non-hidden version of the instance in another cell database and the"},{"line_number":1550,"context_line":"        # API will only show one of them, so we don\u0027t count the hidden copy."},{"line_number":1551,"context_line":"        project_query \u003d project_query.filter_by(hidden\u003dfalse())"},{"line_number":1552,"context_line":""},{"line_number":1553,"context_line":"        project_result \u003d project_query.first()"},{"line_number":1554,"context_line":"        fields \u003d (\u0027instances\u0027, \u0027cores\u0027, \u0027ram\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3fce034c_462b8f93","line":1551,"in_reply_to":"3fce034c_f7f4ab5d","updated":"2019-04-12 21:04:21.000000000","message":"\u003e okay so for legacy quota counting also we just \"switch\" :)\n\nI\u0027m not following you - this is the legacy quota counting query method.\n\n\u003e this reminds me, wouldn\u0027t we race here : https://github.com/openstack/nova/blob/f7fd6cb58b22ad925f10a736215f4f004b497dc7/nova/quota.py#L1090 ?\n\nHmm, maybe, as in we could show 2 members when there is really only 1. I\u0027ll see if I can add a test for that.","commit_id":"c373d236c6d6f5d27008c2856197d865f722a25f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ce9b7d979bd9c0949b0fa58182fd66b7ddeb93aa","unresolved":false,"context_lines":[{"line_number":1466,"context_line":"        # NOTE(mriedem): Filter out hidden instances since there should be a"},{"line_number":1467,"context_line":"        # non-hidden version of the instance in another cell database and the"},{"line_number":1468,"context_line":"        # API will only show one of them, so we don\u0027t count the hidden copy."},{"line_number":1469,"context_line":"        project_query \u003d project_query.filter_by(hidden\u003dfalse())"},{"line_number":1470,"context_line":""},{"line_number":1471,"context_line":"        project_result \u003d project_query.first()"},{"line_number":1472,"context_line":"        fields \u003d (\u0027instances\u0027, \u0027cores\u0027, \u0027ram\u0027)"}],"source_content_type":"text/x-python","patch_set":41,"id":"7faddb67_7f7b9ebd","line":1469,"range":{"start_line":1469,"start_character":55,"end_line":1469,"end_character":62},"updated":"2019-08-09 16:05:26.000000000","message":"What is false() ? We use it in some places but not everywhere, e.g.\n\n- https://github.com/openstack/nova/blob/06f25d8c175/nova/objects/floating_ip.py#L190\n- https://github.com/openstack/nova/blob/06f25d8c175/nova/objects/instance_mapping.py#L402\n\nLater: I see https://docs.sqlalchemy.org/en/13/core/sqlelement.html#sqlalchemy.sql.expression.false Do those other instances need to be updated, I wonder?","commit_id":"2d2cfc4aa55ae023633600ad0a2445b0bc187024"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"91165496b7635040eef727ab902f71cd2b0916ad","unresolved":false,"context_lines":[{"line_number":1466,"context_line":"        # NOTE(mriedem): Filter out hidden instances since there should be a"},{"line_number":1467,"context_line":"        # non-hidden version of the instance in another cell database and the"},{"line_number":1468,"context_line":"        # API will only show one of them, so we don\u0027t count the hidden copy."},{"line_number":1469,"context_line":"        project_query \u003d project_query.filter_by(hidden\u003dfalse())"},{"line_number":1470,"context_line":""},{"line_number":1471,"context_line":"        project_result \u003d project_query.first()"},{"line_number":1472,"context_line":"        fields \u003d (\u0027instances\u0027, \u0027cores\u0027, \u0027ram\u0027)"}],"source_content_type":"text/x-python","patch_set":41,"id":"7faddb67_7302f50d","line":1469,"range":{"start_line":1469,"start_character":55,"end_line":1469,"end_character":62},"in_reply_to":"7faddb67_7f7b9ebd","updated":"2019-08-09 19:33:02.000000000","message":"As we discussed in IRC, false() is I think the more correct thing to do in case there are DBs that don\u0027t define a Boolean type as a boolean (true/false) but rather an int (0/1) which is what older versions of DB2 did for booleans, but mysql/postgresql/sqlite define boolean types as booleans so in practice it\u0027s not an issue for us.","commit_id":"2d2cfc4aa55ae023633600ad0a2445b0bc187024"}],"nova/quota.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"85b5fe3432f55b7c7406f1ec3d1b97292c9e9b7a","unresolved":false,"context_lines":[{"line_number":1141,"context_line":"    greenthreads \u003d []"},{"line_number":1142,"context_line":"    filters \u003d {\u0027deleted\u0027: False, \u0027user_id\u0027: user_id, \u0027uuid\u0027: group.members,"},{"line_number":1143,"context_line":"               # Filter out hidden instances during a cross-cell resize."},{"line_number":1144,"context_line":"               \u0027hidden\u0027: False}"},{"line_number":1145,"context_line":"    for cell_mapping in cell_mappings:"},{"line_number":1146,"context_line":"        with nova_context.target_cell(context, cell_mapping) as cctxt:"},{"line_number":1147,"context_line":"            greenthreads.append(utils.spawn("}],"source_content_type":"text/x-python","patch_set":32,"id":"9fb8cfa7_52a7c650","line":1144,"updated":"2019-06-18 17:06:52.000000000","message":"Would it not just be easier and less error-prone to make the instance queries just filter out hidden by default and require things that need to find them be opt-in?","commit_id":"5576623ceed3ba9dde3f1c8108f8ec4b0388e2bf"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2df4fefdd2bf45299b3529f3ad42d597cc14dead","unresolved":false,"context_lines":[{"line_number":1141,"context_line":"    greenthreads \u003d []"},{"line_number":1142,"context_line":"    filters \u003d {\u0027deleted\u0027: False, \u0027user_id\u0027: user_id, \u0027uuid\u0027: group.members,"},{"line_number":1143,"context_line":"               # Filter out hidden instances during a cross-cell resize."},{"line_number":1144,"context_line":"               \u0027hidden\u0027: False}"},{"line_number":1145,"context_line":"    for cell_mapping in cell_mappings:"},{"line_number":1146,"context_line":"        with nova_context.target_cell(context, cell_mapping) as cctxt:"},{"line_number":1147,"context_line":"            greenthreads.append(utils.spawn("}],"source_content_type":"text/x-python","patch_set":32,"id":"9fb8cfa7_e2a4e7bb","line":1144,"in_reply_to":"9fb8cfa7_52a7c650","updated":"2019-06-18 20:52:11.000000000","message":"Yeah probably...I can do something in the DB API instance_get_all_by_filters_sort method (rather than just the InstanceList.get_by_filters method) such that if \u0027hidden\u0027 isn\u0027t in the search_opts list I\u0027ll default to False. Since I\u0027ve already got a functional test covering this quota case it should still cover that change.","commit_id":"5576623ceed3ba9dde3f1c8108f8ec4b0388e2bf"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"739144a966d6691592131292ea3f46ad518195cb","unresolved":false,"context_lines":[{"line_number":1141,"context_line":"    greenthreads \u003d []"},{"line_number":1142,"context_line":"    filters \u003d {\u0027deleted\u0027: False, \u0027user_id\u0027: user_id, \u0027uuid\u0027: group.members,"},{"line_number":1143,"context_line":"               # Filter out hidden instances during a cross-cell resize."},{"line_number":1144,"context_line":"               \u0027hidden\u0027: False}"},{"line_number":1145,"context_line":"    for cell_mapping in cell_mappings:"},{"line_number":1146,"context_line":"        with nova_context.target_cell(context, cell_mapping) as cctxt:"},{"line_number":1147,"context_line":"            greenthreads.append(utils.spawn("}],"source_content_type":"text/x-python","patch_set":32,"id":"9fb8cfa7_a544b91c","line":1144,"in_reply_to":"9fb8cfa7_e2a4e7bb","updated":"2019-06-18 21:38:47.000000000","message":"Done","commit_id":"5576623ceed3ba9dde3f1c8108f8ec4b0388e2bf"}],"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":"fab57424f638d3227118530b64b5df36d0cfda87","unresolved":false,"context_lines":[{"line_number":916,"context_line":"                          self.controller.detail, req)"},{"line_number":917,"context_line":""},{"line_number":918,"context_line":"    def test_get_servers_invalid_sort_key(self):"},{"line_number":919,"context_line":"        # \"hidden\" is a real field for instances but not exposed in the API."},{"line_number":920,"context_line":"        req \u003d self.req(\u0027/fake/servers?sort_key\u003dhidden\u0026sort_dir\u003ddesc\u0027)"},{"line_number":921,"context_line":"        self.assertRaises(exception.ValidationError,"},{"line_number":922,"context_line":"                          self.controller.index, req)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3fce034c_a211aa5f","line":919,"updated":"2019-04-17 21:26:41.000000000","message":"OK so this shows where hidden is an invalid sort key so it\u0027s getting blacklisted somewhere.\n\n(later)\n\nIt\u0027s not explicitly blacklisted, it\u0027s just not whitelisted in VALID_SORT_KEYS.","commit_id":"c373d236c6d6f5d27008c2856197d865f722a25f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fab57424f638d3227118530b64b5df36d0cfda87","unresolved":false,"context_lines":[{"line_number":1460,"context_line":"            # Allowed only by admins with admin API on"},{"line_number":1461,"context_line":"            self.assertIn(\u0027ip\u0027, search_opts)"},{"line_number":1462,"context_line":"            self.assertNotIn(\u0027unknown_option\u0027, search_opts)"},{"line_number":1463,"context_line":"            # \"hidden\" is ignored as a filter parameter since it is only used"},{"line_number":1464,"context_line":"            # internally"},{"line_number":1465,"context_line":"            self.assertNotIn(\u0027hidden\u0027, search_opts)"},{"line_number":1466,"context_line":"            return objects.InstanceList("}],"source_content_type":"text/x-python","patch_set":18,"id":"3fce034c_820cae41","line":1463,"updated":"2019-04-17 21:26:41.000000000","message":"And this for a filter parameter - it\u0027s not whitelisted so it\u0027s accepted because additionalProperties\u003dTrue but it\u0027s ignored.","commit_id":"c373d236c6d6f5d27008c2856197d865f722a25f"}]}
