)]}'
{"cinderclient/tests/unit/v2/test_shell.py":[{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"edfd54eb0984cf45a8264598a7bbf831d17383a3","unresolved":false,"context_lines":[{"line_number":781,"context_line":"        self.assert_called(\u0027POST\u0027, \u0027/volumes/1234/action\u0027)"},{"line_number":782,"context_line":""},{"line_number":783,"context_line":"    def test_replication_list_targets(self):"},{"line_number":784,"context_line":"        self.run_command(\u0027replication-list-targets 1234\u0027)"},{"line_number":785,"context_line":"        self.assert_called(\u0027POST\u0027, \u0027/volumes/1234/action\u0027)"},{"line_number":786,"context_line":""},{"line_number":787,"context_line":"    def test_replication_failover(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a8ffd7b_e5523edd","line":784,"updated":"2015-11-24 21:52:16.000000000","message":"Why is listing doing a POST?","commit_id":"b8e118f5c271fb91cbc17a8553dba5f7fcedb2bc"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"24cfb6ab67a23848704e5f648ef38cf8d3a2c8ee","unresolved":false,"context_lines":[{"line_number":781,"context_line":"        self.assert_called(\u0027POST\u0027, \u0027/volumes/1234/action\u0027)"},{"line_number":782,"context_line":""},{"line_number":783,"context_line":"    def test_replication_list_targets(self):"},{"line_number":784,"context_line":"        self.run_command(\u0027replication-list-targets 1234\u0027)"},{"line_number":785,"context_line":"        self.assert_called(\u0027POST\u0027, \u0027/volumes/1234/action\u0027)"},{"line_number":786,"context_line":""},{"line_number":787,"context_line":"    def test_replication_failover(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a8ffd7b_56b8b02a","line":784,"in_reply_to":"9a8ffd7b_e5523edd","updated":"2015-11-30 19:12:54.000000000","message":"see the response in the volumes.py","commit_id":"b8e118f5c271fb91cbc17a8553dba5f7fcedb2bc"}],"cinderclient/v2/shell.py":[{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"8764c2d58b1c8cb0725b8cbc492c6720fed7d148","unresolved":false,"context_lines":[{"line_number":1210,"context_line":"           metavar\u003d\u0027\u003cvolume\u003e\u0027,"},{"line_number":1211,"context_line":"           help\u003d\u0027ID of volume to enable replication.\u0027)"},{"line_number":1212,"context_line":"@utils.service_type(\u0027volumev2\u0027)"},{"line_number":1213,"context_line":"def do_v2_replication_enable(cs, args):"},{"line_number":1214,"context_line":"    \"\"\"Enables v2 volume replication on a given volume.\"\"\""},{"line_number":1215,"context_line":"    volume \u003d utils.find_volume(cs, args.volume)"},{"line_number":1216,"context_line":"    volume.v2_replication_enable(args.volume)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_510e7035","line":1213,"updated":"2015-11-24 20:00:46.000000000","message":"I\u0027d really prefer we didn\u0027t do the v2_ prefix thing on all of this.  Is there a strong reason we need to do this?\n\nPromote and reenable are the only overlaps in naming and frankly I thought we had IBM onboard to migrate to V2 so we didn\u0027t have to carry around multiple versions of this?\n\nIt is going to cause confusion if we have to keep it.","commit_id":"b82c7ea44c48a5d44560d40ad4ce97fb37a86172"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"65cb434a5fcb5316ce26d95f161cf46ef6e12eea","unresolved":false,"context_lines":[{"line_number":1210,"context_line":"           metavar\u003d\u0027\u003cvolume\u003e\u0027,"},{"line_number":1211,"context_line":"           help\u003d\u0027ID of volume to enable replication.\u0027)"},{"line_number":1212,"context_line":"@utils.service_type(\u0027volumev2\u0027)"},{"line_number":1213,"context_line":"def do_v2_replication_enable(cs, args):"},{"line_number":1214,"context_line":"    \"\"\"Enables v2 volume replication on a given volume.\"\"\""},{"line_number":1215,"context_line":"    volume \u003d utils.find_volume(cs, args.volume)"},{"line_number":1216,"context_line":"    volume.v2_replication_enable(args.volume)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_11a1c894","line":1213,"in_reply_to":"9a8ffd7b_510e7035","updated":"2015-11-24 20:07:35.000000000","message":"There is not a reason for the v2 suffix. The last patch set I uploaded was far before we had IBM agreeing on migrating away from v1. I haven\u0027t updated this in a while. How about:\n\n-replication-enable\n\n-replication-disable\n\n-replication-failover\n\n-replication-list-targets (or list-replication-targets, either way)","commit_id":"b82c7ea44c48a5d44560d40ad4ce97fb37a86172"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"3422fea2a74fab5570d0e998c123a9a0bbf8e280","unresolved":false,"context_lines":[{"line_number":1238,"context_line":"        targets \u003d body[\u0027targets\u0027]"},{"line_number":1239,"context_line":"        columns \u003d []"},{"line_number":1240,"context_line":"        if targets:"},{"line_number":1241,"context_line":"            for k, v in targets[0].items():"},{"line_number":1242,"context_line":"                columns.append(k)"},{"line_number":1243,"context_line":"            utils.print_list(targets, columns)"},{"line_number":1244,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a2fa921_fd7854f4","line":1241,"updated":"2015-10-07 15:29:38.000000000","message":"I am definitely up for suggestions on how to handle listing replication targets. Since it is entirely up to the driver on what to return for each target and there are no required fields, I figured the best option is to just list everything returned.","commit_id":"b82c7ea44c48a5d44560d40ad4ce97fb37a86172"},{"author":{"_account_id":12112,"name":"Tom Swanson","email":"tom_swanson@dell.com","username":"tomswanson"},"change_message_id":"b75fc458102896866bbf067bd19c65a76d20bac1","unresolved":false,"context_lines":[{"line_number":1238,"context_line":"        targets \u003d body[\u0027targets\u0027]"},{"line_number":1239,"context_line":"        columns \u003d []"},{"line_number":1240,"context_line":"        if targets:"},{"line_number":1241,"context_line":"            for k, v in targets[0].items():"},{"line_number":1242,"context_line":"                columns.append(k)"},{"line_number":1243,"context_line":"            utils.print_list(targets, columns)"},{"line_number":1244,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"da85f559_ddb7eef3","line":1241,"in_reply_to":"7a2fa921_fd7854f4","updated":"2015-11-12 23:00:32.000000000","message":"I would agree.","commit_id":"b82c7ea44c48a5d44560d40ad4ce97fb37a86172"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"65cb434a5fcb5316ce26d95f161cf46ef6e12eea","unresolved":false,"context_lines":[{"line_number":1238,"context_line":"        targets \u003d body[\u0027targets\u0027]"},{"line_number":1239,"context_line":"        columns \u003d []"},{"line_number":1240,"context_line":"        if targets:"},{"line_number":1241,"context_line":"            for k, v in targets[0].items():"},{"line_number":1242,"context_line":"                columns.append(k)"},{"line_number":1243,"context_line":"            utils.print_list(targets, columns)"},{"line_number":1244,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_11cf8857","line":1241,"in_reply_to":"9a8ffd7b_91ee1821","updated":"2015-11-24 20:07:35.000000000","message":"Same here. I haven\u0027t touched this since we standardized. So how about we list:\n\n-type (managed or unmanaged)\n\n-managed_backend_name\n\n-remote_device_id","commit_id":"b82c7ea44c48a5d44560d40ad4ce97fb37a86172"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"8764c2d58b1c8cb0725b8cbc492c6720fed7d148","unresolved":false,"context_lines":[{"line_number":1238,"context_line":"        targets \u003d body[\u0027targets\u0027]"},{"line_number":1239,"context_line":"        columns \u003d []"},{"line_number":1240,"context_line":"        if targets:"},{"line_number":1241,"context_line":"            for k, v in targets[0].items():"},{"line_number":1242,"context_line":"                columns.append(k)"},{"line_number":1243,"context_line":"            utils.print_list(targets, columns)"},{"line_number":1244,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_91ee1821","line":1241,"in_reply_to":"da85f559_ddb7eef3","updated":"2015-11-24 20:00:46.000000000","message":"Actually we do have a required field here, and that\u0027s the device_target_id, I would strongly suggest you only return that for a list.  Keep this simple rather than throwing in everything.\n\nIf later there\u0027s a need for a detailed show or something we can surely visit that.","commit_id":"b82c7ea44c48a5d44560d40ad4ce97fb37a86172"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"4ca8ceaa468a9e37cd043d74764b03bfee564e58","unresolved":false,"context_lines":[{"line_number":1251,"context_line":""},{"line_number":1252,"context_line":"@utils.arg(\u0027volume\u0027,"},{"line_number":1253,"context_line":"           metavar\u003d\u0027\u003cvolume\u003e\u0027,"},{"line_number":1254,"context_line":"           help\u003d\u0027ID of volume to disable replication.\u0027)"},{"line_number":1255,"context_line":"@utils.arg(\u0027secondary\u0027,"},{"line_number":1256,"context_line":"           metavar\u003d\u0027\u003csecondary\u003e\u0027,"},{"line_number":1257,"context_line":"           help\u003d\u0027A unqiue identifier that represents a failover target.\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_d174a0fe","line":1254,"updated":"2015-11-24 20:09:24.000000000","message":"Oops, copy paste error. Will fix this too.","commit_id":"b82c7ea44c48a5d44560d40ad4ce97fb37a86172"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"336c5820098da727b3ab37dccc907fcb10ed5575","unresolved":false,"context_lines":[{"line_number":1238,"context_line":"        targets \u003d body[\u0027targets\u0027]"},{"line_number":1239,"context_line":"        columns \u003d [\u0027target_device_id\u0027]"},{"line_number":1240,"context_line":"        if targets:"},{"line_number":1241,"context_line":"            utils.print_list(targets, columns)"},{"line_number":1242,"context_line":"        else:"},{"line_number":1243,"context_line":"            print(\"There are no replication targets found for volume %s.\" %"},{"line_number":1244,"context_line":"                  args.volume)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a8ffd7b_c0e5a8a8","line":1241,"updated":"2015-11-24 22:07:13.000000000","message":"Optionally could return here so we don\u0027t have the duplicated message, and move single message to bottom outside of any else logic","commit_id":"b8e118f5c271fb91cbc17a8553dba5f7fcedb2bc"},{"author":{"_account_id":16793,"name":"Liucheng Jiang","email":"jiangliucheng@huawei.com","username":"Jiangliucheng"},"change_message_id":"6a6e7663328f9536cf3155fc9fd43c4ccfd82b8f","unresolved":false,"context_lines":[{"line_number":1250,"context_line":"@utils.arg(\u0027volume\u0027,"},{"line_number":1251,"context_line":"           metavar\u003d\u0027\u003cvolume\u003e\u0027,"},{"line_number":1252,"context_line":"           help\u003d\u0027ID of volume to failover.\u0027)"},{"line_number":1253,"context_line":"@utils.arg(\u0027secondary\u0027,"},{"line_number":1254,"context_line":"           metavar\u003d\u0027\u003csecondary\u003e\u0027,"},{"line_number":1255,"context_line":"           help\u003d\u0027A unqiue identifier that represents a failover target.\u0027)"},{"line_number":1256,"context_line":"@utils.service_type(\u0027volumev2\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a8ffd7b_b1334561","line":1253,"updated":"2015-11-30 11:15:46.000000000","message":"\u0027secondary\u0027 is optional. Should we set a default value: None?\nhttps://review.openstack.org/#/c/200269/20/cinder/api/contrib/admin_actions.py","commit_id":"b8e118f5c271fb91cbc17a8553dba5f7fcedb2bc"},{"author":{"_account_id":16917,"name":"Alex O\u0027Rourke","email":"alex.orourke@hpe.com","username":"aorourke"},"change_message_id":"82be92df203cc4a12847ca7555640b0470af84d0","unresolved":false,"context_lines":[{"line_number":1250,"context_line":"@utils.arg(\u0027volume\u0027,"},{"line_number":1251,"context_line":"           metavar\u003d\u0027\u003cvolume\u003e\u0027,"},{"line_number":1252,"context_line":"           help\u003d\u0027ID of volume to failover.\u0027)"},{"line_number":1253,"context_line":"@utils.arg(\u0027secondary\u0027,"},{"line_number":1254,"context_line":"           metavar\u003d\u0027\u003csecondary\u003e\u0027,"},{"line_number":1255,"context_line":"           help\u003d\u0027A unqiue identifier that represents a failover target.\u0027)"},{"line_number":1256,"context_line":"@utils.service_type(\u0027volumev2\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a8ffd7b_f5b75ef3","line":1253,"in_reply_to":"9a8ffd7b_b1334561","updated":"2015-11-30 18:11:47.000000000","message":"I don\u0027t see the point of using None. You can\u0027t really failover to a None device...","commit_id":"b8e118f5c271fb91cbc17a8553dba5f7fcedb2bc"}],"cinderclient/v2/volumes.py":[{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"8764c2d58b1c8cb0725b8cbc492c6720fed7d148","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        \"\"\"Migrate the volume to a new host.\"\"\""},{"line_number":151,"context_line":"        self.manager.migrate_volume(self, host, force_host_copy, lock_volume)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def v2_replication_enable(self, volume):"},{"line_number":154,"context_line":"        \"\"\"Enables v2 volume replication on a given volume.\"\"\""},{"line_number":155,"context_line":"        return self.manager.v2_replication_enable(volume)"},{"line_number":156,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_11db087e","line":153,"updated":"2015-11-24 20:00:46.000000000","message":"Same note about the v2_ prefix, and in this module there\u0027s no overlaps anyway.","commit_id":"b82c7ea44c48a5d44560d40ad4ce97fb37a86172"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"edfd54eb0984cf45a8264598a7bbf831d17383a3","unresolved":false,"context_lines":[{"line_number":641,"context_line":""},{"line_number":642,"context_line":"        :param volume_id: The id of the volume to query"},{"line_number":643,"context_line":"        :return: a list of available replication targets"},{"line_number":644,"context_line":"        \"\"\""},{"line_number":645,"context_line":"        return self._action(\u0027os-list_replication_targets\u0027,"},{"line_number":646,"context_line":"                            volume_id)"},{"line_number":647,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a8ffd7b_850572c3","line":644,"updated":"2015-11-24 21:52:16.000000000","message":"Same question about list using \"POST\" (this is what _action uses)","commit_id":"b8e118f5c271fb91cbc17a8553dba5f7fcedb2bc"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"24cfb6ab67a23848704e5f648ef38cf8d3a2c8ee","unresolved":false,"context_lines":[{"line_number":641,"context_line":""},{"line_number":642,"context_line":"        :param volume_id: The id of the volume to query"},{"line_number":643,"context_line":"        :return: a list of available replication targets"},{"line_number":644,"context_line":"        \"\"\""},{"line_number":645,"context_line":"        return self._action(\u0027os-list_replication_targets\u0027,"},{"line_number":646,"context_line":"                            volume_id)"},{"line_number":647,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a8ffd7b_f623e4a5","line":644,"in_reply_to":"9a8ffd7b_850572c3","updated":"2015-11-30 19:12:54.000000000","message":"I believe this is how the wsgi actions are processed. They look for an action in the body of the request, which implies a non GET / HEAD action.\n\nhttps://github.com/openstack/cinder/blob/master/cinder/api/contrib/admin_actions.py#L316\n\nhttps://github.com/openstack/cinder/blob/master/cinder/api/openstack/wsgi.py#L1107-L1119","commit_id":"b8e118f5c271fb91cbc17a8553dba5f7fcedb2bc"}]}
