)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"2496141bd61ec6e9dbc522f9bbd7efcd4819d567","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     TommyLike \u003ctommylikehu@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-04-07 11:47:39 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Enable backend specific async migration."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch implements the spec [1] on enable backend async"},{"line_number":10,"context_line":"migration, to be clear, this one only consists modification"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":40,"id":"ff0f0b1f_28d8897d","line":7,"range":{"start_line":7,"start_character":39,"end_line":7,"end_character":40},"updated":"2017-06-06 03:39:03.000000000","message":"Summary lines shouldn\u0027t end with a \u0027.\u0027","commit_id":"14b9260aac03d95e1ba5c867e361ef72b326c3e0"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"e453883a8834873319ae8baf916c73e65057845d","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     TommyLike \u003ctommylikehu@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-04-07 11:47:39 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Enable backend specific async migration."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch implements the spec [1] on enable backend async"},{"line_number":10,"context_line":"migration, to be clear, this one only consists modification"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":40,"id":"df140735_8ca0eef5","line":7,"range":{"start_line":7,"start_character":39,"end_line":7,"end_character":40},"in_reply_to":"ff0f0b1f_28d8897d","updated":"2017-06-06 05:54:47.000000000","message":"Done","commit_id":"14b9260aac03d95e1ba5c867e361ef72b326c3e0"}],"cinder/volume/driver.py":[{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"00e43690ff054341e42a3752b733c861db99da36","unresolved":false,"context_lines":[{"line_number":1584,"context_line":"        return (False, False, None)"},{"line_number":1585,"context_line":""},{"line_number":1586,"context_line":"    def complete_migration_target(self, context, volume, src_volume):"},{"line_number":1587,"context_line":"        \"\"\"Waite for the migration complete in async mode."},{"line_number":1588,"context_line":""},{"line_number":1589,"context_line":"        This is for drivers that don\u0027t implement complete_migration_target()"},{"line_number":1590,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"bacf61ea_e0dfdb37","line":1587,"range":{"start_line":1587,"start_character":11,"end_line":1587,"end_character":16},"updated":"2016-08-01 02:31:30.000000000","message":"s/Waite/Wait","commit_id":"f45a1af44425fdf396aac92112a739e315db3dc2"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"809617b2c85ae616c75308c2d4a5b60bfa233d43","unresolved":false,"context_lines":[{"line_number":1584,"context_line":"        return (False, False, None)"},{"line_number":1585,"context_line":""},{"line_number":1586,"context_line":"    def complete_migration_target(self, context, volume, src_volume):"},{"line_number":1587,"context_line":"        \"\"\"Waite for the migration complete in async mode."},{"line_number":1588,"context_line":""},{"line_number":1589,"context_line":"        This is for drivers that don\u0027t implement complete_migration_target()"},{"line_number":1590,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":17,"id":"bacf61ea_1d9df109","line":1587,"range":{"start_line":1587,"start_character":11,"end_line":1587,"end_character":16},"updated":"2016-08-08 09:25:59.000000000","message":"wait","commit_id":"b501d783a70db253ca39b436322dd10dba5b423e"},{"author":{"_account_id":18026,"name":"huanan","email":"huanan@huawei.com","username":"huanan"},"change_message_id":"4cd075a027886cc5e2cd087cb7e23faa7f01d679","unresolved":false,"context_lines":[{"line_number":1584,"context_line":"        return (False, False, None)"},{"line_number":1585,"context_line":""},{"line_number":1586,"context_line":"    def complete_migration_target(self, context, volume, src_volume):"},{"line_number":1587,"context_line":"        \"\"\"Waite for the migration complete in async mode."},{"line_number":1588,"context_line":""},{"line_number":1589,"context_line":"        This is for drivers that don\u0027t implement complete_migration_target()"},{"line_number":1590,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":17,"id":"9ad45d7e_74d04354","line":1587,"range":{"start_line":1587,"start_character":11,"end_line":1587,"end_character":16},"in_reply_to":"bacf61ea_1d9df109","updated":"2016-08-09 08:03:48.000000000","message":"Done","commit_id":"b501d783a70db253ca39b436322dd10dba5b423e"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"7d35306e12effb8474377d88be23c4c88a81dd42","unresolved":false,"context_lines":[{"line_number":1642,"context_line":"        \"\"\""},{"line_number":1643,"context_line":"        return (False, False, None)"},{"line_number":1644,"context_line":""},{"line_number":1645,"context_line":"    def complete_migration_target(self, context, volume, src_volume):"},{"line_number":1646,"context_line":"        \"\"\"Wait for the migration complete in async mode."},{"line_number":1647,"context_line":""},{"line_number":1648,"context_line":"        This is for drivers that don\u0027t implement complete_migration_target()"}],"source_content_type":"text/x-python","patch_set":37,"id":"ba2be162_2ff96ac9","line":1645,"range":{"start_line":1645,"start_character":8,"end_line":1645,"end_character":33},"updated":"2017-02-28 16:08:14.000000000","message":"This function name isn\u0027t clear.  Something like \u0027wait_async_migration\u0027 or something would make more sense.","commit_id":"d07a798b68a74d275cd914410080ad8471cf9f8d"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"01f7fb1d7ff7a6090230b65921c7b74a016cabb1","unresolved":false,"context_lines":[{"line_number":1404,"context_line":"        return False, False, None, None"},{"line_number":1405,"context_line":""},{"line_number":1406,"context_line":"    def complete_migration_target(self, context, volume, src_volume):"},{"line_number":1407,"context_line":"        \"\"\"Wait for the migration complete in async mode."},{"line_number":1408,"context_line":""},{"line_number":1409,"context_line":"        This is for drivers that don\u0027t implement complete_migration_target()"},{"line_number":1410,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":42,"id":"df140735_3f444f74","line":1407,"range":{"start_line":1407,"start_character":10,"end_line":1407,"end_character":42},"updated":"2017-06-06 18:04:48.000000000","message":"Wait for the migration to complete","commit_id":"21ec7cb7fead05aa842b56ec32a3b60e9672a6be"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"c429eb698b3f6a6f12651cc14227fbeed3c1da4b","unresolved":false,"context_lines":[{"line_number":1404,"context_line":"        return False, False, None, None"},{"line_number":1405,"context_line":""},{"line_number":1406,"context_line":"    def complete_migration_target(self, context, volume, src_volume):"},{"line_number":1407,"context_line":"        \"\"\"Wait for the migration complete in async mode."},{"line_number":1408,"context_line":""},{"line_number":1409,"context_line":"        This is for drivers that don\u0027t implement complete_migration_target()"},{"line_number":1410,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":42,"id":"df140735_b1040b80","line":1407,"range":{"start_line":1407,"start_character":10,"end_line":1407,"end_character":42},"in_reply_to":"df140735_3f444f74","updated":"2017-06-07 00:55:56.000000000","message":"Done","commit_id":"21ec7cb7fead05aa842b56ec32a3b60e9672a6be"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"cee20a58be5ad13983a6e9dcd5abc46a1a243c55","unresolved":false,"context_lines":[{"line_number":1409,"context_line":""},{"line_number":1410,"context_line":"    def migrate_volume_target(self, context, volume):"},{"line_number":1411,"context_line":"        \"\"\"Migrate volume on the target host."},{"line_number":1412,"context_line":""},{"line_number":1413,"context_line":"        This is for drivers that don\u0027t implement migrate_volume_target()"},{"line_number":1414,"context_line":"        \"\"\""},{"line_number":1415,"context_line":"        return False, False, None, None"}],"source_content_type":"text/x-python","patch_set":45,"id":"7f231b9d_8db46ef3","line":1412,"updated":"2017-06-19 08:13:26.000000000","message":"Please, add to the docstring what driver should return","commit_id":"958c8a5283ac9c572687338d25307062c8a635b1"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"56225c3e0856e751dc1ab07a2f56ef818f3302a5","unresolved":false,"context_lines":[{"line_number":1409,"context_line":""},{"line_number":1410,"context_line":"    def migrate_volume_target(self, context, volume):"},{"line_number":1411,"context_line":"        \"\"\"Migrate volume on the target host."},{"line_number":1412,"context_line":""},{"line_number":1413,"context_line":"        This is for drivers that don\u0027t implement migrate_volume_target()"},{"line_number":1414,"context_line":"        \"\"\""},{"line_number":1415,"context_line":"        return False, False, None, None"}],"source_content_type":"text/x-python","patch_set":45,"id":"7f231b9d_fefb8a43","line":1412,"in_reply_to":"7f231b9d_8db46ef3","updated":"2017-06-19 10:04:23.000000000","message":"Done","commit_id":"958c8a5283ac9c572687338d25307062c8a635b1"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"cee20a58be5ad13983a6e9dcd5abc46a1a243c55","unresolved":false,"context_lines":[{"line_number":1415,"context_line":"        return False, False, None, None"},{"line_number":1416,"context_line":""},{"line_number":1417,"context_line":"    def complete_migration_target(self, context, volume, src_volume):"},{"line_number":1418,"context_line":"        \"\"\"Wait for the migration to complete in async mode."},{"line_number":1419,"context_line":""},{"line_number":1420,"context_line":"        This is for drivers that don\u0027t implement complete_migration_target()"},{"line_number":1421,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":45,"id":"7f231b9d_6db7d2f6","line":1418,"updated":"2017-06-19 08:13:26.000000000","message":"Please, add to the docstring what driver should return","commit_id":"958c8a5283ac9c572687338d25307062c8a635b1"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"56225c3e0856e751dc1ab07a2f56ef818f3302a5","unresolved":false,"context_lines":[{"line_number":1415,"context_line":"        return False, False, None, None"},{"line_number":1416,"context_line":""},{"line_number":1417,"context_line":"    def complete_migration_target(self, context, volume, src_volume):"},{"line_number":1418,"context_line":"        \"\"\"Wait for the migration to complete in async mode."},{"line_number":1419,"context_line":""},{"line_number":1420,"context_line":"        This is for drivers that don\u0027t implement complete_migration_target()"},{"line_number":1421,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":45,"id":"7f231b9d_def68e5d","line":1418,"in_reply_to":"7f231b9d_6db7d2f6","updated":"2017-06-19 10:04:23.000000000","message":"Done","commit_id":"958c8a5283ac9c572687338d25307062c8a635b1"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"9e3a9113805d7d9a3aaed468c67fb47d02123116","unresolved":false,"context_lines":[{"line_number":1427,"context_line":""},{"line_number":1428,"context_line":"        :param volume: volume object"},{"line_number":1429,"context_line":"        :param migration_info: migration info obtained from"},{"line_number":1430,"context_line":"                               \u0027migrate_volume_target\u0027"},{"line_number":1431,"context_line":"        \"\"\""},{"line_number":1432,"context_line":"        msg \u003d _(\"Complete migration target not implemented.\")"},{"line_number":1433,"context_line":"        raise NotImplementedError(msg)"}],"source_content_type":"text/x-python","patch_set":50,"id":"1f1a1f67_25cd505d","line":1430,"range":{"start_line":1430,"start_character":8,"end_line":1430,"end_character":31},"updated":"2017-07-12 15:16:18.000000000","message":"Do not indent here please.  This will cause docs to fail to build.","commit_id":"242d243db71f7209d98fd0fadf50d1e98b4a949a"}],"cinder/volume/drivers/huawei/huawei_driver.py":[{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"00e43690ff054341e42a3752b733c861db99da36","unresolved":false,"context_lines":[{"line_number":76,"context_line":"               help\u003d\u0027The initiator name of migrate remote device.\u0027),"},{"line_number":77,"context_line":"    cfg.StrOpt(\u0027migrate_device_iscsi_ip\u0027,"},{"line_number":78,"context_line":"               default\u003dNone,"},{"line_number":79,"context_line":"               help\u003d\u0027The remote metro device pool names.\u0027),"},{"line_number":80,"context_line":"]"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":13,"id":"bacf61ea_2088d3c4","line":79,"range":{"start_line":79,"start_character":21,"end_line":79,"end_character":56},"updated":"2016-08-01 02:31:30.000000000","message":"The description of \"migrate_device_iscsi_ip\" is wrong.","commit_id":"f45a1af44425fdf396aac92112a739e315db3dc2"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"00e43690ff054341e42a3752b733c861db99da36","unresolved":false,"context_lines":[{"line_number":688,"context_line":"        pools \u003d self.client.get_all_pools()"},{"line_number":689,"context_line":"        pool_info \u003d self.client.get_pool_info(pool_name, pools)"},{"line_number":690,"context_line":""},{"line_number":691,"context_line":"        lun_params \u003d {\"ALLOCTYPE\": 0,"},{"line_number":692,"context_line":"                     \"PARENTID\": pool_info[\u0027ID\u0027],"},{"line_number":693,"context_line":"                     \"PARENTTYPE\": 216,"},{"line_number":694,"context_line":"                     \"USAGETYPE\": 1,"},{"line_number":695,"context_line":"                     \"WRITEPOLICY\": 2,"},{"line_number":696,"context_line":"                     \"MIRRORPOLICY\": 1,"},{"line_number":697,"context_line":"                     \"INITIALDISTRIBUTEPOLICY\": 0,"},{"line_number":698,"context_line":"                     \"DATATRANSFERPOLICY\": 0,"},{"line_number":699,"context_line":"                     \"IOPRIORITY\": 1,"},{"line_number":700,"context_line":"                     \"READCACHEPOLICY\": 2,"},{"line_number":701,"context_line":"                     \"WRITECACHEPOLICY\": 5,"},{"line_number":702,"context_line":"                     \"PREFETCHPOLICY\": 3,"},{"line_number":703,"context_line":"                     \"REMOTELUNID\": remote_lun_id,"},{"line_number":704,"context_line":"                     \"NAME\": six.text_type(hash(volume.id)),"},{"line_number":705,"context_line":"                     \"DESCRIPTION\": \"edev_lun\","},{"line_number":706,"context_line":"                     \u0027OWNINGCONTROLLER\u0027: tgt_lun_info[\u0027OWNINGCONTROLLER\u0027]}"},{"line_number":707,"context_line":""},{"line_number":708,"context_line":"        for item in lun_params.keys():"},{"line_number":709,"context_line":"            if lun_params.get(item) \u003d\u003d \u0027--\u0027:"}],"source_content_type":"text/x-python","patch_set":13,"id":"bacf61ea_a0c203e7","line":706,"range":{"start_line":691,"start_character":22,"end_line":706,"end_character":74},"updated":"2016-08-01 02:31:30.000000000","message":"pep8 error?","commit_id":"f45a1af44425fdf396aac92112a739e315db3dc2"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"00e43690ff054341e42a3752b733c861db99da36","unresolved":false,"context_lines":[{"line_number":750,"context_line":"            rmt_device \u003d self.configuration.safe_get(\u0027migrate_device\u0027)"},{"line_number":751,"context_line":"            device_id \u003d self.get_migrate_device_id(rmt_device)"},{"line_number":752,"context_line":"            if not device_id:"},{"line_number":753,"context_line":"                msg \u003d _LE(\u0027Get migrate devices failed. Please check if \u0027"},{"line_number":754,"context_line":"                          \u0027migrate device configured in cinder.conf and \u0027"},{"line_number":755,"context_line":"                          \u0027added remote device on array.\u0027)"},{"line_number":756,"context_line":"                LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":13,"id":"bacf61ea_807fffa9","line":753,"range":{"start_line":753,"start_character":31,"end_line":753,"end_character":46},"updated":"2016-08-01 02:31:30.000000000","message":"add migrate devices info in log msg.","commit_id":"f45a1af44425fdf396aac92112a739e315db3dc2"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"00e43690ff054341e42a3752b733c861db99da36","unresolved":false,"context_lines":[{"line_number":759,"context_line":"            self.client.scan_remote_lun(device_id)"},{"line_number":760,"context_line":"            rmt_lun_id \u003d self.client.get_remote_lun_id(device_id)"},{"line_number":761,"context_line":"            if not rmt_lun_id:"},{"line_number":762,"context_line":"                msg \u003d (_LE(\u0027Get remote lun failed. Please check if there have \u0027"},{"line_number":763,"context_line":"                          \u0027remote lun in remote device: %(remote_device)s.\u0027)"},{"line_number":764,"context_line":"                       % {\u0027remote_device\u0027: rmt_device})"},{"line_number":765,"context_line":"                LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":13,"id":"bacf61ea_e046bb79","line":762,"range":{"start_line":762,"start_character":32,"end_line":762,"end_character":42},"updated":"2016-08-01 02:31:30.000000000","message":"ditto.","commit_id":"f45a1af44425fdf396aac92112a739e315db3dc2"},{"author":{"_account_id":19846,"name":"yuan.han@zte.com.cn","email":"yuan.han@zte.com.cn","username":"Michael-ZTE"},"change_message_id":"ab362aa9a9422609c85a9e65e083913ead9c6848","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    cfg.StrOpt(\u0027metro_san_user\u0027,"},{"line_number":57,"context_line":"               default\u003dNone,"},{"line_number":58,"context_line":"               help\u003d\u0027The remote metro device san user.\u0027),"},{"line_number":59,"context_line":"    cfg.StrOpt(\u0027metro_san_password\u0027,"},{"line_number":60,"context_line":"               default\u003dNone,"},{"line_number":61,"context_line":"               help\u003d\u0027The remote metro device san password.\u0027),"},{"line_number":62,"context_line":"    cfg.StrOpt(\u0027metro_domain_name\u0027,"},{"line_number":63,"context_line":"               default\u003dNone,"},{"line_number":64,"context_line":"               help\u003d\u0027The remote metro device domain name.\u0027),"}],"source_content_type":"text/x-python","patch_set":14,"id":"bacf61ea_6d00c634","line":61,"range":{"start_line":59,"start_character":15,"end_line":61,"end_character":61},"updated":"2016-08-02 05:50:01.000000000","message":"Should add the secret\u003dTrue parameter to this StrOpt since it\u0027s a password.","commit_id":"b96c11ba20e4b8609459db3f2cbfca46f1730f89"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"63463373ee372eabbfe638e485e6a14737d4903f","unresolved":false,"context_lines":[{"line_number":705,"context_line":"        pool_info \u003d self.client.get_pool_info(pool_name, pools)"},{"line_number":706,"context_line":""},{"line_number":707,"context_line":"        lun_params \u003d {\"ALLOCTYPE\": 0,"},{"line_number":708,"context_line":"                      \"PARENTID\": pool_info[\u0027ID\u0027],"},{"line_number":709,"context_line":"                      \"PARENTTYPE\": 216,"},{"line_number":710,"context_line":"                      \"USAGETYPE\": 1,"},{"line_number":711,"context_line":"                      \"WRITEPOLICY\": 2,"}],"source_content_type":"text/x-python","patch_set":17,"id":"bacf61ea_3724a60b","line":708,"range":{"start_line":708,"start_character":34,"end_line":708,"end_character":43},"updated":"2016-08-05 01:52:18.000000000","message":"Maybe pool_info is {}. So use \"get\" maybe more safe?","commit_id":"b501d783a70db253ca39b436322dd10dba5b423e"},{"author":{"_account_id":18026,"name":"huanan","email":"huanan@huawei.com","username":"huanan"},"change_message_id":"a1b95c7806bbbde16880b8ddb31c0e7264b6a0ee","unresolved":false,"context_lines":[{"line_number":705,"context_line":"        pool_info \u003d self.client.get_pool_info(pool_name, pools)"},{"line_number":706,"context_line":""},{"line_number":707,"context_line":"        lun_params \u003d {\"ALLOCTYPE\": 0,"},{"line_number":708,"context_line":"                      \"PARENTID\": pool_info[\u0027ID\u0027],"},{"line_number":709,"context_line":"                      \"PARENTTYPE\": 216,"},{"line_number":710,"context_line":"                      \"USAGETYPE\": 1,"},{"line_number":711,"context_line":"                      \"WRITEPOLICY\": 2,"}],"source_content_type":"text/x-python","patch_set":17,"id":"9ad45d7e_2ac2e933","line":708,"range":{"start_line":708,"start_character":34,"end_line":708,"end_character":43},"in_reply_to":"bacf61ea_3724a60b","updated":"2016-08-09 07:32:59.000000000","message":"Done","commit_id":"b501d783a70db253ca39b436322dd10dba5b423e"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"63463373ee372eabbfe638e485e6a14737d4903f","unresolved":false,"context_lines":[{"line_number":718,"context_line":"                      \"PREFETCHPOLICY\": 3,"},{"line_number":719,"context_line":"                      \"REMOTELUNID\": remote_lun_id,"},{"line_number":720,"context_line":"                      \"NAME\": six.text_type(hash(volume.id)),"},{"line_number":721,"context_line":"                      \"DESCRIPTION\": \"edev_lun\","},{"line_number":722,"context_line":"                      \"OWNINGCONTROLLER\": tgt_lun_info[\u0027OWNINGCONTROLLER\u0027]}"},{"line_number":723,"context_line":""},{"line_number":724,"context_line":"        for item in lun_params.keys():"}],"source_content_type":"text/x-python","patch_set":17,"id":"bacf61ea_b77ed6e1","line":721,"range":{"start_line":721,"start_character":38,"end_line":721,"end_character":46},"updated":"2016-08-05 01:52:18.000000000","message":"why should add the description?","commit_id":"b501d783a70db253ca39b436322dd10dba5b423e"},{"author":{"_account_id":18026,"name":"huanan","email":"huanan@huawei.com","username":"huanan"},"change_message_id":"a1b95c7806bbbde16880b8ddb31c0e7264b6a0ee","unresolved":false,"context_lines":[{"line_number":718,"context_line":"                      \"PREFETCHPOLICY\": 3,"},{"line_number":719,"context_line":"                      \"REMOTELUNID\": remote_lun_id,"},{"line_number":720,"context_line":"                      \"NAME\": six.text_type(hash(volume.id)),"},{"line_number":721,"context_line":"                      \"DESCRIPTION\": \"edev_lun\","},{"line_number":722,"context_line":"                      \"OWNINGCONTROLLER\": tgt_lun_info[\u0027OWNINGCONTROLLER\u0027]}"},{"line_number":723,"context_line":""},{"line_number":724,"context_line":"        for item in lun_params.keys():"}],"source_content_type":"text/x-python","patch_set":17,"id":"9ad45d7e_8a2b15eb","line":721,"range":{"start_line":721,"start_character":38,"end_line":721,"end_character":46},"in_reply_to":"bacf61ea_b77ed6e1","updated":"2016-08-09 07:32:59.000000000","message":"This description is used to distinguish this lun is a temp edev lun.","commit_id":"b501d783a70db253ca39b436322dd10dba5b423e"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"809617b2c85ae616c75308c2d4a5b60bfa233d43","unresolved":false,"context_lines":[{"line_number":721,"context_line":"                      \"DESCRIPTION\": \"edev_lun\","},{"line_number":722,"context_line":"                      \"OWNINGCONTROLLER\": tgt_lun_info[\u0027OWNINGCONTROLLER\u0027]}"},{"line_number":723,"context_line":""},{"line_number":724,"context_line":"        for item in lun_params.keys():"},{"line_number":725,"context_line":"            if lun_params.get(item) \u003d\u003d \u0027--\u0027:"},{"line_number":726,"context_line":"                del lun_params[item]"},{"line_number":727,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"bacf61ea_2e235a06","line":724,"updated":"2016-08-08 09:25:59.000000000","message":"could directly use \"for item in lun_params\"","commit_id":"b501d783a70db253ca39b436322dd10dba5b423e"},{"author":{"_account_id":18026,"name":"huanan","email":"huanan@huawei.com","username":"huanan"},"change_message_id":"a1b95c7806bbbde16880b8ddb31c0e7264b6a0ee","unresolved":false,"context_lines":[{"line_number":721,"context_line":"                      \"DESCRIPTION\": \"edev_lun\","},{"line_number":722,"context_line":"                      \"OWNINGCONTROLLER\": tgt_lun_info[\u0027OWNINGCONTROLLER\u0027]}"},{"line_number":723,"context_line":""},{"line_number":724,"context_line":"        for item in lun_params.keys():"},{"line_number":725,"context_line":"            if lun_params.get(item) \u003d\u003d \u0027--\u0027:"},{"line_number":726,"context_line":"                del lun_params[item]"},{"line_number":727,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"9ad45d7e_de6aee19","line":724,"in_reply_to":"bacf61ea_2e235a06","updated":"2016-08-09 07:32:59.000000000","message":"I have removed this part of code.","commit_id":"b501d783a70db253ca39b436322dd10dba5b423e"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"63463373ee372eabbfe638e485e6a14737d4903f","unresolved":false,"context_lines":[{"line_number":721,"context_line":"                      \"DESCRIPTION\": \"edev_lun\","},{"line_number":722,"context_line":"                      \"OWNINGCONTROLLER\": tgt_lun_info[\u0027OWNINGCONTROLLER\u0027]}"},{"line_number":723,"context_line":""},{"line_number":724,"context_line":"        for item in lun_params.keys():"},{"line_number":725,"context_line":"            if lun_params.get(item) \u003d\u003d \u0027--\u0027:"},{"line_number":726,"context_line":"                del lun_params[item]"},{"line_number":727,"context_line":""},{"line_number":728,"context_line":"        lun_info \u003d self.client.create_lun(lun_params)"},{"line_number":729,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"bacf61ea_d7c70a10","line":726,"range":{"start_line":724,"start_character":8,"end_line":726,"end_character":36},"updated":"2016-08-05 01:52:18.000000000","message":"Is this necessary?","commit_id":"b501d783a70db253ca39b436322dd10dba5b423e"},{"author":{"_account_id":18026,"name":"huanan","email":"huanan@huawei.com","username":"huanan"},"change_message_id":"a1b95c7806bbbde16880b8ddb31c0e7264b6a0ee","unresolved":false,"context_lines":[{"line_number":721,"context_line":"                      \"DESCRIPTION\": \"edev_lun\","},{"line_number":722,"context_line":"                      \"OWNINGCONTROLLER\": tgt_lun_info[\u0027OWNINGCONTROLLER\u0027]}"},{"line_number":723,"context_line":""},{"line_number":724,"context_line":"        for item in lun_params.keys():"},{"line_number":725,"context_line":"            if lun_params.get(item) \u003d\u003d \u0027--\u0027:"},{"line_number":726,"context_line":"                del lun_params[item]"},{"line_number":727,"context_line":""},{"line_number":728,"context_line":"        lun_info \u003d self.client.create_lun(lun_params)"},{"line_number":729,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"9ad45d7e_1e1e46ba","line":726,"range":{"start_line":724,"start_character":8,"end_line":726,"end_character":36},"in_reply_to":"bacf61ea_d7c70a10","updated":"2016-08-09 07:32:59.000000000","message":"Done","commit_id":"b501d783a70db253ca39b436322dd10dba5b423e"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"63463373ee372eabbfe638e485e6a14737d4903f","unresolved":false,"context_lines":[{"line_number":775,"context_line":"            self.client.scan_remote_lun(device_id)"},{"line_number":776,"context_line":"            rmt_lun_id \u003d self.client.get_remote_lun_id(device_id)"},{"line_number":777,"context_line":"            if not rmt_lun_id:"},{"line_number":778,"context_line":"                msg \u003d (_LE(\u0027Get remote lun failed. Please check if there have \u0027"},{"line_number":779,"context_line":"                           \u0027remote lun in remote device: %(remote_device)s.\u0027)"},{"line_number":780,"context_line":"                       % {\u0027remote_device\u0027: rmt_device})"},{"line_number":781,"context_line":"                LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":17,"id":"bacf61ea_57783ac4","line":778,"range":{"start_line":778,"start_character":67,"end_line":778,"end_character":77},"updated":"2016-08-05 01:52:18.000000000","message":"s/there have/there is","commit_id":"b501d783a70db253ca39b436322dd10dba5b423e"},{"author":{"_account_id":18026,"name":"huanan","email":"huanan@huawei.com","username":"huanan"},"change_message_id":"a1b95c7806bbbde16880b8ddb31c0e7264b6a0ee","unresolved":false,"context_lines":[{"line_number":775,"context_line":"            self.client.scan_remote_lun(device_id)"},{"line_number":776,"context_line":"            rmt_lun_id \u003d self.client.get_remote_lun_id(device_id)"},{"line_number":777,"context_line":"            if not rmt_lun_id:"},{"line_number":778,"context_line":"                msg \u003d (_LE(\u0027Get remote lun failed. Please check if there have \u0027"},{"line_number":779,"context_line":"                           \u0027remote lun in remote device: %(remote_device)s.\u0027)"},{"line_number":780,"context_line":"                       % {\u0027remote_device\u0027: rmt_device})"},{"line_number":781,"context_line":"                LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":17,"id":"9ad45d7e_9ed6b6c3","line":778,"range":{"start_line":778,"start_character":67,"end_line":778,"end_character":77},"in_reply_to":"bacf61ea_57783ac4","updated":"2016-08-09 07:32:59.000000000","message":"Done","commit_id":"b501d783a70db253ca39b436322dd10dba5b423e"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"63463373ee372eabbfe638e485e6a14737d4903f","unresolved":false,"context_lines":[{"line_number":776,"context_line":"            rmt_lun_id \u003d self.client.get_remote_lun_id(device_id)"},{"line_number":777,"context_line":"            if not rmt_lun_id:"},{"line_number":778,"context_line":"                msg \u003d (_LE(\u0027Get remote lun failed. Please check if there have \u0027"},{"line_number":779,"context_line":"                           \u0027remote lun in remote device: %(remote_device)s.\u0027)"},{"line_number":780,"context_line":"                       % {\u0027remote_device\u0027: rmt_device})"},{"line_number":781,"context_line":"                LOG.error(msg)"},{"line_number":782,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":17,"id":"bacf61ea_1741a263","line":779,"range":{"start_line":779,"start_character":39,"end_line":779,"end_character":41},"updated":"2016-08-05 01:52:18.000000000","message":"s/in/on","commit_id":"b501d783a70db253ca39b436322dd10dba5b423e"},{"author":{"_account_id":18026,"name":"huanan","email":"huanan@huawei.com","username":"huanan"},"change_message_id":"a1b95c7806bbbde16880b8ddb31c0e7264b6a0ee","unresolved":false,"context_lines":[{"line_number":776,"context_line":"            rmt_lun_id \u003d self.client.get_remote_lun_id(device_id)"},{"line_number":777,"context_line":"            if not rmt_lun_id:"},{"line_number":778,"context_line":"                msg \u003d (_LE(\u0027Get remote lun failed. Please check if there have \u0027"},{"line_number":779,"context_line":"                           \u0027remote lun in remote device: %(remote_device)s.\u0027)"},{"line_number":780,"context_line":"                       % {\u0027remote_device\u0027: rmt_device})"},{"line_number":781,"context_line":"                LOG.error(msg)"},{"line_number":782,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":17,"id":"9ad45d7e_fedb72eb","line":779,"range":{"start_line":779,"start_character":39,"end_line":779,"end_character":41},"in_reply_to":"bacf61ea_1741a263","updated":"2016-08-09 07:32:59.000000000","message":"Done","commit_id":"b501d783a70db253ca39b436322dd10dba5b423e"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"63463373ee372eabbfe638e485e6a14737d4903f","unresolved":false,"context_lines":[{"line_number":787,"context_line":"            self._wait_volume_ready(tgt_lun_id)"},{"line_number":788,"context_line":"            self.client.create_lun_migration(src_lun_id, tgt_lun_id)"},{"line_number":789,"context_line":"        except Exception as err:"},{"line_number":790,"context_line":"            LOG.error(_LE(\u0027Error occured when migrate_volume_target: %s.\u0027),"},{"line_number":791,"context_line":"                      err)"},{"line_number":792,"context_line":"            volume_rpcapi.VolumeAPI().terminate_connection("},{"line_number":793,"context_line":"                ctxt, volume, properties)"},{"line_number":794,"context_line":"            if src_lun_id:"},{"line_number":795,"context_line":"                self.client.delete_lun(src_lun_id)"},{"line_number":796,"context_line":"            if tgt_lun_id:"},{"line_number":797,"context_line":"                self.client.delete_lun(tgt_lun_id)"},{"line_number":798,"context_line":"            return False, False, None, None"},{"line_number":799,"context_line":""},{"line_number":800,"context_line":"        migration_info \u003d {\u0027src_id\u0027: src_lun_id,"},{"line_number":801,"context_line":"                          \u0027tgt_id\u0027: tgt_lun_id}"}],"source_content_type":"text/x-python","patch_set":17,"id":"bacf61ea_ba2b5d81","line":798,"range":{"start_line":790,"start_character":12,"end_line":798,"end_character":43},"updated":"2016-08-05 01:52:18.000000000","message":"Should be raise instead of return?","commit_id":"b501d783a70db253ca39b436322dd10dba5b423e"},{"author":{"_account_id":18026,"name":"huanan","email":"huanan@huawei.com","username":"huanan"},"change_message_id":"a1b95c7806bbbde16880b8ddb31c0e7264b6a0ee","unresolved":false,"context_lines":[{"line_number":787,"context_line":"            self._wait_volume_ready(tgt_lun_id)"},{"line_number":788,"context_line":"            self.client.create_lun_migration(src_lun_id, tgt_lun_id)"},{"line_number":789,"context_line":"        except Exception as err:"},{"line_number":790,"context_line":"            LOG.error(_LE(\u0027Error occured when migrate_volume_target: %s.\u0027),"},{"line_number":791,"context_line":"                      err)"},{"line_number":792,"context_line":"            volume_rpcapi.VolumeAPI().terminate_connection("},{"line_number":793,"context_line":"                ctxt, volume, properties)"},{"line_number":794,"context_line":"            if src_lun_id:"},{"line_number":795,"context_line":"                self.client.delete_lun(src_lun_id)"},{"line_number":796,"context_line":"            if tgt_lun_id:"},{"line_number":797,"context_line":"                self.client.delete_lun(tgt_lun_id)"},{"line_number":798,"context_line":"            return False, False, None, None"},{"line_number":799,"context_line":""},{"line_number":800,"context_line":"        migration_info \u003d {\u0027src_id\u0027: src_lun_id,"},{"line_number":801,"context_line":"                          \u0027tgt_id\u0027: tgt_lun_id}"}],"source_content_type":"text/x-python","patch_set":17,"id":"9ad45d7e_9eed168e","line":798,"range":{"start_line":790,"start_character":12,"end_line":798,"end_character":43},"in_reply_to":"bacf61ea_ba2b5d81","updated":"2016-08-09 07:32:59.000000000","message":"Done","commit_id":"b501d783a70db253ca39b436322dd10dba5b423e"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"63463373ee372eabbfe638e485e6a14737d4903f","unresolved":false,"context_lines":[{"line_number":809,"context_line":"        try:"},{"line_number":810,"context_line":"            devices \u003d self.client.get_remote_devices()"},{"line_number":811,"context_line":"        except Exception as err:"},{"line_number":812,"context_line":"            LOG.warning(_LW(\u0027Get remote devices failed. Error: %s.\u0027), err)"},{"line_number":813,"context_line":""},{"line_number":814,"context_line":"        for device in devices:"},{"line_number":815,"context_line":"            if device.get(\u0027NAME\u0027) \u003d\u003d rmt_device:"}],"source_content_type":"text/x-python","patch_set":17,"id":"bacf61ea_1a79c982","line":812,"range":{"start_line":812,"start_character":12,"end_line":812,"end_character":74},"updated":"2016-08-05 01:52:18.000000000","message":"1、In self.client.get_remote_devices already use \"self._assert_rest_result(result, _(\u0027Get remote devices error.\u0027))\" to check whether success or failed. Why use try except here? It\u0027s unnecessary?\n2、On the other hand, if get remote devices failed. Why not return None directly.","commit_id":"b501d783a70db253ca39b436322dd10dba5b423e"},{"author":{"_account_id":18026,"name":"huanan","email":"huanan@huawei.com","username":"huanan"},"change_message_id":"a1b95c7806bbbde16880b8ddb31c0e7264b6a0ee","unresolved":false,"context_lines":[{"line_number":809,"context_line":"        try:"},{"line_number":810,"context_line":"            devices \u003d self.client.get_remote_devices()"},{"line_number":811,"context_line":"        except Exception as err:"},{"line_number":812,"context_line":"            LOG.warning(_LW(\u0027Get remote devices failed. Error: %s.\u0027), err)"},{"line_number":813,"context_line":""},{"line_number":814,"context_line":"        for device in devices:"},{"line_number":815,"context_line":"            if device.get(\u0027NAME\u0027) \u003d\u003d rmt_device:"}],"source_content_type":"text/x-python","patch_set":17,"id":"9ad45d7e_21b7af3a","line":812,"range":{"start_line":812,"start_character":12,"end_line":812,"end_character":74},"in_reply_to":"bacf61ea_1a79c982","updated":"2016-08-09 07:32:59.000000000","message":"Done","commit_id":"b501d783a70db253ca39b436322dd10dba5b423e"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"d9d4efb70d3ef004fc0e795b854a43f82ad69205","unresolved":false,"context_lines":[{"line_number":702,"context_line":"    def create_edev_lun(self, volume, tgt_lun_info, host, remote_lun_id):"},{"line_number":703,"context_line":"        pool_name \u003d host[\u0027capabilities\u0027][\u0027pool_name\u0027]"},{"line_number":704,"context_line":"        pools \u003d self.client.get_all_pools()"},{"line_number":705,"context_line":"        pool_info \u003d self.client.get_pool_info(pool_name, pools)"},{"line_number":706,"context_line":""},{"line_number":707,"context_line":"        lun_params \u003d {\"ALLOCTYPE\": 0,"},{"line_number":708,"context_line":"                      \"PARENTID\": pool_info.get(\u0027ID\u0027),"}],"source_content_type":"text/x-python","patch_set":22,"id":"3ac371cc_fefeb769","line":705,"range":{"start_line":705,"start_character":8,"end_line":705,"end_character":63},"updated":"2016-08-16 08:18:57.000000000","message":"Maybe pool_info is None. It\u0027s better to judge if pool_info is None(or pool_name doesn\u0027t exists on remote array).","commit_id":"130d0b4464bb2e13919fa39dda3359939b3cd045"},{"author":{"_account_id":18026,"name":"huanan","email":"huanan@huawei.com","username":"huanan"},"change_message_id":"c033c4a91535a0a770bab52fd2f6d1c2f06586a7","unresolved":false,"context_lines":[{"line_number":702,"context_line":"    def create_edev_lun(self, volume, tgt_lun_info, host, remote_lun_id):"},{"line_number":703,"context_line":"        pool_name \u003d host[\u0027capabilities\u0027][\u0027pool_name\u0027]"},{"line_number":704,"context_line":"        pools \u003d self.client.get_all_pools()"},{"line_number":705,"context_line":"        pool_info \u003d self.client.get_pool_info(pool_name, pools)"},{"line_number":706,"context_line":""},{"line_number":707,"context_line":"        lun_params \u003d {\"ALLOCTYPE\": 0,"},{"line_number":708,"context_line":"                      \"PARENTID\": pool_info.get(\u0027ID\u0027),"}],"source_content_type":"text/x-python","patch_set":22,"id":"3ac371cc_f31bc57e","line":705,"range":{"start_line":705,"start_character":8,"end_line":705,"end_character":63},"in_reply_to":"3ac371cc_fefeb769","updated":"2016-08-19 03:31:40.000000000","message":"Done","commit_id":"130d0b4464bb2e13919fa39dda3359939b3cd045"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"7d35306e12effb8474377d88be23c4c88a81dd42","unresolved":false,"context_lines":[{"line_number":71,"context_line":"               help\u003d\u0027The remote metro device pool names.\u0027),"},{"line_number":72,"context_line":"    cfg.StrOpt(\u0027migrate_device\u0027,"},{"line_number":73,"context_line":"               default\u003dNone,"},{"line_number":74,"context_line":"               help\u003d\u0027The migrate remote device name.\u0027),"},{"line_number":75,"context_line":"    cfg.StrOpt(\u0027migrate_device_initiator\u0027,"},{"line_number":76,"context_line":"               default\u003dNone,"},{"line_number":77,"context_line":"               help\u003d\u0027The initiator name of migrate remote device.\u0027),"}],"source_content_type":"text/x-python","patch_set":37,"id":"ba2be162_afb55ad1","line":74,"range":{"start_line":74,"start_character":21,"end_line":74,"end_character":51},"updated":"2017-02-28 16:08:14.000000000","message":"This isn\u0027t clear.  Is this the \u0027target\u0027 device?  You use target elsewhere.  Maybe this would be clearer with \u0027The target migrate remote device name.\u0027","commit_id":"d07a798b68a74d275cd914410080ad8471cf9f8d"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"7d35306e12effb8474377d88be23c4c88a81dd42","unresolved":false,"context_lines":[{"line_number":74,"context_line":"               help\u003d\u0027The migrate remote device name.\u0027),"},{"line_number":75,"context_line":"    cfg.StrOpt(\u0027migrate_device_initiator\u0027,"},{"line_number":76,"context_line":"               default\u003dNone,"},{"line_number":77,"context_line":"               help\u003d\u0027The initiator name of migrate remote device.\u0027),"},{"line_number":78,"context_line":"    cfg.StrOpt(\u0027migrate_device_iscsi_ip\u0027,"},{"line_number":79,"context_line":"               default\u003dNone,"},{"line_number":80,"context_line":"               help\u003d\u0027The migrate remote device iscsi ip.\u0027),"}],"source_content_type":"text/x-python","patch_set":37,"id":"ba2be162_8fd8961f","line":77,"range":{"start_line":77,"start_character":21,"end_line":77,"end_character":65},"updated":"2017-02-28 16:08:14.000000000","message":"The initiator name for target migrate remote device.","commit_id":"d07a798b68a74d275cd914410080ad8471cf9f8d"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"7d35306e12effb8474377d88be23c4c88a81dd42","unresolved":false,"context_lines":[{"line_number":77,"context_line":"               help\u003d\u0027The initiator name of migrate remote device.\u0027),"},{"line_number":78,"context_line":"    cfg.StrOpt(\u0027migrate_device_iscsi_ip\u0027,"},{"line_number":79,"context_line":"               default\u003dNone,"},{"line_number":80,"context_line":"               help\u003d\u0027The migrate remote device iscsi ip.\u0027),"},{"line_number":81,"context_line":"]"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":37,"id":"ba2be162_0f03c674","line":80,"range":{"start_line":80,"start_character":21,"end_line":80,"end_character":56},"updated":"2017-02-28 16:08:14.000000000","message":"The target migrate remote device iscsi ip.","commit_id":"d07a798b68a74d275cd914410080ad8471cf9f8d"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"7d35306e12effb8474377d88be23c4c88a81dd42","unresolved":false,"context_lines":[{"line_number":645,"context_line":"        return True"},{"line_number":646,"context_line":""},{"line_number":647,"context_line":"    def _check_migration_target_valid(self, host, volume):"},{"line_number":648,"context_line":"        initiator \u003d self.configuration.safe_get(\u0027migrate_device_initiator\u0027)"},{"line_number":649,"context_line":"        ip \u003d self.configuration.safe_get(\u0027migrate_device_iscsi_ip\u0027)"},{"line_number":650,"context_line":"        rmt_device \u003d self.configuration.safe_get(\u0027migrate_device\u0027)"},{"line_number":651,"context_line":""},{"line_number":652,"context_line":"        # Source and destination host should be different."},{"line_number":653,"context_line":"        if volume.host \u003d\u003d host[\u0027host\u0027]:"}],"source_content_type":"text/x-python","patch_set":37,"id":"ba2be162_6f20c2f8","line":650,"range":{"start_line":648,"start_character":0,"end_line":650,"end_character":66},"updated":"2017-02-28 16:08:14.000000000","message":"Do you need to do any value checking here to make sure the input is expected?","commit_id":"d07a798b68a74d275cd914410080ad8471cf9f8d"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"7d35306e12effb8474377d88be23c4c88a81dd42","unresolved":false,"context_lines":[{"line_number":867,"context_line":"            volume_rpcapi.VolumeAPI().clean_migrate_src_volume("},{"line_number":868,"context_line":"                ctxt, migration_info[\u0027src_volume\u0027])"},{"line_number":869,"context_line":"        except Exception as err:"},{"line_number":870,"context_line":"            msg \u003d (_LE(\u0027Error occured when complete_migration_target: %s.\u0027),"},{"line_number":871,"context_line":"                   err)"},{"line_number":872,"context_line":"            LOG.error(msg)"},{"line_number":873,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":37,"id":"ba2be162_af30fa08","line":870,"range":{"start_line":870,"start_character":38,"end_line":870,"end_character":42},"updated":"2017-02-28 16:08:14.000000000","message":"waiting for","commit_id":"d07a798b68a74d275cd914410080ad8471cf9f8d"}],"cinder/volume/drivers/huawei/rest_client.py":[{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"00e43690ff054341e42a3752b733c861db99da36","unresolved":false,"context_lines":[{"line_number":2336,"context_line":"        return False"},{"line_number":2337,"context_line":""},{"line_number":2338,"context_line":"    def get_remote_lun_id(self, rmt_dev_id):"},{"line_number":2339,"context_line":"        url \u003d \u0027/remote_lun/associate?ARRAYTYPE\u003d2\u0026ASSOCIATEOBJTYPE\u003d224\u0027 \\"},{"line_number":2340,"context_line":"              \u0027\u0026TYPE\u003d250\u0026ASSOCIATEOBJID\u003d%s\u0027 % rmt_dev_id"},{"line_number":2341,"context_line":"        result \u003d self.call(url, None, \"GET\")"},{"line_number":2342,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"bacf61ea_00394ff2","line":2339,"range":{"start_line":2339,"start_character":71,"end_line":2339,"end_character":72},"updated":"2016-08-01 02:31:30.000000000","message":"use () instead of \\","commit_id":"f45a1af44425fdf396aac92112a739e315db3dc2"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"00e43690ff054341e42a3752b733c861db99da36","unresolved":false,"context_lines":[{"line_number":2349,"context_line":"        return None"},{"line_number":2350,"context_line":""},{"line_number":2351,"context_line":"    def scan_remote_lun(self, rmt_dev_id):"},{"line_number":2352,"context_line":"        url \u003d \u0027/remote_lun/scan_remote_lun?ASSOCIATEOBJTYPE\u003d224\u0027 \\"},{"line_number":2353,"context_line":"              \u0027\u0026ASSOCIATEOBJID\u003d%s\u0027 % rmt_dev_id"},{"line_number":2354,"context_line":"        result \u003d self.call(url, None, \"GET\")"},{"line_number":2355,"context_line":"        time.sleep(5)"}],"source_content_type":"text/x-python","patch_set":13,"id":"bacf61ea_e03d1bde","line":2352,"range":{"start_line":2352,"start_character":65,"end_line":2352,"end_character":66},"updated":"2016-08-01 02:31:30.000000000","message":"ditto","commit_id":"f45a1af44425fdf396aac92112a739e315db3dc2"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"63463373ee372eabbfe638e485e6a14737d4903f","unresolved":false,"context_lines":[{"line_number":2342,"context_line":"        return False"},{"line_number":2343,"context_line":""},{"line_number":2344,"context_line":"    def get_remote_lun_id(self, rmt_dev_id):"},{"line_number":2345,"context_line":"        url \u003d \u0027/remote_lun/associate?ARRAYTYPE\u003d2\u0026ASSOCIATEOBJTYPE\u003d224\u0027 \\"},{"line_number":2346,"context_line":"              \u0027\u0026TYPE\u003d250\u0026ASSOCIATEOBJID\u003d%s\u0027 % rmt_dev_id"},{"line_number":2347,"context_line":"        result \u003d self.call(url, None, \"GET\")"},{"line_number":2348,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"bacf61ea_bae23dd3","line":2345,"range":{"start_line":2345,"start_character":70,"end_line":2345,"end_character":72},"updated":"2016-08-05 01:52:18.000000000","message":"use () instead of \\","commit_id":"b501d783a70db253ca39b436322dd10dba5b423e"},{"author":{"_account_id":18026,"name":"huanan","email":"huanan@huawei.com","username":"huanan"},"change_message_id":"a1b95c7806bbbde16880b8ddb31c0e7264b6a0ee","unresolved":false,"context_lines":[{"line_number":2342,"context_line":"        return False"},{"line_number":2343,"context_line":""},{"line_number":2344,"context_line":"    def get_remote_lun_id(self, rmt_dev_id):"},{"line_number":2345,"context_line":"        url \u003d \u0027/remote_lun/associate?ARRAYTYPE\u003d2\u0026ASSOCIATEOBJTYPE\u003d224\u0027 \\"},{"line_number":2346,"context_line":"              \u0027\u0026TYPE\u003d250\u0026ASSOCIATEOBJID\u003d%s\u0027 % rmt_dev_id"},{"line_number":2347,"context_line":"        result \u003d self.call(url, None, \"GET\")"},{"line_number":2348,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"9ad45d7e_8105bbc3","line":2345,"range":{"start_line":2345,"start_character":70,"end_line":2345,"end_character":72},"in_reply_to":"bacf61ea_bae23dd3","updated":"2016-08-09 07:32:59.000000000","message":"Done","commit_id":"b501d783a70db253ca39b436322dd10dba5b423e"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"63463373ee372eabbfe638e485e6a14737d4903f","unresolved":false,"context_lines":[{"line_number":2355,"context_line":"        return None"},{"line_number":2356,"context_line":""},{"line_number":2357,"context_line":"    def scan_remote_lun(self, rmt_dev_id):"},{"line_number":2358,"context_line":"        url \u003d \u0027/remote_lun/scan_remote_lun?ASSOCIATEOBJTYPE\u003d224\u0027 \\"},{"line_number":2359,"context_line":"              \u0027\u0026ASSOCIATEOBJID\u003d%s\u0027 % rmt_dev_id"},{"line_number":2360,"context_line":"        result \u003d self.call(url, None, \"GET\")"},{"line_number":2361,"context_line":"        time.sleep(5)"}],"source_content_type":"text/x-python","patch_set":17,"id":"bacf61ea_fae835b5","line":2358,"range":{"start_line":2358,"start_character":64,"end_line":2358,"end_character":66},"updated":"2016-08-05 01:52:18.000000000","message":"ditto","commit_id":"b501d783a70db253ca39b436322dd10dba5b423e"},{"author":{"_account_id":18026,"name":"huanan","email":"huanan@huawei.com","username":"huanan"},"change_message_id":"a1b95c7806bbbde16880b8ddb31c0e7264b6a0ee","unresolved":false,"context_lines":[{"line_number":2355,"context_line":"        return None"},{"line_number":2356,"context_line":""},{"line_number":2357,"context_line":"    def scan_remote_lun(self, rmt_dev_id):"},{"line_number":2358,"context_line":"        url \u003d \u0027/remote_lun/scan_remote_lun?ASSOCIATEOBJTYPE\u003d224\u0027 \\"},{"line_number":2359,"context_line":"              \u0027\u0026ASSOCIATEOBJID\u003d%s\u0027 % rmt_dev_id"},{"line_number":2360,"context_line":"        result \u003d self.call(url, None, \"GET\")"},{"line_number":2361,"context_line":"        time.sleep(5)"}],"source_content_type":"text/x-python","patch_set":17,"id":"9ad45d7e_216a0f81","line":2358,"range":{"start_line":2358,"start_character":64,"end_line":2358,"end_character":66},"in_reply_to":"bacf61ea_fae835b5","updated":"2016-08-09 07:32:59.000000000","message":"Done","commit_id":"b501d783a70db253ca39b436322dd10dba5b423e"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"809617b2c85ae616c75308c2d4a5b60bfa233d43","unresolved":false,"context_lines":[{"line_number":2358,"context_line":"        url \u003d \u0027/remote_lun/scan_remote_lun?ASSOCIATEOBJTYPE\u003d224\u0027 \\"},{"line_number":2359,"context_line":"              \u0027\u0026ASSOCIATEOBJID\u003d%s\u0027 % rmt_dev_id"},{"line_number":2360,"context_line":"        result \u003d self.call(url, None, \"GET\")"},{"line_number":2361,"context_line":"        time.sleep(5)"},{"line_number":2362,"context_line":"        msg \u003d _(\u0027Scan remote lun error.\u0027)"},{"line_number":2363,"context_line":"        self._assert_rest_result(result, msg)"}],"source_content_type":"text/x-python","patch_set":17,"id":"9ad45d7e_07f59682","line":2361,"updated":"2016-08-08 09:25:59.000000000","message":"specifying 5 sec here bases on what?","commit_id":"b501d783a70db253ca39b436322dd10dba5b423e"},{"author":{"_account_id":18026,"name":"huanan","email":"huanan@huawei.com","username":"huanan"},"change_message_id":"a1b95c7806bbbde16880b8ddb31c0e7264b6a0ee","unresolved":false,"context_lines":[{"line_number":2358,"context_line":"        url \u003d \u0027/remote_lun/scan_remote_lun?ASSOCIATEOBJTYPE\u003d224\u0027 \\"},{"line_number":2359,"context_line":"              \u0027\u0026ASSOCIATEOBJID\u003d%s\u0027 % rmt_dev_id"},{"line_number":2360,"context_line":"        result \u003d self.call(url, None, \"GET\")"},{"line_number":2361,"context_line":"        time.sleep(5)"},{"line_number":2362,"context_line":"        msg \u003d _(\u0027Scan remote lun error.\u0027)"},{"line_number":2363,"context_line":"        self._assert_rest_result(result, msg)"}],"source_content_type":"text/x-python","patch_set":17,"id":"9ad45d7e_01f9cb80","line":2361,"in_reply_to":"9ad45d7e_07f59682","updated":"2016-08-09 07:32:59.000000000","message":"Based on the realization of the array.","commit_id":"b501d783a70db253ca39b436322dd10dba5b423e"}],"cinder/volume/manager.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"dfb27ba5e177b32b908745307e91a61a8b202097","unresolved":false,"context_lines":[{"line_number":157,"context_line":"class VolumeManager(manager.SchedulerDependentManager):"},{"line_number":158,"context_line":"    \"\"\"Manages attachable block storage devices.\"\"\""},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    RPC_API_VERSION \u003d \u00272.2\u0027"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    target \u003d messaging.Target(version\u003dRPC_API_VERSION)"},{"line_number":163,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3aaa91ec_4ecbf61e","line":160,"range":{"start_line":160,"start_character":0,"end_line":160,"end_character":27},"updated":"2016-06-28 11:39:14.000000000","message":"You need to bump the version along with the one in rpcapi.py.","commit_id":"af3d3601aa0f101d46577aaef79a2041abfcc7d4"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"9ff43bfe478f6629fbae789486bdf0e26fbe72ae","unresolved":false,"context_lines":[{"line_number":157,"context_line":"class VolumeManager(manager.SchedulerDependentManager):"},{"line_number":158,"context_line":"    \"\"\"Manages attachable block storage devices.\"\"\""},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    RPC_API_VERSION \u003d \u00272.2\u0027"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    target \u003d messaging.Target(version\u003dRPC_API_VERSION)"},{"line_number":163,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3aaa91ec_f505a379","line":160,"range":{"start_line":160,"start_character":0,"end_line":160,"end_character":27},"in_reply_to":"3aaa91ec_4ecbf61e","updated":"2016-07-01 07:25:25.000000000","message":"Done","commit_id":"af3d3601aa0f101d46577aaef79a2041abfcc7d4"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"dfb27ba5e177b32b908745307e91a61a8b202097","unresolved":false,"context_lines":[{"line_number":1850,"context_line":"                if not moved:"},{"line_number":1851,"context_line":"                    # Try migrate on target"},{"line_number":1852,"context_line":"                    moved, migration_async, model_update \u003d \\"},{"line_number":1853,"context_line":"                        volume_rpcapi.VolumeAPI().migrate_volume_target("},{"line_number":1854,"context_line":"                            context, volume, host)"},{"line_number":1855,"context_line":"                if moved:"},{"line_number":1856,"context_line":"                    updates \u003d {\u0027host\u0027: host[\u0027host\u0027],"},{"line_number":1857,"context_line":"                               \u0027migration_status\u0027: \u0027success\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3aaa91ec_2e814a90","line":1854,"range":{"start_line":1853,"start_character":0,"end_line":1854,"end_character":50},"updated":"2016-06-28 11:39:14.000000000","message":"Durning an upgrade it may happen that older c-vols won\u0027t be able to understand this request. You need to fall back to older method in that case.","commit_id":"af3d3601aa0f101d46577aaef79a2041abfcc7d4"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"9ff43bfe478f6629fbae789486bdf0e26fbe72ae","unresolved":false,"context_lines":[{"line_number":1850,"context_line":"                if not moved:"},{"line_number":1851,"context_line":"                    # Try migrate on target"},{"line_number":1852,"context_line":"                    moved, migration_async, model_update \u003d \\"},{"line_number":1853,"context_line":"                        volume_rpcapi.VolumeAPI().migrate_volume_target("},{"line_number":1854,"context_line":"                            context, volume, host)"},{"line_number":1855,"context_line":"                if moved:"},{"line_number":1856,"context_line":"                    updates \u003d {\u0027host\u0027: host[\u0027host\u0027],"},{"line_number":1857,"context_line":"                               \u0027migration_status\u0027: \u0027success\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3aaa91ec_985bb621","line":1854,"range":{"start_line":1853,"start_character":0,"end_line":1854,"end_character":50},"in_reply_to":"3aaa91ec_2e814a90","updated":"2016-07-01 07:25:25.000000000","message":"Done","commit_id":"af3d3601aa0f101d46577aaef79a2041abfcc7d4"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"218d243965c64e20a72e7e9dffa6d8bccaa4070f","unresolved":false,"context_lines":[{"line_number":1849,"context_line":"                                                                 volume,"},{"line_number":1850,"context_line":"                                                                 host)"},{"line_number":1851,"context_line":"                if not moved:"},{"line_number":1852,"context_line":"                    try:"},{"line_number":1853,"context_line":"                        # Try migrate on target"},{"line_number":1854,"context_line":"                        moved, migration_async, model_update \u003d ("},{"line_number":1855,"context_line":"                            rpcapi.migrate_volume_target("},{"line_number":1856,"context_line":"                                context, volume, host))"},{"line_number":1857,"context_line":"                    except exception.VersionNotFoundForAPIMethod:"},{"line_number":1858,"context_line":"                        moved \u003d False"},{"line_number":1859,"context_line":"                if moved:"},{"line_number":1860,"context_line":"                    mig_stat \u003d (\u0027migrating_attachable\u0027 if migration_async"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_26105001","line":1857,"range":{"start_line":1852,"start_character":0,"end_line":1857,"end_character":41},"updated":"2016-07-04 18:43:38.000000000","message":"The pattern is what I was looking for. Can we also add FIXME comment explaining that we can get rid of try-except wrapper in Ocata? We intent to keep backward compatibility only with the latest version, so in this case Newton needs to work with Mitaka, but Ocata will need to only be compatible with Newton, which will have the method already.","commit_id":"e7035e65a3dde6deff3ea00a18725f1786038cc6"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"cdaf6141baa32fb73e5fe0f698c8fa8c1dea2a24","unresolved":false,"context_lines":[{"line_number":1849,"context_line":"                                                                 volume,"},{"line_number":1850,"context_line":"                                                                 host)"},{"line_number":1851,"context_line":"                if not moved:"},{"line_number":1852,"context_line":"                    try:"},{"line_number":1853,"context_line":"                        # Try migrate on target"},{"line_number":1854,"context_line":"                        moved, migration_async, model_update \u003d ("},{"line_number":1855,"context_line":"                            rpcapi.migrate_volume_target("},{"line_number":1856,"context_line":"                                context, volume, host))"},{"line_number":1857,"context_line":"                    except exception.VersionNotFoundForAPIMethod:"},{"line_number":1858,"context_line":"                        moved \u003d False"},{"line_number":1859,"context_line":"                if moved:"},{"line_number":1860,"context_line":"                    mig_stat \u003d (\u0027migrating_attachable\u0027 if migration_async"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_f5441e75","line":1857,"range":{"start_line":1852,"start_character":0,"end_line":1857,"end_character":41},"in_reply_to":"1aa78d24_26105001","updated":"2016-07-05 07:30:58.000000000","message":"Done","commit_id":"e7035e65a3dde6deff3ea00a18725f1786038cc6"},{"author":{"_account_id":11637,"name":"jay.xu","email":"jay.xu@emc.com","username":"jay.xu"},"change_message_id":"253b38ed61c8bc64dd6549b13be06b6516f7fe8f","unresolved":false,"context_lines":[{"line_number":1871,"context_line":"                    volume.update(updates)"},{"line_number":1872,"context_line":"                    volume.save()"},{"line_number":1873,"context_line":"                    if migration_async:"},{"line_number":1874,"context_line":"                        rpcapi.complete_migration_target("},{"line_number":1875,"context_line":"                            context, volume, host)"},{"line_number":1876,"context_line":"                        updates \u003d {\u0027migration_status\u0027: \u0027success\u0027}"},{"line_number":1877,"context_line":"                        volume.update(updates)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_137d47b1","line":1874,"updated":"2016-07-06 07:05:52.000000000","message":"It would be necessary to handle migration failure?","commit_id":"81eab22bb3698556d8082e66882e782796e4b440"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"8e5e23f909745499ab302e2b0b1b3b117ffc87ae","unresolved":false,"context_lines":[{"line_number":1871,"context_line":"                    volume.update(updates)"},{"line_number":1872,"context_line":"                    volume.save()"},{"line_number":1873,"context_line":"                    if migration_async:"},{"line_number":1874,"context_line":"                        rpcapi.complete_migration_target("},{"line_number":1875,"context_line":"                            context, volume, host)"},{"line_number":1876,"context_line":"                        updates \u003d {\u0027migration_status\u0027: \u0027success\u0027}"},{"line_number":1877,"context_line":"                        volume.update(updates)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_28bf60fd","line":1874,"in_reply_to":"1aa78d24_137d47b1","updated":"2016-07-11 06:01:13.000000000","message":"+1\nAdditionally, complete_migration_target is a sync rmqp call, which possibly not an optimistic way to migrate data from source to destination; it would cause rpc timeout if data-migration takes longer than rpc_response_timeout.\n\nThanks\nPeter","commit_id":"81eab22bb3698556d8082e66882e782796e4b440"},{"author":{"_account_id":11637,"name":"jay.xu","email":"jay.xu@emc.com","username":"jay.xu"},"change_message_id":"270db4c2489ef987b448744eba3f9f68120c159a","unresolved":false,"context_lines":[{"line_number":1872,"context_line":"                    volume.save()"},{"line_number":1873,"context_line":"                    if migration_async:"},{"line_number":1874,"context_line":"                        rpcapi.complete_migration_target("},{"line_number":1875,"context_line":"                            context, volume, host)"},{"line_number":1876,"context_line":"                        updates \u003d {\u0027migration_status\u0027: \u0027success\u0027}"},{"line_number":1877,"context_line":"                        volume.update(updates)"},{"line_number":1878,"context_line":"                        volume.save()"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_c9ae70e5","line":1875,"updated":"2016-07-06 07:43:23.000000000","message":"Given cinder volume service restart for some reason, is there any way to recheck the volume state?","commit_id":"81eab22bb3698556d8082e66882e782796e4b440"},{"author":{"_account_id":11637,"name":"jay.xu","email":"jay.xu@emc.com","username":"jay.xu"},"change_message_id":"7b8abc03932f13541538c015b3eb9c7580a9a7a8","unresolved":false,"context_lines":[{"line_number":1901,"context_line":"        return self.driver.migrate_volume_target(ctxt, volume)"},{"line_number":1902,"context_line":""},{"line_number":1903,"context_line":"    def complete_migration_target(self, ctxt, volume):"},{"line_number":1904,"context_line":"        return self.driver.complete_migration_target(ctxt, volume)"},{"line_number":1905,"context_line":""},{"line_number":1906,"context_line":"    @periodic_task.periodic_task"},{"line_number":1907,"context_line":"    def _report_driver_status(self, context):"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_4d544bc9","line":1904,"updated":"2016-07-06 07:55:21.000000000","message":"Suggest to check the status return from self.driver.complete_migration_target() and then update database here instead of line 1876.","commit_id":"81eab22bb3698556d8082e66882e782796e4b440"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"8e5e23f909745499ab302e2b0b1b3b117ffc87ae","unresolved":false,"context_lines":[{"line_number":1901,"context_line":"        return self.driver.migrate_volume_target(ctxt, volume)"},{"line_number":1902,"context_line":""},{"line_number":1903,"context_line":"    def complete_migration_target(self, ctxt, volume):"},{"line_number":1904,"context_line":"        return self.driver.complete_migration_target(ctxt, volume)"},{"line_number":1905,"context_line":""},{"line_number":1906,"context_line":"    @periodic_task.periodic_task"},{"line_number":1907,"context_line":"    def _report_driver_status(self, context):"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_685048d5","line":1904,"in_reply_to":"1aa78d24_4d544bc9","updated":"2016-07-11 06:01:13.000000000","message":"+1\nWith this change, complete_migration_target could be an asynchronous rabbit mq.\n\nThanks\nPeter","commit_id":"81eab22bb3698556d8082e66882e782796e4b440"},{"author":{"_account_id":18026,"name":"huanan","email":"huanan@huawei.com","username":"huanan"},"change_message_id":"e32243e62ac23d1df9b4f9013c98b5cf8e887e8c","unresolved":false,"context_lines":[{"line_number":1814,"context_line":""},{"line_number":1815,"context_line":"    def waite_migrate_complete(self, ctxt, volume_id):"},{"line_number":1816,"context_line":"        volume \u003d objects.Volume.get_by_id(ctxt, volume_id)"},{"line_number":1817,"context_line":"        waite_time \u003d 10"},{"line_number":1818,"context_line":"        while volume.migration_status !\u003d \u0027success\u0027:"},{"line_number":1819,"context_line":"            if volume.migration_status \u003d\u003d \u0027error\u0027:"},{"line_number":1820,"context_line":"                msg \u003d _(\"failed to complete migration on destination host\")"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_1b02e209","line":1817,"range":{"start_line":1817,"start_character":8,"end_line":1817,"end_character":13},"updated":"2016-07-14 12:25:19.000000000","message":"wait_time","commit_id":"1d8b785eaf0253eec3ae72a870954e78a08bf934"},{"author":{"_account_id":18026,"name":"huanan","email":"huanan@huawei.com","username":"huanan"},"change_message_id":"e32243e62ac23d1df9b4f9013c98b5cf8e887e8c","unresolved":false,"context_lines":[{"line_number":1820,"context_line":"                msg \u003d _(\"failed to complete migration on destination host\")"},{"line_number":1821,"context_line":"                raise exception.VolumeMigrationFailed(reason\u003dmsg)"},{"line_number":1822,"context_line":"            else:"},{"line_number":1823,"context_line":"                time.sleep(waite_time)"},{"line_number":1824,"context_line":"            volume \u003d objects.Volume.get_by_id(ctxt, volume_id)"},{"line_number":1825,"context_line":""},{"line_number":1826,"context_line":"    def migrate_volume(self, ctxt, volume_id, host, force_host_copy\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_1b29428a","line":1823,"range":{"start_line":1823,"start_character":27,"end_line":1823,"end_character":32},"updated":"2016-07-14 12:25:19.000000000","message":"Same","commit_id":"1d8b785eaf0253eec3ae72a870954e78a08bf934"},{"author":{"_account_id":18026,"name":"huanan","email":"huanan@huawei.com","username":"huanan"},"change_message_id":"e32243e62ac23d1df9b4f9013c98b5cf8e887e8c","unresolved":false,"context_lines":[{"line_number":1883,"context_line":"                    volume.save()"},{"line_number":1884,"context_line":"                    if migration_async:"},{"line_number":1885,"context_line":"                        rpcapi.complete_migration_target("},{"line_number":1886,"context_line":"                            ctxt, volume, migration_info, host)"},{"line_number":1887,"context_line":"                        self.waite_migrate_complete(ctxt, volume_id)"},{"line_number":1888,"context_line":"            except Exception:"},{"line_number":1889,"context_line":"                with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_71aea782","line":1886,"range":{"start_line":1886,"start_character":34,"end_line":1886,"end_character":40},"updated":"2016-07-14 12:25:19.000000000","message":"When migrate_volume_target complete, volume will update host to dst_host, In complete_migration_target, driver need terminate_connection through volume_rpc, it call dst_host terminate_connection function but src_host. \n\n    def terminate_connection(self, ctxt, volume, connector,                      force\u003dFalse):\n        cctxt \u003d self._get_cctxt(volume[\u0027host\u0027], \u00272.0\u0027)\n        return cctxt.call(ctxt, \u0027terminate_connection\u0027, volume_id\u003dvolume[\u0027id\u0027],\n                          connector\u003dconnector, force\u003dforce)","commit_id":"1d8b785eaf0253eec3ae72a870954e78a08bf934"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"00e43690ff054341e42a3752b733c861db99da36","unresolved":false,"context_lines":[{"line_number":1761,"context_line":"            self.driver.remove_export(context, volume)"},{"line_number":1762,"context_line":"            self.driver.delete_volume(volume)"},{"line_number":1763,"context_line":"        except Exception:"},{"line_number":1764,"context_line":"            LOG.error(_LE(\"Delete migrate src volume failed.\"),"},{"line_number":1765,"context_line":"                      resource\u003dvolume)"},{"line_number":1766,"context_line":""},{"line_number":1767,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"bacf61ea_c0a297ad","line":1764,"range":{"start_line":1764,"start_character":42,"end_line":1764,"end_character":52},"updated":"2016-08-01 02:31:30.000000000","message":"Print the src volume id or name is better.","commit_id":"f45a1af44425fdf396aac92112a739e315db3dc2"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"00e43690ff054341e42a3752b733c861db99da36","unresolved":false,"context_lines":[{"line_number":1861,"context_line":"        wait_time \u003d 10"},{"line_number":1862,"context_line":"        while volume.migration_status !\u003d \u0027success\u0027:"},{"line_number":1863,"context_line":"            if volume.migration_status \u003d\u003d \u0027error\u0027:"},{"line_number":1864,"context_line":"                msg \u003d _(\"failed to complete migration on destination host\")"},{"line_number":1865,"context_line":"                raise exception.VolumeMigrationFailed(reason\u003dmsg)"},{"line_number":1866,"context_line":"            else:"},{"line_number":1867,"context_line":"                time.sleep(wait_time)"}],"source_content_type":"text/x-python","patch_set":13,"id":"bacf61ea_00802ff6","line":1864,"range":{"start_line":1864,"start_character":35,"end_line":1864,"end_character":53},"updated":"2016-08-01 02:31:30.000000000","message":"Add volume id or name in log msg?","commit_id":"f45a1af44425fdf396aac92112a739e315db3dc2"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"00e43690ff054341e42a3752b733c861db99da36","unresolved":false,"context_lines":[{"line_number":1861,"context_line":"        wait_time \u003d 10"},{"line_number":1862,"context_line":"        while volume.migration_status !\u003d \u0027success\u0027:"},{"line_number":1863,"context_line":"            if volume.migration_status \u003d\u003d \u0027error\u0027:"},{"line_number":1864,"context_line":"                msg \u003d _(\"failed to complete migration on destination host\")"},{"line_number":1865,"context_line":"                raise exception.VolumeMigrationFailed(reason\u003dmsg)"},{"line_number":1866,"context_line":"            else:"},{"line_number":1867,"context_line":"                time.sleep(wait_time)"}],"source_content_type":"text/x-python","patch_set":13,"id":"bacf61ea_809d3f68","line":1864,"range":{"start_line":1864,"start_character":25,"end_line":1864,"end_character":31},"updated":"2016-08-01 02:31:30.000000000","message":"s/failed/Failed","commit_id":"f45a1af44425fdf396aac92112a739e315db3dc2"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"809617b2c85ae616c75308c2d4a5b60bfa233d43","unresolved":false,"context_lines":[{"line_number":1970,"context_line":"        updates \u003d {\u0027migration_status\u0027: \u0027success\u0027}"},{"line_number":1971,"context_line":"        try:"},{"line_number":1972,"context_line":"            self.driver.complete_migration_target(ctxt, volume, migration_info)"},{"line_number":1973,"context_line":"        except Exception:"},{"line_number":1974,"context_line":"            updates \u003d {\u0027migration_status\u0027: \u0027error\u0027}"},{"line_number":1975,"context_line":"        volume.update(updates)"},{"line_number":1976,"context_line":"        volume.save()"}],"source_content_type":"text/x-python","patch_set":17,"id":"9ad45d7e_078636b9","line":1973,"updated":"2016-08-08 09:25:59.000000000","message":"Don\u0027t you log something here?","commit_id":"b501d783a70db253ca39b436322dd10dba5b423e"},{"author":{"_account_id":18026,"name":"huanan","email":"huanan@huawei.com","username":"huanan"},"change_message_id":"4cd075a027886cc5e2cd087cb7e23faa7f01d679","unresolved":false,"context_lines":[{"line_number":1970,"context_line":"        updates \u003d {\u0027migration_status\u0027: \u0027success\u0027}"},{"line_number":1971,"context_line":"        try:"},{"line_number":1972,"context_line":"            self.driver.complete_migration_target(ctxt, volume, migration_info)"},{"line_number":1973,"context_line":"        except Exception:"},{"line_number":1974,"context_line":"            updates \u003d {\u0027migration_status\u0027: \u0027error\u0027}"},{"line_number":1975,"context_line":"        volume.update(updates)"},{"line_number":1976,"context_line":"        volume.save()"}],"source_content_type":"text/x-python","patch_set":17,"id":"9ad45d7e_b783ddcb","line":1973,"in_reply_to":"9ad45d7e_078636b9","updated":"2016-08-09 08:03:48.000000000","message":"Done","commit_id":"b501d783a70db253ca39b436322dd10dba5b423e"},{"author":{"_account_id":8202,"name":"chenzongliang","email":"chenzongliang@huawei.com","username":"zongliang"},"change_message_id":"39f3002a80bdf6fbdb8a187ba6a5a0d3da24aec7","unresolved":false,"context_lines":[{"line_number":1768,"context_line":"            self.driver.remove_export(context, volume)"},{"line_number":1769,"context_line":"            self.driver.delete_volume(volume)"},{"line_number":1770,"context_line":"        except Exception as ex:"},{"line_number":1771,"context_line":"            LOG.error(_LE(\"Delete migrate src volume failed: %(err)s.\"),"},{"line_number":1772,"context_line":"                      {\u0027err\u0027: ex}, resource\u003dvolume)"},{"line_number":1773,"context_line":""},{"line_number":1774,"context_line":"    def migrate_volume_completion(self, ctxt, volume_id, new_volume_id,"},{"line_number":1775,"context_line":"                                  error\u003dFalse, volume\u003dNone, new_volume\u003dNone):"}],"source_content_type":"text/x-python","patch_set":22,"id":"3ac371cc_739fa750","line":1772,"range":{"start_line":1771,"start_character":12,"end_line":1772,"end_character":51},"updated":"2016-08-16 03:33:57.000000000","message":"Suggest to log the volume id in the log errors","commit_id":"130d0b4464bb2e13919fa39dda3359939b3cd045"},{"author":{"_account_id":18026,"name":"huanan","email":"huanan@huawei.com","username":"huanan"},"change_message_id":"f9f3b9483506bb6b1f0c080bb34eaad2407f2beb","unresolved":false,"context_lines":[{"line_number":1768,"context_line":"            self.driver.remove_export(context, volume)"},{"line_number":1769,"context_line":"            self.driver.delete_volume(volume)"},{"line_number":1770,"context_line":"        except Exception as ex:"},{"line_number":1771,"context_line":"            LOG.error(_LE(\"Delete migrate src volume failed: %(err)s.\"),"},{"line_number":1772,"context_line":"                      {\u0027err\u0027: ex}, resource\u003dvolume)"},{"line_number":1773,"context_line":""},{"line_number":1774,"context_line":"    def migrate_volume_completion(self, ctxt, volume_id, new_volume_id,"},{"line_number":1775,"context_line":"                                  error\u003dFalse, volume\u003dNone, new_volume\u003dNone):"}],"source_content_type":"text/x-python","patch_set":22,"id":"3ac371cc_8b2b3f94","line":1772,"range":{"start_line":1771,"start_character":12,"end_line":1772,"end_character":51},"in_reply_to":"3ac371cc_739fa750","updated":"2016-08-19 03:31:25.000000000","message":"Done","commit_id":"130d0b4464bb2e13919fa39dda3359939b3cd045"},{"author":{"_account_id":8202,"name":"chenzongliang","email":"chenzongliang@huawei.com","username":"zongliang"},"change_message_id":"4be0d849344de226a0a6952b4c3e882379d6ac4f","unresolved":false,"context_lines":[{"line_number":1866,"context_line":"        wait_time \u003d 10"},{"line_number":1867,"context_line":"        while volume.migration_status !\u003d \u0027success\u0027:"},{"line_number":1868,"context_line":"            if volume.migration_status \u003d\u003d \u0027error\u0027:"},{"line_number":1869,"context_line":"                msg \u003d _(\"failed to complete migration on destination host\")"},{"line_number":1870,"context_line":"                raise exception.VolumeMigrationFailed(reason\u003dmsg)"},{"line_number":1871,"context_line":"            else:"},{"line_number":1872,"context_line":"                time.sleep(wait_time)"}],"source_content_type":"text/x-python","patch_set":22,"id":"3ac371cc_33cecfb4","line":1869,"range":{"start_line":1869,"start_character":25,"end_line":1869,"end_character":32},"updated":"2016-08-16 03:24:00.000000000","message":"Replace failed use Failed","commit_id":"130d0b4464bb2e13919fa39dda3359939b3cd045"},{"author":{"_account_id":18026,"name":"huanan","email":"huanan@huawei.com","username":"huanan"},"change_message_id":"f9f3b9483506bb6b1f0c080bb34eaad2407f2beb","unresolved":false,"context_lines":[{"line_number":1866,"context_line":"        wait_time \u003d 10"},{"line_number":1867,"context_line":"        while volume.migration_status !\u003d \u0027success\u0027:"},{"line_number":1868,"context_line":"            if volume.migration_status \u003d\u003d \u0027error\u0027:"},{"line_number":1869,"context_line":"                msg \u003d _(\"failed to complete migration on destination host\")"},{"line_number":1870,"context_line":"                raise exception.VolumeMigrationFailed(reason\u003dmsg)"},{"line_number":1871,"context_line":"            else:"},{"line_number":1872,"context_line":"                time.sleep(wait_time)"}],"source_content_type":"text/x-python","patch_set":22,"id":"3ac371cc_8bf85f4b","line":1869,"range":{"start_line":1869,"start_character":25,"end_line":1869,"end_character":32},"in_reply_to":"3ac371cc_33cecfb4","updated":"2016-08-19 03:31:25.000000000","message":"Done","commit_id":"130d0b4464bb2e13919fa39dda3359939b3cd045"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"7d35306e12effb8474377d88be23c4c88a81dd42","unresolved":false,"context_lines":[{"line_number":2001,"context_line":"        wait_time \u003d 10"},{"line_number":2002,"context_line":"        while volume.migration_status !\u003d \u0027success\u0027:"},{"line_number":2003,"context_line":"            if volume.migration_status \u003d\u003d \u0027error\u0027:"},{"line_number":2004,"context_line":"                msg \u003d _(\"Failed to complete migration on destination host\")"},{"line_number":2005,"context_line":"                raise exception.VolumeMigrationFailed(reason\u003dmsg)"},{"line_number":2006,"context_line":"            else:"},{"line_number":2007,"context_line":"                time.sleep(wait_time)"}],"source_content_type":"text/x-python","patch_set":37,"id":"ba2be162_1225a9aa","line":2004,"range":{"start_line":2004,"start_character":25,"end_line":2004,"end_character":73},"updated":"2017-02-28 16:08:14.000000000","message":"This kind of message makes more sense.","commit_id":"d07a798b68a74d275cd914410080ad8471cf9f8d"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"7d35306e12effb8474377d88be23c4c88a81dd42","unresolved":false,"context_lines":[{"line_number":2004,"context_line":"                msg \u003d _(\"Failed to complete migration on destination host\")"},{"line_number":2005,"context_line":"                raise exception.VolumeMigrationFailed(reason\u003dmsg)"},{"line_number":2006,"context_line":"            else:"},{"line_number":2007,"context_line":"                time.sleep(wait_time)"},{"line_number":2008,"context_line":"            volume \u003d objects.Volume.get_by_id(ctxt, volume_id)"},{"line_number":2009,"context_line":""},{"line_number":2010,"context_line":"    def migrate_volume(self, ctxt, volume, host, force_host_copy\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":37,"id":"ba2be162_523e41b9","line":2007,"range":{"start_line":2007,"start_character":16,"end_line":2007,"end_character":37},"updated":"2017-02-28 16:08:14.000000000","message":"Dangerous to not do this as a fixed interval looping call.","commit_id":"d07a798b68a74d275cd914410080ad8471cf9f8d"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5a96103489799fb69ec99625501c73e5e6f6ecb2","unresolved":false,"context_lines":[{"line_number":2020,"context_line":"        except Exception as ex:"},{"line_number":2021,"context_line":"            LOG.error(\"Delete migrate src volume %(vol)s failed: \""},{"line_number":2022,"context_line":"                      \"%(err)s.\""},{"line_number":2023,"context_line":"                      % {\u0027vol\u0027: volume.id, \u0027err\u0027: ex}, resource\u003dvolume)"},{"line_number":2024,"context_line":""},{"line_number":2025,"context_line":"    def migrate_volume_completion(self, ctxt, volume, new_volume, error\u003dFalse):"},{"line_number":2026,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":41,"id":"df140735_9af6d25c","line":2023,"range":{"start_line":2023,"start_character":22,"end_line":2023,"end_character":23},"updated":"2017-06-06 14:47:43.000000000","message":"Please change to ,","commit_id":"5316bf72b91899345754b805a4edee7b89ad0eb5"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"01f7fb1d7ff7a6090230b65921c7b74a016cabb1","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                    \u0027when performing volume migration (seconds)\u0027),"},{"line_number":124,"context_line":"    cfg.IntOpt(\u0027async_migration_waiting_timeout_secs\u0027,"},{"line_number":125,"context_line":"               default\u003d3000,"},{"line_number":126,"context_line":"               help\u003d\"Timeout for waiting async migration task finished \""},{"line_number":127,"context_line":"                    \"in seconds.\"),"},{"line_number":128,"context_line":"    cfg.BoolOpt(\u0027volume_service_inithost_offload\u0027,"},{"line_number":129,"context_line":"                default\u003dFalse,"},{"line_number":130,"context_line":"                help\u003d\u0027Offload pending volume delete during \u0027"}],"source_content_type":"text/x-python","patch_set":42,"id":"df140735_62022c0c","line":127,"range":{"start_line":126,"start_character":21,"end_line":127,"end_character":31},"updated":"2017-06-06 18:04:48.000000000","message":"Timeout for waiting for async migration task to complete in seconds.","commit_id":"21ec7cb7fead05aa842b56ec32a3b60e9672a6be"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"c429eb698b3f6a6f12651cc14227fbeed3c1da4b","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                    \u0027when performing volume migration (seconds)\u0027),"},{"line_number":124,"context_line":"    cfg.IntOpt(\u0027async_migration_waiting_timeout_secs\u0027,"},{"line_number":125,"context_line":"               default\u003d3000,"},{"line_number":126,"context_line":"               help\u003d\"Timeout for waiting async migration task finished \""},{"line_number":127,"context_line":"                    \"in seconds.\"),"},{"line_number":128,"context_line":"    cfg.BoolOpt(\u0027volume_service_inithost_offload\u0027,"},{"line_number":129,"context_line":"                default\u003dFalse,"},{"line_number":130,"context_line":"                help\u003d\u0027Offload pending volume delete during \u0027"}],"source_content_type":"text/x-python","patch_set":42,"id":"df140735_b129abf3","line":127,"range":{"start_line":126,"start_character":21,"end_line":127,"end_character":31},"in_reply_to":"df140735_62022c0c","updated":"2017-06-07 00:55:56.000000000","message":"Done","commit_id":"21ec7cb7fead05aa842b56ec32a3b60e9672a6be"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"01f7fb1d7ff7a6090230b65921c7b74a016cabb1","unresolved":false,"context_lines":[{"line_number":2122,"context_line":"        while volume.migration_status !\u003d \u0027success\u0027:"},{"line_number":2123,"context_line":"            wait_interval +\u003d 2"},{"line_number":2124,"context_line":"            if time.time() \u003e deadline:"},{"line_number":2125,"context_line":"                msg \u003d _(\"Timeout waiting async migration task to completed.\")"},{"line_number":2126,"context_line":"                raise exception.VolumeMigrationFailed(reason\u003dmsg)"},{"line_number":2127,"context_line":"            if volume.migration_status \u003d\u003d \u0027error\u0027:"},{"line_number":2128,"context_line":"                msg \u003d _(\"Failed to complete async task on destination host.\")"}],"source_content_type":"text/x-python","patch_set":42,"id":"df140735_023a50cc","line":2125,"range":{"start_line":2125,"start_character":40,"end_line":2125,"end_character":75},"updated":"2017-06-06 18:04:48.000000000","message":"for async migration task to complete.","commit_id":"21ec7cb7fead05aa842b56ec32a3b60e9672a6be"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"c429eb698b3f6a6f12651cc14227fbeed3c1da4b","unresolved":false,"context_lines":[{"line_number":2122,"context_line":"        while volume.migration_status !\u003d \u0027success\u0027:"},{"line_number":2123,"context_line":"            wait_interval +\u003d 2"},{"line_number":2124,"context_line":"            if time.time() \u003e deadline:"},{"line_number":2125,"context_line":"                msg \u003d _(\"Timeout waiting async migration task to completed.\")"},{"line_number":2126,"context_line":"                raise exception.VolumeMigrationFailed(reason\u003dmsg)"},{"line_number":2127,"context_line":"            if volume.migration_status \u003d\u003d \u0027error\u0027:"},{"line_number":2128,"context_line":"                msg \u003d _(\"Failed to complete async task on destination host.\")"}],"source_content_type":"text/x-python","patch_set":42,"id":"df140735_113a9733","line":2125,"range":{"start_line":2125,"start_character":40,"end_line":2125,"end_character":75},"in_reply_to":"df140735_023a50cc","updated":"2017-06-07 00:55:56.000000000","message":"Done","commit_id":"21ec7cb7fead05aa842b56ec32a3b60e9672a6be"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"01f7fb1d7ff7a6090230b65921c7b74a016cabb1","unresolved":false,"context_lines":[{"line_number":2164,"context_line":"                                                                 host)"},{"line_number":2165,"context_line":"                if not moved:"},{"line_number":2166,"context_line":"                    # FIXME(wilson-l) We can get rid of the try-except in"},{"line_number":2167,"context_line":"                    # Queen for we needn\u0027t this backward compatibility"},{"line_number":2168,"context_line":"                    # anymore."},{"line_number":2169,"context_line":"                    try:"},{"line_number":2170,"context_line":"                        LOG.debug(\"Issue driver.migrate_volume_target.\","}],"source_content_type":"text/x-python","patch_set":42,"id":"df140735_023ff0b5","line":2167,"range":{"start_line":2167,"start_character":22,"end_line":2167,"end_character":70},"updated":"2017-06-06 18:04:48.000000000","message":"Queens as we won\u0027t need this backward compatibility","commit_id":"21ec7cb7fead05aa842b56ec32a3b60e9672a6be"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"c429eb698b3f6a6f12651cc14227fbeed3c1da4b","unresolved":false,"context_lines":[{"line_number":2164,"context_line":"                                                                 host)"},{"line_number":2165,"context_line":"                if not moved:"},{"line_number":2166,"context_line":"                    # FIXME(wilson-l) We can get rid of the try-except in"},{"line_number":2167,"context_line":"                    # Queen for we needn\u0027t this backward compatibility"},{"line_number":2168,"context_line":"                    # anymore."},{"line_number":2169,"context_line":"                    try:"},{"line_number":2170,"context_line":"                        LOG.debug(\"Issue driver.migrate_volume_target.\","}],"source_content_type":"text/x-python","patch_set":42,"id":"df140735_710c3394","line":2167,"range":{"start_line":2167,"start_character":22,"end_line":2167,"end_character":70},"in_reply_to":"df140735_023ff0b5","updated":"2017-06-07 00:55:56.000000000","message":"Done","commit_id":"21ec7cb7fead05aa842b56ec32a3b60e9672a6be"},{"author":{"_account_id":10439,"name":"Xi Yang","email":"yang.xi@99cloud.net","username":"phenom"},"change_message_id":"db9f288590d7f1efc8e96cc96a24d40d9fa9d40a","unresolved":false,"context_lines":[{"line_number":122,"context_line":"               help\u003d\u0027Timeout for creating the volume to migrate to \u0027"},{"line_number":123,"context_line":"                    \u0027when performing volume migration (seconds)\u0027),"},{"line_number":124,"context_line":"    cfg.IntOpt(\u0027async_migration_waiting_timeout_secs\u0027,"},{"line_number":125,"context_line":"               default\u003d3000,"},{"line_number":126,"context_line":"               help\u003d\"Timeout for waiting async migration task to finished \""},{"line_number":127,"context_line":"                    \"in seconds.\"),"},{"line_number":128,"context_line":"    cfg.BoolOpt(\u0027volume_service_inithost_offload\u0027,"}],"source_content_type":"text/x-python","patch_set":43,"id":"df140735_670c7194","line":125,"range":{"start_line":125,"start_character":23,"end_line":125,"end_character":27},"updated":"2017-06-07 02:40:28.000000000","message":"Seems 3000 is a little strange, what about changing it to 3600 which is commonly used timeout value for time consuming tasks?","commit_id":"1a397be9f42557044478ed1c20cff479494b9658"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"f41a3fc60bd5db84a91f8626b26ce969d8448a1f","unresolved":false,"context_lines":[{"line_number":122,"context_line":"               help\u003d\u0027Timeout for creating the volume to migrate to \u0027"},{"line_number":123,"context_line":"                    \u0027when performing volume migration (seconds)\u0027),"},{"line_number":124,"context_line":"    cfg.IntOpt(\u0027async_migration_waiting_timeout_secs\u0027,"},{"line_number":125,"context_line":"               default\u003d3000,"},{"line_number":126,"context_line":"               help\u003d\"Timeout for waiting async migration task to finished \""},{"line_number":127,"context_line":"                    \"in seconds.\"),"},{"line_number":128,"context_line":"    cfg.BoolOpt(\u0027volume_service_inithost_offload\u0027,"}],"source_content_type":"text/x-python","patch_set":43,"id":"df140735_47204c4a","line":125,"range":{"start_line":125,"start_character":23,"end_line":125,"end_character":27},"in_reply_to":"df140735_670c7194","updated":"2017-06-07 03:00:40.000000000","message":"what\u0027s the difference between 50 minutes and 60 minutes?","commit_id":"1a397be9f42557044478ed1c20cff479494b9658"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"cee20a58be5ad13983a6e9dcd5abc46a1a243c55","unresolved":false,"context_lines":[{"line_number":2018,"context_line":"            self.driver.remove_export(context, volume)"},{"line_number":2019,"context_line":"            self.driver.delete_volume(volume)"},{"line_number":2020,"context_line":"        except Exception as ex:"},{"line_number":2021,"context_line":"            LOG.error(\"Delete migrate src volume %(vol)s failed: \""},{"line_number":2022,"context_line":"                      \"%(err)s.\","},{"line_number":2023,"context_line":"                      {\u0027vol\u0027: volume.id, \u0027err\u0027: ex}, resource\u003dvolume)"},{"line_number":2024,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"7f231b9d_edc2c252","line":2021,"updated":"2017-06-19 08:13:26.000000000","message":"LOG.error \u003d\u003e LOG.exception","commit_id":"958c8a5283ac9c572687338d25307062c8a635b1"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"56225c3e0856e751dc1ab07a2f56ef818f3302a5","unresolved":false,"context_lines":[{"line_number":2018,"context_line":"            self.driver.remove_export(context, volume)"},{"line_number":2019,"context_line":"            self.driver.delete_volume(volume)"},{"line_number":2020,"context_line":"        except Exception as ex:"},{"line_number":2021,"context_line":"            LOG.error(\"Delete migrate src volume %(vol)s failed: \""},{"line_number":2022,"context_line":"                      \"%(err)s.\","},{"line_number":2023,"context_line":"                      {\u0027vol\u0027: volume.id, \u0027err\u0027: ex}, resource\u003dvolume)"},{"line_number":2024,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"7f231b9d_3e158240","line":2021,"in_reply_to":"7f231b9d_edc2c252","updated":"2017-06-19 10:04:23.000000000","message":"Done","commit_id":"958c8a5283ac9c572687338d25307062c8a635b1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"933ee9b5631db98642b3aa79b0d4d5ce128151f6","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                    \u0027when performing volume migration (seconds)\u0027),"},{"line_number":124,"context_line":"    cfg.IntOpt(\u0027async_migration_waiting_timeout_secs\u0027,"},{"line_number":125,"context_line":"               default\u003d3000,"},{"line_number":126,"context_line":"               help\u003d\"Timeout for waiting async migration task to finished \""},{"line_number":127,"context_line":"                    \"in seconds.\"),"},{"line_number":128,"context_line":"    cfg.BoolOpt(\u0027volume_service_inithost_offload\u0027,"},{"line_number":129,"context_line":"                default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":49,"id":"3f1d235d_c261be3b","line":126,"updated":"2017-07-10 21:49:19.000000000","message":"s/waiting async/waiting for async/\ns/task to finished/task to be finished/","commit_id":"b61ce248ad72c0ed6ddc2892f9abf70a23bf91d1"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"0927e28c50e74dcce57128b5cb0a2622c83a99b7","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                    \u0027when performing volume migration (seconds)\u0027),"},{"line_number":124,"context_line":"    cfg.IntOpt(\u0027async_migration_waiting_timeout_secs\u0027,"},{"line_number":125,"context_line":"               default\u003d3000,"},{"line_number":126,"context_line":"               help\u003d\"Timeout for waiting async migration task to finished \""},{"line_number":127,"context_line":"                    \"in seconds.\"),"},{"line_number":128,"context_line":"    cfg.BoolOpt(\u0027volume_service_inithost_offload\u0027,"},{"line_number":129,"context_line":"                default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":49,"id":"3f1d235d_966f84c4","line":126,"in_reply_to":"3f1d235d_c261be3b","updated":"2017-07-11 02:12:18.000000000","message":"Done","commit_id":"b61ce248ad72c0ed6ddc2892f9abf70a23bf91d1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"933ee9b5631db98642b3aa79b0d4d5ce128151f6","unresolved":false,"context_lines":[{"line_number":2325,"context_line":"                                ctxt, volume, host))"},{"line_number":2326,"context_line":"                    except exception.Invalid:"},{"line_number":2327,"context_line":"                        LOG.warning(\"Issue driver.migrate_volume_target \""},{"line_number":2328,"context_line":"                                    \"failed and try _migrate_volume_\""},{"line_number":2329,"context_line":"                                    \"generic.\", resource\u003dvolume)"},{"line_number":2330,"context_line":"                        moved \u003d False"},{"line_number":2331,"context_line":"                if moved:"}],"source_content_type":"text/x-python","patch_set":49,"id":"3f1d235d_a2c92226","line":2328,"range":{"start_line":2328,"start_character":48,"end_line":2328,"end_character":51},"updated":"2017-07-10 21:49:19.000000000","message":"trying","commit_id":"b61ce248ad72c0ed6ddc2892f9abf70a23bf91d1"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"0927e28c50e74dcce57128b5cb0a2622c83a99b7","unresolved":false,"context_lines":[{"line_number":2325,"context_line":"                                ctxt, volume, host))"},{"line_number":2326,"context_line":"                    except exception.Invalid:"},{"line_number":2327,"context_line":"                        LOG.warning(\"Issue driver.migrate_volume_target \""},{"line_number":2328,"context_line":"                                    \"failed and try _migrate_volume_\""},{"line_number":2329,"context_line":"                                    \"generic.\", resource\u003dvolume)"},{"line_number":2330,"context_line":"                        moved \u003d False"},{"line_number":2331,"context_line":"                if moved:"}],"source_content_type":"text/x-python","patch_set":49,"id":"3f1d235d_96f2e405","line":2328,"range":{"start_line":2328,"start_character":48,"end_line":2328,"end_character":51},"in_reply_to":"3f1d235d_a2c92226","updated":"2017-07-11 02:12:18.000000000","message":"Done","commit_id":"b61ce248ad72c0ed6ddc2892f9abf70a23bf91d1"}],"cinder/volume/rpcapi.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"dfb27ba5e177b32b908745307e91a61a8b202097","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        cctxt \u003d self._get_cctxt(volume.host, \u00272.0\u0027)"},{"line_number":225,"context_line":"        cctxt.cast(ctxt, \u0027migrate_volume\u0027, volume_id\u003dvolume.id, host\u003dhost_p,"},{"line_number":226,"context_line":"                   force_host_copy\u003dforce_host_copy, volume\u003dvolume)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def migrate_volume_target(self, ctxt, volume, dest_host):"},{"line_number":229,"context_line":"        cctxt \u003d self._get_cctxt(dest_host, \u00272.0\u0027)"},{"line_number":230,"context_line":"        return cctxt.call(ctxt, \u0027migrate_volume_target\u0027, volume\u003dvolume)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    def complete_migration_target(self, ctxt, volume, dest_host):"},{"line_number":233,"context_line":"        cctxt \u003d self._get_cctxt(dest_host, \u00272.0\u0027)"},{"line_number":234,"context_line":"        return cctxt.call(ctxt, \u0027complete_migration_target\u0027, volume\u003dvolume)"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def migrate_volume_completion(self, ctxt, volume, new_volume, error):"},{"line_number":237,"context_line":"        cctxt \u003d self._get_cctxt(volume.host, \u00272.0\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3aaa91ec_6e5fd275","line":234,"range":{"start_line":227,"start_character":0,"end_line":234,"end_character":75},"updated":"2016-06-28 11:39:14.000000000","message":"With new calls you need to bump the RPC API version, so we\u0027ll be able to react if c-vol doesn\u0027t support such call yet.\n\nAlso you should use self.client.can_send_version to determine if you\u0027re allowed to send such call (you won\u0027t be allowed if there are older c-vols in the deployment). If you\u0027re not I propose raising an exception and reacting accordingly in volume.manager.","commit_id":"af3d3601aa0f101d46577aaef79a2041abfcc7d4"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"9ff43bfe478f6629fbae789486bdf0e26fbe72ae","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        cctxt \u003d self._get_cctxt(volume.host, \u00272.0\u0027)"},{"line_number":225,"context_line":"        cctxt.cast(ctxt, \u0027migrate_volume\u0027, volume_id\u003dvolume.id, host\u003dhost_p,"},{"line_number":226,"context_line":"                   force_host_copy\u003dforce_host_copy, volume\u003dvolume)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def migrate_volume_target(self, ctxt, volume, dest_host):"},{"line_number":229,"context_line":"        cctxt \u003d self._get_cctxt(dest_host, \u00272.0\u0027)"},{"line_number":230,"context_line":"        return cctxt.call(ctxt, \u0027migrate_volume_target\u0027, volume\u003dvolume)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    def complete_migration_target(self, ctxt, volume, dest_host):"},{"line_number":233,"context_line":"        cctxt \u003d self._get_cctxt(dest_host, \u00272.0\u0027)"},{"line_number":234,"context_line":"        return cctxt.call(ctxt, \u0027complete_migration_target\u0027, volume\u003dvolume)"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def migrate_volume_completion(self, ctxt, volume, new_volume, error):"},{"line_number":237,"context_line":"        cctxt \u003d self._get_cctxt(volume.host, \u00272.0\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3aaa91ec_18586630","line":234,"range":{"start_line":227,"start_character":0,"end_line":234,"end_character":75},"in_reply_to":"3aaa91ec_6e5fd275","updated":"2016-07-01 07:25:25.000000000","message":"Done","commit_id":"af3d3601aa0f101d46577aaef79a2041abfcc7d4"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"a677c6aef05a9915d09ac36012d223bca63e2b1d","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        2.0  - Remove 1.x compatibility"},{"line_number":102,"context_line":"        2.1  - Add get_manageable_volumes() and get_manageable_snapshots()."},{"line_number":103,"context_line":"        2.2 - Adds support for sending objects over RPC in manage_existing()."},{"line_number":104,"context_line":"        2.3 - Adds migrate_volume_garget() and complete_migration_target()."},{"line_number":105,"context_line":"    \"\"\""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    RPC_API_VERSION \u003d \u00272.3\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_f3093bde","line":104,"range":{"start_line":104,"start_character":34,"end_line":104,"end_character":35},"updated":"2016-07-01 07:30:36.000000000","message":"nit: target","commit_id":"dcf180f3c272e8f9a414c28961887d087cf6af21"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"218d243965c64e20a72e7e9dffa6d8bccaa4070f","unresolved":false,"context_lines":[{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def migrate_volume_target(self, ctxt, volume, dest_host):"},{"line_number":231,"context_line":"        if not self.client.can_send_version(\u00272.3\u0027):"},{"line_number":232,"context_line":"            raise exception.VersionNotFoundForAPIMethod(version\u003d\u00272.3\u0027)"},{"line_number":233,"context_line":"        cctxt \u003d self._get_cctxt(dest_host, \u00272.3\u0027)"},{"line_number":234,"context_line":"        return cctxt.call(ctxt, \u0027migrate_volume_target\u0027, volume\u003dvolume)"},{"line_number":235,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_e65e48e8","line":232,"range":{"start_line":232,"start_character":28,"end_line":232,"end_character":55},"updated":"2016-07-04 18:43:38.000000000","message":"This exception is related to REST APIs and microversions. Looks like we\u0027ve used exception.Invalid in the past [1] for similar purposes, so I\u0027m okay with reusing the pattern.\n\n[1] https://review.openstack.org/#/c/264982/10/cinder/volume/rpcapi.py@171","commit_id":"e7035e65a3dde6deff3ea00a18725f1786038cc6"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"cdaf6141baa32fb73e5fe0f698c8fa8c1dea2a24","unresolved":false,"context_lines":[{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def migrate_volume_target(self, ctxt, volume, dest_host):"},{"line_number":231,"context_line":"        if not self.client.can_send_version(\u00272.3\u0027):"},{"line_number":232,"context_line":"            raise exception.VersionNotFoundForAPIMethod(version\u003d\u00272.3\u0027)"},{"line_number":233,"context_line":"        cctxt \u003d self._get_cctxt(dest_host, \u00272.3\u0027)"},{"line_number":234,"context_line":"        return cctxt.call(ctxt, \u0027migrate_volume_target\u0027, volume\u003dvolume)"},{"line_number":235,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_d5476275","line":232,"range":{"start_line":232,"start_character":28,"end_line":232,"end_character":55},"in_reply_to":"1aa78d24_e65e48e8","updated":"2016-07-05 07:30:58.000000000","message":"Done","commit_id":"e7035e65a3dde6deff3ea00a18725f1786038cc6"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"218d243965c64e20a72e7e9dffa6d8bccaa4070f","unresolved":false,"context_lines":[{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def complete_migration_target(self, ctxt, volume, dest_host):"},{"line_number":237,"context_line":"        if not self.client.can_send_version(\u00272.3\u0027):"},{"line_number":238,"context_line":"            raise exception.VersionNotFoundForAPIMethod(version\u003d\u00272.3\u0027)"},{"line_number":239,"context_line":"        cctxt \u003d self._get_cctxt(dest_host, \u00272.3\u0027)"},{"line_number":240,"context_line":"        return cctxt.call(ctxt, \u0027complete_migration_target\u0027, volume\u003dvolume)"},{"line_number":241,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_c6618caa","line":238,"range":{"start_line":238,"start_character":28,"end_line":238,"end_character":55},"updated":"2016-07-04 18:43:38.000000000","message":"ditto","commit_id":"e7035e65a3dde6deff3ea00a18725f1786038cc6"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"cdaf6141baa32fb73e5fe0f698c8fa8c1dea2a24","unresolved":false,"context_lines":[{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def complete_migration_target(self, ctxt, volume, dest_host):"},{"line_number":237,"context_line":"        if not self.client.can_send_version(\u00272.3\u0027):"},{"line_number":238,"context_line":"            raise exception.VersionNotFoundForAPIMethod(version\u003d\u00272.3\u0027)"},{"line_number":239,"context_line":"        cctxt \u003d self._get_cctxt(dest_host, \u00272.3\u0027)"},{"line_number":240,"context_line":"        return cctxt.call(ctxt, \u0027complete_migration_target\u0027, volume\u003dvolume)"},{"line_number":241,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_355fc642","line":238,"range":{"start_line":238,"start_character":28,"end_line":238,"end_character":55},"in_reply_to":"1aa78d24_c6618caa","updated":"2016-07-05 07:30:58.000000000","message":"Done","commit_id":"e7035e65a3dde6deff3ea00a18725f1786038cc6"},{"author":{"_account_id":11637,"name":"jay.xu","email":"jay.xu@emc.com","username":"jay.xu"},"change_message_id":"270db4c2489ef987b448744eba3f9f68120c159a","unresolved":false,"context_lines":[{"line_number":240,"context_line":"            msg \u003d _(\u0027complete_migration_target is not supported.\u0027)"},{"line_number":241,"context_line":"            raise exception.Invalid(reason\u003dmsg)"},{"line_number":242,"context_line":"        cctxt \u003d self._get_cctxt(dest_host, \u00272.3\u0027)"},{"line_number":243,"context_line":"        return cctxt.call(ctxt, \u0027complete_migration_target\u0027, volume\u003dvolume)"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    def migrate_volume_completion(self, ctxt, volume, new_volume, error):"},{"line_number":246,"context_line":"        cctxt \u003d self._get_cctxt(volume.host, \u00272.0\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_89b748f4","line":243,"updated":"2016-07-06 07:43:23.000000000","message":"Will it be timeout because cctxt.call() is used?","commit_id":"81eab22bb3698556d8082e66882e782796e4b440"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"809617b2c85ae616c75308c2d4a5b60bfa233d43","unresolved":false,"context_lines":[{"line_number":255,"context_line":"        cctxt.cast(ctxt, \u0027migrate_volume\u0027, volume_id\u003dvolume.id, host\u003dhost_p,"},{"line_number":256,"context_line":"                   force_host_copy\u003dforce_host_copy, volume\u003dvolume)"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"    def migrate_volume_target(self, ctxt, volume, dest_host):"},{"line_number":259,"context_line":"        if not self.client.can_send_version(\u00272.5\u0027):"},{"line_number":260,"context_line":"            msg \u003d _(\u0027migrate_volume_target is not supported.\u0027)"},{"line_number":261,"context_line":"            raise exception.Invalid(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":17,"id":"9ad45d7e_0d3e55b8","line":258,"range":{"start_line":258,"start_character":8,"end_line":258,"end_character":29},"updated":"2016-08-08 09:25:59.000000000","message":"can you change a better name? this name is quite confusing.","commit_id":"b501d783a70db253ca39b436322dd10dba5b423e"},{"author":{"_account_id":8202,"name":"chenzongliang","email":"chenzongliang@huawei.com","username":"zongliang"},"change_message_id":"39f3002a80bdf6fbdb8a187ba6a5a0d3da24aec7","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        2.3  - Adds support for sending objects over RPC in"},{"line_number":107,"context_line":"               initialize_connection()."},{"line_number":108,"context_line":"        2.4 - Sends request_spec as object in create_volume()."},{"line_number":109,"context_line":"        2.5- Adds migrate_volume_target() and complete_migration_target()."},{"line_number":110,"context_line":"    \"\"\""},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    RPC_API_VERSION \u003d \u00272.5\u0027"}],"source_content_type":"text/x-python","patch_set":22,"id":"3ac371cc_73c6874a","line":109,"range":{"start_line":109,"start_character":17,"end_line":109,"end_character":18},"updated":"2016-08-16 03:33:57.000000000","message":"add blank befor -","commit_id":"130d0b4464bb2e13919fa39dda3359939b3cd045"},{"author":{"_account_id":18026,"name":"huanan","email":"huanan@huawei.com","username":"huanan"},"change_message_id":"f9f3b9483506bb6b1f0c080bb34eaad2407f2beb","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        2.3  - Adds support for sending objects over RPC in"},{"line_number":107,"context_line":"               initialize_connection()."},{"line_number":108,"context_line":"        2.4 - Sends request_spec as object in create_volume()."},{"line_number":109,"context_line":"        2.5- Adds migrate_volume_target() and complete_migration_target()."},{"line_number":110,"context_line":"    \"\"\""},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    RPC_API_VERSION \u003d \u00272.5\u0027"}],"source_content_type":"text/x-python","patch_set":22,"id":"3ac371cc_cbf1b76c","line":109,"range":{"start_line":109,"start_character":17,"end_line":109,"end_character":18},"in_reply_to":"3ac371cc_73c6874a","updated":"2016-08-19 03:31:25.000000000","message":"Done","commit_id":"130d0b4464bb2e13919fa39dda3359939b3cd045"},{"author":{"_account_id":18026,"name":"huanan","email":"huanan@huawei.com","username":"huanan"},"change_message_id":"6a1a7c8bd592f3ec0c10079ee69038e228d36ce7","unresolved":false,"context_lines":[{"line_number":224,"context_line":"                             src_volume\u003dNone):"},{"line_number":225,"context_line":"        if src_volume:"},{"line_number":226,"context_line":"            cctxt \u003d self._get_cctxt(src_volume[\u0027host\u0027], \u00272.5\u0027)"},{"line_number":227,"context_line":"        else:"},{"line_number":228,"context_line":"            cctxt \u003d self._get_cctxt(volume[\u0027host\u0027], \u00272.0\u0027)"},{"line_number":229,"context_line":"        return cctxt.call(ctxt, \u0027terminate_connection\u0027, volume_id\u003dvolume[\u0027id\u0027],"},{"line_number":230,"context_line":"                          connector\u003dconnector, force\u003dforce,"}],"source_content_type":"text/x-python","patch_set":22,"id":"3ac371cc_53842bd3","line":227,"range":{"start_line":227,"start_character":8,"end_line":227,"end_character":13},"updated":"2016-08-16 03:40:36.000000000","message":"no need else.","commit_id":"130d0b4464bb2e13919fa39dda3359939b3cd045"},{"author":{"_account_id":18026,"name":"huanan","email":"huanan@huawei.com","username":"huanan"},"change_message_id":"f9f3b9483506bb6b1f0c080bb34eaad2407f2beb","unresolved":false,"context_lines":[{"line_number":224,"context_line":"                             src_volume\u003dNone):"},{"line_number":225,"context_line":"        if src_volume:"},{"line_number":226,"context_line":"            cctxt \u003d self._get_cctxt(src_volume[\u0027host\u0027], \u00272.5\u0027)"},{"line_number":227,"context_line":"        else:"},{"line_number":228,"context_line":"            cctxt \u003d self._get_cctxt(volume[\u0027host\u0027], \u00272.0\u0027)"},{"line_number":229,"context_line":"        return cctxt.call(ctxt, \u0027terminate_connection\u0027, volume_id\u003dvolume[\u0027id\u0027],"},{"line_number":230,"context_line":"                          connector\u003dconnector, force\u003dforce,"}],"source_content_type":"text/x-python","patch_set":22,"id":"3ac371cc_0bec6f8e","line":227,"range":{"start_line":227,"start_character":8,"end_line":227,"end_character":13},"in_reply_to":"3ac371cc_53842bd3","updated":"2016-08-19 03:31:25.000000000","message":"Done","commit_id":"130d0b4464bb2e13919fa39dda3359939b3cd045"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"76116b64d734bb269c7d8567573db07f4fb10cb1","unresolved":false,"context_lines":[{"line_number":231,"context_line":"                             src_volume\u003dNone):"},{"line_number":232,"context_line":"        version \u003d \u00273.0\u0027"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        if src_volume:"},{"line_number":235,"context_line":"            version \u003d \u00273.2\u0027"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"        cctxt \u003d self._get_cctxt(volume[\u0027host\u0027], version\u003dversion)"},{"line_number":238,"context_line":"        return cctxt.call(ctxt, \u0027terminate_connection\u0027, volume_id\u003dvolume[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":32,"id":"da6895a0_a68c5836","line":235,"range":{"start_line":234,"start_character":0,"end_line":235,"end_character":27},"updated":"2016-10-25 10:00:18.000000000","message":"That\u0027s wrong logic. This is a client, it should downgrade the message in case it\u0027s running pinned to \u003c3.2.","commit_id":"f6cfd21ee10c7e3301bf3e7df6728d00156dbcb2"},{"author":{"_account_id":18026,"name":"huanan","email":"huanan@huawei.com","username":"huanan"},"change_message_id":"79f10ec71bc760477e4c47f5c770745d437689e9","unresolved":false,"context_lines":[{"line_number":231,"context_line":"                             src_volume\u003dNone):"},{"line_number":232,"context_line":"        version \u003d \u00273.0\u0027"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        if src_volume:"},{"line_number":235,"context_line":"            version \u003d \u00273.2\u0027"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"        cctxt \u003d self._get_cctxt(volume[\u0027host\u0027], version\u003dversion)"},{"line_number":238,"context_line":"        return cctxt.call(ctxt, \u0027terminate_connection\u0027, volume_id\u003dvolume[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":32,"id":"3a71b18c_d5abb287","line":235,"range":{"start_line":234,"start_character":0,"end_line":235,"end_character":27},"in_reply_to":"da6895a0_a68c5836","updated":"2016-12-09 10:12:43.000000000","message":"Done","commit_id":"f6cfd21ee10c7e3301bf3e7df6728d00156dbcb2"}],"releasenotes/notes/support-async-migration-2wd23ded8hh78298.yaml":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"933ee9b5631db98642b3aa79b0d4d5ce128151f6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added async migration support in volume migration."},{"line_number":4,"context_line":"    Added new configuration \u0027async_migration_waiting_timeout_secs\u0027"},{"line_number":5,"context_line":"    to indicate how long cinder would wait when performing async"},{"line_number":6,"context_line":"    migration task."}],"source_content_type":"text/x-yaml","patch_set":49,"id":"3f1d235d_a2f2426e","line":4,"range":{"start_line":4,"start_character":28,"end_line":4,"end_character":29},"updated":"2017-07-10 21:49:19.000000000","message":"Please change these single quotes to double back quotes (``) so this config option gets formatted in the output.","commit_id":"b61ce248ad72c0ed6ddc2892f9abf70a23bf91d1"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"0927e28c50e74dcce57128b5cb0a2622c83a99b7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added async migration support in volume migration."},{"line_number":4,"context_line":"    Added new configuration \u0027async_migration_waiting_timeout_secs\u0027"},{"line_number":5,"context_line":"    to indicate how long cinder would wait when performing async"},{"line_number":6,"context_line":"    migration task."}],"source_content_type":"text/x-yaml","patch_set":49,"id":"3f1d235d_96a4240a","line":4,"range":{"start_line":4,"start_character":28,"end_line":4,"end_character":29},"in_reply_to":"3f1d235d_a2f2426e","updated":"2017-07-11 02:12:18.000000000","message":"Done","commit_id":"b61ce248ad72c0ed6ddc2892f9abf70a23bf91d1"}]}
