)]}'
{"doc/notification_samples/service-update.json":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"c1c2113499bf6274093aeb2646c3c3c74e4d8961","unresolved":false,"context_lines":[{"line_number":13,"context_line":"            \"disabled_reason\": null,"},{"line_number":14,"context_line":"            \"report_count\": 1,"},{"line_number":15,"context_line":"            \"forced_down\": false,"},{"line_number":16,"context_line":"            \"version\": 7"},{"line_number":17,"context_line":"        }"},{"line_number":18,"context_line":"    },"},{"line_number":19,"context_line":"    \"event_type\": \"service.update\","}],"source_content_type":"application/json","patch_set":39,"id":"3a57f1b5_c57cd122","line":16,"updated":"2016-02-10 11:57:20.000000000","message":"this changes even if nothing else changes?","commit_id":"c9091d0871948377685feca0eb2e41d8ad38228a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"249e47441d148ea3ade350d5802ab58a21a43e2c","unresolved":false,"context_lines":[{"line_number":13,"context_line":"            \"disabled_reason\": null,"},{"line_number":14,"context_line":"            \"report_count\": 1,"},{"line_number":15,"context_line":"            \"forced_down\": false,"},{"line_number":16,"context_line":"            \"version\": 7"},{"line_number":17,"context_line":"        }"},{"line_number":18,"context_line":"    },"},{"line_number":19,"context_line":"    \"event_type\": \"service.update\","}],"source_content_type":"application/json","patch_set":39,"id":"3a57f1b5_834fb191","line":16,"in_reply_to":"3a57f1b5_c57cd122","updated":"2016-02-10 12:44:27.000000000","message":"This is needed as the Service.version has been changed here https://review.openstack.org/#/c/245921/39/nova/objects/service.py","commit_id":"c9091d0871948377685feca0eb2e41d8ad38228a"}],"etc/nova/policy.json":[{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"8afb88f89b486d117fd00fbc9f8d79d6c03affe8","unresolved":false,"context_lines":[{"line_number":439,"context_line":"    \"os_compute_api:os-server-groups\": \"\","},{"line_number":440,"context_line":"    \"os_compute_api:os-server-groups:discoverable\": \"\","},{"line_number":441,"context_line":"    \"os_compute_api:os-server-migrations:discoverable\": \"\","},{"line_number":442,"context_line":"    \"os_compute_api:os-server-migrations:force_complete\": \"rule:admin_api\","},{"line_number":443,"context_line":"    \"os_compute_api:os-services\": \"rule:admin_api\","},{"line_number":444,"context_line":"    \"os_compute_api:os-services:discoverable\": \"\","},{"line_number":445,"context_line":"    \"os_compute_api:server-metadata:discoverable\": \"\","}],"source_content_type":"application/json","patch_set":16,"id":"fa69d971_c9d4bfbe","line":442,"range":{"start_line":442,"start_character":73,"end_line":442,"end_character":75},"updated":"2016-01-04 02:44:34.000000000","message":"please read this spec:\n\nhttps://review.openstack.org/#/c/255122/8/specs/mitaka/approved/live-migration-progress-report.rst\n\nthe policy should be: \n\u0027os_compute_api:servers:migrations:force_complete\u0027,","commit_id":"cf9cfff25e65399a53424f2a8bac86a882d0dc42"},{"author":{"_account_id":7461,"name":"Paul Murray","email":"pmurray@hpe.com","username":"ptm"},"change_message_id":"cc28b2d7bb0184557b6782984d05e47b3cf28c92","unresolved":false,"context_lines":[{"line_number":439,"context_line":"    \"os_compute_api:os-server-groups\": \"\","},{"line_number":440,"context_line":"    \"os_compute_api:os-server-groups:discoverable\": \"\","},{"line_number":441,"context_line":"    \"os_compute_api:os-server-migrations:discoverable\": \"\","},{"line_number":442,"context_line":"    \"os_compute_api:os-server-migrations:force_complete\": \"rule:admin_api\","},{"line_number":443,"context_line":"    \"os_compute_api:os-services\": \"rule:admin_api\","},{"line_number":444,"context_line":"    \"os_compute_api:os-services:discoverable\": \"\","},{"line_number":445,"context_line":"    \"os_compute_api:server-metadata:discoverable\": \"\","}],"source_content_type":"application/json","patch_set":16,"id":"fa69d971_bffde13b","line":442,"range":{"start_line":442,"start_character":73,"end_line":442,"end_character":75},"in_reply_to":"fa69d971_c9d4bfbe","updated":"2016-01-04 16:27:20.000000000","message":"I think ShaoHe is right. Also move up to the section with other \"os_compute_api:server:...\" actions","commit_id":"cf9cfff25e65399a53424f2a8bac86a882d0dc42"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"c1c2113499bf6274093aeb2646c3c3c74e4d8961","unresolved":false,"context_lines":[{"line_number":270,"context_line":"    \"os_compute_api:servers:start\": \"rule:admin_or_owner\","},{"line_number":271,"context_line":"    \"os_compute_api:servers:stop\": \"rule:admin_or_owner\","},{"line_number":272,"context_line":"    \"os_compute_api:servers:trigger_crash_dump\": \"rule:admin_or_owner\","},{"line_number":273,"context_line":"    \"os_compute_api:servers:migrations:discoverable\": \"\","},{"line_number":274,"context_line":"    \"os_compute_api:servers:migrations:force_complete\": \"rule:admin_api\","},{"line_number":275,"context_line":"    \"os_compute_api:os-access-ips:discoverable\": \"\","},{"line_number":276,"context_line":"    \"os_compute_api:os-access-ips\": \"\","}],"source_content_type":"application/json","patch_set":39,"id":"3a57f1b5_a54bd5af","line":273,"updated":"2016-02-10 11:57:20.000000000","message":"why is this here?","commit_id":"c9091d0871948377685feca0eb2e41d8ad38228a"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"519c60cdc948a94b82495c68a230fd91af4e3772","unresolved":false,"context_lines":[{"line_number":270,"context_line":"    \"os_compute_api:servers:start\": \"rule:admin_or_owner\","},{"line_number":271,"context_line":"    \"os_compute_api:servers:stop\": \"rule:admin_or_owner\","},{"line_number":272,"context_line":"    \"os_compute_api:servers:trigger_crash_dump\": \"rule:admin_or_owner\","},{"line_number":273,"context_line":"    \"os_compute_api:servers:migrations:discoverable\": \"\","},{"line_number":274,"context_line":"    \"os_compute_api:servers:migrations:force_complete\": \"rule:admin_api\","},{"line_number":275,"context_line":"    \"os_compute_api:os-access-ips:discoverable\": \"\","},{"line_number":276,"context_line":"    \"os_compute_api:os-access-ips\": \"\","}],"source_content_type":"application/json","patch_set":39,"id":"3a57f1b5_e810c450","line":273,"in_reply_to":"3a57f1b5_a54bd5af","updated":"2016-02-10 12:03:46.000000000","message":"This should be removed in a follow up.","commit_id":"c9091d0871948377685feca0eb2e41d8ad38228a"}],"nova/api/openstack/compute/schemas/server_migrations.py":[{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"b61694aadf1e43e2090cb81a7abe73158eea2428","unresolved":false,"context_lines":[{"line_number":19,"context_line":"force_complete \u003d {"},{"line_number":20,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":21,"context_line":"    \u0027properties\u0027: {"},{"line_number":22,"context_line":"        \u0027force_complete\u0027: parameter_types.none"},{"line_number":23,"context_line":"    },"},{"line_number":24,"context_line":"    \u0027required\u0027: [\u0027force_complete\u0027],"},{"line_number":25,"context_line":"    \u0027additionalProperties\u0027: False,"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba63e191_f06c3b0a","line":22,"range":{"start_line":22,"start_character":26,"end_line":22,"end_character":46},"updated":"2016-01-19 06:07:37.000000000","message":"I am not sure about this, I leaved comments on https://review.openstack.org/#/c/202617/40/nova/api/openstack/compute/schemas/servers.py\n\nbut Alex told we don\u0027t require it.\nseems we need Alex\u0027s comment here.","commit_id":"917e478a19eba6ced2d9add9a902a672d813cca2"}],"nova/api/openstack/compute/server_migrations.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5207707becf745dbaaf3d602b4fd7abe01ed8580","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    @wsgi.response(202)"},{"line_number":36,"context_line":"    @extensions.expected_errors((400, 403, 404, 409))"},{"line_number":37,"context_line":"    @wsgi.action(\u0027force_complete\u0027)"},{"line_number":38,"context_line":"    def _force_complete(self, req, id, server_id, body):"},{"line_number":39,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":40,"context_line":"        authorize(context, action\u003d\u0027force_complete\u0027)"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_f7feab68","line":38,"updated":"2015-12-14 17:07:22.000000000","message":"I think we shall only add this new action into a new api microversion.\nWe might also need validate the body with jsonschema","commit_id":"880511b2764a9c1d7b15a1541d5ca99a35d77761"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"86b858d77cb4ed94aef773dcee85327429aec601","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    @wsgi.response(202)"},{"line_number":36,"context_line":"    @extensions.expected_errors((400, 403, 404, 409))"},{"line_number":37,"context_line":"    @wsgi.action(\u0027force_complete\u0027)"},{"line_number":38,"context_line":"    def _force_complete(self, req, id, server_id, body):"},{"line_number":39,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":40,"context_line":"        authorize(context, action\u003d\u0027force_complete\u0027)"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a710552_50af72e3","line":38,"in_reply_to":"7a740942_f7feab68","updated":"2015-12-14 17:38:19.000000000","message":"Got it, will wait for more reviews and then change it.","commit_id":"880511b2764a9c1d7b15a1541d5ca99a35d77761"},{"author":{"_account_id":11189,"name":"yuntongjin","email":"yuntong.jin@intel.com","username":"yuntong"},"change_message_id":"0087f62a232d884e3302f9de7490f1b4923961bd","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"class ServerMigrations(extensions.V21APIExtensionBase):"},{"line_number":62,"context_line":"    \"\"\"Server Migrations API.\"\"\""},{"line_number":63,"context_line":"    name \u003d \"ServerMigrations\""},{"line_number":64,"context_line":"    alias \u003d ALIAS"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a7e1126_523edb8c","line":61,"range":{"start_line":61,"start_character":6,"end_line":61,"end_character":22},"updated":"2015-12-21 07:05:59.000000000","message":"since there will be other action on this resource like index/show(https://review.openstack.org/#/c/258771/),\ncould u separate this resource out without any action on it,\nso we can add index/show/pause/cancel later?","commit_id":"87930579fcd2786689eb67658f14bc10880e2c6e"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"f2543735769dcacbd053a96f7abc1408b1ffe034","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                state_error, \u0027live_migrate_force_complete\u0027, server_id)"},{"line_number":52,"context_line":"        except exception.InstanceNotFound as e:"},{"line_number":53,"context_line":"            raise exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":54,"context_line":"        except (exception.InstanceIsLocked,"},{"line_number":55,"context_line":"                exception.MigrationNotFoundByStatus,"},{"line_number":56,"context_line":"                exception.InvalidMigrationState,"},{"line_number":57,"context_line":"                exception.MigrationNotFoundForInstance) as e:"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa69d971_9684340b","line":54,"range":{"start_line":54,"start_character":0,"end_line":54,"end_character":43},"updated":"2016-01-06 07:15:47.000000000","message":"Good point, will do.","commit_id":"7c56744373d5f90fbcd85a5c3181a0a220bc864d"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"8bfd9f07201e6a89bcd93bc720afba599e9f0d0c","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                state_error, \u0027live_migrate_force_complete\u0027, server_id)"},{"line_number":52,"context_line":"        except exception.InstanceNotFound as e:"},{"line_number":53,"context_line":"            raise exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":54,"context_line":"        except (exception.InstanceIsLocked,"},{"line_number":55,"context_line":"                exception.MigrationNotFoundByStatus,"},{"line_number":56,"context_line":"                exception.InvalidMigrationState,"},{"line_number":57,"context_line":"                exception.MigrationNotFoundForInstance) as e:"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa69d971_cb6445ba","line":54,"range":{"start_line":54,"start_character":16,"end_line":54,"end_character":42},"updated":"2016-01-06 06:38:16.000000000","message":"It should be raise exc.HTTPConflict , please see: \nhttps://github.com/openstack/nova/blob/master/nova/api/openstack/compute/migrate_server.py#L98","commit_id":"7c56744373d5f90fbcd85a5c3181a0a220bc864d"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"b61694aadf1e43e2090cb81a7abe73158eea2428","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                state_error, \u0027live_migrate_force_complete\u0027, server_id)"},{"line_number":52,"context_line":"        except exception.InstanceNotFound as e:"},{"line_number":53,"context_line":"            raise exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":54,"context_line":"        except (exception.InstanceIsLocked,"},{"line_number":55,"context_line":"                exception.MigrationNotFoundByStatus,"},{"line_number":56,"context_line":"                exception.InvalidMigrationState,"},{"line_number":57,"context_line":"                exception.MigrationNotFoundForInstance) as e:"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba63e191_d02257b9","line":54,"range":{"start_line":54,"start_character":8,"end_line":54,"end_character":43},"updated":"2016-01-19 06:07:37.000000000","message":"hi Pawel, I think you miss this in PS 18","commit_id":"917e478a19eba6ced2d9add9a902a672d813cca2"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"cf58f19b26548b74b0e728577bd22d8ee8c4ce04","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                state_error, \u0027live_migrate_force_complete\u0027, server_id)"},{"line_number":52,"context_line":"        except exception.InstanceNotFound as e:"},{"line_number":53,"context_line":"            raise exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":54,"context_line":"        except (exception.InstanceIsLocked,"},{"line_number":55,"context_line":"                exception.MigrationNotFoundByStatus,"},{"line_number":56,"context_line":"                exception.InvalidMigrationState,"},{"line_number":57,"context_line":"                exception.MigrationNotFoundForInstance) as e:"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba63e191_6dff1102","line":54,"range":{"start_line":54,"start_character":8,"end_line":54,"end_character":43},"in_reply_to":"ba63e191_d02257b9","updated":"2016-01-19 08:23:00.000000000","message":"Sure, it should be a conflict, will change it","commit_id":"917e478a19eba6ced2d9add9a902a672d813cca2"}],"nova/api/openstack/rest_api_version_history.rst":[{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"098fa77cdb123924bb3fcfb2257e19c5f260cdb7","unresolved":false,"context_lines":[{"line_number":161,"context_line":"2.17"},{"line_number":162,"context_line":"----"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c 7c0728b21ddb7a096a58439e7cef268b897eb375"},{"line_number":165,"context_line":"  Add a new API for triggering crash dump in an instance. Different operation"},{"line_number":166,"context_line":"  systems in instance may need different configurations to trigger crash dump."},{"line_number":167,"context_line":""}],"source_content_type":"text/x-rst","patch_set":30,"id":"9a68dd71_ef9bd964","line":164,"range":{"start_line":164,"start_character":0,"end_line":164,"end_character":48},"updated":"2016-01-27 08:05:50.000000000","message":"remove this","commit_id":"b8c8303193d1ebf34dbb69d499529f5292c02ed3"}],"nova/cells/rpcapi.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e90157e57b389f68754da749355244e37f0e8fa5","unresolved":false,"context_lines":[{"line_number":586,"context_line":"                   disk_over_commit\u003ddisk_over_commit,"},{"line_number":587,"context_line":"                   host_name\u003dhost_name)"},{"line_number":588,"context_line":""},{"line_number":589,"context_line":"    def live_migration_pause_instance(self, ctxt, instance, migration_id):"},{"line_number":590,"context_line":"        cctxt \u003d self.client.prepare(version\u003d\u00271.38\u0027)"},{"line_number":591,"context_line":"        cctxt.cast(ctxt, \u0027live_migration_pause_instance\u0027, instance\u003dinstance,"},{"line_number":592,"context_line":"                   migration_id\u003dmigration_id)"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa69d971_4c66ab2a","line":589,"range":{"start_line":589,"start_character":8,"end_line":589,"end_character":37},"updated":"2016-01-08 07:10:47.000000000","message":"the cell v1 is under freeze status. so we needn\u0027t add any new feature to cell,  you can reference here https://review.openstack.org/#/c/263425/2/doc/source/cells.rst","commit_id":"0157f073298a0a0e91ef2d27b16f870236ce8961"}],"nova/compute/api.py":[{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"a376c07269721aaa249750b356072030570c4343","unresolved":false,"context_lines":[{"line_number":3290,"context_line":"        # live migration for particular instance. Also pass migration id to"},{"line_number":3291,"context_line":"        # compute to double check and avoid possible race condition."},{"line_number":3292,"context_line":"        migration \u003d objects.Migration.get_by_instance_and_status("},{"line_number":3293,"context_line":"            context, instance.uuid, \u0027running\u0027)"},{"line_number":3294,"context_line":""},{"line_number":3295,"context_line":"        self.compute_rpcapi.live_migration_pause_instance("},{"line_number":3296,"context_line":"            context, instance, migration.id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a8ffd7b_8d76f404","line":3293,"updated":"2015-12-01 06:20:04.000000000","message":"what will happen if we don\u0027t find any migration here?","commit_id":"bc3dfce42dc697a8f269d5c95b61b1e37234b596"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"c874555096eee96e66c23a40fdc1603dc74595ca","unresolved":false,"context_lines":[{"line_number":3290,"context_line":"        # live migration for particular instance. Also pass migration id to"},{"line_number":3291,"context_line":"        # compute to double check and avoid possible race condition."},{"line_number":3292,"context_line":"        migration \u003d objects.Migration.get_by_instance_and_status("},{"line_number":3293,"context_line":"            context, instance.uuid, \u0027running\u0027)"},{"line_number":3294,"context_line":""},{"line_number":3295,"context_line":"        self.compute_rpcapi.live_migration_pause_instance("},{"line_number":3296,"context_line":"            context, instance, migration.id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a8ffd7b_7e30149f","line":3293,"in_reply_to":"9a8ffd7b_8d76f404","updated":"2015-12-01 07:43:25.000000000","message":"Exception MigrationNotFoundByStatus will be raised and will be changed by the API to a 408 return code.","commit_id":"bc3dfce42dc697a8f269d5c95b61b1e37234b596"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5207707becf745dbaaf3d602b4fd7abe01ed8580","unresolved":false,"context_lines":[{"line_number":3281,"context_line":"        # compute to double check and avoid possible race condition."},{"line_number":3282,"context_line":"        migration \u003d objects.Migration.get_by_id_and_instance("},{"line_number":3283,"context_line":"            context, migration_id, instance.uuid)"},{"line_number":3284,"context_line":"        if migration.status !\u003d \u0027running\u0027:"},{"line_number":3285,"context_line":"            raise exception.InvalidMigrationState(migration_id\u003dmigration_id,"},{"line_number":3286,"context_line":"                                                  instance_uuid\u003dinstance.uuid,"},{"line_number":3287,"context_line":"                                                  state\u003dmigration.status,"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_1797b7ec","line":3284,"range":{"start_line":3284,"start_character":32,"end_line":3284,"end_character":39},"updated":"2015-12-14 17:07:22.000000000","message":"Do we have some constant for the migration.status?","commit_id":"880511b2764a9c1d7b15a1541d5ca99a35d77761"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"86b858d77cb4ed94aef773dcee85327429aec601","unresolved":false,"context_lines":[{"line_number":3281,"context_line":"        # compute to double check and avoid possible race condition."},{"line_number":3282,"context_line":"        migration \u003d objects.Migration.get_by_id_and_instance("},{"line_number":3283,"context_line":"            context, migration_id, instance.uuid)"},{"line_number":3284,"context_line":"        if migration.status !\u003d \u0027running\u0027:"},{"line_number":3285,"context_line":"            raise exception.InvalidMigrationState(migration_id\u003dmigration_id,"},{"line_number":3286,"context_line":"                                                  instance_uuid\u003dinstance.uuid,"},{"line_number":3287,"context_line":"                                                  state\u003dmigration.status,"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a710552_90f2ba05","line":3284,"in_reply_to":"7a740942_1797b7ec","updated":"2015-12-14 17:38:19.000000000","message":"We don\u0027t. There is whole discussion for migration state machine, but nothing has been decided yet.","commit_id":"880511b2764a9c1d7b15a1541d5ca99a35d77761"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5207707becf745dbaaf3d602b4fd7abe01ed8580","unresolved":false,"context_lines":[{"line_number":3285,"context_line":"            raise exception.InvalidMigrationState(migration_id\u003dmigration_id,"},{"line_number":3286,"context_line":"                                                  instance_uuid\u003dinstance.uuid,"},{"line_number":3287,"context_line":"                                                  state\u003dmigration.status,"},{"line_number":3288,"context_line":"                                                  method\u003d\u0027force migration \u0027"},{"line_number":3289,"context_line":"                                                         \u0027complete\u0027)"},{"line_number":3290,"context_line":""},{"line_number":3291,"context_line":"        self.compute_rpcapi.live_migration_pause_instance("},{"line_number":3292,"context_line":"            context, instance, migration.id)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_970e4739","line":3289,"range":{"start_line":3288,"start_character":50,"end_line":3289,"end_character":67},"updated":"2015-12-14 17:07:22.000000000","message":"Do we have some concept how we will \u0027method\u0027? I see we use a different value in the compute/manager.py","commit_id":"880511b2764a9c1d7b15a1541d5ca99a35d77761"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"86b858d77cb4ed94aef773dcee85327429aec601","unresolved":false,"context_lines":[{"line_number":3286,"context_line":"                                                  instance_uuid\u003dinstance.uuid,"},{"line_number":3287,"context_line":"                                                  state\u003dmigration.status,"},{"line_number":3288,"context_line":"                                                  method\u003d\u0027force migration \u0027"},{"line_number":3289,"context_line":"                                                         \u0027complete\u0027)"},{"line_number":3290,"context_line":""},{"line_number":3291,"context_line":"        self.compute_rpcapi.live_migration_pause_instance("},{"line_number":3292,"context_line":"            context, instance, migration.id)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a710552_10becaff","line":3289,"in_reply_to":"7a740942_970e4739","updated":"2015-12-14 17:38:19.000000000","message":"At this point I can use the same name, will change it.","commit_id":"880511b2764a9c1d7b15a1541d5ca99a35d77761"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"8bfd9f07201e6a89bcd93bc720afba599e9f0d0c","unresolved":false,"context_lines":[{"line_number":3234,"context_line":"                                                  instance_uuid\u003dinstance.uuid,"},{"line_number":3235,"context_line":"                                                  state\u003dmigration.status,"},{"line_number":3236,"context_line":"                                                  method\u003d\u0027pause instance\u0027)"},{"line_number":3237,"context_line":""},{"line_number":3238,"context_line":"        self.compute_rpcapi.live_migration_pause_instance("},{"line_number":3239,"context_line":"            context, instance, migration.id)"},{"line_number":3240,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"fa69d971_4bcdb583","line":3237,"updated":"2016-01-06 06:38:16.000000000","message":"line 3244 should be moved to here since if migration.status is not running ,it will raise exception but the pause action is not going to happen.","commit_id":"7c56744373d5f90fbcd85a5c3181a0a220bc864d"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"f2543735769dcacbd053a96f7abc1408b1ffe034","unresolved":false,"context_lines":[{"line_number":3234,"context_line":"                                                  instance_uuid\u003dinstance.uuid,"},{"line_number":3235,"context_line":"                                                  state\u003dmigration.status,"},{"line_number":3236,"context_line":"                                                  method\u003d\u0027pause instance\u0027)"},{"line_number":3237,"context_line":""},{"line_number":3238,"context_line":"        self.compute_rpcapi.live_migration_pause_instance("},{"line_number":3239,"context_line":"            context, instance, migration.id)"},{"line_number":3240,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"fa69d971_96e994b9","line":3237,"in_reply_to":"fa69d971_4bcdb583","updated":"2016-01-06 07:15:47.000000000","message":"I can move it there, will do.","commit_id":"7c56744373d5f90fbcd85a5c3181a0a220bc864d"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"6b34be933ddc47a84a8eabc552fb13d796c2c774","unresolved":false,"context_lines":[{"line_number":3217,"context_line":"        # supported to force live migration to complete, so just try to pause"},{"line_number":3218,"context_line":"        # the instance"},{"line_number":3219,"context_line":"        self._record_action_start("},{"line_number":3220,"context_line":"            context, instance, instance_actions.LIVE_MIGRATION_PAUSE_INSTANCE)"},{"line_number":3221,"context_line":""},{"line_number":3222,"context_line":"        # NOTE(pkoniszewski): Get migration object to check if there is ongoing"},{"line_number":3223,"context_line":"        # live migration for particular instance. Also pass migration id to"}],"source_content_type":"text/x-python","patch_set":20,"id":"da6ed579_195ca024","line":3220,"range":{"start_line":3220,"start_character":31,"end_line":3220,"end_character":77},"updated":"2016-01-12 12:08:44.000000000","message":"I am wonder if the instance_actions should be a parameter passed to this method, that will make the live_migration_force_complete a general interface","commit_id":"434c380df678ab70d32955f48d9f81a6cccd4fc4"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"6b34be933ddc47a84a8eabc552fb13d796c2c774","unresolved":false,"context_lines":[{"line_number":3228,"context_line":"            raise exception.InvalidMigrationState(migration_id\u003dmigration_id,"},{"line_number":3229,"context_line":"                                                  instance_uuid\u003dinstance.uuid,"},{"line_number":3230,"context_line":"                                                  state\u003dmigration.status,"},{"line_number":3231,"context_line":"                                                  method\u003d\u0027pause instance\u0027)"},{"line_number":3232,"context_line":""},{"line_number":3233,"context_line":"        self.compute_rpcapi.live_migration_pause_instance("},{"line_number":3234,"context_line":"            context, instance, migration.id)"}],"source_content_type":"text/x-python","patch_set":20,"id":"da6ed579_b62563c3","line":3231,"range":{"start_line":3231,"start_character":58,"end_line":3231,"end_character":63},"updated":"2016-01-12 12:08:44.000000000","message":"The method name it should be something like live_migrate_force_complete to make it general and not tied to the pause operation.","commit_id":"434c380df678ab70d32955f48d9f81a6cccd4fc4"},{"author":{"_account_id":8662,"name":"Kyle L. Henderson","email":"kyleh@us.ibm.com","username":"kyleh"},"change_message_id":"7affa891906f082ad55b2163bf903e3a602d8147","unresolved":false,"context_lines":[{"line_number":3230,"context_line":"                                                  state\u003dmigration.status,"},{"line_number":3231,"context_line":"                                                  method\u003d\u0027pause instance\u0027)"},{"line_number":3232,"context_line":""},{"line_number":3233,"context_line":"        self.compute_rpcapi.live_migration_pause_instance("},{"line_number":3234,"context_line":"            context, instance, migration.id)"},{"line_number":3235,"context_line":""},{"line_number":3236,"context_line":"    @check_instance_state(vm_state\u003d[vm_states.ACTIVE, vm_states.STOPPED,"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa69d971_68b43f81","line":3233,"updated":"2016-01-11 21:04:01.000000000","message":"Here you\u0027re really translating a migration force to the hypervisors driver\u0027s pause method.  Why not create a new hypervisor driver method for live_migration_force_complete and let the hypervisor driver decide what the best method of forcing it is?  For PowerVM, we don\u0027t support pausing a VM but there may be other techniques to expedite the live migration. \n\nAs it\u0027s currently coded above, we\u0027ll probably have to add code to the nova-powervm compute driver to raise the NotImplementedError() for a \"normal\" pause operation and do something special when the instance task state is \"migrating\".","commit_id":"434c380df678ab70d32955f48d9f81a6cccd4fc4"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"6b34be933ddc47a84a8eabc552fb13d796c2c774","unresolved":false,"context_lines":[{"line_number":3231,"context_line":"                                                  method\u003d\u0027pause instance\u0027)"},{"line_number":3232,"context_line":""},{"line_number":3233,"context_line":"        self.compute_rpcapi.live_migration_pause_instance("},{"line_number":3234,"context_line":"            context, instance, migration.id)"},{"line_number":3235,"context_line":""},{"line_number":3236,"context_line":"    @check_instance_state(vm_state\u003d[vm_states.ACTIVE, vm_states.STOPPED,"},{"line_number":3237,"context_line":"                                    vm_states.ERROR])"}],"source_content_type":"text/x-python","patch_set":20,"id":"da6ed579_79b91c2e","line":3234,"updated":"2016-01-12 12:08:44.000000000","message":"I agree with Kyle","commit_id":"434c380df678ab70d32955f48d9f81a6cccd4fc4"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"b61694aadf1e43e2090cb81a7abe73158eea2428","unresolved":false,"context_lines":[{"line_number":3200,"context_line":""},{"line_number":3201,"context_line":"    @check_instance_lock"},{"line_number":3202,"context_line":"    @check_instance_cell"},{"line_number":3203,"context_line":"    @check_instance_state(vm_state\u003d[vm_states.ACTIVE],"},{"line_number":3204,"context_line":"                          task_state\u003d[task_states.MIGRATING])"},{"line_number":3205,"context_line":"    def live_migrate_force_complete(self, context, instance, migration_id):"},{"line_number":3206,"context_line":"        \"\"\"Force live migration to complete."}],"source_content_type":"text/x-python","patch_set":23,"id":"ba63e191_eb08d02a","line":3203,"range":{"start_line":3203,"start_character":26,"end_line":3203,"end_character":54},"updated":"2016-01-19 06:07:37.000000000","message":"hmm... I think you miss vm_states.PAUSED status.","commit_id":"917e478a19eba6ced2d9add9a902a672d813cca2"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"bdeb4f06ddd502229289d0b81c042289a9b846fc","unresolved":false,"context_lines":[{"line_number":3200,"context_line":""},{"line_number":3201,"context_line":"    @check_instance_lock"},{"line_number":3202,"context_line":"    @check_instance_cell"},{"line_number":3203,"context_line":"    @check_instance_state(vm_state\u003d[vm_states.ACTIVE],"},{"line_number":3204,"context_line":"                          task_state\u003d[task_states.MIGRATING])"},{"line_number":3205,"context_line":"    def live_migrate_force_complete(self, context, instance, migration_id):"},{"line_number":3206,"context_line":"        \"\"\"Force live migration to complete."}],"source_content_type":"text/x-python","patch_set":23,"id":"ba63e191_4db00df5","line":3203,"range":{"start_line":3203,"start_character":26,"end_line":3203,"end_character":54},"in_reply_to":"ba63e191_0a23dbbe","updated":"2016-01-19 08:25:36.000000000","message":"yes, I get that, but from the code logic, we need to support it since live_migration suport vm_stat\u003dvm_stats.ACTIVE.\nbut I am okay with your reply too.","commit_id":"917e478a19eba6ced2d9add9a902a672d813cca2"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"cf58f19b26548b74b0e728577bd22d8ee8c4ce04","unresolved":false,"context_lines":[{"line_number":3200,"context_line":""},{"line_number":3201,"context_line":"    @check_instance_lock"},{"line_number":3202,"context_line":"    @check_instance_cell"},{"line_number":3203,"context_line":"    @check_instance_state(vm_state\u003d[vm_states.ACTIVE],"},{"line_number":3204,"context_line":"                          task_state\u003d[task_states.MIGRATING])"},{"line_number":3205,"context_line":"    def live_migrate_force_complete(self, context, instance, migration_id):"},{"line_number":3206,"context_line":"        \"\"\"Force live migration to complete."}],"source_content_type":"text/x-python","patch_set":23,"id":"ba63e191_0a23dbbe","line":3203,"range":{"start_line":3203,"start_character":26,"end_line":3203,"end_character":54},"in_reply_to":"ba63e191_eb08d02a","updated":"2016-01-19 08:23:00.000000000","message":"Nothing to force if VM is paused already. It won\u0027t write to memory so LM will complete in finite time.","commit_id":"917e478a19eba6ced2d9add9a902a672d813cca2"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"098fa77cdb123924bb3fcfb2257e19c5f260cdb7","unresolved":false,"context_lines":[{"line_number":3185,"context_line":""},{"line_number":3186,"context_line":"    @check_instance_lock"},{"line_number":3187,"context_line":"    @check_instance_cell"},{"line_number":3188,"context_line":"    @check_instance_state(vm_state\u003d[vm_states.ACTIVE],"},{"line_number":3189,"context_line":"                          task_state\u003d[task_states.MIGRATING])"},{"line_number":3190,"context_line":"    def live_migrate_force_complete(self, context, instance, migration_id):"},{"line_number":3191,"context_line":"        \"\"\"Force live migration to complete."},{"line_number":3192,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"9a68dd71_0fee6d8b","line":3189,"range":{"start_line":3188,"start_character":26,"end_line":3189,"end_character":59},"updated":"2016-01-27 08:05:50.000000000","message":"we can also live migrate instances in vm_states.PAUSED, we cannot force_complete those instances?","commit_id":"b8c8303193d1ebf34dbb69d499529f5292c02ed3"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"18391ff72594c607eee34a6dc6d39a453cdeaf9f","unresolved":false,"context_lines":[{"line_number":3185,"context_line":""},{"line_number":3186,"context_line":"    @check_instance_lock"},{"line_number":3187,"context_line":"    @check_instance_cell"},{"line_number":3188,"context_line":"    @check_instance_state(vm_state\u003d[vm_states.ACTIVE],"},{"line_number":3189,"context_line":"                          task_state\u003d[task_states.MIGRATING])"},{"line_number":3190,"context_line":"    def live_migrate_force_complete(self, context, instance, migration_id):"},{"line_number":3191,"context_line":"        \"\"\"Force live migration to complete."},{"line_number":3192,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"9a68dd71_6f012906","line":3189,"range":{"start_line":3188,"start_character":26,"end_line":3189,"end_character":59},"in_reply_to":"9a68dd71_0fee6d8b","updated":"2016-01-27 08:10:40.000000000","message":"I got same question on PS 23, see Pawel\u0027s comments on https://review.openstack.org/#/c/245921/23/nova/compute/api.py","commit_id":"b8c8303193d1ebf34dbb69d499529f5292c02ed3"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"9dca76d19b2a2653b66c7331a9cbed39bee4a83c","unresolved":false,"context_lines":[{"line_number":3185,"context_line":""},{"line_number":3186,"context_line":"    @check_instance_lock"},{"line_number":3187,"context_line":"    @check_instance_cell"},{"line_number":3188,"context_line":"    @check_instance_state(vm_state\u003d[vm_states.ACTIVE],"},{"line_number":3189,"context_line":"                          task_state\u003d[task_states.MIGRATING])"},{"line_number":3190,"context_line":"    def live_migrate_force_complete(self, context, instance, migration_id):"},{"line_number":3191,"context_line":"        \"\"\"Force live migration to complete."},{"line_number":3192,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"9a68dd71_188f9124","line":3189,"range":{"start_line":3188,"start_character":26,"end_line":3189,"end_character":59},"in_reply_to":"9a68dd71_6f012906","updated":"2016-01-27 09:23:18.000000000","message":"Zhenyu, what would stop such instance from being migrated successfully? It does not dirty memory (no cpu cycles) so it will finish in a finite time.","commit_id":"b8c8303193d1ebf34dbb69d499529f5292c02ed3"}],"nova/compute/manager.py":[{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"a376c07269721aaa249750b356072030570c4343","unresolved":false,"context_lines":[{"line_number":5199,"context_line":"                 context\u003dcontext, instance\u003dinstance)"},{"line_number":5200,"context_line":""},{"line_number":5201,"context_line":"        migration \u003d objects.Migration.get_by_id(context, migration_id)"},{"line_number":5202,"context_line":"        if migration.status !\u003d \u0027running\u0027:"},{"line_number":5203,"context_line":"            raise exception.InvalidMigrationState(migration_id\u003dmigration_id,"},{"line_number":5204,"context_line":"                                                  instance_uuid\u003dinstance.uuid,"},{"line_number":5205,"context_line":"                                                  state\u003dmigration.status,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a8ffd7b_adf8984a","line":5202,"updated":"2015-12-01 06:20:04.000000000","message":"I see this is a cast method, so exception.InvalidMigrationState will not be raised to REST API layer, we can move this check to compure_api layer(before rpc call)","commit_id":"bc3dfce42dc697a8f269d5c95b61b1e37234b596"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"c874555096eee96e66c23a40fdc1603dc74595ca","unresolved":false,"context_lines":[{"line_number":5199,"context_line":"                 context\u003dcontext, instance\u003dinstance)"},{"line_number":5200,"context_line":""},{"line_number":5201,"context_line":"        migration \u003d objects.Migration.get_by_id(context, migration_id)"},{"line_number":5202,"context_line":"        if migration.status !\u003d \u0027running\u0027:"},{"line_number":5203,"context_line":"            raise exception.InvalidMigrationState(migration_id\u003dmigration_id,"},{"line_number":5204,"context_line":"                                                  instance_uuid\u003dinstance.uuid,"},{"line_number":5205,"context_line":"                                                  state\u003dmigration.status,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a8ffd7b_7ecb341f","line":5202,"in_reply_to":"9a8ffd7b_adf8984a","updated":"2015-12-01 07:43:25.000000000","message":"Eli, we don\u0027t need this check in the api because we ask database from migration that is running, so we are sure that we will get \u0027running\u0027 one or an exception will be raised.\n\nI can\u0027t remove this check from there, because, for instance, there might be a delay between API and compute and, let\u0027s say, live migration can be cancelled in the meanwhile. We don\u0027t want to pause VM in such scenario. There also might be an error at the end of live migration so everything will be rolled back - we don\u0027t want to pause VM in this case too.","commit_id":"bc3dfce42dc697a8f269d5c95b61b1e37234b596"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"8bfd9f07201e6a89bcd93bc720afba599e9f0d0c","unresolved":false,"context_lines":[{"line_number":5223,"context_line":"        LOG.info(_LI(\u0027Pausing instance during live migration.\u0027),"},{"line_number":5224,"context_line":"                 context\u003dcontext, instance\u003dinstance)"},{"line_number":5225,"context_line":""},{"line_number":5226,"context_line":"        migration \u003d objects.Migration.get_by_id(context, migration_id)"},{"line_number":5227,"context_line":"        if migration.status !\u003d \u0027running\u0027:"},{"line_number":5228,"context_line":"            raise exception.InvalidMigrationState(migration_id\u003dmigration_id,"},{"line_number":5229,"context_line":"                                                  instance_uuid\u003dinstance.uuid,"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa69d971_0b9a5d6e","line":5226,"updated":"2016-01-06 06:38:16.000000000","message":"do we need to get the migration again since you have done it in https://review.openstack.org/#/c/245921/18/nova/compute/api.py","commit_id":"7c56744373d5f90fbcd85a5c3181a0a220bc864d"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"f2543735769dcacbd053a96f7abc1408b1ffe034","unresolved":false,"context_lines":[{"line_number":5223,"context_line":"        LOG.info(_LI(\u0027Pausing instance during live migration.\u0027),"},{"line_number":5224,"context_line":"                 context\u003dcontext, instance\u003dinstance)"},{"line_number":5225,"context_line":""},{"line_number":5226,"context_line":"        migration \u003d objects.Migration.get_by_id(context, migration_id)"},{"line_number":5227,"context_line":"        if migration.status !\u003d \u0027running\u0027:"},{"line_number":5228,"context_line":"            raise exception.InvalidMigrationState(migration_id\u003dmigration_id,"},{"line_number":5229,"context_line":"                                                  instance_uuid\u003dinstance.uuid,"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa69d971_16bfe4aa","line":5226,"in_reply_to":"fa69d971_0b9a5d6e","updated":"2016-01-06 07:15:47.000000000","message":"Consider scenario when there is delay between nova-api and nova-compute (particularly in HA setup). If we do not check this we might end up with a VM in paused state on source host when live migration is already aborted.","commit_id":"7c56744373d5f90fbcd85a5c3181a0a220bc864d"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"2995982c692efa22020fbdf7de09f4ed36443ede","unresolved":false,"context_lines":[{"line_number":5223,"context_line":"        LOG.info(_LI(\u0027Pausing instance during live migration.\u0027),"},{"line_number":5224,"context_line":"                 context\u003dcontext, instance\u003dinstance)"},{"line_number":5225,"context_line":""},{"line_number":5226,"context_line":"        migration \u003d objects.Migration.get_by_id(context, migration_id)"},{"line_number":5227,"context_line":"        if migration.status !\u003d \u0027running\u0027:"},{"line_number":5228,"context_line":"            raise exception.InvalidMigrationState(migration_id\u003dmigration_id,"},{"line_number":5229,"context_line":"                                                  instance_uuid\u003dinstance.uuid,"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa69d971_b62e18f9","line":5226,"in_reply_to":"fa69d971_16bfe4aa","updated":"2016-01-06 07:18:17.000000000","message":"thanks Pawel, make sense","commit_id":"7c56744373d5f90fbcd85a5c3181a0a220bc864d"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"6b34be933ddc47a84a8eabc552fb13d796c2c774","unresolved":false,"context_lines":[{"line_number":5210,"context_line":"    @wrap_exception()"},{"line_number":5211,"context_line":"    @wrap_instance_event"},{"line_number":5212,"context_line":"    @wrap_instance_fault"},{"line_number":5213,"context_line":"    def live_migration_pause_instance(self, context, instance, migration_id):"},{"line_number":5214,"context_line":"        \"\"\"Pause an instance on this host during live migration process to"},{"line_number":5215,"context_line":"        prevent VM from dirtying memory and therefore force live migration to"},{"line_number":5216,"context_line":"        complete."}],"source_content_type":"text/x-python","patch_set":20,"id":"da6ed579_99d8901f","line":5213,"updated":"2016-01-12 12:08:44.000000000","message":"That method is ok but if we go for a more general solution we need one more method call live_migration_force_complete which calls this one in the case the \u0027strategy\u0027 requested is \u0027pause\u0027","commit_id":"434c380df678ab70d32955f48d9f81a6cccd4fc4"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c4cc30a75441a1e417e82a25ef8cb44ab76c4775","unresolved":false,"context_lines":[{"line_number":5260,"context_line":"        :param migration_id: ID of ongoing migration"},{"line_number":5261,"context_line":""},{"line_number":5262,"context_line":"        \"\"\""},{"line_number":5263,"context_line":"        migration \u003d objects.Migration.get_by_id(context, migration_id)"},{"line_number":5264,"context_line":"        if migration.status !\u003d \u0027running\u0027:"},{"line_number":5265,"context_line":"            raise exception.InvalidMigrationState(migration_id\u003dmigration_id,"},{"line_number":5266,"context_line":"                                                  instance_uuid\u003dinstance.uuid,"}],"source_content_type":"text/x-python","patch_set":39,"id":"bae84128_05b81fc7","line":5263,"updated":"2016-02-23 17:50:15.000000000","message":"I am not sure why we don\u0027t pass the migration object here, this needs fixing in a follow up I feel, came up reviewing the cancel live-migrate feature.","commit_id":"c9091d0871948377685feca0eb2e41d8ad38228a"}],"nova/compute/rpcapi.py":[{"author":{"_account_id":7461,"name":"Paul Murray","email":"pmurray@hpe.com","username":"ptm"},"change_message_id":"cc28b2d7bb0184557b6782984d05e47b3cf28c92","unresolved":false,"context_lines":[{"line_number":312,"context_line":"        * 4.5  - Add migration, scheduler_node and limits arguments to"},{"line_number":313,"context_line":"                 rebuild_instance()"},{"line_number":314,"context_line":"        * 4.6  - Add trigger_crash_dump()"},{"line_number":315,"context_line":"        * 4.7  - Add live_migration_pause_instance()"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        ... Liberty supports messaging version 4.5. So, any changes to"},{"line_number":318,"context_line":"        existing methods in 4.x after that point should be done so that they"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_df51b5d9","line":315,"updated":"2016-01-04 16:27:20.000000000","message":"This should be moved down - liberty stops at 4.5. See: https://review.openstack.org/#/c/263296/","commit_id":"cf9cfff25e65399a53424f2a8bac86a882d0dc42"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"6b34be933ddc47a84a8eabc552fb13d796c2c774","unresolved":false,"context_lines":[{"line_number":603,"context_line":"                   dest\u003ddest, block_migration\u003dblock_migration,"},{"line_number":604,"context_line":"                   migrate_data\u003dmigrate_data, **args)"},{"line_number":605,"context_line":""},{"line_number":606,"context_line":"    def live_migration_pause_instance(self, ctxt, instance, migration_id):"},{"line_number":607,"context_line":"        version \u003d \u00274.7\u0027"},{"line_number":608,"context_line":"        cctxt \u003d self.client.prepare(server\u003d_compute_host(None, instance),"},{"line_number":609,"context_line":"                version\u003dversion)"}],"source_content_type":"text/x-python","patch_set":20,"id":"da6ed579_79203cf8","line":606,"updated":"2016-01-12 12:08:44.000000000","message":"If we go for the more general solution this method needs to be renamed","commit_id":"434c380df678ab70d32955f48d9f81a6cccd4fc4"}],"nova/tests/unit/api/openstack/compute/test_server_migrations.py":[{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"8afb88f89b486d117fd00fbc9f8d79d6c03affe8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2011 OpenStack Foundation"},{"line_number":2,"context_line":"# Copyright 2013 IBM Corp."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":5,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_89d7a7be","line":2,"range":{"start_line":2,"start_character":25,"end_line":2,"end_character":26},"updated":"2016-01-04 02:44:34.000000000","message":"IBM?","commit_id":"cf9cfff25e65399a53424f2a8bac86a882d0dc42"},{"author":{"_account_id":7461,"name":"Paul Murray","email":"pmurray@hpe.com","username":"ptm"},"change_message_id":"cc28b2d7bb0184557b6782984d05e47b3cf28c92","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2011 OpenStack Foundation"},{"line_number":2,"context_line":"# Copyright 2013 IBM Corp."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":5,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_dfd775eb","line":2,"range":{"start_line":2,"start_character":25,"end_line":2,"end_character":26},"in_reply_to":"fa69d971_89d7a7be","updated":"2016-01-04 16:27:20.000000000","message":"Oops!\n\nDates are wrong too :)","commit_id":"cf9cfff25e65399a53424f2a8bac86a882d0dc42"},{"author":{"_account_id":7461,"name":"Paul Murray","email":"pmurray@hpe.com","username":"ptm"},"change_message_id":"cc28b2d7bb0184557b6782984d05e47b3cf28c92","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        self.req \u003d fakes.HTTPRequest.blank(\u0027\u0027, version\u003dself.wsgi_api_version)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def test_migrate_live_policy_failed(self):"},{"line_number":100,"context_line":"        rule_name \u003d \"os_compute_api:os-server-migrations:force_complete\""},{"line_number":101,"context_line":"        self.policy.set_rules({rule_name: \"project:non_fake\"})"},{"line_number":102,"context_line":"        body_args \u003d {\u0027force_complete\u0027: None}"},{"line_number":103,"context_line":"        exc \u003d self.assertRaises("}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_7f4be987","line":100,"updated":"2016-01-04 16:27:20.000000000","message":"see comment at: https://review.openstack.org/#/c/245921/16/etc/nova/policy.json\n\nshould be \"os_compute_api:servers:migrations:force_complete\"","commit_id":"cf9cfff25e65399a53424f2a8bac86a882d0dc42"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7492c93fd6c2ba953e0dbe8573fe91b52da591b3","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        self.compute_api \u003d self.controller.compute_api"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def test_force_complete_succeeded(self):"},{"line_number":36,"context_line":"        with test.nested("},{"line_number":37,"context_line":"                mock.patch.object("},{"line_number":38,"context_line":"                    self.compute_api, \u0027live_migrate_force_complete\u0027),"},{"line_number":39,"context_line":"                mock.patch.object(self.compute_api, \u0027get\u0027)"},{"line_number":40,"context_line":"        ) as (live_migrate_force_complete, compute_api_get):"},{"line_number":41,"context_line":"            self.controller._force_complete(self.req, \u00271\u0027, \u00271\u0027,"},{"line_number":42,"context_line":"                                            body\u003d{\u0027force_complete\u0027: None})"},{"line_number":43,"context_line":"            live_migrate_force_complete.assert_called_once_with("},{"line_number":44,"context_line":"                self.context, compute_api_get(), \u00271\u0027)"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba63e191_2146fd23","line":41,"range":{"start_line":36,"start_character":1,"end_line":41,"end_character":1},"updated":"2016-01-19 10:32:01.000000000","message":"you can avoid this nested structure if you do the mocking as a decorator","commit_id":"3e88f9b2eef14f3c54a5dc5257bbcfa306f27cc7"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"67a025b332f77eef89d294ffbdc8665f303e1a89","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        self.compute_api \u003d self.controller.compute_api"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def test_force_complete_succeeded(self):"},{"line_number":36,"context_line":"        with test.nested("},{"line_number":37,"context_line":"                mock.patch.object("},{"line_number":38,"context_line":"                    self.compute_api, \u0027live_migrate_force_complete\u0027),"},{"line_number":39,"context_line":"                mock.patch.object(self.compute_api, \u0027get\u0027)"},{"line_number":40,"context_line":"        ) as (live_migrate_force_complete, compute_api_get):"},{"line_number":41,"context_line":"            self.controller._force_complete(self.req, \u00271\u0027, \u00271\u0027,"},{"line_number":42,"context_line":"                                            body\u003d{\u0027force_complete\u0027: None})"},{"line_number":43,"context_line":"            live_migrate_force_complete.assert_called_once_with("},{"line_number":44,"context_line":"                self.context, compute_api_get(), \u00271\u0027)"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a68dd71_2097803b","line":41,"range":{"start_line":36,"start_character":1,"end_line":41,"end_character":1},"in_reply_to":"ba63e191_2146fd23","updated":"2016-01-22 12:49:11.000000000","message":"Done","commit_id":"3e88f9b2eef14f3c54a5dc5257bbcfa306f27cc7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7492c93fd6c2ba953e0dbe8573fe91b52da591b3","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def _test_force_complete_failed_with_exception("},{"line_number":47,"context_line":"            self, fake_exc, expected_exc):"},{"line_number":48,"context_line":"        with test.nested("},{"line_number":49,"context_line":"                mock.patch.object(self.compute_api,"},{"line_number":50,"context_line":"                                  \u0027live_migrate_force_complete\u0027,"},{"line_number":51,"context_line":"                                  side_effect\u003dfake_exc),"},{"line_number":52,"context_line":"                mock.patch.object(self.compute_api, \u0027get\u0027)):"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"            self.assertRaises(expected_exc,"},{"line_number":55,"context_line":"                              self.controller._force_complete,"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba63e191_415e91ea","line":52,"range":{"start_line":48,"start_character":0,"end_line":52,"end_character":60},"updated":"2016-01-19 10:32:01.000000000","message":"ditto","commit_id":"3e88f9b2eef14f3c54a5dc5257bbcfa306f27cc7"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"67a025b332f77eef89d294ffbdc8665f303e1a89","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def _test_force_complete_failed_with_exception("},{"line_number":47,"context_line":"            self, fake_exc, expected_exc):"},{"line_number":48,"context_line":"        with test.nested("},{"line_number":49,"context_line":"                mock.patch.object(self.compute_api,"},{"line_number":50,"context_line":"                                  \u0027live_migrate_force_complete\u0027,"},{"line_number":51,"context_line":"                                  side_effect\u003dfake_exc),"},{"line_number":52,"context_line":"                mock.patch.object(self.compute_api, \u0027get\u0027)):"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"            self.assertRaises(expected_exc,"},{"line_number":55,"context_line":"                              self.controller._force_complete,"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a68dd71_00a35c9e","line":52,"range":{"start_line":48,"start_character":0,"end_line":52,"end_character":60},"in_reply_to":"ba63e191_415e91ea","updated":"2016-01-22 12:49:11.000000000","message":"Done","commit_id":"3e88f9b2eef14f3c54a5dc5257bbcfa306f27cc7"}],"nova/tests/unit/compute/test_compute_api.py":[{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"6b34be933ddc47a84a8eabc552fb13d796c2c774","unresolved":false,"context_lines":[{"line_number":3031,"context_line":"        migration.status \u003d \u0027running\u0027"},{"line_number":3032,"context_line":"        get_by_id_and_instance.return_value \u003d migration"},{"line_number":3033,"context_line":""},{"line_number":3034,"context_line":"        if self.cell_type \u003d\u003d \u0027api\u0027:"},{"line_number":3035,"context_line":"            # cell api has not been implemented."},{"line_number":3036,"context_line":"            return"},{"line_number":3037,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":20,"id":"da6ed579_74904396","line":3034,"range":{"start_line":3034,"start_character":8,"end_line":3034,"end_character":35},"updated":"2016-01-12 12:08:44.000000000","message":"nit: can you just move this check as first thing for this method?","commit_id":"434c380df678ab70d32955f48d9f81a6cccd4fc4"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"431f0999772590516e572619d77dca4bfc5ac635","unresolved":false,"context_lines":[{"line_number":3090,"context_line":"        if self.cell_type \u003d\u003d \u0027api\u0027:"},{"line_number":3091,"context_line":"            # cell api has not been implemented."},{"line_number":3092,"context_line":"            return"},{"line_number":3093,"context_line":"        else:"},{"line_number":3094,"context_line":"            rpcapi \u003d self.compute_api.compute_rpcapi"},{"line_number":3095,"context_line":""},{"line_number":3096,"context_line":"        instance \u003d self._create_instance_obj()"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a68dd71_bd5dd716","line":3093,"updated":"2016-01-22 13:29:25.000000000","message":"nit: else is not necessary here.","commit_id":"068b71648391629eeb920cf029603a38fc759027"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"2aa0f459f42a8c8c16ca932ba46ad044cf45cb77","unresolved":false,"context_lines":[{"line_number":3090,"context_line":"        if self.cell_type \u003d\u003d \u0027api\u0027:"},{"line_number":3091,"context_line":"            # cell api has not been implemented."},{"line_number":3092,"context_line":"            return"},{"line_number":3093,"context_line":"        else:"},{"line_number":3094,"context_line":"            rpcapi \u003d self.compute_api.compute_rpcapi"},{"line_number":3095,"context_line":""},{"line_number":3096,"context_line":"        instance \u003d self._create_instance_obj()"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a68dd71_146b95b8","line":3093,"in_reply_to":"9a68dd71_bd5dd716","updated":"2016-01-22 14:55:41.000000000","message":"Done","commit_id":"068b71648391629eeb920cf029603a38fc759027"}],"nova/tests/unit/compute/test_compute_mgr.py":[{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"431f0999772590516e572619d77dca4bfc5ac635","unresolved":false,"context_lines":[{"line_number":4310,"context_line":""},{"line_number":4311,"context_line":"        _test()"},{"line_number":4312,"context_line":""},{"line_number":4313,"context_line":"    @mock.patch.object(db, \u0027instance_fault_create\u0027)"},{"line_number":4314,"context_line":"    def test_live_migration_force_complete_succeeded(self,"},{"line_number":4315,"context_line":"                                                     instance_fault_create):"},{"line_number":4316,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"9a68dd71_ddb20b94","line":4313,"updated":"2016-01-22 13:29:25.000000000","message":"I added an self.assertTrue(instance_fault_create.called) and I verified that is not called, I think you can remove it.","commit_id":"068b71648391629eeb920cf029603a38fc759027"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"2aa0f459f42a8c8c16ca932ba46ad044cf45cb77","unresolved":false,"context_lines":[{"line_number":4310,"context_line":""},{"line_number":4311,"context_line":"        _test()"},{"line_number":4312,"context_line":""},{"line_number":4313,"context_line":"    @mock.patch.object(db, \u0027instance_fault_create\u0027)"},{"line_number":4314,"context_line":"    def test_live_migration_force_complete_succeeded(self,"},{"line_number":4315,"context_line":"                                                     instance_fault_create):"},{"line_number":4316,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"9a68dd71_b4a2c9fb","line":4313,"in_reply_to":"9a68dd71_ddb20b94","updated":"2016-01-22 14:55:41.000000000","message":"Good catch, thanks! Done","commit_id":"068b71648391629eeb920cf029603a38fc759027"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"431f0999772590516e572619d77dca4bfc5ac635","unresolved":false,"context_lines":[{"line_number":4342,"context_line":"        _do_test()"},{"line_number":4343,"context_line":""},{"line_number":4344,"context_line":"    @mock.patch.object(compute_utils, \u0027add_instance_fault_from_exc\u0027)"},{"line_number":4345,"context_line":"    @mock.patch.object(db, \u0027instance_fault_create\u0027)"},{"line_number":4346,"context_line":"    def test_live_migration_pause_vm_invalid_migration_state("},{"line_number":4347,"context_line":"            self, instance_fault_create, add_instance_fault_from_exc):"},{"line_number":4348,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"9a68dd71_bd7cf7b5","line":4345,"range":{"start_line":4345,"start_character":4,"end_line":4345,"end_character":51},"updated":"2016-01-22 13:29:25.000000000","message":"same as above","commit_id":"068b71648391629eeb920cf029603a38fc759027"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"2aa0f459f42a8c8c16ca932ba46ad044cf45cb77","unresolved":false,"context_lines":[{"line_number":4342,"context_line":"        _do_test()"},{"line_number":4343,"context_line":""},{"line_number":4344,"context_line":"    @mock.patch.object(compute_utils, \u0027add_instance_fault_from_exc\u0027)"},{"line_number":4345,"context_line":"    @mock.patch.object(db, \u0027instance_fault_create\u0027)"},{"line_number":4346,"context_line":"    def test_live_migration_pause_vm_invalid_migration_state("},{"line_number":4347,"context_line":"            self, instance_fault_create, add_instance_fault_from_exc):"},{"line_number":4348,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"9a68dd71_74a8d1db","line":4345,"range":{"start_line":4345,"start_character":4,"end_line":4345,"end_character":51},"in_reply_to":"9a68dd71_bd7cf7b5","updated":"2016-01-22 14:55:41.000000000","message":"Done","commit_id":"068b71648391629eeb920cf029603a38fc759027"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"26a18c27478fb28375829302c79c45298de93784","unresolved":false,"context_lines":[{"line_number":4341,"context_line":""},{"line_number":4342,"context_line":"            _notify_about_instance_usage.assert_has_calls(_notify_usage_calls)"},{"line_number":4343,"context_line":""},{"line_number":4344,"context_line":"        _do_test()"},{"line_number":4345,"context_line":""},{"line_number":4346,"context_line":"    @mock.patch.object(compute_utils, \u0027add_instance_fault_from_exc\u0027)"},{"line_number":4347,"context_line":"    def test_live_migration_pause_vm_invalid_migration_state("}],"source_content_type":"text/x-python","patch_set":29,"id":"9a68dd71_ca60f6d1","line":4344,"range":{"start_line":4344,"start_character":8,"end_line":4344,"end_character":18},"updated":"2016-01-22 15:27:31.000000000","message":"I do not see the point to have a separate method","commit_id":"5ede34757f8637dc623168126bf1e8b90c6dc353"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"3f6efc343886487cf9d2963d53b4e24bea1c6237","unresolved":false,"context_lines":[{"line_number":4341,"context_line":""},{"line_number":4342,"context_line":"            _notify_about_instance_usage.assert_has_calls(_notify_usage_calls)"},{"line_number":4343,"context_line":""},{"line_number":4344,"context_line":"        _do_test()"},{"line_number":4345,"context_line":""},{"line_number":4346,"context_line":"    @mock.patch.object(compute_utils, \u0027add_instance_fault_from_exc\u0027)"},{"line_number":4347,"context_line":"    def test_live_migration_pause_vm_invalid_migration_state("}],"source_content_type":"text/x-python","patch_set":29,"id":"9a68dd71_3d547551","line":4344,"range":{"start_line":4344,"start_character":8,"end_line":4344,"end_character":18},"in_reply_to":"9a68dd71_ca60f6d1","updated":"2016-01-22 17:18:56.000000000","message":"With separate method I can mock already imported/existing objects.","commit_id":"5ede34757f8637dc623168126bf1e8b90c6dc353"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"26a18c27478fb28375829302c79c45298de93784","unresolved":false,"context_lines":[{"line_number":4359,"context_line":"                              self.compute.live_migration_force_complete,"},{"line_number":4360,"context_line":"                              self.context, instance, migration.id)"},{"line_number":4361,"context_line":""},{"line_number":4362,"context_line":"        _do_test()"}],"source_content_type":"text/x-python","patch_set":29,"id":"9a68dd71_8a843e5e","line":4362,"range":{"start_line":4362,"start_character":6,"end_line":4362,"end_character":18},"updated":"2016-01-22 15:27:31.000000000","message":"same as above","commit_id":"5ede34757f8637dc623168126bf1e8b90c6dc353"}],"nova/tests/unit/fake_policy.py":[{"author":{"_account_id":7461,"name":"Paul Murray","email":"pmurray@hpe.com","username":"ptm"},"change_message_id":"cc28b2d7bb0184557b6782984d05e47b3cf28c92","unresolved":false,"context_lines":[{"line_number":373,"context_line":"    \"os_compute_api:server-metadata:delete\": \"\","},{"line_number":374,"context_line":"    \"os_compute_api:server-metadata:show\": \"\","},{"line_number":375,"context_line":"    \"os_compute_api:server-metadata:index\": \"\","},{"line_number":376,"context_line":"    \"os_compute_api:os-server-migrations:force_complete\": \"\","},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    \"network:get_all\": \"\","},{"line_number":379,"context_line":"    \"network:get\": \"\","}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_e2197c7a","line":376,"updated":"2016-01-04 16:27:20.000000000","message":"Same again: \"os_compute_api:servers:migrations:force_complete\"","commit_id":"cf9cfff25e65399a53424f2a8bac86a882d0dc42"}],"nova/tests/unit/test_policy.py":[{"author":{"_account_id":7461,"name":"Paul Murray","email":"pmurray@hpe.com","username":"ptm"},"change_message_id":"cc28b2d7bb0184557b6782984d05e47b3cf28c92","unresolved":false,"context_lines":[{"line_number":350,"context_line":"\"os_compute_api:os-quota-sets:detail\","},{"line_number":351,"context_line":"\"os_compute_api:os-security-group-default-rules\","},{"line_number":352,"context_line":"\"os_compute_api:os-server-diagnostics\","},{"line_number":353,"context_line":"\"os_compute_api:os-server-migrations:force_complete\","},{"line_number":354,"context_line":"\"os_compute_api:os-services\","},{"line_number":355,"context_line":"\"os_compute_api:os-shelve:shelve_offload\","},{"line_number":356,"context_line":"\"os_compute_api:os-simple-tenant-usage:list\","}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_c26318db","line":353,"updated":"2016-01-04 16:27:20.000000000","message":"And here: \"os_compute_api:servers:migrations:force_complete\"","commit_id":"cf9cfff25e65399a53424f2a8bac86a882d0dc42"}],"nova/tests/unit/virt/test_virt_drivers.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7492c93fd6c2ba953e0dbe8573fe91b52da591b3","unresolved":false,"context_lines":[{"line_number":669,"context_line":"    @catch_notimplementederror"},{"line_number":670,"context_line":"    def test_live_migration_force_complete(self):"},{"line_number":671,"context_line":"        instance_ref, network_info \u003d self._get_running_instance()"},{"line_number":672,"context_line":"        self.connection.live_migration_force_complete(instance_ref)"},{"line_number":673,"context_line":""},{"line_number":674,"context_line":"    @catch_notimplementederror"},{"line_number":675,"context_line":"    def _check_available_resource_fields(self, host_status):"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba63e191_01abb98a","line":672,"updated":"2016-01-19 10:32:01.000000000","message":"Can we assert something here?","commit_id":"3e88f9b2eef14f3c54a5dc5257bbcfa306f27cc7"},{"author":{"_account_id":7461,"name":"Paul Murray","email":"pmurray@hpe.com","username":"ptm"},"change_message_id":"354df3d6beacf4c54415d6a695e0fc1dec1b3b7d","unresolved":false,"context_lines":[{"line_number":669,"context_line":"    @catch_notimplementederror"},{"line_number":670,"context_line":"    def test_live_migration_force_complete(self):"},{"line_number":671,"context_line":"        instance_ref, network_info \u003d self._get_running_instance()"},{"line_number":672,"context_line":"        self.connection.live_migration_force_complete(instance_ref)"},{"line_number":673,"context_line":""},{"line_number":674,"context_line":"    @catch_notimplementederror"},{"line_number":675,"context_line":"    def _check_available_resource_fields(self, host_status):"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a68dd71_b51fa35a","line":672,"in_reply_to":"ba63e191_01abb98a","updated":"2016-01-20 15:49:10.000000000","message":"This is the general case where there is no implementation. The decorator catches the exception - existing use pattern in this file. The unit for libvirt overrides this method to test the implementation there.","commit_id":"3e88f9b2eef14f3c54a5dc5257bbcfa306f27cc7"}]}
