)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"4031c282f3a5b1f832f00c596342387caa415601","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add sort_key white list for server list/detail"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch enables a white list for sort_key when list for"},{"line_number":10,"context_line":"server list/details."},{"line_number":11,"context_line":"The sort keys, which are out of white list, will be ignored."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"partial implement of bp add-whitelist-for-server-list-filter-sort-parameters"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":26,"id":"5a3905b3_6fd9fc21","line":10,"updated":"2017-01-23 12:02:46.000000000","message":"This patch enables a whitelist for the sort_key query parameter when requesting server list/details.","commit_id":"acc30c2583c35cb6eeb87253be744fddb29d8eec"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"4031c282f3a5b1f832f00c596342387caa415601","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch enables a white list for sort_key when list for"},{"line_number":10,"context_line":"server list/details."},{"line_number":11,"context_line":"The sort keys, which are out of white list, will be ignored."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"partial implement of bp add-whitelist-for-server-list-filter-sort-parameters"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":26,"id":"5a3905b3_effb2c79","line":11,"updated":"2017-01-23 12:02:46.000000000","message":"Sort keys which are not in the white list will be ignored.","commit_id":"acc30c2583c35cb6eeb87253be744fddb29d8eec"}],"nova/api/openstack/compute/schemas/servers.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"f9a91575dcc8982087e10edd010b744d154208f4","unresolved":false,"context_lines":[{"line_number":256,"context_line":"SERVER_LIST_IGNORE_SORT_KEY \u003d ["},{"line_number":257,"context_line":"    \u0027key_data\u0027, \u0027memory_mb\u0027, \u0027vcpus\u0027, \u0027root_gb\u0027, \u0027ephemeral_gb\u0027,"},{"line_number":258,"context_line":"    \u0027ephemeral_key_uuid\u0027, \u0027user_data\u0027, \u0027cell_name\u0027, \u0027cleaned\u0027"},{"line_number":259,"context_line":"    \u0027reservation_id\u0027, \u0027terminated_at\u0027, \u0027launched_on\u0027, \u0027locked\u0027,"},{"line_number":260,"context_line":"    \u0027os_type\u0027, \u0027architecture\u0027, \u0027vm_mode\u0027, \u0027default_ephemeral_device\u0027,"},{"line_number":261,"context_line":"    \u0027default_swap_device\u0027, \u0027shutdown_terminate\u0027, \u0027disable_terminate\u0027]"},{"line_number":262,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_7846037c","line":259,"range":{"start_line":259,"start_character":22,"end_line":259,"end_character":37},"updated":"2017-01-18 08:01:00.000000000","message":"this seems to be in whitelist as per spec","commit_id":"73d5add89cd8e15d73b6faf7093c4cfe4fd04813"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"bf5283e3a8c9581092773be35587fcf83b80f9ad","unresolved":false,"context_lines":[{"line_number":268,"context_line":"             \u0027power_state\u0027, \u0027vm_state\u0027, \u0027task_state\u0027, \u0027host\u0027, \u0027node\u0027,"},{"line_number":269,"context_line":"             \u0027launched_at\u0027, \u0027availability_zone\u0027, \u0027display_name\u0027,"},{"line_number":270,"context_line":"             \u0027display_description\u0027, \u0027locked_by\u0027, \u0027uuid\u0027, \u0027root_device_name\u0027,"},{"line_number":271,"context_line":"             \u0027config_drive\u0027, \u0027auto_disk_config\u0027, \u0027progress\u0027, \u0027created_at\u0027,"},{"line_number":272,"context_line":"             \u0027updated_at\u0027, \u0027access_ip_v4\u0027, \u0027access_ip_v6\u0027] +"},{"line_number":273,"context_line":"            SERVER_LIST_IGNORE_SORT_KEY"},{"line_number":274,"context_line":"}"},{"line_number":275,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_0434b1db","line":272,"range":{"start_line":271,"start_character":61,"end_line":272,"end_character":25},"updated":"2017-01-18 08:56:15.000000000","message":"as discussed on IRC, we missed those in spec. but no big deal and should be ok to update spec doc later sometime.","commit_id":"73d5add89cd8e15d73b6faf7093c4cfe4fd04813"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"f9a91575dcc8982087e10edd010b744d154208f4","unresolved":false,"context_lines":[{"line_number":319,"context_line":"        \u0027auto_disk_config\u0027: common_param,"},{"line_number":320,"context_line":"        \u0027progress\u0027: common_param,"},{"line_number":321,"context_line":"        \u0027sort_key\u0027: multi_params(VALID_SORT_KEYS),"},{"line_number":322,"context_line":"        \u0027sort_dir\u0027: common_param,"},{"line_number":323,"context_line":"        \u0027all_tenants\u0027: common_param,"},{"line_number":324,"context_line":"        \u0027deleted\u0027: common_param,"},{"line_number":325,"context_line":"        \u0027status\u0027: common_param,"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_73b624fa","line":322,"range":{"start_line":322,"start_character":21,"end_line":322,"end_character":32},"updated":"2017-01-18 08:01:00.000000000","message":"can we define enum for this [\u0027asc\u0027, \u0027desc\u0027] ?","commit_id":"73d5add89cd8e15d73b6faf7093c4cfe4fd04813"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"e6fff9d9ad980e517214efcdfcb0a20d4a2506a5","unresolved":false,"context_lines":[{"line_number":249,"context_line":"    \u0027pci_devices\u0027: common_param"},{"line_number":250,"context_line":"}"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"# These fields are valid values for sort_keys before, but"},{"line_number":253,"context_line":"# is considered to be bad values and disabled to use. In"},{"line_number":254,"context_line":"# order to avoid compatibility, they are ignored instead"},{"line_number":255,"context_line":"# of return HTTP 400."},{"line_number":256,"context_line":"SERVER_LIST_IGNORE_SORT_KEY \u003d ["},{"line_number":257,"context_line":"    \u0027key_data\u0027, \u0027memory_mb\u0027, \u0027vcpus\u0027, \u0027root_gb\u0027, \u0027ephemeral_gb\u0027,"},{"line_number":258,"context_line":"    \u0027ephemeral_key_uuid\u0027, \u0027user_data\u0027, \u0027cell_name\u0027, \u0027cleaned\u0027"},{"line_number":259,"context_line":"    \u0027reservation_id\u0027, \u0027launched_on\u0027, \u0027locked\u0027, \u0027os_type\u0027, \u0027architecture\u0027,"},{"line_number":260,"context_line":"    \u0027vm_mode\u0027, \u0027default_ephemeral_device\u0027, \u0027default_swap_device\u0027,"},{"line_number":261,"context_line":"    \u0027shutdown_terminate\u0027, \u0027disable_terminate\u0027]"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"VALID_SORT_KEYS \u003d {"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a3c09a3_81008535","line":261,"range":{"start_line":252,"start_character":0,"end_line":261,"end_character":46},"updated":"2017-01-18 13:04:53.000000000","message":"I am now starting to wonder why these are worse than the ones below?","commit_id":"9a28076e80b78fb64e56ab6e2766713fcab612ba"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"683c61b1ab3e4f38f6345c1fe5cba6942159ae52","unresolved":false,"context_lines":[{"line_number":249,"context_line":"    \u0027pci_devices\u0027: common_param"},{"line_number":250,"context_line":"}"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"# These fields are valid values for sort_keys before, but"},{"line_number":253,"context_line":"# is considered to be bad values and disabled to use. In"},{"line_number":254,"context_line":"# order to avoid compatibility, they are ignored instead"},{"line_number":255,"context_line":"# of return HTTP 400."},{"line_number":256,"context_line":"SERVER_LIST_IGNORE_SORT_KEY \u003d ["},{"line_number":257,"context_line":"    \u0027key_data\u0027, \u0027memory_mb\u0027, \u0027vcpus\u0027, \u0027root_gb\u0027, \u0027ephemeral_gb\u0027,"},{"line_number":258,"context_line":"    \u0027ephemeral_key_uuid\u0027, \u0027user_data\u0027, \u0027cell_name\u0027, \u0027cleaned\u0027"},{"line_number":259,"context_line":"    \u0027reservation_id\u0027, \u0027launched_on\u0027, \u0027locked\u0027, \u0027os_type\u0027, \u0027architecture\u0027,"},{"line_number":260,"context_line":"    \u0027vm_mode\u0027, \u0027default_ephemeral_device\u0027, \u0027default_swap_device\u0027,"},{"line_number":261,"context_line":"    \u0027shutdown_terminate\u0027, \u0027disable_terminate\u0027]"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"VALID_SORT_KEYS \u003d {"}],"source_content_type":"text/x-python","patch_set":23,"id":"5a3905b3_e4d20e34","line":261,"range":{"start_line":252,"start_character":0,"end_line":261,"end_character":46},"in_reply_to":"5a3905b3_21440873","updated":"2017-01-19 10:30:25.000000000","message":"so are we good with the current implementation?","commit_id":"9a28076e80b78fb64e56ab6e2766713fcab612ba"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"1e433c7ba7d5293780ee43d2348c64e3c1fad2b0","unresolved":false,"context_lines":[{"line_number":249,"context_line":"    \u0027pci_devices\u0027: common_param"},{"line_number":250,"context_line":"}"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"# These fields are valid values for sort_keys before, but"},{"line_number":253,"context_line":"# is considered to be bad values and disabled to use. In"},{"line_number":254,"context_line":"# order to avoid compatibility, they are ignored instead"},{"line_number":255,"context_line":"# of return HTTP 400."},{"line_number":256,"context_line":"SERVER_LIST_IGNORE_SORT_KEY \u003d ["},{"line_number":257,"context_line":"    \u0027key_data\u0027, \u0027memory_mb\u0027, \u0027vcpus\u0027, \u0027root_gb\u0027, \u0027ephemeral_gb\u0027,"},{"line_number":258,"context_line":"    \u0027ephemeral_key_uuid\u0027, \u0027user_data\u0027, \u0027cell_name\u0027, \u0027cleaned\u0027"},{"line_number":259,"context_line":"    \u0027reservation_id\u0027, \u0027launched_on\u0027, \u0027locked\u0027, \u0027os_type\u0027, \u0027architecture\u0027,"},{"line_number":260,"context_line":"    \u0027vm_mode\u0027, \u0027default_ephemeral_device\u0027, \u0027default_swap_device\u0027,"},{"line_number":261,"context_line":"    \u0027shutdown_terminate\u0027, \u0027disable_terminate\u0027]"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"VALID_SORT_KEYS \u003d {"}],"source_content_type":"text/x-python","patch_set":23,"id":"5a3905b3_21440873","line":261,"range":{"start_line":252,"start_character":0,"end_line":261,"end_character":46},"in_reply_to":"5a3905b3_619ffe5f","updated":"2017-01-19 10:18:56.000000000","message":"Damm it, yes, thats what it was. My memory is getting bad from the other side of the holidays.","commit_id":"9a28076e80b78fb64e56ab6e2766713fcab612ba"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0f29d1e977924be521b264e306f2b46fcf5307fa","unresolved":false,"context_lines":[{"line_number":249,"context_line":"    \u0027pci_devices\u0027: common_param"},{"line_number":250,"context_line":"}"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"# These fields are valid values for sort_keys before, but"},{"line_number":253,"context_line":"# is considered to be bad values and disabled to use. In"},{"line_number":254,"context_line":"# order to avoid compatibility, they are ignored instead"},{"line_number":255,"context_line":"# of return HTTP 400."},{"line_number":256,"context_line":"SERVER_LIST_IGNORE_SORT_KEY \u003d ["},{"line_number":257,"context_line":"    \u0027key_data\u0027, \u0027memory_mb\u0027, \u0027vcpus\u0027, \u0027root_gb\u0027, \u0027ephemeral_gb\u0027,"},{"line_number":258,"context_line":"    \u0027ephemeral_key_uuid\u0027, \u0027user_data\u0027, \u0027cell_name\u0027, \u0027cleaned\u0027"},{"line_number":259,"context_line":"    \u0027reservation_id\u0027, \u0027launched_on\u0027, \u0027locked\u0027, \u0027os_type\u0027, \u0027architecture\u0027,"},{"line_number":260,"context_line":"    \u0027vm_mode\u0027, \u0027default_ephemeral_device\u0027, \u0027default_swap_device\u0027,"},{"line_number":261,"context_line":"    \u0027shutdown_terminate\u0027, \u0027disable_terminate\u0027]"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"VALID_SORT_KEYS \u003d {"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a3c09a3_f04f5168","line":261,"range":{"start_line":252,"start_character":0,"end_line":261,"end_character":46},"in_reply_to":"7a3c09a3_81008535","updated":"2017-01-18 13:55:50.000000000","message":"So I guess this is partly to match the filters.\n\nBut \"locked\" is allowed in the filters, but not the sort? That seems odd.\n\nThe other ones I guess are less useful.","commit_id":"9a28076e80b78fb64e56ab6e2766713fcab612ba"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f3ec124acd45ffa57fe47965f5c97353948f4209","unresolved":false,"context_lines":[{"line_number":249,"context_line":"    \u0027pci_devices\u0027: common_param"},{"line_number":250,"context_line":"}"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"# These fields are valid values for sort_keys before, but"},{"line_number":253,"context_line":"# is considered to be bad values and disabled to use. In"},{"line_number":254,"context_line":"# order to avoid compatibility, they are ignored instead"},{"line_number":255,"context_line":"# of return HTTP 400."},{"line_number":256,"context_line":"SERVER_LIST_IGNORE_SORT_KEY \u003d ["},{"line_number":257,"context_line":"    \u0027key_data\u0027, \u0027memory_mb\u0027, \u0027vcpus\u0027, \u0027root_gb\u0027, \u0027ephemeral_gb\u0027,"},{"line_number":258,"context_line":"    \u0027ephemeral_key_uuid\u0027, \u0027user_data\u0027, \u0027cell_name\u0027, \u0027cleaned\u0027"},{"line_number":259,"context_line":"    \u0027reservation_id\u0027, \u0027launched_on\u0027, \u0027locked\u0027, \u0027os_type\u0027, \u0027architecture\u0027,"},{"line_number":260,"context_line":"    \u0027vm_mode\u0027, \u0027default_ephemeral_device\u0027, \u0027default_swap_device\u0027,"},{"line_number":261,"context_line":"    \u0027shutdown_terminate\u0027, \u0027disable_terminate\u0027]"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"VALID_SORT_KEYS \u003d {"}],"source_content_type":"text/x-python","patch_set":23,"id":"5a3905b3_619ffe5f","line":261,"range":{"start_line":252,"start_character":0,"end_line":261,"end_character":46},"in_reply_to":"7a3c09a3_f04f5168","updated":"2017-01-19 03:23:14.000000000","message":"We only keep the key in the API representation. For the key is only in the db schema and not expose in the API representation, we decided to remove the support for them.","commit_id":"9a28076e80b78fb64e56ab6e2766713fcab612ba"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"96e23401c0022fd213cd3c3eeea38a286e3e3306","unresolved":false,"context_lines":[{"line_number":269,"context_line":"             \u0027launched_at\u0027, \u0027availability_zone\u0027, \u0027display_name\u0027,"},{"line_number":270,"context_line":"             \u0027display_description\u0027, \u0027locked_by\u0027, \u0027uuid\u0027, \u0027root_device_name\u0027,"},{"line_number":271,"context_line":"             \u0027config_drive\u0027, \u0027auto_disk_config\u0027, \u0027progress\u0027, \u0027created_at\u0027,"},{"line_number":272,"context_line":"             \u0027updated_at\u0027, \u0027access_ip_v4\u0027, \u0027access_ip_v6\u0027, \u0027terminated_at\u0027] +"},{"line_number":273,"context_line":"            SERVER_LIST_IGNORE_SORT_KEY"},{"line_number":274,"context_line":"}"},{"line_number":275,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"7a3c09a3_6429e7e5","line":272,"range":{"start_line":272,"start_character":13,"end_line":272,"end_character":25},"updated":"2017-01-18 13:09:46.000000000","message":"should we add this in filter also?","commit_id":"9a28076e80b78fb64e56ab6e2766713fcab612ba"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c8270668e6735adb166fec101ecbe7c221a3602f","unresolved":false,"context_lines":[{"line_number":269,"context_line":"             \u0027launched_at\u0027, \u0027availability_zone\u0027, \u0027display_name\u0027,"},{"line_number":270,"context_line":"             \u0027display_description\u0027, \u0027locked_by\u0027, \u0027uuid\u0027, \u0027root_device_name\u0027,"},{"line_number":271,"context_line":"             \u0027config_drive\u0027, \u0027auto_disk_config\u0027, \u0027progress\u0027, \u0027created_at\u0027,"},{"line_number":272,"context_line":"             \u0027updated_at\u0027, \u0027access_ip_v4\u0027, \u0027access_ip_v6\u0027, \u0027terminated_at\u0027] +"},{"line_number":273,"context_line":"            SERVER_LIST_IGNORE_SORT_KEY"},{"line_number":274,"context_line":"}"},{"line_number":275,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"7a3c09a3_24d0bfc8","line":272,"range":{"start_line":272,"start_character":13,"end_line":272,"end_character":25},"in_reply_to":"7a3c09a3_6429e7e5","updated":"2017-01-18 13:11:30.000000000","message":"there is a different changes-since key for that.","commit_id":"9a28076e80b78fb64e56ab6e2766713fcab612ba"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9dc14ce06c8af084c869aeda25967a0d7c0c0dce","unresolved":false,"context_lines":[{"line_number":249,"context_line":"    \u0027pci_devices\u0027: common_param"},{"line_number":250,"context_line":"}"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"# These fields are valid values for sort_keys before, but"},{"line_number":253,"context_line":"# is considered to be bad values and disabled to use. In"},{"line_number":254,"context_line":"# order to avoid compatibility, they are ignored instead"},{"line_number":255,"context_line":"# of return HTTP 400."}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_062ecba4","line":252,"range":{"start_line":252,"start_character":46,"end_line":252,"end_character":52},"updated":"2017-01-21 16:34:32.000000000","message":"nit: before we started using schema validation","commit_id":"29521004c1e6a2ae237129cad8294265bed36ea7"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"323eb2f44963b8c372cd8357c5a77f8085741776","unresolved":false,"context_lines":[{"line_number":249,"context_line":"    \u0027pci_devices\u0027: common_param"},{"line_number":250,"context_line":"}"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"# These fields are valid values for sort_keys before, but"},{"line_number":253,"context_line":"# is considered to be bad values and disabled to use. In"},{"line_number":254,"context_line":"# order to avoid compatibility, they are ignored instead"},{"line_number":255,"context_line":"# of return HTTP 400."}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_b0a8c9dc","line":252,"range":{"start_line":252,"start_character":46,"end_line":252,"end_character":52},"in_reply_to":"5a3905b3_062ecba4","updated":"2017-01-22 02:49:33.000000000","message":"Done","commit_id":"29521004c1e6a2ae237129cad8294265bed36ea7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9dc14ce06c8af084c869aeda25967a0d7c0c0dce","unresolved":false,"context_lines":[{"line_number":251,"context_line":""},{"line_number":252,"context_line":"# These fields are valid values for sort_keys before, but"},{"line_number":253,"context_line":"# is considered to be bad values and disabled to use. In"},{"line_number":254,"context_line":"# order to avoid compatibility, they are ignored instead"},{"line_number":255,"context_line":"# of return HTTP 400."},{"line_number":256,"context_line":"SERVER_LIST_IGNORE_SORT_KEY \u003d ["},{"line_number":257,"context_line":"    \u0027key_data\u0027, \u0027memory_mb\u0027, \u0027vcpus\u0027, \u0027root_gb\u0027, \u0027ephemeral_gb\u0027,"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_461a937e","line":254,"range":{"start_line":254,"start_character":17,"end_line":254,"end_character":30},"updated":"2017-01-21 16:34:32.000000000","message":"nit: backward compatibility issues","commit_id":"29521004c1e6a2ae237129cad8294265bed36ea7"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"323eb2f44963b8c372cd8357c5a77f8085741776","unresolved":false,"context_lines":[{"line_number":251,"context_line":""},{"line_number":252,"context_line":"# These fields are valid values for sort_keys before, but"},{"line_number":253,"context_line":"# is considered to be bad values and disabled to use. In"},{"line_number":254,"context_line":"# order to avoid compatibility, they are ignored instead"},{"line_number":255,"context_line":"# of return HTTP 400."},{"line_number":256,"context_line":"SERVER_LIST_IGNORE_SORT_KEY \u003d ["},{"line_number":257,"context_line":"    \u0027key_data\u0027, \u0027memory_mb\u0027, \u0027vcpus\u0027, \u0027root_gb\u0027, \u0027ephemeral_gb\u0027,"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_90a3cdff","line":254,"range":{"start_line":254,"start_character":17,"end_line":254,"end_character":30},"in_reply_to":"5a3905b3_461a937e","updated":"2017-01-22 02:49:33.000000000","message":"Done","commit_id":"29521004c1e6a2ae237129cad8294265bed36ea7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9dc14ce06c8af084c869aeda25967a0d7c0c0dce","unresolved":false,"context_lines":[{"line_number":261,"context_line":"    \u0027shutdown_terminate\u0027, \u0027disable_terminate\u0027]"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"VALID_SORT_KEYS \u003d {"},{"line_number":265,"context_line":"    \"type\": \"string\","},{"line_number":266,"context_line":"    \"enum\": [\u0027user_id\u0027, \u0027project_id\u0027, \u0027launch_index\u0027, \u0027image_ref\u0027,"},{"line_number":267,"context_line":"             \u0027kernel_id\u0027, \u0027ramdisk_id\u0027, \u0027hostname\u0027, \u0027key_name\u0027,"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_2602e70b","line":264,"updated":"2017-01-21 16:34:32.000000000","message":"nit: it would be nice if this list and the one above were sorted, just for readability.\n\nIt might also be nice to leave a comment about how this list is generated, i.e. I believe it\u0027s based on what\u0027s available in the detailed server GET response, but would have to look at the spec in more detail to remember.","commit_id":"29521004c1e6a2ae237129cad8294265bed36ea7"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"323eb2f44963b8c372cd8357c5a77f8085741776","unresolved":false,"context_lines":[{"line_number":261,"context_line":"    \u0027shutdown_terminate\u0027, \u0027disable_terminate\u0027]"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"VALID_SORT_KEYS \u003d {"},{"line_number":265,"context_line":"    \"type\": \"string\","},{"line_number":266,"context_line":"    \"enum\": [\u0027user_id\u0027, \u0027project_id\u0027, \u0027launch_index\u0027, \u0027image_ref\u0027,"},{"line_number":267,"context_line":"             \u0027kernel_id\u0027, \u0027ramdisk_id\u0027, \u0027hostname\u0027, \u0027key_name\u0027,"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_70a2e1fe","line":264,"in_reply_to":"5a3905b3_2602e70b","updated":"2017-01-22 02:49:33.000000000","message":"Done","commit_id":"29521004c1e6a2ae237129cad8294265bed36ea7"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"bcb9fc22c0258b4b4ff2e4e5b5fe600712186132","unresolved":false,"context_lines":[{"line_number":254,"context_line":"# and disabled to use. In order to avoid backward incompatibility,"},{"line_number":255,"context_line":"# they are ignored instead of return HTTP 400."},{"line_number":256,"context_line":"SERVER_LIST_IGNORE_SORT_KEY \u003d ["},{"line_number":257,"context_line":"    \u0027architecture\u0027, \u0027cell_name\u0027, \u0027cleanedreservation_id\u0027,"},{"line_number":258,"context_line":"    \u0027default_ephemeral_device\u0027, \u0027default_swap_device\u0027,"},{"line_number":259,"context_line":"    \u0027disable_terminate\u0027, \u0027ephemeral_gb\u0027, \u0027ephemeral_key_uuid\u0027,"},{"line_number":260,"context_line":"    \u0027key_data\u0027, \u0027launched_on\u0027, \u0027locked\u0027, \u0027memory_mb\u0027, \u0027os_type\u0027,"}],"source_content_type":"text/x-python","patch_set":30,"id":"5a3905b3_1059148f","line":257,"range":{"start_line":257,"start_character":33,"end_line":257,"end_character":57},"updated":"2017-01-25 02:55:15.000000000","message":"opps - \u003e \u0027cleaned\u0027, \u0027reservation_id\u0027,","commit_id":"dc34ca1ab2e5b79a2729270f57eaaaf9a735315f"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"b410c47180c30c630be511d1fdb64aa599955bb8","unresolved":false,"context_lines":[{"line_number":254,"context_line":"# and disabled to use. In order to avoid backward incompatibility,"},{"line_number":255,"context_line":"# they are ignored instead of return HTTP 400."},{"line_number":256,"context_line":"SERVER_LIST_IGNORE_SORT_KEY \u003d ["},{"line_number":257,"context_line":"    \u0027architecture\u0027, \u0027cell_name\u0027, \u0027cleanedreservation_id\u0027,"},{"line_number":258,"context_line":"    \u0027default_ephemeral_device\u0027, \u0027default_swap_device\u0027,"},{"line_number":259,"context_line":"    \u0027disable_terminate\u0027, \u0027ephemeral_gb\u0027, \u0027ephemeral_key_uuid\u0027,"},{"line_number":260,"context_line":"    \u0027key_data\u0027, \u0027launched_on\u0027, \u0027locked\u0027, \u0027memory_mb\u0027, \u0027os_type\u0027,"}],"source_content_type":"text/x-python","patch_set":30,"id":"5a3905b3_a43d61bd","line":257,"range":{"start_line":257,"start_character":33,"end_line":257,"end_character":57},"in_reply_to":"5a3905b3_1059148f","updated":"2017-01-25 03:06:01.000000000","message":"oops","commit_id":"dc34ca1ab2e5b79a2729270f57eaaaf9a735315f"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e4f7daf13950d66da15bba21d9c978dadbab7e62","unresolved":false,"context_lines":[{"line_number":258,"context_line":"    \u0027default_ephemeral_device\u0027, \u0027default_swap_device\u0027,"},{"line_number":259,"context_line":"    \u0027disable_terminate\u0027, \u0027ephemeral_gb\u0027, \u0027ephemeral_key_uuid\u0027,"},{"line_number":260,"context_line":"    \u0027key_data\u0027, \u0027launched_on\u0027, \u0027locked\u0027, \u0027memory_mb\u0027, \u0027os_type\u0027,"},{"line_number":261,"context_line":"    \u0027root_gb\u0027, \u0027shutdown_terminate\u0027, \u0027user_data\u0027, \u0027vcpus\u0027, \u0027vm_mode\u0027"},{"line_number":262,"context_line":"]"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"5a3905b3_7a76b2d9","line":261,"updated":"2017-01-25 05:01:42.000000000","message":"looks like we still missing fews: deleted, deleted_at, id.","commit_id":"88b833c64a2a73c172466b678c9eb21a7340ea00"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c0d3ce57c3c9658199014bf826ed130d0fd40702","unresolved":false,"context_lines":[{"line_number":264,"context_line":""},{"line_number":265,"context_line":"VALID_SORT_KEYS \u003d {"},{"line_number":266,"context_line":"    \"type\": \"string\","},{"line_number":267,"context_line":"    \"enum\": [\u0027access_ip_v4\u0027, \u0027access_ip_v6\u0027, \u0027auto_disk_config\u0027,"},{"line_number":268,"context_line":"             \u0027availability_zone\u0027, \u0027config_drive\u0027, \u0027created_at\u0027,"},{"line_number":269,"context_line":"             \u0027display_description\u0027, \u0027display_name\u0027, \u0027host\u0027, \u0027hostname\u0027,"},{"line_number":270,"context_line":"             \u0027image_ref\u0027, \u0027kernel_id\u0027, \u0027key_name\u0027, \u0027launch_index\u0027,"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a3905b3_47b59f7c","line":267,"updated":"2017-01-25 04:23:41.000000000","message":"Is instance_type_id missing from this list? It\u0027s listed as a valid whitelist parameter in the spec:\n\nhttps://specs.openstack.org/openstack/nova-specs/specs/ocata/approved/add-whitelist-for-server-list-filter-sort-parameters.html#proposed-change","commit_id":"88b833c64a2a73c172466b678c9eb21a7340ea00"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"3f2a3a9ae75f9ed15a84f601bc736e84c5183186","unresolved":false,"context_lines":[{"line_number":264,"context_line":""},{"line_number":265,"context_line":"VALID_SORT_KEYS \u003d {"},{"line_number":266,"context_line":"    \"type\": \"string\","},{"line_number":267,"context_line":"    \"enum\": [\u0027access_ip_v4\u0027, \u0027access_ip_v6\u0027, \u0027auto_disk_config\u0027,"},{"line_number":268,"context_line":"             \u0027availability_zone\u0027, \u0027config_drive\u0027, \u0027created_at\u0027,"},{"line_number":269,"context_line":"             \u0027display_description\u0027, \u0027display_name\u0027, \u0027host\u0027, \u0027hostname\u0027,"},{"line_number":270,"context_line":"             \u0027image_ref\u0027, \u0027kernel_id\u0027, \u0027key_name\u0027, \u0027launch_index\u0027,"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a3905b3_5a71f6df","line":267,"in_reply_to":"5a3905b3_47b59f7c","updated":"2017-01-25 05:01:53.000000000","message":"Done","commit_id":"88b833c64a2a73c172466b678c9eb21a7340ea00"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"5f1e74518edac4d8caf55e1d8364fa9d7fe547ed","unresolved":false,"context_lines":[{"line_number":265,"context_line":"VALID_SORT_KEYS \u003d {"},{"line_number":266,"context_line":"    \"type\": \"string\","},{"line_number":267,"context_line":"    \"enum\": [\u0027access_ip_v4\u0027, \u0027access_ip_v6\u0027, \u0027auto_disk_config\u0027,"},{"line_number":268,"context_line":"             \u0027availability_zone\u0027, \u0027config_drive\u0027, \u0027created_at\u0027, \u0027deleted\u0027,"},{"line_number":269,"context_line":"             \u0027deleted_at\u0027, \u0027deleted_at\u0027, \u0027display_description\u0027,"},{"line_number":270,"context_line":"             \u0027display_name\u0027, \u0027host\u0027, \u0027hostname\u0027, \u0027id\u0027, \u0027image_ref\u0027,"},{"line_number":271,"context_line":"             \u0027instance_type_id\u0027, \u0027kernel_id\u0027, \u0027key_name\u0027, \u0027launch_index\u0027,"},{"line_number":272,"context_line":"             \u0027launched_at\u0027, \u0027locked_by\u0027, \u0027node\u0027, \u0027power_state\u0027, \u0027progress\u0027,"}],"source_content_type":"text/x-python","patch_set":32,"id":"5a3905b3_d88c0e82","line":269,"range":{"start_line":268,"start_character":64,"end_line":269,"end_character":39},"updated":"2017-01-25 05:51:22.000000000","message":"This should be in the ignored keys?","commit_id":"af2a774c5edbfa272cc138d045b519f48aecc068"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"5f1e74518edac4d8caf55e1d8364fa9d7fe547ed","unresolved":false,"context_lines":[{"line_number":267,"context_line":"    \"enum\": [\u0027access_ip_v4\u0027, \u0027access_ip_v6\u0027, \u0027auto_disk_config\u0027,"},{"line_number":268,"context_line":"             \u0027availability_zone\u0027, \u0027config_drive\u0027, \u0027created_at\u0027, \u0027deleted\u0027,"},{"line_number":269,"context_line":"             \u0027deleted_at\u0027, \u0027deleted_at\u0027, \u0027display_description\u0027,"},{"line_number":270,"context_line":"             \u0027display_name\u0027, \u0027host\u0027, \u0027hostname\u0027, \u0027id\u0027, \u0027image_ref\u0027,"},{"line_number":271,"context_line":"             \u0027instance_type_id\u0027, \u0027kernel_id\u0027, \u0027key_name\u0027, \u0027launch_index\u0027,"},{"line_number":272,"context_line":"             \u0027launched_at\u0027, \u0027locked_by\u0027, \u0027node\u0027, \u0027power_state\u0027, \u0027progress\u0027,"},{"line_number":273,"context_line":"             \u0027project_id\u0027, \u0027ramdisk_id\u0027, \u0027root_device_name\u0027, \u0027task_state\u0027,"}],"source_content_type":"text/x-python","patch_set":32,"id":"5a3905b3_78c31a8b","line":270,"range":{"start_line":270,"start_character":49,"end_line":270,"end_character":53},"updated":"2017-01-25 05:51:22.000000000","message":"This also should be ignored","commit_id":"af2a774c5edbfa272cc138d045b519f48aecc068"}],"nova/api/openstack/compute/servers.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"c89a6e820c1c736b25409e7809c1f5ff06707c2a","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    \u0027display_description\u0027, \u0027locked_by\u0027, \u0027uuid\u0027, \u0027root_device_name\u0027,"},{"line_number":58,"context_line":"    \u0027config_drive\u0027, \u0027access_ip_v4\u0027, \u0027access_ip_v6\u0027, \u0027auto_disk_config\u0027,"},{"line_number":59,"context_line":"    \u0027progress\u0027, \u0027created_at\u0027"},{"line_number":60,"context_line":"]"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"CONF \u003d nova.conf.CONF"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da4df55a_0b14e79d","line":60,"updated":"2016-12-28 07:32:28.000000000","message":"we can put this into the json-schema I think, make the sort_key as enum type.\n\nAnd we shouldn\u0027t return 400 for the sort_key which we removed in this proposal. we should just ignore them.\n\nSo we can have another list make called SERVER_IGNORED_SORT_KEY \u003d [...]. And put it in the enum also. But we ignore those keys in the python code.","commit_id":"2f739d1f625eea1299ad971f953d9c358536f139"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"c93fa5b08fa21c9da115ce1e99218f253d2d610f","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    \u0027display_description\u0027, \u0027locked_by\u0027, \u0027uuid\u0027, \u0027root_device_name\u0027,"},{"line_number":58,"context_line":"    \u0027config_drive\u0027, \u0027access_ip_v4\u0027, \u0027access_ip_v6\u0027, \u0027auto_disk_config\u0027,"},{"line_number":59,"context_line":"    \u0027progress\u0027, \u0027created_at\u0027"},{"line_number":60,"context_line":"]"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"CONF \u003d nova.conf.CONF"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da4df55a_8b04574a","line":60,"in_reply_to":"da4df55a_0b14e79d","updated":"2016-12-28 07:35:57.000000000","message":"I thought about this, if we put this in schema as an enum, we have to make a very big list then, and it seems that the ignor list will be bigger than the whitelist? is it worth doing?","commit_id":"2f739d1f625eea1299ad971f953d9c358536f139"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"cc084c103f3729744c62967c18432cfaee04adad","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    \u0027display_description\u0027, \u0027locked_by\u0027, \u0027uuid\u0027, \u0027root_device_name\u0027,"},{"line_number":58,"context_line":"    \u0027config_drive\u0027, \u0027access_ip_v4\u0027, \u0027access_ip_v6\u0027, \u0027auto_disk_config\u0027,"},{"line_number":59,"context_line":"    \u0027progress\u0027, \u0027created_at\u0027"},{"line_number":60,"context_line":"]"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"CONF \u003d nova.conf.CONF"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da4df55a_8b27f7c8","line":60,"in_reply_to":"da4df55a_8b04574a","updated":"2016-12-28 07:40:29.000000000","message":"The ignore list should only include the keys which works correctly before and remove for now. I guess it shouldn\u0027t too big.","commit_id":"2f739d1f625eea1299ad971f953d9c358536f139"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"f7ee3352d8235b4edefdf95987320f885e9e3b9b","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    \u0027display_description\u0027, \u0027locked_by\u0027, \u0027uuid\u0027, \u0027root_device_name\u0027,"},{"line_number":58,"context_line":"    \u0027config_drive\u0027, \u0027access_ip_v4\u0027, \u0027access_ip_v6\u0027, \u0027auto_disk_config\u0027,"},{"line_number":59,"context_line":"    \u0027progress\u0027, \u0027created_at\u0027"},{"line_number":60,"context_line":"]"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"CONF \u003d nova.conf.CONF"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da4df55a_6b157347","line":60,"in_reply_to":"da4df55a_8b27f7c8","updated":"2016-12-28 07:42:17.000000000","message":"Does that mean I have to test all the keys to check what can work now?","commit_id":"2f739d1f625eea1299ad971f953d9c358536f139"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"93d99927df78b2f11abf7508d63f817b3551c9c5","unresolved":false,"context_lines":[{"line_number":1213,"context_line":"                             blacklist, admin_only_fields):"},{"line_number":1214,"context_line":"    for key in sort_keys:"},{"line_number":1215,"context_line":"        if key in blacklist:"},{"line_number":1216,"context_line":"            sort_dirs.pop(sort_keys.index(key))"},{"line_number":1217,"context_line":"            sort_keys.pop(sort_keys.index(key))"},{"line_number":1218,"context_line":"        if key in admin_only_fields:"},{"line_number":1219,"context_line":"            if not context.is_admin:"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a3c09a3_56d36f38","line":1216,"updated":"2017-01-14 00:38:01.000000000","message":"We can\u0027t user input same number of sort_dirs and sort_keys.\n\nwe should ensure there is enough number sort_dirs before pop, otherwise it will raise exception.\n\nAnd we should add unittest for this case.","commit_id":"c600c6fe9dc433a6bc679f4731d8c3e626910b20"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"9bc380c2e513c6710af2703053f320803afdef9d","unresolved":false,"context_lines":[{"line_number":1213,"context_line":"                             blacklist, admin_only_fields):"},{"line_number":1214,"context_line":"    for key in sort_keys:"},{"line_number":1215,"context_line":"        if key in blacklist:"},{"line_number":1216,"context_line":"            sort_dirs.pop(sort_keys.index(key))"},{"line_number":1217,"context_line":"            sort_keys.pop(sort_keys.index(key))"},{"line_number":1218,"context_line":"        if key in admin_only_fields:"},{"line_number":1219,"context_line":"            if not context.is_admin:"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a3c09a3_acd602c3","line":1216,"in_reply_to":"7a3c09a3_56d36f38","updated":"2017-01-14 06:15:44.000000000","message":"Done","commit_id":"c600c6fe9dc433a6bc679f4731d8c3e626910b20"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"3d9232275eebcdc84ba85dba87e13bce4a79089c","unresolved":false,"context_lines":[{"line_number":1215,"context_line":"    key_list \u003d copy.deepcopy(sort_keys)"},{"line_number":1216,"context_line":"    for key in key_list:"},{"line_number":1217,"context_line":"        if key in blacklist:"},{"line_number":1218,"context_line":"            if len(sort_dirs) \u003e sort_keys.index(key):"},{"line_number":1219,"context_line":"                sort_dirs.pop(sort_keys.index(key))"},{"line_number":1220,"context_line":"            sort_keys.pop(sort_keys.index(key))"},{"line_number":1221,"context_line":"        if key in admin_only_fields and not context.is_admin:"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a3c09a3_b5db544e","line":1218,"range":{"start_line":1218,"start_character":12,"end_line":1218,"end_character":53},"updated":"2017-01-17 06:06:17.000000000","message":"len(sort_dirs) - 1 \u003e sort_keys.index(key) ?","commit_id":"7f487bf1d59103c6781d6293368bb191a982e817"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"df46bbb928ebd89ef7c5c5bfc4853618f123e4a1","unresolved":false,"context_lines":[{"line_number":1215,"context_line":"    key_list \u003d copy.deepcopy(sort_keys)"},{"line_number":1216,"context_line":"    for key in key_list:"},{"line_number":1217,"context_line":"        if key in blacklist:"},{"line_number":1218,"context_line":"            if len(sort_dirs) \u003e sort_keys.index(key):"},{"line_number":1219,"context_line":"                sort_dirs.pop(sort_keys.index(key))"},{"line_number":1220,"context_line":"            sort_keys.pop(sort_keys.index(key))"},{"line_number":1221,"context_line":"        if key in admin_only_fields and not context.is_admin:"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a3c09a3_60ebe813","line":1218,"range":{"start_line":1218,"start_character":12,"end_line":1218,"end_character":53},"in_reply_to":"7a3c09a3_35a92425","updated":"2017-01-17 06:29:13.000000000","message":"if I have 3 sort keys, and 2 sort dirs. I need to pop the last key. \u0027index\u0027 return 2, and the  len(sort_dirs) return 2. When sort_dirs.pop(2), it breaks.","commit_id":"7f487bf1d59103c6781d6293368bb191a982e817"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"e2d1cb80e8a792188f490e28f34b8cfe64ee86e5","unresolved":false,"context_lines":[{"line_number":1215,"context_line":"    key_list \u003d copy.deepcopy(sort_keys)"},{"line_number":1216,"context_line":"    for key in key_list:"},{"line_number":1217,"context_line":"        if key in blacklist:"},{"line_number":1218,"context_line":"            if len(sort_dirs) \u003e sort_keys.index(key):"},{"line_number":1219,"context_line":"                sort_dirs.pop(sort_keys.index(key))"},{"line_number":1220,"context_line":"            sort_keys.pop(sort_keys.index(key))"},{"line_number":1221,"context_line":"        if key in admin_only_fields and not context.is_admin:"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a3c09a3_c63e74d9","line":1218,"range":{"start_line":1218,"start_character":12,"end_line":1218,"end_character":53},"in_reply_to":"7a3c09a3_60ebe813","updated":"2017-01-17 08:04:07.000000000","message":"In this situation, we will not pop sort_dir I think because 2 !\u003e 2","commit_id":"7f487bf1d59103c6781d6293368bb191a982e817"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"9b2b1780908b62b09f23326d3bff905da6404fc2","unresolved":false,"context_lines":[{"line_number":1215,"context_line":"    key_list \u003d copy.deepcopy(sort_keys)"},{"line_number":1216,"context_line":"    for key in key_list:"},{"line_number":1217,"context_line":"        if key in blacklist:"},{"line_number":1218,"context_line":"            if len(sort_dirs) \u003e sort_keys.index(key):"},{"line_number":1219,"context_line":"                sort_dirs.pop(sort_keys.index(key))"},{"line_number":1220,"context_line":"            sort_keys.pop(sort_keys.index(key))"},{"line_number":1221,"context_line":"        if key in admin_only_fields and not context.is_admin:"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a3c09a3_35a92425","line":1218,"range":{"start_line":1218,"start_character":12,"end_line":1218,"end_character":53},"in_reply_to":"7a3c09a3_b5db544e","updated":"2017-01-17 06:20:24.000000000","message":"No, I was thinking: index start from 0, so len([1,2]) is 2 and list.index(2) is 1 so we should do the pop, something like this.","commit_id":"7f487bf1d59103c6781d6293368bb191a982e817"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"3d9232275eebcdc84ba85dba87e13bce4a79089c","unresolved":false,"context_lines":[{"line_number":1217,"context_line":"        if key in blacklist:"},{"line_number":1218,"context_line":"            if len(sort_dirs) \u003e sort_keys.index(key):"},{"line_number":1219,"context_line":"                sort_dirs.pop(sort_keys.index(key))"},{"line_number":1220,"context_line":"            sort_keys.pop(sort_keys.index(key))"},{"line_number":1221,"context_line":"        if key in admin_only_fields and not context.is_admin:"},{"line_number":1222,"context_line":"            msg \u003d _(\"Only administrators can sort instances \""},{"line_number":1223,"context_line":"                    \"by %s\") % key"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a3c09a3_35f044c9","line":1220,"updated":"2017-01-17 06:06:17.000000000","message":"We should execute \u0027continue\u0027 at here? We needn\u0027t check it whether in the admin list anymore.","commit_id":"7f487bf1d59103c6781d6293368bb191a982e817"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"9b2b1780908b62b09f23326d3bff905da6404fc2","unresolved":false,"context_lines":[{"line_number":1217,"context_line":"        if key in blacklist:"},{"line_number":1218,"context_line":"            if len(sort_dirs) \u003e sort_keys.index(key):"},{"line_number":1219,"context_line":"                sort_dirs.pop(sort_keys.index(key))"},{"line_number":1220,"context_line":"            sort_keys.pop(sort_keys.index(key))"},{"line_number":1221,"context_line":"        if key in admin_only_fields and not context.is_admin:"},{"line_number":1222,"context_line":"            msg \u003d _(\"Only administrators can sort instances \""},{"line_number":1223,"context_line":"                    \"by %s\") % key"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a3c09a3_b56b54f0","line":1220,"in_reply_to":"7a3c09a3_35f044c9","updated":"2017-01-17 06:20:24.000000000","message":"yeah, thanks","commit_id":"7f487bf1d59103c6781d6293368bb191a982e817"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d39e2e100cf095e6dbb376e65f6b55cf9d3c49fe","unresolved":false,"context_lines":[{"line_number":1212,"context_line":""},{"line_number":1213,"context_line":"def remove_invalid_sort_keys(context, sort_keys, sort_dirs,"},{"line_number":1214,"context_line":"                             blacklist, admin_only_fields):"},{"line_number":1215,"context_line":"    key_list \u003d copy.deepcopy(sort_keys)"},{"line_number":1216,"context_line":"    for key in key_list:"},{"line_number":1217,"context_line":"        if key in blacklist:"},{"line_number":1218,"context_line":"            if len(sort_dirs) \u003e sort_keys.index(key):"},{"line_number":1219,"context_line":"                sort_dirs.pop(sort_keys.index(key))"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a3c09a3_a205bf7a","line":1216,"range":{"start_line":1215,"start_character":4,"end_line":1216,"end_character":23},"updated":"2017-01-17 14:42:20.000000000","message":"nit, we can write like this: \"for key in sort_keys[:]\" ?","commit_id":"4c28b11f1e55d8e7c28511e2952f716e203baa04"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"f9a91575dcc8982087e10edd010b744d154208f4","unresolved":false,"context_lines":[{"line_number":1209,"context_line":"            search_options.pop(opt, None)"},{"line_number":1210,"context_line":""},{"line_number":1211,"context_line":""},{"line_number":1212,"context_line":"def remove_invalid_sort_keys(context, sort_keys, sort_dirs,"},{"line_number":1213,"context_line":"                             blacklist, admin_only_fields):"},{"line_number":1214,"context_line":"    key_list \u003d copy.deepcopy(sort_keys)"},{"line_number":1215,"context_line":"    for key in key_list:"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_d3199823","line":1212,"range":{"start_line":1212,"start_character":4,"end_line":1212,"end_character":28},"updated":"2017-01-18 08:01:00.000000000","message":"some tests will be nice for this or at least index tests only with with all if else of this method covered","commit_id":"73d5add89cd8e15d73b6faf7093c4cfe4fd04813"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"f9a91575dcc8982087e10edd010b744d154208f4","unresolved":false,"context_lines":[{"line_number":1214,"context_line":"    key_list \u003d copy.deepcopy(sort_keys)"},{"line_number":1215,"context_line":"    for key in key_list:"},{"line_number":1216,"context_line":"        if key in blacklist:"},{"line_number":1217,"context_line":"            if len(sort_dirs) \u003e sort_keys.index(key):"},{"line_number":1218,"context_line":"                sort_dirs.pop(sort_keys.index(key))"},{"line_number":1219,"context_line":"            sort_keys.pop(sort_keys.index(key))"},{"line_number":1220,"context_line":"        elif key in admin_only_fields and not context.is_admin:"},{"line_number":1221,"context_line":"            msg \u003d _(\"Only administrators can sort instances \""}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_f9f6755b","line":1218,"range":{"start_line":1217,"start_character":0,"end_line":1218,"end_character":51},"updated":"2017-01-18 08:01:00.000000000","message":"will it remove the correct sort_dir corresponding to ignored key ?\n\nwhen i tried this-\n?sort_key\u003duser_id\u0026sort_dir\u003ddesc\u0026sort_key\u003davailability_zone\u0026sort_key\u003dvcpus\u0026sort_dir\u003ddesc\u0026sort_key\u003ddisplay_name\u0026sort_dir\u003dasc\u0027\n\nbelow is something i get in compute_api.API.get_all:\n\n[u\u0027desc\u0027, u\u0027desc\u0027], sort_keys\u003d[u\u0027user_id\u0027, u\u0027availability_zone\u0027, u\u0027display_name\u0027]\n\nso sort_dir of sort_key \u0027display_name\u0027 is being removed.\n\nAlso L328 - common.get_sort_params(req.params)\njust prepare the list from requested sort_key and sort_dir.\nI m not sure where we do default sort_dir to \u0027desc\u0027 if not passed in combination with sort_key.","commit_id":"73d5add89cd8e15d73b6faf7093c4cfe4fd04813"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"bf5283e3a8c9581092773be35587fcf83b80f9ad","unresolved":false,"context_lines":[{"line_number":1214,"context_line":"    key_list \u003d copy.deepcopy(sort_keys)"},{"line_number":1215,"context_line":"    for key in key_list:"},{"line_number":1216,"context_line":"        if key in blacklist:"},{"line_number":1217,"context_line":"            if len(sort_dirs) \u003e sort_keys.index(key):"},{"line_number":1218,"context_line":"                sort_dirs.pop(sort_keys.index(key))"},{"line_number":1219,"context_line":"            sort_keys.pop(sort_keys.index(key))"},{"line_number":1220,"context_line":"        elif key in admin_only_fields and not context.is_admin:"},{"line_number":1221,"context_line":"            msg \u003d _(\"Only administrators can sort instances \""}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_4402390b","line":1218,"range":{"start_line":1217,"start_character":0,"end_line":1218,"end_character":51},"in_reply_to":"7a3c09a3_cb70fc0d","updated":"2017-01-18 08:56:15.000000000","message":"Yea. As discussed on IRC, this is issue with current code also. I m ok with this as it will work same way as it is currently.\n\nI have logged bug in case we forget to fix that - https://bugs.launchpad.net/nova/+bug/1657366","commit_id":"73d5add89cd8e15d73b6faf7093c4cfe4fd04813"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"28f3db99d15d523dc61ff69afe604c77d289b009","unresolved":false,"context_lines":[{"line_number":1214,"context_line":"    key_list \u003d copy.deepcopy(sort_keys)"},{"line_number":1215,"context_line":"    for key in key_list:"},{"line_number":1216,"context_line":"        if key in blacklist:"},{"line_number":1217,"context_line":"            if len(sort_dirs) \u003e sort_keys.index(key):"},{"line_number":1218,"context_line":"                sort_dirs.pop(sort_keys.index(key))"},{"line_number":1219,"context_line":"            sort_keys.pop(sort_keys.index(key))"},{"line_number":1220,"context_line":"        elif key in admin_only_fields and not context.is_admin:"},{"line_number":1221,"context_line":"            msg \u003d _(\"Only administrators can sort instances \""}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_cb70fc0d","line":1218,"range":{"start_line":1217,"start_character":0,"end_line":1218,"end_character":51},"in_reply_to":"7a3c09a3_f9f6755b","updated":"2017-01-18 08:06:23.000000000","message":"Yeah, I also noticed this problem and have a talk with Alex in IRC, actually I think it is a current bug.","commit_id":"73d5add89cd8e15d73b6faf7093c4cfe4fd04813"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"e6fff9d9ad980e517214efcdfcb0a20d4a2506a5","unresolved":false,"context_lines":[{"line_number":1220,"context_line":"        elif key in admin_only_fields and not context.is_admin:"},{"line_number":1221,"context_line":"            msg \u003d _(\"Only administrators can sort instances \""},{"line_number":1222,"context_line":"                    \"by %s\") % key"},{"line_number":1223,"context_line":"            raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":1224,"context_line":""},{"line_number":1225,"context_line":"    return sort_keys, sort_dirs"},{"line_number":1226,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"7a3c09a3_e114e9a0","line":1223,"range":{"start_line":1223,"start_character":22,"end_line":1223,"end_character":35},"updated":"2017-01-18 13:04:53.000000000","message":"Hmm, I guess its a policy thing, so we should do the same as policy. So this seems correct.","commit_id":"9a28076e80b78fb64e56ab6e2766713fcab612ba"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9dc14ce06c8af084c869aeda25967a0d7c0c0dce","unresolved":false,"context_lines":[{"line_number":1214,"context_line":"    key_list \u003d copy.deepcopy(sort_keys)"},{"line_number":1215,"context_line":"    for key in key_list:"},{"line_number":1216,"context_line":"        if key in blacklist:"},{"line_number":1217,"context_line":"            if len(sort_dirs) \u003e sort_keys.index(key):"},{"line_number":1218,"context_line":"                sort_dirs.pop(sort_keys.index(key))"},{"line_number":1219,"context_line":"            sort_keys.pop(sort_keys.index(key))"},{"line_number":1220,"context_line":"        elif key in admin_only_fields and not context.is_admin:"},{"line_number":1221,"context_line":"            msg \u003d _(\"Only administrators can sort instances \""},{"line_number":1222,"context_line":"                    \"by %s\") % key"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_2919d879","line":1219,"range":{"start_line":1217,"start_character":12,"end_line":1219,"end_character":47},"updated":"2017-01-21 16:34:32.000000000","message":"Can we add some documentation in here explaining what this is doing and why?","commit_id":"29521004c1e6a2ae237129cad8294265bed36ea7"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"90f4bca06c223a79372274ae8f73a36363df18e8","unresolved":false,"context_lines":[{"line_number":1214,"context_line":"    key_list \u003d copy.deepcopy(sort_keys)"},{"line_number":1215,"context_line":"    for key in key_list:"},{"line_number":1216,"context_line":"        if key in blacklist:"},{"line_number":1217,"context_line":"            if len(sort_dirs) \u003e sort_keys.index(key):"},{"line_number":1218,"context_line":"                sort_dirs.pop(sort_keys.index(key))"},{"line_number":1219,"context_line":"            sort_keys.pop(sort_keys.index(key))"},{"line_number":1220,"context_line":"        elif key in admin_only_fields and not context.is_admin:"},{"line_number":1221,"context_line":"            msg \u003d _(\"Only administrators can sort instances \""},{"line_number":1222,"context_line":"                    \"by %s\") % key"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_903f4d86","line":1219,"range":{"start_line":1217,"start_character":12,"end_line":1219,"end_character":47},"in_reply_to":"5a3905b3_2919d879","updated":"2017-01-22 02:56:18.000000000","message":"+1","commit_id":"29521004c1e6a2ae237129cad8294265bed36ea7"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"323eb2f44963b8c372cd8357c5a77f8085741776","unresolved":false,"context_lines":[{"line_number":1214,"context_line":"    key_list \u003d copy.deepcopy(sort_keys)"},{"line_number":1215,"context_line":"    for key in key_list:"},{"line_number":1216,"context_line":"        if key in blacklist:"},{"line_number":1217,"context_line":"            if len(sort_dirs) \u003e sort_keys.index(key):"},{"line_number":1218,"context_line":"                sort_dirs.pop(sort_keys.index(key))"},{"line_number":1219,"context_line":"            sort_keys.pop(sort_keys.index(key))"},{"line_number":1220,"context_line":"        elif key in admin_only_fields and not context.is_admin:"},{"line_number":1221,"context_line":"            msg \u003d _(\"Only administrators can sort instances \""},{"line_number":1222,"context_line":"                    \"by %s\") % key"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_d0b1d548","line":1219,"range":{"start_line":1217,"start_character":12,"end_line":1219,"end_character":47},"in_reply_to":"5a3905b3_2919d879","updated":"2017-01-22 02:49:33.000000000","message":"Done","commit_id":"29521004c1e6a2ae237129cad8294265bed36ea7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9dc14ce06c8af084c869aeda25967a0d7c0c0dce","unresolved":false,"context_lines":[{"line_number":1217,"context_line":"            if len(sort_dirs) \u003e sort_keys.index(key):"},{"line_number":1218,"context_line":"                sort_dirs.pop(sort_keys.index(key))"},{"line_number":1219,"context_line":"            sort_keys.pop(sort_keys.index(key))"},{"line_number":1220,"context_line":"        elif key in admin_only_fields and not context.is_admin:"},{"line_number":1221,"context_line":"            msg \u003d _(\"Only administrators can sort instances \""},{"line_number":1222,"context_line":"                    \"by %s\") % key"},{"line_number":1223,"context_line":"            raise exc.HTTPForbidden(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_a92308a6","line":1220,"range":{"start_line":1220,"start_character":54,"end_line":1220,"end_character":62},"updated":"2017-01-21 16:34:32.000000000","message":"What about policy? I don\u0027t think we have anything defined for field-specific policy today, so this is probably fine, but feels like something we shouldn\u0027t hard-code long-term if we can do this based on policy.","commit_id":"29521004c1e6a2ae237129cad8294265bed36ea7"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"90f4bca06c223a79372274ae8f73a36363df18e8","unresolved":false,"context_lines":[{"line_number":1217,"context_line":"            if len(sort_dirs) \u003e sort_keys.index(key):"},{"line_number":1218,"context_line":"                sort_dirs.pop(sort_keys.index(key))"},{"line_number":1219,"context_line":"            sort_keys.pop(sort_keys.index(key))"},{"line_number":1220,"context_line":"        elif key in admin_only_fields and not context.is_admin:"},{"line_number":1221,"context_line":"            msg \u003d _(\"Only administrators can sort instances \""},{"line_number":1222,"context_line":"                    \"by %s\") % key"},{"line_number":1223,"context_line":"            raise exc.HTTPForbidden(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_503965a3","line":1220,"range":{"start_line":1220,"start_character":54,"end_line":1220,"end_character":62},"in_reply_to":"5a3905b3_a92308a6","updated":"2017-01-22 02:56:18.000000000","message":"In long term, searchlight should be used to sort I guess. And we may remove those sort keys in nova.","commit_id":"29521004c1e6a2ae237129cad8294265bed36ea7"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"323eb2f44963b8c372cd8357c5a77f8085741776","unresolved":false,"context_lines":[{"line_number":1217,"context_line":"            if len(sort_dirs) \u003e sort_keys.index(key):"},{"line_number":1218,"context_line":"                sort_dirs.pop(sort_keys.index(key))"},{"line_number":1219,"context_line":"            sort_keys.pop(sort_keys.index(key))"},{"line_number":1220,"context_line":"        elif key in admin_only_fields and not context.is_admin:"},{"line_number":1221,"context_line":"            msg \u003d _(\"Only administrators can sort instances \""},{"line_number":1222,"context_line":"                    \"by %s\") % key"},{"line_number":1223,"context_line":"            raise exc.HTTPForbidden(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_f095f186","line":1220,"range":{"start_line":1220,"start_character":54,"end_line":1220,"end_character":62},"in_reply_to":"5a3905b3_a92308a6","updated":"2017-01-22 02:49:33.000000000","message":"Let me check with Alex","commit_id":"29521004c1e6a2ae237129cad8294265bed36ea7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9dc14ce06c8af084c869aeda25967a0d7c0c0dce","unresolved":false,"context_lines":[{"line_number":1218,"context_line":"                sort_dirs.pop(sort_keys.index(key))"},{"line_number":1219,"context_line":"            sort_keys.pop(sort_keys.index(key))"},{"line_number":1220,"context_line":"        elif key in admin_only_fields and not context.is_admin:"},{"line_number":1221,"context_line":"            msg \u003d _(\"Only administrators can sort instances \""},{"line_number":1222,"context_line":"                    \"by %s\") % key"},{"line_number":1223,"context_line":"            raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":1224,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_c915b440","line":1221,"range":{"start_line":1221,"start_character":50,"end_line":1221,"end_character":59},"updated":"2017-01-21 16:34:32.000000000","message":"I\u0027d probably say \u0027servers\u0027 here since that\u0027s the resource we\u0027re sorting.","commit_id":"29521004c1e6a2ae237129cad8294265bed36ea7"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"90f4bca06c223a79372274ae8f73a36363df18e8","unresolved":false,"context_lines":[{"line_number":1218,"context_line":"                sort_dirs.pop(sort_keys.index(key))"},{"line_number":1219,"context_line":"            sort_keys.pop(sort_keys.index(key))"},{"line_number":1220,"context_line":"        elif key in admin_only_fields and not context.is_admin:"},{"line_number":1221,"context_line":"            msg \u003d _(\"Only administrators can sort instances \""},{"line_number":1222,"context_line":"                    \"by %s\") % key"},{"line_number":1223,"context_line":"            raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":1224,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_703e618d","line":1221,"range":{"start_line":1221,"start_character":50,"end_line":1221,"end_character":59},"in_reply_to":"5a3905b3_c915b440","updated":"2017-01-22 02:56:18.000000000","message":"+1","commit_id":"29521004c1e6a2ae237129cad8294265bed36ea7"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"323eb2f44963b8c372cd8357c5a77f8085741776","unresolved":false,"context_lines":[{"line_number":1218,"context_line":"                sort_dirs.pop(sort_keys.index(key))"},{"line_number":1219,"context_line":"            sort_keys.pop(sort_keys.index(key))"},{"line_number":1220,"context_line":"        elif key in admin_only_fields and not context.is_admin:"},{"line_number":1221,"context_line":"            msg \u003d _(\"Only administrators can sort instances \""},{"line_number":1222,"context_line":"                    \"by %s\") % key"},{"line_number":1223,"context_line":"            raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":1224,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_30b5b930","line":1221,"range":{"start_line":1221,"start_character":50,"end_line":1221,"end_character":59},"in_reply_to":"5a3905b3_c915b440","updated":"2017-01-22 02:49:33.000000000","message":"Done","commit_id":"29521004c1e6a2ae237129cad8294265bed36ea7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9dc14ce06c8af084c869aeda25967a0d7c0c0dce","unresolved":false,"context_lines":[{"line_number":1220,"context_line":"        elif key in admin_only_fields and not context.is_admin:"},{"line_number":1221,"context_line":"            msg \u003d _(\"Only administrators can sort instances \""},{"line_number":1222,"context_line":"                    \"by %s\") % key"},{"line_number":1223,"context_line":"            raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":1224,"context_line":""},{"line_number":1225,"context_line":"    return sort_keys, sort_dirs"},{"line_number":1226,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_697be08c","line":1223,"range":{"start_line":1223,"start_character":22,"end_line":1223,"end_character":35},"updated":"2017-01-21 16:34:32.000000000","message":"I don\u0027t know if this has been discussed already, but I\u0027d probably ask cdent or edleafe or others in the API WG about the best error code for this, i.e. is it 403 or 400? 403 seems OK to me though.","commit_id":"29521004c1e6a2ae237129cad8294265bed36ea7"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"323eb2f44963b8c372cd8357c5a77f8085741776","unresolved":false,"context_lines":[{"line_number":1220,"context_line":"        elif key in admin_only_fields and not context.is_admin:"},{"line_number":1221,"context_line":"            msg \u003d _(\"Only administrators can sort instances \""},{"line_number":1222,"context_line":"                    \"by %s\") % key"},{"line_number":1223,"context_line":"            raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":1224,"context_line":""},{"line_number":1225,"context_line":"    return sort_keys, sort_dirs"},{"line_number":1226,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_70890175","line":1223,"range":{"start_line":1223,"start_character":22,"end_line":1223,"end_character":35},"in_reply_to":"5a3905b3_697be08c","updated":"2017-01-22 02:49:33.000000000","message":"Thanks","commit_id":"29521004c1e6a2ae237129cad8294265bed36ea7"}],"nova/api/validation/parameter_types.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"0f791d64f753730e5a1ba36c0b4cb32a4842b3b5","unresolved":false,"context_lines":[{"line_number":422,"context_line":"    \u0027marker\u0027: multi_params({\u0027type\u0027: \u0027string\u0027})"},{"line_number":423,"context_line":"}"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"valid_sort_keys \u003d {"},{"line_number":426,"context_line":"    \"type\": \"string\","},{"line_number":427,"context_line":"    \"enum\": [\u0027user_id\u0027, \u0027project_id\u0027, \u0027tenant_id\u0027, \u0027launch_index\u0027,"},{"line_number":428,"context_line":"             \u0027image_ref\u0027, \u0027image\u0027, \u0027kernel_id\u0027, \u0027ramdisk_id\u0027, \u0027hostname\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba5201f7_19baf623","line":425,"updated":"2017-01-03 07:52:59.000000000","message":"We can move SERVER_LIST_IGNORE_SORT_KEY into this file. And we can change the schema like this:\n\nvalid_sort_keys \u003d {\n    \"type\": \"string\"\n    \"enum:\" [\"project_id\", \u0027tenant_id\u0027, .......]  + SERVER_LIST_IGNORE_SORT_KEY\n}\n\nand we write some comments at here to explain why we need \u0027SERVER_LIST_IGNORE_SORT_KEY\u0027 being here.","commit_id":"03bc68a0c4bf2e7a5cf140e22e779faae5819fcd"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"d8b02753e324b00ad9961f2631dbb9fb9677a99e","unresolved":false,"context_lines":[{"line_number":422,"context_line":"    \u0027marker\u0027: multi_params({\u0027type\u0027: \u0027string\u0027})"},{"line_number":423,"context_line":"}"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"valid_sort_keys \u003d {"},{"line_number":426,"context_line":"    \"type\": \"string\","},{"line_number":427,"context_line":"    \"enum\": [\u0027user_id\u0027, \u0027project_id\u0027, \u0027tenant_id\u0027, \u0027launch_index\u0027,"},{"line_number":428,"context_line":"             \u0027image_ref\u0027, \u0027image\u0027, \u0027kernel_id\u0027, \u0027ramdisk_id\u0027, \u0027hostname\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba5201f7_ea79d230","line":425,"in_reply_to":"ba5201f7_19baf623","updated":"2017-01-03 10:01:31.000000000","message":"Ah, good idea, thanks","commit_id":"03bc68a0c4bf2e7a5cf140e22e779faae5819fcd"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"af9695676a5878b83dc84fd1229cdbbc24deaac0","unresolved":false,"context_lines":[{"line_number":439,"context_line":"}"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"# These fields are considered as bad values for sort_keys and will"},{"line_number":442,"context_line":"# be ignored."},{"line_number":443,"context_line":"SERVER_LIST_IGNORE_SORT_KEY \u003d ["},{"line_number":444,"context_line":"    \u0027tenant_id\u0027, \u0027image\u0027, \u0027flavor\u0027, \u0027reservation_id\u0027, \u0027terminate_at\u0027,"},{"line_number":445,"context_line":"    \u0027name\u0027, \u0027description\u0027, \u0027accessIPv4\u0027, \u0027accessIPv6\u0027, \u0027deleted\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba5201f7_6e6df398","line":442,"updated":"2017-01-10 13:24:46.000000000","message":"Better we have more words about why we just ignore than.\n\nProbably say, those sort key enabled before, but we disable then now. And avoid to break them, we ignore them instead of return 400.","commit_id":"0d091c2f83289fecbb14b178c296cb81e90b4d80"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"67f0fd2158d6d289343492876b6d94cb97b3979f","unresolved":false,"context_lines":[{"line_number":439,"context_line":"}"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"# These fields are considered as bad values for sort_keys and will"},{"line_number":442,"context_line":"# be ignored."},{"line_number":443,"context_line":"SERVER_LIST_IGNORE_SORT_KEY \u003d ["},{"line_number":444,"context_line":"    \u0027tenant_id\u0027, \u0027image\u0027, \u0027flavor\u0027, \u0027reservation_id\u0027, \u0027terminate_at\u0027,"},{"line_number":445,"context_line":"    \u0027name\u0027, \u0027description\u0027, \u0027accessIPv4\u0027, \u0027accessIPv6\u0027, \u0027deleted\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba5201f7_faf3329d","line":442,"in_reply_to":"ba5201f7_6e6df398","updated":"2017-01-11 09:19:31.000000000","message":"Done","commit_id":"0d091c2f83289fecbb14b178c296cb81e90b4d80"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"af9695676a5878b83dc84fd1229cdbbc24deaac0","unresolved":false,"context_lines":[{"line_number":442,"context_line":"# be ignored."},{"line_number":443,"context_line":"SERVER_LIST_IGNORE_SORT_KEY \u003d ["},{"line_number":444,"context_line":"    \u0027tenant_id\u0027, \u0027image\u0027, \u0027flavor\u0027, \u0027reservation_id\u0027, \u0027terminate_at\u0027,"},{"line_number":445,"context_line":"    \u0027name\u0027, \u0027description\u0027, \u0027accessIPv4\u0027, \u0027accessIPv6\u0027, \u0027deleted\u0027,"},{"line_number":446,"context_line":"    \u0027status\u0027, \u0027ip\u0027, \u0027ip6\u0027"},{"line_number":447,"context_line":"]"},{"line_number":448,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"ba5201f7_2eae8b98","line":445,"range":{"start_line":445,"start_character":27,"end_line":445,"end_character":53},"updated":"2017-01-10 13:24:46.000000000","message":"according to the spec https://review.openstack.org/#/c/393205/21/specs/ocata/approved/add-whitelist-for-server-list-filter-sort-parameters.rst@82\n\nThis two sort key are supported.\n\n\nAnd this ignore list looks like wrong. This list should include key enabled before, but now we didn\u0027t want support them. Compare the instance db model object, there are many field can be in the list, like \u0027vcpus\u0027, \u0027root_gb\u0027, \u0027ephermeral_gb\u0027....etc.","commit_id":"0d091c2f83289fecbb14b178c296cb81e90b4d80"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"a3baad1a70705007c6e98b2179ef269d411cf0ee","unresolved":false,"context_lines":[{"line_number":438,"context_line":"# is considered to be bad values and disabled to use. In"},{"line_number":439,"context_line":"# order to avoid compatibility, they are ignored instead"},{"line_number":440,"context_line":"# of return HTTP 400."},{"line_number":441,"context_line":"SERVER_LIST_IGNORE_SORT_KEY \u003d ["},{"line_number":442,"context_line":"    \u0027key_data\u0027, \u0027memory_mb\u0027, \u0027vcpus\u0027, \u0027root_gb\u0027, \u0027ephemeral_gb\u0027,"},{"line_number":443,"context_line":"    \u0027ephemeral_key_uuid\u0027, \u0027instance_type_id\u0027, \u0027user_data\u0027,"},{"line_number":444,"context_line":"    \u0027reservation_id\u0027, \u0027terminated_at\u0027, \u0027launched_on\u0027, \u0027locked\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a3c09a3_f5415caa","line":441,"updated":"2017-01-17 06:08:34.000000000","message":"I also prefer to move this back to the server\u0027s schema file. This file is for something common.","commit_id":"7f487bf1d59103c6781d6293368bb191a982e817"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"3d9232275eebcdc84ba85dba87e13bce4a79089c","unresolved":false,"context_lines":[{"line_number":440,"context_line":"# of return HTTP 400."},{"line_number":441,"context_line":"SERVER_LIST_IGNORE_SORT_KEY \u003d ["},{"line_number":442,"context_line":"    \u0027key_data\u0027, \u0027memory_mb\u0027, \u0027vcpus\u0027, \u0027root_gb\u0027, \u0027ephemeral_gb\u0027,"},{"line_number":443,"context_line":"    \u0027ephemeral_key_uuid\u0027, \u0027instance_type_id\u0027, \u0027user_data\u0027,"},{"line_number":444,"context_line":"    \u0027reservation_id\u0027, \u0027terminated_at\u0027, \u0027launched_on\u0027, \u0027locked\u0027,"},{"line_number":445,"context_line":"    \u0027os_type\u0027, \u0027architecture\u0027, \u0027vm_mode\u0027, \u0027default_ephemeral_device\u0027,"},{"line_number":446,"context_line":"    \u0027default_swap_device\u0027, \u0027shutdown_terminate\u0027, \u0027disable_terminate\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a3c09a3_75d2cc5d","line":443,"range":{"start_line":443,"start_character":27,"end_line":443,"end_character":43},"updated":"2017-01-17 06:06:17.000000000","message":"This is valid sort key, accroding the spec http://specs.openstack.org/openstack/nova-specs/specs/ocata/approved/add-whitelist-for-server-list-filter-sort-parameters.html","commit_id":"7f487bf1d59103c6781d6293368bb191a982e817"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"9b2b1780908b62b09f23326d3bff905da6404fc2","unresolved":false,"context_lines":[{"line_number":440,"context_line":"# of return HTTP 400."},{"line_number":441,"context_line":"SERVER_LIST_IGNORE_SORT_KEY \u003d ["},{"line_number":442,"context_line":"    \u0027key_data\u0027, \u0027memory_mb\u0027, \u0027vcpus\u0027, \u0027root_gb\u0027, \u0027ephemeral_gb\u0027,"},{"line_number":443,"context_line":"    \u0027ephemeral_key_uuid\u0027, \u0027instance_type_id\u0027, \u0027user_data\u0027,"},{"line_number":444,"context_line":"    \u0027reservation_id\u0027, \u0027terminated_at\u0027, \u0027launched_on\u0027, \u0027locked\u0027,"},{"line_number":445,"context_line":"    \u0027os_type\u0027, \u0027architecture\u0027, \u0027vm_mode\u0027, \u0027default_ephemeral_device\u0027,"},{"line_number":446,"context_line":"    \u0027default_swap_device\u0027, \u0027shutdown_terminate\u0027, \u0027disable_terminate\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a3c09a3_953818f1","line":443,"range":{"start_line":443,"start_character":27,"end_line":443,"end_character":43},"in_reply_to":"7a3c09a3_75d2cc5d","updated":"2017-01-17 06:20:24.000000000","message":"Ah yes","commit_id":"7f487bf1d59103c6781d6293368bb191a982e817"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"a3baad1a70705007c6e98b2179ef269d411cf0ee","unresolved":false,"context_lines":[{"line_number":447,"context_line":"    \u0027cell_name\u0027, \u0027cleaned\u0027]"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":""},{"line_number":450,"context_line":"valid_sort_keys \u003d {"},{"line_number":451,"context_line":"    \"type\": \"string\","},{"line_number":452,"context_line":"    \"enum\": [\u0027user_id\u0027, \u0027project_id\u0027, \u0027launch_index\u0027, \u0027image_ref\u0027,"},{"line_number":453,"context_line":"             \u0027kernel_id\u0027, \u0027ramdisk_id\u0027, \u0027hostname\u0027, \u0027key_name\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a3c09a3_354844cc","line":450,"updated":"2017-01-17 06:08:34.000000000","message":"ditto, prefer to move back the server\u0027s schema file.","commit_id":"7f487bf1d59103c6781d6293368bb191a982e817"}],"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":"3d9232275eebcdc84ba85dba87e13bce4a79089c","unresolved":false,"context_lines":[{"line_number":683,"context_line":"        self.assertRaises(exception.ValidationError,"},{"line_number":684,"context_line":"                          self.controller.index, req)"},{"line_number":685,"context_line":""},{"line_number":686,"context_line":"    def test_get_servers_ignore_sort_key_with_no_sort_dir(self):"},{"line_number":687,"context_line":"        req \u003d self.req(\u0027/fake/servers?sort_key\u003dvcpus\u0026sort_key\u003droot_gb\u0027)"},{"line_number":688,"context_line":"        res_dict \u003d self.controller.index(req)"},{"line_number":689,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"7a3c09a3_9596583d","line":686,"range":{"start_line":686,"start_character":41,"end_line":686,"end_character":57},"updated":"2017-01-17 06:06:17.000000000","message":"We also need a normal case, and ensure the dir is popped.","commit_id":"7f487bf1d59103c6781d6293368bb191a982e817"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"3d9232275eebcdc84ba85dba87e13bce4a79089c","unresolved":false,"context_lines":[{"line_number":687,"context_line":"        req \u003d self.req(\u0027/fake/servers?sort_key\u003dvcpus\u0026sort_key\u003droot_gb\u0027)"},{"line_number":688,"context_line":"        res_dict \u003d self.controller.index(req)"},{"line_number":689,"context_line":""},{"line_number":690,"context_line":"        self.assertEqual(len(res_dict[\u0027servers\u0027]), 5)"},{"line_number":691,"context_line":"        for i, s in enumerate(res_dict[\u0027servers\u0027]):"},{"line_number":692,"context_line":"            self.assertEqual(s[\u0027id\u0027], fakes.get_fake_uuid(i))"},{"line_number":693,"context_line":"            self.assertEqual(s[\u0027name\u0027], \u0027server%d\u0027 % (i + 1))"},{"line_number":694,"context_line":"            self.assertIsNone(s.get(\u0027image\u0027, None))"},{"line_number":695,"context_line":""},{"line_number":696,"context_line":"            expected_links \u003d ["},{"line_number":697,"context_line":"                {"},{"line_number":698,"context_line":"                    \"rel\": \"self\","},{"line_number":699,"context_line":"                    \"href\": \"http://localhost/v2/fake/servers/%s\" % s[\u0027id\u0027],"},{"line_number":700,"context_line":"                },"},{"line_number":701,"context_line":"                {"},{"line_number":702,"context_line":"                    \"rel\": \"bookmark\","},{"line_number":703,"context_line":"                    \"href\": \"http://localhost/fake/servers/%s\" % s[\u0027id\u0027],"},{"line_number":704,"context_line":"                },"},{"line_number":705,"context_line":"            ]"},{"line_number":706,"context_line":""},{"line_number":707,"context_line":"            self.assertEqual(s[\u0027links\u0027], expected_links)"},{"line_number":708,"context_line":""},{"line_number":709,"context_line":"    def test_get_servers_non_admin_with_admin_only_sort_key(self):"},{"line_number":710,"context_line":"        req \u003d self.req(\u0027/fake/servers?sort_key\u003dhost\u0026sort_dir\u003ddesc\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a3c09a3_f5ccfc6b","line":707,"range":{"start_line":690,"start_character":8,"end_line":707,"end_character":56},"updated":"2017-01-17 06:06:17.000000000","message":"Those are needless. We need to ensure the expected sort_key was passed down to the underlayer. We probably just need to mock the comptue_api.get_all, and ensure the expected sort_keys passed.","commit_id":"7f487bf1d59103c6781d6293368bb191a982e817"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"9b2b1780908b62b09f23326d3bff905da6404fc2","unresolved":false,"context_lines":[{"line_number":687,"context_line":"        req \u003d self.req(\u0027/fake/servers?sort_key\u003dvcpus\u0026sort_key\u003droot_gb\u0027)"},{"line_number":688,"context_line":"        res_dict \u003d self.controller.index(req)"},{"line_number":689,"context_line":""},{"line_number":690,"context_line":"        self.assertEqual(len(res_dict[\u0027servers\u0027]), 5)"},{"line_number":691,"context_line":"        for i, s in enumerate(res_dict[\u0027servers\u0027]):"},{"line_number":692,"context_line":"            self.assertEqual(s[\u0027id\u0027], fakes.get_fake_uuid(i))"},{"line_number":693,"context_line":"            self.assertEqual(s[\u0027name\u0027], \u0027server%d\u0027 % (i + 1))"},{"line_number":694,"context_line":"            self.assertIsNone(s.get(\u0027image\u0027, None))"},{"line_number":695,"context_line":""},{"line_number":696,"context_line":"            expected_links \u003d ["},{"line_number":697,"context_line":"                {"},{"line_number":698,"context_line":"                    \"rel\": \"self\","},{"line_number":699,"context_line":"                    \"href\": \"http://localhost/v2/fake/servers/%s\" % s[\u0027id\u0027],"},{"line_number":700,"context_line":"                },"},{"line_number":701,"context_line":"                {"},{"line_number":702,"context_line":"                    \"rel\": \"bookmark\","},{"line_number":703,"context_line":"                    \"href\": \"http://localhost/fake/servers/%s\" % s[\u0027id\u0027],"},{"line_number":704,"context_line":"                },"},{"line_number":705,"context_line":"            ]"},{"line_number":706,"context_line":""},{"line_number":707,"context_line":"            self.assertEqual(s[\u0027links\u0027], expected_links)"},{"line_number":708,"context_line":""},{"line_number":709,"context_line":"    def test_get_servers_non_admin_with_admin_only_sort_key(self):"},{"line_number":710,"context_line":"        req \u003d self.req(\u0027/fake/servers?sort_key\u003dhost\u0026sort_dir\u003ddesc\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a3c09a3_552b1094","line":707,"range":{"start_line":690,"start_character":8,"end_line":707,"end_character":56},"in_reply_to":"7a3c09a3_f5ccfc6b","updated":"2017-01-17 06:20:24.000000000","message":"OK, got it.","commit_id":"7f487bf1d59103c6781d6293368bb191a982e817"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"3d9232275eebcdc84ba85dba87e13bce4a79089c","unresolved":false,"context_lines":[{"line_number":728,"context_line":"        self.stubs.Set(compute_api.API, \u0027get_all\u0027, return_servers_with_host)"},{"line_number":729,"context_line":"        res_dict \u003d self.controller.detail(req)"},{"line_number":730,"context_line":""},{"line_number":731,"context_line":"        server_list \u003d res_dict[\u0027servers\u0027]"},{"line_number":732,"context_line":"        host_ids \u003d [server_list[0][\u0027hostId\u0027], server_list[1][\u0027hostId\u0027]]"},{"line_number":733,"context_line":"        self.assertTrue(host_ids[0] and host_ids[1])"},{"line_number":734,"context_line":"        self.assertNotEqual(host_ids[0], host_ids[1])"},{"line_number":735,"context_line":""},{"line_number":736,"context_line":"        for i, s in enumerate(server_list):"},{"line_number":737,"context_line":"            self.assertEqual(s[\u0027id\u0027], fakes.get_fake_uuid(i))"},{"line_number":738,"context_line":"            self.assertEqual(s[\u0027hostId\u0027], host_ids[i % 2])"},{"line_number":739,"context_line":"            self.assertEqual(s[\u0027name\u0027], \u0027server%d\u0027 % (i + 1))"},{"line_number":740,"context_line":""},{"line_number":741,"context_line":"    def test_get_servers_with_bad_option(self):"},{"line_number":742,"context_line":"        server_uuid \u003d uuids.fake"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a3c09a3_d5eaa0ab","line":739,"range":{"start_line":731,"start_character":8,"end_line":739,"end_character":61},"updated":"2017-01-17 06:06:17.000000000","message":"ditto. This didn\u0027t test the thing we want to test.","commit_id":"7f487bf1d59103c6781d6293368bb191a982e817"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"9b2b1780908b62b09f23326d3bff905da6404fc2","unresolved":false,"context_lines":[{"line_number":728,"context_line":"        self.stubs.Set(compute_api.API, \u0027get_all\u0027, return_servers_with_host)"},{"line_number":729,"context_line":"        res_dict \u003d self.controller.detail(req)"},{"line_number":730,"context_line":""},{"line_number":731,"context_line":"        server_list \u003d res_dict[\u0027servers\u0027]"},{"line_number":732,"context_line":"        host_ids \u003d [server_list[0][\u0027hostId\u0027], server_list[1][\u0027hostId\u0027]]"},{"line_number":733,"context_line":"        self.assertTrue(host_ids[0] and host_ids[1])"},{"line_number":734,"context_line":"        self.assertNotEqual(host_ids[0], host_ids[1])"},{"line_number":735,"context_line":""},{"line_number":736,"context_line":"        for i, s in enumerate(server_list):"},{"line_number":737,"context_line":"            self.assertEqual(s[\u0027id\u0027], fakes.get_fake_uuid(i))"},{"line_number":738,"context_line":"            self.assertEqual(s[\u0027hostId\u0027], host_ids[i % 2])"},{"line_number":739,"context_line":"            self.assertEqual(s[\u0027name\u0027], \u0027server%d\u0027 % (i + 1))"},{"line_number":740,"context_line":""},{"line_number":741,"context_line":"    def test_get_servers_with_bad_option(self):"},{"line_number":742,"context_line":"        server_uuid \u003d uuids.fake"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a3c09a3_b510b45a","line":739,"range":{"start_line":731,"start_character":8,"end_line":739,"end_character":61},"in_reply_to":"7a3c09a3_d5eaa0ab","updated":"2017-01-17 06:20:24.000000000","message":"Done","commit_id":"7f487bf1d59103c6781d6293368bb191a982e817"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"f9a91575dcc8982087e10edd010b744d154208f4","unresolved":false,"context_lines":[{"line_number":711,"context_line":"        self.controller.detail(req)"},{"line_number":712,"context_line":"        mock_get.assert_called_once_with("},{"line_number":713,"context_line":"            mock.ANY, search_opts\u003dmock.ANY, limit\u003dmock.ANY, marker\u003dmock.ANY,"},{"line_number":714,"context_line":"            expected_attrs\u003dmock.ANY, sort_keys\u003d[\u0027host\u0027], sort_dirs\u003d[\u0027desc\u0027])"},{"line_number":715,"context_line":""},{"line_number":716,"context_line":"    def test_get_servers_with_bad_option(self):"},{"line_number":717,"context_line":"        server_uuid \u003d uuids.fake"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_330bbcd7","line":714,"range":{"start_line":714,"start_character":73,"end_line":714,"end_character":76},"updated":"2017-01-18 08:01:00.000000000","message":"can we add tests with multiple combination of sort_keys and sort_dir like-\n\nno sort_dir for 1 sort_key:\n\n- ?sort_key\u003duser_id\u0026sort_dir\u003ddesc\u0026sort_key\u003davailability_zone\u0026sort_key\u003dvcpus\u0026sort_dir\u003ddesc\u0026sort_key\u003ddisplay_name\u0026sort_dir\u003dasc\u0027\n\nbad sort_dir with ignored key:\n\n- ?sort_key\u003duser_id\u0026sort_dir\u003ddesc\u0026sort_key\u003dvcpus\u0026sort_dir\u003dbad_dir\n\n\nbad sort_dir with multiple sort_key:\n\n- ?sort_key\u003duser_id\u0026sort_dir\u003ddesc\u0026sort_key\u003ddisplay_name\u0026sort_dir\u003dbad_dir\u0027","commit_id":"73d5add89cd8e15d73b6faf7093c4cfe4fd04813"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"bf5283e3a8c9581092773be35587fcf83b80f9ad","unresolved":false,"context_lines":[{"line_number":711,"context_line":"        self.controller.detail(req)"},{"line_number":712,"context_line":"        mock_get.assert_called_once_with("},{"line_number":713,"context_line":"            mock.ANY, search_opts\u003dmock.ANY, limit\u003dmock.ANY, marker\u003dmock.ANY,"},{"line_number":714,"context_line":"            expected_attrs\u003dmock.ANY, sort_keys\u003d[\u0027host\u0027], sort_dirs\u003d[\u0027desc\u0027])"},{"line_number":715,"context_line":""},{"line_number":716,"context_line":"    def test_get_servers_with_bad_option(self):"},{"line_number":717,"context_line":"        server_uuid \u003d uuids.fake"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_647ad589","line":714,"range":{"start_line":714,"start_character":73,"end_line":714,"end_character":76},"in_reply_to":"7a3c09a3_330bbcd7","updated":"2017-01-18 08:56:15.000000000","message":"as we have bug in those type of sort_key and sort_dir combination, try to add what all tests can be added (may be with current behavior.).","commit_id":"73d5add89cd8e15d73b6faf7093c4cfe4fd04813"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9dc14ce06c8af084c869aeda25967a0d7c0c0dce","unresolved":false,"context_lines":[{"line_number":730,"context_line":""},{"line_number":731,"context_line":"    @mock.patch.object(compute_api.API, \u0027get_all\u0027)"},{"line_number":732,"context_line":"    def test_get_servers_admin_with_admin_only_sort_key(self, mock_get):"},{"line_number":733,"context_line":"        req \u003d self.req(\u0027/fake/servers?sort_key\u003dhost\u0026sort_dir\u003ddesc\u0027,"},{"line_number":734,"context_line":"                       use_admin_context\u003dTrue)"},{"line_number":735,"context_line":"        self.controller.detail(req)"},{"line_number":736,"context_line":"        mock_get.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_69a200ff","line":733,"range":{"start_line":733,"start_character":47,"end_line":733,"end_character":51},"updated":"2017-01-21 16:34:32.000000000","message":"nit: mix this test up by using node instead of host since we used host above.","commit_id":"29521004c1e6a2ae237129cad8294265bed36ea7"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"323eb2f44963b8c372cd8357c5a77f8085741776","unresolved":false,"context_lines":[{"line_number":730,"context_line":""},{"line_number":731,"context_line":"    @mock.patch.object(compute_api.API, \u0027get_all\u0027)"},{"line_number":732,"context_line":"    def test_get_servers_admin_with_admin_only_sort_key(self, mock_get):"},{"line_number":733,"context_line":"        req \u003d self.req(\u0027/fake/servers?sort_key\u003dhost\u0026sort_dir\u003ddesc\u0027,"},{"line_number":734,"context_line":"                       use_admin_context\u003dTrue)"},{"line_number":735,"context_line":"        self.controller.detail(req)"},{"line_number":736,"context_line":"        mock_get.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_70f021ff","line":733,"range":{"start_line":733,"start_character":47,"end_line":733,"end_character":51},"in_reply_to":"5a3905b3_69a200ff","updated":"2017-01-22 02:49:33.000000000","message":"Done","commit_id":"29521004c1e6a2ae237129cad8294265bed36ea7"}]}
