)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ee28539c9602fb4bf782721e20f0bd122c5d5e32","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch modifies compute API, DB API, migration object"},{"line_number":10,"context_line":"to list/show in-progress migration(s) of all migration types"},{"line_number":11,"context_line":"(\u0027migration\u0027, \u0027resize\u0027 and \u0027evacuation\u0027) in server migrations APIs."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"A subsequent patch modifies APIs and compute API."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":48,"id":"5f4e5783_8aabd0d4","line":11,"range":{"start_line":11,"start_character":0,"end_line":11,"end_character":40},"updated":"2017-10-11 14:42:06.000000000","message":"nit: you\u0027re missing \u0027live-migration\u0027 in this list.","commit_id":"218d42a18ad62ab88cda2385a6d7b1c4d984f090"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"4579c9185f39df6a9ab40c6d8cead05ffa27e92f","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch modifies compute API, DB API, migration object"},{"line_number":10,"context_line":"to list/show in-progress migration(s) of all migration types"},{"line_number":11,"context_line":"(\u0027migration\u0027, \u0027resize\u0027 and \u0027evacuation\u0027) in server migrations APIs."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"A subsequent patch modifies APIs and compute API."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":48,"id":"5f4e5783_01a334a0","line":11,"range":{"start_line":11,"start_character":0,"end_line":11,"end_character":40},"in_reply_to":"5f4e5783_8aabd0d4","updated":"2017-10-12 06:21:17.000000000","message":"Done","commit_id":"218d42a18ad62ab88cda2385a6d7b1c4d984f090"}],"api-ref/source/parameters.yaml":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"c2691ae1e4c17a29d14406a75969809893596dd1","unresolved":false,"context_lines":[{"line_number":575,"context_line":"  in: query"},{"line_number":576,"context_line":"  required: false"},{"line_number":577,"context_line":"  type: string"},{"line_number":578,"context_line":"migration_type:"},{"line_number":579,"context_line":"  description: |"},{"line_number":580,"context_line":"    The type of migration to filter."},{"line_number":581,"context_line":"  in: query"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"9a30ddce_c89a79c5","line":578,"range":{"start_line":578,"start_character":0,"end_line":578,"end_character":14},"updated":"2017-03-07 12:12:08.000000000","message":"Here","commit_id":"d0ab14a102c1393b3e494dbb79a38750421b6781"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"b83046ebf1f3f75fc34f8597212ce9effc8ada44","unresolved":false,"context_lines":[{"line_number":581,"context_line":"  in: query"},{"line_number":582,"context_line":"  required: false"},{"line_number":583,"context_line":"  type: string"},{"line_number":584,"context_line":"migration_type_2_43:"},{"line_number":585,"context_line":"  description: |"},{"line_number":586,"context_line":"    The type of migration to filter."},{"line_number":587,"context_line":"  in: query"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"9a30ddce_3cd77224","line":584,"range":{"start_line":584,"start_character":15,"end_line":584,"end_character":18},"updated":"2017-03-09 09:27:13.000000000","message":"Yes, I mean name migration_type_2_43 it\u0027s not the best IMO.\nI proposed to change name for os-migrations (line 578) to something like os_migrations_migration_type and use just migration_type here. But I\u0027m ok with current solution.","commit_id":"d0ab14a102c1393b3e494dbb79a38750421b6781"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"bf7891333e51409f834b23d283205a9d8c1a9dbb","unresolved":false,"context_lines":[{"line_number":581,"context_line":"  in: query"},{"line_number":582,"context_line":"  required: false"},{"line_number":583,"context_line":"  type: string"},{"line_number":584,"context_line":"migration_type_2_43:"},{"line_number":585,"context_line":"  description: |"},{"line_number":586,"context_line":"    The type of migration to filter."},{"line_number":587,"context_line":"  in: query"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"ba2be162_3c11c204","line":584,"updated":"2017-03-06 09:32:59.000000000","message":"nit: I didn\u0027t see the same pattern for parameter naming before.\nMaybe it\u0027s worth not to duplicate 2.43 but change migration_type name in old call (os-migrations)?","commit_id":"d0ab14a102c1393b3e494dbb79a38750421b6781"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"c2691ae1e4c17a29d14406a75969809893596dd1","unresolved":false,"context_lines":[{"line_number":581,"context_line":"  in: query"},{"line_number":582,"context_line":"  required: false"},{"line_number":583,"context_line":"  type: string"},{"line_number":584,"context_line":"migration_type_2_43:"},{"line_number":585,"context_line":"  description: |"},{"line_number":586,"context_line":"    The type of migration to filter."},{"line_number":587,"context_line":"  in: query"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"9a30ddce_68934da4","line":584,"in_reply_to":"ba2be162_3c11c204","updated":"2017-03-07 12:12:08.000000000","message":"In line 578.","commit_id":"d0ab14a102c1393b3e494dbb79a38750421b6781"}],"api-ref/source/server-migrations.inc":[{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"bf7891333e51409f834b23d283205a9d8c1a9dbb","unresolved":false,"context_lines":[{"line_number":56,"context_line":"  - updated_at: updated"},{"line_number":57,"context_line":"  - migration_type: migration_type_body"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"**Example List Migrations (v2.43)**"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":".. literalinclude:: ../../doc/api_samples/server-migrations/v2.43/migrations-index.json"},{"line_number":62,"context_line":"   :language: javascript"}],"source_content_type":"text/x-c++src","patch_set":7,"id":"ba2be162_9c754e33","line":59,"updated":"2017-03-06 09:32:59.000000000","message":"I\u0027m not sure version should be in the header. IMO in parameter desctiption it\u0027s enough.","commit_id":"d0ab14a102c1393b3e494dbb79a38750421b6781"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"c2691ae1e4c17a29d14406a75969809893596dd1","unresolved":false,"context_lines":[{"line_number":56,"context_line":"  - updated_at: updated"},{"line_number":57,"context_line":"  - migration_type: migration_type_body"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"**Example List Migrations (v2.43)**"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":".. literalinclude:: ../../doc/api_samples/server-migrations/v2.43/migrations-index.json"},{"line_number":62,"context_line":"   :language: javascript"}],"source_content_type":"text/x-c++src","patch_set":7,"id":"9a30ddce_285dd5e9","line":59,"in_reply_to":"ba2be162_9c754e33","updated":"2017-03-07 12:12:08.000000000","message":"See the following example.\n\nhttps://developer.openstack.org/api-ref/compute/?expanded\u003dlist-hypervisors-detail#list-hypervisors","commit_id":"d0ab14a102c1393b3e494dbb79a38750421b6781"}],"nova/api/openstack/api_version_request.py":[{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"bf7891333e51409f834b23d283205a9d8c1a9dbb","unresolved":false,"context_lines":[{"line_number":102,"context_line":"             re-introduce the tag attribute that, due to bugs, was lost"},{"line_number":103,"context_line":"             starting with version 2.33 for block devices and starting with"},{"line_number":104,"context_line":"             version 2.37 for network interfaces."},{"line_number":105,"context_line":"    * 2.43 - Add a \u0027type\u0027 parameter in list \u0026 show migration(s) API"},{"line_number":106,"context_line":"\"\"\""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"# The minimum and maximum versions of the API supported"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba2be162_3ceaa274","line":105,"updated":"2017-03-06 09:32:59.000000000","message":"Did you consider to make similar names for list request and for body? Like \u0027type\u0027 and \u0027type\u0027 or \u0027migration_type\u0027 and \u0027migration_type\u0027 instead of \u0027type\u0027 and \u0027migration_type\u0027.","commit_id":"d0ab14a102c1393b3e494dbb79a38750421b6781"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"c2691ae1e4c17a29d14406a75969809893596dd1","unresolved":false,"context_lines":[{"line_number":102,"context_line":"             re-introduce the tag attribute that, due to bugs, was lost"},{"line_number":103,"context_line":"             starting with version 2.33 for block devices and starting with"},{"line_number":104,"context_line":"             version 2.37 for network interfaces."},{"line_number":105,"context_line":"    * 2.43 - Add a \u0027type\u0027 parameter in list \u0026 show migration(s) API"},{"line_number":106,"context_line":"\"\"\""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"# The minimum and maximum versions of the API supported"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a30ddce_82f93dcb","line":105,"in_reply_to":"ba2be162_3ceaa274","updated":"2017-03-07 12:12:08.000000000","message":"IMO, \u0027type\u0027 and \u0027type\u0027 is good. So it is changed.","commit_id":"d0ab14a102c1393b3e494dbb79a38750421b6781"}],"nova/api/openstack/compute/server_migrations.py":[{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"bf7891333e51409f834b23d283205a9d8c1a9dbb","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        support_v2_43 \u003d api_version_request.is_supported("},{"line_number":107,"context_line":"            req, min_version\u003d\u00272.43\u0027)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        if support_v2_43:"},{"line_number":110,"context_line":"            migration_type \u003d req.params.get(\u0027type\u0027)"},{"line_number":111,"context_line":"            migns \u003d self.compute_api.get_migrations_in_progress_by_instance("},{"line_number":112,"context_line":"                context, server_id, migration_type)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba2be162_176937f9","line":109,"updated":"2017-03-06 09:32:59.000000000","message":"Do we need some migration_type validation here especially taking into account that there is hardcoded types while getting from DB?","commit_id":"d0ab14a102c1393b3e494dbb79a38750421b6781"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"c2691ae1e4c17a29d14406a75969809893596dd1","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        support_v2_43 \u003d api_version_request.is_supported("},{"line_number":107,"context_line":"            req, min_version\u003d\u00272.43\u0027)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        if support_v2_43:"},{"line_number":110,"context_line":"            migration_type \u003d req.params.get(\u0027type\u0027)"},{"line_number":111,"context_line":"            migns \u003d self.compute_api.get_migrations_in_progress_by_instance("},{"line_number":112,"context_line":"                context, server_id, migration_type)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a30ddce_ce2a81e7","line":109,"in_reply_to":"ba2be162_176937f9","updated":"2017-03-07 12:12:08.000000000","message":"The validation is added in nova/compute/api.py","commit_id":"d0ab14a102c1393b3e494dbb79a38750421b6781"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"bf7891333e51409f834b23d283205a9d8c1a9dbb","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            req, min_version\u003d\u00272.43\u0027)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        if support_v2_43:"},{"line_number":110,"context_line":"            migration_type \u003d req.params.get(\u0027type\u0027)"},{"line_number":111,"context_line":"            migns \u003d self.compute_api.get_migrations_in_progress_by_instance("},{"line_number":112,"context_line":"                context, server_id, migration_type)"},{"line_number":113,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba2be162_1c115e5d","line":110,"updated":"2017-03-06 09:32:59.000000000","message":"Can set migration_type \u003d \u0027live-migration\u0027 by default to not duplicate get_migrations_in_progress_by_instance call.","commit_id":"d0ab14a102c1393b3e494dbb79a38750421b6781"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"c2691ae1e4c17a29d14406a75969809893596dd1","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            req, min_version\u003d\u00272.43\u0027)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        if support_v2_43:"},{"line_number":110,"context_line":"            migration_type \u003d req.params.get(\u0027type\u0027)"},{"line_number":111,"context_line":"            migns \u003d self.compute_api.get_migrations_in_progress_by_instance("},{"line_number":112,"context_line":"                context, server_id, migration_type)"},{"line_number":113,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a30ddce_0e357945","line":110,"in_reply_to":"ba2be162_1c115e5d","updated":"2017-03-07 12:12:08.000000000","message":"Done","commit_id":"d0ab14a102c1393b3e494dbb79a38750421b6781"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"bf7891333e51409f834b23d283205a9d8c1a9dbb","unresolved":false,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        # TODO(Shaohe Feng) we should share the in-progress list."},{"line_number":149,"context_line":"        in_progress \u003d [\u0027queued\u0027, \u0027preparing\u0027, \u0027running\u0027, \u0027post-migrating\u0027]"},{"line_number":150,"context_line":"        if migration.get(\"migration_type\") \u003d\u003d \"live-migration\":"},{"line_number":151,"context_line":"            if migration.get(\"status\") not in in_progress:"},{"line_number":152,"context_line":"                msg \u003d _(\"Live migration %(id)s for server %(uuid)s is not in\""},{"line_number":153,"context_line":"                        \" progress.\") % {\"id\": id, \"uuid\": server_id}"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba2be162_77fc33b8","line":150,"updated":"2017-03-06 09:32:59.000000000","message":"It looks like we show live-migration only in particular state but other types in any states. Is it fair? )\nMaybe it\u0027s worth to mention it in docs?","commit_id":"d0ab14a102c1393b3e494dbb79a38750421b6781"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"c2691ae1e4c17a29d14406a75969809893596dd1","unresolved":false,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        # TODO(Shaohe Feng) we should share the in-progress list."},{"line_number":149,"context_line":"        in_progress \u003d [\u0027queued\u0027, \u0027preparing\u0027, \u0027running\u0027, \u0027post-migrating\u0027]"},{"line_number":150,"context_line":"        if migration.get(\"migration_type\") \u003d\u003d \"live-migration\":"},{"line_number":151,"context_line":"            if migration.get(\"status\") not in in_progress:"},{"line_number":152,"context_line":"                msg \u003d _(\"Live migration %(id)s for server %(uuid)s is not in\""},{"line_number":153,"context_line":"                        \" progress.\") % {\"id\": id, \"uuid\": server_id}"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a30ddce_c20335b7","line":150,"in_reply_to":"ba2be162_77fc33b8","updated":"2017-03-07 12:12:08.000000000","message":"Done","commit_id":"d0ab14a102c1393b3e494dbb79a38750421b6781"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"2b8027eea3dae442f53dbd0bf1861ce8c6048a64","unresolved":false,"context_lines":[{"line_number":108,"context_line":"            req, min_version\u003d\u00272.43\u0027)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        migration_type \u003d \u0027live-migration\u0027"},{"line_number":111,"context_line":"        if support_v2_43:"},{"line_number":112,"context_line":"            migration_type \u003d req.params.get(\u0027type\u0027)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        try:"},{"line_number":115,"context_line":"            migns \u003d self.compute_api.get_migrations_in_progress_by_instance("}],"source_content_type":"text/x-python","patch_set":9,"id":"5a22e58a_79e24fa1","line":112,"range":{"start_line":111,"start_character":0,"end_line":112,"end_character":51},"updated":"2017-03-14 08:07:39.000000000","message":"can we just merge this and line 107?","commit_id":"f02c9cafa36e3e5ef322775a19a23b69eb2152e1"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"316d1a86a4d5ff150a93e865b5b855acb567e347","unresolved":false,"context_lines":[{"line_number":108,"context_line":"            req, min_version\u003d\u00272.43\u0027)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        migration_type \u003d \u0027live-migration\u0027"},{"line_number":111,"context_line":"        if support_v2_43:"},{"line_number":112,"context_line":"            migration_type \u003d req.params.get(\u0027type\u0027)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        try:"},{"line_number":115,"context_line":"            migns \u003d self.compute_api.get_migrations_in_progress_by_instance("}],"source_content_type":"text/x-python","patch_set":9,"id":"3a1ff146_71c40d92","line":112,"range":{"start_line":111,"start_character":0,"end_line":112,"end_character":51},"in_reply_to":"5a22e58a_518647ba","updated":"2017-03-15 03:28:43.000000000","message":"Ah, I see","commit_id":"f02c9cafa36e3e5ef322775a19a23b69eb2152e1"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"c7013f5bc51aa149ff121d58196612e795853356","unresolved":false,"context_lines":[{"line_number":108,"context_line":"            req, min_version\u003d\u00272.43\u0027)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        migration_type \u003d \u0027live-migration\u0027"},{"line_number":111,"context_line":"        if support_v2_43:"},{"line_number":112,"context_line":"            migration_type \u003d req.params.get(\u0027type\u0027)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        try:"},{"line_number":115,"context_line":"            migns \u003d self.compute_api.get_migrations_in_progress_by_instance("}],"source_content_type":"text/x-python","patch_set":9,"id":"5a22e58a_518647ba","line":112,"range":{"start_line":111,"start_character":0,"end_line":112,"end_character":51},"in_reply_to":"5a22e58a_79e24fa1","updated":"2017-03-14 10:03:01.000000000","message":"No.\n\u0027support_v2_43\u0027 is used in line 120.","commit_id":"f02c9cafa36e3e5ef322775a19a23b69eb2152e1"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"2b8027eea3dae442f53dbd0bf1861ce8c6048a64","unresolved":false,"context_lines":[{"line_number":139,"context_line":"                    \" server %(uuid)s.\") % {\"id\": id, \"uuid\": server_id}"},{"line_number":140,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        support_v2_43 \u003d api_version_request.is_supported("},{"line_number":143,"context_line":"            req, min_version\u003d\u00272.43\u0027)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        if not support_v2_43:"},{"line_number":146,"context_line":"            if migration.get(\"migration_type\") !\u003d \"live-migration\":"},{"line_number":147,"context_line":"                msg \u003d _(\"Migration %(id)s for server %(uuid)s is not\""},{"line_number":148,"context_line":"                        \" live-migration.\") % {\"id\": id, \"uuid\": server_id}"},{"line_number":149,"context_line":"                raise exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        live_in_progress \u003d fields.MigrationStatus.LIVE_MIGRATION_IN_PROGRESS"},{"line_number":152,"context_line":"        resize_in_progress \u003d ("}],"source_content_type":"text/x-python","patch_set":9,"id":"5a22e58a_19023b3f","line":149,"range":{"start_line":142,"start_character":0,"end_line":149,"end_character":55},"updated":"2017-03-14 08:07:39.000000000","message":"ditto","commit_id":"f02c9cafa36e3e5ef322775a19a23b69eb2152e1"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"c7013f5bc51aa149ff121d58196612e795853356","unresolved":false,"context_lines":[{"line_number":139,"context_line":"                    \" server %(uuid)s.\") % {\"id\": id, \"uuid\": server_id}"},{"line_number":140,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        support_v2_43 \u003d api_version_request.is_supported("},{"line_number":143,"context_line":"            req, min_version\u003d\u00272.43\u0027)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        if not support_v2_43:"},{"line_number":146,"context_line":"            if migration.get(\"migration_type\") !\u003d \"live-migration\":"},{"line_number":147,"context_line":"                msg \u003d _(\"Migration %(id)s for server %(uuid)s is not\""},{"line_number":148,"context_line":"                        \" live-migration.\") % {\"id\": id, \"uuid\": server_id}"},{"line_number":149,"context_line":"                raise exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        live_in_progress \u003d fields.MigrationStatus.LIVE_MIGRATION_IN_PROGRESS"},{"line_number":152,"context_line":"        resize_in_progress \u003d ("}],"source_content_type":"text/x-python","patch_set":9,"id":"5a22e58a_71aa631b","line":149,"range":{"start_line":142,"start_character":0,"end_line":149,"end_character":55},"in_reply_to":"5a22e58a_19023b3f","updated":"2017-03-14 10:03:01.000000000","message":"No. See line 175.","commit_id":"f02c9cafa36e3e5ef322775a19a23b69eb2152e1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fae5fa34151eccc3f683bd71db59e0a6c6a3aad2","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            migration_type \u003d req.params.get(\u0027type\u0027)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        try:"},{"line_number":115,"context_line":"            migns \u003d self.compute_api.get_migrations_in_progress_by_instance("},{"line_number":116,"context_line":"                context, server_id, migration_type)"},{"line_number":117,"context_line":"        except exception.InvalidMigrationType as e:"},{"line_number":118,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"}],"source_content_type":"text/x-python","patch_set":13,"id":"7ffa3b31_f6c6ef16","line":115,"range":{"start_line":115,"start_character":37,"end_line":115,"end_character":75},"updated":"2017-04-14 20:33:08.000000000","message":"I\u0027d like to hold up on this until we get some feedback from the operators about return all migrations in the new microversion, not just in-progress ones:\n\nhttp://lists.openstack.org/pipermail/openstack-dev/2017-April/115494.html","commit_id":"e684288e9f23967a479b0bf3faab4ae4580e89e8"}],"nova/compute/api.py":[{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"305d6f284b7042e68e206d0939610966032641ff","unresolved":false,"context_lines":[{"line_number":4028,"context_line":"        \"\"\"Get all migrations of an instance in progress.\"\"\""},{"line_number":4029,"context_line":"        if (migration_type is not None and"},{"line_number":4030,"context_line":"            migration_type not in (\u0027live-migration\u0027, \u0027migration\u0027,"},{"line_number":4031,"context_line":"                                   \u0027evacuation\u0027, \u0027resize\u0027)):"},{"line_number":4032,"context_line":"            raise exception.InvalidMigrationType(migration_type\u003dmigration_type)"},{"line_number":4033,"context_line":""},{"line_number":4034,"context_line":"        return objects.MigrationList.get_in_progress_by_instance("}],"source_content_type":"text/x-python","patch_set":8,"id":"9a30ddce_fc5eba10","line":4031,"updated":"2017-03-09 09:27:03.000000000","message":"Could we use objects.Migration.migration_type values here instead of hard coding?","commit_id":"179e5ee26fcf2fe794718a46cd6d2d6aa36a9545"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"bb261cb8fa14b1ac52a41c88d6a28e5156018625","unresolved":false,"context_lines":[{"line_number":4028,"context_line":"        \"\"\"Get all migrations of an instance in progress.\"\"\""},{"line_number":4029,"context_line":"        if (migration_type is not None and"},{"line_number":4030,"context_line":"            migration_type not in (\u0027live-migration\u0027, \u0027migration\u0027,"},{"line_number":4031,"context_line":"                                   \u0027evacuation\u0027, \u0027resize\u0027)):"},{"line_number":4032,"context_line":"            raise exception.InvalidMigrationType(migration_type\u003dmigration_type)"},{"line_number":4033,"context_line":""},{"line_number":4034,"context_line":"        return objects.MigrationList.get_in_progress_by_instance("}],"source_content_type":"text/x-python","patch_set":8,"id":"7a25e98e_743c0a30","line":4031,"in_reply_to":"9a30ddce_fc5eba10","updated":"2017-03-14 04:35:03.000000000","message":"Done","commit_id":"179e5ee26fcf2fe794718a46cd6d2d6aa36a9545"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"3a7a58fdae0e2de110866f51bbaf891722a7a6f9","unresolved":false,"context_lines":[{"line_number":4268,"context_line":"                continue"},{"line_number":4269,"context_line":"        raise exception.VolumeBDMNotFound(volume_id\u003dvolume_id)"},{"line_number":4270,"context_line":""},{"line_number":4271,"context_line":"    def get_migration_in_progress_by_id_and_instance(self, context,"},{"line_number":4272,"context_line":"                                                     migration_id,"},{"line_number":4273,"context_line":"                                                     instance_uuid):"},{"line_number":4274,"context_line":"        \"\"\"Get the in-progress migration of an instance by id.\"\"\""}],"source_content_type":"text/x-python","patch_set":67,"id":"df87a7cf_6c71790c","line":4271,"range":{"start_line":4271,"start_character":8,"end_line":4271,"end_character":52},"updated":"2017-12-18 02:48:44.000000000","message":"Just curious, why are we filtering by migration_id+instance_uuid? since migration_id is already Unique in non-multi-cell scenario now.","commit_id":"6109c0c21247cd19095f55d87f6fffe3bc79efa1"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"0141fb83aadd96e1435183add983d8201ff83136","unresolved":false,"context_lines":[{"line_number":4268,"context_line":"                continue"},{"line_number":4269,"context_line":"        raise exception.VolumeBDMNotFound(volume_id\u003dvolume_id)"},{"line_number":4270,"context_line":""},{"line_number":4271,"context_line":"    def get_migration_in_progress_by_id_and_instance(self, context,"},{"line_number":4272,"context_line":"                                                     migration_id,"},{"line_number":4273,"context_line":"                                                     instance_uuid):"},{"line_number":4274,"context_line":"        \"\"\"Get the in-progress migration of an instance by id.\"\"\""}],"source_content_type":"text/x-python","patch_set":67,"id":"bf8cb3f7_a6d04bcb","line":4271,"range":{"start_line":4271,"start_character":8,"end_line":4271,"end_character":52},"in_reply_to":"df87a7cf_6c71790c","updated":"2017-12-21 22:27:05.000000000","message":"It is for the case that users specify a migration id by mistake.\nIf only the migration id is used, the migration of another project can be got.\nBut if the instance uuid is used with the migration id, users cannot get a migration of another project because the instance is checked before calling this method.","commit_id":"6109c0c21247cd19095f55d87f6fffe3bc79efa1"}],"nova/db/api.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"f2864807f90244a310818a12f4df90fbe1381200","unresolved":false,"context_lines":[{"line_number":569,"context_line":"    return IMPL.migration_get_all_by_filters(context, filters)"},{"line_number":570,"context_line":""},{"line_number":571,"context_line":""},{"line_number":572,"context_line":"def migration_get_by_instance_and_statuses(context, instance_uuid,"},{"line_number":573,"context_line":"                                           migration_type, migration_statuses):"},{"line_number":574,"context_line":"    \"\"\"Finds all migrations of an instance in specified migration statuses.\"\"\""},{"line_number":575,"context_line":"    return IMPL.migration_get_by_instance_and_statuses(context, instance_uuid,"}],"source_content_type":"text/x-python","patch_set":27,"id":"7f231b9d_6797f449","line":572,"range":{"start_line":572,"start_character":34,"end_line":572,"end_character":42},"updated":"2017-06-19 03:53:36.000000000","message":"only \u0027*_status\u0027 could been better.","commit_id":"8ec61710d8c9cf36db6a4930d4e4c611ea9d28dd"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"2caf8d374e75489a841dd64ad4ac9f5b51bb9d8d","unresolved":false,"context_lines":[{"line_number":569,"context_line":"    return IMPL.migration_get_all_by_filters(context, filters)"},{"line_number":570,"context_line":""},{"line_number":571,"context_line":""},{"line_number":572,"context_line":"def migration_get_by_instance_and_statuses(context, instance_uuid,"},{"line_number":573,"context_line":"                                           migration_type, migration_statuses):"},{"line_number":574,"context_line":"    \"\"\"Finds all migrations of an instance in specified migration statuses.\"\"\""},{"line_number":575,"context_line":"    return IMPL.migration_get_by_instance_and_statuses(context, instance_uuid,"}],"source_content_type":"text/x-python","patch_set":27,"id":"5f201791_3651e437","line":572,"range":{"start_line":572,"start_character":34,"end_line":572,"end_character":42},"in_reply_to":"7f231b9d_6797f449","updated":"2017-06-21 22:38:13.000000000","message":"There is \u0027migration_get_by_instance_and_status\u0027 method in line 545. So it is named \u0027migration_get_by_instance_and_statuses\u0027.","commit_id":"8ec61710d8c9cf36db6a4930d4e4c611ea9d28dd"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ee28539c9602fb4bf782721e20f0bd122c5d5e32","unresolved":false,"context_lines":[{"line_number":571,"context_line":"def migration_get_by_instance_and_statuses(context, instance_uuid,"},{"line_number":572,"context_line":"                                           migration_type, migration_statuses):"},{"line_number":573,"context_line":"    \"\"\"Finds all migrations of an instance in specified migration statuses.\"\"\""},{"line_number":574,"context_line":"    return IMPL.migration_get_by_instance_and_statuses(context, instance_uuid,"},{"line_number":575,"context_line":"                                                       migration_type,"},{"line_number":576,"context_line":"                                                       migration_statuses)"},{"line_number":577,"context_line":""},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"def migration_get_by_id_instance_and_statuses(context, id, instance_uuid,"}],"source_content_type":"text/x-python","patch_set":48,"id":"5f4e5783_cad0a853","line":576,"range":{"start_line":574,"start_character":55,"end_line":576,"end_character":73},"updated":"2017-10-11 14:42:06.000000000","message":"Please document these parameters in the method docstring. Here and below. The migration_statuses parameter is a dict, keyed by migration type mapped to status values, but it could be easily assumed by just looking at this to be a list.","commit_id":"218d42a18ad62ab88cda2385a6d7b1c4d984f090"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"4579c9185f39df6a9ab40c6d8cead05ffa27e92f","unresolved":false,"context_lines":[{"line_number":571,"context_line":"def migration_get_by_instance_and_statuses(context, instance_uuid,"},{"line_number":572,"context_line":"                                           migration_type, migration_statuses):"},{"line_number":573,"context_line":"    \"\"\"Finds all migrations of an instance in specified migration statuses.\"\"\""},{"line_number":574,"context_line":"    return IMPL.migration_get_by_instance_and_statuses(context, instance_uuid,"},{"line_number":575,"context_line":"                                                       migration_type,"},{"line_number":576,"context_line":"                                                       migration_statuses)"},{"line_number":577,"context_line":""},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"def migration_get_by_id_instance_and_statuses(context, id, instance_uuid,"}],"source_content_type":"text/x-python","patch_set":48,"id":"5f4e5783_41ea4c75","line":576,"range":{"start_line":574,"start_character":55,"end_line":576,"end_character":73},"in_reply_to":"5f4e5783_cad0a853","updated":"2017-10-12 06:21:17.000000000","message":"Done","commit_id":"218d42a18ad62ab88cda2385a6d7b1c4d984f090"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"6dac966277961405c3c01146aad7fb3f7a23f79a","unresolved":false,"context_lines":[{"line_number":571,"context_line":"                                             limit\u003dlimit, marker\u003dmarker)"},{"line_number":572,"context_line":""},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"def migration_get_by_instance_type_and_statuses(context, instance_uuid,"},{"line_number":575,"context_line":"                                                migration_type,"},{"line_number":576,"context_line":"                                                migration_statuses):"},{"line_number":577,"context_line":"    \"\"\"Finds all migrations of an instance in specified migration type and"}],"source_content_type":"text/x-python","patch_set":88,"id":"9f6a8fd7_1235b9da","line":574,"range":{"start_line":574,"start_character":21,"end_line":574,"end_character":34},"updated":"2018-04-17 08:17:08.000000000","message":"Seems easy to miss-read to \"instance_type\" and \"statuses\".","commit_id":"47e84f18253741ba7b68611d1b442f2717017ac1"}],"nova/db/sqlalchemy/api.py":[{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"305d6f284b7042e68e206d0939610966032641ff","unresolved":false,"context_lines":[{"line_number":4836,"context_line":"    live_in_progress \u003d [\u0027queued\u0027, \u0027preparing\u0027, \u0027running\u0027, \u0027post-migrating\u0027]"},{"line_number":4837,"context_line":"    resize_in_progress \u003d [\u0027migrating\u0027, \u0027pre-migrating\u0027, \u0027post-migrating\u0027,"},{"line_number":4838,"context_line":"                          \u0027reverting\u0027, \u0027confirming\u0027]"},{"line_number":4839,"context_line":"    evacuation_in_progress \u003d [\u0027accepted\u0027, \u0027pre-migrating\u0027]"},{"line_number":4840,"context_line":""},{"line_number":4841,"context_line":"    if migration_type:"},{"line_number":4842,"context_line":"        if migration_type in [\u0027migration\u0027, \u0027resize\u0027]:"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a30ddce_7c864a14","line":4839,"updated":"2017-03-09 09:27:03.000000000","message":"Could we not duplicate statuses here and in server_migrations but rather move definition somewhere in objects.migration?","commit_id":"179e5ee26fcf2fe794718a46cd6d2d6aa36a9545"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"bb261cb8fa14b1ac52a41c88d6a28e5156018625","unresolved":false,"context_lines":[{"line_number":4836,"context_line":"    live_in_progress \u003d [\u0027queued\u0027, \u0027preparing\u0027, \u0027running\u0027, \u0027post-migrating\u0027]"},{"line_number":4837,"context_line":"    resize_in_progress \u003d [\u0027migrating\u0027, \u0027pre-migrating\u0027, \u0027post-migrating\u0027,"},{"line_number":4838,"context_line":"                          \u0027reverting\u0027, \u0027confirming\u0027]"},{"line_number":4839,"context_line":"    evacuation_in_progress \u003d [\u0027accepted\u0027, \u0027pre-migrating\u0027]"},{"line_number":4840,"context_line":""},{"line_number":4841,"context_line":"    if migration_type:"},{"line_number":4842,"context_line":"        if migration_type in [\u0027migration\u0027, \u0027resize\u0027]:"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a25e98e_bae4ab3b","line":4839,"in_reply_to":"9a30ddce_7c864a14","updated":"2017-03-14 04:35:03.000000000","message":"Done","commit_id":"179e5ee26fcf2fe794718a46cd6d2d6aa36a9545"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"877484b9799a0b4a24b6eb5f53905db7a6b61cb5","unresolved":false,"context_lines":[{"line_number":4796,"context_line":"    evacuation_in_progress \u003d fields.MigrationStatus.EVACUATION_IN_PROGRESS"},{"line_number":4797,"context_line":""},{"line_number":4798,"context_line":"    if migration_type:"},{"line_number":4799,"context_line":"        if migration_type in [\u0027migration\u0027, \u0027resize\u0027]:"},{"line_number":4800,"context_line":"            in_progress \u003d resize_in_progress"},{"line_number":4801,"context_line":"        elif migration_type \u003d\u003d \u0027evacuation\u0027:"},{"line_number":4802,"context_line":"            in_progress \u003d evacuation_in_progress"}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_442c52ab","line":4799,"range":{"start_line":4799,"start_character":29,"end_line":4799,"end_character":52},"updated":"2017-05-22 14:36:35.000000000","message":"nit: use the new MigrationType enum field here.","commit_id":"8db8120ed97c89b558a1a5313b3357feb3351cba"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"13de36ba69f76b4d6fdd4fdf1214d3febbfc0990","unresolved":false,"context_lines":[{"line_number":4796,"context_line":"    evacuation_in_progress \u003d fields.MigrationStatus.EVACUATION_IN_PROGRESS"},{"line_number":4797,"context_line":""},{"line_number":4798,"context_line":"    if migration_type:"},{"line_number":4799,"context_line":"        if migration_type in [\u0027migration\u0027, \u0027resize\u0027]:"},{"line_number":4800,"context_line":"            in_progress \u003d resize_in_progress"},{"line_number":4801,"context_line":"        elif migration_type \u003d\u003d \u0027evacuation\u0027:"},{"line_number":4802,"context_line":"            in_progress \u003d evacuation_in_progress"}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_d89954c4","line":4799,"range":{"start_line":4799,"start_character":29,"end_line":4799,"end_character":52},"in_reply_to":"ff0f0b1f_442c52ab","updated":"2017-05-23 04:36:29.000000000","message":"Done","commit_id":"8db8120ed97c89b558a1a5313b3357feb3351cba"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"877484b9799a0b4a24b6eb5f53905db7a6b61cb5","unresolved":false,"context_lines":[{"line_number":4798,"context_line":"    if migration_type:"},{"line_number":4799,"context_line":"        if migration_type in [\u0027migration\u0027, \u0027resize\u0027]:"},{"line_number":4800,"context_line":"            in_progress \u003d resize_in_progress"},{"line_number":4801,"context_line":"        elif migration_type \u003d\u003d \u0027evacuation\u0027:"},{"line_number":4802,"context_line":"            in_progress \u003d evacuation_in_progress"},{"line_number":4803,"context_line":"        else:"},{"line_number":4804,"context_line":"            in_progress \u003d live_in_progress"}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_24295e9a","line":4801,"range":{"start_line":4801,"start_character":32,"end_line":4801,"end_character":42},"updated":"2017-05-22 14:36:35.000000000","message":"same","commit_id":"8db8120ed97c89b558a1a5313b3357feb3351cba"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"13de36ba69f76b4d6fdd4fdf1214d3febbfc0990","unresolved":false,"context_lines":[{"line_number":4798,"context_line":"    if migration_type:"},{"line_number":4799,"context_line":"        if migration_type in [\u0027migration\u0027, \u0027resize\u0027]:"},{"line_number":4800,"context_line":"            in_progress \u003d resize_in_progress"},{"line_number":4801,"context_line":"        elif migration_type \u003d\u003d \u0027evacuation\u0027:"},{"line_number":4802,"context_line":"            in_progress \u003d evacuation_in_progress"},{"line_number":4803,"context_line":"        else:"},{"line_number":4804,"context_line":"            in_progress \u003d live_in_progress"}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_b896a092","line":4801,"range":{"start_line":4801,"start_character":32,"end_line":4801,"end_character":42},"in_reply_to":"ff0f0b1f_24295e9a","updated":"2017-05-23 04:36:29.000000000","message":"Done","commit_id":"8db8120ed97c89b558a1a5313b3357feb3351cba"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"877484b9799a0b4a24b6eb5f53905db7a6b61cb5","unresolved":false,"context_lines":[{"line_number":4800,"context_line":"            in_progress \u003d resize_in_progress"},{"line_number":4801,"context_line":"        elif migration_type \u003d\u003d \u0027evacuation\u0027:"},{"line_number":4802,"context_line":"            in_progress \u003d evacuation_in_progress"},{"line_number":4803,"context_line":"        else:"},{"line_number":4804,"context_line":"            in_progress \u003d live_in_progress"},{"line_number":4805,"context_line":""},{"line_number":4806,"context_line":"        query \u003d model_query(context, models.Migration).\\"}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_bf069b1b","line":4803,"range":{"start_line":4803,"start_character":8,"end_line":4803,"end_character":12},"updated":"2017-05-22 14:36:35.000000000","message":"nit: we could be strict on checking for live-migration and then fail if we got an unexpected migration type. I would raise InvalidInput if I got a migration_type that is unexpected / not supported in this method.","commit_id":"8db8120ed97c89b558a1a5313b3357feb3351cba"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"13de36ba69f76b4d6fdd4fdf1214d3febbfc0990","unresolved":false,"context_lines":[{"line_number":4800,"context_line":"            in_progress \u003d resize_in_progress"},{"line_number":4801,"context_line":"        elif migration_type \u003d\u003d \u0027evacuation\u0027:"},{"line_number":4802,"context_line":"            in_progress \u003d evacuation_in_progress"},{"line_number":4803,"context_line":"        else:"},{"line_number":4804,"context_line":"            in_progress \u003d live_in_progress"},{"line_number":4805,"context_line":""},{"line_number":4806,"context_line":"        query \u003d model_query(context, models.Migration).\\"}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_38f050fe","line":4803,"range":{"start_line":4803,"start_character":8,"end_line":4803,"end_character":12},"in_reply_to":"ff0f0b1f_bf069b1b","updated":"2017-05-23 04:36:29.000000000","message":"Done","commit_id":"8db8120ed97c89b558a1a5313b3357feb3351cba"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fc8045f37e6f949d07bc025624aa5296da25b870","unresolved":false,"context_lines":[{"line_number":66,"context_line":"from nova.db.sqlalchemy import models"},{"line_number":67,"context_line":"from nova import exception"},{"line_number":68,"context_line":"from nova.i18n import _, _LI, _LE, _LW"},{"line_number":69,"context_line":"from nova.objects import fields"},{"line_number":70,"context_line":"from nova import quota"},{"line_number":71,"context_line":"from nova import safe_utils"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"df140735_8aff7333","line":69,"updated":"2017-06-07 15:21:15.000000000","message":"I kinda feel like this is a layering violation and a potential circular import in the future.","commit_id":"6358254b1f5380f234ca0f17c2a20469da6e0c75"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"5d226ff3592c897331f5ba4880a7b58664b8bfc4","unresolved":false,"context_lines":[{"line_number":66,"context_line":"from nova.db.sqlalchemy import models"},{"line_number":67,"context_line":"from nova import exception"},{"line_number":68,"context_line":"from nova.i18n import _, _LI, _LE, _LW"},{"line_number":69,"context_line":"from nova.objects import fields"},{"line_number":70,"context_line":"from nova import quota"},{"line_number":71,"context_line":"from nova import safe_utils"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"9f0e0f27_9746a44f","line":69,"in_reply_to":"df140735_8aff7333","updated":"2017-06-09 06:45:36.000000000","message":"I remove it in PS25.\nDone.","commit_id":"6358254b1f5380f234ca0f17c2a20469da6e0c75"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fc8045f37e6f949d07bc025624aa5296da25b870","unresolved":false,"context_lines":[{"line_number":4794,"context_line":"                                          migration_type\u003dNone):"},{"line_number":4795,"context_line":"    live_in_progress \u003d fields.MigrationStatus.LIVE_MIGRATION_IN_PROGRESS"},{"line_number":4796,"context_line":"    resize_in_progress \u003d fields.MigrationStatus.MIGRATION_RESIZE_IN_PROGRESS"},{"line_number":4797,"context_line":"    evacuation_in_progress \u003d fields.MigrationStatus.EVACUATION_IN_PROGRESS"},{"line_number":4798,"context_line":""},{"line_number":4799,"context_line":"    if migration_type:"},{"line_number":4800,"context_line":"        if migration_type in [fields.MigrationType.MIGRATION,"}],"source_content_type":"text/x-python","patch_set":24,"id":"df140735_eab6ef8a","line":4797,"updated":"2017-06-07 15:21:15.000000000","message":"I understand the desire to use the constants here, but these really belong to the object layer. I wonder if it might be better to change this method to\n\n def migration_get_by_instance_and_status(context, instance_uuid, migration_types)\n\nMake the caller pass in the list of things it\u0027s looking for, which means you don\u0027t need to know the enum details here, which simplifies everything.","commit_id":"6358254b1f5380f234ca0f17c2a20469da6e0c75"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"5d226ff3592c897331f5ba4880a7b58664b8bfc4","unresolved":false,"context_lines":[{"line_number":4794,"context_line":"                                          migration_type\u003dNone):"},{"line_number":4795,"context_line":"    live_in_progress \u003d fields.MigrationStatus.LIVE_MIGRATION_IN_PROGRESS"},{"line_number":4796,"context_line":"    resize_in_progress \u003d fields.MigrationStatus.MIGRATION_RESIZE_IN_PROGRESS"},{"line_number":4797,"context_line":"    evacuation_in_progress \u003d fields.MigrationStatus.EVACUATION_IN_PROGRESS"},{"line_number":4798,"context_line":""},{"line_number":4799,"context_line":"    if migration_type:"},{"line_number":4800,"context_line":"        if migration_type in [fields.MigrationType.MIGRATION,"}],"source_content_type":"text/x-python","patch_set":24,"id":"9f0e0f27_f76840bb","line":4797,"in_reply_to":"df140735_eab6ef8a","updated":"2017-06-09 06:45:36.000000000","message":"Need migration statuses (in progress) in the argument.\nDone with migration statuses argument.","commit_id":"6358254b1f5380f234ca0f17c2a20469da6e0c75"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d47deab47cf29388df9888817b8bef8c8bf2506b","unresolved":false,"context_lines":[{"line_number":4812,"context_line":"                filter(models.Migration.migration_type \u003d\u003d migration_type)"},{"line_number":4813,"context_line":"    else:"},{"line_number":4814,"context_line":"        conditions \u003d []"},{"line_number":4815,"context_line":"        for migration_type1, migration_status in migration_statuses.items():"},{"line_number":4816,"context_line":"            if not isinstance(migration_status, (list, tuple)):"},{"line_number":4817,"context_line":"                raise ValueError(_("},{"line_number":4818,"context_line":"                    \"\u0027migration_status\u0027 must be \u0027list\u0027 or \u0027tuple\u0027.\"))"}],"source_content_type":"text/x-python","patch_set":26,"id":"7f231b9d_3ab55d32","line":4815,"range":{"start_line":4815,"start_character":12,"end_line":4815,"end_character":45},"updated":"2017-06-12 07:58:54.000000000","message":"nit, you can just name as \u0027type\u0027 and \u0027status\u0027","commit_id":"1ab4a920e1653ca4fcc78aea68453e3c78718259"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"79c265efbc3b28b0c28cff06c33651881089bd9a","unresolved":false,"context_lines":[{"line_number":4812,"context_line":"                filter(models.Migration.migration_type \u003d\u003d migration_type)"},{"line_number":4813,"context_line":"    else:"},{"line_number":4814,"context_line":"        conditions \u003d []"},{"line_number":4815,"context_line":"        for migration_type1, migration_status in migration_statuses.items():"},{"line_number":4816,"context_line":"            if not isinstance(migration_status, (list, tuple)):"},{"line_number":4817,"context_line":"                raise ValueError(_("},{"line_number":4818,"context_line":"                    \"\u0027migration_status\u0027 must be \u0027list\u0027 or \u0027tuple\u0027.\"))"}],"source_content_type":"text/x-python","patch_set":26,"id":"7f231b9d_5b6d9430","line":4815,"range":{"start_line":4815,"start_character":12,"end_line":4815,"end_character":45},"in_reply_to":"7f231b9d_3ab55d32","updated":"2017-06-13 07:09:56.000000000","message":"Done","commit_id":"1ab4a920e1653ca4fcc78aea68453e3c78718259"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"054f9d1c62e2ec2c229baced5ddba86fb05f205e","unresolved":false,"context_lines":[{"line_number":4787,"context_line":"        raise ValueError(_(\"\u0027migration_statuses\u0027 must be \u0027dict\u0027.\"))"},{"line_number":4788,"context_line":""},{"line_number":4789,"context_line":"    if migration_type:"},{"line_number":4790,"context_line":"        if migration_type not in (\u0027live-migration\u0027, \u0027migration\u0027, \u0027resize\u0027,"},{"line_number":4791,"context_line":"                                  \u0027evacuation\u0027):"},{"line_number":4792,"context_line":"            raise exception.InvalidMigrationType(migration_type\u003dmigration_type)"},{"line_number":4793,"context_line":""},{"line_number":4794,"context_line":"        migration_status \u003d migration_statuses.get(migration_type, [])"},{"line_number":4795,"context_line":"        if not isinstance(migration_status, (list, tuple)):"}],"source_content_type":"text/x-python","patch_set":42,"id":"9f436f4f_ec100bab","line":4792,"range":{"start_line":4790,"start_character":0,"end_line":4792,"end_character":79},"updated":"2017-08-22 04:03:21.000000000","message":"this is going to be checked on schema side right. we can remove it from here.\n\n- https://review.openstack.org/#/c/459483/30/nova/api/openstack/compute/schemas/server_migrations.py","commit_id":"523d1e7ec6f97cfa186efc7df54f7cbb3070c7b8"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"7fd66bf363d2bd0ab7a8ddd362289ad11c007685","unresolved":false,"context_lines":[{"line_number":4862,"context_line":"    for type, status in migration_statuses.items():"},{"line_number":4863,"context_line":"        if not isinstance(status, (list, tuple)):"},{"line_number":4864,"context_line":"            raise ValueError(_("},{"line_number":4865,"context_line":"                \"\u0027migration_status\u0027 must be \u0027list\u0027 or \u0027tuple\u0027.\"))"},{"line_number":4866,"context_line":"        conditions.append(and_("},{"line_number":4867,"context_line":"            models.Migration.migration_type \u003d\u003d type,"},{"line_number":4868,"context_line":"            models.Migration.status.in_(status)))"}],"source_content_type":"text/x-python","patch_set":46,"id":"7f515b1d_499adeb8","line":4865,"updated":"2017-10-02 10:31:32.000000000","message":"It took me a while to decode that this was saying the value of a key was the wrong type.","commit_id":"564bb59db01adfd73b269b0c8483d04ddf90fac0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ee28539c9602fb4bf782721e20f0bd122c5d5e32","unresolved":false,"context_lines":[{"line_number":4879,"context_line":"    if migration_type:"},{"line_number":4880,"context_line":"        migration_status \u003d migration_statuses.get(migration_type, [])"},{"line_number":4881,"context_line":"        if not isinstance(migration_status, (list, tuple)):"},{"line_number":4882,"context_line":"                raise ValueError(_("},{"line_number":4883,"context_line":"                    \"\u0027migration_status\u0027 must be \u0027list\u0027 or \u0027tuple\u0027.\"))"},{"line_number":4884,"context_line":""},{"line_number":4885,"context_line":"        query \u003d model_query(context, models.Migration).\\"}],"source_content_type":"text/x-python","patch_set":48,"id":"5f4e5783_aa732c80","line":4882,"updated":"2017-10-11 14:42:06.000000000","message":"indented too far","commit_id":"218d42a18ad62ab88cda2385a6d7b1c4d984f090"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"4579c9185f39df6a9ab40c6d8cead05ffa27e92f","unresolved":false,"context_lines":[{"line_number":4879,"context_line":"    if migration_type:"},{"line_number":4880,"context_line":"        migration_status \u003d migration_statuses.get(migration_type, [])"},{"line_number":4881,"context_line":"        if not isinstance(migration_status, (list, tuple)):"},{"line_number":4882,"context_line":"                raise ValueError(_("},{"line_number":4883,"context_line":"                    \"\u0027migration_status\u0027 must be \u0027list\u0027 or \u0027tuple\u0027.\"))"},{"line_number":4884,"context_line":""},{"line_number":4885,"context_line":"        query \u003d model_query(context, models.Migration).\\"}],"source_content_type":"text/x-python","patch_set":48,"id":"5f4e5783_6198a81a","line":4882,"in_reply_to":"5f4e5783_aa732c80","updated":"2017-10-12 06:21:17.000000000","message":"Done","commit_id":"218d42a18ad62ab88cda2385a6d7b1c4d984f090"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ee28539c9602fb4bf782721e20f0bd122c5d5e32","unresolved":false,"context_lines":[{"line_number":4880,"context_line":"        migration_status \u003d migration_statuses.get(migration_type, [])"},{"line_number":4881,"context_line":"        if not isinstance(migration_status, (list, tuple)):"},{"line_number":4882,"context_line":"                raise ValueError(_("},{"line_number":4883,"context_line":"                    \"\u0027migration_status\u0027 must be \u0027list\u0027 or \u0027tuple\u0027.\"))"},{"line_number":4884,"context_line":""},{"line_number":4885,"context_line":"        query \u003d model_query(context, models.Migration).\\"},{"line_number":4886,"context_line":"                filter_by(instance_uuid\u003dinstance_uuid).\\"}],"source_content_type":"text/x-python","patch_set":48,"id":"5f4e5783_2a05fcc2","line":4883,"range":{"start_line":4883,"start_character":22,"end_line":4883,"end_character":38},"updated":"2017-10-11 14:42:06.000000000","message":"This is confusing - this is referring to a method-scope variable. If you\u0027re going to raise an exception for invalid usage, make sure the message makes sense to the caller, so say something about how migration_statuses is a dict, keyed by migration type, to a list (or tuple) of migration status values.","commit_id":"218d42a18ad62ab88cda2385a6d7b1c4d984f090"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"4579c9185f39df6a9ab40c6d8cead05ffa27e92f","unresolved":false,"context_lines":[{"line_number":4880,"context_line":"        migration_status \u003d migration_statuses.get(migration_type, [])"},{"line_number":4881,"context_line":"        if not isinstance(migration_status, (list, tuple)):"},{"line_number":4882,"context_line":"                raise ValueError(_("},{"line_number":4883,"context_line":"                    \"\u0027migration_status\u0027 must be \u0027list\u0027 or \u0027tuple\u0027.\"))"},{"line_number":4884,"context_line":""},{"line_number":4885,"context_line":"        query \u003d model_query(context, models.Migration).\\"},{"line_number":4886,"context_line":"                filter_by(instance_uuid\u003dinstance_uuid).\\"}],"source_content_type":"text/x-python","patch_set":48,"id":"5f4e5783_814cc49e","line":4883,"range":{"start_line":4883,"start_character":22,"end_line":4883,"end_character":38},"in_reply_to":"5f4e5783_2a05fcc2","updated":"2017-10-12 06:21:17.000000000","message":"Done","commit_id":"218d42a18ad62ab88cda2385a6d7b1c4d984f090"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"95e710cb04abdf9733396da25f8e2eefe3d9e47c","unresolved":false,"context_lines":[{"line_number":4888,"context_line":"                filter(models.Migration.migration_type \u003d\u003d migration_type)"},{"line_number":4889,"context_line":"    else:"},{"line_number":4890,"context_line":"        conditions \u003d []"},{"line_number":4891,"context_line":"        for type, status in migration_statuses.items():"},{"line_number":4892,"context_line":"            if not isinstance(status, (list, tuple)):"},{"line_number":4893,"context_line":"                raise ValueError(_("},{"line_number":4894,"context_line":"                    \"\u0027migration_status\u0027 must be \u0027list\u0027 or \u0027tuple\u0027.\"))"}],"source_content_type":"text/x-python","patch_set":48,"id":"5f4e5783_0f1ff26c","line":4891,"range":{"start_line":4891,"start_character":12,"end_line":4891,"end_character":16},"updated":"2017-10-11 14:22:36.000000000","message":"Can we please avoid using a built-in keyword? Call this mig_type or something.","commit_id":"218d42a18ad62ab88cda2385a6d7b1c4d984f090"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"4579c9185f39df6a9ab40c6d8cead05ffa27e92f","unresolved":false,"context_lines":[{"line_number":4888,"context_line":"                filter(models.Migration.migration_type \u003d\u003d migration_type)"},{"line_number":4889,"context_line":"    else:"},{"line_number":4890,"context_line":"        conditions \u003d []"},{"line_number":4891,"context_line":"        for type, status in migration_statuses.items():"},{"line_number":4892,"context_line":"            if not isinstance(status, (list, tuple)):"},{"line_number":4893,"context_line":"                raise ValueError(_("},{"line_number":4894,"context_line":"                    \"\u0027migration_status\u0027 must be \u0027list\u0027 or \u0027tuple\u0027.\"))"}],"source_content_type":"text/x-python","patch_set":48,"id":"5f4e5783_a1546022","line":4891,"range":{"start_line":4891,"start_character":12,"end_line":4891,"end_character":16},"in_reply_to":"5f4e5783_0f1ff26c","updated":"2017-10-12 06:21:17.000000000","message":"Done","commit_id":"218d42a18ad62ab88cda2385a6d7b1c4d984f090"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ee28539c9602fb4bf782721e20f0bd122c5d5e32","unresolved":false,"context_lines":[{"line_number":4890,"context_line":"        conditions \u003d []"},{"line_number":4891,"context_line":"        for type, status in migration_statuses.items():"},{"line_number":4892,"context_line":"            if not isinstance(status, (list, tuple)):"},{"line_number":4893,"context_line":"                raise ValueError(_("},{"line_number":4894,"context_line":"                    \"\u0027migration_status\u0027 must be \u0027list\u0027 or \u0027tuple\u0027.\"))"},{"line_number":4895,"context_line":"            conditions.append(and_("},{"line_number":4896,"context_line":"                models.Migration.migration_type \u003d\u003d type,"},{"line_number":4897,"context_line":"                models.Migration.status.in_(status)))"}],"source_content_type":"text/x-python","patch_set":48,"id":"5f4e5783_8af510ce","line":4894,"range":{"start_line":4893,"start_character":16,"end_line":4894,"end_character":69},"updated":"2017-10-11 14:42:06.000000000","message":"same as above","commit_id":"218d42a18ad62ab88cda2385a6d7b1c4d984f090"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"4579c9185f39df6a9ab40c6d8cead05ffa27e92f","unresolved":false,"context_lines":[{"line_number":4890,"context_line":"        conditions \u003d []"},{"line_number":4891,"context_line":"        for type, status in migration_statuses.items():"},{"line_number":4892,"context_line":"            if not isinstance(status, (list, tuple)):"},{"line_number":4893,"context_line":"                raise ValueError(_("},{"line_number":4894,"context_line":"                    \"\u0027migration_status\u0027 must be \u0027list\u0027 or \u0027tuple\u0027.\"))"},{"line_number":4895,"context_line":"            conditions.append(and_("},{"line_number":4896,"context_line":"                models.Migration.migration_type \u003d\u003d type,"},{"line_number":4897,"context_line":"                models.Migration.status.in_(status)))"}],"source_content_type":"text/x-python","patch_set":48,"id":"5f4e5783_213e30da","line":4894,"range":{"start_line":4893,"start_character":16,"end_line":4894,"end_character":69},"in_reply_to":"5f4e5783_8af510ce","updated":"2017-10-12 06:21:17.000000000","message":"Done","commit_id":"218d42a18ad62ab88cda2385a6d7b1c4d984f090"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ee28539c9602fb4bf782721e20f0bd122c5d5e32","unresolved":false,"context_lines":[{"line_number":4896,"context_line":"                models.Migration.migration_type \u003d\u003d type,"},{"line_number":4897,"context_line":"                models.Migration.status.in_(status)))"},{"line_number":4898,"context_line":"        query \u003d model_query(context, models.Migration).\\"},{"line_number":4899,"context_line":"                filter_by(instance_uuid\u003dinstance_uuid).\\"},{"line_number":4900,"context_line":"                filter(or_(*conditions))"},{"line_number":4901,"context_line":""},{"line_number":4902,"context_line":"    return query.all()"},{"line_number":4903,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"5f4e5783_2a2e1c43","line":4900,"range":{"start_line":4899,"start_character":16,"end_line":4900,"end_character":40},"updated":"2017-10-11 14:42:06.000000000","message":"indented too far","commit_id":"218d42a18ad62ab88cda2385a6d7b1c4d984f090"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"4579c9185f39df6a9ab40c6d8cead05ffa27e92f","unresolved":false,"context_lines":[{"line_number":4896,"context_line":"                models.Migration.migration_type \u003d\u003d type,"},{"line_number":4897,"context_line":"                models.Migration.status.in_(status)))"},{"line_number":4898,"context_line":"        query \u003d model_query(context, models.Migration).\\"},{"line_number":4899,"context_line":"                filter_by(instance_uuid\u003dinstance_uuid).\\"},{"line_number":4900,"context_line":"                filter(or_(*conditions))"},{"line_number":4901,"context_line":""},{"line_number":4902,"context_line":"    return query.all()"},{"line_number":4903,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"5f4e5783_c1075c1c","line":4900,"range":{"start_line":4899,"start_character":16,"end_line":4900,"end_character":40},"in_reply_to":"5f4e5783_2a2e1c43","updated":"2017-10-12 06:21:17.000000000","message":"Done","commit_id":"218d42a18ad62ab88cda2385a6d7b1c4d984f090"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ee28539c9602fb4bf782721e20f0bd122c5d5e32","unresolved":false,"context_lines":[{"line_number":4910,"context_line":"        raise ValueError(_(\"\u0027migration_statuses\u0027 must be \u0027dict\u0027.\"))"},{"line_number":4911,"context_line":""},{"line_number":4912,"context_line":"    conditions \u003d []"},{"line_number":4913,"context_line":"    for type, status in migration_statuses.items():"},{"line_number":4914,"context_line":"        if not isinstance(status, (list, tuple)):"},{"line_number":4915,"context_line":"            raise ValueError(_("},{"line_number":4916,"context_line":"                \"\u0027migration_status\u0027 must be \u0027list\u0027 or \u0027tuple\u0027.\"))"}],"source_content_type":"text/x-python","patch_set":48,"id":"5f4e5783_ca2c2849","line":4913,"range":{"start_line":4913,"start_character":8,"end_line":4913,"end_character":12},"updated":"2017-10-11 14:42:06.000000000","message":"same","commit_id":"218d42a18ad62ab88cda2385a6d7b1c4d984f090"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"4579c9185f39df6a9ab40c6d8cead05ffa27e92f","unresolved":false,"context_lines":[{"line_number":4910,"context_line":"        raise ValueError(_(\"\u0027migration_statuses\u0027 must be \u0027dict\u0027.\"))"},{"line_number":4911,"context_line":""},{"line_number":4912,"context_line":"    conditions \u003d []"},{"line_number":4913,"context_line":"    for type, status in migration_statuses.items():"},{"line_number":4914,"context_line":"        if not isinstance(status, (list, tuple)):"},{"line_number":4915,"context_line":"            raise ValueError(_("},{"line_number":4916,"context_line":"                \"\u0027migration_status\u0027 must be \u0027list\u0027 or \u0027tuple\u0027.\"))"}],"source_content_type":"text/x-python","patch_set":48,"id":"5f4e5783_44093a2a","line":4913,"range":{"start_line":4913,"start_character":8,"end_line":4913,"end_character":12},"in_reply_to":"5f4e5783_ca2c2849","updated":"2017-10-12 06:21:17.000000000","message":"Done","commit_id":"218d42a18ad62ab88cda2385a6d7b1c4d984f090"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ee28539c9602fb4bf782721e20f0bd122c5d5e32","unresolved":false,"context_lines":[{"line_number":4913,"context_line":"    for type, status in migration_statuses.items():"},{"line_number":4914,"context_line":"        if not isinstance(status, (list, tuple)):"},{"line_number":4915,"context_line":"            raise ValueError(_("},{"line_number":4916,"context_line":"                \"\u0027migration_status\u0027 must be \u0027list\u0027 or \u0027tuple\u0027.\"))"},{"line_number":4917,"context_line":"        conditions.append(and_("},{"line_number":4918,"context_line":"            models.Migration.migration_type \u003d\u003d type,"},{"line_number":4919,"context_line":"            models.Migration.status.in_(status)))"}],"source_content_type":"text/x-python","patch_set":48,"id":"5f4e5783_0a3360ad","line":4916,"updated":"2017-10-11 14:42:06.000000000","message":"same","commit_id":"218d42a18ad62ab88cda2385a6d7b1c4d984f090"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"4579c9185f39df6a9ab40c6d8cead05ffa27e92f","unresolved":false,"context_lines":[{"line_number":4913,"context_line":"    for type, status in migration_statuses.items():"},{"line_number":4914,"context_line":"        if not isinstance(status, (list, tuple)):"},{"line_number":4915,"context_line":"            raise ValueError(_("},{"line_number":4916,"context_line":"                \"\u0027migration_status\u0027 must be \u0027list\u0027 or \u0027tuple\u0027.\"))"},{"line_number":4917,"context_line":"        conditions.append(and_("},{"line_number":4918,"context_line":"            models.Migration.migration_type \u003d\u003d type,"},{"line_number":4919,"context_line":"            models.Migration.status.in_(status)))"}],"source_content_type":"text/x-python","patch_set":48,"id":"5f4e5783_0413425e","line":4916,"in_reply_to":"5f4e5783_0a3360ad","updated":"2017-10-12 06:21:17.000000000","message":"Done","commit_id":"218d42a18ad62ab88cda2385a6d7b1c4d984f090"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dd90fbec06daf26dd9f3601087f177bc51c3573b","unresolved":false,"context_lines":[{"line_number":4915,"context_line":"            raise ValueError(_("},{"line_number":4916,"context_line":"                \"\u0027migration_status\u0027 must be \u0027list\u0027 or \u0027tuple\u0027.\"))"},{"line_number":4917,"context_line":"        conditions.append(and_("},{"line_number":4918,"context_line":"            models.Migration.migration_type \u003d\u003d type,"},{"line_number":4919,"context_line":"            models.Migration.status.in_(status)))"},{"line_number":4920,"context_line":"    query \u003d model_query(context, models.Migration).\\"},{"line_number":4921,"context_line":"            filter_by(id\u003did).\\"}],"source_content_type":"text/x-python","patch_set":48,"id":"5f4e5783_2a63bc1c","line":4918,"range":{"start_line":4918,"start_character":12,"end_line":4918,"end_character":52},"updated":"2017-10-11 14:53:07.000000000","message":"Why are we filtering on type here when we have the migration id?","commit_id":"218d42a18ad62ab88cda2385a6d7b1c4d984f090"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"4579c9185f39df6a9ab40c6d8cead05ffa27e92f","unresolved":false,"context_lines":[{"line_number":4915,"context_line":"            raise ValueError(_("},{"line_number":4916,"context_line":"                \"\u0027migration_status\u0027 must be \u0027list\u0027 or \u0027tuple\u0027.\"))"},{"line_number":4917,"context_line":"        conditions.append(and_("},{"line_number":4918,"context_line":"            models.Migration.migration_type \u003d\u003d type,"},{"line_number":4919,"context_line":"            models.Migration.status.in_(status)))"},{"line_number":4920,"context_line":"    query \u003d model_query(context, models.Migration).\\"},{"line_number":4921,"context_line":"            filter_by(id\u003did).\\"}],"source_content_type":"text/x-python","patch_set":48,"id":"5f4e5783_e43b86c5","line":4918,"range":{"start_line":4918,"start_character":12,"end_line":4918,"end_character":52},"in_reply_to":"5f4e5783_2a63bc1c","updated":"2017-10-12 06:21:17.000000000","message":"Because in-progress status are different in each migration type. So the migration type condition has to be included in the query.","commit_id":"218d42a18ad62ab88cda2385a6d7b1c4d984f090"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9cd3143710689cfd53ff64268f61728292f3fe02","unresolved":false,"context_lines":[{"line_number":4919,"context_line":"            models.Migration.status.in_(status)))"},{"line_number":4920,"context_line":"    query \u003d model_query(context, models.Migration).\\"},{"line_number":4921,"context_line":"            filter_by(id\u003did).\\"},{"line_number":4922,"context_line":"            filter_by(instance_uuid\u003dinstance_uuid).\\"},{"line_number":4923,"context_line":"            filter(or_(*conditions))"},{"line_number":4924,"context_line":""},{"line_number":4925,"context_line":"    result \u003d query.all()"}],"source_content_type":"text/x-python","patch_set":48,"id":"5f4e5783_2a14dc9f","line":4922,"range":{"start_line":4922,"start_character":12,"end_line":4922,"end_character":52},"updated":"2017-10-11 14:48:11.000000000","message":"You don\u0027t need this if you\u0027re already filtering by the id primary key.","commit_id":"218d42a18ad62ab88cda2385a6d7b1c4d984f090"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"4579c9185f39df6a9ab40c6d8cead05ffa27e92f","unresolved":false,"context_lines":[{"line_number":4919,"context_line":"            models.Migration.status.in_(status)))"},{"line_number":4920,"context_line":"    query \u003d model_query(context, models.Migration).\\"},{"line_number":4921,"context_line":"            filter_by(id\u003did).\\"},{"line_number":4922,"context_line":"            filter_by(instance_uuid\u003dinstance_uuid).\\"},{"line_number":4923,"context_line":"            filter(or_(*conditions))"},{"line_number":4924,"context_line":""},{"line_number":4925,"context_line":"    result \u003d query.all()"}],"source_content_type":"text/x-python","patch_set":48,"id":"5f4e5783_844df273","line":4922,"range":{"start_line":4922,"start_character":12,"end_line":4922,"end_character":52},"in_reply_to":"5f4e5783_2a14dc9f","updated":"2017-10-12 06:21:17.000000000","message":"Please see my comment in nova/objects/migration.py.","commit_id":"218d42a18ad62ab88cda2385a6d7b1c4d984f090"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ee28539c9602fb4bf782721e20f0bd122c5d5e32","unresolved":false,"context_lines":[{"line_number":4925,"context_line":"    result \u003d query.all()"},{"line_number":4926,"context_line":""},{"line_number":4927,"context_line":"    if not result:"},{"line_number":4928,"context_line":"        raise exception.MigrationNotFoundOrNotInProgress(migration_id\u003did)"},{"line_number":4929,"context_line":""},{"line_number":4930,"context_line":"    return result[0]"},{"line_number":4931,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"5f4e5783_8ae3d005","line":4928,"range":{"start_line":4928,"start_character":24,"end_line":4928,"end_character":56},"updated":"2017-10-11 14:42:06.000000000","message":"Nothing about the name of this method says I can only pass in in-progress status values. Can\u0027t I query for all migrations in \u0027error\u0027 or \u0027failed\u0027 status? I assume you renamed the methods to remove the \"in_progress\" part to make them generic, but here you\u0027re making an assumption about the types of status values used for filtering which is wrong.","commit_id":"218d42a18ad62ab88cda2385a6d7b1c4d984f090"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"4579c9185f39df6a9ab40c6d8cead05ffa27e92f","unresolved":false,"context_lines":[{"line_number":4925,"context_line":"    result \u003d query.all()"},{"line_number":4926,"context_line":""},{"line_number":4927,"context_line":"    if not result:"},{"line_number":4928,"context_line":"        raise exception.MigrationNotFoundOrNotInProgress(migration_id\u003did)"},{"line_number":4929,"context_line":""},{"line_number":4930,"context_line":"    return result[0]"},{"line_number":4931,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"5f4e5783_c44aca53","line":4928,"range":{"start_line":4928,"start_character":24,"end_line":4928,"end_character":56},"in_reply_to":"5f4e5783_8ae3d005","updated":"2017-10-12 06:21:17.000000000","message":"You are right. Done.","commit_id":"218d42a18ad62ab88cda2385a6d7b1c4d984f090"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b4ca1841a5f56595130bbdeb896f8a7126edbd4d","unresolved":false,"context_lines":[{"line_number":4353,"context_line":""},{"line_number":4354,"context_line":""},{"line_number":4355,"context_line":"@pick_context_manager_reader"},{"line_number":4356,"context_line":"def migration_get_by_instance_and_statuses(context, instance_uuid,"},{"line_number":4357,"context_line":"                                           migration_type,"},{"line_number":4358,"context_line":"                                           migration_statuses):"},{"line_number":4359,"context_line":"    # Input check"}],"source_content_type":"text/x-python","patch_set":86,"id":"bf659307_634c02c8","line":4356,"range":{"start_line":4356,"start_character":4,"end_line":4356,"end_character":42},"updated":"2018-04-11 13:09:14.000000000","message":"nit: Should this be\n\n    migration_get_by_instance_type_and_statuses\n\nThat\u0027s pretty lengthy though, I guess. A docstring explaining why you\u0027d use this would be helpful","commit_id":"230ef75b7689db9e10390ff3480adca55707ac54"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"f4f9079e86dc4869ffe2fc0856ee382e07c389a2","unresolved":false,"context_lines":[{"line_number":4353,"context_line":""},{"line_number":4354,"context_line":""},{"line_number":4355,"context_line":"@pick_context_manager_reader"},{"line_number":4356,"context_line":"def migration_get_by_instance_and_statuses(context, instance_uuid,"},{"line_number":4357,"context_line":"                                           migration_type,"},{"line_number":4358,"context_line":"                                           migration_statuses):"},{"line_number":4359,"context_line":"    # Input check"}],"source_content_type":"text/x-python","patch_set":86,"id":"bf659307_ad2972e6","line":4356,"range":{"start_line":4356,"start_character":4,"end_line":4356,"end_character":42},"in_reply_to":"bf659307_5a9bd816","updated":"2018-04-13 05:58:43.000000000","message":"The docstring has been added in  nova/db/api.py.","commit_id":"230ef75b7689db9e10390ff3480adca55707ac54"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"d17720cbc1e67131dd225188957c2f3ddc18f0cf","unresolved":false,"context_lines":[{"line_number":4353,"context_line":""},{"line_number":4354,"context_line":""},{"line_number":4355,"context_line":"@pick_context_manager_reader"},{"line_number":4356,"context_line":"def migration_get_by_instance_and_statuses(context, instance_uuid,"},{"line_number":4357,"context_line":"                                           migration_type,"},{"line_number":4358,"context_line":"                                           migration_statuses):"},{"line_number":4359,"context_line":"    # Input check"}],"source_content_type":"text/x-python","patch_set":86,"id":"bf659307_5a9bd816","line":4356,"range":{"start_line":4356,"start_character":4,"end_line":4356,"end_character":42},"in_reply_to":"bf659307_634c02c8","updated":"2018-04-11 17:35:37.000000000","message":"+1 for adding a docstring, especially for migration_statuses.\nI\u0027d like to see a sample of migration_statues also on that.","commit_id":"230ef75b7689db9e10390ff3480adca55707ac54"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"f4f9079e86dc4869ffe2fc0856ee382e07c389a2","unresolved":false,"context_lines":[{"line_number":4353,"context_line":""},{"line_number":4354,"context_line":""},{"line_number":4355,"context_line":"@pick_context_manager_reader"},{"line_number":4356,"context_line":"def migration_get_by_instance_and_statuses(context, instance_uuid,"},{"line_number":4357,"context_line":"                                           migration_type,"},{"line_number":4358,"context_line":"                                           migration_statuses):"},{"line_number":4359,"context_line":"    # Input check"}],"source_content_type":"text/x-python","patch_set":86,"id":"bf659307_0d365e52","line":4356,"range":{"start_line":4356,"start_character":4,"end_line":4356,"end_character":42},"in_reply_to":"bf659307_634c02c8","updated":"2018-04-13 05:58:43.000000000","message":"Done","commit_id":"230ef75b7689db9e10390ff3480adca55707ac54"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b4ca1841a5f56595130bbdeb896f8a7126edbd4d","unresolved":false,"context_lines":[{"line_number":4356,"context_line":"def migration_get_by_instance_and_statuses(context, instance_uuid,"},{"line_number":4357,"context_line":"                                           migration_type,"},{"line_number":4358,"context_line":"                                           migration_statuses):"},{"line_number":4359,"context_line":"    # Input check"},{"line_number":4360,"context_line":"    if not isinstance(migration_statuses, dict):"},{"line_number":4361,"context_line":"        raise ValueError(_(\"\u0027migration_statuses\u0027 must be \u0027dict\u0027.\"))"},{"line_number":4362,"context_line":""},{"line_number":4363,"context_line":"    if migration_type:"},{"line_number":4364,"context_line":"        migration_status \u003d migration_statuses.get(migration_type, [])"}],"source_content_type":"text/x-python","patch_set":86,"id":"bf659307_c33cee30","line":4361,"range":{"start_line":4359,"start_character":0,"end_line":4361,"end_character":67},"updated":"2018-04-11 13:09:14.000000000","message":"side note: This is exactly the kind of thing mypy would resolve for us","commit_id":"230ef75b7689db9e10390ff3480adca55707ac54"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"d17720cbc1e67131dd225188957c2f3ddc18f0cf","unresolved":false,"context_lines":[{"line_number":4364,"context_line":"        migration_status \u003d migration_statuses.get(migration_type, [])"},{"line_number":4365,"context_line":"        if not isinstance(migration_status, (list, tuple)):"},{"line_number":4366,"context_line":"            raise ValueError(_("},{"line_number":4367,"context_line":"                    \"\u0027migration_statuses\u0027 is a dict, keyed by migration type, \""},{"line_number":4368,"context_line":"                    \"to a list or a tuple of migration status values.\"))"},{"line_number":4369,"context_line":""},{"line_number":4370,"context_line":"        query \u003d model_query(context, models.Migration).\\"}],"source_content_type":"text/x-python","patch_set":86,"id":"bf659307_3a4dc499","line":4367,"range":{"start_line":4367,"start_character":41,"end_line":4367,"end_character":45},"updated":"2018-04-11 17:35:37.000000000","message":"s/is/should be/","commit_id":"230ef75b7689db9e10390ff3480adca55707ac54"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"f4f9079e86dc4869ffe2fc0856ee382e07c389a2","unresolved":false,"context_lines":[{"line_number":4364,"context_line":"        migration_status \u003d migration_statuses.get(migration_type, [])"},{"line_number":4365,"context_line":"        if not isinstance(migration_status, (list, tuple)):"},{"line_number":4366,"context_line":"            raise ValueError(_("},{"line_number":4367,"context_line":"                    \"\u0027migration_statuses\u0027 is a dict, keyed by migration type, \""},{"line_number":4368,"context_line":"                    \"to a list or a tuple of migration status values.\"))"},{"line_number":4369,"context_line":""},{"line_number":4370,"context_line":"        query \u003d model_query(context, models.Migration).\\"}],"source_content_type":"text/x-python","patch_set":86,"id":"bf659307_6d74bafe","line":4367,"range":{"start_line":4367,"start_character":41,"end_line":4367,"end_character":45},"in_reply_to":"bf659307_3a4dc499","updated":"2018-04-13 05:58:43.000000000","message":"Done","commit_id":"230ef75b7689db9e10390ff3480adca55707ac54"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b4ca1841a5f56595130bbdeb896f8a7126edbd4d","unresolved":false,"context_lines":[{"line_number":4369,"context_line":""},{"line_number":4370,"context_line":"        query \u003d model_query(context, models.Migration).\\"},{"line_number":4371,"context_line":"                filter_by(instance_uuid\u003dinstance_uuid).\\"},{"line_number":4372,"context_line":"                filter(models.Migration.status.in_(migration_status)).\\"},{"line_number":4373,"context_line":"                filter(models.Migration.migration_type \u003d\u003d migration_type)"},{"line_number":4374,"context_line":"    else:"},{"line_number":4375,"context_line":"        conditions \u003d []"},{"line_number":4376,"context_line":"        for mig_type, status in migration_statuses.items():"}],"source_content_type":"text/x-python","patch_set":86,"id":"bf659307_03a18646","line":4373,"range":{"start_line":4372,"start_character":0,"end_line":4373,"end_character":73},"updated":"2018-04-11 13:09:14.000000000","message":"nit: If you moved the \u0027conditions\u0027 list up and appended these conditions like you do below, the similarities between the two branches would become more obvious","commit_id":"230ef75b7689db9e10390ff3480adca55707ac54"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"d17720cbc1e67131dd225188957c2f3ddc18f0cf","unresolved":false,"context_lines":[{"line_number":4376,"context_line":"        for mig_type, status in migration_statuses.items():"},{"line_number":4377,"context_line":"            if not isinstance(status, (list, tuple)):"},{"line_number":4378,"context_line":"                raise ValueError(_("},{"line_number":4379,"context_line":"                    \"\u0027migration_statuses\u0027 is a dict, keyed by migration \""},{"line_number":4380,"context_line":"                    \"type, to a list or a tuple of migration status values.\"))"},{"line_number":4381,"context_line":"            conditions.append(and_("},{"line_number":4382,"context_line":"                models.Migration.migration_type \u003d\u003d mig_type,"}],"source_content_type":"text/x-python","patch_set":86,"id":"bf659307_ba60f402","line":4379,"range":{"start_line":4379,"start_character":41,"end_line":4379,"end_character":44},"updated":"2018-04-11 17:35:37.000000000","message":"ditto","commit_id":"230ef75b7689db9e10390ff3480adca55707ac54"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"f4f9079e86dc4869ffe2fc0856ee382e07c389a2","unresolved":false,"context_lines":[{"line_number":4376,"context_line":"        for mig_type, status in migration_statuses.items():"},{"line_number":4377,"context_line":"            if not isinstance(status, (list, tuple)):"},{"line_number":4378,"context_line":"                raise ValueError(_("},{"line_number":4379,"context_line":"                    \"\u0027migration_statuses\u0027 is a dict, keyed by migration \""},{"line_number":4380,"context_line":"                    \"type, to a list or a tuple of migration status values.\"))"},{"line_number":4381,"context_line":"            conditions.append(and_("},{"line_number":4382,"context_line":"                models.Migration.migration_type \u003d\u003d mig_type,"}],"source_content_type":"text/x-python","patch_set":86,"id":"bf659307_4dcc5634","line":4379,"range":{"start_line":4379,"start_character":41,"end_line":4379,"end_character":44},"in_reply_to":"bf659307_ba60f402","updated":"2018-04-13 05:58:43.000000000","message":"Done","commit_id":"230ef75b7689db9e10390ff3480adca55707ac54"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b4ca1841a5f56595130bbdeb896f8a7126edbd4d","unresolved":false,"context_lines":[{"line_number":4389,"context_line":""},{"line_number":4390,"context_line":""},{"line_number":4391,"context_line":"@pick_context_manager_reader"},{"line_number":4392,"context_line":"def migration_get_by_id_instance_and_statuses(context, id, instance_uuid,"},{"line_number":4393,"context_line":"                                              migration_statuses):"},{"line_number":4394,"context_line":"    # Input check"},{"line_number":4395,"context_line":"    if not isinstance(migration_statuses, dict):"}],"source_content_type":"text/x-python","patch_set":86,"id":"bf659307_03bae66c","line":4392,"range":{"start_line":4392,"start_character":55,"end_line":4392,"end_character":57},"updated":"2018-04-11 13:09:14.000000000","message":"nit: migration_id? (unless id common here, in which case ignore this)","commit_id":"230ef75b7689db9e10390ff3480adca55707ac54"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"f4f9079e86dc4869ffe2fc0856ee382e07c389a2","unresolved":false,"context_lines":[{"line_number":4389,"context_line":""},{"line_number":4390,"context_line":""},{"line_number":4391,"context_line":"@pick_context_manager_reader"},{"line_number":4392,"context_line":"def migration_get_by_id_instance_and_statuses(context, id, instance_uuid,"},{"line_number":4393,"context_line":"                                              migration_statuses):"},{"line_number":4394,"context_line":"    # Input check"},{"line_number":4395,"context_line":"    if not isinstance(migration_statuses, dict):"}],"source_content_type":"text/x-python","patch_set":86,"id":"bf659307_8da4ae4c","line":4392,"range":{"start_line":4392,"start_character":55,"end_line":4392,"end_character":57},"in_reply_to":"bf659307_03bae66c","updated":"2018-04-13 05:58:43.000000000","message":"See line 4259, 4267, 4291. the \u0027id\u0027 is common here.","commit_id":"230ef75b7689db9e10390ff3480adca55707ac54"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"d17720cbc1e67131dd225188957c2f3ddc18f0cf","unresolved":false,"context_lines":[{"line_number":4399,"context_line":"    for mig_type, status in migration_statuses.items():"},{"line_number":4400,"context_line":"        if not isinstance(status, (list, tuple)):"},{"line_number":4401,"context_line":"            raise ValueError(_("},{"line_number":4402,"context_line":"                \"\u0027migration_statuses\u0027 is a dict, keyed by migration \""},{"line_number":4403,"context_line":"                \"type, to a list or a tuple of migration status values.\"))"},{"line_number":4404,"context_line":"        conditions.append(and_("},{"line_number":4405,"context_line":"            models.Migration.migration_type \u003d\u003d mig_type,"}],"source_content_type":"text/x-python","patch_set":86,"id":"bf659307_3a32a411","line":4402,"range":{"start_line":4402,"start_character":38,"end_line":4402,"end_character":40},"updated":"2018-04-11 17:35:37.000000000","message":"ditto","commit_id":"230ef75b7689db9e10390ff3480adca55707ac54"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"f4f9079e86dc4869ffe2fc0856ee382e07c389a2","unresolved":false,"context_lines":[{"line_number":4399,"context_line":"    for mig_type, status in migration_statuses.items():"},{"line_number":4400,"context_line":"        if not isinstance(status, (list, tuple)):"},{"line_number":4401,"context_line":"            raise ValueError(_("},{"line_number":4402,"context_line":"                \"\u0027migration_statuses\u0027 is a dict, keyed by migration \""},{"line_number":4403,"context_line":"                \"type, to a list or a tuple of migration status values.\"))"},{"line_number":4404,"context_line":"        conditions.append(and_("},{"line_number":4405,"context_line":"            models.Migration.migration_type \u003d\u003d mig_type,"}],"source_content_type":"text/x-python","patch_set":86,"id":"bf659307_0d6e5eff","line":4402,"range":{"start_line":4402,"start_character":38,"end_line":4402,"end_character":40},"in_reply_to":"bf659307_3a32a411","updated":"2018-04-13 05:58:43.000000000","message":"Done","commit_id":"230ef75b7689db9e10390ff3480adca55707ac54"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"6dac966277961405c3c01146aad7fb3f7a23f79a","unresolved":false,"context_lines":[{"line_number":4353,"context_line":""},{"line_number":4354,"context_line":""},{"line_number":4355,"context_line":"@pick_context_manager_reader"},{"line_number":4356,"context_line":"def migration_get_by_instance_type_and_statuses(context, instance_uuid,"},{"line_number":4357,"context_line":"                                                migration_type,"},{"line_number":4358,"context_line":"                                                migration_statuses):"},{"line_number":4359,"context_line":"    # Input check"}],"source_content_type":"text/x-python","patch_set":88,"id":"9f6a8fd7_723d15ba","line":4356,"range":{"start_line":4356,"start_character":21,"end_line":4356,"end_character":34},"updated":"2018-04-17 08:17:08.000000000","message":"ditto, not -1 on this, just asking if there could be a better name.","commit_id":"47e84f18253741ba7b68611d1b442f2717017ac1"}],"nova/exception.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"7fd66bf363d2bd0ab7a8ddd362289ad11c007685","unresolved":false,"context_lines":[{"line_number":1109,"context_line":"                \"%(instance_id)s\")"},{"line_number":1110,"context_line":""},{"line_number":1111,"context_line":""},{"line_number":1112,"context_line":"class MigrationNotFoundOrNotInProgress(MigrationNotFound):"},{"line_number":1113,"context_line":"    msg_fmt \u003d _(\"Migration %(migration_id)s not found or not in progress.\")"},{"line_number":1114,"context_line":""},{"line_number":1115,"context_line":""}],"source_content_type":"text/x-python","patch_set":46,"id":"7f515b1d_096ce699","line":1112,"updated":"2017-10-02 10:31:32.000000000","message":"This is an unfortunate bit of ambiguity. I recognize that is fits with how the query which raises it operates, but as the caller I\u0027d be shaking my tiny fist: Well which is it you bastards!","commit_id":"564bb59db01adfd73b269b0c8483d04ddf90fac0"}],"nova/objects/fields.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"877484b9799a0b4a24b6eb5f53905db7a6b61cb5","unresolved":false,"context_lines":[{"line_number":1050,"context_line":"    REVERTING \u003d \u0027reverting\u0027"},{"line_number":1051,"context_line":"    RUNNING \u003d \u0027running\u0027"},{"line_number":1052,"context_line":"    RUNNING_POST_COPY \u003d \u0027running (post-copy)\u0027"},{"line_number":1053,"context_line":""},{"line_number":1054,"context_line":"    LIVE_MIGRATION_IN_PROGRESS \u003d (POST_MIGRATING, PREPARING, QUEUED, RUNNING)"},{"line_number":1055,"context_line":"    MIGRATION_RESIZE_IN_PROGRESS \u003d (MIGRATING, POST_MIGRATING, PRE_MIGRATING)"},{"line_number":1056,"context_line":"    EVACUATION_IN_PROGRESS \u003d (ACCEPTED, PRE_MIGRATING)"}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_04165aa9","line":1053,"updated":"2017-05-22 14:36:35.000000000","message":"General suggestion on the IN_PROGRESS tuples below - it would be nice to see this sorted in order of when they happen, so for example post-migrating doesn\u0027t come first.","commit_id":"8db8120ed97c89b558a1a5313b3357feb3351cba"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"13de36ba69f76b4d6fdd4fdf1214d3febbfc0990","unresolved":false,"context_lines":[{"line_number":1050,"context_line":"    REVERTING \u003d \u0027reverting\u0027"},{"line_number":1051,"context_line":"    RUNNING \u003d \u0027running\u0027"},{"line_number":1052,"context_line":"    RUNNING_POST_COPY \u003d \u0027running (post-copy)\u0027"},{"line_number":1053,"context_line":""},{"line_number":1054,"context_line":"    LIVE_MIGRATION_IN_PROGRESS \u003d (POST_MIGRATING, PREPARING, QUEUED, RUNNING)"},{"line_number":1055,"context_line":"    MIGRATION_RESIZE_IN_PROGRESS \u003d (MIGRATING, POST_MIGRATING, PRE_MIGRATING)"},{"line_number":1056,"context_line":"    EVACUATION_IN_PROGRESS \u003d (ACCEPTED, PRE_MIGRATING)"}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_18b46cf1","line":1053,"in_reply_to":"ff0f0b1f_04165aa9","updated":"2017-05-23 04:36:29.000000000","message":"Done","commit_id":"8db8120ed97c89b558a1a5313b3357feb3351cba"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"877484b9799a0b4a24b6eb5f53905db7a6b61cb5","unresolved":false,"context_lines":[{"line_number":1051,"context_line":"    RUNNING \u003d \u0027running\u0027"},{"line_number":1052,"context_line":"    RUNNING_POST_COPY \u003d \u0027running (post-copy)\u0027"},{"line_number":1053,"context_line":""},{"line_number":1054,"context_line":"    LIVE_MIGRATION_IN_PROGRESS \u003d (POST_MIGRATING, PREPARING, QUEUED, RUNNING)"},{"line_number":1055,"context_line":"    MIGRATION_RESIZE_IN_PROGRESS \u003d (MIGRATING, POST_MIGRATING, PRE_MIGRATING)"},{"line_number":1056,"context_line":"    EVACUATION_IN_PROGRESS \u003d (ACCEPTED, PRE_MIGRATING)"},{"line_number":1057,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_d90ccfa6","line":1054,"range":{"start_line":1054,"start_character":4,"end_line":1054,"end_character":77},"updated":"2017-05-22 14:36:35.000000000","message":"Just a question, but why isn\u0027t \"running (post-copy)\" in this list? That\u0027s certainly an in-progress live migration. Maybe it\u0027s one that you can\u0027t abort or cancel, but it\u0027s in-progress.","commit_id":"8db8120ed97c89b558a1a5313b3357feb3351cba"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"13de36ba69f76b4d6fdd4fdf1214d3febbfc0990","unresolved":false,"context_lines":[{"line_number":1051,"context_line":"    RUNNING \u003d \u0027running\u0027"},{"line_number":1052,"context_line":"    RUNNING_POST_COPY \u003d \u0027running (post-copy)\u0027"},{"line_number":1053,"context_line":""},{"line_number":1054,"context_line":"    LIVE_MIGRATION_IN_PROGRESS \u003d (POST_MIGRATING, PREPARING, QUEUED, RUNNING)"},{"line_number":1055,"context_line":"    MIGRATION_RESIZE_IN_PROGRESS \u003d (MIGRATING, POST_MIGRATING, PRE_MIGRATING)"},{"line_number":1056,"context_line":"    EVACUATION_IN_PROGRESS \u003d (ACCEPTED, PRE_MIGRATING)"},{"line_number":1057,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_f8e9b8b6","line":1054,"range":{"start_line":1054,"start_character":4,"end_line":1054,"end_character":77},"in_reply_to":"ff0f0b1f_d90ccfa6","updated":"2017-05-23 04:36:29.000000000","message":"Because \"running (post-copy)\" is not in the list originally.\n\nhttps://github.com/openstack/nova/blob/4aad7fd9285bd87f9128c6b3a9dfa3aca1a677ef/nova/db/sqlalchemy/api.py#L4798-L4800\nhttps://github.com/openstack/nova/blob/4aad7fd9285bd87f9128c6b3a9dfa3aca1a677ef/nova/api/openstack/compute/migrations.py#L45-L46","commit_id":"8db8120ed97c89b558a1a5313b3357feb3351cba"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"877484b9799a0b4a24b6eb5f53905db7a6b61cb5","unresolved":false,"context_lines":[{"line_number":1052,"context_line":"    RUNNING_POST_COPY \u003d \u0027running (post-copy)\u0027"},{"line_number":1053,"context_line":""},{"line_number":1054,"context_line":"    LIVE_MIGRATION_IN_PROGRESS \u003d (POST_MIGRATING, PREPARING, QUEUED, RUNNING)"},{"line_number":1055,"context_line":"    MIGRATION_RESIZE_IN_PROGRESS \u003d (MIGRATING, POST_MIGRATING, PRE_MIGRATING)"},{"line_number":1056,"context_line":"    EVACUATION_IN_PROGRESS \u003d (ACCEPTED, PRE_MIGRATING)"},{"line_number":1057,"context_line":""},{"line_number":1058,"context_line":"    ALL \u003d (ACCEPTED, CANCELED, COMPLETED, CONFIRMED, CONFIRMING, DONE, ERROR,"}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_d9be0fb3","line":1055,"range":{"start_line":1055,"start_character":4,"end_line":1055,"end_character":77},"updated":"2017-05-22 14:36:35.000000000","message":"It seems odd that reverting and confirming aren\u0027t in this list, but I suppose that\u0027s because you can\u0027t abort a resize in those states? I don\u0027t really like how the in-progress status is tied to the abort spec, which I don\u0027t think even covers resize, does it?\n\nI think I would prefer that we list/show in-progress migrations when they really are in progress, unless we have different ideas about what being in progress means. I don\u0027t like coupling the definition of in progress to what can be aborted though. I\u0027d rather see the abort API have a whitelist of which in-progress statuses are acceptable/supported for aborting a migration, rather than bake that into the status definition.\n\nMaybe I\u0027m missing something here. I also don\u0027t want to get bogged down in definitions, but this does affect the API so I think it matters to have a clear understanding.","commit_id":"8db8120ed97c89b558a1a5313b3357feb3351cba"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"13de36ba69f76b4d6fdd4fdf1214d3febbfc0990","unresolved":false,"context_lines":[{"line_number":1052,"context_line":"    RUNNING_POST_COPY \u003d \u0027running (post-copy)\u0027"},{"line_number":1053,"context_line":""},{"line_number":1054,"context_line":"    LIVE_MIGRATION_IN_PROGRESS \u003d (POST_MIGRATING, PREPARING, QUEUED, RUNNING)"},{"line_number":1055,"context_line":"    MIGRATION_RESIZE_IN_PROGRESS \u003d (MIGRATING, POST_MIGRATING, PRE_MIGRATING)"},{"line_number":1056,"context_line":"    EVACUATION_IN_PROGRESS \u003d (ACCEPTED, PRE_MIGRATING)"},{"line_number":1057,"context_line":""},{"line_number":1058,"context_line":"    ALL \u003d (ACCEPTED, CANCELED, COMPLETED, CONFIRMED, CONFIRMING, DONE, ERROR,"}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_733029e9","line":1055,"range":{"start_line":1055,"start_character":4,"end_line":1055,"end_character":77},"in_reply_to":"ff0f0b1f_d9be0fb3","updated":"2017-05-23 04:36:29.000000000","message":"\u003e It seems odd that reverting and confirming aren\u0027t in this list, but I suppose that\u0027s because you can\u0027t abort a resize in those states?\n\nYes. (Because we can\u0027t abort a resize in those states.)\n\n\u003e I don\u0027t really like how the in-progress status is tied to the abort spec, which I don\u0027t think even covers resize, does it?\n\n\"abort cold migration\" does not cover the resize operation (only covers cold migration case).\n\n\u003e I think I would prefer that we list/show in-progress migrations when they really are in progress, unless we have different ideas about what being in progress means.\n\u003e I don\u0027t like coupling the definition of in progress to what can be aborted though.\n\u003e I\u0027d rather see the abort API have a whitelist of which in-progress statuses are acceptable/supported for aborting a migration,\n\u003e rather than bake that into the status definition.\n\nAdded CONFIRMING and REVERTING.\nDone.\nI will also amend the spec.","commit_id":"8db8120ed97c89b558a1a5313b3357feb3351cba"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"877484b9799a0b4a24b6eb5f53905db7a6b61cb5","unresolved":false,"context_lines":[{"line_number":1053,"context_line":""},{"line_number":1054,"context_line":"    LIVE_MIGRATION_IN_PROGRESS \u003d (POST_MIGRATING, PREPARING, QUEUED, RUNNING)"},{"line_number":1055,"context_line":"    MIGRATION_RESIZE_IN_PROGRESS \u003d (MIGRATING, POST_MIGRATING, PRE_MIGRATING)"},{"line_number":1056,"context_line":"    EVACUATION_IN_PROGRESS \u003d (ACCEPTED, PRE_MIGRATING)"},{"line_number":1057,"context_line":""},{"line_number":1058,"context_line":"    ALL \u003d (ACCEPTED, CANCELED, COMPLETED, CONFIRMED, CONFIRMING, DONE, ERROR,"},{"line_number":1059,"context_line":"           FAILED, FINISHED, MIGRATING, POST_MIGRATING, PREPARING,"}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_590c3f40","line":1056,"range":{"start_line":1056,"start_character":4,"end_line":1056,"end_character":54},"updated":"2017-05-22 14:36:35.000000000","message":"It\u0027s odd that we don\u0027t have an \u0027evacuating\u0027 status. We go from pre-migrating to done or failed. That seems like a bug, or something we should change if we\u0027re going to expose these out of the API - but that is going to make this more complicated too (you\u0027d need to make that change at the bottom of the series I think).","commit_id":"8db8120ed97c89b558a1a5313b3357feb3351cba"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"13de36ba69f76b4d6fdd4fdf1214d3febbfc0990","unresolved":false,"context_lines":[{"line_number":1053,"context_line":""},{"line_number":1054,"context_line":"    LIVE_MIGRATION_IN_PROGRESS \u003d (POST_MIGRATING, PREPARING, QUEUED, RUNNING)"},{"line_number":1055,"context_line":"    MIGRATION_RESIZE_IN_PROGRESS \u003d (MIGRATING, POST_MIGRATING, PRE_MIGRATING)"},{"line_number":1056,"context_line":"    EVACUATION_IN_PROGRESS \u003d (ACCEPTED, PRE_MIGRATING)"},{"line_number":1057,"context_line":""},{"line_number":1058,"context_line":"    ALL \u003d (ACCEPTED, CANCELED, COMPLETED, CONFIRMED, CONFIRMING, DONE, ERROR,"},{"line_number":1059,"context_line":"           FAILED, FINISHED, MIGRATING, POST_MIGRATING, PREPARING,"}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_53ebe511","line":1056,"range":{"start_line":1056,"start_character":4,"end_line":1056,"end_character":54},"in_reply_to":"ff0f0b1f_590c3f40","updated":"2017-05-23 04:36:29.000000000","message":"I agree with your opinion.\nBut it is not in the range of the spec.","commit_id":"8db8120ed97c89b558a1a5313b3357feb3351cba"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d47deab47cf29388df9888817b8bef8c8bf2506b","unresolved":false,"context_lines":[{"line_number":1061,"context_line":"    RUNNING \u003d \u0027running\u0027"},{"line_number":1062,"context_line":"    RUNNING_POST_COPY \u003d \u0027running (post-copy)\u0027"},{"line_number":1063,"context_line":""},{"line_number":1064,"context_line":"    LIVE_MIGRATION_IN_PROGRESS \u003d (QUEUED, PREPARING, RUNNING, POST_MIGRATING)"},{"line_number":1065,"context_line":"    MIGRATION_RESIZE_IN_PROGRESS \u003d (PRE_MIGRATING, MIGRATING, POST_MIGRATING,"},{"line_number":1066,"context_line":"                                    CONFIRMING, REVERTING)"},{"line_number":1067,"context_line":"    EVACUATION_IN_PROGRESS \u003d (ACCEPTED, PRE_MIGRATING)"}],"source_content_type":"text/x-python","patch_set":26,"id":"7f231b9d_5df3739f","line":1064,"range":{"start_line":1064,"start_character":62,"end_line":1064,"end_character":76},"updated":"2017-06-12 07:58:54.000000000","message":"Emm...strange, I didn\u0027t found where the live-migration action set the status as POST_MIGRATING, would you mind point it to me?","commit_id":"1ab4a920e1653ca4fcc78aea68453e3c78718259"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"0ba5a680dd92ad2fe79d7ca088feacbac0ad79d4","unresolved":false,"context_lines":[{"line_number":1061,"context_line":"    RUNNING \u003d \u0027running\u0027"},{"line_number":1062,"context_line":"    RUNNING_POST_COPY \u003d \u0027running (post-copy)\u0027"},{"line_number":1063,"context_line":""},{"line_number":1064,"context_line":"    LIVE_MIGRATION_IN_PROGRESS \u003d (QUEUED, PREPARING, RUNNING, POST_MIGRATING)"},{"line_number":1065,"context_line":"    MIGRATION_RESIZE_IN_PROGRESS \u003d (PRE_MIGRATING, MIGRATING, POST_MIGRATING,"},{"line_number":1066,"context_line":"                                    CONFIRMING, REVERTING)"},{"line_number":1067,"context_line":"    EVACUATION_IN_PROGRESS \u003d (ACCEPTED, PRE_MIGRATING)"}],"source_content_type":"text/x-python","patch_set":26,"id":"7f231b9d_3e327860","line":1064,"range":{"start_line":1064,"start_character":62,"end_line":1064,"end_character":76},"in_reply_to":"7f231b9d_508e6ad0","updated":"2017-06-15 06:11:36.000000000","message":"O.K.\nI will submit the fix after the patch series including this patch are merged.","commit_id":"1ab4a920e1653ca4fcc78aea68453e3c78718259"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"79c265efbc3b28b0c28cff06c33651881089bd9a","unresolved":false,"context_lines":[{"line_number":1061,"context_line":"    RUNNING \u003d \u0027running\u0027"},{"line_number":1062,"context_line":"    RUNNING_POST_COPY \u003d \u0027running (post-copy)\u0027"},{"line_number":1063,"context_line":""},{"line_number":1064,"context_line":"    LIVE_MIGRATION_IN_PROGRESS \u003d (QUEUED, PREPARING, RUNNING, POST_MIGRATING)"},{"line_number":1065,"context_line":"    MIGRATION_RESIZE_IN_PROGRESS \u003d (PRE_MIGRATING, MIGRATING, POST_MIGRATING,"},{"line_number":1066,"context_line":"                                    CONFIRMING, REVERTING)"},{"line_number":1067,"context_line":"    EVACUATION_IN_PROGRESS \u003d (ACCEPTED, PRE_MIGRATING)"}],"source_content_type":"text/x-python","patch_set":26,"id":"7f231b9d_fedfaed3","line":1064,"range":{"start_line":1064,"start_character":62,"end_line":1064,"end_character":76},"in_reply_to":"7f231b9d_5df3739f","updated":"2017-06-13 07:09:56.000000000","message":"The statuses in progress are defined originally.\nSo I keep them as they are. \n\nhttps://github.com/openstack/nova/blob/3a5d592e607176f4159ff65b6df0e2b552156aaf/nova/api/openstack/compute/server_migrations.py#L127","commit_id":"1ab4a920e1653ca4fcc78aea68453e3c78718259"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"220be5bf5ade3de6078b96e5ab6c55b023360589","unresolved":false,"context_lines":[{"line_number":1061,"context_line":"    RUNNING \u003d \u0027running\u0027"},{"line_number":1062,"context_line":"    RUNNING_POST_COPY \u003d \u0027running (post-copy)\u0027"},{"line_number":1063,"context_line":""},{"line_number":1064,"context_line":"    LIVE_MIGRATION_IN_PROGRESS \u003d (QUEUED, PREPARING, RUNNING, POST_MIGRATING)"},{"line_number":1065,"context_line":"    MIGRATION_RESIZE_IN_PROGRESS \u003d (PRE_MIGRATING, MIGRATING, POST_MIGRATING,"},{"line_number":1066,"context_line":"                                    CONFIRMING, REVERTING)"},{"line_number":1067,"context_line":"    EVACUATION_IN_PROGRESS \u003d (ACCEPTED, PRE_MIGRATING)"}],"source_content_type":"text/x-python","patch_set":26,"id":"7f231b9d_508e6ad0","line":1064,"range":{"start_line":1064,"start_character":62,"end_line":1064,"end_character":76},"in_reply_to":"7f231b9d_fedfaed3","updated":"2017-06-14 03:32:02.000000000","message":"but that looks like a mistake, would you mind send a patch to fix that?","commit_id":"1ab4a920e1653ca4fcc78aea68453e3c78718259"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"20794c5b26ccd813440ec15ee128c91b6c12dbc8","unresolved":false,"context_lines":[{"line_number":1084,"context_line":"    RUNNING \u003d \u0027running\u0027"},{"line_number":1085,"context_line":"    RUNNING_POST_COPY \u003d \u0027running (post-copy)\u0027"},{"line_number":1086,"context_line":""},{"line_number":1087,"context_line":"    LIVE_MIGRATION_IN_PROGRESS \u003d (QUEUED, PREPARING, RUNNING, POST_MIGRATING)"},{"line_number":1088,"context_line":"    MIGRATION_RESIZE_IN_PROGRESS \u003d (PRE_MIGRATING, MIGRATING, POST_MIGRATING,"},{"line_number":1089,"context_line":"                                    CONFIRMING, REVERTING)"},{"line_number":1090,"context_line":"    EVACUATION_IN_PROGRESS \u003d (ACCEPTED, PRE_MIGRATING)"}],"source_content_type":"text/x-python","patch_set":48,"id":"5f4e5783_6fd418be","line":1087,"range":{"start_line":1087,"start_character":33,"end_line":1087,"end_character":77},"updated":"2017-10-11 22:30:07.000000000","message":"Why don\u0027t we consider \u0027accepted\u0027 as in-progress for live migration?\n\nhttps://github.com/openstack/nova/blob/master/nova/conductor/manager.py#L404\n\nThat\u0027s the status that the live migration task in conductor sets for the initial live migration status, same for the API setting the initial evacuate migration status to \u0027accepted\u0027.\n\nI know you have these values in here because that\u0027s what is in the existing in-progress live migration API code, but I think they are wrong to exclude \u0027accepted\u0027.","commit_id":"218d42a18ad62ab88cda2385a6d7b1c4d984f090"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d9f205a26a1bc16b7eae6d780a3d910bc117eef6","unresolved":false,"context_lines":[{"line_number":1084,"context_line":"    RUNNING \u003d \u0027running\u0027"},{"line_number":1085,"context_line":"    RUNNING_POST_COPY \u003d \u0027running (post-copy)\u0027"},{"line_number":1086,"context_line":""},{"line_number":1087,"context_line":"    LIVE_MIGRATION_IN_PROGRESS \u003d (QUEUED, PREPARING, RUNNING, POST_MIGRATING)"},{"line_number":1088,"context_line":"    MIGRATION_RESIZE_IN_PROGRESS \u003d (PRE_MIGRATING, MIGRATING, POST_MIGRATING,"},{"line_number":1089,"context_line":"                                    CONFIRMING, REVERTING)"},{"line_number":1090,"context_line":"    EVACUATION_IN_PROGRESS \u003d (ACCEPTED, PRE_MIGRATING)"}],"source_content_type":"text/x-python","patch_set":48,"id":"5f4e5783_c52bed7f","line":1087,"range":{"start_line":1087,"start_character":33,"end_line":1087,"end_character":77},"in_reply_to":"5f4e5783_6fd418be","updated":"2017-10-11 23:36:54.000000000","message":"I guess this was intentional:\n\nhttps://review.openstack.org/#/c/244486/","commit_id":"218d42a18ad62ab88cda2385a6d7b1c4d984f090"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b3b0ad3047117a632b6d61b99fb56dabba691722","unresolved":false,"context_lines":[{"line_number":1108,"context_line":"    RUNNING \u003d \u0027running\u0027"},{"line_number":1109,"context_line":"    RUNNING_POST_COPY \u003d \u0027running (post-copy)\u0027"},{"line_number":1110,"context_line":""},{"line_number":1111,"context_line":"    LIVE_MIGRATION_IN_PROGRESS \u003d (QUEUED, PREPARING, RUNNING, POST_MIGRATING)"},{"line_number":1112,"context_line":"    MIGRATION_RESIZE_IN_PROGRESS \u003d (PRE_MIGRATING, MIGRATING, POST_MIGRATING,"},{"line_number":1113,"context_line":"                                    CONFIRMING, REVERTING)"},{"line_number":1114,"context_line":"    EVACUATION_IN_PROGRESS \u003d (ACCEPTED, PRE_MIGRATING)"}],"source_content_type":"text/x-python","patch_set":83,"id":"df7087c5_ea4d5c72","line":1111,"updated":"2018-03-12 18:41:00.000000000","message":"Why isn\u0027t RUNNING_POST_COPY in this list? It\u0027s used by the libvirt driver during live migration post-copy.","commit_id":"51969a9351f12753ad87cb5a5739209814d632c6"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"139f8289143fa08cc35237f68878a59836a01e92","unresolved":false,"context_lines":[{"line_number":1108,"context_line":"    RUNNING \u003d \u0027running\u0027"},{"line_number":1109,"context_line":"    RUNNING_POST_COPY \u003d \u0027running (post-copy)\u0027"},{"line_number":1110,"context_line":""},{"line_number":1111,"context_line":"    LIVE_MIGRATION_IN_PROGRESS \u003d (QUEUED, PREPARING, RUNNING, POST_MIGRATING)"},{"line_number":1112,"context_line":"    MIGRATION_RESIZE_IN_PROGRESS \u003d (PRE_MIGRATING, MIGRATING, POST_MIGRATING,"},{"line_number":1113,"context_line":"                                    CONFIRMING, REVERTING)"},{"line_number":1114,"context_line":"    EVACUATION_IN_PROGRESS \u003d (ACCEPTED, PRE_MIGRATING)"}],"source_content_type":"text/x-python","patch_set":83,"id":"bf659307_9acd695f","line":1111,"in_reply_to":"df7087c5_ea4d5c72","updated":"2018-03-26 05:59:29.000000000","message":"The in-progress states of live-migration are originally defined in the following code.\n\nhttps://github.com/openstack/nova/blob/0ab78890c155f0b6ffc7c4148b26642f47aa7070/nova/db/sqlalchemy/api.py#L4362-L4364\n\nIMO, it should be done in another patch (bug fix) if RUNNING_POST_COPY is missing.","commit_id":"51969a9351f12753ad87cb5a5739209814d632c6"}],"nova/objects/migration.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"877484b9799a0b4a24b6eb5f53905db7a6b61cb5","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        \u0027old_instance_type_id\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":52,"context_line":"        \u0027new_instance_type_id\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":53,"context_line":"        \u0027instance_uuid\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":54,"context_line":"        \u0027status\u0027: fields.MigrationStatusField(nullable\u003dTrue),"},{"line_number":55,"context_line":"        \u0027migration_type\u0027: fields.MigrationTypeField(nullable\u003dFalse),"},{"line_number":56,"context_line":"        \u0027hidden\u0027: fields.BooleanField(nullable\u003dFalse, default\u003dFalse),"},{"line_number":57,"context_line":"        \u0027memory_total\u0027: fields.IntegerField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_c48062c2","line":54,"range":{"start_line":54,"start_character":46,"end_line":54,"end_character":59},"updated":"2017-05-22 14:36:35.000000000","message":"Hmm, is it possible to set an enum field value to None? I guess it is:\n\n\u003e\u003e\u003e from nova.objects import block_device\n\u003e\u003e\u003e bdm \u003d block_device.BlockDeviceMapping(destination_type\u003dNone)\n\u003e\u003e\u003e bdm.destination_type","commit_id":"8db8120ed97c89b558a1a5313b3357feb3351cba"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"13de36ba69f76b4d6fdd4fdf1214d3febbfc0990","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        \u0027old_instance_type_id\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":52,"context_line":"        \u0027new_instance_type_id\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":53,"context_line":"        \u0027instance_uuid\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":54,"context_line":"        \u0027status\u0027: fields.MigrationStatusField(nullable\u003dTrue),"},{"line_number":55,"context_line":"        \u0027migration_type\u0027: fields.MigrationTypeField(nullable\u003dFalse),"},{"line_number":56,"context_line":"        \u0027hidden\u0027: fields.BooleanField(nullable\u003dFalse, default\u003dFalse),"},{"line_number":57,"context_line":"        \u0027memory_total\u0027: fields.IntegerField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_b8db407a","line":54,"range":{"start_line":54,"start_character":46,"end_line":54,"end_character":59},"in_reply_to":"ff0f0b1f_c48062c2","updated":"2017-05-23 04:36:29.000000000","message":"Yes. It can be None.","commit_id":"8db8120ed97c89b558a1a5313b3357feb3351cba"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"cafc490d70f668e793c7cf0eca3c9555c32f01cb","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        \u0027new_instance_type_id\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":54,"context_line":"        \u0027instance_uuid\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":55,"context_line":"        \u0027status\u0027: fields.MigrationStatusField(nullable\u003dTrue),"},{"line_number":56,"context_line":"        \u0027migration_type\u0027: fields.MigrationTypeField(nullable\u003dFalse),"},{"line_number":57,"context_line":"        \u0027hidden\u0027: fields.BooleanField(nullable\u003dFalse, default\u003dFalse),"},{"line_number":58,"context_line":"        \u0027memory_total\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":59,"context_line":"        \u0027memory_processed\u0027: fields.IntegerField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":24,"id":"df140735_56111cac","line":56,"updated":"2017-06-07 13:07:03.000000000","message":"I remember we can\u0027t change the field type https://docs.openstack.org/developer/nova/code-review.html#object-versions\n\nMaybe Dan can ensure this.","commit_id":"6358254b1f5380f234ca0f17c2a20469da6e0c75"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fc8045f37e6f949d07bc025624aa5296da25b870","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        \u0027new_instance_type_id\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":54,"context_line":"        \u0027instance_uuid\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":55,"context_line":"        \u0027status\u0027: fields.MigrationStatusField(nullable\u003dTrue),"},{"line_number":56,"context_line":"        \u0027migration_type\u0027: fields.MigrationTypeField(nullable\u003dFalse),"},{"line_number":57,"context_line":"        \u0027hidden\u0027: fields.BooleanField(nullable\u003dFalse, default\u003dFalse),"},{"line_number":58,"context_line":"        \u0027memory_total\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":59,"context_line":"        \u0027memory_processed\u0027: fields.IntegerField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":24,"id":"df140735_6a7f7fab","line":56,"in_reply_to":"df140735_3b2a0390","updated":"2017-06-07 15:21:15.000000000","message":"We can in a very few circumstances. An Enum type is just a string, and if the values that can be in this field are highly constrained then it\u0027s a compatible change.","commit_id":"6358254b1f5380f234ca0f17c2a20469da6e0c75"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b270b6f9d9ae255cc31d2fe604eae578720073a1","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        \u0027new_instance_type_id\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":54,"context_line":"        \u0027instance_uuid\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":55,"context_line":"        \u0027status\u0027: fields.MigrationStatusField(nullable\u003dTrue),"},{"line_number":56,"context_line":"        \u0027migration_type\u0027: fields.MigrationTypeField(nullable\u003dFalse),"},{"line_number":57,"context_line":"        \u0027hidden\u0027: fields.BooleanField(nullable\u003dFalse, default\u003dFalse),"},{"line_number":58,"context_line":"        \u0027memory_total\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":59,"context_line":"        \u0027memory_processed\u0027: fields.IntegerField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":24,"id":"df140735_3b2a0390","line":56,"in_reply_to":"df140735_56111cac","updated":"2017-06-07 13:11:12.000000000","message":"We\u0027ve done it before:\n\nhttps://github.com/openstack/nova/commit/c37af848ceb7bd0509a8839fb6bc89af8d3a3c5b","commit_id":"6358254b1f5380f234ca0f17c2a20469da6e0c75"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"73b60ad5b186dd54fbc352c0f8171839ad9df3e2","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        \u0027new_instance_type_id\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":54,"context_line":"        \u0027instance_uuid\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":55,"context_line":"        \u0027status\u0027: fields.MigrationStatusField(nullable\u003dTrue),"},{"line_number":56,"context_line":"        \u0027migration_type\u0027: fields.MigrationTypeField(nullable\u003dFalse),"},{"line_number":57,"context_line":"        \u0027hidden\u0027: fields.BooleanField(nullable\u003dFalse, default\u003dFalse),"},{"line_number":58,"context_line":"        \u0027memory_total\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":59,"context_line":"        \u0027memory_processed\u0027: fields.IntegerField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":24,"id":"9f0e0f27_77e8b015","line":56,"in_reply_to":"df140735_6a7f7fab","updated":"2017-06-09 06:46:27.000000000","message":"It\u0027s a compatible change as Dan said.","commit_id":"6358254b1f5380f234ca0f17c2a20469da6e0c75"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fc8045f37e6f949d07bc025624aa5296da25b870","unresolved":false,"context_lines":[{"line_number":89,"context_line":"                del primitive[\u0027memory_remaining\u0027]"},{"line_number":90,"context_line":"                del primitive[\u0027disk_total\u0027]"},{"line_number":91,"context_line":"                del primitive[\u0027disk_processed\u0027]"},{"line_number":92,"context_line":"                del primitive[\u0027disk_remaining\u0027]"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def obj_load_attr(self, attrname):"},{"line_number":95,"context_line":"        if attrname \u003d\u003d \u0027migration_type\u0027:"}],"source_content_type":"text/x-python","patch_set":24,"id":"df140735_8a2093b2","line":92,"updated":"2017-06-07 15:21:15.000000000","message":"Note to other reviewers: No handling of 1.5 is needed here since no translation is needed. If we add something to the enum later, we might need to handle the case where we\u0027re backporting something to a version without that value in the enum. However, 1.5 is just a marker version for this 1:1 conversion, so it needs no handling.","commit_id":"6358254b1f5380f234ca0f17c2a20469da6e0c75"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9cd3143710689cfd53ff64268f61728292f3fe02","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        return cls._from_db_object(context, cls(), db_migration)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    @base.remotable_classmethod"},{"line_number":146,"context_line":"    def get_in_progress_by_id_and_instance(cls, context, id, instance_uuid):"},{"line_number":147,"context_line":"        db_migration \u003d db.migration_get_by_id_instance_and_statuses("},{"line_number":148,"context_line":"            context, id, instance_uuid, fields.MigrationStatus.IN_PROGRESS)"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"5f4e5783_6af3f49f","line":146,"range":{"start_line":146,"start_character":61,"end_line":146,"end_character":74},"updated":"2017-10-11 14:48:11.000000000","message":"If you have the migration id (primary key), then why do you need the instance_uuid for more filtering?","commit_id":"218d42a18ad62ab88cda2385a6d7b1c4d984f090"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"4579c9185f39df6a9ab40c6d8cead05ffa27e92f","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        return cls._from_db_object(context, cls(), db_migration)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    @base.remotable_classmethod"},{"line_number":146,"context_line":"    def get_in_progress_by_id_and_instance(cls, context, id, instance_uuid):"},{"line_number":147,"context_line":"        db_migration \u003d db.migration_get_by_id_instance_and_statuses("},{"line_number":148,"context_line":"            context, id, instance_uuid, fields.MigrationStatus.IN_PROGRESS)"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"5f4e5783_24251eac","line":146,"range":{"start_line":146,"start_character":61,"end_line":146,"end_character":74},"in_reply_to":"5f4e5783_6af3f49f","updated":"2017-10-12 06:21:17.000000000","message":"The id and the instance UUID are specified by users(API callers).\nThere is a posiblity that users specify a wrong pair of a migration ID and the instance UUID.\nIn that case, NotFound exception should be raised.","commit_id":"218d42a18ad62ab88cda2385a6d7b1c4d984f090"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b4ca1841a5f56595130bbdeb896f8a7126edbd4d","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        \u0027old_instance_type_id\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":59,"context_line":"        \u0027new_instance_type_id\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":60,"context_line":"        \u0027instance_uuid\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":61,"context_line":"        \u0027status\u0027: fields.MigrationStatusField(nullable\u003dTrue),"},{"line_number":62,"context_line":"        \u0027migration_type\u0027: fields.MigrationTypeField(nullable\u003dFalse),"},{"line_number":63,"context_line":"        \u0027hidden\u0027: fields.BooleanField(nullable\u003dFalse, default\u003dFalse),"},{"line_number":64,"context_line":"        \u0027memory_total\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":65,"context_line":"        \u0027memory_processed\u0027: fields.IntegerField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":86,"id":"bf659307_e3aed27f","line":62,"range":{"start_line":61,"start_character":0,"end_line":62,"end_character":68},"updated":"2018-04-11 13:09:14.000000000","message":"dansmith said in another review that you can\u0027t change the type of a field. I still don\u0027t understand why and this is admittedly a different case (the two are interchangable) but I\u0027d like him to validate this personally.\n\nAlso, this is persistent object. Do we need to worry about invalid entries in the database for these fields (which are now enums)?","commit_id":"230ef75b7689db9e10390ff3480adca55707ac54"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"f4f9079e86dc4869ffe2fc0856ee382e07c389a2","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        \u0027old_instance_type_id\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":59,"context_line":"        \u0027new_instance_type_id\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":60,"context_line":"        \u0027instance_uuid\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":61,"context_line":"        \u0027status\u0027: fields.MigrationStatusField(nullable\u003dTrue),"},{"line_number":62,"context_line":"        \u0027migration_type\u0027: fields.MigrationTypeField(nullable\u003dFalse),"},{"line_number":63,"context_line":"        \u0027hidden\u0027: fields.BooleanField(nullable\u003dFalse, default\u003dFalse),"},{"line_number":64,"context_line":"        \u0027memory_total\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":65,"context_line":"        \u0027memory_processed\u0027: fields.IntegerField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":86,"id":"bf659307_a670af41","line":62,"range":{"start_line":61,"start_character":0,"end_line":62,"end_character":68},"in_reply_to":"bf659307_e3aed27f","updated":"2018-04-13 05:58:43.000000000","message":"In Patch Set 24, Matt said that it was a similar case that changes a field type.\n\nhttps://github.com/openstack/nova/commit/c37af848ceb7bd0509a8839fb6bc89af8d3a3c5b\n\nDan said that an Enum type is just a string, and if the values that can be in this field are highly constrained then it\u0027s a compatible change.\n\nIMO, this patch corresponds to the case.\nthe migration type and the migration status are set by nova process. Users cannot set the value.\nSo this change is no problem.","commit_id":"230ef75b7689db9e10390ff3480adca55707ac54"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b4ca1841a5f56595130bbdeb896f8a7126edbd4d","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        \u0027disk_remaining\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":70,"context_line":"        }"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    obj_extra_fields \u003d [\u0027in_progress\u0027]"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    @staticmethod"},{"line_number":75,"context_line":"    def _from_db_object(context, migration, db_migration):"}],"source_content_type":"text/x-python","patch_set":86,"id":"bf659307_c3ce2e59","line":72,"updated":"2018-04-11 13:09:14.000000000","message":"Could you add a comment explaining what this field is for and why it\u0027s kept separate (I\u0027m guessing it\u0027s because it\u0027s a property and that fools o.vo)?","commit_id":"230ef75b7689db9e10390ff3480adca55707ac54"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"f4f9079e86dc4869ffe2fc0856ee382e07c389a2","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        \u0027disk_remaining\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":70,"context_line":"        }"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    obj_extra_fields \u003d [\u0027in_progress\u0027]"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    @staticmethod"},{"line_number":75,"context_line":"    def _from_db_object(context, migration, db_migration):"}],"source_content_type":"text/x-python","patch_set":86,"id":"bf659307_06971b3c","line":72,"in_reply_to":"bf659307_c3ce2e59","updated":"2018-04-13 05:58:43.000000000","message":"Done","commit_id":"230ef75b7689db9e10390ff3480adca55707ac54"}],"nova/tests/unit/db/test_db_api.py":[{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"305d6f284b7042e68e206d0939610966032641ff","unresolved":false,"context_lines":[{"line_number":1663,"context_line":"    def test_migration_get_in_progress_by_instance_type_none_evacuation(self):"},{"line_number":1664,"context_line":"        self._test_migration_get_in_progress_by_instance_type_not_specified("},{"line_number":1665,"context_line":"            \u0027pre-migrating\u0027, \u0027evacuation\u0027)"},{"line_number":1666,"context_line":""},{"line_number":1667,"context_line":"    def test_migration_get_in_progress_by_instance_not_in_progress(self):"},{"line_number":1668,"context_line":"        values \u003d self._create(migration_type\u003d\"live-migration\")"},{"line_number":1669,"context_line":"        results \u003d db.migration_get_in_progress_by_instance("}],"source_content_type":"text/x-python","patch_set":8,"id":"9a30ddce_1c61ce39","line":1666,"updated":"2017-03-09 09:27:03.000000000","message":"Do you think it\u0027s worth to test a multiple rows returned case?","commit_id":"179e5ee26fcf2fe794718a46cd6d2d6aa36a9545"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"bb261cb8fa14b1ac52a41c88d6a28e5156018625","unresolved":false,"context_lines":[{"line_number":1663,"context_line":"    def test_migration_get_in_progress_by_instance_type_none_evacuation(self):"},{"line_number":1664,"context_line":"        self._test_migration_get_in_progress_by_instance_type_not_specified("},{"line_number":1665,"context_line":"            \u0027pre-migrating\u0027, \u0027evacuation\u0027)"},{"line_number":1666,"context_line":""},{"line_number":1667,"context_line":"    def test_migration_get_in_progress_by_instance_not_in_progress(self):"},{"line_number":1668,"context_line":"        values \u003d self._create(migration_type\u003d\"live-migration\")"},{"line_number":1669,"context_line":"        results \u003d db.migration_get_in_progress_by_instance("}],"source_content_type":"text/x-python","patch_set":8,"id":"7a25e98e_f762bcac","line":1666,"in_reply_to":"9a30ddce_1c61ce39","updated":"2017-03-14 04:35:03.000000000","message":"IMO, it is not worth to test it because an instance have only one migration (object).","commit_id":"179e5ee26fcf2fe794718a46cd6d2d6aa36a9545"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"877484b9799a0b4a24b6eb5f53905db7a6b61cb5","unresolved":false,"context_lines":[{"line_number":1645,"context_line":""},{"line_number":1646,"context_line":"        self.assertEqual(status, results[0][\"status\"])"},{"line_number":1647,"context_line":""},{"line_number":1648,"context_line":"    def test_migration_get_in_progress_by_instance_live_migration(self):"},{"line_number":1649,"context_line":"        self._test_migration_get_in_progress_by_instance(\u0027running\u0027,"},{"line_number":1650,"context_line":"                                                         \u0027live-migration\u0027)"},{"line_number":1651,"context_line":""},{"line_number":1652,"context_line":"    def test_migration_get_in_progress_by_instance_cold_migration(self):"},{"line_number":1653,"context_line":"        self._test_migration_get_in_progress_by_instance(\u0027migrating\u0027,"},{"line_number":1654,"context_line":"                                                         \u0027migration\u0027)"},{"line_number":1655,"context_line":""},{"line_number":1656,"context_line":"    def test_migration_get_in_progress_by_instance_evacuation(self):"},{"line_number":1657,"context_line":"        self._test_migration_get_in_progress_by_instance(\u0027pre-migrating\u0027,"},{"line_number":1658,"context_line":"                                                         \u0027evacuation\u0027)"},{"line_number":1659,"context_line":""},{"line_number":1660,"context_line":"    def _test_migration_get_in_progress_by_instance_type_not_specified("},{"line_number":1661,"context_line":"        self, status, migration_type):"}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_44e212a2","line":1658,"range":{"start_line":1648,"start_character":0,"end_line":1658,"end_character":70},"updated":"2017-05-22 14:36:35.000000000","message":"nit: These look like good examples of something you could replace with ddt.","commit_id":"8db8120ed97c89b558a1a5313b3357feb3351cba"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"13de36ba69f76b4d6fdd4fdf1214d3febbfc0990","unresolved":false,"context_lines":[{"line_number":1645,"context_line":""},{"line_number":1646,"context_line":"        self.assertEqual(status, results[0][\"status\"])"},{"line_number":1647,"context_line":""},{"line_number":1648,"context_line":"    def test_migration_get_in_progress_by_instance_live_migration(self):"},{"line_number":1649,"context_line":"        self._test_migration_get_in_progress_by_instance(\u0027running\u0027,"},{"line_number":1650,"context_line":"                                                         \u0027live-migration\u0027)"},{"line_number":1651,"context_line":""},{"line_number":1652,"context_line":"    def test_migration_get_in_progress_by_instance_cold_migration(self):"},{"line_number":1653,"context_line":"        self._test_migration_get_in_progress_by_instance(\u0027migrating\u0027,"},{"line_number":1654,"context_line":"                                                         \u0027migration\u0027)"},{"line_number":1655,"context_line":""},{"line_number":1656,"context_line":"    def test_migration_get_in_progress_by_instance_evacuation(self):"},{"line_number":1657,"context_line":"        self._test_migration_get_in_progress_by_instance(\u0027pre-migrating\u0027,"},{"line_number":1658,"context_line":"                                                         \u0027evacuation\u0027)"},{"line_number":1659,"context_line":""},{"line_number":1660,"context_line":"    def _test_migration_get_in_progress_by_instance_type_not_specified("},{"line_number":1661,"context_line":"        self, status, migration_type):"}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_754a51ac","line":1658,"range":{"start_line":1648,"start_character":0,"end_line":1658,"end_character":70},"in_reply_to":"ff0f0b1f_44e212a2","updated":"2017-05-23 04:36:29.000000000","message":"Done","commit_id":"8db8120ed97c89b558a1a5313b3357feb3351cba"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"877484b9799a0b4a24b6eb5f53905db7a6b61cb5","unresolved":false,"context_lines":[{"line_number":1657,"context_line":"        self._test_migration_get_in_progress_by_instance(\u0027pre-migrating\u0027,"},{"line_number":1658,"context_line":"                                                         \u0027evacuation\u0027)"},{"line_number":1659,"context_line":""},{"line_number":1660,"context_line":"    def _test_migration_get_in_progress_by_instance_type_not_specified("},{"line_number":1661,"context_line":"        self, status, migration_type):"},{"line_number":1662,"context_line":"        values \u003d self._create(status\u003dstatus, migration_type\u003dmigration_type)"},{"line_number":1663,"context_line":"        results \u003d db.migration_get_in_progress_by_instance("}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_e46926f9","line":1660,"range":{"start_line":1660,"start_character":7,"end_line":1660,"end_character":70},"updated":"2017-05-22 14:36:35.000000000","message":"It would be nice to add a docstring explaining what this is testing. We try to enforce/request that for new tests.","commit_id":"8db8120ed97c89b558a1a5313b3357feb3351cba"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"13de36ba69f76b4d6fdd4fdf1214d3febbfc0990","unresolved":false,"context_lines":[{"line_number":1657,"context_line":"        self._test_migration_get_in_progress_by_instance(\u0027pre-migrating\u0027,"},{"line_number":1658,"context_line":"                                                         \u0027evacuation\u0027)"},{"line_number":1659,"context_line":""},{"line_number":1660,"context_line":"    def _test_migration_get_in_progress_by_instance_type_not_specified("},{"line_number":1661,"context_line":"        self, status, migration_type):"},{"line_number":1662,"context_line":"        values \u003d self._create(status\u003dstatus, migration_type\u003dmigration_type)"},{"line_number":1663,"context_line":"        results \u003d db.migration_get_in_progress_by_instance("}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_78e1282a","line":1660,"range":{"start_line":1660,"start_character":7,"end_line":1660,"end_character":70},"in_reply_to":"ff0f0b1f_e46926f9","updated":"2017-05-23 04:36:29.000000000","message":"Done","commit_id":"8db8120ed97c89b558a1a5313b3357feb3351cba"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"877484b9799a0b4a24b6eb5f53905db7a6b61cb5","unresolved":false,"context_lines":[{"line_number":1670,"context_line":""},{"line_number":1671,"context_line":"        self.assertEqual(status, results[0][\"status\"])"},{"line_number":1672,"context_line":""},{"line_number":1673,"context_line":"    def test_migration_get_in_progress_by_instance_type_none_live(self):"},{"line_number":1674,"context_line":"        self._test_migration_get_in_progress_by_instance_type_not_specified("},{"line_number":1675,"context_line":"            \u0027running\u0027, \u0027live-migration\u0027)"},{"line_number":1676,"context_line":""},{"line_number":1677,"context_line":"    def test_migration_get_in_progress_by_instance_type_none_cold(self):"},{"line_number":1678,"context_line":"        self._test_migration_get_in_progress_by_instance_type_not_specified("},{"line_number":1679,"context_line":"            \u0027migrating\u0027, \u0027migration\u0027)"},{"line_number":1680,"context_line":""},{"line_number":1681,"context_line":"    def test_migration_get_in_progress_by_instance_type_none_resize(self):"},{"line_number":1682,"context_line":"        self._test_migration_get_in_progress_by_instance_type_not_specified("},{"line_number":1683,"context_line":"            \u0027post-migrating\u0027, \u0027resize\u0027)"},{"line_number":1684,"context_line":""},{"line_number":1685,"context_line":"    def test_migration_get_in_progress_by_instance_type_none_evacuation(self):"},{"line_number":1686,"context_line":"        self._test_migration_get_in_progress_by_instance_type_not_specified("},{"line_number":1687,"context_line":"            \u0027pre-migrating\u0027, \u0027evacuation\u0027)"},{"line_number":1688,"context_line":""},{"line_number":1689,"context_line":"    def test_migration_get_in_progress_by_instance_not_in_progress(self):"},{"line_number":1690,"context_line":"        values \u003d self._create(migration_type\u003d\"live-migration\")"}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_c49ce20f","line":1687,"range":{"start_line":1673,"start_character":0,"end_line":1687,"end_character":42},"updated":"2017-05-22 14:36:35.000000000","message":"Same as above regarding ddt.","commit_id":"8db8120ed97c89b558a1a5313b3357feb3351cba"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"13de36ba69f76b4d6fdd4fdf1214d3febbfc0990","unresolved":false,"context_lines":[{"line_number":1670,"context_line":""},{"line_number":1671,"context_line":"        self.assertEqual(status, results[0][\"status\"])"},{"line_number":1672,"context_line":""},{"line_number":1673,"context_line":"    def test_migration_get_in_progress_by_instance_type_none_live(self):"},{"line_number":1674,"context_line":"        self._test_migration_get_in_progress_by_instance_type_not_specified("},{"line_number":1675,"context_line":"            \u0027running\u0027, \u0027live-migration\u0027)"},{"line_number":1676,"context_line":""},{"line_number":1677,"context_line":"    def test_migration_get_in_progress_by_instance_type_none_cold(self):"},{"line_number":1678,"context_line":"        self._test_migration_get_in_progress_by_instance_type_not_specified("},{"line_number":1679,"context_line":"            \u0027migrating\u0027, \u0027migration\u0027)"},{"line_number":1680,"context_line":""},{"line_number":1681,"context_line":"    def test_migration_get_in_progress_by_instance_type_none_resize(self):"},{"line_number":1682,"context_line":"        self._test_migration_get_in_progress_by_instance_type_not_specified("},{"line_number":1683,"context_line":"            \u0027post-migrating\u0027, \u0027resize\u0027)"},{"line_number":1684,"context_line":""},{"line_number":1685,"context_line":"    def test_migration_get_in_progress_by_instance_type_none_evacuation(self):"},{"line_number":1686,"context_line":"        self._test_migration_get_in_progress_by_instance_type_not_specified("},{"line_number":1687,"context_line":"            \u0027pre-migrating\u0027, \u0027evacuation\u0027)"},{"line_number":1688,"context_line":""},{"line_number":1689,"context_line":"    def test_migration_get_in_progress_by_instance_not_in_progress(self):"},{"line_number":1690,"context_line":"        values \u003d self._create(migration_type\u003d\"live-migration\")"}],"source_content_type":"text/x-python","patch_set":18,"id":"ff0f0b1f_35ce192e","line":1687,"range":{"start_line":1673,"start_character":0,"end_line":1687,"end_character":42},"in_reply_to":"ff0f0b1f_c49ce20f","updated":"2017-05-23 04:36:29.000000000","message":"Done","commit_id":"8db8120ed97c89b558a1a5313b3357feb3351cba"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d47deab47cf29388df9888817b8bef8c8bf2506b","unresolved":false,"context_lines":[{"line_number":1652,"context_line":"        for key in values:"},{"line_number":1653,"context_line":"            self.assertEqual(values[key], results[0][key])"},{"line_number":1654,"context_line":""},{"line_number":1655,"context_line":"        self.assertEqual(status, results[0][\"status\"])"},{"line_number":1656,"context_line":""},{"line_number":1657,"context_line":"    @ddt.data((\u0027running\u0027, \u0027live-migration\u0027),"},{"line_number":1658,"context_line":"              (\u0027migrating\u0027, \u0027migration\u0027),"}],"source_content_type":"text/x-python","patch_set":26,"id":"7f231b9d_9a5fd140","line":1655,"range":{"start_line":1655,"start_character":7,"end_line":1655,"end_character":54},"updated":"2017-06-12 07:58:54.000000000","message":"This is is useless, since the line 1653 already test it.","commit_id":"1ab4a920e1653ca4fcc78aea68453e3c78718259"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"79c265efbc3b28b0c28cff06c33651881089bd9a","unresolved":false,"context_lines":[{"line_number":1652,"context_line":"        for key in values:"},{"line_number":1653,"context_line":"            self.assertEqual(values[key], results[0][key])"},{"line_number":1654,"context_line":""},{"line_number":1655,"context_line":"        self.assertEqual(status, results[0][\"status\"])"},{"line_number":1656,"context_line":""},{"line_number":1657,"context_line":"    @ddt.data((\u0027running\u0027, \u0027live-migration\u0027),"},{"line_number":1658,"context_line":"              (\u0027migrating\u0027, \u0027migration\u0027),"}],"source_content_type":"text/x-python","patch_set":26,"id":"7f231b9d_1bfefc36","line":1655,"range":{"start_line":1655,"start_character":7,"end_line":1655,"end_character":54},"in_reply_to":"7f231b9d_9a5fd140","updated":"2017-06-13 07:09:56.000000000","message":"Done","commit_id":"1ab4a920e1653ca4fcc78aea68453e3c78718259"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d47deab47cf29388df9888817b8bef8c8bf2506b","unresolved":false,"context_lines":[{"line_number":1674,"context_line":"        for key in values:"},{"line_number":1675,"context_line":"            self.assertEqual(values[key], results[0][key])"},{"line_number":1676,"context_line":""},{"line_number":1677,"context_line":"        self.assertEqual(status, results[0][\"status\"])"},{"line_number":1678,"context_line":""},{"line_number":1679,"context_line":"    def test_migration_get_by_instance_and_statuses_not_in_specified(self):"},{"line_number":1680,"context_line":"        values \u003d self._create(migration_type\u003d\"live-migration\")"}],"source_content_type":"text/x-python","patch_set":26,"id":"7f231b9d_da130966","line":1677,"range":{"start_line":1677,"start_character":8,"end_line":1677,"end_character":54},"updated":"2017-06-12 07:58:54.000000000","message":"ditto","commit_id":"1ab4a920e1653ca4fcc78aea68453e3c78718259"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"79c265efbc3b28b0c28cff06c33651881089bd9a","unresolved":false,"context_lines":[{"line_number":1674,"context_line":"        for key in values:"},{"line_number":1675,"context_line":"            self.assertEqual(values[key], results[0][key])"},{"line_number":1676,"context_line":""},{"line_number":1677,"context_line":"        self.assertEqual(status, results[0][\"status\"])"},{"line_number":1678,"context_line":""},{"line_number":1679,"context_line":"    def test_migration_get_by_instance_and_statuses_not_in_specified(self):"},{"line_number":1680,"context_line":"        values \u003d self._create(migration_type\u003d\"live-migration\")"}],"source_content_type":"text/x-python","patch_set":26,"id":"7f231b9d_fbf8e049","line":1677,"range":{"start_line":1677,"start_character":8,"end_line":1677,"end_character":54},"in_reply_to":"7f231b9d_da130966","updated":"2017-06-13 07:09:56.000000000","message":"Done","commit_id":"1ab4a920e1653ca4fcc78aea68453e3c78718259"}],"nova/tests/unit/objects/test_migration.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d54697557060e70d73ce8ebce3060e71bbbf491e","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        self.assertEqual(uuid, mig.uuid)"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"    @mock.patch(\u0027nova.db.migration_get_by_id_instance_and_statuses\u0027)"},{"line_number":298,"context_line":"    def test_get_in_progress_by_id_and_instance(self, fake_get):"},{"line_number":299,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":300,"context_line":"        fake_migration \u003d fake_db_migration()"},{"line_number":301,"context_line":"        fake_get.return_value \u003d fake_migration"}],"source_content_type":"text/x-python","patch_set":71,"id":"9f91af0f_4ce49e3c","line":298,"range":{"start_line":298,"start_character":54,"end_line":298,"end_character":62},"updated":"2018-01-08 03:46:58.000000000","message":"better to assert the calling of this method?","commit_id":"1c36234178f54a89d167cfba3783d37c7954bd79"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"6ce5f2f7f2f20c3343e9b3140099d814837e79c1","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        self.assertEqual(uuid, mig.uuid)"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"    @mock.patch(\u0027nova.db.migration_get_by_id_instance_and_statuses\u0027)"},{"line_number":298,"context_line":"    def test_get_in_progress_by_id_and_instance(self, fake_get):"},{"line_number":299,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":300,"context_line":"        fake_migration \u003d fake_db_migration()"},{"line_number":301,"context_line":"        fake_get.return_value \u003d fake_migration"}],"source_content_type":"text/x-python","patch_set":71,"id":"7f96bb07_7960c033","line":298,"range":{"start_line":298,"start_character":54,"end_line":298,"end_character":62},"in_reply_to":"9f91af0f_4ce49e3c","updated":"2018-01-11 00:40:15.000000000","message":"Done","commit_id":"1c36234178f54a89d167cfba3783d37c7954bd79"}]}
