)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"e1b99ead8e290c0fec529a7d69294abe66663c6d","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"* GET /servers/{server_id}/migrations"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Add a \u0027type\u0027 parameter and remove a \u0027status\u0027 parameter"},{"line_number":20,"context_line":"in the response of the following APIs."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"* GET /servers/{server_id}/migrations"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":74,"id":"9f6a8fd7_02d2505d","line":19,"range":{"start_line":19,"start_character":33,"end_line":19,"end_character":36},"updated":"2018-04-17 06:36:40.000000000","message":"s/a/the","commit_id":"a4405b515bf953fe8996c26b3c14aac6b1374042"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"13703bd90e8873fd947f18d094e443e68687351e","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"* GET /servers/{server_id}/migrations"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Add a \u0027type\u0027 parameter and remove a \u0027status\u0027 parameter"},{"line_number":20,"context_line":"in the response of the following APIs."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"* GET /servers/{server_id}/migrations"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":74,"id":"9f6a8fd7_01a6c5c2","line":19,"range":{"start_line":19,"start_character":33,"end_line":19,"end_character":36},"in_reply_to":"9f6a8fd7_02d2505d","updated":"2018-04-17 12:15:14.000000000","message":"Done","commit_id":"a4405b515bf953fe8996c26b3c14aac6b1374042"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"e1b99ead8e290c0fec529a7d69294abe66663c6d","unresolved":false,"context_lines":[{"line_number":22,"context_line":"* GET /servers/{server_id}/migrations"},{"line_number":23,"context_line":"* GET /servers/{server_id}/migrations/{migration_id}"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"The migration is not a ‘live-migration’, it returns 400 error"},{"line_number":26,"context_line":"instead of 404 error in the following API"},{"line_number":27,"context_line":"(Force Migration Complete Action)."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"* POST /servers/{server_id}/migrations/{migration_id}/action"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":74,"id":"9f6a8fd7_62bc6c05","line":26,"range":{"start_line":25,"start_character":0,"end_line":26,"end_character":41},"updated":"2018-04-17 06:36:40.000000000","message":"Perhaps this would probably be better?\n\nIf the migration is not a \u0027live-migration\u0027, HTTP 400 will be returned instead of HTTP 404 in the following API.","commit_id":"a4405b515bf953fe8996c26b3c14aac6b1374042"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"13703bd90e8873fd947f18d094e443e68687351e","unresolved":false,"context_lines":[{"line_number":22,"context_line":"* GET /servers/{server_id}/migrations"},{"line_number":23,"context_line":"* GET /servers/{server_id}/migrations/{migration_id}"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"The migration is not a ‘live-migration’, it returns 400 error"},{"line_number":26,"context_line":"instead of 404 error in the following API"},{"line_number":27,"context_line":"(Force Migration Complete Action)."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"* POST /servers/{server_id}/migrations/{migration_id}/action"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":74,"id":"9f6a8fd7_018fa52a","line":26,"range":{"start_line":25,"start_character":0,"end_line":26,"end_character":41},"in_reply_to":"9f6a8fd7_62bc6c05","updated":"2018-04-17 12:15:14.000000000","message":"Done","commit_id":"a4405b515bf953fe8996c26b3c14aac6b1374042"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"e1b99ead8e290c0fec529a7d69294abe66663c6d","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"* POST /servers/{server_id}/migrations/{migration_id}/action"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"The migration is not a ‘live-migration’, it returns 400 error"},{"line_number":32,"context_line":"in the following API (Abort live migration)."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"* DELETE /servers/{server_id}/migrations/{migration_id}"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":74,"id":"9f6a8fd7_226514b6","line":32,"range":{"start_line":31,"start_character":0,"end_line":32,"end_character":44},"updated":"2018-04-17 06:36:40.000000000","message":"ditto","commit_id":"a4405b515bf953fe8996c26b3c14aac6b1374042"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"13703bd90e8873fd947f18d094e443e68687351e","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"* POST /servers/{server_id}/migrations/{migration_id}/action"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"The migration is not a ‘live-migration’, it returns 400 error"},{"line_number":32,"context_line":"in the following API (Abort live migration)."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"* DELETE /servers/{server_id}/migrations/{migration_id}"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":74,"id":"9f6a8fd7_2177493d","line":32,"range":{"start_line":31,"start_character":0,"end_line":32,"end_character":44},"in_reply_to":"9f6a8fd7_226514b6","updated":"2018-04-17 12:15:14.000000000","message":"Done","commit_id":"a4405b515bf953fe8996c26b3c14aac6b1374042"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"e1b99ead8e290c0fec529a7d69294abe66663c6d","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"APIImpact:"},{"line_number":46,"context_line":"  Add a \u0027type\u0027 query parameter in list server migrations API."},{"line_number":47,"context_line":"  Add a \u0027type\u0027 parameter and remove a \u0027status\u0027 parameter"},{"line_number":48,"context_line":"  in the response of list/show server migration(s)."},{"line_number":49,"context_line":"  A 400 error is returned if the migration is not a ‘live-migration’"},{"line_number":50,"context_line":"  in \"Force Migration Complete Action\" and"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":74,"id":"9f6a8fd7_e25e3ce5","line":47,"range":{"start_line":47,"start_character":36,"end_line":47,"end_character":37},"updated":"2018-04-17 06:36:40.000000000","message":"s/a/the","commit_id":"a4405b515bf953fe8996c26b3c14aac6b1374042"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"13703bd90e8873fd947f18d094e443e68687351e","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"APIImpact:"},{"line_number":46,"context_line":"  Add a \u0027type\u0027 query parameter in list server migrations API."},{"line_number":47,"context_line":"  Add a \u0027type\u0027 parameter and remove a \u0027status\u0027 parameter"},{"line_number":48,"context_line":"  in the response of list/show server migration(s)."},{"line_number":49,"context_line":"  A 400 error is returned if the migration is not a ‘live-migration’"},{"line_number":50,"context_line":"  in \"Force Migration Complete Action\" and"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":74,"id":"9f6a8fd7_e18e3126","line":47,"range":{"start_line":47,"start_character":36,"end_line":47,"end_character":37},"in_reply_to":"9f6a8fd7_e25e3ce5","updated":"2018-04-17 12:15:14.000000000","message":"Done","commit_id":"a4405b515bf953fe8996c26b3c14aac6b1374042"}],"api-ref/source/parameters.yaml":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d39b0e39d32fb88a2d3cc4f2ad3fb5871cbad0ed","unresolved":false,"context_lines":[{"line_number":697,"context_line":"  type: string"},{"line_number":698,"context_line":"migration_type_2_46:"},{"line_number":699,"context_line":"  description: |"},{"line_number":700,"context_line":"    The type of migration to filter."},{"line_number":701,"context_line":"  in: query"},{"line_number":702,"context_line":"  required: false"},{"line_number":703,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"ff0f0b1f_fe9659f0","line":700,"range":{"start_line":700,"start_character":26,"end_line":700,"end_character":35},"updated":"2017-05-22 14:54:36.000000000","message":"on which to filter.\n\nIt would be good to also list (or put into bullet points) the supported types that you can use to filter (from the jsonschema).","commit_id":"910699e6b2c3a8c433f32df659ce84d27b6cb055"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"c636b304964d0d67e81357cc3df216be3931f7c7","unresolved":false,"context_lines":[{"line_number":697,"context_line":"  type: string"},{"line_number":698,"context_line":"migration_type_2_46:"},{"line_number":699,"context_line":"  description: |"},{"line_number":700,"context_line":"    The type of migration to filter."},{"line_number":701,"context_line":"  in: query"},{"line_number":702,"context_line":"  required: false"},{"line_number":703,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"ff0f0b1f_24bf05b1","line":700,"range":{"start_line":700,"start_character":26,"end_line":700,"end_character":35},"in_reply_to":"ff0f0b1f_fe9659f0","updated":"2017-05-23 07:46:41.000000000","message":"Done","commit_id":"910699e6b2c3a8c433f32df659ce84d27b6cb055"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"be7788d44b5f88b2ee621792d50099ec4fa4065f","unresolved":false,"context_lines":[{"line_number":819,"context_line":"  type: string"},{"line_number":820,"context_line":"migration_type_2_54:"},{"line_number":821,"context_line":"  description: |"},{"line_number":822,"context_line":"    The type of migration on which to filter."},{"line_number":823,"context_line":"    It can be specified as one of:"},{"line_number":824,"context_line":""},{"line_number":825,"context_line":"    - live-migration"}],"source_content_type":"text/x-yaml","patch_set":30,"id":"9f436f4f_4c3717b2","line":822,"range":{"start_line":822,"start_character":38,"end_line":822,"end_character":44},"updated":"2017-08-22 03:30:36.000000000","message":"..filter the in-progress migrations.","commit_id":"21cbc70706d833061dfe64e83fb33335efd7aaa5"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"e25ac8722c422cb543b17c4824d3f51153923bf9","unresolved":false,"context_lines":[{"line_number":819,"context_line":"  type: string"},{"line_number":820,"context_line":"migration_type_2_54:"},{"line_number":821,"context_line":"  description: |"},{"line_number":822,"context_line":"    The type of migration on which to filter."},{"line_number":823,"context_line":"    It can be specified as one of:"},{"line_number":824,"context_line":""},{"line_number":825,"context_line":"    - live-migration"}],"source_content_type":"text/x-yaml","patch_set":30,"id":"7f287b81_2e423810","line":822,"range":{"start_line":822,"start_character":38,"end_line":822,"end_character":44},"in_reply_to":"9f436f4f_4c3717b2","updated":"2017-09-08 01:21:01.000000000","message":"Done","commit_id":"21cbc70706d833061dfe64e83fb33335efd7aaa5"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"120550395aa88fa97515e1a2a6cb39be476c82c6","unresolved":false,"context_lines":[{"line_number":4067,"context_line":"  type: string"},{"line_number":4068,"context_line":"migrate_status_2_58:"},{"line_number":4069,"context_line":"  description: |"},{"line_number":4070,"context_line":"    The current status of the migration."},{"line_number":4071,"context_line":"  in: body"},{"line_number":4072,"context_line":"  required: true"},{"line_number":4073,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":53,"id":"df87a7cf_77713876","line":4070,"range":{"start_line":4070,"start_character":0,"end_line":4070,"end_character":40},"updated":"2017-12-18 09:00:31.000000000","message":"Should we add some other description to show the difference of migrate_status and migrate_status_2_58? other wise, the use would a little confusing about these.","commit_id":"8996293277aa9d754089a92074dab121635fa99f"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"c6c8955c11605cbd8f3bb4b5ec7628e74887b9d8","unresolved":false,"context_lines":[{"line_number":4067,"context_line":"  type: string"},{"line_number":4068,"context_line":"migrate_status_2_58:"},{"line_number":4069,"context_line":"  description: |"},{"line_number":4070,"context_line":"    The current status of the migration."},{"line_number":4071,"context_line":"  in: body"},{"line_number":4072,"context_line":"  required: true"},{"line_number":4073,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":53,"id":"df87a7cf_e5058ec3","line":4070,"range":{"start_line":4070,"start_character":0,"end_line":4070,"end_character":40},"in_reply_to":"df87a7cf_77713876","updated":"2017-12-18 09:42:23.000000000","message":"Seems the migration status here is just used to show its max version is 2.58, the above migrate status could be used somewhere else, without this 2.58 max limitation.","commit_id":"8996293277aa9d754089a92074dab121635fa99f"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"40dadb7061f5f27dae931e29c0bc0cdda91020f5","unresolved":false,"context_lines":[{"line_number":4067,"context_line":"  type: string"},{"line_number":4068,"context_line":"migrate_status_2_58:"},{"line_number":4069,"context_line":"  description: |"},{"line_number":4070,"context_line":"    The current status of the migration."},{"line_number":4071,"context_line":"  in: body"},{"line_number":4072,"context_line":"  required: true"},{"line_number":4073,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":53,"id":"df87a7cf_eb10ea50","line":4070,"range":{"start_line":4070,"start_character":0,"end_line":4070,"end_character":40},"in_reply_to":"df87a7cf_e5058ec3","updated":"2017-12-19 02:34:18.000000000","message":"\u0027migrate_status\u0027 is used in parameters of \"GET /os-migrations\".\nSo it remains as it is, and add a new item whose \u0027max_version\u0027 is 2.58 for \"GET /servers/{server_id}/migrations\" and \"GET /servers/{server_id}/migrations/{migration_id}\".","commit_id":"8996293277aa9d754089a92074dab121635fa99f"}],"nova/api/openstack/api_version_request.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d39b0e39d32fb88a2d3cc4f2ad3fb5871cbad0ed","unresolved":false,"context_lines":[{"line_number":112,"context_line":"    * 2.46 - Extend list and show server migration(s) APIs to"},{"line_number":113,"context_line":"             cold migration, resize and evacuation."},{"line_number":114,"context_line":"             Add a \u0027type\u0027 query parameter in list migrations API."},{"line_number":115,"context_line":"             Add a \u0027type\u0027 parameter in the response of list \u0026 show"},{"line_number":116,"context_line":"             server migration(s) API."},{"line_number":117,"context_line":"\"\"\""},{"line_number":118,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ff0f0b1f_3ea97123","line":115,"range":{"start_line":115,"start_character":60,"end_line":115,"end_character":61},"updated":"2017-05-22 14:54:36.000000000","message":"nit: and","commit_id":"910699e6b2c3a8c433f32df659ce84d27b6cb055"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"c636b304964d0d67e81357cc3df216be3931f7c7","unresolved":false,"context_lines":[{"line_number":112,"context_line":"    * 2.46 - Extend list and show server migration(s) APIs to"},{"line_number":113,"context_line":"             cold migration, resize and evacuation."},{"line_number":114,"context_line":"             Add a \u0027type\u0027 query parameter in list migrations API."},{"line_number":115,"context_line":"             Add a \u0027type\u0027 parameter in the response of list \u0026 show"},{"line_number":116,"context_line":"             server migration(s) API."},{"line_number":117,"context_line":"\"\"\""},{"line_number":118,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ff0f0b1f_248025c0","line":115,"range":{"start_line":115,"start_character":60,"end_line":115,"end_character":61},"in_reply_to":"ff0f0b1f_3ea97123","updated":"2017-05-23 07:46:41.000000000","message":"Done","commit_id":"910699e6b2c3a8c433f32df659ce84d27b6cb055"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"e1b99ead8e290c0fec529a7d69294abe66663c6d","unresolved":false,"context_lines":[{"line_number":151,"context_line":"             Add a \u0027type\u0027 query parameter in list migrations API."},{"line_number":152,"context_line":"             Add a \u0027type\u0027 parameter in the response of list and show"},{"line_number":153,"context_line":"             server migration(s) API."},{"line_number":154,"context_line":"             Remove a \u0027status\u0027 parameter in the response of list and show"},{"line_number":155,"context_line":"             server migration(s) API."},{"line_number":156,"context_line":"             The ``links`` parameter is also available in the response of"},{"line_number":157,"context_line":"             list migrations API when the migration type is ``migration``,"}],"source_content_type":"text/x-python","patch_set":74,"id":"9f6a8fd7_0263301c","line":154,"range":{"start_line":154,"start_character":20,"end_line":154,"end_character":21},"updated":"2018-04-17 06:36:40.000000000","message":"the","commit_id":"a4405b515bf953fe8996c26b3c14aac6b1374042"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"13703bd90e8873fd947f18d094e443e68687351e","unresolved":false,"context_lines":[{"line_number":151,"context_line":"             Add a \u0027type\u0027 query parameter in list migrations API."},{"line_number":152,"context_line":"             Add a \u0027type\u0027 parameter in the response of list and show"},{"line_number":153,"context_line":"             server migration(s) API."},{"line_number":154,"context_line":"             Remove a \u0027status\u0027 parameter in the response of list and show"},{"line_number":155,"context_line":"             server migration(s) API."},{"line_number":156,"context_line":"             The ``links`` parameter is also available in the response of"},{"line_number":157,"context_line":"             list migrations API when the migration type is ``migration``,"}],"source_content_type":"text/x-python","patch_set":74,"id":"9f6a8fd7_2648bfca","line":154,"range":{"start_line":154,"start_character":20,"end_line":154,"end_character":21},"in_reply_to":"9f6a8fd7_0263301c","updated":"2018-04-17 12:15:14.000000000","message":"Done","commit_id":"a4405b515bf953fe8996c26b3c14aac6b1374042"}],"nova/api/openstack/compute/rest_api_version_history.rst":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d39b0e39d32fb88a2d3cc4f2ad3fb5871cbad0ed","unresolved":false,"context_lines":[{"line_number":543,"context_line":"  Extend list and show server migration(s) APIs to cold migration, resize"},{"line_number":544,"context_line":"  and evacuation."},{"line_number":545,"context_line":"  Add a \u0027type\u0027 query parameter in list migrations API to list a specified"},{"line_number":546,"context_line":"  type migrations. The \u0027live-migration\u0027, \u0027migration\u0027, \u0027resize\u0027 and"},{"line_number":547,"context_line":"  \u0027evacuation\u0027 can be specified as \u0027type\u0027."},{"line_number":548,"context_line":"  And add a \u0027type\u0027 parameter in the response of list/show server"},{"line_number":549,"context_line":"  migration(s) APIs."}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff0f0b1f_be38e1ed","line":546,"range":{"start_line":546,"start_character":7,"end_line":546,"end_character":17},"updated":"2017-05-22 14:54:36.000000000","message":"type of migrations?","commit_id":"910699e6b2c3a8c433f32df659ce84d27b6cb055"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"c636b304964d0d67e81357cc3df216be3931f7c7","unresolved":false,"context_lines":[{"line_number":543,"context_line":"  Extend list and show server migration(s) APIs to cold migration, resize"},{"line_number":544,"context_line":"  and evacuation."},{"line_number":545,"context_line":"  Add a \u0027type\u0027 query parameter in list migrations API to list a specified"},{"line_number":546,"context_line":"  type migrations. The \u0027live-migration\u0027, \u0027migration\u0027, \u0027resize\u0027 and"},{"line_number":547,"context_line":"  \u0027evacuation\u0027 can be specified as \u0027type\u0027."},{"line_number":548,"context_line":"  And add a \u0027type\u0027 parameter in the response of list/show server"},{"line_number":549,"context_line":"  migration(s) APIs."}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff0f0b1f_24538541","line":546,"range":{"start_line":546,"start_character":7,"end_line":546,"end_character":17},"in_reply_to":"ff0f0b1f_be38e1ed","updated":"2017-05-23 07:46:41.000000000","message":"to list migrations of a specified type.","commit_id":"910699e6b2c3a8c433f32df659ce84d27b6cb055"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d39b0e39d32fb88a2d3cc4f2ad3fb5871cbad0ed","unresolved":false,"context_lines":[{"line_number":543,"context_line":"  Extend list and show server migration(s) APIs to cold migration, resize"},{"line_number":544,"context_line":"  and evacuation."},{"line_number":545,"context_line":"  Add a \u0027type\u0027 query parameter in list migrations API to list a specified"},{"line_number":546,"context_line":"  type migrations. The \u0027live-migration\u0027, \u0027migration\u0027, \u0027resize\u0027 and"},{"line_number":547,"context_line":"  \u0027evacuation\u0027 can be specified as \u0027type\u0027."},{"line_number":548,"context_line":"  And add a \u0027type\u0027 parameter in the response of list/show server"},{"line_number":549,"context_line":"  migration(s) APIs."}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff0f0b1f_f900b303","line":547,"range":{"start_line":546,"start_character":19,"end_line":547,"end_character":41},"updated":"2017-05-22 14:54:36.000000000","message":"I\u0027d rewrite this as:\n\nThe type query parameter can be specified as one of:\n\n* evacuation\n* live-migration\n* migration\n* resize","commit_id":"910699e6b2c3a8c433f32df659ce84d27b6cb055"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"c636b304964d0d67e81357cc3df216be3931f7c7","unresolved":false,"context_lines":[{"line_number":543,"context_line":"  Extend list and show server migration(s) APIs to cold migration, resize"},{"line_number":544,"context_line":"  and evacuation."},{"line_number":545,"context_line":"  Add a \u0027type\u0027 query parameter in list migrations API to list a specified"},{"line_number":546,"context_line":"  type migrations. The \u0027live-migration\u0027, \u0027migration\u0027, \u0027resize\u0027 and"},{"line_number":547,"context_line":"  \u0027evacuation\u0027 can be specified as \u0027type\u0027."},{"line_number":548,"context_line":"  And add a \u0027type\u0027 parameter in the response of list/show server"},{"line_number":549,"context_line":"  migration(s) APIs."}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff0f0b1f_0439a1f0","line":547,"range":{"start_line":546,"start_character":19,"end_line":547,"end_character":41},"in_reply_to":"ff0f0b1f_f900b303","updated":"2017-05-23 07:46:41.000000000","message":"Done","commit_id":"910699e6b2c3a8c433f32df659ce84d27b6cb055"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d39b0e39d32fb88a2d3cc4f2ad3fb5871cbad0ed","unresolved":false,"context_lines":[{"line_number":545,"context_line":"  Add a \u0027type\u0027 query parameter in list migrations API to list a specified"},{"line_number":546,"context_line":"  type migrations. The \u0027live-migration\u0027, \u0027migration\u0027, \u0027resize\u0027 and"},{"line_number":547,"context_line":"  \u0027evacuation\u0027 can be specified as \u0027type\u0027."},{"line_number":548,"context_line":"  And add a \u0027type\u0027 parameter in the response of list/show server"},{"line_number":549,"context_line":"  migration(s) APIs."}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff0f0b1f_391aab6e","line":549,"range":{"start_line":548,"start_character":2,"end_line":549,"end_character":20},"updated":"2017-05-22 14:54:36.000000000","message":"I\u0027d rewrite this as:\n\nAlso, a \u0027type\u0027 parameter is added to the response of the list and show server migration(s) APIs.","commit_id":"910699e6b2c3a8c433f32df659ce84d27b6cb055"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"c636b304964d0d67e81357cc3df216be3931f7c7","unresolved":false,"context_lines":[{"line_number":545,"context_line":"  Add a \u0027type\u0027 query parameter in list migrations API to list a specified"},{"line_number":546,"context_line":"  type migrations. The \u0027live-migration\u0027, \u0027migration\u0027, \u0027resize\u0027 and"},{"line_number":547,"context_line":"  \u0027evacuation\u0027 can be specified as \u0027type\u0027."},{"line_number":548,"context_line":"  And add a \u0027type\u0027 parameter in the response of list/show server"},{"line_number":549,"context_line":"  migration(s) APIs."}],"source_content_type":"text/x-rst","patch_set":5,"id":"ff0f0b1f_a42315bd","line":549,"range":{"start_line":548,"start_character":2,"end_line":549,"end_character":20},"in_reply_to":"ff0f0b1f_391aab6e","updated":"2017-05-23 07:46:41.000000000","message":"Done","commit_id":"910699e6b2c3a8c433f32df659ce84d27b6cb055"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"05ee6b17787fa46ab837a2b78e044c00bb279f16","unresolved":false,"context_lines":[{"line_number":744,"context_line":"2.59"},{"line_number":745,"context_line":"----"},{"line_number":746,"context_line":""},{"line_number":747,"context_line":"  Extend list and show server migration(s) APIs to cold migration, resize"},{"line_number":748,"context_line":"  and evacuation."},{"line_number":749,"context_line":"  Add a ``type`` query parameter in list migrations API to list migrations of"},{"line_number":750,"context_line":"  a specified type."},{"line_number":751,"context_line":"  The ``type`` query parameter can be specified as one of:"},{"line_number":752,"context_line":""},{"line_number":753,"context_line":"  - live-migration"},{"line_number":754,"context_line":"  - migration"},{"line_number":755,"context_line":"  - resize"},{"line_number":756,"context_line":"  - evacuation"},{"line_number":757,"context_line":""},{"line_number":758,"context_line":"  Also, a ``type`` parameter is added to the response of the list and show"},{"line_number":759,"context_line":"  server migration(s) APIs."},{"line_number":760,"context_line":"  Remove a ``status`` parameter in the response of the list and show server"},{"line_number":761,"context_line":"  migration(s) APIs."}],"source_content_type":"text/x-rst","patch_set":54,"id":"bf8cb3f7_09401856","line":761,"range":{"start_line":747,"start_character":0,"end_line":761,"end_character":20},"updated":"2017-12-23 02:44:37.000000000","message":"needs formatting, it\u0027s NOT a reference format.\n\nhttps://review.openstack.org/#/c/529902/","commit_id":"36bd7b20fd7f66fa608cf957e10d08f516ba28f9"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"3e5691feea551bf3a2e6ea251e07f047d85687f7","unresolved":false,"context_lines":[{"line_number":744,"context_line":"2.59"},{"line_number":745,"context_line":"----"},{"line_number":746,"context_line":""},{"line_number":747,"context_line":"  Extend list and show server migration(s) APIs to cold migration, resize"},{"line_number":748,"context_line":"  and evacuation."},{"line_number":749,"context_line":"  Add a ``type`` query parameter in list migrations API to list migrations of"},{"line_number":750,"context_line":"  a specified type."},{"line_number":751,"context_line":"  The ``type`` query parameter can be specified as one of:"},{"line_number":752,"context_line":""},{"line_number":753,"context_line":"  - live-migration"},{"line_number":754,"context_line":"  - migration"},{"line_number":755,"context_line":"  - resize"},{"line_number":756,"context_line":"  - evacuation"},{"line_number":757,"context_line":""},{"line_number":758,"context_line":"  Also, a ``type`` parameter is added to the response of the list and show"},{"line_number":759,"context_line":"  server migration(s) APIs."},{"line_number":760,"context_line":"  Remove a ``status`` parameter in the response of the list and show server"},{"line_number":761,"context_line":"  migration(s) APIs."}],"source_content_type":"text/x-rst","patch_set":54,"id":"bf8cb3f7_ff59d859","line":761,"range":{"start_line":747,"start_character":0,"end_line":761,"end_character":20},"in_reply_to":"bf8cb3f7_09401856","updated":"2017-12-25 05:36:54.000000000","message":"Done","commit_id":"36bd7b20fd7f66fa608cf957e10d08f516ba28f9"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"e1b99ead8e290c0fec529a7d69294abe66663c6d","unresolved":false,"context_lines":[{"line_number":801,"context_line":""},{"line_number":802,"context_line":"Also, a ``type`` parameter is added to the response of the list and show"},{"line_number":803,"context_line":"server migration(s) APIs."},{"line_number":804,"context_line":"Remove a ``status`` parameter in the response of the list and show server"},{"line_number":805,"context_line":"migration(s) APIs."},{"line_number":806,"context_line":""},{"line_number":807,"context_line":"The ``links`` parameter is also available in the response of list migrations"}],"source_content_type":"text/x-rst","patch_set":74,"id":"9f6a8fd7_024c909c","line":804,"range":{"start_line":804,"start_character":7,"end_line":804,"end_character":8},"updated":"2018-04-17 06:36:40.000000000","message":"the","commit_id":"a4405b515bf953fe8996c26b3c14aac6b1374042"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"13703bd90e8873fd947f18d094e443e68687351e","unresolved":false,"context_lines":[{"line_number":801,"context_line":""},{"line_number":802,"context_line":"Also, a ``type`` parameter is added to the response of the list and show"},{"line_number":803,"context_line":"server migration(s) APIs."},{"line_number":804,"context_line":"Remove a ``status`` parameter in the response of the list and show server"},{"line_number":805,"context_line":"migration(s) APIs."},{"line_number":806,"context_line":""},{"line_number":807,"context_line":"The ``links`` parameter is also available in the response of list migrations"}],"source_content_type":"text/x-rst","patch_set":74,"id":"9f6a8fd7_264f5fbe","line":804,"range":{"start_line":804,"start_character":7,"end_line":804,"end_character":8},"in_reply_to":"9f6a8fd7_024c909c","updated":"2018-04-17 12:15:14.000000000","message":"Done","commit_id":"a4405b515bf953fe8996c26b3c14aac6b1374042"}],"nova/api/openstack/compute/schemas/server_migrations.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d39b0e39d32fb88a2d3cc4f2ad3fb5871cbad0ed","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":33,"context_line":"    \u0027properties\u0027: {"},{"line_number":34,"context_line":"        \u0027type\u0027: parameter_types.multi_params({\u0027type\u0027: \u0027string\u0027,"},{"line_number":35,"context_line":"                                              \u0027enum\u0027: [\u0027live-migration\u0027,"},{"line_number":36,"context_line":"                                                       \u0027migration\u0027, \u0027resize\u0027,"},{"line_number":37,"context_line":"                                                       \u0027evacuation\u0027]})"},{"line_number":38,"context_line":"    },"},{"line_number":39,"context_line":"    \u0027additionalProperties\u0027: True"},{"line_number":40,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff0f0b1f_bf6a1bea","line":37,"range":{"start_line":35,"start_character":55,"end_line":37,"end_character":67},"updated":"2017-05-22 14:54:36.000000000","message":"It would be good to use the MigrationType field enums here so we make sure we don\u0027t have a typo at some point.","commit_id":"910699e6b2c3a8c433f32df659ce84d27b6cb055"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"c636b304964d0d67e81357cc3df216be3931f7c7","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":33,"context_line":"    \u0027properties\u0027: {"},{"line_number":34,"context_line":"        \u0027type\u0027: parameter_types.multi_params({\u0027type\u0027: \u0027string\u0027,"},{"line_number":35,"context_line":"                                              \u0027enum\u0027: [\u0027live-migration\u0027,"},{"line_number":36,"context_line":"                                                       \u0027migration\u0027, \u0027resize\u0027,"},{"line_number":37,"context_line":"                                                       \u0027evacuation\u0027]})"},{"line_number":38,"context_line":"    },"},{"line_number":39,"context_line":"    \u0027additionalProperties\u0027: True"},{"line_number":40,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff0f0b1f_66a182f8","line":37,"range":{"start_line":35,"start_character":55,"end_line":37,"end_character":67},"in_reply_to":"ff0f0b1f_bf6a1bea","updated":"2017-05-23 07:46:41.000000000","message":"Done","commit_id":"910699e6b2c3a8c433f32df659ce84d27b6cb055"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"13f6856ef55e7fc40c9876177b7508a7a93a6ac5","unresolved":false,"context_lines":[{"line_number":32,"context_line":"index_query_schema_v249 \u003d {"},{"line_number":33,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":34,"context_line":"    \u0027properties\u0027: {"},{"line_number":35,"context_line":"        \u0027type\u0027: parameter_types.multi_params("},{"line_number":36,"context_line":"            {\u0027type\u0027: \u0027string\u0027, \u0027enum\u0027: fields.MigrationType.ALL})"},{"line_number":37,"context_line":"    },"},{"line_number":38,"context_line":"    \u0027additionalProperties\u0027: True"}],"source_content_type":"text/x-python","patch_set":11,"id":"df140735_615d78e8","line":35,"range":{"start_line":35,"start_character":32,"end_line":35,"end_character":44},"updated":"2017-06-07 08:08:52.000000000","message":"We should use `parameter_types.single_param` since we only support one type parameter in the query string, right?","commit_id":"0ee144c3673bdf268df52f9c418a3e50c8a006f3"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"013a01c5f2f1b12bbeaf5518ad913f9c826dfd06","unresolved":false,"context_lines":[{"line_number":32,"context_line":"index_query_schema_v249 \u003d {"},{"line_number":33,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":34,"context_line":"    \u0027properties\u0027: {"},{"line_number":35,"context_line":"        \u0027type\u0027: parameter_types.multi_params("},{"line_number":36,"context_line":"            {\u0027type\u0027: \u0027string\u0027, \u0027enum\u0027: fields.MigrationType.ALL})"},{"line_number":37,"context_line":"    },"},{"line_number":38,"context_line":"    \u0027additionalProperties\u0027: True"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f0e0f27_1a5e39e6","line":35,"range":{"start_line":35,"start_character":32,"end_line":35,"end_character":44},"in_reply_to":"df140735_615d78e8","updated":"2017-06-09 10:38:16.000000000","message":"Done","commit_id":"0ee144c3673bdf268df52f9c418a3e50c8a006f3"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"13f6856ef55e7fc40c9876177b7508a7a93a6ac5","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \u0027type\u0027: parameter_types.multi_params("},{"line_number":36,"context_line":"            {\u0027type\u0027: \u0027string\u0027, \u0027enum\u0027: fields.MigrationType.ALL})"},{"line_number":37,"context_line":"    },"},{"line_number":38,"context_line":"    \u0027additionalProperties\u0027: True"},{"line_number":39,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":11,"id":"df140735_61b9f8e7","line":38,"updated":"2017-06-07 08:08:52.000000000","message":"This should be false? We only support one parameter \u0027type\u0027","commit_id":"0ee144c3673bdf268df52f9c418a3e50c8a006f3"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"013a01c5f2f1b12bbeaf5518ad913f9c826dfd06","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \u0027type\u0027: parameter_types.multi_params("},{"line_number":36,"context_line":"            {\u0027type\u0027: \u0027string\u0027, \u0027enum\u0027: fields.MigrationType.ALL})"},{"line_number":37,"context_line":"    },"},{"line_number":38,"context_line":"    \u0027additionalProperties\u0027: True"},{"line_number":39,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f0e0f27_fa72657c","line":38,"in_reply_to":"df140735_61b9f8e7","updated":"2017-06-09 10:38:16.000000000","message":"Done","commit_id":"0ee144c3673bdf268df52f9c418a3e50c8a006f3"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"be7788d44b5f88b2ee621792d50099ec4fa4065f","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":34,"context_line":"    \u0027properties\u0027: {"},{"line_number":35,"context_line":"        \u0027type\u0027: parameter_types.single_param("},{"line_number":36,"context_line":"            {\u0027type\u0027: \u0027string\u0027, \u0027enum\u0027: fields.MigrationType.ALL})"},{"line_number":37,"context_line":"    },"},{"line_number":38,"context_line":"    \u0027additionalProperties\u0027: False"},{"line_number":39,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":30,"id":"9f436f4f_2c0853d7","line":36,"range":{"start_line":36,"start_character":39,"end_line":36,"end_character":63},"updated":"2017-08-22 03:30:36.000000000","message":"let\u0027s not use the imported values from objects here which are more error prone. \nKeeping hard code value in schema as much as possible will avoid any accidental change in API.","commit_id":"21cbc70706d833061dfe64e83fb33335efd7aaa5"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"e25ac8722c422cb543b17c4824d3f51153923bf9","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":34,"context_line":"    \u0027properties\u0027: {"},{"line_number":35,"context_line":"        \u0027type\u0027: parameter_types.single_param("},{"line_number":36,"context_line":"            {\u0027type\u0027: \u0027string\u0027, \u0027enum\u0027: fields.MigrationType.ALL})"},{"line_number":37,"context_line":"    },"},{"line_number":38,"context_line":"    \u0027additionalProperties\u0027: False"},{"line_number":39,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":30,"id":"7f287b81_0e741c67","line":36,"range":{"start_line":36,"start_character":39,"end_line":36,"end_character":63},"in_reply_to":"9f436f4f_2c0853d7","updated":"2017-09-08 01:21:01.000000000","message":"Done","commit_id":"21cbc70706d833061dfe64e83fb33335efd7aaa5"}],"nova/api/openstack/compute/server_migrations.py":[{"author":{"_account_id":1011,"name":"Tushar Patil","email":"tushar.vitthal.patil@gmail.com","username":"tpatil"},"change_message_id":"3ceff459ebec355c8832887a8362e1557690baf8","unresolved":false,"context_lines":[{"line_number":95,"context_line":"                state_error, \u0027force_complete\u0027, server_id)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    @wsgi.Controller.api_version(\"2.23\")"},{"line_number":98,"context_line":"    @validation.query_schema(server_migrations.index_query_schema_v246)"},{"line_number":99,"context_line":"    @extensions.expected_errors((400, 404))"},{"line_number":100,"context_line":"    def index(self, req, server_id):"},{"line_number":101,"context_line":"        \"\"\"Return all migrations of an instance in progress.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"ff0f0b1f_dff75af5","line":98,"range":{"start_line":98,"start_character":16,"end_line":98,"end_character":28},"updated":"2017-05-18 23:26:24.000000000","message":"You should pass min_version as 2.46 or else the schema validation will take place for any api_version 2.23 and above.","commit_id":"492e85daac5f92b7d2cc5cce374694be572cef6a"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"a3ffc54cf56cb189f86183ad2d2d7d8e66f0bb75","unresolved":false,"context_lines":[{"line_number":95,"context_line":"                state_error, \u0027force_complete\u0027, server_id)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    @wsgi.Controller.api_version(\"2.23\")"},{"line_number":98,"context_line":"    @validation.query_schema(server_migrations.index_query_schema_v246)"},{"line_number":99,"context_line":"    @extensions.expected_errors((400, 404))"},{"line_number":100,"context_line":"    def index(self, req, server_id):"},{"line_number":101,"context_line":"        \"\"\"Return all migrations of an instance in progress.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"ff0f0b1f_b765e247","line":98,"range":{"start_line":98,"start_character":16,"end_line":98,"end_character":28},"in_reply_to":"ff0f0b1f_dff75af5","updated":"2017-05-19 07:37:05.000000000","message":"Done","commit_id":"492e85daac5f92b7d2cc5cce374694be572cef6a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d39b0e39d32fb88a2d3cc4f2ad3fb5871cbad0ed","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    }"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    if add_type:"},{"line_number":60,"context_line":"        migration_dict.update({\"type\": migration.migration_type})"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    return migration_dict"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ff0f0b1f_79426340","line":60,"range":{"start_line":60,"start_character":39,"end_line":60,"end_character":63},"updated":"2017-05-22 14:54:36.000000000","message":"It seems we should whitelist this. Consider at some point in the future a new type of migration is added to the object. It would start leaking through the API here if we don\u0027t whitelist it.\n\nThe question becomes what do we do if it\u0027s not in our whitelist? Since it\u0027s tied to the type query parameter, I think we\u0027d just omit that field from the response if it\u0027s not in our whitelist of known types in the API.","commit_id":"910699e6b2c3a8c433f32df659ce84d27b6cb055"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"c636b304964d0d67e81357cc3df216be3931f7c7","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    }"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    if add_type:"},{"line_number":60,"context_line":"        migration_dict.update({\"type\": migration.migration_type})"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    return migration_dict"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ff0f0b1f_a94e4d35","line":60,"range":{"start_line":60,"start_character":39,"end_line":60,"end_character":63},"in_reply_to":"ff0f0b1f_79426340","updated":"2017-05-23 07:46:41.000000000","message":"Done","commit_id":"910699e6b2c3a8c433f32df659ce84d27b6cb055"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d39b0e39d32fb88a2d3cc4f2ad3fb5871cbad0ed","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        except (exception.MigrationNotFoundByStatus,"},{"line_number":87,"context_line":"                exception.InvalidMigrationState,"},{"line_number":88,"context_line":"                exception.MigrationNotFoundForInstance,"},{"line_number":89,"context_line":"                exception.InvalidMigrationType) as e:"},{"line_number":90,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":91,"context_line":"        except exception.InstanceIsLocked as e:"},{"line_number":92,"context_line":"            raise exc.HTTPConflict(explanation\u003de.format_message())"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff0f0b1f_3ffbab47","line":89,"range":{"start_line":89,"start_character":26,"end_line":89,"end_character":46},"updated":"2017-05-22 14:54:36.000000000","message":"I tend to think this should result in a 409 like InstanceInvalidState does below. A 400 might convey that it\u0027s something the user can fix on their end and retry, when they can\u0027t for this type of migration and this operation. But I can\u0027t say we are very consistent between 400 and 409 either so I won\u0027t block on it. It might be good to ask about this in the weekly API subteam meeting, or ask alex_xu or cdent directly for their opinion.","commit_id":"910699e6b2c3a8c433f32df659ce84d27b6cb055"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"c636b304964d0d67e81357cc3df216be3931f7c7","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        except (exception.MigrationNotFoundByStatus,"},{"line_number":87,"context_line":"                exception.InvalidMigrationState,"},{"line_number":88,"context_line":"                exception.MigrationNotFoundForInstance,"},{"line_number":89,"context_line":"                exception.InvalidMigrationType) as e:"},{"line_number":90,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":91,"context_line":"        except exception.InstanceIsLocked as e:"},{"line_number":92,"context_line":"            raise exc.HTTPConflict(explanation\u003de.format_message())"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff0f0b1f_49a211fe","line":89,"range":{"start_line":89,"start_character":26,"end_line":89,"end_character":46},"in_reply_to":"ff0f0b1f_3ffbab47","updated":"2017-05-23 07:46:41.000000000","message":"I discussed it with Alex Xu in https://review.openstack.org/#/c/407237/ .\nThe conclusion is that it should be 400.\nAnd it is described explicitly in the spec.\n\nhttps://specs.openstack.org/openstack/nova-specs/specs/pike/approved/list-show-all-server-migration-types.html","commit_id":"910699e6b2c3a8c433f32df659ce84d27b6cb055"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d39b0e39d32fb88a2d3cc4f2ad3fb5871cbad0ed","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        migration_type \u003d \u0027live-migration\u0027"},{"line_number":113,"context_line":"        if support_v2_46:"},{"line_number":114,"context_line":"            migration_type \u003d req.params.get(\u0027type\u0027)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        migns \u003d self.compute_api.get_migrations_in_progress_by_instance("},{"line_number":117,"context_line":"            context, server_id, migration_type)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff0f0b1f_f985535b","line":114,"range":{"start_line":114,"start_character":29,"end_line":114,"end_character":51},"updated":"2017-05-22 14:54:36.000000000","message":"Shouldn\u0027t this default to \u0027live-migration\u0027 if \u0027type\u0027 isn\u0027t specified? Otherwise migration-type is going to be None which means all types will be returned, right? Or is that the intent - I suppose it is. Maybe leave a comment to point that out.","commit_id":"910699e6b2c3a8c433f32df659ce84d27b6cb055"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"c636b304964d0d67e81357cc3df216be3931f7c7","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        migration_type \u003d \u0027live-migration\u0027"},{"line_number":113,"context_line":"        if support_v2_46:"},{"line_number":114,"context_line":"            migration_type \u003d req.params.get(\u0027type\u0027)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        migns \u003d self.compute_api.get_migrations_in_progress_by_instance("},{"line_number":117,"context_line":"            context, server_id, migration_type)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff0f0b1f_89002903","line":114,"range":{"start_line":114,"start_character":29,"end_line":114,"end_character":51},"in_reply_to":"ff0f0b1f_f985535b","updated":"2017-05-23 07:46:41.000000000","message":"\u003e  Otherwise migration-type is going to be None which means all types will be returned, right?\n\nYes.","commit_id":"910699e6b2c3a8c433f32df659ce84d27b6cb055"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d39b0e39d32fb88a2d3cc4f2ad3fb5871cbad0ed","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        if support_v2_46:"},{"line_number":114,"context_line":"            migration_type \u003d req.params.get(\u0027type\u0027)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        migns \u003d self.compute_api.get_migrations_in_progress_by_instance("},{"line_number":117,"context_line":"            context, server_id, migration_type)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        return {\u0027migrations\u0027: [output(migration, add_type\u003dsupport_v2_46)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff0f0b1f_79dee36d","line":116,"range":{"start_line":116,"start_character":8,"end_line":116,"end_character":13},"updated":"2017-05-22 14:54:36.000000000","message":"nit: I\u0027d still prefer to call this variable \"migrations\". I know you\u0027d have to adjust for line length.","commit_id":"910699e6b2c3a8c433f32df659ce84d27b6cb055"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"c636b304964d0d67e81357cc3df216be3931f7c7","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        if support_v2_46:"},{"line_number":114,"context_line":"            migration_type \u003d req.params.get(\u0027type\u0027)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        migns \u003d self.compute_api.get_migrations_in_progress_by_instance("},{"line_number":117,"context_line":"            context, server_id, migration_type)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        return {\u0027migrations\u0027: [output(migration, add_type\u003dsupport_v2_46)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff0f0b1f_46579ecb","line":116,"range":{"start_line":116,"start_character":8,"end_line":116,"end_character":13},"in_reply_to":"ff0f0b1f_79dee36d","updated":"2017-05-23 07:46:41.000000000","message":"Done","commit_id":"910699e6b2c3a8c433f32df659ce84d27b6cb055"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d39b0e39d32fb88a2d3cc4f2ad3fb5871cbad0ed","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        migration_status \u003d migration.get(\"status\")"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        if (migration_type \u003d\u003d \u0027live-migration\u0027 and"},{"line_number":159,"context_line":"                migration_status not in live_in_progress):"},{"line_number":160,"context_line":"                msg \u003d _(\"Live migration %(id)s for server %(uuid)s is not in\""},{"line_number":161,"context_line":"                        \" progress.\") % {\"id\": id, \"uuid\": server_id}"},{"line_number":162,"context_line":"                raise exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":163,"context_line":"        elif (migration_type in (\u0027migration\u0027, \u0027resize\u0027) and"},{"line_number":164,"context_line":"                migration_status not in resize_in_progress):"},{"line_number":165,"context_line":"                msg \u003d _(\"Cold migration/Resize %(id)s for server %(uuid)s is \""}],"source_content_type":"text/x-python","patch_set":5,"id":"ff0f0b1f_b9323b5d","line":162,"range":{"start_line":159,"start_character":0,"end_line":162,"end_character":55},"updated":"2017-05-22 14:54:36.000000000","message":"nit: these conditionals all seem like they are one tab too many.","commit_id":"910699e6b2c3a8c433f32df659ce84d27b6cb055"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"c636b304964d0d67e81357cc3df216be3931f7c7","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        migration_status \u003d migration.get(\"status\")"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        if (migration_type \u003d\u003d \u0027live-migration\u0027 and"},{"line_number":159,"context_line":"                migration_status not in live_in_progress):"},{"line_number":160,"context_line":"                msg \u003d _(\"Live migration %(id)s for server %(uuid)s is not in\""},{"line_number":161,"context_line":"                        \" progress.\") % {\"id\": id, \"uuid\": server_id}"},{"line_number":162,"context_line":"                raise exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":163,"context_line":"        elif (migration_type in (\u0027migration\u0027, \u0027resize\u0027) and"},{"line_number":164,"context_line":"                migration_status not in resize_in_progress):"},{"line_number":165,"context_line":"                msg \u003d _(\"Cold migration/Resize %(id)s for server %(uuid)s is \""}],"source_content_type":"text/x-python","patch_set":5,"id":"ff0f0b1f_e60b5227","line":162,"range":{"start_line":159,"start_character":0,"end_line":162,"end_character":55},"in_reply_to":"ff0f0b1f_b9323b5d","updated":"2017-05-23 07:46:41.000000000","message":"I made it (line158-172) be one method.","commit_id":"910699e6b2c3a8c433f32df659ce84d27b6cb055"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d39b0e39d32fb88a2d3cc4f2ad3fb5871cbad0ed","unresolved":false,"context_lines":[{"line_number":162,"context_line":"                raise exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":163,"context_line":"        elif (migration_type in (\u0027migration\u0027, \u0027resize\u0027) and"},{"line_number":164,"context_line":"                migration_status not in resize_in_progress):"},{"line_number":165,"context_line":"                msg \u003d _(\"Cold migration/Resize %(id)s for server %(uuid)s is \""},{"line_number":166,"context_line":"                        \"not in progress.\") % {\"id\": id, \"uuid\": server_id}"},{"line_number":167,"context_line":"                raise exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":168,"context_line":"        elif (migration_type \u003d\u003d \u0027evacuation\u0027 and"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff0f0b1f_ffb9b3cb","line":165,"range":{"start_line":165,"start_character":25,"end_line":165,"end_character":46},"updated":"2017-05-22 14:54:36.000000000","message":"I don\u0027t think this is going to translate well. I think it would be more clear to separate the error message based on migration_type, e.g.:\n\nif migration_type \u003d\u003d \u0027migration\u0027:\n  msg \u003d _(\u0027Cold migration %(id)s for server %(uuid)s is not in progress.\u0027)...\nelse:\n  msg \u003d _(\u0027Resize...\u0027)","commit_id":"910699e6b2c3a8c433f32df659ce84d27b6cb055"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"c636b304964d0d67e81357cc3df216be3931f7c7","unresolved":false,"context_lines":[{"line_number":162,"context_line":"                raise exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":163,"context_line":"        elif (migration_type in (\u0027migration\u0027, \u0027resize\u0027) and"},{"line_number":164,"context_line":"                migration_status not in resize_in_progress):"},{"line_number":165,"context_line":"                msg \u003d _(\"Cold migration/Resize %(id)s for server %(uuid)s is \""},{"line_number":166,"context_line":"                        \"not in progress.\") % {\"id\": id, \"uuid\": server_id}"},{"line_number":167,"context_line":"                raise exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":168,"context_line":"        elif (migration_type \u003d\u003d \u0027evacuation\u0027 and"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff0f0b1f_e625920a","line":165,"range":{"start_line":165,"start_character":25,"end_line":165,"end_character":46},"in_reply_to":"ff0f0b1f_ffb9b3cb","updated":"2017-05-23 07:46:41.000000000","message":"Done","commit_id":"910699e6b2c3a8c433f32df659ce84d27b6cb055"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d39b0e39d32fb88a2d3cc4f2ad3fb5871cbad0ed","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        except exception.MigrationNotFoundForInstance as e:"},{"line_number":191,"context_line":"            raise exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":192,"context_line":"        except (exception.InvalidMigrationState,"},{"line_number":193,"context_line":"                exception.InvalidMigrationType) as e:"},{"line_number":194,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ff0f0b1f_5f877fb6","line":193,"range":{"start_line":193,"start_character":26,"end_line":193,"end_character":46},"updated":"2017-05-22 14:54:36.000000000","message":"Same comment/question about this above, i.e. should this be a 409 instead?","commit_id":"910699e6b2c3a8c433f32df659ce84d27b6cb055"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"c636b304964d0d67e81357cc3df216be3931f7c7","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        except exception.MigrationNotFoundForInstance as e:"},{"line_number":191,"context_line":"            raise exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":192,"context_line":"        except (exception.InvalidMigrationState,"},{"line_number":193,"context_line":"                exception.InvalidMigrationType) as e:"},{"line_number":194,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ff0f0b1f_29a7dd0d","line":193,"range":{"start_line":193,"start_character":26,"end_line":193,"end_character":46},"in_reply_to":"ff0f0b1f_5f877fb6","updated":"2017-05-23 07:46:41.000000000","message":"I discussed it with Alex Xu in https://review.openstack.org/#/c/407237/ .\nThe conclusion is that it should be 400.\nAnd it is described explicitly in the spec.\n\nhttps://specs.openstack.org/openstack/nova-specs/specs/pike/approved/list-show-all-server-migration-types.html","commit_id":"910699e6b2c3a8c433f32df659ce84d27b6cb055"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"13f6856ef55e7fc40c9876177b7508a7a93a6ac5","unresolved":false,"context_lines":[{"line_number":117,"context_line":"                               for migration in migrations]}"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def _check_migration_in_progress(self, migration_type, migration_status,"},{"line_number":120,"context_line":"                                     migration_id, server_id):"},{"line_number":121,"context_line":"        live_in_progress \u003d fields.MigrationStatus.LIVE_MIGRATION_IN_PROGRESS"},{"line_number":122,"context_line":"        resize_in_progress \u003d ("},{"line_number":123,"context_line":"            fields.MigrationStatus.MIGRATION_RESIZE_IN_PROGRESS)"}],"source_content_type":"text/x-python","patch_set":11,"id":"df140735_619c585d","line":120,"updated":"2017-06-07 08:08:52.000000000","message":"This can be done DB layer I guess, then we can share code with this patch https://review.openstack.org/#/c/430608/, or  maybe also use migration_get_in_progress_by_instance, but with one more parameter \u0027migration_id\u0027.","commit_id":"0ee144c3673bdf268df52f9c418a3e50c8a006f3"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"013a01c5f2f1b12bbeaf5518ad913f9c826dfd06","unresolved":false,"context_lines":[{"line_number":117,"context_line":"                               for migration in migrations]}"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def _check_migration_in_progress(self, migration_type, migration_status,"},{"line_number":120,"context_line":"                                     migration_id, server_id):"},{"line_number":121,"context_line":"        live_in_progress \u003d fields.MigrationStatus.LIVE_MIGRATION_IN_PROGRESS"},{"line_number":122,"context_line":"        resize_in_progress \u003d ("},{"line_number":123,"context_line":"            fields.MigrationStatus.MIGRATION_RESIZE_IN_PROGRESS)"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f0e0f27_11973c93","line":120,"in_reply_to":"df140735_619c585d","updated":"2017-06-09 10:38:16.000000000","message":"The logic in DB layer was removed in https://review.openstack.org/#/c/430608/ because of Dan\u0027s comment.","commit_id":"0ee144c3673bdf268df52f9c418a3e50c8a006f3"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"823298b50429bd58d7c2cce93df954e5efda65fe","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        try:"},{"line_number":151,"context_line":"            migration \u003d self.compute_api.get_migration_by_id_and_instance("},{"line_number":152,"context_line":"                    context, id, server_id)"},{"line_number":153,"context_line":"        except exception.MigrationNotFoundForInstance:"},{"line_number":154,"context_line":"            msg \u003d _(\"In-progress migration %(id)s is not found for\""},{"line_number":155,"context_line":"                    \" server %(uuid)s.\") % {\"id\": id, \"uuid\": server_id}"}],"source_content_type":"text/x-python","patch_set":12,"id":"7f231b9d_3e8038c0","line":152,"range":{"start_line":152,"start_character":28,"end_line":152,"end_character":31},"updated":"2017-06-15 06:34:32.000000000","message":"Here. This is the migration ID.","commit_id":"dcde0b3b6188853ce79ce612a263a682634c2bfc"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d24398419fe5ba7e0b61328d02cc273cc6eac6ff","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        migration_type \u003d migration.get(\"migration_type\")"},{"line_number":169,"context_line":"        migration_status \u003d migration.get(\"status\")"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        self._check_migration_in_progress(migration_type, migration_status,"},{"line_number":172,"context_line":"                                          id, server_id)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        return {\u0027migration\u0027: output(migration, add_type\u003dsupport_v2_49)}"}],"source_content_type":"text/x-python","patch_set":12,"id":"7f231b9d_a0f93a81","line":171,"updated":"2017-06-12 08:08:11.000000000","message":"I\u0027m still thinking if we add one more filter (\u0027instance_uuid\u0027) to the db method https://review.openstack.org/#/c/430608/26/nova/db/sqlalchemy/api.py@4792\n\nThen we really needn\u0027t this method anymore.","commit_id":"dcde0b3b6188853ce79ce612a263a682634c2bfc"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"9872536c26c294059aeecbfe61bebb14711c5430","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        migration_type \u003d migration.get(\"migration_type\")"},{"line_number":169,"context_line":"        migration_status \u003d migration.get(\"status\")"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        self._check_migration_in_progress(migration_type, migration_status,"},{"line_number":172,"context_line":"                                          id, server_id)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        return {\u0027migration\u0027: output(migration, add_type\u003dsupport_v2_49)}"}],"source_content_type":"text/x-python","patch_set":12,"id":"7f231b9d_7f513162","line":171,"in_reply_to":"7f231b9d_1ec6ea49","updated":"2017-06-14 07:40:12.000000000","message":"Sorry, I mean we add one more filter (\u0027migraton_id\u0027), then we can get the correct migration from the DB without one more check again.","commit_id":"dcde0b3b6188853ce79ce612a263a682634c2bfc"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"aea431747d9999d9f3615c506efc3caf76d5b18d","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        migration_type \u003d migration.get(\"migration_type\")"},{"line_number":169,"context_line":"        migration_status \u003d migration.get(\"status\")"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        self._check_migration_in_progress(migration_type, migration_status,"},{"line_number":172,"context_line":"                                          id, server_id)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        return {\u0027migration\u0027: output(migration, add_type\u003dsupport_v2_49)}"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f201791_7f2e08a6","line":171,"in_reply_to":"7f231b9d_1ecfbc29","updated":"2017-06-22 06:19:12.000000000","message":"Yes, I see...\n\nI mean we can get use the SQL to filter out the correct migration obj directly. Then we needn\u0027t to query a migration obj by migration_id and check the whether is in-progress in python code.\n\nWe can make another db call like \u0027 migration_get_by_instance_and_statuses\u0027, not filter by instance_by, but filter by migration_id and statues.","commit_id":"dcde0b3b6188853ce79ce612a263a682634c2bfc"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"823298b50429bd58d7c2cce93df954e5efda65fe","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        migration_type \u003d migration.get(\"migration_type\")"},{"line_number":169,"context_line":"        migration_status \u003d migration.get(\"status\")"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        self._check_migration_in_progress(migration_type, migration_status,"},{"line_number":172,"context_line":"                                          id, server_id)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        return {\u0027migration\u0027: output(migration, add_type\u003dsupport_v2_49)}"}],"source_content_type":"text/x-python","patch_set":12,"id":"7f231b9d_1ecfbc29","line":171,"in_reply_to":"7f231b9d_7f513162","updated":"2017-06-15 06:34:32.000000000","message":"The migration object is got in line 151 with the migration ID.\nThe \u0027_check_migration_in_progress\u0027 method just utilizes the migration object to check whether it is in progress or not.(it does not access the DB)","commit_id":"dcde0b3b6188853ce79ce612a263a682634c2bfc"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"5c2fb3c92fad0ef5daa900426e7fc102bec33880","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        migration_type \u003d migration.get(\"migration_type\")"},{"line_number":169,"context_line":"        migration_status \u003d migration.get(\"status\")"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        self._check_migration_in_progress(migration_type, migration_status,"},{"line_number":172,"context_line":"                                          id, server_id)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        return {\u0027migration\u0027: output(migration, add_type\u003dsupport_v2_49)}"}],"source_content_type":"text/x-python","patch_set":12,"id":"7f231b9d_1ec6ea49","line":171,"in_reply_to":"7f231b9d_a0f93a81","updated":"2017-06-13 07:01:46.000000000","message":"\u0027migration_get_by_instance_and_statuses\u0027 db method has \u0027instance_uuid\u0027 argument.\nThis method is for check whether migration is in progress or not based on the status and the migration type.","commit_id":"dcde0b3b6188853ce79ce612a263a682634c2bfc"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fa32a6a46948496912de457b8d4ce8935cf1ebf2","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        \"updated_at\": migration.updated_at"},{"line_number":53,"context_line":"    }"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    if not support_v2_54:"},{"line_number":56,"context_line":"        migration_dict.update({\"status\": migration.status})"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    if support_v2_54 and migration.migration_type in fields.MigrationType.ALL:"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f4e5783_0f0b728e","line":55,"range":{"start_line":55,"start_character":4,"end_line":55,"end_character":25},"updated":"2017-10-11 14:56:43.000000000","message":"Please leave a comment, otherwise this is confusing.","commit_id":"38ae983c25754fb07876e02991886880071afead"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"d5cde87e474dbc963ed07df6fc44fa83d312ef34","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        \"updated_at\": migration.updated_at"},{"line_number":53,"context_line":"    }"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    if not support_v2_54:"},{"line_number":56,"context_line":"        migration_dict.update({\"status\": migration.status})"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    if support_v2_54 and migration.migration_type in fields.MigrationType.ALL:"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f4e5783_b054a8cb","line":55,"range":{"start_line":55,"start_character":4,"end_line":55,"end_character":25},"in_reply_to":"5f4e5783_0f0b728e","updated":"2017-10-12 13:32:32.000000000","message":"Done","commit_id":"38ae983c25754fb07876e02991886880071afead"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"aed7cbbf1405c3217ce3b39b6c87a0245adc4b39","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    if not support_v2_54:"},{"line_number":56,"context_line":"        migration_dict.update({\"status\": migration.status})"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    if support_v2_54 and migration.migration_type in fields.MigrationType.ALL:"},{"line_number":59,"context_line":"        migration_dict.update({\"type\": migration.migration_type})"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    return migration_dict"}],"source_content_type":"text/x-python","patch_set":33,"id":"7f515b1d_6aeaf6ac","line":58,"range":{"start_line":58,"start_character":21,"end_line":58,"end_character":77},"updated":"2017-10-04 12:19:06.000000000","message":"by looking again, should be return \u0027type\u0027 based on this condition. May be as of now those are all migration type but we never know if any new migration introduced. \nList returns all type of migration when it is not specified. \n\nIts better and consistent to return \u0027type\u0027 always.","commit_id":"38ae983c25754fb07876e02991886880071afead"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"1b70d31f2278fe863539c43ff928df737bc1d52f","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    if not support_v2_54:"},{"line_number":56,"context_line":"        migration_dict.update({\"status\": migration.status})"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    if support_v2_54 and migration.migration_type in fields.MigrationType.ALL:"},{"line_number":59,"context_line":"        migration_dict.update({\"type\": migration.migration_type})"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    return migration_dict"}],"source_content_type":"text/x-python","patch_set":33,"id":"7f515b1d_df175251","line":58,"range":{"start_line":58,"start_character":21,"end_line":58,"end_character":77},"in_reply_to":"7f515b1d_5f7c82b4","updated":"2017-10-05 05:48:27.000000000","message":"Clarity- How about either of the below approaches.","commit_id":"38ae983c25754fb07876e02991886880071afead"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"b3059a6d45502cad09776dc85723396b01e5b67b","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    if not support_v2_54:"},{"line_number":56,"context_line":"        migration_dict.update({\"status\": migration.status})"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    if support_v2_54 and migration.migration_type in fields.MigrationType.ALL:"},{"line_number":59,"context_line":"        migration_dict.update({\"type\": migration.migration_type})"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    return migration_dict"}],"source_content_type":"text/x-python","patch_set":33,"id":"7f515b1d_e029659b","line":58,"range":{"start_line":58,"start_character":21,"end_line":58,"end_character":77},"in_reply_to":"7f515b1d_6aeaf6ac","updated":"2017-10-04 13:48:36.000000000","message":"See Matt\u0027s comment in \nhttps://review.openstack.org/#/c/459483/5/nova/api/openstack/compute/server_migrations.py@60 .\nHe said a whitelist was required.","commit_id":"38ae983c25754fb07876e02991886880071afead"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"de8c5920acc38726e4181f0bacf89bc59adfe50d","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    if not support_v2_54:"},{"line_number":56,"context_line":"        migration_dict.update({\"status\": migration.status})"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    if support_v2_54 and migration.migration_type in fields.MigrationType.ALL:"},{"line_number":59,"context_line":"        migration_dict.update({\"type\": migration.migration_type})"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    return migration_dict"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f4e5783_4006e188","line":58,"range":{"start_line":58,"start_character":21,"end_line":58,"end_character":77},"in_reply_to":"7f515b1d_df175251","updated":"2017-10-11 11:26:08.000000000","message":"Come to think of it, the white list is not necessary because DB query result is filterd by migration types.\nThat is, migrations other than \u0027live-migration\u0027, \u0027migration\u0027, \u0027resize\u0027 and \u0027evacuation\u0027 will not be included in the DB query results.\n\nhttps://review.openstack.org/#/c/430608/48/nova/db/sqlalchemy/api.py@4896\nhttps://review.openstack.org/#/c/430608/48/nova/db/sqlalchemy/api.py@4918","commit_id":"38ae983c25754fb07876e02991886880071afead"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"141592d2a98143eeb8cf8e0869c9f09809f29daf","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    if not support_v2_54:"},{"line_number":56,"context_line":"        migration_dict.update({\"status\": migration.status})"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    if support_v2_54 and migration.migration_type in fields.MigrationType.ALL:"},{"line_number":59,"context_line":"        migration_dict.update({\"type\": migration.migration_type})"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    return migration_dict"}],"source_content_type":"text/x-python","patch_set":33,"id":"7f515b1d_5f7c82b4","line":58,"range":{"start_line":58,"start_character":21,"end_line":58,"end_character":77},"in_reply_to":"7f515b1d_e029659b","updated":"2017-10-05 05:43:43.000000000","message":"yea my main concern is presence of \u0027type\u0027 in some of the element in list. \nWhen we have new migration type and list return that migration type also. we will have response with list where some element has \u0027type\u0027 and some does not.\n\nIf it is a complete options attribute in list, i mean either present/absent in all elements of list, then it could have been ok.\nBut missing it in some of the element makes API little bit  complex and people will be confused. \n\nHow about below 2 approach:\n1. do not return any other migration not in whitelist\n2. return \u0027type\u0027 as None or Unknown for new migration type which are not in whitelist.","commit_id":"38ae983c25754fb07876e02991886880071afead"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fa32a6a46948496912de457b8d4ce8935cf1ebf2","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        # consistency with other API, check it before get migrations."},{"line_number":106,"context_line":"        common.get_instance(self.compute_api, context, server_id)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        support_v2_54 \u003d api_version_request.is_supported("},{"line_number":109,"context_line":"            req, min_version\u003d\u00272.54\u0027)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        migration_type \u003d fields.MigrationType.LIVE_MIGRATION"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f4e5783_2f8aae1a","line":108,"range":{"start_line":108,"start_character":8,"end_line":108,"end_character":21},"updated":"2017-10-11 14:56:43.000000000","message":"This means I\u0027m going to have to lookup what 2.54 is every time I see this code. Can we give this a more descriptive name? Or at least leave a comment in here about the flag enables?","commit_id":"38ae983c25754fb07876e02991886880071afead"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"292448ea332654bd2462b90cd57d1ae5fb67d901","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        # consistency with other API, check it before get migrations."},{"line_number":106,"context_line":"        common.get_instance(self.compute_api, context, server_id)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        support_v2_54 \u003d api_version_request.is_supported("},{"line_number":109,"context_line":"            req, min_version\u003d\u00272.54\u0027)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        migration_type \u003d fields.MigrationType.LIVE_MIGRATION"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f4e5783_e5f27706","line":108,"range":{"start_line":108,"start_character":8,"end_line":108,"end_character":21},"in_reply_to":"5f4e5783_2f8aae1a","updated":"2017-10-11 15:03:26.000000000","message":"\u003e This means I\u0027m going to have to lookup what 2.54 is every time I\n \u003e see this code. Can we give this a more descriptive name? Or at\n \u003e least leave a comment in here about the flag enables?\n\n\"Or at least leave a comment in here about *what* the flag enables?\"","commit_id":"38ae983c25754fb07876e02991886880071afead"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"d5cde87e474dbc963ed07df6fc44fa83d312ef34","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        # consistency with other API, check it before get migrations."},{"line_number":106,"context_line":"        common.get_instance(self.compute_api, context, server_id)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        support_v2_54 \u003d api_version_request.is_supported("},{"line_number":109,"context_line":"            req, min_version\u003d\u00272.54\u0027)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        migration_type \u003d fields.MigrationType.LIVE_MIGRATION"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f4e5783_706070a6","line":108,"range":{"start_line":108,"start_character":8,"end_line":108,"end_character":21},"in_reply_to":"5f4e5783_e5f27706","updated":"2017-10-12 13:32:32.000000000","message":"Done","commit_id":"38ae983c25754fb07876e02991886880071afead"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fa32a6a46948496912de457b8d4ce8935cf1ebf2","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        try:"},{"line_number":133,"context_line":"            migration \u003d self.compute_api.\\"},{"line_number":134,"context_line":"                get_migration_in_progress_by_id_and_instance(context, id,"},{"line_number":135,"context_line":"                                                             server_id)"},{"line_number":136,"context_line":"        except exception.MigrationNotFoundOrNotInProgress:"},{"line_number":137,"context_line":"            msg \u003d _(\"The migration %(id)s is not found for server %(uuid)s, \""}],"source_content_type":"text/x-python","patch_set":33,"id":"5f4e5783_45194b77","line":134,"range":{"start_line":134,"start_character":16,"end_line":134,"end_character":60},"updated":"2017-10-11 14:56:43.000000000","message":"I don\u0027t really see how this is necessary at all, given my comments in the DB API change below this. If we\u0027re getting the migration by the id primary key, why do we need to do all of the type and status filtering there? We\u0027re baking too much API behavior logic into the DB API in other words. Why not just get the migration object by id and then do the in-progress validation below based on type and microversion? Then this logic is isolated to the REST API controller code rather than buried down in the DB API code.","commit_id":"38ae983c25754fb07876e02991886880071afead"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"d5cde87e474dbc963ed07df6fc44fa83d312ef34","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        try:"},{"line_number":133,"context_line":"            migration \u003d self.compute_api.\\"},{"line_number":134,"context_line":"                get_migration_in_progress_by_id_and_instance(context, id,"},{"line_number":135,"context_line":"                                                             server_id)"},{"line_number":136,"context_line":"        except exception.MigrationNotFoundOrNotInProgress:"},{"line_number":137,"context_line":"            msg \u003d _(\"The migration %(id)s is not found for server %(uuid)s, \""}],"source_content_type":"text/x-python","patch_set":33,"id":"5f4e5783_10e01cfa","line":134,"range":{"start_line":134,"start_character":16,"end_line":134,"end_character":60},"in_reply_to":"5f4e5783_45194b77","updated":"2017-10-12 13:32:32.000000000","message":"It is Alex\u0027s recommendation.\n\nSee https://review.openstack.org/#/c/459483/12/nova/api/openstack/compute/server_migrations.py@171","commit_id":"38ae983c25754fb07876e02991886880071afead"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fa32a6a46948496912de457b8d4ce8935cf1ebf2","unresolved":false,"context_lines":[{"line_number":138,"context_line":"                    \"or not in progress.\") % {\"id\": id, \"uuid\": server_id}"},{"line_number":139,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        support_v2_54 \u003d api_version_request.is_supported("},{"line_number":142,"context_line":"            req, min_version\u003d\u00272.54\u0027)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        if not support_v2_54:"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f4e5783_4a7dd8af","line":141,"updated":"2017-10-11 14:56:43.000000000","message":"Add a comment by this code for what this microversion means.","commit_id":"38ae983c25754fb07876e02991886880071afead"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"d5cde87e474dbc963ed07df6fc44fa83d312ef34","unresolved":false,"context_lines":[{"line_number":138,"context_line":"                    \"or not in progress.\") % {\"id\": id, \"uuid\": server_id}"},{"line_number":139,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        support_v2_54 \u003d api_version_request.is_supported("},{"line_number":142,"context_line":"            req, min_version\u003d\u00272.54\u0027)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        if not support_v2_54:"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f4e5783_105dbce8","line":141,"in_reply_to":"5f4e5783_4a7dd8af","updated":"2017-10-12 13:32:32.000000000","message":"Done","commit_id":"38ae983c25754fb07876e02991886880071afead"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"92ac4a9a5205d4f731421a1c08bcda3e6df026ef","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from nova.policies import servers_migrations as sm_policies"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"def output(migration, support_v2_59\u003dFalse):"},{"line_number":31,"context_line":"    \"\"\"Returns the desired output of the API from an object."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    From a Migrations\u0027s object this method returns the primitive"}],"source_content_type":"text/x-python","patch_set":56,"id":"9f91af0f_ec433212","line":30,"range":{"start_line":30,"start_character":22,"end_line":30,"end_character":35},"updated":"2018-01-08 04:12:12.000000000","message":"We can name it as \u0027include_migration_type\u0027, that let people understand what is the parameter for","commit_id":"dbdcc466c679f3a3a718b35e703017f0c7f09f70"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"318924d5f3bf1730e7c8b8a635d7da5a3c97c125","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from nova.policies import servers_migrations as sm_policies"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"def output(migration, support_v2_59\u003dFalse):"},{"line_number":31,"context_line":"    \"\"\"Returns the desired output of the API from an object."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    From a Migrations\u0027s object this method returns the primitive"}],"source_content_type":"text/x-python","patch_set":56,"id":"9f91af0f_20c4a490","line":30,"range":{"start_line":30,"start_character":22,"end_line":30,"end_character":35},"in_reply_to":"9f91af0f_ec433212","updated":"2018-01-09 00:55:55.000000000","message":"Done","commit_id":"dbdcc466c679f3a3a718b35e703017f0c7f09f70"}],"nova/compute/api.py":[{"author":{"_account_id":1011,"name":"Tushar Patil","email":"tushar.vitthal.patil@gmail.com","username":"tpatil"},"change_message_id":"3ceff459ebec355c8832887a8362e1557690baf8","unresolved":false,"context_lines":[{"line_number":4021,"context_line":"        # compute to double check and avoid possible race condition."},{"line_number":4022,"context_line":"        migration \u003d objects.Migration.get_by_id_and_instance("},{"line_number":4023,"context_line":"            context, migration_id, instance.uuid)"},{"line_number":4024,"context_line":"        if migration.migration_type !\u003d \u0027live-migration\u0027:"},{"line_number":4025,"context_line":"            raise exception.InvalidMigrationType("},{"line_number":4026,"context_line":"                migration_type\u003dmigration.migration_type)"},{"line_number":4027,"context_line":"        if migration.status !\u003d \u0027running\u0027:"},{"line_number":4028,"context_line":"            raise exception.InvalidMigrationState(migration_id\u003dmigration_id,"},{"line_number":4029,"context_line":"                                                  instance_uuid\u003dinstance.uuid,"}],"source_content_type":"text/x-python","patch_set":3,"id":"ff0f0b1f_1aa040f4","line":4026,"range":{"start_line":4024,"start_character":8,"end_line":4026,"end_character":56},"updated":"2017-05-18 23:26:24.000000000","message":"This fix is irrelevant to your changes. Would you please submit a separate patch to fix this issue?","commit_id":"492e85daac5f92b7d2cc5cce374694be572cef6a"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"a3ffc54cf56cb189f86183ad2d2d7d8e66f0bb75","unresolved":false,"context_lines":[{"line_number":4021,"context_line":"        # compute to double check and avoid possible race condition."},{"line_number":4022,"context_line":"        migration \u003d objects.Migration.get_by_id_and_instance("},{"line_number":4023,"context_line":"            context, migration_id, instance.uuid)"},{"line_number":4024,"context_line":"        if migration.migration_type !\u003d \u0027live-migration\u0027:"},{"line_number":4025,"context_line":"            raise exception.InvalidMigrationType("},{"line_number":4026,"context_line":"                migration_type\u003dmigration.migration_type)"},{"line_number":4027,"context_line":"        if migration.status !\u003d \u0027running\u0027:"},{"line_number":4028,"context_line":"            raise exception.InvalidMigrationState(migration_id\u003dmigration_id,"},{"line_number":4029,"context_line":"                                                  instance_uuid\u003dinstance.uuid,"}],"source_content_type":"text/x-python","patch_set":3,"id":"ff0f0b1f_97465e7c","line":4026,"range":{"start_line":4024,"start_character":8,"end_line":4026,"end_character":56},"in_reply_to":"ff0f0b1f_1aa040f4","updated":"2017-05-19 07:37:05.000000000","message":"It is included in the spec.\nSee https://specs.openstack.org/openstack/nova-specs/specs/pike/approved/list-show-all-server-migration-types.html#rest-api-impact\n\n\u003e * POST /servers/{server_id}/migrations/{migration_id}/action\n\u003e  It is a “Force Migration Complete Action” API. The migration is not a ‘live-migration’, it returns 400 error instead of 404 error.\n\u003e * DELETE /servers/{server_id}/migrations/{migration_id}\n\u003e  The migration is not a ‘live-migration’, it returns 400 error. It is a current behavior. (It is not changed.)","commit_id":"492e85daac5f92b7d2cc5cce374694be572cef6a"},{"author":{"_account_id":1011,"name":"Tushar Patil","email":"tushar.vitthal.patil@gmail.com","username":"tpatil"},"change_message_id":"3ceff459ebec355c8832887a8362e1557690baf8","unresolved":false,"context_lines":[{"line_number":4052,"context_line":"        LOG.debug(\"Going to cancel live migration %s\","},{"line_number":4053,"context_line":"                  migration.id, instance\u003dinstance)"},{"line_number":4054,"context_line":""},{"line_number":4055,"context_line":"        if migration.migration_type !\u003d \u0027live-migration\u0027:"},{"line_number":4056,"context_line":"            raise exception.InvalidMigrationType("},{"line_number":4057,"context_line":"                migration_type\u003dmigration.migration_type)"},{"line_number":4058,"context_line":"        if migration.status !\u003d \u0027running\u0027:"},{"line_number":4059,"context_line":"            raise exception.InvalidMigrationState(migration_id\u003dmigration_id,"},{"line_number":4060,"context_line":"                    instance_uuid\u003dinstance.uuid,"}],"source_content_type":"text/x-python","patch_set":3,"id":"ff0f0b1f_1a896074","line":4057,"range":{"start_line":4055,"start_character":8,"end_line":4057,"end_character":56},"updated":"2017-05-18 23:26:24.000000000","message":"ditto","commit_id":"492e85daac5f92b7d2cc5cce374694be572cef6a"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"a3ffc54cf56cb189f86183ad2d2d7d8e66f0bb75","unresolved":false,"context_lines":[{"line_number":4052,"context_line":"        LOG.debug(\"Going to cancel live migration %s\","},{"line_number":4053,"context_line":"                  migration.id, instance\u003dinstance)"},{"line_number":4054,"context_line":""},{"line_number":4055,"context_line":"        if migration.migration_type !\u003d \u0027live-migration\u0027:"},{"line_number":4056,"context_line":"            raise exception.InvalidMigrationType("},{"line_number":4057,"context_line":"                migration_type\u003dmigration.migration_type)"},{"line_number":4058,"context_line":"        if migration.status !\u003d \u0027running\u0027:"},{"line_number":4059,"context_line":"            raise exception.InvalidMigrationState(migration_id\u003dmigration_id,"},{"line_number":4060,"context_line":"                    instance_uuid\u003dinstance.uuid,"}],"source_content_type":"text/x-python","patch_set":3,"id":"ff0f0b1f_d71a967b","line":4057,"range":{"start_line":4055,"start_character":8,"end_line":4057,"end_character":56},"in_reply_to":"ff0f0b1f_1a896074","updated":"2017-05-19 07:37:05.000000000","message":"ditto","commit_id":"492e85daac5f92b7d2cc5cce374694be572cef6a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d39b0e39d32fb88a2d3cc4f2ad3fb5871cbad0ed","unresolved":false,"context_lines":[{"line_number":4021,"context_line":"        # compute to double check and avoid possible race condition."},{"line_number":4022,"context_line":"        migration \u003d objects.Migration.get_by_id_and_instance("},{"line_number":4023,"context_line":"            context, migration_id, instance.uuid)"},{"line_number":4024,"context_line":"        if migration.migration_type !\u003d \u0027live-migration\u0027:"},{"line_number":4025,"context_line":"            raise exception.InvalidMigrationType("},{"line_number":4026,"context_line":"                migration_type\u003dmigration.migration_type)"},{"line_number":4027,"context_line":"        if migration.status !\u003d \u0027running\u0027:"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff0f0b1f_f12e8790","line":4024,"range":{"start_line":4024,"start_character":39,"end_line":4024,"end_character":56},"updated":"2017-05-22 14:54:36.000000000","message":"nit: I\u0027d prefer to see the MigrationType field enum used here (and below).","commit_id":"910699e6b2c3a8c433f32df659ce84d27b6cb055"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"c636b304964d0d67e81357cc3df216be3931f7c7","unresolved":false,"context_lines":[{"line_number":4021,"context_line":"        # compute to double check and avoid possible race condition."},{"line_number":4022,"context_line":"        migration \u003d objects.Migration.get_by_id_and_instance("},{"line_number":4023,"context_line":"            context, migration_id, instance.uuid)"},{"line_number":4024,"context_line":"        if migration.migration_type !\u003d \u0027live-migration\u0027:"},{"line_number":4025,"context_line":"            raise exception.InvalidMigrationType("},{"line_number":4026,"context_line":"                migration_type\u003dmigration.migration_type)"},{"line_number":4027,"context_line":"        if migration.status !\u003d \u0027running\u0027:"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff0f0b1f_46c9dea9","line":4024,"range":{"start_line":4024,"start_character":39,"end_line":4024,"end_character":56},"in_reply_to":"ff0f0b1f_f12e8790","updated":"2017-05-23 07:46:41.000000000","message":"Done","commit_id":"910699e6b2c3a8c433f32df659ce84d27b6cb055"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"f4a09c9c114e64b198c3ac616a8d17224573a38b","unresolved":false,"context_lines":[{"line_number":4027,"context_line":"        # compute to double check and avoid possible race condition."},{"line_number":4028,"context_line":"        migration \u003d objects.Migration.get_by_id_and_instance("},{"line_number":4029,"context_line":"            context, migration_id, instance.uuid)"},{"line_number":4030,"context_line":"        if migration.status !\u003d \u0027running\u0027:"},{"line_number":4031,"context_line":"            raise exception.InvalidMigrationState(migration_id\u003dmigration_id,"},{"line_number":4032,"context_line":"                                                  instance_uuid\u003dinstance.uuid,"},{"line_number":4033,"context_line":"                                                  state\u003dmigration.status,"}],"source_content_type":"text/x-python","patch_set":11,"id":"7f231b9d_b5662151","side":"PARENT","line":4030,"range":{"start_line":4030,"start_character":8,"end_line":4030,"end_character":41},"updated":"2017-06-12 04:58:33.000000000","message":"Here","commit_id":"6358254b1f5380f234ca0f17c2a20469da6e0c75"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"13f6856ef55e7fc40c9876177b7508a7a93a6ac5","unresolved":false,"context_lines":[{"line_number":4029,"context_line":"            context, migration_id, instance.uuid)"},{"line_number":4030,"context_line":"        if migration.migration_type !\u003d fields_obj.MigrationType.LIVE_MIGRATION:"},{"line_number":4031,"context_line":"            raise exception.InvalidMigrationType("},{"line_number":4032,"context_line":"                migration_type\u003dmigration.migration_type)"},{"line_number":4033,"context_line":"        if migration.status !\u003d \u0027running\u0027:"},{"line_number":4034,"context_line":"            raise exception.InvalidMigrationState(migration_id\u003dmigration_id,"},{"line_number":4035,"context_line":"                                                  instance_uuid\u003dinstance.uuid,"}],"source_content_type":"text/x-python","patch_set":11,"id":"df140735_e11ce8c2","line":4032,"updated":"2017-06-07 08:08:52.000000000","message":"Is it a bug for current API? I\u0027m curious what the API returned when the request isn\u0027t for live-migration.","commit_id":"0ee144c3673bdf268df52f9c418a3e50c8a006f3"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"f4a09c9c114e64b198c3ac616a8d17224573a38b","unresolved":false,"context_lines":[{"line_number":4029,"context_line":"            context, migration_id, instance.uuid)"},{"line_number":4030,"context_line":"        if migration.migration_type !\u003d fields_obj.MigrationType.LIVE_MIGRATION:"},{"line_number":4031,"context_line":"            raise exception.InvalidMigrationType("},{"line_number":4032,"context_line":"                migration_type\u003dmigration.migration_type)"},{"line_number":4033,"context_line":"        if migration.status !\u003d \u0027running\u0027:"},{"line_number":4034,"context_line":"            raise exception.InvalidMigrationState(migration_id\u003dmigration_id,"},{"line_number":4035,"context_line":"                                                  instance_uuid\u003dinstance.uuid,"}],"source_content_type":"text/x-python","patch_set":11,"id":"7f231b9d_d5619d3b","line":4032,"in_reply_to":"df140735_49fe0daf","updated":"2017-06-12 04:58:33.000000000","message":"\u003e Is it a bug for current API?\n\nNo.\nIn current(old) code, it raises InvalidMigrationState in line 4030 if the migration type in not \u0027live-migration\u0027 because other migrations (resize, cold migration and evacuation) do not have \u0027running\u0027 state.\nThen InvalidMigrationState becomes HTTPBadRequest(400) Error.\n\nI added this check to clarify the case an error occurs.","commit_id":"0ee144c3673bdf268df52f9c418a3e50c8a006f3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0b3dfdae99121b183cdb6b5acf131242480b3a75","unresolved":false,"context_lines":[{"line_number":4029,"context_line":"            context, migration_id, instance.uuid)"},{"line_number":4030,"context_line":"        if migration.migration_type !\u003d fields_obj.MigrationType.LIVE_MIGRATION:"},{"line_number":4031,"context_line":"            raise exception.InvalidMigrationType("},{"line_number":4032,"context_line":"                migration_type\u003dmigration.migration_type)"},{"line_number":4033,"context_line":"        if migration.status !\u003d \u0027running\u0027:"},{"line_number":4034,"context_line":"            raise exception.InvalidMigrationState(migration_id\u003dmigration_id,"},{"line_number":4035,"context_line":"                                                  instance_uuid\u003dinstance.uuid,"}],"source_content_type":"text/x-python","patch_set":11,"id":"df140735_49fe0daf","line":4032,"in_reply_to":"df140735_e11ce8c2","updated":"2017-06-07 13:46:54.000000000","message":"I think this is because before this change, and with a lower microversion than the new one, the REST API controller code filtered to just live migrations before calling this method:\n\nhttps://review.openstack.org/#/c/459483/11/nova/api/openstack/compute/server_migrations.py@a97\n\nSince this change adds a new microversion to allow listing more than just live migrations, this code now has to validate that what\u0027s actually passed in is a live migration, and not something like a resize.","commit_id":"0ee144c3673bdf268df52f9c418a3e50c8a006f3"}],"nova/exception.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d39b0e39d32fb88a2d3cc4f2ad3fb5871cbad0ed","unresolved":false,"context_lines":[{"line_number":2168,"context_line":""},{"line_number":2169,"context_line":""},{"line_number":2170,"context_line":"class InvalidMigrationType(Invalid):"},{"line_number":2171,"context_line":"    msg_fmt \u003d _(\"Migration type is %(migration_type)s, not \u0027live-migration\u0027\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff0f0b1f_bf0b3b7b","line":2171,"range":{"start_line":2171,"start_character":17,"end_line":2171,"end_character":75},"updated":"2017-05-22 14:54:36.000000000","message":"I think I would prefer to make this more generic, so something like, \"Unsupported operation for migration type: %(migration_type)s\".","commit_id":"910699e6b2c3a8c433f32df659ce84d27b6cb055"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"c636b304964d0d67e81357cc3df216be3931f7c7","unresolved":false,"context_lines":[{"line_number":2168,"context_line":""},{"line_number":2169,"context_line":""},{"line_number":2170,"context_line":"class InvalidMigrationType(Invalid):"},{"line_number":2171,"context_line":"    msg_fmt \u003d _(\"Migration type is %(migration_type)s, not \u0027live-migration\u0027\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff0f0b1f_26ceeab3","line":2171,"range":{"start_line":2171,"start_character":17,"end_line":2171,"end_character":75},"in_reply_to":"ff0f0b1f_bf0b3b7b","updated":"2017-05-23 07:46:41.000000000","message":"Done","commit_id":"910699e6b2c3a8c433f32df659ce84d27b6cb055"}],"nova/tests/functional/api/client.py":[{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"120550395aa88fa97515e1a2a6cb39be476c82c6","unresolved":false,"context_lines":[{"line_number":470,"context_line":""},{"line_number":471,"context_line":"    def get_active_migrations(self, server_id, want_status\u003dFalse):"},{"line_number":472,"context_line":"        if want_status:"},{"line_number":473,"context_line":"            # Starting from microversion 2.59, the migration status is not"},{"line_number":474,"context_line":"            # returned. So if needs the migration status, use microversion 2.58"},{"line_number":475,"context_line":"            orig_microversion \u003d self.microversion"},{"line_number":476,"context_line":"            self.microversion \u003d \u00272.58\u0027"},{"line_number":477,"context_line":"        migrations \u003d self.api_get(\u0027/servers/%s/migrations\u0027 %"}],"source_content_type":"text/x-python","patch_set":53,"id":"df87a7cf_d7be0464","line":474,"range":{"start_line":473,"start_character":0,"end_line":474,"end_character":79},"updated":"2017-12-18 09:00:31.000000000","message":"emm... If we add some new fields or change other behavior in \u0027/servers/%s/migrations\u0027 in the future. It seems the results are still stay at the behavior of 2.58 migrations?\n\nIMO, if we really want to show status, maybe we need first get status and then extend result(based on latest API rather than 2.58 API), but what do you think?","commit_id":"8996293277aa9d754089a92074dab121635fa99f"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"40dadb7061f5f27dae931e29c0bc0cdda91020f5","unresolved":false,"context_lines":[{"line_number":470,"context_line":""},{"line_number":471,"context_line":"    def get_active_migrations(self, server_id, want_status\u003dFalse):"},{"line_number":472,"context_line":"        if want_status:"},{"line_number":473,"context_line":"            # Starting from microversion 2.59, the migration status is not"},{"line_number":474,"context_line":"            # returned. So if needs the migration status, use microversion 2.58"},{"line_number":475,"context_line":"            orig_microversion \u003d self.microversion"},{"line_number":476,"context_line":"            self.microversion \u003d \u00272.58\u0027"},{"line_number":477,"context_line":"        migrations \u003d self.api_get(\u0027/servers/%s/migrations\u0027 %"}],"source_content_type":"text/x-python","patch_set":53,"id":"df87a7cf_e8af9027","line":474,"range":{"start_line":473,"start_character":0,"end_line":474,"end_character":79},"in_reply_to":"df87a7cf_d7be0464","updated":"2017-12-19 02:34:18.000000000","message":"If \u0027want_status\u0027 is false, the microversion is set to self.microversion. In that case, if self.microversion is latest, the latest microversion is used.\nThe microversion 2.58 is only used when \u0027want_status\u0027 is True.","commit_id":"8996293277aa9d754089a92074dab121635fa99f"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"2aff5016a050935b7d43ef8410bb416ea132b2dc","unresolved":false,"context_lines":[{"line_number":470,"context_line":""},{"line_number":471,"context_line":"    def get_active_migrations(self, server_id, want_status\u003dFalse):"},{"line_number":472,"context_line":"        if want_status:"},{"line_number":473,"context_line":"            # Starting from microversion 2.59, the migration status is not"},{"line_number":474,"context_line":"            # returned. So if needs the migration status, use microversion 2.58"},{"line_number":475,"context_line":"            orig_microversion \u003d self.microversion"},{"line_number":476,"context_line":"            self.microversion \u003d \u00272.58\u0027"},{"line_number":477,"context_line":"        migrations \u003d self.api_get(\u0027/servers/%s/migrations\u0027 %"}],"source_content_type":"text/x-python","patch_set":53,"id":"df87a7cf_ed423a68","line":474,"range":{"start_line":473,"start_character":0,"end_line":474,"end_character":79},"in_reply_to":"df87a7cf_e8af9027","updated":"2017-12-19 09:34:03.000000000","message":"My original mean is: if we just return 2.58 migration when (want_status\u003dTrue and any microversion \u003e 2.58), maybe will lose some migrations fields after 2.58 added, but we wanted.\n\nBut now I think this method is just have some special cases for specific use and have detail notes. So, I think it\u0027s ok to me.","commit_id":"8996293277aa9d754089a92074dab121635fa99f"}],"nova/tests/functional/api_sample_tests/test_server_migrations.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"13f6856ef55e7fc40c9876177b7508a7a93a6ac5","unresolved":false,"context_lines":[{"line_number":220,"context_line":"    microversion \u003d \u00272.49\u0027"},{"line_number":221,"context_line":"    scenarios \u003d [(\u0027v2_49\u0027, {\u0027api_major_version\u0027: \u0027v2.1\u0027})]"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    fake_migrations \u003d ["},{"line_number":224,"context_line":"        {"},{"line_number":225,"context_line":"            \u0027source_node\u0027: \u0027node1\u0027,"},{"line_number":226,"context_line":"            \u0027dest_node\u0027: \u0027node2\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"df140735_a198301b","line":223,"updated":"2017-06-07 08:08:52.000000000","message":"So the API samples https://review.openstack.org/#/c/459483/11/nova/tests/functional/api_sample_tests/api_samples/server-migrations/v2.49/migrations-index.json.tpl should include two entries?  Since there are two migration objs with status \u0027migrating\u0027\n\nBut why there is only one?","commit_id":"0ee144c3673bdf268df52f9c418a3e50c8a006f3"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"013a01c5f2f1b12bbeaf5518ad913f9c826dfd06","unresolved":false,"context_lines":[{"line_number":220,"context_line":"    microversion \u003d \u00272.49\u0027"},{"line_number":221,"context_line":"    scenarios \u003d [(\u0027v2_49\u0027, {\u0027api_major_version\u0027: \u0027v2.1\u0027})]"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    fake_migrations \u003d ["},{"line_number":224,"context_line":"        {"},{"line_number":225,"context_line":"            \u0027source_node\u0027: \u0027node1\u0027,"},{"line_number":226,"context_line":"            \u0027dest_node\u0027: \u0027node2\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f0e0f27_d16c249e","line":223,"in_reply_to":"df140735_a198301b","updated":"2017-06-09 10:38:16.000000000","message":"No, it should not.\nIn this class, there are two migrations but they have different instance UUIDs.","commit_id":"0ee144c3673bdf268df52f9c418a3e50c8a006f3"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"13f6856ef55e7fc40c9876177b7508a7a93a6ac5","unresolved":false,"context_lines":[{"line_number":266,"context_line":"    ]"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"    def setUp(self):"},{"line_number":269,"context_line":"        super(ServerMigrationsSamplesJsonTestV2_49, self).setUp()"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"    def test_get_migration(self):"},{"line_number":272,"context_line":"        response \u003d self._do_get(\u0027servers/%s/migrations/%s\u0027 %"}],"source_content_type":"text/x-python","patch_set":11,"id":"df140735_816becef","line":269,"updated":"2017-06-07 08:08:52.000000000","message":"you do nothing in this method, so you can remove it.","commit_id":"0ee144c3673bdf268df52f9c418a3e50c8a006f3"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"013a01c5f2f1b12bbeaf5518ad913f9c826dfd06","unresolved":false,"context_lines":[{"line_number":266,"context_line":"    ]"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"    def setUp(self):"},{"line_number":269,"context_line":"        super(ServerMigrationsSamplesJsonTestV2_49, self).setUp()"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"    def test_get_migration(self):"},{"line_number":272,"context_line":"        response \u003d self._do_get(\u0027servers/%s/migrations/%s\u0027 %"}],"source_content_type":"text/x-python","patch_set":11,"id":"9f0e0f27_7a05357a","line":269,"in_reply_to":"df140735_816becef","updated":"2017-06-09 10:38:16.000000000","message":"Done","commit_id":"0ee144c3673bdf268df52f9c418a3e50c8a006f3"}],"nova/tests/unit/api/openstack/compute/test_server_migrations.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"be7788d44b5f88b2ee621792d50099ec4fa4065f","unresolved":false,"context_lines":[{"line_number":318,"context_line":"                          \u0027migration-id\u0027)"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"class ServerMigrationsTestsV254(ServerMigrationsTestsV21):"},{"line_number":322,"context_line":"    wsgi_api_version \u003d \u00272.54\u0027"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    def setUp(self):"},{"line_number":325,"context_line":"        super(ServerMigrationsTestsV254, self).setUp()"}],"source_content_type":"text/x-python","patch_set":30,"id":"9f436f4f_2cbf33d1","line":322,"range":{"start_line":321,"start_character":0,"end_line":322,"end_character":29},"updated":"2017-08-22 03:30:36.000000000","message":"can we have some negative tests about 400 when passing type before 2.54","commit_id":"21cbc70706d833061dfe64e83fb33335efd7aaa5"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"e25ac8722c422cb543b17c4824d3f51153923bf9","unresolved":false,"context_lines":[{"line_number":318,"context_line":"                          \u0027migration-id\u0027)"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"class ServerMigrationsTestsV254(ServerMigrationsTestsV21):"},{"line_number":322,"context_line":"    wsgi_api_version \u003d \u00272.54\u0027"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    def setUp(self):"},{"line_number":325,"context_line":"        super(ServerMigrationsTestsV254, self).setUp()"}],"source_content_type":"text/x-python","patch_set":30,"id":"7f287b81_50f642d9","line":322,"range":{"start_line":321,"start_character":0,"end_line":322,"end_character":29},"in_reply_to":"9f436f4f_2cbf33d1","updated":"2017-09-08 01:21:01.000000000","message":"Before 2.54, the query parameter is just ignored.\nSo IMO, the test need not be added.","commit_id":"21cbc70706d833061dfe64e83fb33335efd7aaa5"}]}
