)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"33d2760f25b302c9b5a0293592f3eb0576b5b489","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Fix filter server list with SOFT_DELETED status"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When executing \"nova list --status SOFT_DELETED\", soft-deleted instances"},{"line_number":10,"context_line":"are the user has access to are not returned actually. This is because"},{"line_number":11,"context_line":"db counts on \u0027soft-deleted\u0027 filter in \u0027search_opts\u0027 to decide whether or"},{"line_number":12,"context_line":"not to filter out soft-deleted instances. This patch fixes it by setting"},{"line_number":13,"context_line":"\u0027soft-deleted\u0027 to True when \u0027vm_state\u0027 \u003d \u0027soft-delete\u0027 in search_opts."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3f79a3b5_8625215f","line":10,"range":{"start_line":10,"start_character":8,"end_line":10,"end_character":12},"updated":"2018-08-29 13:16:10.000000000","message":"We should probably not use the word \"user\" since vm_state is an admin-only filter.","commit_id":"f039f7019486aab6ba2ba195cc946bb889685469"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"33d2760f25b302c9b5a0293592f3eb0576b5b489","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Fix filter server list with SOFT_DELETED status"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When executing \"nova list --status SOFT_DELETED\", soft-deleted instances"},{"line_number":10,"context_line":"are the user has access to are not returned actually. This is because"},{"line_number":11,"context_line":"db counts on \u0027soft-deleted\u0027 filter in \u0027search_opts\u0027 to decide whether or"},{"line_number":12,"context_line":"not to filter out soft-deleted instances. This patch fixes it by setting"},{"line_number":13,"context_line":"\u0027soft-deleted\u0027 to True when \u0027vm_state\u0027 \u003d \u0027soft-delete\u0027 in search_opts."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3f79a3b5_268c4d7e","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":3},"updated":"2018-08-29 13:16:10.000000000","message":"s/are/which/","commit_id":"f039f7019486aab6ba2ba195cc946bb889685469"},{"author":{"_account_id":25562,"name":"Chen","email":"dstbtgagt@foxmail.com","username":"chenn2"},"change_message_id":"981fa7a19974a5225bececb0d8b47a2974756888","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Fix filter server list with SOFT_DELETED status"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When executing \"nova list --status SOFT_DELETED\", soft-deleted instances"},{"line_number":10,"context_line":"are the user has access to are not returned actually. This is because"},{"line_number":11,"context_line":"db counts on \u0027soft-deleted\u0027 filter in \u0027search_opts\u0027 to decide whether or"},{"line_number":12,"context_line":"not to filter out soft-deleted instances. This patch fixes it by setting"},{"line_number":13,"context_line":"\u0027soft-deleted\u0027 to True when \u0027vm_state\u0027 \u003d \u0027soft-delete\u0027 in search_opts."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3f79a3b5_c7cbf747","line":10,"range":{"start_line":10,"start_character":8,"end_line":10,"end_character":12},"in_reply_to":"3f79a3b5_8625215f","updated":"2018-08-30 13:23:16.000000000","message":"I think here we are actually using filter status and it is available to non-admin users [1].\n[1] https://github.com/openstack/nova/blob/master/nova/api/openstack/compute/servers.py#L1087","commit_id":"f039f7019486aab6ba2ba195cc946bb889685469"}],"nova/api/openstack/compute/servers.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"33d2760f25b302c9b5a0293592f3eb0576b5b489","unresolved":false,"context_lines":[{"line_number":178,"context_line":"                msg \u003d _(\"Only administrators may list deleted instances\")"},{"line_number":179,"context_line":"                raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        if search_opts.get(\"vm_state\") \u003d\u003d [\u0027soft-delete\u0027]:"},{"line_number":182,"context_line":"            search_opts[\u0027soft_deleted\u0027] \u003d True"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        if api_version_request.is_supported(req, min_version\u003d\u00272.26\u0027):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_669245a2","line":181,"range":{"start_line":181,"start_character":42,"end_line":181,"end_character":57},"updated":"2018-08-29 13:16:10.000000000","message":"Why is this a list? I guess because that\u0027s what task_and_vm_state_from_status returns. But can\u0027t a user query on just vm_state without the status parameter? In which case this would be False:\n\n\u003e\u003e\u003e \u0027test\u0027 \u003d\u003d [\u0027test\u0027]\nFalse\n\nCouldn\u0027t we do something like:\n\nif vm_states.SOFT_DELETED in search_opts.get(\u0027vm_state\u0027, [])\n\n?\n\nI realize you\u0027re copying the \u0027deleted\u0027 conditional block above, but that also looks like it could be wrong depending on if vm_state is using directly as a query param or if \u0027status\u0027 is used.","commit_id":"f039f7019486aab6ba2ba195cc946bb889685469"},{"author":{"_account_id":25562,"name":"Chen","email":"dstbtgagt@foxmail.com","username":"chenn2"},"change_message_id":"981fa7a19974a5225bececb0d8b47a2974756888","unresolved":false,"context_lines":[{"line_number":178,"context_line":"                msg \u003d _(\"Only administrators may list deleted instances\")"},{"line_number":179,"context_line":"                raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        if search_opts.get(\"vm_state\") \u003d\u003d [\u0027soft-delete\u0027]:"},{"line_number":182,"context_line":"            search_opts[\u0027soft_deleted\u0027] \u003d True"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        if api_version_request.is_supported(req, min_version\u003d\u00272.26\u0027):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_87b3bf4d","line":181,"range":{"start_line":181,"start_character":42,"end_line":181,"end_character":57},"in_reply_to":"3f79a3b5_669245a2","updated":"2018-08-30 13:23:16.000000000","message":"Yes, you are right. It seems the old code does not handle direct vm_state/task_state provision well. I will try to fix that all together in the next patch.","commit_id":"f039f7019486aab6ba2ba195cc946bb889685469"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"9d09bd2612eb2b2bbfd294b56f1991eb8ba0b9eb","unresolved":false,"context_lines":[{"line_number":178,"context_line":"                msg \u003d _(\"Only administrators may list deleted instances\")"},{"line_number":179,"context_line":"                raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        if search_opts.get(\"vm_state\") \u003d\u003d [\u0027soft-delete\u0027]:"},{"line_number":182,"context_line":"            search_opts[\u0027soft_deleted\u0027] \u003d True"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        if api_version_request.is_supported(req, min_version\u003d\u00272.26\u0027):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_c84a1482","line":181,"range":{"start_line":181,"start_character":42,"end_line":181,"end_character":57},"in_reply_to":"3f79a3b5_87b3bf4d","updated":"2018-08-31 09:01:31.000000000","message":"we still need check context here, status is allowed for non-admin and query soft_deleted is something we don\u0027t want non-admin perform either\n\nDEBUG (session:448) REQ: curl -g -i -X GET http://9.115.112.77:8774/v2.1/3d9d1588248545caa62dce9ac8b04193/servers/detail?status\u003dSOFT_DELETED -H \"Accept: application/json\" -H \"OpenStack-API-Version: compute 2.60\" -H \"User-Agent: python-novaclient\" -H \"X-Auth-Token: {SHA1}5c8d321397abf09bdb46af3a9fb4e5c6ec55a499\" -H \"X-OpenStack-Nova-API-Version: 2.60\"\nDEBUG (connectionpool:393) http://9.115.112.77:8774 \"GET /v2.1/3d9d1588248545caa62dce9ac8b04193/servers/detail?status\u003dSOFT_DELETED HTTP/1.1\" 200 15","commit_id":"f039f7019486aab6ba2ba195cc946bb889685469"},{"author":{"_account_id":26286,"name":"huanhongda","email":"hongda.xun@easystack.cn","username":"huanhongda"},"change_message_id":"1e91022f94479ec725dc3986c4a53d7e6cbc3532","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        if search_opts.get(\"vm_state\") \u003d\u003d [\u0027soft-delete\u0027]:"},{"line_number":182,"context_line":"            search_opts[\u0027soft_deleted\u0027] \u003d True"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        if api_version_request.is_supported(req, min_version\u003d\u00272.26\u0027):"},{"line_number":185,"context_line":"            for tag_filter in TAG_SEARCH_FILTERS:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_0af10102","line":182,"range":{"start_line":182,"start_character":12,"end_line":182,"end_character":46},"updated":"2018-08-30 05:57:02.000000000","message":"I think here should judge whether it\u0027s a admin request like the \u0027deleted\u0027 conditional block above.","commit_id":"f039f7019486aab6ba2ba195cc946bb889685469"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"33d2760f25b302c9b5a0293592f3eb0576b5b489","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        if search_opts.get(\"vm_state\") \u003d\u003d [\u0027soft-delete\u0027]:"},{"line_number":182,"context_line":"            search_opts[\u0027soft_deleted\u0027] \u003d True"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        if api_version_request.is_supported(req, min_version\u003d\u00272.26\u0027):"},{"line_number":185,"context_line":"            for tag_filter in TAG_SEARCH_FILTERS:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_068fd175","line":182,"updated":"2018-08-29 13:16:10.000000000","message":"Would be good to have a comment with this about why we have to handle soft-delete in a special way.","commit_id":"f039f7019486aab6ba2ba195cc946bb889685469"},{"author":{"_account_id":25562,"name":"Chen","email":"dstbtgagt@foxmail.com","username":"chenn2"},"change_message_id":"981fa7a19974a5225bececb0d8b47a2974756888","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        if search_opts.get(\"vm_state\") \u003d\u003d [\u0027soft-delete\u0027]:"},{"line_number":182,"context_line":"            search_opts[\u0027soft_deleted\u0027] \u003d True"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        if api_version_request.is_supported(req, min_version\u003d\u00272.26\u0027):"},{"line_number":185,"context_line":"            for tag_filter in TAG_SEARCH_FILTERS:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_27998bcf","line":182,"in_reply_to":"3f79a3b5_068fd175","updated":"2018-08-30 13:23:16.000000000","message":"Sure. Basically soft-delete is similar to delete. We need the \u0027soft-deleted\u0027 flag for the db driver to correctly filter out soft-deleted instance.","commit_id":"f039f7019486aab6ba2ba195cc946bb889685469"},{"author":{"_account_id":25562,"name":"Chen","email":"dstbtgagt@foxmail.com","username":"chenn2"},"change_message_id":"981fa7a19974a5225bececb0d8b47a2974756888","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        if search_opts.get(\"vm_state\") \u003d\u003d [\u0027soft-delete\u0027]:"},{"line_number":182,"context_line":"            search_opts[\u0027soft_deleted\u0027] \u003d True"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        if api_version_request.is_supported(req, min_version\u003d\u00272.26\u0027):"},{"line_number":185,"context_line":"            for tag_filter in TAG_SEARCH_FILTERS:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_2703cbc0","line":182,"range":{"start_line":182,"start_character":12,"end_line":182,"end_character":46},"in_reply_to":"3f79a3b5_0af10102","updated":"2018-08-30 13:23:16.000000000","message":"By default, the owner is allowed to restore a soft-deleted instance [1]. So I don\u0027t think admin role is required to check soft-deleted instances.\n\n[1] https://developer.openstack.org/api-ref/compute/#restore-soft-deleted-instance-restore-action","commit_id":"f039f7019486aab6ba2ba195cc946bb889685469"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"91cd7f7a17120066615d7cb9283a3f930dca1ea1","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        if search_opts.get(\"vm_state\") \u003d\u003d [\u0027soft-delete\u0027]:"},{"line_number":182,"context_line":"            search_opts[\u0027soft_deleted\u0027] \u003d True"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        if api_version_request.is_supported(req, min_version\u003d\u00272.26\u0027):"},{"line_number":185,"context_line":"            for tag_filter in TAG_SEARCH_FILTERS:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_2a707ddc","line":182,"range":{"start_line":182,"start_character":12,"end_line":182,"end_character":46},"in_reply_to":"3f79a3b5_0af10102","updated":"2018-08-30 06:27:44.000000000","message":"Hm, This could be interesting, I think maybe we should only let admin to use this, as users actually calls DELETE API and soft delete is only happenning by setting config options, so maybe users did not know that their instances is ``soft-deleted`` instread of real deletion?","commit_id":"f039f7019486aab6ba2ba195cc946bb889685469"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1f157699c240c04b2dd81c9d87f21a07e4a80f3a","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        if search_opts.get(\"vm_state\") \u003d\u003d [\u0027soft-delete\u0027]:"},{"line_number":182,"context_line":"            search_opts[\u0027soft_deleted\u0027] \u003d True"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        if api_version_request.is_supported(req, min_version\u003d\u00272.26\u0027):"},{"line_number":185,"context_line":"            for tag_filter in TAG_SEARCH_FILTERS:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_678f8375","line":182,"range":{"start_line":182,"start_character":12,"end_line":182,"end_character":46},"in_reply_to":"3f79a3b5_2a707ddc","updated":"2018-08-30 13:11:28.000000000","message":"Soft deleted is a real thing for users - it lets them know if they can restore the server:\n\nhttps://developer.openstack.org/api-guide/compute/server_concepts.html\n\nhttps://developer.openstack.org/api-ref/compute/#restore-soft-deleted-instance-restore-action","commit_id":"f039f7019486aab6ba2ba195cc946bb889685469"},{"author":{"_account_id":25562,"name":"Chen","email":"dstbtgagt@foxmail.com","username":"chenn2"},"change_message_id":"981fa7a19974a5225bececb0d8b47a2974756888","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        if search_opts.get(\"vm_state\") \u003d\u003d [\u0027soft-delete\u0027]:"},{"line_number":182,"context_line":"            search_opts[\u0027soft_deleted\u0027] \u003d True"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        if api_version_request.is_supported(req, min_version\u003d\u00272.26\u0027):"},{"line_number":185,"context_line":"            for tag_filter in TAG_SEARCH_FILTERS:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_278d0b2a","line":182,"range":{"start_line":182,"start_character":12,"end_line":182,"end_character":46},"in_reply_to":"3f79a3b5_2a707ddc","updated":"2018-08-30 13:23:16.000000000","message":"The owners probably should be able to check their soft-deleted instances as well. My reason is upstairs.","commit_id":"f039f7019486aab6ba2ba195cc946bb889685469"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"33d2760f25b302c9b5a0293592f3eb0576b5b489","unresolved":false,"context_lines":[{"line_number":1087,"context_line":""},{"line_number":1088,"context_line":"    def _get_server_search_options(self, req):"},{"line_number":1089,"context_line":"        \"\"\"Return server search options allowed by non-admin.\"\"\""},{"line_number":1090,"context_line":"        opt_list \u003d (\u0027reservation_id\u0027, \u0027name\u0027, \u0027status\u0027, \u0027image\u0027, \u0027flavor\u0027,"},{"line_number":1091,"context_line":"                    \u0027ip\u0027, \u0027changes-since\u0027, \u0027all_tenants\u0027)"},{"line_number":1092,"context_line":"        if api_version_request.is_supported(req, min_version\u003d\u00272.5\u0027):"},{"line_number":1093,"context_line":"            opt_list +\u003d (\u0027ip6\u0027,)"},{"line_number":1094,"context_line":"        if api_version_request.is_supported(req, min_version\u003d\u00272.26\u0027):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_66f325e9","line":1091,"range":{"start_line":1090,"start_character":8,"end_line":1091,"end_character":57},"updated":"2018-08-29 13:16:10.000000000","message":"Note that vm_state is an admin-only filter.","commit_id":"f039f7019486aab6ba2ba195cc946bb889685469"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"4acd5bb0c1b806e2b8642fb03cc1d059d5ea5659","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        # by filter[\u0027soft_deleted\u0027] which comes from"},{"line_number":219,"context_line":"        # search_opts[\u0027soft_deleted\u0027]. BTW, searching soft_deleted vms"},{"line_number":220,"context_line":"        # is only allowed for admin."},{"line_number":221,"context_line":"        if \u0027soft-delete\u0027 in search_opts.get(\u0027vm_state\u0027, []):"},{"line_number":222,"context_line":"            if context.is_admin:"},{"line_number":223,"context_line":"                search_opts[\u0027soft_deleted\u0027] \u003d True"},{"line_number":224,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_1e33bd14","line":221,"range":{"start_line":221,"start_character":8,"end_line":221,"end_character":60},"updated":"2020-01-30 11:26:40.000000000","message":"It will not work if \"deleted\" option is not specified.\nMaybe you need to integrate it with code on L261.","commit_id":"2c973d75819d5b71d1e65546292b2a9293bfb02f"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"c526b17e1b2a1bb7c984e39db8f849d161a4fff7","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        # by filter[\u0027soft_deleted\u0027] which comes from"},{"line_number":219,"context_line":"        # search_opts[\u0027soft_deleted\u0027]. BTW, searching soft_deleted vms"},{"line_number":220,"context_line":"        # is only allowed for admin."},{"line_number":221,"context_line":"        if \u0027soft-delete\u0027 in search_opts.get(\u0027vm_state\u0027, []):"},{"line_number":222,"context_line":"            if context.is_admin:"},{"line_number":223,"context_line":"                search_opts[\u0027soft_deleted\u0027] \u003d True"},{"line_number":224,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"1fa4df85_cdbc86bd","line":221,"range":{"start_line":221,"start_character":8,"end_line":221,"end_character":60},"in_reply_to":"1fa4df85_a5e375a4","updated":"2020-02-25 10:19:23.000000000","message":"You\u0027re right. Missed that search_opts[\u0027deleted\u0027] is set anyway, still strange. That code was a source of my confusion\nhttps://github.com/openstack/nova/blob/270a61e749f346669c05675d51353116638c33ba/nova/db/sqlalchemy/api.py#L2130","commit_id":"2c973d75819d5b71d1e65546292b2a9293bfb02f"},{"author":{"_account_id":25113,"name":"Fan Zhang","email":"zh.f@outlook.com","username":"fanzhang"},"change_message_id":"d38338b518e6141aba3215fff00169f9e00cbd04","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        # by filter[\u0027soft_deleted\u0027] which comes from"},{"line_number":219,"context_line":"        # search_opts[\u0027soft_deleted\u0027]. BTW, searching soft_deleted vms"},{"line_number":220,"context_line":"        # is only allowed for admin."},{"line_number":221,"context_line":"        if \u0027soft-delete\u0027 in search_opts.get(\u0027vm_state\u0027, []):"},{"line_number":222,"context_line":"            if context.is_admin:"},{"line_number":223,"context_line":"                search_opts[\u0027soft_deleted\u0027] \u003d True"},{"line_number":224,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"1fa4df85_a5e375a4","line":221,"range":{"start_line":221,"start_character":8,"end_line":221,"end_character":60},"in_reply_to":"3fa7e38b_1e33bd14","updated":"2020-02-24 13:15:40.000000000","message":"No, IHMO there is no need to do that.  Soft-delete and deleted are two different vm_state.  This process is similar to Line 274 to Line 279.","commit_id":"2c973d75819d5b71d1e65546292b2a9293bfb02f"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"32ae161b35905f0305c84fc8ee9db66f3bffcdb5","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                search_opts[\u0027soft_deleted\u0027] \u003d True"},{"line_number":224,"context_line":"            else:"},{"line_number":225,"context_line":"                msg \u003d _(\"Only administrators may list soft deleted instances\")"},{"line_number":226,"context_line":"                raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        if \u0027changes-since\u0027 in search_opts:"},{"line_number":229,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"1fa4df85_4d24160e","line":226,"range":{"start_line":226,"start_character":16,"end_line":226,"end_character":56},"updated":"2020-02-25 10:20:46.000000000","message":"This is kind of API behavior changes, so maybe release note, but not sure.","commit_id":"2c973d75819d5b71d1e65546292b2a9293bfb02f"}],"nova/tests/unit/api/openstack/compute/test_serversV21.py":[{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"4acd5bb0c1b806e2b8642fb03cc1d059d5ea5659","unresolved":false,"context_lines":[{"line_number":1306,"context_line":"                       use_admin_context\u003dTrue)"},{"line_number":1307,"context_line":""},{"line_number":1308,"context_line":"        servers \u003d self.controller.detail(req)[\u0027servers\u0027]"},{"line_number":1309,"context_line":"        self.assertEqual(1, len(servers))"},{"line_number":1310,"context_line":"        self.assertEqual(uuids.fake, servers[0][\u0027id\u0027])"},{"line_number":1311,"context_line":"        self.assertEqual(\u0027SOFT_DELETED\u0027, servers[0][\u0027status\u0027])"},{"line_number":1312,"context_line":""},{"line_number":1313,"context_line":"    def test_get_servers_deleted_status_as_user(self):"},{"line_number":1314,"context_line":"        req \u003d self.req(self.path_with_query % \u0027status\u003ddeleted\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_79252bad","line":1311,"range":{"start_line":1309,"start_character":0,"end_line":1311,"end_character":62},"updated":"2020-01-30 11:26:40.000000000","message":"It seems this test does not check your code changes.\nI suggest to check sqlalchemy instance_get_all_by_filters_sort gets the proper filters, both deleted and soft_deleted keys specified.","commit_id":"2c973d75819d5b71d1e65546292b2a9293bfb02f"}]}
