)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"c6fdfe1cb2ed782f20e921d9ad719a423018ef37","unresolved":false,"context_lines":[{"line_number":27,"context_line":"storwize_svc_volpool_name\u003dcinder"},{"line_number":28,"context_line":"storwize_svc_stretched_cluster_partner\u003dcinder_target"},{"line_number":29,"context_line":"secondary_backend \u003d second_host@sv2#sv2"},{"line_number":30,"context_line":"replication_devices \u003d {\u0027mvip\u0027\u003d\u0027192.168.0.11\u0027 \u0027login\u0027\u003d\u0027admin\u0027"},{"line_number":31,"context_line":"                       \u0027password\u0027\u003d\u0027admin\u0027}"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"Options to be put in cinder.conf, where the secondary"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3a29b11f_52cb6ea5","line":30,"updated":"2015-10-20 15:53:17.000000000","message":"secondary_backend and replication_devices have been changed. See this recently merged patch https://review.openstack.org/#/c/233307/7/doc/source/devref/replication.rst for the updated method. \n\nIt should be \"replication_device\" for each target. \"device_target_id\" and \"managed_backend_name\" (if managed) are mandatory fields for each replication_device.","commit_id":"37030dd083a00d191a40c5d1294d568bdc294339"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"e78bd81e56c7a2c9eb8a930be09fe42dd3530c7a","unresolved":false,"context_lines":[{"line_number":40,"context_line":"volume_driver \u003d cinder.volume.drivers.ibm.storwize_svc.\\"},{"line_number":41,"context_line":"                StorwizeSVCDriver"},{"line_number":42,"context_line":"volume_backend_name \u003d sv2"},{"line_number":43,"context_line":"storwize_svc_volpool_name\u003dcinder_target"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Implements: blueprint ibm-storwize-v2-replication"},{"line_number":46,"context_line":"Change-Id: I2ad5be69b2814d3b974c963828585fa15446d772"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3a29b11f_9526e9cc","line":43,"updated":"2015-10-20 08:42:21.000000000","message":"You should also configured primary array which is used to failback","commit_id":"37030dd083a00d191a40c5d1294d568bdc294339"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"7f352081086c7c622969b8bed6c2d0dadcea87ce","unresolved":false,"context_lines":[{"line_number":40,"context_line":"volume_driver \u003d cinder.volume.drivers.ibm.storwize_svc.\\"},{"line_number":41,"context_line":"                StorwizeSVCDriver"},{"line_number":42,"context_line":"volume_backend_name \u003d sv2"},{"line_number":43,"context_line":"storwize_svc_volpool_name\u003dcinder_target"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Implements: blueprint ibm-storwize-v2-replication"},{"line_number":46,"context_line":"Change-Id: I2ad5be69b2814d3b974c963828585fa15446d772"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3a29b11f_78d784ed","line":43,"in_reply_to":"3a29b11f_9526e9cc","updated":"2015-10-20 08:54:17.000000000","message":"Do we also use storwize_svc_stretched_cluster_partner for this purpose?","commit_id":"37030dd083a00d191a40c5d1294d568bdc294339"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"24126afd1737b33ce0877f4530315f5ce8730682","unresolved":false,"context_lines":[{"line_number":26,"context_line":"volume_backend_name \u003d sv1"},{"line_number":27,"context_line":"storwize_svc_volpool_name\u003dcinder"},{"line_number":28,"context_line":"storwize_svc_stretched_cluster_partner\u003dcinder_target"},{"line_number":29,"context_line":"replication_device \u003d managed_backend_name:second_host@sv2#sv2,"},{"line_number":30,"context_line":"\t\t     san_ip:192.168.0.12,san_login:admin,"},{"line_number":31,"context_line":"                     san_password:admin"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"fa80f949_03118eac","line":29,"updated":"2015-11-03 16:06:07.000000000","message":"needs remote_device_id. See my other inline comment.","commit_id":"49004b907558385dd3b5663ea83fe4e20eeb662c"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"d555695d49e6f638840e15f91c68f296235f4a49","unresolved":false,"context_lines":[{"line_number":26,"context_line":"volume_backend_name \u003d sv1"},{"line_number":27,"context_line":"storwize_svc_volpool_name\u003dcinder"},{"line_number":28,"context_line":"storwize_svc_stretched_cluster_partner\u003dcinder_target"},{"line_number":29,"context_line":"replication_device \u003d managed_backend_name:second_host@sv2#sv2,"},{"line_number":30,"context_line":"\t\t     san_ip:192.168.0.12,san_login:admin,"},{"line_number":31,"context_line":"                     san_password:admin"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"fa80f949_43354044","line":29,"in_reply_to":"fa80f949_03118eac","updated":"2015-11-04 02:38:01.000000000","message":"Thank you so much.","commit_id":"49004b907558385dd3b5663ea83fe4e20eeb662c"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"f0dbeb129624a0b033787b593c3ab30c71e7c215","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Vincent Hou \u003csbhou@cn.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-11-04 00:09:05 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Storwize: Implement V2 replication capability (managed)"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Both split IO and sync(global mirror and metro mirror) replication"},{"line_number":10,"context_line":"modes are supported in Storwize storage."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"fa80f949_2a03170f","line":7,"updated":"2015-11-04 15:44:34.000000000","message":"The first line should be limited to 50 characters","commit_id":"fbea69f316f0f5f4fcd5c365a8a67bc3713e3784"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"d14da89d3a90d3f29e615933e1a222c8e4529853","unresolved":false,"context_lines":[{"line_number":40,"context_line":"volume_backend_name \u003d sv1"},{"line_number":41,"context_line":"storwize_svc_volpool_name\u003dcinder"},{"line_number":42,"context_line":"replication_device \u003d managed_backend_name:second_host@sv2#sv2,"},{"line_number":43,"context_line":"                     replication_mode:splitio,"},{"line_number":44,"context_line":"                     remote_device_id:svc_id_target,"},{"line_number":45,"context_line":"                     san_ip:192.168.0.11,san_login:admin,"},{"line_number":46,"context_line":"                     san_password:admin,pool_name\u003dcinder_target"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"da85f559_c494cee9","line":43,"updated":"2015-11-13 17:27:43.000000000","message":"Not sure yet what this \"remote_device_id\" would be for this example","commit_id":"116485e06410f00dbb829d265ab3ea3b28fe18f1"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"bd4ac45fd24af90da45e197410556cbcc7242540","unresolved":false,"context_lines":[{"line_number":40,"context_line":"volume_backend_name \u003d sv1"},{"line_number":41,"context_line":"storwize_svc_volpool_name\u003dcinder"},{"line_number":42,"context_line":"replication_device \u003d managed_backend_name:second_host@sv2#sv2,"},{"line_number":43,"context_line":"                     replication_mode:splitio,"},{"line_number":44,"context_line":"                     remote_device_id:svc_id_target,"},{"line_number":45,"context_line":"                     san_ip:192.168.0.11,san_login:admin,"},{"line_number":46,"context_line":"                     san_password:admin,pool_name\u003dcinder_target"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"da85f559_c5dfbf38","line":43,"in_reply_to":"da85f559_c494cee9","updated":"2015-11-16 04:26:45.000000000","message":"remote_device_id:svc_id_target\n\nThe remote_device_id is used to give a specific id to the storwize device. It can be named by the admins. Each remote storage device is supposed to have one.\n\nWhen admins are issuing the replication_failover commands, they need to specify a param named secondary. This parameter need to match the remote_device_id defined in cinder.conf, in order to direct cinder to find the correct remote device to fail over to.","commit_id":"116485e06410f00dbb829d265ab3ea3b28fe18f1"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"d14da89d3a90d3f29e615933e1a222c8e4529853","unresolved":false,"context_lines":[{"line_number":42,"context_line":"replication_device \u003d managed_backend_name:second_host@sv2#sv2,"},{"line_number":43,"context_line":"                     replication_mode:splitio,"},{"line_number":44,"context_line":"                     remote_device_id:svc_id_target,"},{"line_number":45,"context_line":"                     san_ip:192.168.0.11,san_login:admin,"},{"line_number":46,"context_line":"                     san_password:admin,pool_name\u003dcinder_target"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Options to be put in cinder.conf, where the secondary"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"da85f559_e499d220","line":45,"updated":"2015-11-13 17:27:43.000000000","message":"should be \u0027pool_name:cinder_target\u0027","commit_id":"116485e06410f00dbb829d265ab3ea3b28fe18f1"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"c63bff4cc80f54a04df314de9793e15b18816a3b","unresolved":false,"context_lines":[{"line_number":70,"context_line":"volume_driver \u003d cinder.volume.drivers.ibm.storwize_svc.\\"},{"line_number":71,"context_line":"                StorwizeSVCDriver"},{"line_number":72,"context_line":"volume_backend_name \u003d sv2"},{"line_number":73,"context_line":"storwize_svc_volpool_name\u003dcinder_target"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"From the configuration example above, we can see that the"},{"line_number":76,"context_line":"san_ip is the same for both sv1 and sv2. The only difference"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"ba8a016a_02333a15","line":73,"updated":"2015-11-18 20:15:02.000000000","message":"Would this also need a \"remote_device_id\" defined?","commit_id":"6d031791d1b342aa715806ab3265e45a4dc1f9a8"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"1edb553a6b2f52cb47c64590d96ee14a8ac150d6","unresolved":false,"context_lines":[{"line_number":70,"context_line":"volume_driver \u003d cinder.volume.drivers.ibm.storwize_svc.\\"},{"line_number":71,"context_line":"                StorwizeSVCDriver"},{"line_number":72,"context_line":"volume_backend_name \u003d sv2"},{"line_number":73,"context_line":"storwize_svc_volpool_name\u003dcinder_target"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"From the configuration example above, we can see that the"},{"line_number":76,"context_line":"san_ip is the same for both sv1 and sv2. The only difference"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"ba8a016a_f419777a","line":73,"in_reply_to":"ba8a016a_02333a15","updated":"2015-11-23 03:51:31.000000000","message":"Actually no. \n\nThis is the just the example of the the configuration, if the target storwize pool is also connected to cinder volume as a back-end.","commit_id":"6d031791d1b342aa715806ab3265e45a4dc1f9a8"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"237c6a1e79a76145c9fa169ba41d987ac6fb0ce9","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Storwize supports three major types for volume replications:"},{"line_number":10,"context_line":"split IO, global mirror and metro mirror."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This patch is dedicated to implement the replication for"},{"line_number":13,"context_line":"the mode of splitio (stretched cluster). The existing"},{"line_number":14,"context_line":"unmanaged back-end does not apply to this mode, because"},{"line_number":15,"context_line":"the volume is decided to save 2 copies in this mode and"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":46,"id":"5a710552_6ae4ee3a","line":12,"updated":"2015-12-14 21:05:21.000000000","message":"Can you add the note here about what you are calling the source and target.  That would have made some of this less confusing.","commit_id":"67e3c9b147def7786fa0a63fc6109651d539ec90"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"bb594554f5f179d29635e5f6145c01dd9765bc89","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Storwize supports three major types for volume replications:"},{"line_number":10,"context_line":"split IO, global mirror and metro mirror."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This patch is dedicated to implement the replication for"},{"line_number":13,"context_line":"the mode of splitio (stretched cluster). The existing"},{"line_number":14,"context_line":"unmanaged back-end does not apply to this mode, because"},{"line_number":15,"context_line":"the volume is decided to save 2 copies in this mode and"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":46,"id":"5a710552_2449318c","line":12,"in_reply_to":"5a710552_6ae4ee3a","updated":"2015-12-15 05:50:21.000000000","message":"I will used different words, like primary and replica, to replace source and target. I guess I am sticking to migration too much.","commit_id":"67e3c9b147def7786fa0a63fc6109651d539ec90"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"eebb51666eaab00afe0459ba3597fc73336b3fca","unresolved":false,"context_lines":[{"line_number":14,"context_line":"unmanaged back-end does not apply to this mode, because"},{"line_number":15,"context_line":"the volume is decided to save 2 copies in this mode and"},{"line_number":16,"context_line":"it is always managed by Cinder. For this mode, volume is"},{"line_number":17,"context_line":"replicable when the replication target is on the same SVC"},{"line_number":18,"context_line":"storage as the replication source. Multiple configuration"},{"line_number":19,"context_line":"for replication_device is not applicable. The option"},{"line_number":20,"context_line":"replication_device can only be set with a single dict for"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":46,"id":"5a710552_b6248eaf","line":17,"updated":"2015-12-14 20:34:54.000000000","message":"replicable -\u003e replicatable","commit_id":"67e3c9b147def7786fa0a63fc6109651d539ec90"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"eebb51666eaab00afe0459ba3597fc73336b3fca","unresolved":false,"context_lines":[{"line_number":24,"context_line":"For a volume to be created with a valid replication type,"},{"line_number":25,"context_line":"the necessary replication setup will be done during the volume"},{"line_number":26,"context_line":"creation. However, the admin still needs to use replication"},{"line_number":27,"context_line":"enable to change to the replication_status of the volume"},{"line_number":28,"context_line":"into enabled."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"The volume type needs to associate with the extra spec"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":46,"id":"5a710552_7665c6df","line":27,"updated":"2015-12-14 20:34:54.000000000","message":"\u0027replication enable command\u0027 ?","commit_id":"67e3c9b147def7786fa0a63fc6109651d539ec90"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"bb594554f5f179d29635e5f6145c01dd9765bc89","unresolved":false,"context_lines":[{"line_number":24,"context_line":"For a volume to be created with a valid replication type,"},{"line_number":25,"context_line":"the necessary replication setup will be done during the volume"},{"line_number":26,"context_line":"creation. However, the admin still needs to use replication"},{"line_number":27,"context_line":"enable to change to the replication_status of the volume"},{"line_number":28,"context_line":"into enabled."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"The volume type needs to associate with the extra spec"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":46,"id":"5a710552_a748c35c","line":27,"in_reply_to":"5a710552_7665c6df","updated":"2015-12-15 05:50:21.000000000","message":"I have changed the code behavior. This description won\u0027t apply any longer.","commit_id":"67e3c9b147def7786fa0a63fc6109651d539ec90"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"eebb51666eaab00afe0459ba3597fc73336b3fca","unresolved":false,"context_lines":[{"line_number":46,"context_line":"* volume retype"},{"line_number":47,"context_line":"The target volume will not be created or moved after migration"},{"line_number":48,"context_line":"or retype. It is not suggested to retype from a replication"},{"line_number":49,"context_line":"type to a non replication type or vice versa."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"The replication can be configured via either multi-backend"},{"line_number":52,"context_line":"on one host, or on seperate hosts."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":46,"id":"5a710552_f67d36e8","line":49,"updated":"2015-12-14 20:34:54.000000000","message":"This paragraph is very confusing.  Let me suggest the following:\n\nThe replica volume will not be created or moved after migration or retype of a replicated volume.  Users should be aware, when migrating to a type with replication enabled, that a replica will not be automatically created.\n\nIs this what you were trying to say?","commit_id":"67e3c9b147def7786fa0a63fc6109651d539ec90"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"eebb51666eaab00afe0459ba3597fc73336b3fca","unresolved":false,"context_lines":[{"line_number":49,"context_line":"type to a non replication type or vice versa."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"The replication can be configured via either multi-backend"},{"line_number":52,"context_line":"on one host, or on seperate hosts."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"Options to be put in cinder.conf, where the primary back-end"},{"line_number":55,"context_line":"is located:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":46,"id":"5a710552_761dc60e","line":52,"updated":"2015-12-14 20:34:54.000000000","message":"seperate -\u003e separate ... \n\nCan you do splitio between separate hosts?","commit_id":"67e3c9b147def7786fa0a63fc6109651d539ec90"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"bb594554f5f179d29635e5f6145c01dd9765bc89","unresolved":false,"context_lines":[{"line_number":49,"context_line":"type to a non replication type or vice versa."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"The replication can be configured via either multi-backend"},{"line_number":52,"context_line":"on one host, or on seperate hosts."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"Options to be put in cinder.conf, where the primary back-end"},{"line_number":55,"context_line":"is located:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":46,"id":"5a710552_649ad916","line":52,"in_reply_to":"5a710552_761dc60e","updated":"2015-12-15 05:50:21.000000000","message":"The host here means cinder volume node.\n\nThis mode only applies to the same storwize cluster.\nThe primary and replica must be located at the same storwize back-end, but different pools.","commit_id":"67e3c9b147def7786fa0a63fc6109651d539ec90"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"eebb51666eaab00afe0459ba3597fc73336b3fca","unresolved":false,"context_lines":[{"line_number":54,"context_line":"Options to be put in cinder.conf, where the primary back-end"},{"line_number":55,"context_line":"is located:"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"enabled_backends \u003d sv1, sv2 (if enabling multi-backends)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"[sv1]"},{"line_number":60,"context_line":"san_login \u003d admin"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":46,"id":"5a710552_56e76a12","line":57,"updated":"2015-12-14 20:34:54.000000000","message":"multi-backends -\u003e multiple backends","commit_id":"67e3c9b147def7786fa0a63fc6109651d539ec90"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"bb594554f5f179d29635e5f6145c01dd9765bc89","unresolved":false,"context_lines":[{"line_number":54,"context_line":"Options to be put in cinder.conf, where the primary back-end"},{"line_number":55,"context_line":"is located:"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"enabled_backends \u003d sv1, sv2 (if enabling multi-backends)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"[sv1]"},{"line_number":60,"context_line":"san_login \u003d admin"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":46,"id":"5a710552_c4b06d8e","line":57,"in_reply_to":"5a710552_56e76a12","updated":"2015-12-15 05:50:21.000000000","message":"Done","commit_id":"67e3c9b147def7786fa0a63fc6109651d539ec90"}],"cinder/tests/unit/test_storwize_svc.py":[{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"d2536eea424da74dc3d51a8493c66a1c8b8104c6","unresolved":false,"context_lines":[{"line_number":3812,"context_line":""},{"line_number":3813,"context_line":"class StorwizeSVCReplicationStretchedClusterTestCase(test.TestCase):"},{"line_number":3814,"context_line":"    def setUp(self):"},{"line_number":3815,"context_line":"        super(StorwizeHelpersTestCase, self).setUp()"},{"line_number":3816,"context_line":"        self.svc_driver \u003d storwize_svc.StorwizeSVCDriver("},{"line_number":3817,"context_line":"            configuration\u003dconf.Configuration(None))"},{"line_number":3818,"context_line":"        self.driver \u003d storwize_rep.StorwizeSVCReplicationStretchedCluster("}],"source_content_type":"text/x-python","patch_set":17,"id":"da85f559_d245b06e","line":3815,"updated":"2015-11-12 16:24:00.000000000","message":"It looks like it wants: super(StorwizeSVCReplicationStretchedClusterTestCase, self).setUp()","commit_id":"116485e06410f00dbb829d265ab3ea3b28fe18f1"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"c63bff4cc80f54a04df314de9793e15b18816a3b","unresolved":false,"context_lines":[{"line_number":3273,"context_line":"                               \"pool_name\": \"cinder_target\"}]"},{"line_number":3274,"context_line":"        self._set_flag(\u0027replication_device\u0027, replication_device)"},{"line_number":3275,"context_line":"        self._set_flag(\u0027san_ip\u0027, san_ip)"},{"line_number":3276,"context_line":""},{"line_number":3277,"context_line":"    def _replication_v2_volume_prepare(self):"},{"line_number":3278,"context_line":"        self._setup_replication_v2_config(\u0027splitio\u0027)"},{"line_number":3279,"context_line":"        volume \u003d self._create_replication_v2_volume()"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba8a016a_826f2a2a","line":3276,"updated":"2015-11-18 20:15:02.000000000","message":"Should we give option to pass in rep_type here as well (or change the name of this test method)?  Also would it make sense to move these tests into StorwizeSVCReplicationStretchedClusterTestCase, since they are explicitly testing that form of replicaiton?","commit_id":"6d031791d1b342aa715806ab3265e45a4dc1f9a8"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"1edb553a6b2f52cb47c64590d96ee14a8ac150d6","unresolved":false,"context_lines":[{"line_number":3273,"context_line":"                               \"pool_name\": \"cinder_target\"}]"},{"line_number":3274,"context_line":"        self._set_flag(\u0027replication_device\u0027, replication_device)"},{"line_number":3275,"context_line":"        self._set_flag(\u0027san_ip\u0027, san_ip)"},{"line_number":3276,"context_line":""},{"line_number":3277,"context_line":"    def _replication_v2_volume_prepare(self):"},{"line_number":3278,"context_line":"        self._setup_replication_v2_config(\u0027splitio\u0027)"},{"line_number":3279,"context_line":"        volume \u003d self._create_replication_v2_volume()"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba8a016a_74d587b7","line":3276,"in_reply_to":"ba8a016a_826f2a2a","updated":"2015-11-23 03:51:31.000000000","message":"That looks like a better structure. I will move it.","commit_id":"6d031791d1b342aa715806ab3265e45a4dc1f9a8"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"c63bff4cc80f54a04df314de9793e15b18816a3b","unresolved":false,"context_lines":[{"line_number":3971,"context_line":"                        \u0027volume_id\u0027: self.volume[\u0027id\u0027]}"},{"line_number":3972,"context_line":"        targets \u003d self.driver.list_replication_targets(self.ctxt,"},{"line_number":3973,"context_line":"                                                       self.volume)"},{"line_number":3974,"context_line":"        self.assertEqual(fake_targets, targets)"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba8a016a_82608a02","line":3974,"updated":"2015-11-18 20:15:02.000000000","message":"May be nice to add a negative test for setup error if pass in different san_ip for device and replication_targets","commit_id":"6d031791d1b342aa715806ab3265e45a4dc1f9a8"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"1edb553a6b2f52cb47c64590d96ee14a8ac150d6","unresolved":false,"context_lines":[{"line_number":3971,"context_line":"                        \u0027volume_id\u0027: self.volume[\u0027id\u0027]}"},{"line_number":3972,"context_line":"        targets \u003d self.driver.list_replication_targets(self.ctxt,"},{"line_number":3973,"context_line":"                                                       self.volume)"},{"line_number":3974,"context_line":"        self.assertEqual(fake_targets, targets)"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba8a016a_34d85fef","line":3974,"in_reply_to":"ba8a016a_82608a02","updated":"2015-11-23 03:51:31.000000000","message":"I will add more here.","commit_id":"6d031791d1b342aa715806ab3265e45a4dc1f9a8"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"1b6ccc9f79f0a9c160bf4bda16e30ad5dd3594b2","unresolved":false,"context_lines":[{"line_number":3857,"context_line":""},{"line_number":3858,"context_line":"    @mock.patch.object(storwize_rep.StorwizeSVCReplicationStretchedCluster,"},{"line_number":3859,"context_line":"                       \u0027list_replication_targets\u0027)"},{"line_number":3860,"context_line":"    def test_storwize_list_replication_targets(self, list_targets):"},{"line_number":3861,"context_line":"        fake_targets \u003d [{\"managed_backend_name\": \"second_host@sv2#sv2\","},{"line_number":3862,"context_line":"                         \"type\": \"managed\","},{"line_number":3863,"context_line":"                         \"target_device_id\": \"svc_id_target\","}],"source_content_type":"text/x-python","patch_set":38,"id":"9a8ffd7b_5056f35c","line":3860,"updated":"2015-12-02 17:45:35.000000000","message":"Shouldn\u0027t this only be returning \"target_device_id\" to be inline with what that function now does?","commit_id":"5064b681d78e8f44e708875524efc20417238a37"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"323a96c11ad7da57874e7ddc3e332fcfd3edf737","unresolved":false,"context_lines":[{"line_number":3857,"context_line":""},{"line_number":3858,"context_line":"    @mock.patch.object(storwize_rep.StorwizeSVCReplicationStretchedCluster,"},{"line_number":3859,"context_line":"                       \u0027list_replication_targets\u0027)"},{"line_number":3860,"context_line":"    def test_storwize_list_replication_targets(self, list_targets):"},{"line_number":3861,"context_line":"        fake_targets \u003d [{\"managed_backend_name\": \"second_host@sv2#sv2\","},{"line_number":3862,"context_line":"                         \"type\": \"managed\","},{"line_number":3863,"context_line":"                         \"target_device_id\": \"svc_id_target\","}],"source_content_type":"text/x-python","patch_set":38,"id":"7a740942_1bce7d5a","line":3860,"in_reply_to":"9a8ffd7b_1ecdd530","updated":"2015-12-07 06:00:42.000000000","message":"I will change the fake_targets here.\nAs you can see there is another list_replication_target test within this class, dedicated to check the list_replication_target in StorwizeSVCReplicationStretchedCluster","commit_id":"5064b681d78e8f44e708875524efc20417238a37"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"c46faf93fb20d67a6e207882488116562224d584","unresolved":false,"context_lines":[{"line_number":3857,"context_line":""},{"line_number":3858,"context_line":"    @mock.patch.object(storwize_rep.StorwizeSVCReplicationStretchedCluster,"},{"line_number":3859,"context_line":"                       \u0027list_replication_targets\u0027)"},{"line_number":3860,"context_line":"    def test_storwize_list_replication_targets(self, list_targets):"},{"line_number":3861,"context_line":"        fake_targets \u003d [{\"managed_backend_name\": \"second_host@sv2#sv2\","},{"line_number":3862,"context_line":"                         \"type\": \"managed\","},{"line_number":3863,"context_line":"                         \"target_device_id\": \"svc_id_target\","}],"source_content_type":"text/x-python","patch_set":38,"id":"9a8ffd7b_1ecdd530","line":3860,"in_reply_to":"9a8ffd7b_5056f35c","updated":"2015-12-02 19:48:39.000000000","message":"Yes, it definitely should. All other values returned are completely ignored. It\u0027s probably not a good idea to mock the return value of list_replication_targets and then compare it to the value you set it to...","commit_id":"5064b681d78e8f44e708875524efc20417238a37"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"1cbf69b0ce50f888cdc4839392ef51bccda7672e","unresolved":false,"context_lines":[{"line_number":3862,"context_line":"                         \u0027mdisk_grp_name\u0027: \u0027openstack\u0027,"},{"line_number":3863,"context_line":"                         \u0027replication_status\u0027: \u0027disabled\u0027,"},{"line_number":3864,"context_line":"                         \u0027replication_extended_status\u0027: None,"},{"line_number":3865,"context_line":"                         \u0027volume_metadata\u0027: None}"},{"line_number":3866,"context_line":"        target_volume[\u0027volume_type_id\u0027] \u003d self.replication_type[\u0027id\u0027]"},{"line_number":3867,"context_line":"        target_volume[\u0027volume_type\u0027] \u003d self.replication_type"},{"line_number":3868,"context_line":"        model_update \u003d self.svc_driver.create_cloned_volume("}],"source_content_type":"text/x-python","patch_set":42,"id":"7a740942_c152cd66","line":3865,"updated":"2015-12-09 00:22:16.000000000","message":"Could be setting these next two values as part of dict definition","commit_id":"693be3c63bb25d3f5ffda10fdbd8a557c917c3e7"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"a60715fb0e04ca89b1dbbebbe2e64002f435f023","unresolved":false,"context_lines":[{"line_number":3777,"context_line":"                       \u0027volume_metadata\u0027: None}"},{"line_number":3778,"context_line":"        spec \u003d {\u0027replication_enabled\u0027: \u0027\u003cis\u003e True\u0027,"},{"line_number":3779,"context_line":"                \u0027replication_type\u0027: extra_spec_rep_type}"},{"line_number":3780,"context_line":"        type_ref \u003d volume_types.create(self.ctxt, \"replication\", spec)"},{"line_number":3781,"context_line":"        self.replication_type \u003d volume_types.get_volume_type(self.ctxt,"},{"line_number":3782,"context_line":"                                                             type_ref[\u0027id\u0027])"},{"line_number":3783,"context_line":"        self.volume[\u0027volume_type_id\u0027] \u003d self.replication_type[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":43,"id":"7a740942_0b11a7af","line":3780,"updated":"2015-12-09 17:26:34.000000000","message":"If we do another spin of this, seems like a better name for \"replciation_type\" could be \"vol_type_with_rep_enabled\" or something like that since replication_type makes me think of splitio","commit_id":"a84fe78db34426940725a7fd5f607cc924df953b"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"a60715fb0e04ca89b1dbbebbe2e64002f435f023","unresolved":false,"context_lines":[{"line_number":3862,"context_line":"                         \u0027mdisk_grp_name\u0027: \u0027openstack\u0027,"},{"line_number":3863,"context_line":"                         \u0027replication_status\u0027: \u0027disabled\u0027,"},{"line_number":3864,"context_line":"                         \u0027replication_extended_status\u0027: None,"},{"line_number":3865,"context_line":"                         \u0027volume_metadata\u0027: None}"},{"line_number":3866,"context_line":"        target_volume[\u0027volume_type_id\u0027] \u003d self.replication_type[\u0027id\u0027]"},{"line_number":3867,"context_line":"        target_volume[\u0027volume_type\u0027] \u003d self.replication_type"},{"line_number":3868,"context_line":"        model_update \u003d self.svc_driver.create_cloned_volume("}],"source_content_type":"text/x-python","patch_set":43,"id":"7a740942_6b8f0bcd","line":3865,"updated":"2015-12-09 17:26:34.000000000","message":"Could be setting these next two values as part of dict definition","commit_id":"a84fe78db34426940725a7fd5f607cc924df953b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5c98518c24aade53e29b69c3a0af288a1035eda2","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import random"},{"line_number":22,"context_line":"import re"},{"line_number":23,"context_line":"import six"},{"line_number":24,"context_line":"import time"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"import mock"}],"source_content_type":"text/x-python","patch_set":57,"id":"fa69d971_c371cc45","line":23,"updated":"2016-01-04 23:21:10.000000000","message":"This \"import six\" should be removed.  It\u0027s imported on line 30 which is the right location.","commit_id":"cd77830208d8ff5b6c42aa09cb5544037ffa6075"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ea49bba20459ee879658e05c0cabd9b45cac5d64","unresolved":false,"context_lines":[{"line_number":4396,"context_line":"        self.svc_driver.replications[rep_type] \u003d ("},{"line_number":4397,"context_line":"            self.svc_driver.replication_factory(rep_type, fake_target))"},{"line_number":4398,"context_line":"        self.ctxt \u003d context.get_admin_context()"},{"line_number":4399,"context_line":"        rand_id \u003d str(uuid.uuid4())"},{"line_number":4400,"context_line":"        self.volume \u003d {\u0027name\u0027: \u0027volume-%s\u0027 % rand_id,"},{"line_number":4401,"context_line":"                       \u0027size\u0027: 10, \u0027id\u0027: \u0027%s\u0027 % rand_id,"},{"line_number":4402,"context_line":"                       \u0027volume_type_id\u0027: None,"}],"source_content_type":"text/x-python","patch_set":64,"id":"5a5ae5dd_7691f998","line":4399,"updated":"2016-02-04 04:36:52.000000000","message":"s/str/six.text_type","commit_id":"b6d01d6d7c6bfbfbe1f50491f96fb30f9a5f98b7"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"877a563d2ea53d9983905f6b6b33b50ec0d0289b","unresolved":false,"context_lines":[{"line_number":4386,"context_line":"                       \"san_login\": \"admin\","},{"line_number":4387,"context_line":"                       \"san_password\": \"admin\","},{"line_number":4388,"context_line":"                       \"pool_name\": \"cinder_target\"}"},{"line_number":4389,"context_line":"        self.fake_targets \u003d [fake_target]"},{"line_number":4390,"context_line":"        self.driver \u003d storwize_rep.StorwizeSVCReplicationGlobalMirror("},{"line_number":4391,"context_line":"            self.svc_driver, fake_target, storwize_svc_common.StorwizeHelpers)"},{"line_number":4392,"context_line":"        self.svc_driver.configuration.set_override(\u0027replication_device\u0027,"}],"source_content_type":"text/x-python","patch_set":65,"id":"5a5ae5dd_67fb1dc2","line":4389,"updated":"2016-02-05 21:58:30.000000000","message":"Do we have any coverage on the MetroMirror driver?  I know they\u0027re super similar behavior, but could we do something to maybe use ddt for the driver so we at least flex the muscles for Global and Metro Mirror?\n\nJust spitballing...","commit_id":"172916824314290f100031954cdf1db750749c20"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"668ffbdfc8b5be0837ca27d4a7574604119227fc","unresolved":false,"context_lines":[{"line_number":3199,"context_line":"        get_relationship.return_value \u003d {\u0027aux_vdisk_name\u0027: fake_target_vol}"},{"line_number":3200,"context_line":"        with mock.patch.object("},{"line_number":3201,"context_line":"                self.driver,"},{"line_number":3202,"context_line":"                \u0027_get_volume_replicated_type_mirror\u0027) as mirror_type:"},{"line_number":3203,"context_line":"            mirror_type.return_value \u003d \u0027global\u0027"},{"line_number":3204,"context_line":"            self.driver.extend_volume(volume, \u002713\u0027)"},{"line_number":3205,"context_line":"            attrs \u003d self.driver._helpers.get_vdisk_attributes(volume[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":68,"id":"3a57f1b5_597c6f20","line":3202,"updated":"2016-02-09 20:39:18.000000000","message":"No need to change for this patch, but IMO this should still be rep_type not \u0027global\u0027","commit_id":"05f8a52301eb5f079f7bb01eed9b3695be837f4f"}],"cinder/volume/drivers/ibm/storwize_svc/__init__.py":[{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"8c9a8240924409662eafc651241cf27d7021bc0c","unresolved":false,"context_lines":[{"line_number":186,"context_line":"                       \u0027system_id\u0027: None,"},{"line_number":187,"context_line":"                       \u0027code_level\u0027: None,"},{"line_number":188,"context_line":"                       }"},{"line_number":189,"context_line":"        "},{"line_number":190,"context_line":"        self._replication_targets \u003d []"},{"line_number":191,"context_line":"        self._replication_enabled \u003d False"},{"line_number":192,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa80f949_0ab733d9","line":189,"updated":"2015-11-04 15:58:13.000000000","message":"white space errors","commit_id":"fbea69f316f0f5f4fcd5c365a8a67bc3713e3784"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"8c9a8240924409662eafc651241cf27d7021bc0c","unresolved":false,"context_lines":[{"line_number":1262,"context_line":"                                                      snapshots))"},{"line_number":1263,"context_line":""},{"line_number":1264,"context_line":"        return model_update, snapshots_model"},{"line_number":1265,"context_line":""},{"line_number":1266,"context_line":"    def _update_volume_stats(self):"},{"line_number":1267,"context_line":"        \"\"\"Retrieve stats info from volume group.\"\"\""},{"line_number":1268,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa80f949_4a21bbfa","line":1265,"updated":"2015-11-04 15:58:13.000000000","message":"I know this is still WIP, but eventually you will want to report if replication is enabled here. \n\nreplication_enabled,\nreplication_type    (your supported modes),\nreplication_count  (number of targets)","commit_id":"fbea69f316f0f5f4fcd5c365a8a67bc3713e3784"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"06c273e3c3fbe95512ae51c5892a7274d3f37839","unresolved":false,"context_lines":[{"line_number":921,"context_line":""},{"line_number":922,"context_line":"            self.replication \u003d ("},{"line_number":923,"context_line":"                storwize_rep.StorwizeSVCReplication.factory(self,"},{"line_number":924,"context_line":"                    remote_array[\u0027replication_mode\u0027]))"},{"line_number":925,"context_line":"            self.replication._replication_targets \u003d self._replication_targets"},{"line_number":926,"context_line":"            self._replication_enabled \u003d True"},{"line_number":927,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"fa80f949_642fb288","line":924,"updated":"2015-11-06 15:26:27.000000000","message":"improperly indented","commit_id":"9245bb344dbf76432bfac82d2eafc18c9deae46c"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"e9c740447b39873665fd50b3f3aee7ed3f5888df","unresolved":false,"context_lines":[{"line_number":115,"context_line":"               help\u003d\u0027If operating in stretched cluster mode, specify the \u0027"},{"line_number":116,"context_line":"                    \u0027name of the pool in which mirrored copies are stored.\u0027"},{"line_number":117,"context_line":"                    \u0027Example: \"pool2\"\u0027),"},{"line_number":118,"context_line":"    cfg.StrOpt(\u0027storwize_svc_replication_type\u0027,"},{"line_number":119,"context_line":"               default\u003d\u0027splitio\u0027,"},{"line_number":120,"context_line":"               help\u003d\u0027Indicate the replication type for Storwize storage. \u0027"},{"line_number":121,"context_line":"                    \u0027There are three replication types supported by \u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"da85f559_34478c78","line":118,"updated":"2015-11-11 16:56:42.000000000","message":"Would this be better an a extra_spec value so the entire driver instance isn\u0027t contained to one single mode?","commit_id":"c857fb3896221b28346e4d369eedb62105e8f66e"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"3438b4ca162d664ace87006d2d24c35b68f3d5eb","unresolved":false,"context_lines":[{"line_number":115,"context_line":"               help\u003d\u0027If operating in stretched cluster mode, specify the \u0027"},{"line_number":116,"context_line":"                    \u0027name of the pool in which mirrored copies are stored.\u0027"},{"line_number":117,"context_line":"                    \u0027Example: \"pool2\"\u0027),"},{"line_number":118,"context_line":"    cfg.StrOpt(\u0027storwize_svc_replication_type\u0027,"},{"line_number":119,"context_line":"               default\u003d\u0027splitio\u0027,"},{"line_number":120,"context_line":"               help\u003d\u0027Indicate the replication type for Storwize storage. \u0027"},{"line_number":121,"context_line":"                    \u0027There are three replication types supported by \u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"da85f559_112fdfa1","line":118,"in_reply_to":"da85f559_34478c78","updated":"2015-11-12 03:07:11.000000000","message":"Thank you for this comment. I am just figuring what works better than this.","commit_id":"c857fb3896221b28346e4d369eedb62105e8f66e"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"e9c740447b39873665fd50b3f3aee7ed3f5888df","unresolved":false,"context_lines":[{"line_number":591,"context_line":"            ctxt \u003d context.get_admin_context()"},{"line_number":592,"context_line":"            model_update \u003d self.replication.create_replica(ctxt, volume)"},{"line_number":593,"context_line":"        if self._is_volume_of_replicated_type(volume):"},{"line_number":594,"context_line":"            model_update \u003d self.replication.replication_enable(ctxt, volume)"},{"line_number":595,"context_line":"        return model_update"},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"    def delete_volume(self, volume):"}],"source_content_type":"text/x-python","patch_set":14,"id":"da85f559_ff6b1db7","line":594,"updated":"2015-11-11 16:56:42.000000000","message":"I think setting up volume replication on volume create should be different than replication_enable. The reason being replication_enable is callable via the admin API and will probably be used differently than the initial volume replication setup.","commit_id":"c857fb3896221b28346e4d369eedb62105e8f66e"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"44309a34122090022e683b5697863821050d6397","unresolved":false,"context_lines":[{"line_number":156,"context_line":"    VERSION \u003d \"1.3.4\""},{"line_number":157,"context_line":"    VDISKCOPYOPS_INTERVAL \u003d 600"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    SPLITIO \u003d \u0027splitio\u0027"},{"line_number":160,"context_line":"    VALID_REP_TYPES \u003d (SPLITIO)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    def __init__(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":17,"id":"da85f559_d59f9ab2","line":159,"updated":"2015-11-13 17:36:49.000000000","message":"need to add comma at end of the tuple otherwise VALID_REP_TYPES will just be a string","commit_id":"116485e06410f00dbb829d265ab3ea3b28fe18f1"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"d14da89d3a90d3f29e615933e1a222c8e4529853","unresolved":false,"context_lines":[{"line_number":903,"context_line":"                remote_array[\u0027san_login\u0027] \u003d ("},{"line_number":904,"context_line":"                    dev.get(\u0027san_login\u0027))"},{"line_number":905,"context_line":"                remote_array[\u0027san_password\u0027] \u003d ("},{"line_number":906,"context_line":"                    dev.get(\u0027san_password\u0027))"},{"line_number":907,"context_line":"                remote_array[\u0027pool_name\u0027] \u003d ("},{"line_number":908,"context_line":"                    dev.get(\u0027pool_name\u0027))"},{"line_number":909,"context_line":"                replication_targets.append(remote_array)"}],"source_content_type":"text/x-python","patch_set":17,"id":"da85f559_e4f2326f","line":906,"updated":"2015-11-13 17:27:43.000000000","message":"Would it matter if the \"pool_name\" we defined in the replication_device for svc1 is different than what svc2 has defined in it\u0027s section of cinder.conf:\n\n[svc2]\nstorwize_svc_volpool_name \u003d some_other_pool\n\n\nLogically I can\u0027t think of a reason this would cause issues, it\u0027s just strange because at that point it\u0027s almost a partially managed backend (since it\u0027s replicating to a different pool)","commit_id":"116485e06410f00dbb829d265ab3ea3b28fe18f1"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"d14da89d3a90d3f29e615933e1a222c8e4529853","unresolved":false,"context_lines":[{"line_number":913,"context_line":"            self.do_setup_replications()"},{"line_number":914,"context_line":""},{"line_number":915,"context_line":"    def do_setup_replications(self):"},{"line_number":916,"context_line":"        for rep_type in self.VALID_REP_TYPES:"},{"line_number":917,"context_line":"            self.replications[type] \u003d self.replication_factory(rep_type)"},{"line_number":918,"context_line":""},{"line_number":919,"context_line":"    def replication_factory(self, replication_type):"}],"source_content_type":"text/x-python","patch_set":17,"id":"da85f559_ca9ff5b2","line":916,"updated":"2015-11-13 17:27:43.000000000","message":"Issue here - \"type\" not defined, should be \"rep_type\"","commit_id":"116485e06410f00dbb829d265ab3ea3b28fe18f1"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"0baecf9b92e2bb25b66388d630be63087110a3c2","unresolved":false,"context_lines":[{"line_number":157,"context_line":"    VDISKCOPYOPS_INTERVAL \u003d 600"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    SPLITIO \u003d \u0027splitio\u0027"},{"line_number":160,"context_line":"    VALID_REP_TYPES \u003d (SPLITIO,)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":163,"context_line":"        super(StorwizeSVCDriver, self).__init__(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba8a016a_ab39e9d8","line":160,"updated":"2015-11-18 21:14:55.000000000","message":"extra comma?","commit_id":"6d031791d1b342aa715806ab3265e45a4dc1f9a8"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"1edb553a6b2f52cb47c64590d96ee14a8ac150d6","unresolved":false,"context_lines":[{"line_number":157,"context_line":"    VDISKCOPYOPS_INTERVAL \u003d 600"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    SPLITIO \u003d \u0027splitio\u0027"},{"line_number":160,"context_line":"    VALID_REP_TYPES \u003d (SPLITIO,)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":163,"context_line":"        super(StorwizeSVCDriver, self).__init__(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba8a016a_14543b52","line":160,"in_reply_to":"ba8a016a_ab39e9d8","updated":"2015-11-23 03:51:31.000000000","message":"The comma is necessary.\nOtherwise VALID_REP_TYPES will become a str, not a tuple.","commit_id":"6d031791d1b342aa715806ab3265e45a4dc1f9a8"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"0baecf9b92e2bb25b66388d630be63087110a3c2","unresolved":false,"context_lines":[{"line_number":593,"context_line":"            self.replications.get(rep_type).volume_replication_setup(ctxt,"},{"line_number":594,"context_line":"                                                                     volume,"},{"line_number":595,"context_line":"                                                                     rep_type)"},{"line_number":596,"context_line":"        elif \u0027replication\u0027 in opts and opts[\u0027replication\u0027]:"},{"line_number":597,"context_line":"            model_update \u003d self.replication.create_replica(ctxt, volume)"},{"line_number":598,"context_line":"        return model_update"},{"line_number":599,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"ba8a016a_cbb1cd02","line":596,"updated":"2015-11-18 21:14:55.000000000","message":"Could consolidate to: if opts.get(\u0027replication\u0027):","commit_id":"6d031791d1b342aa715806ab3265e45a4dc1f9a8"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"c63bff4cc80f54a04df314de9793e15b18816a3b","unresolved":false,"context_lines":[{"line_number":815,"context_line":""},{"line_number":816,"context_line":"    # #### V2 replication methods #### #"},{"line_number":817,"context_line":"    def replication_enable(self, context, vref):"},{"line_number":818,"context_line":"        \"\"\"Enable replication on a replication capable volume.\"\"\""},{"line_number":819,"context_line":"        volume_type \u003d self._get_volume_replicated_type(context, vref)"},{"line_number":820,"context_line":"        if not volume_type:"},{"line_number":821,"context_line":"            msg \u003d _(\"Unable to enable volume replication because volume is \""}],"source_content_type":"text/x-python","patch_set":23,"id":"ba8a016a_fc649d22","line":818,"updated":"2015-11-18 20:15:02.000000000","message":"Could consider pushing this logic of throwing an error if the volume is not of a replicated type down into _get_volume_replicated_type","commit_id":"6d031791d1b342aa715806ab3265e45a4dc1f9a8"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"0baecf9b92e2bb25b66388d630be63087110a3c2","unresolved":false,"context_lines":[{"line_number":857,"context_line":"                context, vref)"},{"line_number":858,"context_line":""},{"line_number":859,"context_line":"    def _get_volume_replicated_type(self, ctxt, volume):"},{"line_number":860,"context_line":"        replication_type \u003d None"},{"line_number":861,"context_line":"        if volume[\"volume_type_id\"]:"},{"line_number":862,"context_line":"            volume_type \u003d volume_types.get_volume_type("},{"line_number":863,"context_line":"                ctxt, volume[\"volume_type_id\"])"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba8a016a_2b7bb98d","line":860,"updated":"2015-11-18 21:14:55.000000000","message":"This doesn\u0027t need to be defined here.","commit_id":"6d031791d1b342aa715806ab3265e45a4dc1f9a8"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"c63bff4cc80f54a04df314de9793e15b18816a3b","unresolved":false,"context_lines":[{"line_number":864,"context_line":"            extra_specs \u003d volume_type.get(\"extra_specs\")"},{"line_number":865,"context_line":""},{"line_number":866,"context_line":"            if extra_specs and \u0027replication_enabled\u0027 in extra_specs:"},{"line_number":867,"context_line":"                rep_val \u003d extra_specs[\u0027replication_enabled\u0027]"},{"line_number":868,"context_line":"                if (rep_val \u003d\u003d \"\u003cis\u003e True\"):"},{"line_number":869,"context_line":"                    replication_type \u003d extra_specs.get(\u0027replication_type\u0027,"},{"line_number":870,"context_line":"                                                       self.SPLITIO)"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba8a016a_9c53116b","line":867,"updated":"2015-11-18 20:15:02.000000000","message":"unnecessary parens, Java sneaking in :)","commit_id":"6d031791d1b342aa715806ab3265e45a4dc1f9a8"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"0baecf9b92e2bb25b66388d630be63087110a3c2","unresolved":false,"context_lines":[{"line_number":884,"context_line":"                remote_array[\u0027replication_mode\u0027] \u003d rep_mode"},{"line_number":885,"context_line":"                remote_array[\u0027san_ip\u0027] \u003d ("},{"line_number":886,"context_line":"                    dev.get(\u0027san_ip\u0027))"},{"line_number":887,"context_line":"                if (rep_mode \u003d\u003d self.SPLITIO"},{"line_number":888,"context_line":"                        and remote_array[\u0027san_ip\u0027] !\u003d ("},{"line_number":889,"context_line":"                            self.configuration.safe_get(\u0027san_ip\u0027))):"},{"line_number":890,"context_line":"                    msg \u003d _(\"Please configure the replication target on the \""}],"source_content_type":"text/x-python","patch_set":23,"id":"ba8a016a_abcd6986","line":887,"updated":"2015-11-18 21:14:55.000000000","message":"Unnecessary parents here as well","commit_id":"6d031791d1b342aa715806ab3265e45a4dc1f9a8"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"0baecf9b92e2bb25b66388d630be63087110a3c2","unresolved":false,"context_lines":[{"line_number":902,"context_line":"                    dev.get(\u0027pool_name\u0027))"},{"line_number":903,"context_line":"                replication_targets.append(remote_array)"},{"line_number":904,"context_line":""},{"line_number":905,"context_line":"            self._replication_targets \u003d replication_targets"},{"line_number":906,"context_line":"            self._replication_enabled \u003d True"},{"line_number":907,"context_line":"            self.do_setup_replications()"},{"line_number":908,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"ba8a016a_6bb46134","line":905,"updated":"2015-11-18 21:14:55.000000000","message":"So any device in cinder.conf is automatically deemed a valid replication device? I think there should be some sort of check that will allow you to attempt to filter out bad devices.","commit_id":"6d031791d1b342aa715806ab3265e45a4dc1f9a8"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"c63bff4cc80f54a04df314de9793e15b18816a3b","unresolved":false,"context_lines":[{"line_number":905,"context_line":"            self._replication_targets \u003d replication_targets"},{"line_number":906,"context_line":"            self._replication_enabled \u003d True"},{"line_number":907,"context_line":"            self.do_setup_replications()"},{"line_number":908,"context_line":""},{"line_number":909,"context_line":"    def do_setup_replications(self):"},{"line_number":910,"context_line":"        for rep_type in self.VALID_REP_TYPES:"},{"line_number":911,"context_line":"            self.replications[rep_type] \u003d self.replication_factory(rep_type)"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba8a016a_3c18e51d","line":908,"updated":"2015-11-18 20:15:02.000000000","message":"Something like \"create_replication_types\" may be clearer, since otherwise we\u0027ll have _do_replication_setup and do_setup_replications","commit_id":"6d031791d1b342aa715806ab3265e45a4dc1f9a8"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"c63bff4cc80f54a04df314de9793e15b18816a3b","unresolved":false,"context_lines":[{"line_number":1276,"context_line":"                                 {\u0027sys_id\u0027: self._state[\u0027system_id\u0027],"},{"line_number":1277,"context_line":"                                  \u0027pool\u0027: pool})"},{"line_number":1278,"context_line":""},{"line_number":1279,"context_line":"        if self._replication_enabled:"},{"line_number":1280,"context_line":"            data[\u0027replication_enabled\u0027] \u003d self._replication_enabled"},{"line_number":1281,"context_line":"            data[\u0027replication_count\u0027] \u003d len(self._replication_targets)"},{"line_number":1282,"context_line":"        elif self.replication:"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba8a016a_82740a68","line":1279,"updated":"2015-11-18 20:15:02.000000000","message":"Won\u0027t the above if check make it so that we never report \"replication_enabled\" \u003d False?  Honestly not sure if that will be a problem or not, just wanted to bring it up","commit_id":"6d031791d1b342aa715806ab3265e45a4dc1f9a8"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"1b6ccc9f79f0a9c160bf4bda16e30ad5dd3594b2","unresolved":false,"context_lines":[{"line_number":268,"context_line":"            self._vdiskcopyops_loop \u003d loopingcall.FixedIntervalLoopingCall("},{"line_number":269,"context_line":"                self._check_volume_copy_ops)"},{"line_number":270,"context_line":"            self._vdiskcopyops_loop.start(interval\u003dself.VDISKCOPYOPS_INTERVAL)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"        # v2 replication setup"},{"line_number":273,"context_line":"        if not self._replication_enabled:"},{"line_number":274,"context_line":"            self._do_replication_setup()"}],"source_content_type":"text/x-python","patch_set":38,"id":"9a8ffd7b_ab19f789","line":271,"updated":"2015-12-02 17:45:35.000000000","message":"Isn\u0027t do_setup only called once, so we wouldn\u0027t actually need this if check.  Not a big deal, just curious.","commit_id":"5064b681d78e8f44e708875524efc20417238a37"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"323a96c11ad7da57874e7ddc3e332fcfd3edf737","unresolved":false,"context_lines":[{"line_number":268,"context_line":"            self._vdiskcopyops_loop \u003d loopingcall.FixedIntervalLoopingCall("},{"line_number":269,"context_line":"                self._check_volume_copy_ops)"},{"line_number":270,"context_line":"            self._vdiskcopyops_loop.start(interval\u003dself.VDISKCOPYOPS_INTERVAL)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"        # v2 replication setup"},{"line_number":273,"context_line":"        if not self._replication_enabled:"},{"line_number":274,"context_line":"            self._do_replication_setup()"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a740942_bba089a0","line":271,"in_reply_to":"9a8ffd7b_ab19f789","updated":"2015-12-07 06:00:42.000000000","message":"Yes.","commit_id":"5064b681d78e8f44e708875524efc20417238a37"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"1b6ccc9f79f0a9c160bf4bda16e30ad5dd3594b2","unresolved":false,"context_lines":[{"line_number":810,"context_line":""},{"line_number":811,"context_line":"    # #### V2 replication methods #### #"},{"line_number":812,"context_line":"    def replication_enable(self, context, vref):"},{"line_number":813,"context_line":"        \"\"\"Enable replication on a replication capable volume.\"\"\""},{"line_number":814,"context_line":"        volume_type \u003d self._validate_volume_rep_type(context, vref)"},{"line_number":815,"context_line":"        return self.replications.get(volume_type).replication_enable("},{"line_number":816,"context_line":"            context, vref)"}],"source_content_type":"text/x-python","patch_set":38,"id":"9a8ffd7b_a6892e28","line":813,"updated":"2015-12-02 17:45:35.000000000","message":"This is actually rep_type, not volume_type","commit_id":"5064b681d78e8f44e708875524efc20417238a37"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f5e90004725dd8e7e0c659cdf7c8e24474b7de12","unresolved":false,"context_lines":[{"line_number":810,"context_line":""},{"line_number":811,"context_line":"    # #### V2 replication methods #### #"},{"line_number":812,"context_line":"    def replication_enable(self, context, vref):"},{"line_number":813,"context_line":"        \"\"\"Enable replication on a replication capable volume.\"\"\""},{"line_number":814,"context_line":"        volume_type \u003d self._validate_volume_rep_type(context, vref)"},{"line_number":815,"context_line":"        return self.replications.get(volume_type).replication_enable("},{"line_number":816,"context_line":"            context, vref)"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a740942_17167355","line":813,"in_reply_to":"9a8ffd7b_a6892e28","updated":"2015-12-04 20:12:59.000000000","message":"+1","commit_id":"5064b681d78e8f44e708875524efc20417238a37"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"323a96c11ad7da57874e7ddc3e332fcfd3edf737","unresolved":false,"context_lines":[{"line_number":810,"context_line":""},{"line_number":811,"context_line":"    # #### V2 replication methods #### #"},{"line_number":812,"context_line":"    def replication_enable(self, context, vref):"},{"line_number":813,"context_line":"        \"\"\"Enable replication on a replication capable volume.\"\"\""},{"line_number":814,"context_line":"        volume_type \u003d self._validate_volume_rep_type(context, vref)"},{"line_number":815,"context_line":"        return self.replications.get(volume_type).replication_enable("},{"line_number":816,"context_line":"            context, vref)"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a740942_5b2ac52d","line":813,"in_reply_to":"9a8ffd7b_a6892e28","updated":"2015-12-07 06:00:42.000000000","message":"Done","commit_id":"5064b681d78e8f44e708875524efc20417238a37"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"1b6ccc9f79f0a9c160bf4bda16e30ad5dd3594b2","unresolved":false,"context_lines":[{"line_number":822,"context_line":"            context, vref)"},{"line_number":823,"context_line":""},{"line_number":824,"context_line":"    def replication_failover(self, context, vref, secondary):"},{"line_number":825,"context_line":"        \"\"\"Force failover to a secondary replication target.\"\"\""},{"line_number":826,"context_line":"        volume_type \u003d self._validate_volume_rep_type(context, vref)"},{"line_number":827,"context_line":"        return self.replications.get(volume_type).replication_failover("},{"line_number":828,"context_line":"            context, vref, secondary)"}],"source_content_type":"text/x-python","patch_set":38,"id":"9a8ffd7b_267e9e19","line":825,"updated":"2015-12-02 17:45:35.000000000","message":"Same as above","commit_id":"5064b681d78e8f44e708875524efc20417238a37"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"323a96c11ad7da57874e7ddc3e332fcfd3edf737","unresolved":false,"context_lines":[{"line_number":822,"context_line":"            context, vref)"},{"line_number":823,"context_line":""},{"line_number":824,"context_line":"    def replication_failover(self, context, vref, secondary):"},{"line_number":825,"context_line":"        \"\"\"Force failover to a secondary replication target.\"\"\""},{"line_number":826,"context_line":"        volume_type \u003d self._validate_volume_rep_type(context, vref)"},{"line_number":827,"context_line":"        return self.replications.get(volume_type).replication_failover("},{"line_number":828,"context_line":"            context, vref, secondary)"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a740942_fb21314e","line":825,"in_reply_to":"9a8ffd7b_267e9e19","updated":"2015-12-07 06:00:42.000000000","message":"Done","commit_id":"5064b681d78e8f44e708875524efc20417238a37"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"1b6ccc9f79f0a9c160bf4bda16e30ad5dd3594b2","unresolved":false,"context_lines":[{"line_number":828,"context_line":"            context, vref, secondary)"},{"line_number":829,"context_line":""},{"line_number":830,"context_line":"    def list_replication_targets(self, context, vref):"},{"line_number":831,"context_line":"        \"\"\"Return the list of replication targets for a volume.\"\"\""},{"line_number":832,"context_line":"        volume_type \u003d self._validate_volume_rep_type(context, vref)"},{"line_number":833,"context_line":"        return self.replications.get(volume_type).list_replication_targets("},{"line_number":834,"context_line":"            context, vref)"}],"source_content_type":"text/x-python","patch_set":38,"id":"9a8ffd7b_06711a44","line":831,"updated":"2015-12-02 17:45:35.000000000","message":"^ Ditto","commit_id":"5064b681d78e8f44e708875524efc20417238a37"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"323a96c11ad7da57874e7ddc3e332fcfd3edf737","unresolved":false,"context_lines":[{"line_number":828,"context_line":"            context, vref, secondary)"},{"line_number":829,"context_line":""},{"line_number":830,"context_line":"    def list_replication_targets(self, context, vref):"},{"line_number":831,"context_line":"        \"\"\"Return the list of replication targets for a volume.\"\"\""},{"line_number":832,"context_line":"        volume_type \u003d self._validate_volume_rep_type(context, vref)"},{"line_number":833,"context_line":"        return self.replications.get(volume_type).list_replication_targets("},{"line_number":834,"context_line":"            context, vref)"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a740942_1b1d1d0f","line":831,"in_reply_to":"9a8ffd7b_06711a44","updated":"2015-12-07 06:00:42.000000000","message":"Done","commit_id":"5064b681d78e8f44e708875524efc20417238a37"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"1b6ccc9f79f0a9c160bf4bda16e30ad5dd3594b2","unresolved":false,"context_lines":[{"line_number":845,"context_line":"        replication_type \u003d None"},{"line_number":846,"context_line":"        if volume.get(\"volume_type_id\"):"},{"line_number":847,"context_line":"            volume_type \u003d volume_types.get_volume_type("},{"line_number":848,"context_line":"                ctxt, volume[\"volume_type_id\"])"},{"line_number":849,"context_line":"            extra_specs \u003d volume_type.get(\"extra_specs\")"},{"line_number":850,"context_line":""},{"line_number":851,"context_line":"            if extra_specs and \u0027replication_enabled\u0027 in extra_specs:"}],"source_content_type":"text/x-python","patch_set":38,"id":"9a8ffd7b_2679bec8","line":848,"updated":"2015-12-02 17:45:35.000000000","message":"Optionally could do:\n   extra_specs \u003d volume_type.get(\"extra_specs\", {})\n\nand then:\n    if extra_specs.get(\u0027replication_enabled\u0027):\n\nand remove lines 850-851","commit_id":"5064b681d78e8f44e708875524efc20417238a37"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"323a96c11ad7da57874e7ddc3e332fcfd3edf737","unresolved":false,"context_lines":[{"line_number":845,"context_line":"        replication_type \u003d None"},{"line_number":846,"context_line":"        if volume.get(\"volume_type_id\"):"},{"line_number":847,"context_line":"            volume_type \u003d volume_types.get_volume_type("},{"line_number":848,"context_line":"                ctxt, volume[\"volume_type_id\"])"},{"line_number":849,"context_line":"            extra_specs \u003d volume_type.get(\"extra_specs\")"},{"line_number":850,"context_line":""},{"line_number":851,"context_line":"            if extra_specs and \u0027replication_enabled\u0027 in extra_specs:"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a740942_bbf2c9d0","line":848,"in_reply_to":"9a8ffd7b_2679bec8","updated":"2015-12-07 06:00:42.000000000","message":"Done","commit_id":"5064b681d78e8f44e708875524efc20417238a37"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"5849612e8cbe9dcc5ac1afb501450f155db6172e","unresolved":false,"context_lines":[{"line_number":921,"context_line":""},{"line_number":922,"context_line":"            self._replication_targets \u003d replication_targets"},{"line_number":923,"context_line":""},{"line_number":924,"context_line":"            # Each replication type will have a coresponding replication."},{"line_number":925,"context_line":"            self.create_replication_types(replication_targets)"},{"line_number":926,"context_line":""},{"line_number":927,"context_line":"            # This driver is enabled with relication configuration."}],"source_content_type":"text/x-python","patch_set":45,"id":"7a740942_bd14a89f","line":924,"updated":"2015-12-14 05:51:39.000000000","message":"coresponding \u003d\u003e corresponding","commit_id":"3d422dd659c96cbf4c753086c8e33367832e1eb3"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"5849612e8cbe9dcc5ac1afb501450f155db6172e","unresolved":false,"context_lines":[{"line_number":924,"context_line":"            # Each replication type will have a coresponding replication."},{"line_number":925,"context_line":"            self.create_replication_types(replication_targets)"},{"line_number":926,"context_line":""},{"line_number":927,"context_line":"            # This driver is enabled with relication configuration."},{"line_number":928,"context_line":"            self._replication_enabled \u003d True"},{"line_number":929,"context_line":""},{"line_number":930,"context_line":"    def create_replication_types(self, replication_targets):"}],"source_content_type":"text/x-python","patch_set":45,"id":"7a740942_7d0ac07a","line":927,"updated":"2015-12-14 05:51:39.000000000","message":"relication \u003d\u003e replication","commit_id":"3d422dd659c96cbf4c753086c8e33367832e1eb3"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"eebb51666eaab00afe0459ba3597fc73336b3fca","unresolved":false,"context_lines":[{"line_number":858,"context_line":"    def _validate_volume_rep_type(self, ctxt, volume):"},{"line_number":859,"context_line":"        rep_type \u003d self._get_volume_replicated_type(ctxt, volume)"},{"line_number":860,"context_line":"        if not rep_type:"},{"line_number":861,"context_line":"            msg \u003d _(\"The volume must be of replicated type.\")"},{"line_number":862,"context_line":"            LOG.error(msg)"},{"line_number":863,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":864,"context_line":"        return rep_type"}],"source_content_type":"text/x-python","patch_set":46,"id":"5a710552_e1624e16","line":861,"updated":"2015-12-14 20:34:54.000000000","message":"We should add the volume ID here so that it is clearer what is going on.\n\n\"Volume %s must be of replicated type.\"  Seems like there should be some way of indicating what is not being done as a result.  Maybe just pass the exception back up here and catch it in \u0027replication_enable\u0027 etc and report what was not done?","commit_id":"67e3c9b147def7786fa0a63fc6109651d539ec90"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"bb594554f5f179d29635e5f6145c01dd9765bc89","unresolved":false,"context_lines":[{"line_number":858,"context_line":"    def _validate_volume_rep_type(self, ctxt, volume):"},{"line_number":859,"context_line":"        rep_type \u003d self._get_volume_replicated_type(ctxt, volume)"},{"line_number":860,"context_line":"        if not rep_type:"},{"line_number":861,"context_line":"            msg \u003d _(\"The volume must be of replicated type.\")"},{"line_number":862,"context_line":"            LOG.error(msg)"},{"line_number":863,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":864,"context_line":"        return rep_type"}],"source_content_type":"text/x-python","patch_set":46,"id":"5a710552_1a2b2e32","line":861,"in_reply_to":"5a710552_e1624e16","updated":"2015-12-15 05:50:21.000000000","message":"I will put more details here.","commit_id":"67e3c9b147def7786fa0a63fc6109651d539ec90"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"eebb51666eaab00afe0459ba3597fc73336b3fca","unresolved":false,"context_lines":[{"line_number":900,"context_line":"                    dev.get(\u0027managed_backend_name\u0027))"},{"line_number":901,"context_line":"                if not remote_array[\u0027managed_backend_name\u0027]:"},{"line_number":902,"context_line":"                    msg \u003d _(\"All the replication modes in Storwize only \""},{"line_number":903,"context_line":"                            \"expects the managed back-end.\")"},{"line_number":904,"context_line":"                    LOG.error(msg)"},{"line_number":905,"context_line":"                    raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":906,"context_line":"                rep_mode \u003d dev.get(\u0027replication_mode\u0027)"}],"source_content_type":"text/x-python","patch_set":46,"id":"5a710552_5cf9c9c7","line":903,"updated":"2015-12-14 20:34:54.000000000","message":"I don\u0027t understand this error.  Do you mean \u0027No managed back-end configured.  All replication modes require a managed back-end to be configured.\u0027","commit_id":"67e3c9b147def7786fa0a63fc6109651d539ec90"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"bb594554f5f179d29635e5f6145c01dd9765bc89","unresolved":false,"context_lines":[{"line_number":900,"context_line":"                    dev.get(\u0027managed_backend_name\u0027))"},{"line_number":901,"context_line":"                if not remote_array[\u0027managed_backend_name\u0027]:"},{"line_number":902,"context_line":"                    msg \u003d _(\"All the replication modes in Storwize only \""},{"line_number":903,"context_line":"                            \"expects the managed back-end.\")"},{"line_number":904,"context_line":"                    LOG.error(msg)"},{"line_number":905,"context_line":"                    raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":906,"context_line":"                rep_mode \u003d dev.get(\u0027replication_mode\u0027)"}],"source_content_type":"text/x-python","patch_set":46,"id":"5a710552_f0d528b9","line":903,"in_reply_to":"5a710552_5cf9c9c7","updated":"2015-12-15 05:50:21.000000000","message":"So far, only managed backend is implemented.\nWe have not supported the unmanaged case yet.","commit_id":"67e3c9b147def7786fa0a63fc6109651d539ec90"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"eebb51666eaab00afe0459ba3597fc73336b3fca","unresolved":false,"context_lines":[{"line_number":902,"context_line":"                    msg \u003d _(\"All the replication modes in Storwize only \""},{"line_number":903,"context_line":"                            \"expects the managed back-end.\")"},{"line_number":904,"context_line":"                    LOG.error(msg)"},{"line_number":905,"context_line":"                    raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":906,"context_line":"                rep_mode \u003d dev.get(\u0027replication_mode\u0027)"},{"line_number":907,"context_line":"                remote_array[\u0027replication_mode\u0027] \u003d rep_mode"},{"line_number":908,"context_line":"                remote_array[\u0027san_ip\u0027] \u003d ("}],"source_content_type":"text/x-python","patch_set":46,"id":"5a710552_1c76e13e","line":905,"updated":"2015-12-14 20:34:54.000000000","message":"Wonder if  InvalidConfigurationValue(Invalid): would be better?","commit_id":"67e3c9b147def7786fa0a63fc6109651d539ec90"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"bb594554f5f179d29635e5f6145c01dd9765bc89","unresolved":false,"context_lines":[{"line_number":902,"context_line":"                    msg \u003d _(\"All the replication modes in Storwize only \""},{"line_number":903,"context_line":"                            \"expects the managed back-end.\")"},{"line_number":904,"context_line":"                    LOG.error(msg)"},{"line_number":905,"context_line":"                    raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":906,"context_line":"                rep_mode \u003d dev.get(\u0027replication_mode\u0027)"},{"line_number":907,"context_line":"                remote_array[\u0027replication_mode\u0027] \u003d rep_mode"},{"line_number":908,"context_line":"                remote_array[\u0027san_ip\u0027] \u003d ("}],"source_content_type":"text/x-python","patch_set":46,"id":"5a710552_fa25025c","line":905,"in_reply_to":"5a710552_1c76e13e","updated":"2015-12-15 05:50:21.000000000","message":"Done","commit_id":"67e3c9b147def7786fa0a63fc6109651d539ec90"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"eebb51666eaab00afe0459ba3597fc73336b3fca","unresolved":false,"context_lines":[{"line_number":912,"context_line":"                            self.configuration.safe_get(\u0027san_ip\u0027)):"},{"line_number":913,"context_line":"                        msg \u003d _(\"Please configure the replication target \""},{"line_number":914,"context_line":"                                \"on the same storage control panel as \""},{"line_number":915,"context_line":"                                \"the source.\")"},{"line_number":916,"context_line":"                        LOG.error(msg)"},{"line_number":917,"context_line":"                        raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":918,"context_line":"                remote_array[\u0027target_device_id\u0027] \u003d ("}],"source_content_type":"text/x-python","patch_set":46,"id":"5a710552_6c688ebb","line":915,"updated":"2015-12-14 20:34:54.000000000","message":"I think this would make more sense if you said:  \n\n\"Please configure the replication target \"\t913\n\"on the same storage back-end as \"\n\"the source.\"","commit_id":"67e3c9b147def7786fa0a63fc6109651d539ec90"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"bb594554f5f179d29635e5f6145c01dd9765bc89","unresolved":false,"context_lines":[{"line_number":912,"context_line":"                            self.configuration.safe_get(\u0027san_ip\u0027)):"},{"line_number":913,"context_line":"                        msg \u003d _(\"Please configure the replication target \""},{"line_number":914,"context_line":"                                \"on the same storage control panel as \""},{"line_number":915,"context_line":"                                \"the source.\")"},{"line_number":916,"context_line":"                        LOG.error(msg)"},{"line_number":917,"context_line":"                        raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":918,"context_line":"                remote_array[\u0027target_device_id\u0027] \u003d ("}],"source_content_type":"text/x-python","patch_set":46,"id":"5a710552_baf9baca","line":915,"in_reply_to":"5a710552_6c688ebb","updated":"2015-12-15 05:50:21.000000000","message":"Done","commit_id":"67e3c9b147def7786fa0a63fc6109651d539ec90"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"eebb51666eaab00afe0459ba3597fc73336b3fca","unresolved":false,"context_lines":[{"line_number":914,"context_line":"                                \"on the same storage control panel as \""},{"line_number":915,"context_line":"                                \"the source.\")"},{"line_number":916,"context_line":"                        LOG.error(msg)"},{"line_number":917,"context_line":"                        raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":918,"context_line":"                remote_array[\u0027target_device_id\u0027] \u003d ("},{"line_number":919,"context_line":"                    dev.get(\u0027target_device_id\u0027))"},{"line_number":920,"context_line":"                remote_array[\u0027san_login\u0027] \u003d ("}],"source_content_type":"text/x-python","patch_set":46,"id":"5a710552_2cb9262f","line":917,"updated":"2015-12-14 20:34:54.000000000","message":"Wonder if InvalidConfigurationValue(Invalid): would be better?","commit_id":"67e3c9b147def7786fa0a63fc6109651d539ec90"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"bb594554f5f179d29635e5f6145c01dd9765bc89","unresolved":false,"context_lines":[{"line_number":914,"context_line":"                                \"on the same storage control panel as \""},{"line_number":915,"context_line":"                                \"the source.\")"},{"line_number":916,"context_line":"                        LOG.error(msg)"},{"line_number":917,"context_line":"                        raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":918,"context_line":"                remote_array[\u0027target_device_id\u0027] \u003d ("},{"line_number":919,"context_line":"                    dev.get(\u0027target_device_id\u0027))"},{"line_number":920,"context_line":"                remote_array[\u0027san_login\u0027] \u003d ("}],"source_content_type":"text/x-python","patch_set":46,"id":"5a710552_1a148ef3","line":917,"in_reply_to":"5a710552_2cb9262f","updated":"2015-12-15 05:50:21.000000000","message":"Done","commit_id":"67e3c9b147def7786fa0a63fc6109651d539ec90"}],"cinder/volume/drivers/ibm/storwize_svc/replication.py":[{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"24126afd1737b33ce0877f4530315f5ce8730682","unresolved":false,"context_lines":[{"line_number":234,"context_line":"                         \u0027 no replication enabled for %(vol)s.\u0027),"},{"line_number":235,"context_line":"                     {\u0027vol\u0027: vdisk})"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    def replication_failover(self, context, vref, secondary):"},{"line_number":238,"context_line":"        vdisk \u003d vref[\u0027name\u0027]"},{"line_number":239,"context_line":"        copies \u003d self.driver._helpers.get_vdisk_copies(vdisk)"},{"line_number":240,"context_line":"        if copies[\u0027secondary\u0027]:"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa80f949_4330f656","line":237,"updated":"2015-11-03 16:06:07.000000000","message":"secondary should be the remote_device_id of the replication_device entry. This is a standardized field in order to maintain consistency over multiple vendors. \n\nA user should be able to run list_replication_devices and feed replication_failover the remote_device_id of the target they want to fail over to no matter what vendor they are using. \n\nYou can then use secondary to look through your replication devices to find the correct one.","commit_id":"49004b907558385dd3b5663ea83fe4e20eeb662c"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"d555695d49e6f638840e15f91c68f296235f4a49","unresolved":false,"context_lines":[{"line_number":234,"context_line":"                         \u0027 no replication enabled for %(vol)s.\u0027),"},{"line_number":235,"context_line":"                     {\u0027vol\u0027: vdisk})"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    def replication_failover(self, context, vref, secondary):"},{"line_number":238,"context_line":"        vdisk \u003d vref[\u0027name\u0027]"},{"line_number":239,"context_line":"        copies \u003d self.driver._helpers.get_vdisk_copies(vdisk)"},{"line_number":240,"context_line":"        if copies[\u0027secondary\u0027]:"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa80f949_a330ac57","line":237,"in_reply_to":"fa80f949_4330f656","updated":"2015-11-04 02:38:01.000000000","message":"Thank you, Alex.\nThis is so helpful.","commit_id":"49004b907558385dd3b5663ea83fe4e20eeb662c"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"8c9a8240924409662eafc651241cf27d7021bc0c","unresolved":false,"context_lines":[{"line_number":217,"context_line":"        data[\u0027replication\u0027] \u003d True"},{"line_number":218,"context_line":"        return data"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    # #### Implementing V2 replication methods #### #"},{"line_number":221,"context_line":"    def replication_enable(self, context, vref):"},{"line_number":222,"context_line":"        vol_type \u003d volume_types.get_volume_type(context,"},{"line_number":223,"context_line":"                                                vref[\u0027volume_type_id\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa80f949_aaf4e786","line":220,"updated":"2015-11-04 15:58:13.000000000","message":"what happened to list_replication_targets here? It should be in here as well to maintain consistency.","commit_id":"fbea69f316f0f5f4fcd5c365a8a67bc3713e3784"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"8c9a8240924409662eafc651241cf27d7021bc0c","unresolved":false,"context_lines":[{"line_number":244,"context_line":"                         \u0027no replication enabled for %(vol)s.\u0027),"},{"line_number":245,"context_line":"                     {\u0027vol\u0027: vdisk})"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"    def replication_failover(self, context, vref, secondary):"},{"line_number":248,"context_line":"        # For the mode of stretched cluster, the replication target must be"},{"line_number":249,"context_line":"        # on the same Storwize storage and managed by the same control"},{"line_number":250,"context_line":"        # panel."}],"source_content_type":"text/x-python","patch_set":6,"id":"fa80f949_cafe0b6b","line":247,"updated":"2015-11-04 15:58:13.000000000","message":"secondary should be used to find the array you are failing over to","commit_id":"fbea69f316f0f5f4fcd5c365a8a67bc3713e3784"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"06c273e3c3fbe95512ae51c5892a7274d3f37839","unresolved":false,"context_lines":[{"line_number":219,"context_line":"    def get_replication_info(self):"},{"line_number":220,"context_line":"        data \u003d {}"},{"line_number":221,"context_line":"        # Keep it compatible with Replication V1."},{"line_number":222,"context_line":"        data[\u0027replication\u0027] \u003d True"},{"line_number":223,"context_line":"        data[\u0027replication_enabled\u0027] \u003d True"},{"line_number":224,"context_line":"        data[\u0027replication_type\u0027] \u003d \"splitio\""},{"line_number":225,"context_line":"        data[\u0027replication_count\u0027] \u003d len(self._replication_targets)"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa80f949_846ad6b1","line":222,"updated":"2015-11-06 15:26:27.000000000","message":"I don\u0027t believe you need this","commit_id":"9245bb344dbf76432bfac82d2eafc18c9deae46c"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"06c273e3c3fbe95512ae51c5892a7274d3f37839","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        data \u003d {}"},{"line_number":221,"context_line":"        # Keep it compatible with Replication V1."},{"line_number":222,"context_line":"        data[\u0027replication\u0027] \u003d True"},{"line_number":223,"context_line":"        data[\u0027replication_enabled\u0027] \u003d True"},{"line_number":224,"context_line":"        data[\u0027replication_type\u0027] \u003d \"splitio\""},{"line_number":225,"context_line":"        data[\u0027replication_count\u0027] \u003d len(self._replication_targets)"},{"line_number":226,"context_line":"        return data"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa80f949_c46bfeb7","line":223,"updated":"2015-11-06 15:26:27.000000000","message":"data[\u0027replication_enabled\u0027] should be set as self._replication_enabled, so you will no if the replication setup succeeded or failed.","commit_id":"9245bb344dbf76432bfac82d2eafc18c9deae46c"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"06c273e3c3fbe95512ae51c5892a7274d3f37839","unresolved":false,"context_lines":[{"line_number":252,"context_line":"                         \u0027there is no replication enabled for %(vol)s.\u0027),"},{"line_number":253,"context_line":"                     {\u0027vol\u0027: vdisk})"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    def replication_failover(self, context, vref, secondary):"},{"line_number":256,"context_line":"        # For the mode of stretched cluster, the replication target must be"},{"line_number":257,"context_line":"        # on the same Storwize storage and managed by the same control"},{"line_number":258,"context_line":"        # panel."}],"source_content_type":"text/x-python","patch_set":10,"id":"fa80f949_648b3269","line":255,"updated":"2015-11-06 15:26:27.000000000","message":"Still the same, it is a standard for secondary to be an identifier. Secondary should be the target_device_id of the replication target in order to meet the required standards.","commit_id":"9245bb344dbf76432bfac82d2eafc18c9deae46c"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"44309a34122090022e683b5697863821050d6397","unresolved":false,"context_lines":[{"line_number":216,"context_line":"    def volume_replication_setup(self, context, vref):"},{"line_number":217,"context_line":"        vol_type \u003d volume_types.get_volume_type(context,"},{"line_number":218,"context_line":"                                                vref[\u0027volume_type_id\u0027])"},{"line_number":219,"context_line":"        conf \u003d self.driver.configuration"},{"line_number":220,"context_line":"        rep_type \u003d conf.storwize_svc_replication_type"},{"line_number":221,"context_line":"        dest_pool \u003d None"},{"line_number":222,"context_line":"        for target in self.driver._replication_targets:"}],"source_content_type":"text/x-python","patch_set":17,"id":"da85f559_553e4ab9","line":219,"updated":"2015-11-13 17:36:49.000000000","message":"This config isn\u0027t set anywhere (not mentioned in commit message)","commit_id":"116485e06410f00dbb829d265ab3ea3b28fe18f1"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"0baecf9b92e2bb25b66388d630be63087110a3c2","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        \"\"\""},{"line_number":62,"context_line":"        pass"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    # #### V2 replication methods #### #"},{"line_number":65,"context_line":"    def replication_enable(self, context, vref):"},{"line_number":66,"context_line":"        pass"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"ba8a016a_ebf5b1ec","line":64,"updated":"2015-11-18 21:14:55.000000000","message":"Why are these defined here as well?","commit_id":"6d031791d1b342aa715806ab3265e45a4dc1f9a8"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"c63bff4cc80f54a04df314de9793e15b18816a3b","unresolved":false,"context_lines":[{"line_number":218,"context_line":"                                 rep_type\u003dREPLICATION_TYPE):"},{"line_number":219,"context_line":"        vol_type \u003d volume_types.get_volume_type(context,"},{"line_number":220,"context_line":"                                                vref[\u0027volume_type_id\u0027])"},{"line_number":221,"context_line":"        dest_pool \u003d None"},{"line_number":222,"context_line":"        for target in self.driver._replication_targets:"},{"line_number":223,"context_line":"            if target[\u0027replication_mode\u0027] \u003d\u003d rep_type:"},{"line_number":224,"context_line":"                # The type of split IO only replicates the volume in one"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba8a016a_82cc0a6b","line":221,"updated":"2015-11-18 20:15:02.000000000","message":"For all of these methods, should we be be doing this parsing of things like target_pool and the list of replication targets only on setup and save them?\n\nSeems like we\u0027re taking a performance hit doing this parsing over and over again, unless there\u0027s some benefit we get from this that I\u0027m missing","commit_id":"6d031791d1b342aa715806ab3265e45a4dc1f9a8"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"93c19769d56b698fb1c400637841b47bba62aca7","unresolved":false,"context_lines":[{"line_number":218,"context_line":"                                 rep_type\u003dREPLICATION_TYPE):"},{"line_number":219,"context_line":"        vol_type \u003d volume_types.get_volume_type(context,"},{"line_number":220,"context_line":"                                                vref[\u0027volume_type_id\u0027])"},{"line_number":221,"context_line":"        dest_pool \u003d None"},{"line_number":222,"context_line":"        for target in self.driver._replication_targets:"},{"line_number":223,"context_line":"            if target[\u0027replication_mode\u0027] \u003d\u003d rep_type:"},{"line_number":224,"context_line":"                # The type of split IO only replicates the volume in one"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba8a016a_efe3e431","line":221,"in_reply_to":"ba8a016a_82cc0a6b","updated":"2015-11-23 04:23:38.000000000","message":"I have classified the replication into 2: splitio and a futue mirror(global and metro).\nI think I can put the replication targets parsing in the replication setup, with a mapping between the replication type and the targets.","commit_id":"6d031791d1b342aa715806ab3265e45a4dc1f9a8"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"0baecf9b92e2bb25b66388d630be63087110a3c2","unresolved":false,"context_lines":[{"line_number":245,"context_line":"        if not copies[\u0027secondary\u0027]:"},{"line_number":246,"context_line":"            self.volume_replication_setup(context, vref)"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"        model_update \u003d {}"},{"line_number":249,"context_line":"        model_update[\u0027replication_status\u0027] \u003d \u0027enabled\u0027"},{"line_number":250,"context_line":"        return model_update"},{"line_number":251,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"ba8a016a_4b6abd82","line":248,"updated":"2015-11-18 21:14:55.000000000","message":"Could consolidate to: model_update \u003d {\u0027replication_status\u0027: \u0027enabled\u0027}","commit_id":"6d031791d1b342aa715806ab3265e45a4dc1f9a8"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"0baecf9b92e2bb25b66388d630be63087110a3c2","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        copy_id \u003d self.driver._helpers.find_vdisk_copy_id(vref[\u0027name\u0027],"},{"line_number":262,"context_line":"                                                          dest_pool)"},{"line_number":263,"context_line":"        self.driver._helpers.rm_vdisk_copy(vref[\u0027name\u0027], copy_id)"},{"line_number":264,"context_line":"        model_update[\u0027replication_status\u0027] \u003d \u0027disabled\u0027"},{"line_number":265,"context_line":"        return model_update"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"    def replication_failover(self, context, vref, secondary):"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba8a016a_0b07d5ca","line":264,"updated":"2015-11-18 21:14:55.000000000","message":"model_update \u003d {\u0027replication_status\u0027: \u0027disabled\u0027}","commit_id":"6d031791d1b342aa715806ab3265e45a4dc1f9a8"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"0baecf9b92e2bb25b66388d630be63087110a3c2","unresolved":false,"context_lines":[{"line_number":264,"context_line":"        model_update[\u0027replication_status\u0027] \u003d \u0027disabled\u0027"},{"line_number":265,"context_line":"        return model_update"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"    def replication_failover(self, context, vref, secondary):"},{"line_number":268,"context_line":"        # For the mode of stretched cluster, the replication target must be"},{"line_number":269,"context_line":"        # on the same Storwize storage and managed by the same control"},{"line_number":270,"context_line":"        # panel."}],"source_content_type":"text/x-python","patch_set":23,"id":"ba8a016a_4bc2bd35","line":267,"updated":"2015-11-18 21:14:55.000000000","message":"I am not understanding how this fail over works. Don\u0027t you need to change the host of the volume here in order for it to be picked up by the other backend?","commit_id":"6d031791d1b342aa715806ab3265e45a4dc1f9a8"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"93c19769d56b698fb1c400637841b47bba62aca7","unresolved":false,"context_lines":[{"line_number":264,"context_line":"        model_update[\u0027replication_status\u0027] \u003d \u0027disabled\u0027"},{"line_number":265,"context_line":"        return model_update"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"    def replication_failover(self, context, vref, secondary):"},{"line_number":268,"context_line":"        # For the mode of stretched cluster, the replication target must be"},{"line_number":269,"context_line":"        # on the same Storwize storage and managed by the same control"},{"line_number":270,"context_line":"        # panel."}],"source_content_type":"text/x-python","patch_set":23,"id":"ba8a016a_8fcfb8b2","line":267,"in_reply_to":"ba8a016a_4bc2bd35","updated":"2015-11-23 04:23:38.000000000","message":"Thanks for the reminder.\nI need to take a deep look.","commit_id":"6d031791d1b342aa715806ab3265e45a4dc1f9a8"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"c63bff4cc80f54a04df314de9793e15b18816a3b","unresolved":false,"context_lines":[{"line_number":287,"context_line":""},{"line_number":288,"context_line":"    def list_replication_targets(self, context, vref):"},{"line_number":289,"context_line":"        replication_targets \u003d []"},{"line_number":290,"context_line":"        for target in self.driver._replication_targets:"},{"line_number":291,"context_line":"            if target[\u0027managed_backend_name\u0027]:"},{"line_number":292,"context_line":"                managed_type \u003d \"managed\""},{"line_number":293,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba8a016a_a5403835","line":290,"updated":"2015-11-18 20:15:02.000000000","message":"Shouldn\u0027t we use \"target.get(\u0027managed_backend_name\u0027)\"? Because currently we\u0027ll throw a KeyError if target doesn\u0027t define a managed_backend_name so I don\u0027t know this will work for unmanaged...","commit_id":"6d031791d1b342aa715806ab3265e45a4dc1f9a8"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"0baecf9b92e2bb25b66388d630be63087110a3c2","unresolved":false,"context_lines":[{"line_number":287,"context_line":""},{"line_number":288,"context_line":"    def list_replication_targets(self, context, vref):"},{"line_number":289,"context_line":"        replication_targets \u003d []"},{"line_number":290,"context_line":"        for target in self.driver._replication_targets:"},{"line_number":291,"context_line":"            if target[\u0027managed_backend_name\u0027]:"},{"line_number":292,"context_line":"                managed_type \u003d \"managed\""},{"line_number":293,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba8a016a_6bb9c114","line":290,"in_reply_to":"ba8a016a_a5403835","updated":"2015-11-18 21:14:55.000000000","message":"It looks like there is a dev.get(\u0027managed_backend_name\u0027) in the init file, so this value is guaranteed to be None at the very least. But, you can never be too careful :)","commit_id":"6d031791d1b342aa715806ab3265e45a4dc1f9a8"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"d7200fa48cdc70fa2a6d68e8ab1c58c670234bdf","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        # For the mode of split IO, there is only one replication target."},{"line_number":274,"context_line":"        if not self.replication_targets and self.target:"},{"line_number":275,"context_line":"            target \u003d dict(self.target)"},{"line_number":276,"context_line":"            target[\u0027type\u0027] \u003d \"managed\""},{"line_number":277,"context_line":"            del target[\u0027san_password\u0027]"},{"line_number":278,"context_line":"            self.replication_targets.append(target)"},{"line_number":279,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"9a8ffd7b_50b8b82a","line":276,"updated":"2015-11-30 18:29:36.000000000","message":"the only thing that will be listed with the python-cinderclient call is target_device_id. This should be changed to reflect that: https://review.openstack.org/#/c/231708/","commit_id":"076c9de470de51bafe89b80f93beee66a42fb27f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f5e90004725dd8e7e0c659cdf7c8e24474b7de12","unresolved":false,"context_lines":[{"line_number":208,"context_line":"                                                vref[\u0027volume_type_id\u0027])"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        if not self.target or not self.target.get(\u0027pool_name\u0027):"},{"line_number":211,"context_line":"            msg \u003d _LE(\"No target pool is available for volume replication.\")"},{"line_number":212,"context_line":"            LOG.error(msg)"},{"line_number":213,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":214,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"7a740942_f75ac782","line":211,"updated":"2015-12-04 20:12:59.000000000","message":"Should be _ instead of _LE here because the same msg is used below in the exception.","commit_id":"5064b681d78e8f44e708875524efc20417238a37"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"323a96c11ad7da57874e7ddc3e332fcfd3edf737","unresolved":false,"context_lines":[{"line_number":208,"context_line":"                                                vref[\u0027volume_type_id\u0027])"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        if not self.target or not self.target.get(\u0027pool_name\u0027):"},{"line_number":211,"context_line":"            msg \u003d _LE(\"No target pool is available for volume replication.\")"},{"line_number":212,"context_line":"            LOG.error(msg)"},{"line_number":213,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":214,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"7a740942_58d5ebb6","line":211,"in_reply_to":"7a740942_f75ac782","updated":"2015-12-07 06:00:42.000000000","message":"Done","commit_id":"5064b681d78e8f44e708875524efc20417238a37"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f5e90004725dd8e7e0c659cdf7c8e24474b7de12","unresolved":false,"context_lines":[{"line_number":216,"context_line":"            self.driver.add_vdisk_copy(vref[\u0027name\u0027], self.target[\u0027pool_name\u0027],"},{"line_number":217,"context_line":"                                       vol_type)"},{"line_number":218,"context_line":"        except Exception:"},{"line_number":219,"context_line":"            msg \u003d (_LE(\u0027Unable to enable the replication for volume %s.\u0027),"},{"line_number":220,"context_line":"                   vref[\u0027id\u0027])"},{"line_number":221,"context_line":"            LOG.error(msg)"},{"line_number":222,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a740942_d750eb60","line":219,"updated":"2015-12-04 20:12:59.000000000","message":"Same","commit_id":"5064b681d78e8f44e708875524efc20417238a37"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"323a96c11ad7da57874e7ddc3e332fcfd3edf737","unresolved":false,"context_lines":[{"line_number":216,"context_line":"            self.driver.add_vdisk_copy(vref[\u0027name\u0027], self.target[\u0027pool_name\u0027],"},{"line_number":217,"context_line":"                                       vol_type)"},{"line_number":218,"context_line":"        except Exception:"},{"line_number":219,"context_line":"            msg \u003d (_LE(\u0027Unable to enable the replication for volume %s.\u0027),"},{"line_number":220,"context_line":"                   vref[\u0027id\u0027])"},{"line_number":221,"context_line":"            LOG.error(msg)"},{"line_number":222,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a740942_38d25fd3","line":219,"in_reply_to":"7a740942_d750eb60","updated":"2015-12-07 06:00:42.000000000","message":"Done","commit_id":"5064b681d78e8f44e708875524efc20417238a37"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"1b6ccc9f79f0a9c160bf4bda16e30ad5dd3594b2","unresolved":false,"context_lines":[{"line_number":232,"context_line":"        return model_update"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    def replication_disable(self, context, vref):"},{"line_number":235,"context_line":"        try:"},{"line_number":236,"context_line":"            copy_id \u003d self.driver._helpers.find_vdisk_copy_id("},{"line_number":237,"context_line":"                vref[\u0027name\u0027], self.target[\u0027pool_name\u0027])"},{"line_number":238,"context_line":"            self.driver._helpers.rm_vdisk_copy(vref[\u0027name\u0027], copy_id)"}],"source_content_type":"text/x-python","patch_set":38,"id":"9a8ffd7b_90a21bfb","line":235,"updated":"2015-12-02 17:45:35.000000000","message":"What happens here if we call replication_disable on a volume that does not currently have replication enabled?  Do we get the same error when trying to disable replication on unreplicated volume and when stopping replication actually fails?\n\nIf so, this is different behavior than replication_enable where we return success even if volume is already replicated.","commit_id":"5064b681d78e8f44e708875524efc20417238a37"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"323a96c11ad7da57874e7ddc3e332fcfd3edf737","unresolved":false,"context_lines":[{"line_number":232,"context_line":"        return model_update"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    def replication_disable(self, context, vref):"},{"line_number":235,"context_line":"        try:"},{"line_number":236,"context_line":"            copy_id \u003d self.driver._helpers.find_vdisk_copy_id("},{"line_number":237,"context_line":"                vref[\u0027name\u0027], self.target[\u0027pool_name\u0027])"},{"line_number":238,"context_line":"            self.driver._helpers.rm_vdisk_copy(vref[\u0027name\u0027], copy_id)"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a740942_585e4b77","line":235,"in_reply_to":"9a8ffd7b_90a21bfb","updated":"2015-12-07 06:00:42.000000000","message":"There is the status and replication_status check in replication_disable and replication_enable from cinder.volume.manager. If the status does not meet, we won\u0027t reach over here","commit_id":"5064b681d78e8f44e708875524efc20417238a37"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f5e90004725dd8e7e0c659cdf7c8e24474b7de12","unresolved":false,"context_lines":[{"line_number":237,"context_line":"                vref[\u0027name\u0027], self.target[\u0027pool_name\u0027])"},{"line_number":238,"context_line":"            self.driver._helpers.rm_vdisk_copy(vref[\u0027name\u0027], copy_id)"},{"line_number":239,"context_line":"        except Exception:"},{"line_number":240,"context_line":"            msg \u003d (_LE(\u0027Unable to disable the replication for volume %s.\u0027),"},{"line_number":241,"context_line":"                   vref[\u0027id\u0027])"},{"line_number":242,"context_line":"            LOG.error(msg)"},{"line_number":243,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a740942_f7d167ce","line":240,"updated":"2015-12-04 20:12:59.000000000","message":"Same","commit_id":"5064b681d78e8f44e708875524efc20417238a37"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"323a96c11ad7da57874e7ddc3e332fcfd3edf737","unresolved":false,"context_lines":[{"line_number":237,"context_line":"                vref[\u0027name\u0027], self.target[\u0027pool_name\u0027])"},{"line_number":238,"context_line":"            self.driver._helpers.rm_vdisk_copy(vref[\u0027name\u0027], copy_id)"},{"line_number":239,"context_line":"        except Exception:"},{"line_number":240,"context_line":"            msg \u003d (_LE(\u0027Unable to disable the replication for volume %s.\u0027),"},{"line_number":241,"context_line":"                   vref[\u0027id\u0027])"},{"line_number":242,"context_line":"            LOG.error(msg)"},{"line_number":243,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a740942_98cb531e","line":240,"in_reply_to":"7a740942_f7d167ce","updated":"2015-12-07 06:00:42.000000000","message":"Done","commit_id":"5064b681d78e8f44e708875524efc20417238a37"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"1b6ccc9f79f0a9c160bf4bda16e30ad5dd3594b2","unresolved":false,"context_lines":[{"line_number":248,"context_line":"    def replication_failover(self, context, vref, secondary):"},{"line_number":249,"context_line":"        # For the mode of split IO, the replication target must be"},{"line_number":250,"context_line":"        # on the same Storwize storage and managed by the same SVC control"},{"line_number":251,"context_line":"        # panel."},{"line_number":252,"context_line":"        if not self.target or self.target.get(\u0027target_device_id\u0027) !\u003d secondary:"},{"line_number":253,"context_line":"            msg \u003d _LE(\"A valid secondary target MUST be specified in order \""},{"line_number":254,"context_line":"                      \"to failover.\")"}],"source_content_type":"text/x-python","patch_set":38,"id":"9a8ffd7b_dd643c23","line":251,"updated":"2015-12-02 17:45:35.000000000","message":"Seems like we\u0027re only validating that self.target is not None in some of these functions (i.e. we\u0027re not validating it in replication_enable/disable) - seems like we\u0027d either only verify once or setup or in all the methods.\n\nAlso instead of consistently doing the check for \"not self.target\" we can default it to {} instead of None","commit_id":"5064b681d78e8f44e708875524efc20417238a37"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"323a96c11ad7da57874e7ddc3e332fcfd3edf737","unresolved":false,"context_lines":[{"line_number":248,"context_line":"    def replication_failover(self, context, vref, secondary):"},{"line_number":249,"context_line":"        # For the mode of split IO, the replication target must be"},{"line_number":250,"context_line":"        # on the same Storwize storage and managed by the same SVC control"},{"line_number":251,"context_line":"        # panel."},{"line_number":252,"context_line":"        if not self.target or self.target.get(\u0027target_device_id\u0027) !\u003d secondary:"},{"line_number":253,"context_line":"            msg \u003d _LE(\"A valid secondary target MUST be specified in order \""},{"line_number":254,"context_line":"                      \"to failover.\")"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a740942_18ad2331","line":251,"in_reply_to":"9a8ffd7b_dd643c23","updated":"2015-12-07 06:00:42.000000000","message":"I think I can put the validation of self.target in the setup.","commit_id":"5064b681d78e8f44e708875524efc20417238a37"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"1b6ccc9f79f0a9c160bf4bda16e30ad5dd3594b2","unresolved":false,"context_lines":[{"line_number":259,"context_line":"            copy_id \u003d self.driver._helpers.find_vdisk_copy_id("},{"line_number":260,"context_line":"                vref[\u0027name\u0027], self.target[\u0027pool_name\u0027])"},{"line_number":261,"context_line":"            self.driver._helpers.change_vdisk_primary_copy(vref[\u0027name\u0027],"},{"line_number":262,"context_line":"                                                           copy_id)"},{"line_number":263,"context_line":"        except Exception:"},{"line_number":264,"context_line":"            msg \u003d (_LE(\u0027Unable to failover the replication for volume %s.\u0027),"},{"line_number":265,"context_line":"                   vref[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":38,"id":"9a8ffd7b_30e24f30","line":262,"updated":"2015-12-02 17:45:35.000000000","message":"Do we know more specifically which Exception we expect we\u0027d be hitting?","commit_id":"5064b681d78e8f44e708875524efc20417238a37"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"323a96c11ad7da57874e7ddc3e332fcfd3edf737","unresolved":false,"context_lines":[{"line_number":259,"context_line":"            copy_id \u003d self.driver._helpers.find_vdisk_copy_id("},{"line_number":260,"context_line":"                vref[\u0027name\u0027], self.target[\u0027pool_name\u0027])"},{"line_number":261,"context_line":"            self.driver._helpers.change_vdisk_primary_copy(vref[\u0027name\u0027],"},{"line_number":262,"context_line":"                                                           copy_id)"},{"line_number":263,"context_line":"        except Exception:"},{"line_number":264,"context_line":"            msg \u003d (_LE(\u0027Unable to failover the replication for volume %s.\u0027),"},{"line_number":265,"context_line":"                   vref[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a740942_987d93e9","line":262,"in_reply_to":"9a8ffd7b_30e24f30","updated":"2015-12-07 06:00:42.000000000","message":"I have been thinking of this for a while, but it seems that no specific exceptions are raised in self.driver._helpers.\nIMO, perhaps we may add some specific exceptions for Storwize later. It can be a valid workaround.","commit_id":"5064b681d78e8f44e708875524efc20417238a37"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f5e90004725dd8e7e0c659cdf7c8e24474b7de12","unresolved":false,"context_lines":[{"line_number":261,"context_line":"            self.driver._helpers.change_vdisk_primary_copy(vref[\u0027name\u0027],"},{"line_number":262,"context_line":"                                                           copy_id)"},{"line_number":263,"context_line":"        except Exception:"},{"line_number":264,"context_line":"            msg \u003d (_LE(\u0027Unable to failover the replication for volume %s.\u0027),"},{"line_number":265,"context_line":"                   vref[\u0027id\u0027])"},{"line_number":266,"context_line":"            LOG.error(msg)"},{"line_number":267,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a740942_57995b1e","line":264,"updated":"2015-12-04 20:12:59.000000000","message":"Using _ instead of _LE","commit_id":"5064b681d78e8f44e708875524efc20417238a37"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"323a96c11ad7da57874e7ddc3e332fcfd3edf737","unresolved":false,"context_lines":[{"line_number":261,"context_line":"            self.driver._helpers.change_vdisk_primary_copy(vref[\u0027name\u0027],"},{"line_number":262,"context_line":"                                                           copy_id)"},{"line_number":263,"context_line":"        except Exception:"},{"line_number":264,"context_line":"            msg \u003d (_LE(\u0027Unable to failover the replication for volume %s.\u0027),"},{"line_number":265,"context_line":"                   vref[\u0027id\u0027])"},{"line_number":266,"context_line":"            LOG.error(msg)"},{"line_number":267,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a740942_78c8e722","line":264,"in_reply_to":"7a740942_57995b1e","updated":"2015-12-07 06:00:42.000000000","message":"Done","commit_id":"5064b681d78e8f44e708875524efc20417238a37"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"1b6ccc9f79f0a9c160bf4bda16e30ad5dd3594b2","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        return model_update"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def list_replication_targets(self, context, vref):"},{"line_number":273,"context_line":"        # For the mode of split IO, there is only one replication target."},{"line_number":274,"context_line":"        if not self.replication_targets and self.target:"},{"line_number":275,"context_line":"            target \u003d {\u0027target_device_id\u0027: self.target[\u0027target_device_id\u0027]}"},{"line_number":276,"context_line":"            self.replication_targets.append(target)"}],"source_content_type":"text/x-python","patch_set":38,"id":"9a8ffd7b_10c62b68","line":273,"updated":"2015-12-02 17:45:35.000000000","message":"Since this is only a length of one and target doesn\u0027t seem to change can\u0027t we just set self.replication_targets to the proper value in init instead of appending it here?","commit_id":"5064b681d78e8f44e708875524efc20417238a37"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"323a96c11ad7da57874e7ddc3e332fcfd3edf737","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        return model_update"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def list_replication_targets(self, context, vref):"},{"line_number":273,"context_line":"        # For the mode of split IO, there is only one replication target."},{"line_number":274,"context_line":"        if not self.replication_targets and self.target:"},{"line_number":275,"context_line":"            target \u003d {\u0027target_device_id\u0027: self.target[\u0027target_device_id\u0027]}"},{"line_number":276,"context_line":"            self.replication_targets.append(target)"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a740942_b84f2fbc","line":273,"in_reply_to":"9a8ffd7b_10c62b68","updated":"2015-12-07 06:00:42.000000000","message":"I think I can make it that way.","commit_id":"5064b681d78e8f44e708875524efc20417238a37"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"eebb51666eaab00afe0459ba3597fc73336b3fca","unresolved":false,"context_lines":[{"line_number":221,"context_line":"            self.driver.add_vdisk_copy(vref[\u0027name\u0027], self.target[\u0027pool_name\u0027],"},{"line_number":222,"context_line":"                                       vol_type)"},{"line_number":223,"context_line":"        except Exception:"},{"line_number":224,"context_line":"            msg \u003d (_(\u0027Unable to enable the replication for volume %s.\u0027),"},{"line_number":225,"context_line":"                   vref[\u0027id\u0027])"},{"line_number":226,"context_line":"            LOG.error(msg)"},{"line_number":227,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":46,"id":"5a710552_ccb422d3","line":224,"updated":"2015-12-14 20:34:54.000000000","message":"Suggest:  Unable to enablereplication for volume %s.\n\nI also think, given that this is kind-of a catch-all that we should print the exception:\n\nUnable to enable replication for volume %s.  Exception:  %s .","commit_id":"67e3c9b147def7786fa0a63fc6109651d539ec90"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"eebb51666eaab00afe0459ba3597fc73336b3fca","unresolved":false,"context_lines":[{"line_number":242,"context_line":"                vref[\u0027name\u0027], self.target[\u0027pool_name\u0027])"},{"line_number":243,"context_line":"            self.driver._helpers.rm_vdisk_copy(vref[\u0027name\u0027], copy_id)"},{"line_number":244,"context_line":"        except Exception:"},{"line_number":245,"context_line":"            msg \u003d (_(\u0027Unable to disable the replication for volume %s.\u0027),"},{"line_number":246,"context_line":"                   vref[\u0027id\u0027])"},{"line_number":247,"context_line":"            LOG.error(msg)"},{"line_number":248,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":46,"id":"5a710552_2cf2869b","line":245,"updated":"2015-12-14 20:34:54.000000000","message":"Same here:\n\nUnable to disable replication for volume %s.  Exception: %s .","commit_id":"67e3c9b147def7786fa0a63fc6109651d539ec90"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"eebb51666eaab00afe0459ba3597fc73336b3fca","unresolved":false,"context_lines":[{"line_number":266,"context_line":"            self.driver._helpers.change_vdisk_primary_copy(vref[\u0027name\u0027],"},{"line_number":267,"context_line":"                                                           copy_id)"},{"line_number":268,"context_line":"        except Exception:"},{"line_number":269,"context_line":"            msg \u003d (_(\u0027Unable to failover the replication for volume %s.\u0027),"},{"line_number":270,"context_line":"                   vref[\u0027id\u0027])"},{"line_number":271,"context_line":"            LOG.error(msg)"},{"line_number":272,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":46,"id":"5a710552_ac9e7605","line":269,"updated":"2015-12-14 20:34:54.000000000","message":"Same here: \n\n\u0027Unable to failover replication for volume %s.  Exception: %s .\u0027","commit_id":"67e3c9b147def7786fa0a63fc6109651d539ec90"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"ce20ac91bbbf05fb077529ecacce3a9edfa1201f","unresolved":false,"context_lines":[{"line_number":280,"context_line":"    def list_replication_targets(self, context, vref):"},{"line_number":281,"context_line":"        # For the mode of split IO, there is only one replication target."},{"line_number":282,"context_line":"        return {\u0027volume_id\u0027: vref[\u0027id\u0027],"},{"line_number":283,"context_line":"                \u0027targets\u0027: self.replication_targets}"}],"source_content_type":"text/x-python","patch_set":54,"id":"3a7e1126_116de630","line":283,"range":{"start_line":283,"start_character":27,"end_line":283,"end_character":51},"updated":"2015-12-18 14:36:17.000000000","message":"Although only the target_device_id will be printed out, just note that you are going to be passing things like login credentials outside of your driver.","commit_id":"9cabbf8953df62d52b9e99cb7929687bee7918bd"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5c98518c24aade53e29b69c3a0af288a1035eda2","unresolved":false,"context_lines":[{"line_number":260,"context_line":"            msg \u003d _LE(\"A valid secondary target MUST be specified in order \""},{"line_number":261,"context_line":"                      \"to failover.\")"},{"line_number":262,"context_line":"            LOG.error(msg)"},{"line_number":263,"context_line":"            return None"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        try:"},{"line_number":266,"context_line":"            copy_id \u003d self.driver._helpers.find_vdisk_copy_id("}],"source_content_type":"text/x-python","patch_set":57,"id":"fa69d971_6306e087","line":263,"updated":"2016-01-04 23:21:10.000000000","message":"Should an exception be thrown here as failover cannot happen?","commit_id":"cd77830208d8ff5b6c42aa09cb5544037ffa6075"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"38c5b69dc55221b78f2ed0f01ffeec676dbaee5d","unresolved":false,"context_lines":[{"line_number":280,"context_line":"    def list_replication_targets(self, context, vref):"},{"line_number":281,"context_line":"        # For the mode of split IO, there is only one replication target."},{"line_number":282,"context_line":"        return {\u0027volume_id\u0027: vref[\u0027id\u0027],"},{"line_number":283,"context_line":"                \u0027targets\u0027: self.replication_targets}"}],"source_content_type":"text/x-python","patch_set":57,"id":"fa69d971_8bc66998","line":283,"range":{"start_line":283,"start_character":27,"end_line":283,"end_character":51},"updated":"2016-01-05 16:26:34.000000000","message":"I still don\u0027t like the idea of passing the entire replication_targets list outside of the driver. It will include all sorts of information (ie login credentials) that is not needed and may be sensitive. Only the target_device_id will be printed, but this information will still be returned. \n\nPersonally, I think it should be changed to only return the target_device_id.","commit_id":"cd77830208d8ff5b6c42aa09cb5544037ffa6075"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ea49bba20459ee879658e05c0cabd9b45cac5d64","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        super(StorwizeSVCReplicationGlobalMirror, self).__init__("},{"line_number":228,"context_line":"            driver, replication_target)"},{"line_number":229,"context_line":"        self.sshpool \u003d None"},{"line_number":230,"context_line":"        from cinder.volume.drivers.ibm.storwize_svc import storwize_svc_common"},{"line_number":231,"context_line":"        self.target_helpers \u003d storwize_svc_common.StorwizeHelpers("},{"line_number":232,"context_line":"            self._run_ssh)"},{"line_number":233,"context_line":""}],"source_content_type":"text/x-python","patch_set":64,"id":"5a5ae5dd_56039d0d","line":230,"updated":"2016-02-04 04:36:52.000000000","message":"Please move import to the beginning of the file.","commit_id":"b6d01d6d7c6bfbfbe1f50491f96fb30f9a5f98b7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ea49bba20459ee879658e05c0cabd9b45cac5d64","unresolved":false,"context_lines":[{"line_number":286,"context_line":"                        return processutils.ssh_execute("},{"line_number":287,"context_line":"                            ssh, command, check_exit_code\u003dcheck_exit_code)"},{"line_number":288,"context_line":"                    except Exception as e:"},{"line_number":289,"context_line":"                        LOG.error(e)"},{"line_number":290,"context_line":"                        last_exception \u003d e"},{"line_number":291,"context_line":"                        greenthread.sleep(random.randint(20, 500) / 100.0)"},{"line_number":292,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":64,"id":"5a5ae5dd_763579d8","line":289,"updated":"2016-02-04 04:36:52.000000000","message":"six.text_type(e)","commit_id":"b6d01d6d7c6bfbfbe1f50491f96fb30f9a5f98b7"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"877a563d2ea53d9983905f6b6b33b50ec0d0289b","unresolved":false,"context_lines":[{"line_number":211,"context_line":""},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"class StorwizeSVCReplicationGlobalMirror("},{"line_number":214,"context_line":"        StorwizeSVCReplicationStretchedCluster):"},{"line_number":215,"context_line":"    \"\"\"Support for Storwize/SVC global mirror mode replication."},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    Global Mirror establishes a Global Mirror relationship between"}],"source_content_type":"text/x-python","patch_set":65,"id":"5a5ae5dd_51726312","line":214,"updated":"2016-02-05 21:58:30.000000000","message":"Would be nice to mention that Global Mirror is asynchronous in this description.","commit_id":"172916824314290f100031954cdf1db750749c20"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"877a563d2ea53d9983905f6b6b33b50ec0d0289b","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        self._partnership_validate_create(self.target_helpers,"},{"line_number":262,"context_line":"                                          local_system_name, local_ip)"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"    def _run_ssh(self, cmd_list, check_exit_code\u003dTrue, attempts\u003d1):"},{"line_number":265,"context_line":"        utils.check_ssh_injection(cmd_list)"},{"line_number":266,"context_line":"        command \u003d \u0027 \u0027. join(cmd_list)"},{"line_number":267,"context_line":""}],"source_content_type":"text/x-python","patch_set":65,"id":"5a5ae5dd_91af7b29","line":264,"updated":"2016-02-05 21:58:30.000000000","message":"Definitely out of scope for this patch, but in general would be nice if we could refactor the san driver\u0027s _run_ssh to be more flexible so we don\u0027t need to duplicate such similar code.","commit_id":"172916824314290f100031954cdf1db750749c20"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"89dabe338d3a84fac3b0ceda7c6235ffd4eb1160","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        self._partnership_validate_create(self.target_helpers,"},{"line_number":262,"context_line":"                                          local_system_name, local_ip)"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"    def _run_ssh(self, cmd_list, check_exit_code\u003dTrue, attempts\u003d1):"},{"line_number":265,"context_line":"        utils.check_ssh_injection(cmd_list)"},{"line_number":266,"context_line":"        command \u003d \u0027 \u0027. join(cmd_list)"},{"line_number":267,"context_line":""}],"source_content_type":"text/x-python","patch_set":65,"id":"5a5ae5dd_87dc1974","line":264,"updated":"2016-02-05 22:01:08.000000000","message":"This function looks identical to the function in san.py.  I think it is better to write a common function and put it in ssh_utils.  Since there will be rework after replication v2.1 lands, I\u0027m fine to have this merged now and make this a common function later.\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/san/san.py#L103","commit_id":"172916824314290f100031954cdf1db750749c20"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"877a563d2ea53d9983905f6b6b33b50ec0d0289b","unresolved":false,"context_lines":[{"line_number":358,"context_line":"                     \u0027due to %(err)s.\u0027), {\u0027volume\u0027: vref[\u0027id\u0027], \u0027err\u0027: e})"},{"line_number":359,"context_line":"            LOG.error(msg)"},{"line_number":360,"context_line":"            raise exception.VolumeDriverException(data\u003dmsg)"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        if rel_info and rel_info[\u0027aux_vdisk_name\u0027]:"},{"line_number":363,"context_line":"            try:"},{"line_number":364,"context_line":"                self.driver._helpers.delete_relationship(vref[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":65,"id":"5a5ae5dd_ec3852a2","line":361,"updated":"2016-02-05 21:58:30.000000000","message":"Can aux_vdisk_name key ever not be present (as opposed to being present with no value)? If so we should do a .get() to avoid key error","commit_id":"172916824314290f100031954cdf1db750749c20"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"877a563d2ea53d9983905f6b6b33b50ec0d0289b","unresolved":false,"context_lines":[{"line_number":380,"context_line":"                     \u0027due to %(err)s\u0027), {\u0027volume\u0027: vref[\u0027id\u0027], \u0027err\u0027: e})"},{"line_number":381,"context_line":"            LOG.error(msg)"},{"line_number":382,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"        if not rel_info or not rel_info[\u0027aux_vdisk_name\u0027]:"},{"line_number":385,"context_line":"            self.volume_replication_setup(context, vref)"},{"line_number":386,"context_line":""}],"source_content_type":"text/x-python","patch_set":65,"id":"5a5ae5dd_2c6aea81","line":383,"updated":"2016-02-05 21:58:30.000000000","message":"Same comment as above","commit_id":"172916824314290f100031954cdf1db750749c20"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"877a563d2ea53d9983905f6b6b33b50ec0d0289b","unresolved":false,"context_lines":[{"line_number":396,"context_line":"        if not self.target or self.target.get(\u0027target_device_id\u0027) !\u003d secondary:"},{"line_number":397,"context_line":"            msg \u003d _LE(\"A valid secondary target MUST be specified in order \""},{"line_number":398,"context_line":"                      \"to failover.\")"},{"line_number":399,"context_line":"            LOG.error(msg)"},{"line_number":400,"context_line":"            return None"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":65,"id":"5a5ae5dd_0c336eac","line":399,"updated":"2016-02-05 21:58:30.000000000","message":"If we just log the error but don\u0027t throw an exception, will the failover succeed even though we haven\u0027t actually failed over?","commit_id":"172916824314290f100031954cdf1db750749c20"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"877a563d2ea53d9983905f6b6b33b50ec0d0289b","unresolved":false,"context_lines":[{"line_number":417,"context_line":"                        \u0027_name_id\u0027: target_vol_id}"},{"line_number":418,"context_line":"        return model_update"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"    def list_replication_targets(self, context, vref):"},{"line_number":421,"context_line":"        # For the mode of split IO, there is only one replication target."},{"line_number":422,"context_line":"        return [{\u0027target_device_id\u0027: self.target.get(\u0027target_device_id\u0027)}]"},{"line_number":423,"context_line":""}],"source_content_type":"text/x-python","patch_set":65,"id":"5a5ae5dd_eca292ad","line":420,"updated":"2016-02-05 21:58:30.000000000","message":"Shouldn\u0027t be talking about split IO here","commit_id":"172916824314290f100031954cdf1db750749c20"}],"cinder/volume/drivers/ibm/storwize_svc/storwize_svc_common.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5c98518c24aade53e29b69c3a0af288a1035eda2","unresolved":false,"context_lines":[{"line_number":2192,"context_line":"                    msg \u003d _(\"All the replication modes in Storwize only \""},{"line_number":2193,"context_line":"                            \"expects the managed back-end.\")"},{"line_number":2194,"context_line":"                    LOG.error(msg)"},{"line_number":2195,"context_line":"                    raise exception.InvalidConfigurationValue(msg)"},{"line_number":2196,"context_line":"                rep_mode \u003d dev.get(\u0027replication_mode\u0027)"},{"line_number":2197,"context_line":"                remote_array[\u0027replication_mode\u0027] \u003d rep_mode"},{"line_number":2198,"context_line":"                remote_array[\u0027san_ip\u0027] \u003d ("}],"source_content_type":"text/x-python","patch_set":57,"id":"fa69d971_a3a85821","line":2195,"updated":"2016-01-04 23:21:10.000000000","message":"See correct usage here:\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/utils.py#L497","commit_id":"cd77830208d8ff5b6c42aa09cb5544037ffa6075"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5c98518c24aade53e29b69c3a0af288a1035eda2","unresolved":false,"context_lines":[{"line_number":2204,"context_line":"                                \"on the same storage back-end as \""},{"line_number":2205,"context_line":"                                \"the source.\")"},{"line_number":2206,"context_line":"                        LOG.error(msg)"},{"line_number":2207,"context_line":"                        raise exception.InvalidConfigurationValue(msg)"},{"line_number":2208,"context_line":"                remote_array[\u0027target_device_id\u0027] \u003d ("},{"line_number":2209,"context_line":"                    dev.get(\u0027target_device_id\u0027))"},{"line_number":2210,"context_line":"                remote_array[\u0027san_login\u0027] \u003d ("}],"source_content_type":"text/x-python","patch_set":57,"id":"fa69d971_c3a54c47","line":2207,"updated":"2016-01-04 23:21:10.000000000","message":"Same","commit_id":"cd77830208d8ff5b6c42aa09cb5544037ffa6075"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"d794050d2f770086bc427840e81232119a784faa","unresolved":false,"context_lines":[{"line_number":2220,"context_line":"            # Each replication type will have a coresponding replication."},{"line_number":2221,"context_line":"            self.create_replication_types(replication_targets)"},{"line_number":2222,"context_line":""},{"line_number":2223,"context_line":"            # This driver is enabled with relication configuration."},{"line_number":2224,"context_line":"            self._replication_enabled \u003d True"},{"line_number":2225,"context_line":""},{"line_number":2226,"context_line":"    def create_replication_types(self, replication_targets):"}],"source_content_type":"text/x-python","patch_set":57,"id":"fa69d971_8bb954ce","line":2223,"range":{"start_line":2223,"start_character":42,"end_line":2223,"end_character":52},"updated":"2016-01-06 16:59:47.000000000","message":"relication -\u003e replication","commit_id":"cd77830208d8ff5b6c42aa09cb5544037ffa6075"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ea49bba20459ee879658e05c0cabd9b45cac5d64","unresolved":false,"context_lines":[{"line_number":1465,"context_line":"            rc_id \u003d self.ssh.mkrcrelationship(master, aux, system, name,"},{"line_number":1466,"context_line":"                                              asyncmirror)"},{"line_number":1467,"context_line":"        except exception.VolumeBackendAPIException as e:"},{"line_number":1468,"context_line":"            if \u0027CMMVC5959E\u0027 not in e:"},{"line_number":1469,"context_line":"                raise"},{"line_number":1470,"context_line":"        if rc_id:"},{"line_number":1471,"context_line":"            self.start_relationship(master)"}],"source_content_type":"text/x-python","patch_set":64,"id":"5a5ae5dd_e2b68489","line":1468,"updated":"2016-02-04 04:36:52.000000000","message":"What does CMMVC5959E mean?  Can you add a comment to explain?","commit_id":"b6d01d6d7c6bfbfbe1f50491f96fb30f9a5f98b7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ea49bba20459ee879658e05c0cabd9b45cac5d64","unresolved":false,"context_lines":[{"line_number":2422,"context_line":"    def get_replication_updates(self, context):"},{"line_number":2423,"context_line":"        # TODO(vhou): the manager does not need to do anything so far."},{"line_number":2424,"context_line":"        errors \u003d []"},{"line_number":2425,"context_line":"        return errors"},{"line_number":2426,"context_line":""},{"line_number":2427,"context_line":"    def migrate_volume(self, ctxt, volume, host):"},{"line_number":2428,"context_line":"        \"\"\"Migrate directly if source and dest are managed by same storage."}],"source_content_type":"text/x-python","patch_set":64,"id":"5a5ae5dd_421c3877","line":2425,"updated":"2016-02-04 04:36:52.000000000","message":"Can you rename \"errors\" to something else such as \"updates\" because this may not be errors.","commit_id":"b6d01d6d7c6bfbfbe1f50491f96fb30f9a5f98b7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"89dabe338d3a84fac3b0ceda7c6235ffd4eb1160","unresolved":false,"context_lines":[{"line_number":2121,"context_line":"                rel_info \u003d self._helpers.get_relationship_info(volume)"},{"line_number":2122,"context_line":"                self._helpers.delete_relationship(volume)"},{"line_number":2123,"context_line":"            except Exception as e:"},{"line_number":2124,"context_line":"                msg \u003d (_(\u0027Fail to get remote copy information for %(volume)s. \u0027"},{"line_number":2125,"context_line":"                         \u0027Exception: %(err)s.\u0027), {\u0027volume\u0027: volume[\u0027id\u0027],"},{"line_number":2126,"context_line":"                                                  \u0027err\u0027: e})"},{"line_number":2127,"context_line":"                LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":65,"id":"5a5ae5dd_d8a2f8ad","line":2124,"updated":"2016-02-05 22:01:08.000000000","message":"nit: s/fail/failed","commit_id":"172916824314290f100031954cdf1db750749c20"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"877a563d2ea53d9983905f6b6b33b50ec0d0289b","unresolved":false,"context_lines":[{"line_number":2330,"context_line":""},{"line_number":2331,"context_line":"    def _get_volume_replicated_type_mirror(self, ctxt, volume):"},{"line_number":2332,"context_line":"        rep_type \u003d self._get_volume_replicated_type(ctxt, volume)"},{"line_number":2333,"context_line":"        if rep_type in (\u0027global\u0027, \u0027metro\u0027):"},{"line_number":2334,"context_line":"            return rep_type"},{"line_number":2335,"context_line":"        else:"},{"line_number":2336,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":65,"id":"5a5ae5dd_51a82377","line":2333,"updated":"2016-02-05 21:58:30.000000000","message":"Would be better to use the self.GLOBAL / self.METRO constants here","commit_id":"172916824314290f100031954cdf1db750749c20"}]}
