)]}'
{"nova/api/openstack/common.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f9d1c67f3e070bb3fd6fa07a4564467504c4432d","unresolved":false,"context_lines":[{"line_number":170,"context_line":"            sort_keys.append(key)"},{"line_number":171,"context_line":"        else:"},{"line_number":172,"context_line":"            raise exception.InvalidSortKey()"},{"line_number":173,"context_line":"            break"},{"line_number":174,"context_line":"    while \u0027sort_dir\u0027 in params:"},{"line_number":175,"context_line":"        sort_dirs.append(params.pop(\u0027sort_dir\u0027).strip())"},{"line_number":176,"context_line":"    if len(sort_keys) \u003d\u003d 0 and default_key:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_0b43ef13","line":173,"range":{"start_line":173,"start_character":12,"end_line":173,"end_character":17},"updated":"2016-08-24 09:10:17.000000000","message":"this break is useless","commit_id":"8f8af2d66efd6330644f69dcf67df95630b6a86f"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"3a19426e0e3d474f4dab59cc1654aa1b7b18a9f0","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        if key in white_list:"},{"line_number":170,"context_line":"            sort_keys.append(key)"},{"line_number":171,"context_line":"        else:"},{"line_number":172,"context_line":"            raise exception.InvalidSortKey()"},{"line_number":173,"context_line":"    while \u0027sort_dir\u0027 in params:"},{"line_number":174,"context_line":"        sort_dirs.append(params.pop(\u0027sort_dir\u0027).strip())"},{"line_number":175,"context_line":"    if len(sort_keys) \u003d\u003d 0 and default_key:"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa7ab95a_a7b18849","line":172,"range":{"start_line":172,"start_character":12,"end_line":172,"end_character":44},"updated":"2016-08-29 12:09:45.000000000","message":"we should have a unittest for this case.","commit_id":"703710d763ce63f8935bb2a9c45acef8a7c2b8b4"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"277db2d56043b07a77f81067038d06763017a13d","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        if key in white_list:"},{"line_number":170,"context_line":"            sort_keys.append(key)"},{"line_number":171,"context_line":"        else:"},{"line_number":172,"context_line":"            raise exception.InvalidSortKey()"},{"line_number":173,"context_line":"    while \u0027sort_dir\u0027 in params:"},{"line_number":174,"context_line":"        sort_dirs.append(params.pop(\u0027sort_dir\u0027).strip())"},{"line_number":175,"context_line":"    if len(sort_keys) \u003d\u003d 0 and default_key:"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa7ab95a_e80a4a89","line":172,"range":{"start_line":172,"start_character":12,"end_line":172,"end_character":44},"in_reply_to":"fa7ab95a_a7b18849","updated":"2016-08-30 06:20:25.000000000","message":"OK","commit_id":"703710d763ce63f8935bb2a9c45acef8a7c2b8b4"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"52fe6a9119ad68fa091c5458cbfead2c8bd4c636","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        if key in white_list:"},{"line_number":170,"context_line":"            sort_keys.append(key)"},{"line_number":171,"context_line":"        else:"},{"line_number":172,"context_line":"            raise exception.InvalidSortKey()"},{"line_number":173,"context_line":"    while \u0027sort_dir\u0027 in params:"},{"line_number":174,"context_line":"        sort_dirs.append(params.pop(\u0027sort_dir\u0027).strip())"},{"line_number":175,"context_line":"    if len(sort_keys) \u003d\u003d 0 and default_key:"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa7ab95a_e1e412ad","line":172,"range":{"start_line":172,"start_character":0,"end_line":172,"end_character":44},"updated":"2016-08-30 11:56:06.000000000","message":"previously I can use my sort key but now I can\u0027t\n\nshould we say something in the release notes?","commit_id":"4ecfe4b28a511dd81e3b902833caff2164cdd463"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"10eef7f910baa0a0ba165cf62e384b9bef88fa5a","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        if key in white_list:"},{"line_number":170,"context_line":"            sort_keys.append(key)"},{"line_number":171,"context_line":"        else:"},{"line_number":172,"context_line":"            raise exception.InvalidSortKey()"},{"line_number":173,"context_line":"    while \u0027sort_dir\u0027 in params:"},{"line_number":174,"context_line":"        sort_dirs.append(params.pop(\u0027sort_dir\u0027).strip())"},{"line_number":175,"context_line":"    if len(sort_keys) \u003d\u003d 0 and default_key:"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a89bdaa_e09b5c16","line":172,"range":{"start_line":172,"start_character":0,"end_line":172,"end_character":44},"in_reply_to":"fa7ab95a_e12ed2a3","updated":"2016-09-07 13:24:40.000000000","message":"A release note is probably a good idea here","commit_id":"4ecfe4b28a511dd81e3b902833caff2164cdd463"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"f2f9052f01f9730725d67317d0e4b41a2beb92f9","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        if key in white_list:"},{"line_number":170,"context_line":"            sort_keys.append(key)"},{"line_number":171,"context_line":"        else:"},{"line_number":172,"context_line":"            raise exception.InvalidSortKey()"},{"line_number":173,"context_line":"    while \u0027sort_dir\u0027 in params:"},{"line_number":174,"context_line":"        sort_dirs.append(params.pop(\u0027sort_dir\u0027).strip())"},{"line_number":175,"context_line":"    if len(sort_keys) \u003d\u003d 0 and default_key:"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa7ab95a_e12ed2a3","line":172,"range":{"start_line":172,"start_character":0,"end_line":172,"end_character":44},"in_reply_to":"fa7ab95a_e1e412ad","updated":"2016-08-30 11:59:32.000000000","message":"I thought about this, but not sure which part should it be? update?","commit_id":"4ecfe4b28a511dd81e3b902833caff2164cdd463"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1a8e53b39550961c2e2015419fffd850138521e1","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        if key in white_list:"},{"line_number":170,"context_line":"            sort_keys.append(key)"},{"line_number":171,"context_line":"        else:"},{"line_number":172,"context_line":"            raise exception.InvalidSortKey()"},{"line_number":173,"context_line":"    while \u0027sort_dir\u0027 in params:"},{"line_number":174,"context_line":"        sort_dirs.append(params.pop(\u0027sort_dir\u0027).strip())"},{"line_number":175,"context_line":"    if len(sort_keys) \u003d\u003d 0 and default_key:"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa6399be_aa9b49c8","line":172,"range":{"start_line":172,"start_character":28,"end_line":172,"end_character":42},"updated":"2016-10-12 13:16:57.000000000","message":"We should provide the invalid sort key in the error message. Consider you\u0027re a user passing in 3 sort keys, and 2 are invalid, you\u0027d have to iterate on your query until it works since the API doesn\u0027t tell you what was invalid, which would be very frustrating.","commit_id":"2e621543e47bcd82aff955d66be0bf87b22692aa"}],"nova/api/openstack/compute/servers.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f9d1c67f3e070bb3fd6fa07a4564467504c4432d","unresolved":false,"context_lines":[{"line_number":51,"context_line":"TAG_SEARCH_FILTERS \u003d (\u0027tags\u0027, \u0027tags-any\u0027, \u0027not-tags\u0027, \u0027not-tags-any\u0027)"},{"line_number":52,"context_line":"DEVICE_TAGGING_MIN_COMPUTE_VERSION \u003d 14"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"SORT_WIHTELIST \u003d [\u0027vm_state\u0027, \u0027availability_zone\u0027, \u0027display_description\u0027,"},{"line_number":55,"context_line":"                  \u0027reservation_id\u0027, \u0027user_id\u0027, \u0027uuid\u0027,"},{"line_number":56,"context_line":"                  \u0027power_state\u0027, \u0027project_id\u0027, \u0027updated_at\u0027, \u0027locked\u0027,"},{"line_number":57,"context_line":"                  \u0027auto_disk_config\u0027, \u0027config_drive\u0027, \u0027ramdisk_id\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_abbd7b03","line":54,"updated":"2016-08-24 09:10:17.000000000","message":"s/WIHTE/WHITE/","commit_id":"8f8af2d66efd6330644f69dcf67df95630b6a86f"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f9d1c67f3e070bb3fd6fa07a4564467504c4432d","unresolved":false,"context_lines":[{"line_number":338,"context_line":""},{"line_number":339,"context_line":"        limit, marker \u003d common.get_limit_and_marker(req)"},{"line_number":340,"context_line":"        whitelist \u003d remove_invalid_sort_options(context, SORT_WIHTELIST)"},{"line_number":341,"context_line":"        sort_keys, sort_dirs \u003d common.get_sort_params(req.params, whitelist)"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"        expected_attrs \u003d [\u0027pci_devices\u0027]"},{"line_number":344,"context_line":"        if is_detail:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_0b5acff1","line":341,"range":{"start_line":341,"start_character":38,"end_line":341,"end_character":53},"updated":"2016-08-24 09:10:17.000000000","message":"we need catch the exception InvalidSortKey","commit_id":"8f8af2d66efd6330644f69dcf67df95630b6a86f"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"c99e21ce45206aadfe97e4f36f22768584ceb2ae","unresolved":false,"context_lines":[{"line_number":338,"context_line":""},{"line_number":339,"context_line":"        limit, marker \u003d common.get_limit_and_marker(req)"},{"line_number":340,"context_line":"        whitelist \u003d remove_invalid_sort_options(context, SORT_WIHTELIST)"},{"line_number":341,"context_line":"        sort_keys, sort_dirs \u003d common.get_sort_params(req.params, whitelist)"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"        expected_attrs \u003d [\u0027pci_devices\u0027]"},{"line_number":344,"context_line":"        if is_detail:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_22f972c9","line":341,"range":{"start_line":341,"start_character":38,"end_line":341,"end_character":53},"in_reply_to":"1ac06dbe_0b5acff1","updated":"2016-08-25 01:57:16.000000000","message":"I was going to add this in the first place, but I checked the current workflow, exception.InvalidSortKey() is raised in sqlalchemy\\api.py and there are no catches in the workflow, so I guess it is OK to do the same?","commit_id":"8f8af2d66efd6330644f69dcf67df95630b6a86f"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f9d1c67f3e070bb3fd6fa07a4564467504c4432d","unresolved":false,"context_lines":[{"line_number":1208,"context_line":"            search_options.pop(opt, None)"},{"line_number":1209,"context_line":""},{"line_number":1210,"context_line":""},{"line_number":1211,"context_line":"def remove_invalid_sort_options(context, whitelist):"},{"line_number":1212,"context_line":"    if context.is_admin:"},{"line_number":1213,"context_line":"        return whitelist"},{"line_number":1214,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_cbd55743","line":1211,"range":{"start_line":1211,"start_character":4,"end_line":1211,"end_character":31},"updated":"2016-08-24 09:10:17.000000000","message":"I prefer just have a ADMIN_SORT_WHITELIST","commit_id":"8f8af2d66efd6330644f69dcf67df95630b6a86f"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"0a62685233cc5039d973c90a753153f1ce96cbba","unresolved":false,"context_lines":[{"line_number":1208,"context_line":"            search_options.pop(opt, None)"},{"line_number":1209,"context_line":""},{"line_number":1210,"context_line":""},{"line_number":1211,"context_line":"def remove_invalid_sort_options(context, whitelist):"},{"line_number":1212,"context_line":"    if context.is_admin:"},{"line_number":1213,"context_line":"        return whitelist"},{"line_number":1214,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_2be7cbac","line":1211,"range":{"start_line":1211,"start_character":4,"end_line":1211,"end_character":31},"in_reply_to":"1ac06dbe_cbd55743","updated":"2016-08-24 09:15:57.000000000","message":"what do you mean here?","commit_id":"8f8af2d66efd6330644f69dcf67df95630b6a86f"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f9d1c67f3e070bb3fd6fa07a4564467504c4432d","unresolved":false,"context_lines":[{"line_number":1215,"context_line":"        invalid \u003d [\u0027hostname\u0027, \u0027host\u0027, \u0027node\u0027, \u0027kernel_id\u0027, \u0027ramdisk_id\u0027,"},{"line_number":1216,"context_line":"                   \u0027reservation_id\u0027, \u0027root_device_name\u0027, \u0027user_data\u0027]"},{"line_number":1217,"context_line":"        for item in invalid:"},{"line_number":1218,"context_line":"            whitelist.remove(item)"},{"line_number":1219,"context_line":"        return whitelist"},{"line_number":1220,"context_line":""},{"line_number":1221,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_8be19f2c","line":1218,"range":{"start_line":1218,"start_character":12,"end_line":1218,"end_character":21},"updated":"2016-08-24 09:10:17.000000000","message":"The whitelist is global variable, this code means you removed those field from SORT_WIHTELIST forever?","commit_id":"8f8af2d66efd6330644f69dcf67df95630b6a86f"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"379dabb0c1929af1e548971ec1df0df6f6828b5b","unresolved":false,"context_lines":[{"line_number":1215,"context_line":"        invalid \u003d [\u0027hostname\u0027, \u0027host\u0027, \u0027node\u0027, \u0027kernel_id\u0027, \u0027ramdisk_id\u0027,"},{"line_number":1216,"context_line":"                   \u0027reservation_id\u0027, \u0027root_device_name\u0027, \u0027user_data\u0027]"},{"line_number":1217,"context_line":"        for item in invalid:"},{"line_number":1218,"context_line":"            whitelist.remove(item)"},{"line_number":1219,"context_line":"        return whitelist"},{"line_number":1220,"context_line":""},{"line_number":1221,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_abda9b14","line":1218,"range":{"start_line":1218,"start_character":12,"end_line":1218,"end_character":21},"in_reply_to":"1ac06dbe_8be19f2c","updated":"2016-08-24 09:12:46.000000000","message":"Ah, My bad, that explains why jenkins faild :(","commit_id":"8f8af2d66efd6330644f69dcf67df95630b6a86f"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"3a19426e0e3d474f4dab59cc1654aa1b7b18a9f0","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                  \u0027auto_disk_config\u0027, \u0027config_drive\u0027, \u0027ramdisk_id\u0027,"},{"line_number":59,"context_line":"                  \u0027instance_type_id\u0027, \u0027user_data\u0027, \u0027deleted_at\u0027,"},{"line_number":60,"context_line":"                  \u0027hostname\u0027, \u0027key_name\u0027, \u0027progress\u0027, \u0027launched_at\u0027,"},{"line_number":61,"context_line":"                  \u0027node\u0027, \u0027kernel_id\u0027, \u0027host\u0027, \u0027services\u0027, \u0027display_name\u0027,"},{"line_number":62,"context_line":"                  \u0027task_state\u0027, \u0027created_at\u0027, \u0027image_ref\u0027,"},{"line_number":63,"context_line":"                  \u0027root_device_name\u0027]"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa7ab95a_6c3927f2","line":61,"range":{"start_line":61,"start_character":48,"end_line":61,"end_character":56},"updated":"2016-08-29 12:09:45.000000000","message":"Emm....I didn\u0027t find where instance have this field, could you point me out?","commit_id":"703710d763ce63f8935bb2a9c45acef8a7c2b8b4"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"277db2d56043b07a77f81067038d06763017a13d","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                  \u0027auto_disk_config\u0027, \u0027config_drive\u0027, \u0027ramdisk_id\u0027,"},{"line_number":59,"context_line":"                  \u0027instance_type_id\u0027, \u0027user_data\u0027, \u0027deleted_at\u0027,"},{"line_number":60,"context_line":"                  \u0027hostname\u0027, \u0027key_name\u0027, \u0027progress\u0027, \u0027launched_at\u0027,"},{"line_number":61,"context_line":"                  \u0027node\u0027, \u0027kernel_id\u0027, \u0027host\u0027, \u0027services\u0027, \u0027display_name\u0027,"},{"line_number":62,"context_line":"                  \u0027task_state\u0027, \u0027created_at\u0027, \u0027image_ref\u0027,"},{"line_number":63,"context_line":"                  \u0027root_device_name\u0027]"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa7ab95a_88c29e32","line":61,"range":{"start_line":61,"start_character":48,"end_line":61,"end_character":56},"in_reply_to":"fa7ab95a_6c3927f2","updated":"2016-08-30 06:20:25.000000000","message":"Done, my bad","commit_id":"703710d763ce63f8935bb2a9c45acef8a7c2b8b4"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"3a19426e0e3d474f4dab59cc1654aa1b7b18a9f0","unresolved":false,"context_lines":[{"line_number":1210,"context_line":"            search_options.pop(opt, None)"},{"line_number":1211,"context_line":""},{"line_number":1212,"context_line":""},{"line_number":1213,"context_line":"def remove_invalid_sort_options(context, whitelist):"},{"line_number":1214,"context_line":"    if context.is_admin:"},{"line_number":1215,"context_line":"        return whitelist"},{"line_number":1216,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa7ab95a_8c866bd9","line":1213,"range":{"start_line":1213,"start_character":4,"end_line":1213,"end_character":31},"updated":"2016-08-29 12:09:45.000000000","message":"Sorry, I reply late. Actually we can use a constant variable ADMIN_SORT_WHITE_LIST instead of this function.","commit_id":"703710d763ce63f8935bb2a9c45acef8a7c2b8b4"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"277db2d56043b07a77f81067038d06763017a13d","unresolved":false,"context_lines":[{"line_number":1210,"context_line":"            search_options.pop(opt, None)"},{"line_number":1211,"context_line":""},{"line_number":1212,"context_line":""},{"line_number":1213,"context_line":"def remove_invalid_sort_options(context, whitelist):"},{"line_number":1214,"context_line":"    if context.is_admin:"},{"line_number":1215,"context_line":"        return whitelist"},{"line_number":1216,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa7ab95a_a8d682ee","line":1213,"range":{"start_line":1213,"start_character":4,"end_line":1213,"end_character":31},"in_reply_to":"fa7ab95a_8c866bd9","updated":"2016-08-30 06:20:25.000000000","message":"Do you mean we use to constant variable, one for admin and one for non_admin?","commit_id":"703710d763ce63f8935bb2a9c45acef8a7c2b8b4"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"52fe6a9119ad68fa091c5458cbfead2c8bd4c636","unresolved":false,"context_lines":[{"line_number":338,"context_line":"                search_opts[\u0027user_id\u0027] \u003d context.user_id"},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"        limit, marker \u003d common.get_limit_and_marker(req)"},{"line_number":341,"context_line":"        whitelist \u003d copy.deepcopy(SORT_WHITELIST)"},{"line_number":342,"context_line":"        whitelist \u003d remove_invalid_sort_options(context, whitelist)"},{"line_number":343,"context_line":"        sort_keys, sort_dirs \u003d common.get_sort_params(req.params, whitelist)"},{"line_number":344,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa7ab95a_815a66f0","line":341,"range":{"start_line":341,"start_character":34,"end_line":341,"end_character":48},"updated":"2016-08-30 11:56:06.000000000","message":"can we just create WHITE for admin and general user so we don\u0027t need copy every time here?","commit_id":"4ecfe4b28a511dd81e3b902833caff2164cdd463"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"f2f9052f01f9730725d67317d0e4b41a2beb92f9","unresolved":false,"context_lines":[{"line_number":338,"context_line":"                search_opts[\u0027user_id\u0027] \u003d context.user_id"},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"        limit, marker \u003d common.get_limit_and_marker(req)"},{"line_number":341,"context_line":"        whitelist \u003d copy.deepcopy(SORT_WHITELIST)"},{"line_number":342,"context_line":"        whitelist \u003d remove_invalid_sort_options(context, whitelist)"},{"line_number":343,"context_line":"        sort_keys, sort_dirs \u003d common.get_sort_params(req.params, whitelist)"},{"line_number":344,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa7ab95a_8c161d4a","line":341,"range":{"start_line":341,"start_character":34,"end_line":341,"end_character":48},"in_reply_to":"fa7ab95a_815a66f0","updated":"2016-08-30 11:59:32.000000000","message":"Hm, sounds reasonable, I done this because I think it is not good to have to much long constant variables.","commit_id":"4ecfe4b28a511dd81e3b902833caff2164cdd463"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"10eef7f910baa0a0ba165cf62e384b9bef88fa5a","unresolved":false,"context_lines":[{"line_number":338,"context_line":"                search_opts[\u0027user_id\u0027] \u003d context.user_id"},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"        limit, marker \u003d common.get_limit_and_marker(req)"},{"line_number":341,"context_line":"        whitelist \u003d copy.deepcopy(SORT_WHITELIST)"},{"line_number":342,"context_line":"        whitelist \u003d remove_invalid_sort_options(context, whitelist)"},{"line_number":343,"context_line":"        sort_keys, sort_dirs \u003d common.get_sort_params(req.params, whitelist)"},{"line_number":344,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9a89bdaa_408b28c3","line":341,"range":{"start_line":341,"start_character":34,"end_line":341,"end_character":48},"in_reply_to":"fa7ab95a_8c161d4a","updated":"2016-09-07 13:24:40.000000000","message":"I like jichenjc\u0027s idea of 2 white lists.","commit_id":"4ecfe4b28a511dd81e3b902833caff2164cdd463"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"841393e7edbb74377cccb588801f637bd711675c","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                        \u0027instance_type_id\u0027, \u0027user_data\u0027, \u0027deleted_at\u0027,"},{"line_number":59,"context_line":"                        \u0027hostname\u0027, \u0027key_name\u0027, \u0027progress\u0027, \u0027launched_at\u0027,"},{"line_number":60,"context_line":"                        \u0027node\u0027, \u0027kernel_id\u0027, \u0027display_name\u0027, \u0027task_state\u0027,"},{"line_number":61,"context_line":"                        \u0027created_at\u0027, \u0027image_ref\u0027, \u0027root_device_name\u0027]"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"SORT_WHITELIST \u003d [\u0027vm_state\u0027, \u0027availability_zone\u0027, \u0027display_description\u0027,"},{"line_number":64,"context_line":"                  \u0027user_id\u0027, \u0027uuid\u0027, \u0027power_state\u0027, \u0027project_id\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a8ec9b2_ac7476cf","line":61,"updated":"2016-09-14 07:33:13.000000000","message":"Check the db schema https://github.com/openstack/nova/blob/master/nova/db/sqlalchemy/models.py#L265\n\nLooks like we still missing a lot of fields.\n\nI guess we only can remove the field which used to join the table. We shouldn\u0027t remove others as they are part of API contract.","commit_id":"2cdb7195ed7d7bbc9f4181f56621048ceabe386d"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"8862d4e7b3a4463d542e819cbd6d583d5169b57b","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                  \u0027memory_mb\u0027, \u0027vcpus\u0027, \u0027root_gb\u0027, \u0027ephemeral_gb\u0027,"},{"line_number":72,"context_line":"                  \u0027ephemeral_key_uuid\u0027, \u0027user_data\u0027, \u0027instance_type_id\u0027,"},{"line_number":73,"context_line":"                  \u0027reservation_id\u0027, \u0027launched_at\u0027, \u0027availablility_zone\u0027,"},{"line_number":74,"context_line":"                  \u0027display_name\u0027, \u0027display_description\u0027, \u0027launched_on\u0027,"},{"line_number":75,"context_line":"                  \u0027locked\u0027, \u0027os_type\u0027, \u0027uuid\u0027, \u0027root_device_name\u0027,"},{"line_number":76,"context_line":"                  \u0027default_swap_device\u0027, \u0027default_ephemeral_device\u0027,"},{"line_number":77,"context_line":"                  \u0027config_drive\u0027, \u0027auto_disk_config\u0027, \u0027access_ip_v4\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a8ec9b2_58d64cc6","line":74,"range":{"start_line":74,"start_character":58,"end_line":74,"end_character":69},"updated":"2016-09-14 08:44:21.000000000","message":"\u0027lauched_on\u0027 isn\u0027t a field for normal user. It will expose the host name to the user.","commit_id":"166713d84a37b8294abd617cc31e1e31a50d4b30"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"4cb8274ee32d1aa5f44fe3868ac3749fc655fd6b","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                  \u0027memory_mb\u0027, \u0027vcpus\u0027, \u0027root_gb\u0027, \u0027ephemeral_gb\u0027,"},{"line_number":72,"context_line":"                  \u0027ephemeral_key_uuid\u0027, \u0027user_data\u0027, \u0027instance_type_id\u0027,"},{"line_number":73,"context_line":"                  \u0027reservation_id\u0027, \u0027launched_at\u0027, \u0027availablility_zone\u0027,"},{"line_number":74,"context_line":"                  \u0027display_name\u0027, \u0027display_description\u0027, \u0027launched_on\u0027,"},{"line_number":75,"context_line":"                  \u0027locked\u0027, \u0027os_type\u0027, \u0027uuid\u0027, \u0027root_device_name\u0027,"},{"line_number":76,"context_line":"                  \u0027default_swap_device\u0027, \u0027default_ephemeral_device\u0027,"},{"line_number":77,"context_line":"                  \u0027config_drive\u0027, \u0027auto_disk_config\u0027, \u0027access_ip_v4\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a8ec9b2_ab5a4728","line":74,"range":{"start_line":74,"start_character":58,"end_line":74,"end_character":69},"in_reply_to":"7a8ec9b2_58d64cc6","updated":"2016-09-21 06:30:28.000000000","message":"Done","commit_id":"166713d84a37b8294abd617cc31e1e31a50d4b30"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"a5ef4a657141cc5c56ef94915a598333dd6c0ed4","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                  \u0027default_swap_device\u0027, \u0027default_ephemeral_device\u0027,"},{"line_number":77,"context_line":"                  \u0027config_drive\u0027, \u0027auto_disk_config\u0027, \u0027access_ip_v4\u0027,"},{"line_number":78,"context_line":"                  \u0027access_ip_v6\u0027, \u0027progress\u0027, \u0027shutdown_terminate\u0027,"},{"line_number":79,"context_line":"                  \u0027created_at\u0027]"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"CONF \u003d nova.conf.CONF"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7a8ec9b2_98adca9d","line":79,"range":{"start_line":79,"start_character":19,"end_line":79,"end_character":30},"updated":"2016-09-21 12:17:22.000000000","message":"sorry, so we should have updated_at and deleted_at?","commit_id":"999a6fc05750789827c66573ad6f4f72e3f88e5b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1a2a3b45a6fc7a171932f32a27f15577aee4f086","unresolved":false,"context_lines":[{"line_number":51,"context_line":"TAG_SEARCH_FILTERS \u003d (\u0027tags\u0027, \u0027tags-any\u0027, \u0027not-tags\u0027, \u0027not-tags-any\u0027)"},{"line_number":52,"context_line":"DEVICE_TAGGING_MIN_COMPUTE_VERSION \u003d 14"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"ADMIN_SORT_WHITELIST \u003d [\u0027user_id\u0027, \u0027project_id\u0027, \u0027image_ref\u0027, \u0027kernel_id\u0027,"},{"line_number":55,"context_line":"                        \u0027ramdisk_id\u0027, \u0027host_name\u0027, \u0027launch_index\u0027, \u0027key_name\u0027,"},{"line_number":56,"context_line":"                        \u0027key_data\u0027, \u0027power_state\u0027, \u0027vm_state\u0027, \u0027task_state\u0027,"},{"line_number":57,"context_line":"                        \u0027memory_mb\u0027, \u0027vcpus\u0027, \u0027root_gb\u0027, \u0027ephemeral_gb\u0027,"},{"line_number":58,"context_line":"                        \u0027ephemeral_key_uuid\u0027, \u0027host\u0027, \u0027node\u0027, \u0027user_data\u0027,"},{"line_number":59,"context_line":"                        \u0027instance_type_id\u0027, \u0027reservation_id\u0027, \u0027launched_at\u0027,"},{"line_number":60,"context_line":"                        \u0027terminated_at\u0027, \u0027availablility_zone\u0027, \u0027display_name\u0027,"},{"line_number":61,"context_line":"                        \u0027display_description\u0027, \u0027launched_on\u0027, \u0027locked_by\u0027,"},{"line_number":62,"context_line":"                        \u0027locked\u0027, \u0027os_type\u0027, \u0027architecture\u0027, \u0027vm_mode\u0027,"},{"line_number":63,"context_line":"                        \u0027uuid\u0027, \u0027root_device_name\u0027, \u0027default_swap_device\u0027,"},{"line_number":64,"context_line":"                        \u0027default_ephemeral_device\u0027, \u0027config_drive\u0027,"},{"line_number":65,"context_line":"                        \u0027auto_disk_config\u0027, \u0027access_ip_v4\u0027, \u0027access_ip_v6\u0027,"},{"line_number":66,"context_line":"                        \u0027progress\u0027, \u0027shutdown_terminate\u0027, \u0027disable_terminate\u0027,"},{"line_number":67,"context_line":"                        \u0027cell_name\u0027, \u0027internal_id\u0027, \u0027cleaned\u0027, \u0027created_at\u0027]"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"SORT_WHITELIST \u003d [\u0027user_id\u0027, \u0027project_id\u0027, \u0027image_ref\u0027, \u0027key_name\u0027,"},{"line_number":70,"context_line":"                  \u0027key_data\u0027, \u0027power_state\u0027, \u0027vm_state\u0027, \u0027task_state\u0027,"},{"line_number":71,"context_line":"                  \u0027memory_mb\u0027, \u0027vcpus\u0027, \u0027root_gb\u0027, \u0027ephemeral_gb\u0027,"},{"line_number":72,"context_line":"                  \u0027ephemeral_key_uuid\u0027, \u0027user_data\u0027, \u0027instance_type_id\u0027,"},{"line_number":73,"context_line":"                  \u0027reservation_id\u0027, \u0027launched_at\u0027, \u0027availablility_zone\u0027,"},{"line_number":74,"context_line":"                  \u0027display_name\u0027, \u0027display_description\u0027, \u0027disable_terminate\u0027,"},{"line_number":75,"context_line":"                  \u0027locked\u0027, \u0027os_type\u0027, \u0027uuid\u0027, \u0027root_device_name\u0027,"},{"line_number":76,"context_line":"                  \u0027default_swap_device\u0027, \u0027default_ephemeral_device\u0027,"},{"line_number":77,"context_line":"                  \u0027config_drive\u0027, \u0027auto_disk_config\u0027, \u0027access_ip_v4\u0027,"},{"line_number":78,"context_line":"                  \u0027access_ip_v6\u0027, \u0027progress\u0027, \u0027shutdown_terminate\u0027,"},{"line_number":79,"context_line":"                  \u0027created_at\u0027]"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"CONF \u003d nova.conf.CONF"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"fa6399be_aaffc9ff","line":79,"range":{"start_line":54,"start_character":0,"end_line":79,"end_character":31},"updated":"2016-10-12 13:14:45.000000000","message":"Wouldn\u0027t the admin list be a superset of the non-admin list? It\u0027s very hard to see the diff between these two lists. I\u0027d create the non-admin list and then copy that and add the admin stuff on top.\n\nHaving said that, I feel like this is going to be hard to maintain and easy to miss things.\n\nWe may also want to consider only exposing fields that are in an index, but I\u0027d want agreement from the operators community on what that list is since we have no idea what people are using today.","commit_id":"2e621543e47bcd82aff955d66be0bf87b22692aa"}],"nova/tests/unit/api/openstack/compute/test_serversV21.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"3a19426e0e3d474f4dab59cc1654aa1b7b18a9f0","unresolved":false,"context_lines":[{"line_number":690,"context_line":"                    \u0027marker\u0027: [fakes.get_fake_uuid(2)]}"},{"line_number":691,"context_line":"        self.assertThat(params, matchers.DictMatches(expected))"},{"line_number":692,"context_line":""},{"line_number":693,"context_line":"        req \u003d self.req(\u0027/fake/servers/detail\u0027"},{"line_number":694,"context_line":"                       \u0027?limit\u003d3\u0026sort_key\u003dhost\u0026sort_dir\u003dasc\u0027,"},{"line_number":695,"context_line":"                       use_admin_context\u003dFalse)"},{"line_number":696,"context_line":"        self.assertRaises(webob.exc.HTTPBadRequest,"},{"line_number":697,"context_line":"                          self.controller.detail, req)"},{"line_number":698,"context_line":""},{"line_number":699,"context_line":"    def test_get_servers_with_bad_option(self):"},{"line_number":700,"context_line":"        server_uuid \u003d str(uuid.uuid4())"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa7ab95a_67db0050","line":697,"range":{"start_line":693,"start_character":8,"end_line":697,"end_character":54},"updated":"2016-08-29 12:09:45.000000000","message":"This is better to be a separate unittest.","commit_id":"703710d763ce63f8935bb2a9c45acef8a7c2b8b4"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"277db2d56043b07a77f81067038d06763017a13d","unresolved":false,"context_lines":[{"line_number":690,"context_line":"                    \u0027marker\u0027: [fakes.get_fake_uuid(2)]}"},{"line_number":691,"context_line":"        self.assertThat(params, matchers.DictMatches(expected))"},{"line_number":692,"context_line":""},{"line_number":693,"context_line":"        req \u003d self.req(\u0027/fake/servers/detail\u0027"},{"line_number":694,"context_line":"                       \u0027?limit\u003d3\u0026sort_key\u003dhost\u0026sort_dir\u003dasc\u0027,"},{"line_number":695,"context_line":"                       use_admin_context\u003dFalse)"},{"line_number":696,"context_line":"        self.assertRaises(webob.exc.HTTPBadRequest,"},{"line_number":697,"context_line":"                          self.controller.detail, req)"},{"line_number":698,"context_line":""},{"line_number":699,"context_line":"    def test_get_servers_with_bad_option(self):"},{"line_number":700,"context_line":"        server_uuid \u003d str(uuid.uuid4())"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa7ab95a_8847feba","line":697,"range":{"start_line":693,"start_character":8,"end_line":697,"end_character":54},"in_reply_to":"fa7ab95a_67db0050","updated":"2016-08-30 06:20:25.000000000","message":"Done","commit_id":"703710d763ce63f8935bb2a9c45acef8a7c2b8b4"}],"releasenotes/notes/not-allow-sort-instances-based-on-joined-tables-6e1b4f588853a834.yaml":[{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"d22ca257bb3873b349631eef58266489e918b6a2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - Users are not be able to sort instances based on joined tables"},{"line_number":4,"context_line":"    anymore, the sort keys are limited to items in Instances table"},{"line_number":5,"context_line":"    and for non-admin users, the keys that are admin-only are also"},{"line_number":6,"context_line":"    restricted."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"9a89bdaa_e7a97b25","line":3,"range":{"start_line":3,"start_character":18,"end_line":3,"end_character":20},"updated":"2016-09-08 11:27:50.000000000","message":"nit: s/be//","commit_id":"2cdb7195ed7d7bbc9f4181f56621048ceabe386d"}]}
