)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":10213,"name":"Alon Marx","email":"alonma@il.ibm.com","username":"alonmarx"},"change_message_id":"5f92443a7fccb47191dcaa44338146e83ce1bb91","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Tzur Eliyahu \u003ctzure@il.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-05-29 01:48:51 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[WIP] Ibm storage: Added replication group support"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds group replication capabilities for"},{"line_number":10,"context_line":"the IBM driver."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"df140735_153d352a","line":7,"updated":"2017-06-04 05:48:50.000000000","message":"Better emphasize this change is for A-line","commit_id":"0d6ed6dc373a8386c23a7b48f464b0726f1fefd1"},{"author":{"_account_id":22583,"name":"Cheng Yong Zhao","email":"zhaochy@cn.ibm.com","username":"zhaochy"},"change_message_id":"7c7ea7d952231778bd38236f6e3928b6d5f3c8d9","unresolved":false,"context_lines":[{"line_number":13,"context_line":"* Enable replication on group"},{"line_number":14,"context_line":"* Disable replication on group"},{"line_number":15,"context_line":"* Fail over replication"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: Ic59c568502258096e24ca5ab81dc5b8cd1779995"},{"line_number":18,"context_line":"Depends-On: Ia4af4dd011d569a3ac84387b37dcf2606da48fba"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"5f201791_8029dc37","line":16,"updated":"2017-06-28 09:30:50.000000000","message":"Need a DocImpact tag","commit_id":"cac3a84895b849a3867011b25650ff89bde9df7f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"165f312306ca8f5a0326df549993824eaf9f19f0","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Isaac Beckman \u003cisaacb@il.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-06-29 14:59:04 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Ibm storage: Added replication group support"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds group replication capabilities for"},{"line_number":10,"context_line":"the IBM driver for the A-line system."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"3f1d235d_56c69369","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":11},"updated":"2017-06-30 18:08:41.000000000","message":"XIV","commit_id":"661e91195795fa1808360996f50ac752bf2d12ae"},{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"57f972a54b5723371d84f49f3f5fbb5c1f052a71","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Isaac Beckman \u003cisaacb@il.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-06-29 14:59:04 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Ibm storage: Added replication group support"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds group replication capabilities for"},{"line_number":10,"context_line":"the IBM driver for the A-line system."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"3f1d235d_95c1a9e7","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":11},"in_reply_to":"3f1d235d_56c69369","updated":"2017-07-03 06:50:52.000000000","message":"Done","commit_id":"661e91195795fa1808360996f50ac752bf2d12ae"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"c2119697378c609638cfdbe703d5cc3a3d51bbeb","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This patch adds group replication capabilities for"},{"line_number":10,"context_line":"the IBM driver for the A-line system."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"implements:"},{"line_number":13,"context_line":"* Enable replication on group"},{"line_number":14,"context_line":"* Disable replication on group"},{"line_number":15,"context_line":"* Fail over replication"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: Ic59c568502258096e24ca5ab81dc5b8cd1779995"},{"line_number":18,"context_line":"Depends-On: Ia4af4dd011d569a3ac84387b37dcf2606da48fba"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"3f1d235d_3b21e94e","line":15,"range":{"start_line":12,"start_character":0,"end_line":15,"end_character":23},"updated":"2017-06-29 16:59:14.000000000","message":"Are these all blueprints? If they aren\u0027t I would just make one bp for adding replication group support to IBM Storage. \n\nThe syntax should be:\nImplements: bp \u003cname-of-bp-here\u003e","commit_id":"661e91195795fa1808360996f50ac752bf2d12ae"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"b851b11a6c27781d0659b332815ad2576f73044a","unresolved":false,"context_lines":[{"line_number":12,"context_line":"implements:"},{"line_number":13,"context_line":"* Enable replication on group"},{"line_number":14,"context_line":"* Disable replication on group"},{"line_number":15,"context_line":"* Fail over replication"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: Ic59c568502258096e24ca5ab81dc5b8cd1779995"},{"line_number":18,"context_line":"Depends-On: Ia4af4dd011d569a3ac84387b37dcf2606da48fba"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"3f1d235d_6d91d999","line":15,"range":{"start_line":15,"start_character":12,"end_line":15,"end_character":23},"updated":"2017-06-30 04:02:43.000000000","message":"you should add one more item get_replication_error_status and implement it in the driver.","commit_id":"661e91195795fa1808360996f50ac752bf2d12ae"},{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"57f972a54b5723371d84f49f3f5fbb5c1f052a71","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This patch adds group replication capabilities for"},{"line_number":10,"context_line":"the IBM driver for the A-line system."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"implements:"},{"line_number":13,"context_line":"* Enable replication on group"},{"line_number":14,"context_line":"* Disable replication on group"},{"line_number":15,"context_line":"* Fail over replication"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: Ic59c568502258096e24ca5ab81dc5b8cd1779995"},{"line_number":18,"context_line":"Depends-On: Ia4af4dd011d569a3ac84387b37dcf2606da48fba"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"3f1d235d_d58de1d3","line":15,"range":{"start_line":12,"start_character":0,"end_line":15,"end_character":23},"in_reply_to":"3f1d235d_3b21e94e","updated":"2017-07-03 06:50:52.000000000","message":"Done","commit_id":"661e91195795fa1808360996f50ac752bf2d12ae"},{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"57f972a54b5723371d84f49f3f5fbb5c1f052a71","unresolved":false,"context_lines":[{"line_number":12,"context_line":"implements:"},{"line_number":13,"context_line":"* Enable replication on group"},{"line_number":14,"context_line":"* Disable replication on group"},{"line_number":15,"context_line":"* Fail over replication"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: Ic59c568502258096e24ca5ab81dc5b8cd1779995"},{"line_number":18,"context_line":"Depends-On: Ia4af4dd011d569a3ac84387b37dcf2606da48fba"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"3f1d235d_b5bee562","line":15,"range":{"start_line":15,"start_character":12,"end_line":15,"end_character":23},"in_reply_to":"3f1d235d_6d91d999","updated":"2017-07-03 06:50:52.000000000","message":"Done","commit_id":"661e91195795fa1808360996f50ac752bf2d12ae"}],"cinder/tests/unit/volume/drivers/ibm/test_xiv_proxy.py":[{"author":{"_account_id":10213,"name":"Alon Marx","email":"alonma@il.ibm.com","username":"alonmarx"},"change_message_id":"5f92443a7fccb47191dcaa44338146e83ce1bb91","unresolved":false,"context_lines":[{"line_number":386,"context_line":"                  [{\u0027id\u0027: vol[\u0027id\u0027], \u0027replication_status\u0027:"},{"line_number":387,"context_line":"                    fields.ReplicationStatus.ENABLED}]))"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"    def test_create_volume_with_consistency_group(self):"},{"line_number":390,"context_line":"        \"\"\"Test Create volume with consistency_group\"\"\""},{"line_number":391,"context_line":"        driver \u003d mock.MagicMock()"},{"line_number":392,"context_line":"        driver.VERSION \u003d \"VERSION\""}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_951a65c9","line":389,"updated":"2017-06-04 05:48:50.000000000","message":"Need to cover the additional functions added in this patch","commit_id":"0d6ed6dc373a8386c23a7b48f464b0726f1fefd1"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"165f312306ca8f5a0326df549993824eaf9f19f0","unresolved":false,"context_lines":[{"line_number":504,"context_line":"        ret \u003d xiv_replication.Replication(p)._failover_resource("},{"line_number":505,"context_line":"            group, recovery_mgr, mock.MagicMock, \u0027cg\u0027, True)"},{"line_number":506,"context_line":""},{"line_number":507,"context_line":"        self.assertEqual(ret, (True, None))"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"    def test_failover_resource_change_role(self):"},{"line_number":510,"context_line":"        driver \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f1d235d_368af71a","line":507,"range":{"start_line":507,"start_character":8,"end_line":507,"end_character":43},"updated":"2017-06-30 18:08:41.000000000","message":"Reversed.  Should be \n\nself.assertEqual((True, None), ret)","commit_id":"661e91195795fa1808360996f50ac752bf2d12ae"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e23d42946282bdaab3281259404274549eaa70bd","unresolved":false,"context_lines":[{"line_number":399,"context_line":"        ret \u003d p.enable_replication(self.ctxt, group, [vol])"},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"        self.assertEqual("},{"line_number":402,"context_line":"            ret, ({\u0027replication\u0027"},{"line_number":403,"context_line":"                   \u0027_status\u0027: fields.ReplicationStatus.ENABLED},"},{"line_number":404,"context_line":"                  [{\u0027id\u0027: vol[\u0027id\u0027], \u0027replication_status\u0027:"},{"line_number":405,"context_line":"                    fields.ReplicationStatus.ENABLED}]))"},{"line_number":406,"context_line":""},{"line_number":407,"context_line":"    @mock.patch(\"cinder.volume.drivers.ibm.ibm_storage.\""},{"line_number":408,"context_line":"                \"xiv_replication.VolumeReplication.delete_replication\","}],"source_content_type":"text/x-python","patch_set":21,"id":"3f1d235d_80f3f373","line":405,"range":{"start_line":402,"start_character":0,"end_line":405,"end_character":55},"updated":"2017-07-07 20:32:10.000000000","message":"Reversed.   It should be expected, actual.  \"ret\" should be the second param.","commit_id":"aae789219211aa8804d2030e6c4fd84e2fbdee2b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e23d42946282bdaab3281259404274549eaa70bd","unresolved":false,"context_lines":[{"line_number":428,"context_line":"        ret \u003d p.disable_replication(self.ctxt, group)"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"        self.assertEqual("},{"line_number":431,"context_line":"            ret, ({\u0027replication\u0027"},{"line_number":432,"context_line":"                   \u0027_status\u0027: fields.ReplicationStatus.DISABLED},"},{"line_number":433,"context_line":"                  []))"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"    @mock.patch(\"cinder.volume.drivers.ibm.ibm_storage.\""},{"line_number":436,"context_line":"                \"xiv_proxy.XIVProxy._using_default_backend\","}],"source_content_type":"text/x-python","patch_set":21,"id":"3f1d235d_00ffe334","line":433,"range":{"start_line":431,"start_character":12,"end_line":433,"end_character":21},"updated":"2017-07-07 20:32:10.000000000","message":"Reversed.","commit_id":"aae789219211aa8804d2030e6c4fd84e2fbdee2b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e23d42946282bdaab3281259404274549eaa70bd","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        group_update, vol_update \u003d p.failover_replication(self.ctxt, group,"},{"line_number":466,"context_line":"                                                          [vol], \u0027default\u0027)"},{"line_number":467,"context_line":"        updates \u003d {\u0027status\u0027: \u0027available\u0027}"},{"line_number":468,"context_line":"        self.assertEqual((group_update, vol_update),"},{"line_number":469,"context_line":"                         ({\u0027replication_status\u0027: \u0027available\u0027},"},{"line_number":470,"context_line":"                          [{\u0027volume_id\u0027: vol[\u0027id\u0027],"},{"line_number":471,"context_line":"                            \u0027updates\u0027: updates}]))"},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"    def test_failover_resource_no_mirror(self):"},{"line_number":474,"context_line":"        driver \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":21,"id":"3f1d235d_e0fbc744","line":471,"range":{"start_line":468,"start_character":25,"end_line":471,"end_character":49},"updated":"2017-07-07 20:32:10.000000000","message":"Reversed.","commit_id":"aae789219211aa8804d2030e6c4fd84e2fbdee2b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e23d42946282bdaab3281259404274549eaa70bd","unresolved":false,"context_lines":[{"line_number":490,"context_line":"        msg \u003d (\"%(rep_type)s %(res)s: no active mirroring and can not \""},{"line_number":491,"context_line":"               \"failback\" % {\u0027rep_type\u0027: \u0027cg\u0027,"},{"line_number":492,"context_line":"                             \u0027res\u0027: group[\u0027name\u0027]})"},{"line_number":493,"context_line":"        self.assertEqual(ret, (False, msg))"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"    def test_failover_resource_mirror(self):"},{"line_number":496,"context_line":"        driver \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":21,"id":"3f1d235d_a0938f00","line":493,"range":{"start_line":493,"start_character":8,"end_line":493,"end_character":43},"updated":"2017-07-07 20:32:10.000000000","message":"self.assertEqual((False, msg), ret)","commit_id":"aae789219211aa8804d2030e6c4fd84e2fbdee2b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a9f117e6a11dc5c82316064baa9c0fea6be42e74","unresolved":false,"context_lines":[{"line_number":399,"context_line":"        ret \u003d p.enable_replication(self.ctxt, group, [vol])"},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"        self.assertEqual("},{"line_number":402,"context_line":"            ret, ({\u0027replication\u0027"},{"line_number":403,"context_line":"                   \u0027_status\u0027: fields.ReplicationStatus.ENABLED},"},{"line_number":404,"context_line":"                  [{\u0027id\u0027: vol[\u0027id\u0027], \u0027replication_status\u0027:"},{"line_number":405,"context_line":"                    fields.ReplicationStatus.ENABLED}]))"},{"line_number":406,"context_line":""},{"line_number":407,"context_line":"    @mock.patch(\"cinder.volume.drivers.ibm.ibm_storage.\""},{"line_number":408,"context_line":"                \"xiv_replication.VolumeReplication.delete_replication\","}],"source_content_type":"text/x-python","patch_set":23,"id":"3f1d235d_d7b641dd","line":405,"range":{"start_line":402,"start_character":12,"end_line":405,"end_character":55},"updated":"2017-07-09 13:23:45.000000000","message":"Should be expected, actual.  This is reversed.","commit_id":"70c87ed62da64d03dbdb580d3ea289fb72dd45d8"},{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"321ed6911d67dd0c73be641074add385c796fede","unresolved":false,"context_lines":[{"line_number":399,"context_line":"        ret \u003d p.enable_replication(self.ctxt, group, [vol])"},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"        self.assertEqual("},{"line_number":402,"context_line":"            ret, ({\u0027replication\u0027"},{"line_number":403,"context_line":"                   \u0027_status\u0027: fields.ReplicationStatus.ENABLED},"},{"line_number":404,"context_line":"                  [{\u0027id\u0027: vol[\u0027id\u0027], \u0027replication_status\u0027:"},{"line_number":405,"context_line":"                    fields.ReplicationStatus.ENABLED}]))"},{"line_number":406,"context_line":""},{"line_number":407,"context_line":"    @mock.patch(\"cinder.volume.drivers.ibm.ibm_storage.\""},{"line_number":408,"context_line":"                \"xiv_replication.VolumeReplication.delete_replication\","}],"source_content_type":"text/x-python","patch_set":23,"id":"3f1d235d_f8c12de6","line":405,"range":{"start_line":402,"start_character":12,"end_line":405,"end_character":55},"in_reply_to":"3f1d235d_d7b641dd","updated":"2017-07-09 19:24:14.000000000","message":"Done","commit_id":"70c87ed62da64d03dbdb580d3ea289fb72dd45d8"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a9f117e6a11dc5c82316064baa9c0fea6be42e74","unresolved":false,"context_lines":[{"line_number":428,"context_line":"        ret \u003d p.disable_replication(self.ctxt, group)"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"        self.assertEqual("},{"line_number":431,"context_line":"            ret, ({\u0027replication\u0027"},{"line_number":432,"context_line":"                   \u0027_status\u0027: fields.ReplicationStatus.DISABLED},"},{"line_number":433,"context_line":"                  []))"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"    @mock.patch(\"cinder.volume.drivers.ibm.ibm_storage.\""},{"line_number":436,"context_line":"                \"xiv_proxy.XIVProxy._using_default_backend\","}],"source_content_type":"text/x-python","patch_set":23,"id":"3f1d235d_77b52dcd","line":433,"range":{"start_line":431,"start_character":12,"end_line":433,"end_character":21},"updated":"2017-07-09 13:23:45.000000000","message":"Same","commit_id":"70c87ed62da64d03dbdb580d3ea289fb72dd45d8"},{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"321ed6911d67dd0c73be641074add385c796fede","unresolved":false,"context_lines":[{"line_number":428,"context_line":"        ret \u003d p.disable_replication(self.ctxt, group)"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"        self.assertEqual("},{"line_number":431,"context_line":"            ret, ({\u0027replication\u0027"},{"line_number":432,"context_line":"                   \u0027_status\u0027: fields.ReplicationStatus.DISABLED},"},{"line_number":433,"context_line":"                  []))"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"    @mock.patch(\"cinder.volume.drivers.ibm.ibm_storage.\""},{"line_number":436,"context_line":"                \"xiv_proxy.XIVProxy._using_default_backend\","}],"source_content_type":"text/x-python","patch_set":23,"id":"3f1d235d_589141f1","line":433,"range":{"start_line":431,"start_character":12,"end_line":433,"end_character":21},"in_reply_to":"3f1d235d_77b52dcd","updated":"2017-07-09 19:24:14.000000000","message":"Done","commit_id":"70c87ed62da64d03dbdb580d3ea289fb72dd45d8"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a9f117e6a11dc5c82316064baa9c0fea6be42e74","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        group_update, vol_update \u003d p.failover_replication(self.ctxt, group,"},{"line_number":466,"context_line":"                                                          [vol], \u0027default\u0027)"},{"line_number":467,"context_line":"        updates \u003d {\u0027status\u0027: \u0027available\u0027}"},{"line_number":468,"context_line":"        self.assertEqual((group_update, vol_update),"},{"line_number":469,"context_line":"                         ({\u0027replication_status\u0027: \u0027available\u0027},"},{"line_number":470,"context_line":"                          [{\u0027volume_id\u0027: vol[\u0027id\u0027],"},{"line_number":471,"context_line":"                            \u0027updates\u0027: updates}]))"},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"    def test_failover_resource_no_mirror(self):"},{"line_number":474,"context_line":"        driver \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":23,"id":"3f1d235d_57ca314f","line":471,"range":{"start_line":468,"start_character":25,"end_line":471,"end_character":49},"updated":"2017-07-09 13:23:45.000000000","message":"Same","commit_id":"70c87ed62da64d03dbdb580d3ea289fb72dd45d8"},{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"321ed6911d67dd0c73be641074add385c796fede","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        group_update, vol_update \u003d p.failover_replication(self.ctxt, group,"},{"line_number":466,"context_line":"                                                          [vol], \u0027default\u0027)"},{"line_number":467,"context_line":"        updates \u003d {\u0027status\u0027: \u0027available\u0027}"},{"line_number":468,"context_line":"        self.assertEqual((group_update, vol_update),"},{"line_number":469,"context_line":"                         ({\u0027replication_status\u0027: \u0027available\u0027},"},{"line_number":470,"context_line":"                          [{\u0027volume_id\u0027: vol[\u0027id\u0027],"},{"line_number":471,"context_line":"                            \u0027updates\u0027: updates}]))"},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"    def test_failover_resource_no_mirror(self):"},{"line_number":474,"context_line":"        driver \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":23,"id":"3f1d235d_388e85d0","line":471,"range":{"start_line":468,"start_character":25,"end_line":471,"end_character":49},"in_reply_to":"3f1d235d_57ca314f","updated":"2017-07-09 19:24:14.000000000","message":"Done","commit_id":"70c87ed62da64d03dbdb580d3ea289fb72dd45d8"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a9f117e6a11dc5c82316064baa9c0fea6be42e74","unresolved":false,"context_lines":[{"line_number":490,"context_line":"        msg \u003d (\"%(rep_type)s %(res)s: no active mirroring and can not \""},{"line_number":491,"context_line":"               \"failback\" % {\u0027rep_type\u0027: \u0027cg\u0027,"},{"line_number":492,"context_line":"                             \u0027res\u0027: group[\u0027name\u0027]})"},{"line_number":493,"context_line":"        self.assertEqual(ret, (False, msg))"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"    def test_failover_resource_mirror(self):"},{"line_number":496,"context_line":"        driver \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":23,"id":"3f1d235d_37c7b548","line":493,"range":{"start_line":493,"start_character":25,"end_line":493,"end_character":42},"updated":"2017-07-09 13:23:45.000000000","message":"Same","commit_id":"70c87ed62da64d03dbdb580d3ea289fb72dd45d8"},{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"321ed6911d67dd0c73be641074add385c796fede","unresolved":false,"context_lines":[{"line_number":490,"context_line":"        msg \u003d (\"%(rep_type)s %(res)s: no active mirroring and can not \""},{"line_number":491,"context_line":"               \"failback\" % {\u0027rep_type\u0027: \u0027cg\u0027,"},{"line_number":492,"context_line":"                             \u0027res\u0027: group[\u0027name\u0027]})"},{"line_number":493,"context_line":"        self.assertEqual(ret, (False, msg))"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"    def test_failover_resource_mirror(self):"},{"line_number":496,"context_line":"        driver \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":23,"id":"3f1d235d_18bd0968","line":493,"range":{"start_line":493,"start_character":25,"end_line":493,"end_character":42},"in_reply_to":"3f1d235d_37c7b548","updated":"2017-07-09 19:24:14.000000000","message":"Done","commit_id":"70c87ed62da64d03dbdb580d3ea289fb72dd45d8"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a9f117e6a11dc5c82316064baa9c0fea6be42e74","unresolved":false,"context_lines":[{"line_number":509,"context_line":"        ret \u003d xiv_replication.Replication(p)._failover_resource("},{"line_number":510,"context_line":"            group, recovery_mgr, mock.MagicMock, \u0027cg\u0027, True)"},{"line_number":511,"context_line":""},{"line_number":512,"context_line":"        self.assertEqual((True, None), ret)"},{"line_number":513,"context_line":""},{"line_number":514,"context_line":"    def test_failover_resource_change_role(self):"},{"line_number":515,"context_line":"        driver \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":23,"id":"3f1d235d_17c4b93f","line":512,"range":{"start_line":512,"start_character":25,"end_line":512,"end_character":42},"updated":"2017-07-09 13:23:45.000000000","message":"This one is correct.","commit_id":"70c87ed62da64d03dbdb580d3ea289fb72dd45d8"}],"cinder/volume/drivers/ibm/ibm_storage/xiv_proxy.py":[{"author":{"_account_id":23276,"name":"Nicholas Jones","email":"nj762h@att.com","username":"nj762h"},"change_message_id":"7b45c6e20e78e90662236a9130ec05f80d02cd46","unresolved":false,"context_lines":[{"line_number":754,"context_line":"            failover_cg_replication_mgr,"},{"line_number":755,"context_line":"            replication_info,"},{"line_number":756,"context_line":"            \u0027cg\u0027,"},{"line_number":757,"context_line":"            failback\u003d(secondary_backend_id \u003d\u003d strings.PRIMARY_BACKEND_ID))"},{"line_number":758,"context_line":"        if result:"},{"line_number":759,"context_line":"                status \u003d goal_status"},{"line_number":760,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_0806c687","line":757,"range":{"start_line":757,"start_character":12,"end_line":757,"end_character":21},"updated":"2017-05-30 13:08:26.000000000","message":"pylint doesn\u0027t like that you used the keyword here.","commit_id":"0d6ed6dc373a8386c23a7b48f464b0726f1fefd1"},{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"379f56a35c0c6755ef40ec9f72413d3324f16cce","unresolved":false,"context_lines":[{"line_number":558,"context_line":"        # fetch replication info"},{"line_number":559,"context_line":"        group_specs \u003d self.get_group_specs_by_group_resource(context, group)"},{"line_number":560,"context_line":"        if group_specs is None:"},{"line_number":561,"context_line":"            msg \u003d (\u0027Cannot enable cg replication with empty group specs\u0027)"},{"line_number":562,"context_line":"            LOG.error(msg)"},{"line_number":563,"context_line":"            raise self.meta[\u0027exception\u0027].VolumeBackendAPIException(data\u003dmsg)"},{"line_number":564,"context_line":"        # Add this field to adjust it to generic replication (for volumes)"}],"source_content_type":"text/x-python","patch_set":4,"id":"df140735_09d7f525","line":561,"range":{"start_line":561,"start_character":20,"end_line":561,"end_character":72},"updated":"2017-06-07 14:39:19.000000000","message":"This msg is not accurate.\nYou may get group_specs \u003d None even if the specs are not empty.\n(For example: when consistent_group_replication_enabled not found in the specs)","commit_id":"c1e827f75ed701b2c5b5409473e99aabfbdf9680"},{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"379f56a35c0c6755ef40ec9f72413d3324f16cce","unresolved":false,"context_lines":[{"line_number":824,"context_line":"        return target, params"},{"line_number":825,"context_line":""},{"line_number":826,"context_line":"    def _replication_create(self, resource, replication_info, rep_type):"},{"line_number":827,"context_line":"        LOG.debug(\u0027%(rep_type)s_replication_create replication_info %(rep)s\u0027,"},{"line_number":828,"context_line":"                  {\u0027rep\u0027: replication_info, \u0027rep_type\u0027: rep_type})"},{"line_number":829,"context_line":""},{"line_number":830,"context_line":"        target, params \u003d self._get_replication_target_params()"}],"source_content_type":"text/x-python","patch_set":4,"id":"df140735_c938dd3e","line":827,"updated":"2017-06-07 14:39:19.000000000","message":"space missing","commit_id":"c1e827f75ed701b2c5b5409473e99aabfbdf9680"},{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"379f56a35c0c6755ef40ec9f72413d3324f16cce","unresolved":false,"context_lines":[{"line_number":847,"context_line":"            replication_mgr \u003d cg_recovery_manager.CGRecoveryManager("},{"line_number":848,"context_line":"                False, self.ibm_storage_cli)"},{"line_number":849,"context_line":"        else:"},{"line_number":850,"context_line":"            msg \u003d (_(\"Unknown replication type. allowed replication types\""},{"line_number":851,"context_line":"                   \"are: vol and cg\"))"},{"line_number":852,"context_line":"            raise self.meta[\u0027exception\u0027].VolumeBackendAPIException(data\u003dmsg)"},{"line_number":853,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"df140735_44c5d45a","line":850,"range":{"start_line":850,"start_character":46,"end_line":850,"end_character":48},"updated":"2017-06-07 14:39:19.000000000","message":"Print here the received replication type","commit_id":"c1e827f75ed701b2c5b5409473e99aabfbdf9680"},{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"379f56a35c0c6755ef40ec9f72413d3324f16cce","unresolved":false,"context_lines":[{"line_number":870,"context_line":"                          {\u0027rpo\u0027: replication_info[\u0027rpo\u0027]})"},{"line_number":871,"context_line":"                # will fail in the next step"},{"line_number":872,"context_line":"        try:"},{"line_number":873,"context_line":"            if rep_type is REP_TYPE_VOL:"},{"line_number":874,"context_line":"                replication_mgr.create_mirror("},{"line_number":875,"context_line":"                    resource_name\u003dresource[\u0027name\u0027],"},{"line_number":876,"context_line":"                    target_name\u003dtarget,"}],"source_content_type":"text/x-python","patch_set":4,"id":"df140735_647578fa","line":873,"range":{"start_line":873,"start_character":24,"end_line":873,"end_character":26},"updated":"2017-06-07 14:39:19.000000000","message":"\u003d\u003d","commit_id":"c1e827f75ed701b2c5b5409473e99aabfbdf9680"},{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"379f56a35c0c6755ef40ec9f72413d3324f16cce","unresolved":false,"context_lines":[{"line_number":881,"context_line":"                    rpo\u003dreplication_info[\u0027rpo\u0027],"},{"line_number":882,"context_line":"                    schedule\u003dschedule,"},{"line_number":883,"context_line":"                    activate_mirror\u003d\u0027yes\u0027)"},{"line_number":884,"context_line":"            elif rep_type is REP_TYPE_CG:"},{"line_number":885,"context_line":"                # cg replication"},{"line_number":886,"context_line":"                replication_mgr.create_mirror("},{"line_number":887,"context_line":"                    resource_name\u003dresource[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":4,"id":"df140735_44727413","line":884,"range":{"start_line":884,"start_character":26,"end_line":884,"end_character":28},"updated":"2017-06-07 14:39:19.000000000","message":"\u003d\u003d","commit_id":"c1e827f75ed701b2c5b5409473e99aabfbdf9680"},{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"379f56a35c0c6755ef40ec9f72413d3324f16cce","unresolved":false,"context_lines":[{"line_number":907,"context_line":"            LOG.debug(\u0027No targets defined for replication\u0027)"},{"line_number":908,"context_line":""},{"line_number":909,"context_line":"        replication_mgr \u003d None"},{"line_number":910,"context_line":"        if rep_type is REP_TYPE_VOL:"},{"line_number":911,"context_line":"            replication_mgr \u003d volume_recovery_manager.VolumeRecoveryManager("},{"line_number":912,"context_line":"                False, self.ibm_storage_cli)"},{"line_number":913,"context_line":"        elif rep_type is REP_TYPE_CG:"}],"source_content_type":"text/x-python","patch_set":4,"id":"df140735_2f2d1946","line":910,"range":{"start_line":910,"start_character":20,"end_line":910,"end_character":22},"updated":"2017-06-07 14:39:19.000000000","message":"\u003d\u003d","commit_id":"c1e827f75ed701b2c5b5409473e99aabfbdf9680"},{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"379f56a35c0c6755ef40ec9f72413d3324f16cce","unresolved":false,"context_lines":[{"line_number":910,"context_line":"        if rep_type is REP_TYPE_VOL:"},{"line_number":911,"context_line":"            replication_mgr \u003d volume_recovery_manager.VolumeRecoveryManager("},{"line_number":912,"context_line":"                False, self.ibm_storage_cli)"},{"line_number":913,"context_line":"        elif rep_type is REP_TYPE_CG:"},{"line_number":914,"context_line":"            replication_mgr \u003d cg_recovery_manager.CGRecoveryManager("},{"line_number":915,"context_line":"                False, self.ibm_storage_cli)"},{"line_number":916,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"df140735_af20094b","line":913,"range":{"start_line":913,"start_character":22,"end_line":913,"end_character":24},"updated":"2017-06-07 14:39:19.000000000","message":"\u003d\u003d","commit_id":"c1e827f75ed701b2c5b5409473e99aabfbdf9680"},{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"379f56a35c0c6755ef40ec9f72413d3324f16cce","unresolved":false,"context_lines":[{"line_number":1927,"context_line":"        Return group available even if it already exists (for replication)"},{"line_number":1928,"context_line":"        \"\"\""},{"line_number":1929,"context_line":""},{"line_number":1930,"context_line":"        LOG.info(\"Creating consistency group %(name)s on slave.\","},{"line_number":1931,"context_line":"                 {\u0027name\u0027: cgname})"},{"line_number":1932,"context_line":""},{"line_number":1933,"context_line":"        # call remote XCLI"}],"source_content_type":"text/x-python","patch_set":4,"id":"df140735_e944c176","line":1930,"range":{"start_line":1930,"start_character":57,"end_line":1930,"end_character":62},"updated":"2017-06-07 14:39:19.000000000","message":"you mean target","commit_id":"c1e827f75ed701b2c5b5409473e99aabfbdf9680"},{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"379f56a35c0c6755ef40ec9f72413d3324f16cce","unresolved":false,"context_lines":[{"line_number":1939,"context_line":"        except errors.CgNameExistsError as e:"},{"line_number":1940,"context_line":"            model_update \u003d {\u0027status\u0027: fields.GroupStatus.AVAILABLE}"},{"line_number":1941,"context_line":"        except errors.CgLimitReachedError as e:"},{"line_number":1942,"context_line":"            error \u003d _(\"Reached Maximum number of consistency groups\")"},{"line_number":1943,"context_line":"            LOG.error(error)"},{"line_number":1944,"context_line":"            raise self._get_exception()(error)"},{"line_number":1945,"context_line":"        except errors.XCLIError as e:"}],"source_content_type":"text/x-python","patch_set":4,"id":"df140735_692d51a7","line":1942,"range":{"start_line":1942,"start_character":23,"end_line":1942,"end_character":67},"updated":"2017-06-07 14:39:19.000000000","message":"Maximum number of consistency groups reached","commit_id":"c1e827f75ed701b2c5b5409473e99aabfbdf9680"},{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"379f56a35c0c6755ef40ec9f72413d3324f16cce","unresolved":false,"context_lines":[{"line_number":1943,"context_line":"            LOG.error(error)"},{"line_number":1944,"context_line":"            raise self._get_exception()(error)"},{"line_number":1945,"context_line":"        except errors.XCLIError as e:"},{"line_number":1946,"context_line":"            error \u003d (_(\"Fatal error in cg_create: %(details)s\") %"},{"line_number":1947,"context_line":"                     {\u0027details\u0027: self._get_code_and_status_or_message(e)})"},{"line_number":1948,"context_line":"            LOG.error(error)"},{"line_number":1949,"context_line":"            raise self._get_exception()(error)"}],"source_content_type":"text/x-python","patch_set":4,"id":"df140735_24d1c058","line":1946,"updated":"2017-06-07 14:39:19.000000000","message":"Fatal error in cg_create on remote","commit_id":"c1e827f75ed701b2c5b5409473e99aabfbdf9680"},{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"379f56a35c0c6755ef40ec9f72413d3324f16cce","unresolved":false,"context_lines":[{"line_number":1947,"context_line":"                     {\u0027details\u0027: self._get_code_and_status_or_message(e)})"},{"line_number":1948,"context_line":"            LOG.error(error)"},{"line_number":1949,"context_line":"            raise self._get_exception()(error)"},{"line_number":1950,"context_line":"        model_update \u003d {\u0027status\u0027: fields.GroupStatus.AVAILABLE}"},{"line_number":1951,"context_line":"        return model_update"},{"line_number":1952,"context_line":""},{"line_number":1953,"context_line":"    def _silent_cleanup_consistencygroup_from_src(self, context, group,"},{"line_number":1954,"context_line":"                                                  volumes, cgname):"}],"source_content_type":"text/x-python","patch_set":4,"id":"df140735_646c589c","line":1951,"range":{"start_line":1950,"start_character":0,"end_line":1951,"end_character":27},"updated":"2017-06-07 14:39:19.000000000","message":"Why this function returns model_update.\nThe caller does not expect to get a returned value","commit_id":"c1e827f75ed701b2c5b5409473e99aabfbdf9680"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"f4c82c97ec0b5ac75f4b80e849f0b6732a31a902","unresolved":false,"context_lines":[{"line_number":562,"context_line":""},{"line_number":563,"context_line":"        return volume_update"},{"line_number":564,"context_line":""},{"line_number":565,"context_line":"    def get_group_specs_by_group_resource(self, context, group):"},{"line_number":566,"context_line":"        group_type \u003d group_types.get_group_type_by_name(context,"},{"line_number":567,"context_line":"                                                        group.get(\u0027name\u0027))"},{"line_number":568,"context_line":"        if group_type is None:"},{"line_number":569,"context_line":"            msg \u003d (\u0027No group specs inside group type.\u0027)"},{"line_number":570,"context_line":"            return None, msg"},{"line_number":571,"context_line":"        group_specs \u003d group_types.get_group_type_specs(group_type.get("},{"line_number":572,"context_line":"            \u0027group_id\u0027))"},{"line_number":573,"context_line":"        keyword \u003d \u0027consistent_group_replication_enabled\u0027"},{"line_number":574,"context_line":"        if not group_specs.get(keyword) \u003d\u003d \u0027\u003cis\u003e True\u0027:"},{"line_number":575,"context_line":"            msg \u003d (\u0027No cg replication field in group specs.\u0027)"},{"line_number":576,"context_line":"            return None, msg"},{"line_number":577,"context_line":"        return group_specs, \u0027\u0027"},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"    def enable_replication(self, context, group, volumes):"},{"line_number":580,"context_line":"        \"\"\"Enable cg replication\"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"5f201791_1434f6dc","line":577,"range":{"start_line":565,"start_character":4,"end_line":577,"end_character":30},"updated":"2017-06-28 06:07:09.000000000","message":"you can use is_group_a_consistent_replication_group_type in utils.py to do it.\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/utils.py#L944","commit_id":"cac3a84895b849a3867011b25650ff89bde9df7f"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"f4c82c97ec0b5ac75f4b80e849f0b6732a31a902","unresolved":false,"context_lines":[{"line_number":579,"context_line":"    def enable_replication(self, context, group, volumes):"},{"line_number":580,"context_line":"        \"\"\"Enable cg replication\"\"\""},{"line_number":581,"context_line":"        # fetch replication info"},{"line_number":582,"context_line":"        group_specs, msg \u003d self.get_group_specs_by_group_resource(context,"},{"line_number":583,"context_line":"                                                                  group)"},{"line_number":584,"context_line":"        if group_specs is None:"},{"line_number":585,"context_line":"            LOG.error(msg)"},{"line_number":586,"context_line":"            raise self.meta[\u0027exception\u0027].VolumeBackendAPIException(data\u003dmsg)"},{"line_number":587,"context_line":"        # Add this field to adjust it to generic replication (for volumes)"},{"line_number":588,"context_line":"        group_specs[\u0027replication_enabled\u0027] \u003d \u0027\u003cis\u003e True\u0027"},{"line_number":589,"context_line":"        replication_info \u003d self._get_replication_info(group_specs)"},{"line_number":590,"context_line":"        # take every vol out of cg - we can\u0027t mirror the cg otherwise."},{"line_number":591,"context_line":"        if volumes !\u003d {}:"},{"line_number":592,"context_line":"            self._update_consistencygroup(context, group,"},{"line_number":593,"context_line":"                                          remove_volumes\u003dvolumes)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f201791_b489c275","line":590,"range":{"start_line":582,"start_character":8,"end_line":590,"end_character":70},"updated":"2017-06-28 06:07:09.000000000","message":"there are a lot of functions in utils.py can be used, you can refer to them.","commit_id":"cac3a84895b849a3867011b25650ff89bde9df7f"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"f4c82c97ec0b5ac75f4b80e849f0b6732a31a902","unresolved":false,"context_lines":[{"line_number":588,"context_line":"        group_specs[\u0027replication_enabled\u0027] \u003d \u0027\u003cis\u003e True\u0027"},{"line_number":589,"context_line":"        replication_info \u003d self._get_replication_info(group_specs)"},{"line_number":590,"context_line":"        # take every vol out of cg - we can\u0027t mirror the cg otherwise."},{"line_number":591,"context_line":"        if volumes !\u003d {}:"},{"line_number":592,"context_line":"            self._update_consistencygroup(context, group,"},{"line_number":593,"context_line":"                                          remove_volumes\u003dvolumes)"},{"line_number":594,"context_line":"            for volume in volumes:"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f201791_1462b6d8","line":591,"range":{"start_line":591,"start_character":8,"end_line":591,"end_character":25},"updated":"2017-06-28 06:07:09.000000000","message":"judge volume is None or not?","commit_id":"cac3a84895b849a3867011b25650ff89bde9df7f"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"f4c82c97ec0b5ac75f4b80e849f0b6732a31a902","unresolved":false,"context_lines":[{"line_number":596,"context_line":"                                         REP_TYPE_VOL)"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"        # mirror entire group"},{"line_number":599,"context_line":"        self._create_consistencygroup_on_remote(context, group[\u0027name\u0027])"},{"line_number":600,"context_line":"        self._replication_create(group, group_specs, REP_TYPE_CG)"},{"line_number":601,"context_line":"        updated_volumes \u003d []"},{"line_number":602,"context_line":"        if volumes !\u003d {}:"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f201791_549a6eb8","line":599,"range":{"start_line":599,"start_character":57,"end_line":599,"end_character":70},"updated":"2017-06-28 06:07:09.000000000","message":"group.name","commit_id":"cac3a84895b849a3867011b25650ff89bde9df7f"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"f4c82c97ec0b5ac75f4b80e849f0b6732a31a902","unresolved":false,"context_lines":[{"line_number":611,"context_line":""},{"line_number":612,"context_line":"    def disable_replication(self, context, group):"},{"line_number":613,"context_line":"        \"\"\"disables CG replication\"\"\""},{"line_number":614,"context_line":"        group_specs, msg \u003d self.get_group_specs_by_group_resource(context,"},{"line_number":615,"context_line":"                                                                  group)"},{"line_number":616,"context_line":"        if group_specs is None:"},{"line_number":617,"context_line":"            LOG.error(msg)"},{"line_number":618,"context_line":"            raise self.meta[\u0027exception\u0027].VolumeBackendAPIException(data\u003dmsg)"},{"line_number":619,"context_line":"        group_specs[\u0027replication_enabled\u0027] \u003d \u0027\u003cis\u003e True\u0027"},{"line_number":620,"context_line":"        replication_info \u003d self._get_replication_info(group_specs)"},{"line_number":621,"context_line":"        # one call deletes replication for cgs and volumes together."},{"line_number":622,"context_line":"        self._replication_delete(group, replication_info, REP_TYPE_CG)"},{"line_number":623,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"5f201791_94cfe627","line":620,"range":{"start_line":614,"start_character":8,"end_line":620,"end_character":66},"updated":"2017-06-28 06:07:09.000000000","message":"same","commit_id":"cac3a84895b849a3867011b25650ff89bde9df7f"},{"author":{"_account_id":22583,"name":"Cheng Yong Zhao","email":"zhaochy@cn.ibm.com","username":"zhaochy"},"change_message_id":"7c7ea7d952231778bd38236f6e3928b6d5f3c8d9","unresolved":false,"context_lines":[{"line_number":626,"context_line":"            # xiv locks volumes after deletion of replication."},{"line_number":627,"context_line":"            # we need to unlock it for further use."},{"line_number":628,"context_line":"            try:"},{"line_number":629,"context_line":"                self.ibm_storage_cli.cmd.vol_unlock(vol\u003dvolume[\u0027name\u0027])"},{"line_number":630,"context_line":"            except errors.XCLIError as e:"},{"line_number":631,"context_line":"                details \u003d self._get_code_and_status_or_message(e)"},{"line_number":632,"context_line":"                msg \u003d (\u0027Failed to unlock volumes %(details)s\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f201791_ab6ef9c5","line":629,"range":{"start_line":629,"start_character":56,"end_line":629,"end_character":70},"updated":"2017-06-28 09:30:50.000000000","message":"volume.name","commit_id":"cac3a84895b849a3867011b25650ff89bde9df7f"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"f4c82c97ec0b5ac75f4b80e849f0b6732a31a902","unresolved":false,"context_lines":[{"line_number":629,"context_line":"                self.ibm_storage_cli.cmd.vol_unlock(vol\u003dvolume[\u0027name\u0027])"},{"line_number":630,"context_line":"            except errors.XCLIError as e:"},{"line_number":631,"context_line":"                details \u003d self._get_code_and_status_or_message(e)"},{"line_number":632,"context_line":"                msg \u003d (\u0027Failed to unlock volumes %(details)s\u0027,"},{"line_number":633,"context_line":"                       {\u0027details\u0027: details})"},{"line_number":634,"context_line":"                LOG.error(msg)"},{"line_number":635,"context_line":"                raise self.meta[\u0027exception\u0027].VolumeBackendAPIException("}],"source_content_type":"text/x-python","patch_set":15,"id":"5f201791_f44dfa3a","line":632,"range":{"start_line":632,"start_character":61,"end_line":632,"end_character":62},"updated":"2017-06-28 06:07:09.000000000","message":"it should be \u0027%\u0027, not \u0027,\u0027","commit_id":"cac3a84895b849a3867011b25650ff89bde9df7f"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"f4c82c97ec0b5ac75f4b80e849f0b6732a31a902","unresolved":false,"context_lines":[{"line_number":635,"context_line":"                raise self.meta[\u0027exception\u0027].VolumeBackendAPIException("},{"line_number":636,"context_line":"                    data\u003dmsg)"},{"line_number":637,"context_line":"            updated_volumes.append("},{"line_number":638,"context_line":"                {\u0027id\u0027: volume[\u0027id\u0027],"},{"line_number":639,"context_line":"                 \u0027replication_status\u0027: fields.ReplicationStatus.DISABLED})"},{"line_number":640,"context_line":"        return ({\u0027replication_status\u0027: fields.ReplicationStatus.DISABLED},"},{"line_number":641,"context_line":"                updated_volumes)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f201791_b43302ab","line":638,"range":{"start_line":638,"start_character":23,"end_line":638,"end_character":35},"updated":"2017-06-28 06:07:09.000000000","message":"volume.id","commit_id":"cac3a84895b849a3867011b25650ff89bde9df7f"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"f4c82c97ec0b5ac75f4b80e849f0b6732a31a902","unresolved":false,"context_lines":[{"line_number":640,"context_line":"        return ({\u0027replication_status\u0027: fields.ReplicationStatus.DISABLED},"},{"line_number":641,"context_line":"                updated_volumes)"},{"line_number":642,"context_line":""},{"line_number":643,"context_line":"    def get_secondary_backend_id(self, secondary_backend_id):"},{"line_number":644,"context_line":"        if secondary_backend_id is None:"},{"line_number":645,"context_line":"            secondary_backend_id \u003d self._get_target()"},{"line_number":646,"context_line":"        if secondary_backend_id is None:"},{"line_number":647,"context_line":"            msg \u003d _(\"No targets defined. Can\u0027t perform failover.\")"},{"line_number":648,"context_line":"            LOG.error(msg)"},{"line_number":649,"context_line":"            raise self.meta[\u0027exception\u0027].VolumeBackendAPIException("},{"line_number":650,"context_line":"                data\u003dmsg)"},{"line_number":651,"context_line":"        return secondary_backend_id"},{"line_number":652,"context_line":""},{"line_number":653,"context_line":"    def _failover_resource(self, resource, replication_mgr, failover_rep_mgr,"},{"line_number":654,"context_line":"                           replication_info, rep_type, failback):"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f201791_d408be92","line":651,"range":{"start_line":643,"start_character":4,"end_line":651,"end_character":35},"updated":"2017-06-28 06:07:09.000000000","message":"if secondary_backend_id is not None, it is just return, if it is None, you will get it from replication_device.\n\nI think you can remove this method, and verify the replication_device during driver is initialized, then get the backend_id where you needs. and compare this backend_id with users specify when they failover group or host.","commit_id":"cac3a84895b849a3867011b25650ff89bde9df7f"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"f4c82c97ec0b5ac75f4b80e849f0b6732a31a902","unresolved":false,"context_lines":[{"line_number":654,"context_line":"                           replication_info, rep_type, failback):"},{"line_number":655,"context_line":"        # check if mirror is defined and active"},{"line_number":656,"context_line":"        try:"},{"line_number":657,"context_line":"            LOG.debug(\u0027Check if mirroring is active on %(res)s.\u0027,"},{"line_number":658,"context_line":"                      {\u0027res\u0027: resource[\u0027name\u0027]})"},{"line_number":659,"context_line":"            active \u003d replication_mgr.is_mirror_active("},{"line_number":660,"context_line":"                resource_id\u003dresource[\u0027name\u0027])"},{"line_number":661,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f201791_94336662","line":658,"range":{"start_line":657,"start_character":12,"end_line":658,"end_character":48},"updated":"2017-06-28 06:07:09.000000000","message":"is it better to move this one before \u0027try\u0027","commit_id":"cac3a84895b849a3867011b25650ff89bde9df7f"},{"author":{"_account_id":22583,"name":"Cheng Yong Zhao","email":"zhaochy@cn.ibm.com","username":"zhaochy"},"change_message_id":"7c7ea7d952231778bd38236f6e3928b6d5f3c8d9","unresolved":false,"context_lines":[{"line_number":689,"context_line":"                role \u003d \u0027Slave\u0027"},{"line_number":690,"context_line":"            else:"},{"line_number":691,"context_line":"                role \u003d \u0027Master\u0027"},{"line_number":692,"context_line":"            LOG.warning(\u0027Attempt to change_role to master\u0027)"},{"line_number":693,"context_line":"            failover_rep_mgr.change_role("},{"line_number":694,"context_line":"                resource_id\u003dresource[\u0027name\u0027],"},{"line_number":695,"context_line":"                new_role\u003drole)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f201791_4b01a537","line":692,"range":{"start_line":692,"start_character":51,"end_line":692,"end_character":57},"updated":"2017-06-28 09:30:50.000000000","message":"should be role here, can be Master or Slave","commit_id":"cac3a84895b849a3867011b25650ff89bde9df7f"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"f4c82c97ec0b5ac75f4b80e849f0b6732a31a902","unresolved":false,"context_lines":[{"line_number":709,"context_line":"            LOG.error(msg)"},{"line_number":710,"context_line":"            return False, msg"},{"line_number":711,"context_line":""},{"line_number":712,"context_line":"    def _failover_cg(self, group, cg_rep_mgr, failover_rep_mgr,"},{"line_number":713,"context_line":"                     replication_info, failback):"},{"line_number":714,"context_line":"        LOG.debug(\"failover cg %(cg)\", {\u0027cg\u0027: group[\u0027name\u0027]})"},{"line_number":715,"context_line":"        return self._failover_resource(group, cg_rep_mgr, failover_rep_mgr,"},{"line_number":716,"context_line":"                                       replication_info,"},{"line_number":717,"context_line":"                                       REP_TYPE_CG,"},{"line_number":718,"context_line":"                                       failback)"},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"    def check_for_splitbrain(self, volumes, pool_master, pool_slave):"},{"line_number":721,"context_line":"        if len(volumes):"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f201791_f4f61a5d","line":718,"range":{"start_line":712,"start_character":4,"end_line":718,"end_character":48},"updated":"2017-06-28 06:07:09.000000000","message":"is it better to call _failover_resource directly instead of put in _failover_cg? _failover_cg just calls _failover_resource.","commit_id":"cac3a84895b849a3867011b25650ff89bde9df7f"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"f4c82c97ec0b5ac75f4b80e849f0b6732a31a902","unresolved":false,"context_lines":[{"line_number":718,"context_line":"                                       failback)"},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"    def check_for_splitbrain(self, volumes, pool_master, pool_slave):"},{"line_number":721,"context_line":"        if len(volumes):"},{"line_number":722,"context_line":"            # check for split brain situations"},{"line_number":723,"context_line":"            # check for files that are available on both volumes"},{"line_number":724,"context_line":"            # and are not in an active mirroring relation"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f201791_3486d2ba","line":721,"range":{"start_line":721,"start_character":11,"end_line":721,"end_character":23},"updated":"2017-06-28 06:07:09.000000000","message":"\"if volumes\" is enough.","commit_id":"cac3a84895b849a3867011b25650ff89bde9df7f"},{"author":{"_account_id":22583,"name":"Cheng Yong Zhao","email":"zhaochy@cn.ibm.com","username":"zhaochy"},"change_message_id":"7c7ea7d952231778bd38236f6e3928b6d5f3c8d9","unresolved":false,"context_lines":[{"line_number":730,"context_line":"            if len(split_brain):"},{"line_number":731,"context_line":"                # if such a situation exists stop and raise an exception!"},{"line_number":732,"context_line":"                msg \u003d (_(\"A potential split brain condition has been found \""},{"line_number":733,"context_line":"                         \"with the following volumes: \\n\u0027%(volumes)s.\u0027\"),"},{"line_number":734,"context_line":"                       {\u0027volumes\u0027: split_brain})"},{"line_number":735,"context_line":"                LOG.error(msg)"},{"line_number":736,"context_line":"                raise self.meta[\u0027exception\u0027].VolumeBackendAPIException("}],"source_content_type":"text/x-python","patch_set":15,"id":"5f201791_a620709c","line":733,"range":{"start_line":733,"start_character":72,"end_line":733,"end_character":73},"updated":"2017-06-28 09:30:50.000000000","message":"%","commit_id":"cac3a84895b849a3867011b25650ff89bde9df7f"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"f4c82c97ec0b5ac75f4b80e849f0b6732a31a902","unresolved":false,"context_lines":[{"line_number":783,"context_line":"            True, self.ibm_storage_remote_cli)"},{"line_number":784,"context_line":"        # check for split brain in mirrored volumes"},{"line_number":785,"context_line":"        self.check_for_splitbrain(volumes, pool_master, pool_slave)"},{"line_number":786,"context_line":"        group_specs, msg \u003d self.get_group_specs_by_group_resource(context,"},{"line_number":787,"context_line":"                                                                  group)"},{"line_number":788,"context_line":"        if group_specs is None:"},{"line_number":789,"context_line":"            LOG.error(msg)"},{"line_number":790,"context_line":"            raise self.meta[\u0027exception\u0027].VolumeBackendAPIException(data\u003dmsg)"},{"line_number":791,"context_line":"        group_specs[\u0027replication_enabled\u0027] \u003d \u0027\u003cis\u003e True\u0027"},{"line_number":792,"context_line":"        replication_info \u003d self._get_replication_info(group_specs)"},{"line_number":793,"context_line":"        failback \u003d (secondary_backend_id \u003d\u003d strings.PRIMARY_BACKEND_ID)"},{"line_number":794,"context_line":"        result, details \u003d self._failover_cg("}],"source_content_type":"text/x-python","patch_set":15,"id":"5f201791_b468a2f4","line":791,"range":{"start_line":786,"start_character":8,"end_line":791,"end_character":56},"updated":"2017-06-28 06:07:09.000000000","message":"same","commit_id":"cac3a84895b849a3867011b25650ff89bde9df7f"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"f4c82c97ec0b5ac75f4b80e849f0b6732a31a902","unresolved":false,"context_lines":[{"line_number":808,"context_line":"        # have been successfully replicated as well."},{"line_number":809,"context_line":"        for volume in volumes:"},{"line_number":810,"context_line":"            volumes_updated.append({"},{"line_number":811,"context_line":"                \u0027volume_id\u0027: volume[\u0027id\u0027],"},{"line_number":812,"context_line":"                \u0027updates\u0027: updates"},{"line_number":813,"context_line":"            })"},{"line_number":814,"context_line":"        # replace between active and secondary xcli"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f201791_147f56ab","line":811,"range":{"start_line":811,"start_character":29,"end_line":811,"end_character":41},"updated":"2017-06-28 06:07:09.000000000","message":"volume.id","commit_id":"cac3a84895b849a3867011b25650ff89bde9df7f"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"f4c82c97ec0b5ac75f4b80e849f0b6732a31a902","unresolved":false,"context_lines":[{"line_number":810,"context_line":"            volumes_updated.append({"},{"line_number":811,"context_line":"                \u0027volume_id\u0027: volume[\u0027id\u0027],"},{"line_number":812,"context_line":"                \u0027updates\u0027: updates"},{"line_number":813,"context_line":"            })"},{"line_number":814,"context_line":"        # replace between active and secondary xcli"},{"line_number":815,"context_line":"        self._replace_xcli_to_remote_xcli()"},{"line_number":816,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"5f201791_b41f826a","line":813,"range":{"start_line":813,"start_character":12,"end_line":813,"end_character":13},"updated":"2017-06-28 06:07:09.000000000","message":"you should return replication_status for volume too.","commit_id":"cac3a84895b849a3867011b25650ff89bde9df7f"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"f4c82c97ec0b5ac75f4b80e849f0b6732a31a902","unresolved":false,"context_lines":[{"line_number":817,"context_line":"        return group_updated, volumes_updated"},{"line_number":818,"context_line":""},{"line_number":819,"context_line":"    def _replace_xcli_to_remote_xcli(self):"},{"line_number":820,"context_line":"        temp_ibm_storage_cli \u003d self.ibm_storage_cli"},{"line_number":821,"context_line":"        self.ibm_storage_cli \u003d self.ibm_storage_remote_cli"},{"line_number":822,"context_line":"        self.ibm_storage_remote_cli \u003d temp_ibm_storage_cli"},{"line_number":823,"context_line":""},{"line_number":824,"context_line":"    def _get_replication_target_params(self):"},{"line_number":825,"context_line":"        LOG.debug(\u0027_get_replication_target_params.\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f201791_9720089d","line":822,"range":{"start_line":820,"start_character":8,"end_line":822,"end_character":58},"updated":"2017-06-28 06:07:09.000000000","message":"is it better to write it like this?\nself.ibm_storage_cli, self.ibm_storage_remote_cli \u003d self.ibm_storage_remote_cli, self.ibm_storage_cli","commit_id":"cac3a84895b849a3867011b25650ff89bde9df7f"},{"author":{"_account_id":22583,"name":"Cheng Yong Zhao","email":"zhaochy@cn.ibm.com","username":"zhaochy"},"change_message_id":"7c7ea7d952231778bd38236f6e3928b6d5f3c8d9","unresolved":false,"context_lines":[{"line_number":861,"context_line":"        except Exception:"},{"line_number":862,"context_line":"            msg \u003d (_(\"Missing pool information for target \u0027%(target)s\u0027\") %"},{"line_number":863,"context_line":"                   {\u0027target\u0027: target})"},{"line_number":864,"context_line":"            LOG.error()"},{"line_number":865,"context_line":"            raise self.meta[\u0027exception\u0027].VolumeBackendAPIException(data\u003dmsg)"},{"line_number":866,"context_line":""},{"line_number":867,"context_line":"        replication_mgr \u003d None"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f201791_e6df880a","line":864,"range":{"start_line":864,"start_character":12,"end_line":864,"end_character":23},"updated":"2017-06-28 09:30:50.000000000","message":"LOG.error(msg)?","commit_id":"cac3a84895b849a3867011b25650ff89bde9df7f"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"f4c82c97ec0b5ac75f4b80e849f0b6732a31a902","unresolved":false,"context_lines":[{"line_number":921,"context_line":"        # TBD - what exceptions will we get here?"},{"line_number":922,"context_line":"        except Exception as e:"},{"line_number":923,"context_line":"            details \u003d self._get_code_and_status_or_message(e)"},{"line_number":924,"context_line":"            msg \u003d (_(\"Failed replication for %(resource)s: \u0027%(details)s\u0027\"),"},{"line_number":925,"context_line":"                   {\u0027resource\u0027: resource[\u0027name\u0027], \u0027details\u0027: details})"},{"line_number":926,"context_line":"            LOG.error(msg)"},{"line_number":927,"context_line":"            raise self.meta[\u0027exception\u0027].VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f201791_17b7583c","line":924,"range":{"start_line":924,"start_character":74,"end_line":924,"end_character":75},"updated":"2017-06-28 06:07:09.000000000","message":"it should be \"%\" instead of \u0027,\u0027 here.","commit_id":"cac3a84895b849a3867011b25650ff89bde9df7f"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"f4c82c97ec0b5ac75f4b80e849f0b6732a31a902","unresolved":false,"context_lines":[{"line_number":941,"context_line":"            replication_mgr \u003d cg_recovery_manager.CGRecoveryManager("},{"line_number":942,"context_line":"                False, self.ibm_storage_cli)"},{"line_number":943,"context_line":"        else:"},{"line_number":944,"context_line":"            msg \u003d (_(\"Unknown replication type. allowed replication types\""},{"line_number":945,"context_line":"                   \"are: vol and cg\"))"},{"line_number":946,"context_line":"            raise self.meta[\u0027exception\u0027].VolumeBackendAPIException(data\u003dmsg)"},{"line_number":947,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"5f201791_f78a9c61","line":944,"range":{"start_line":944,"start_character":18,"end_line":944,"end_character":19},"updated":"2017-06-28 06:07:09.000000000","message":"remove this (), it is unnecessary.","commit_id":"cac3a84895b849a3867011b25650ff89bde9df7f"},{"author":{"_account_id":22583,"name":"Cheng Yong Zhao","email":"zhaochy@cn.ibm.com","username":"zhaochy"},"change_message_id":"7c7ea7d952231778bd38236f6e3928b6d5f3c8d9","unresolved":false,"context_lines":[{"line_number":949,"context_line":"            replication_mgr.deactivate_mirror(resource_id\u003dresource[\u0027name\u0027])"},{"line_number":950,"context_line":"        except Exception as e:"},{"line_number":951,"context_line":"            details \u003d self._get_code_and_status_or_message(e)"},{"line_number":952,"context_line":"            msg \u003d (_(\"Failed ending replication for %(vol)s: \u0027%(details)s\u0027\"),"},{"line_number":953,"context_line":"                   {\u0027resource\u0027: resource[\u0027name\u0027], \u0027details\u0027: details})"},{"line_number":954,"context_line":"            LOG.error(msg)"},{"line_number":955,"context_line":"            raise self.meta[\u0027exception\u0027].VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f201791_4653dc6b","line":952,"range":{"start_line":952,"start_character":76,"end_line":952,"end_character":77},"updated":"2017-06-28 09:30:50.000000000","message":"%","commit_id":"cac3a84895b849a3867011b25650ff89bde9df7f"},{"author":{"_account_id":22583,"name":"Cheng Yong Zhao","email":"zhaochy@cn.ibm.com","username":"zhaochy"},"change_message_id":"7c7ea7d952231778bd38236f6e3928b6d5f3c8d9","unresolved":false,"context_lines":[{"line_number":1526,"context_line":"        LOG.debug(\"_failover_vol %(vol)s\", {\u0027vol\u0027: volume[\u0027name\u0027]})"},{"line_number":1527,"context_line":"        return self._failover_resource(volume, volume_replication_mgr,"},{"line_number":1528,"context_line":"                                       failover_volume_replication_mgr,"},{"line_number":1529,"context_line":"                                       replication_info, \u0027vol\u0027, failback)"},{"line_number":1530,"context_line":""},{"line_number":1531,"context_line":"    @proxy._trace_time"},{"line_number":1532,"context_line":"    def failover_host(self, context, volumes, secondary_id):"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f201791_6662580c","line":1529,"range":{"start_line":1529,"start_character":57,"end_line":1529,"end_character":62},"updated":"2017-06-28 09:30:50.000000000","message":"use REP_TYPE_VOL","commit_id":"cac3a84895b849a3867011b25650ff89bde9df7f"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"f4c82c97ec0b5ac75f4b80e849f0b6732a31a902","unresolved":false,"context_lines":[{"line_number":1963,"context_line":"                \"cg_create\", cg\u003dcgname,"},{"line_number":1964,"context_line":"                pool\u003dself.storage_info["},{"line_number":1965,"context_line":"                    storage.FLAG_KEYS[\u0027storage_pool\u0027]]).as_list"},{"line_number":1966,"context_line":"        except errors.CgNameExistsError as e:"},{"line_number":1967,"context_line":"            model_update \u003d {\u0027status\u0027: fields.GroupStatus.AVAILABLE}"},{"line_number":1968,"context_line":"        except errors.CgLimitReachedError as e:"},{"line_number":1969,"context_line":"            error \u003d _(\"Maximum number of consistency groups reached\")"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f201791_77420c11","line":1966,"range":{"start_line":1966,"start_character":43,"end_line":1966,"end_character":44},"updated":"2017-06-28 06:07:09.000000000","message":"you don\u0027t use \u0027e\u0027 in this exception, you can remove it.","commit_id":"cac3a84895b849a3867011b25650ff89bde9df7f"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"f4c82c97ec0b5ac75f4b80e849f0b6732a31a902","unresolved":false,"context_lines":[{"line_number":1964,"context_line":"                pool\u003dself.storage_info["},{"line_number":1965,"context_line":"                    storage.FLAG_KEYS[\u0027storage_pool\u0027]]).as_list"},{"line_number":1966,"context_line":"        except errors.CgNameExistsError as e:"},{"line_number":1967,"context_line":"            model_update \u003d {\u0027status\u0027: fields.GroupStatus.AVAILABLE}"},{"line_number":1968,"context_line":"        except errors.CgLimitReachedError as e:"},{"line_number":1969,"context_line":"            error \u003d _(\"Maximum number of consistency groups reached\")"},{"line_number":1970,"context_line":"            LOG.error(error)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f201791_d707a0c9","line":1967,"range":{"start_line":1967,"start_character":12,"end_line":1967,"end_character":67},"updated":"2017-06-28 06:07:09.000000000","message":"you can just pass here, because model_update will be set in #L1977","commit_id":"cac3a84895b849a3867011b25650ff89bde9df7f"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"f4c82c97ec0b5ac75f4b80e849f0b6732a31a902","unresolved":false,"context_lines":[{"line_number":1965,"context_line":"                    storage.FLAG_KEYS[\u0027storage_pool\u0027]]).as_list"},{"line_number":1966,"context_line":"        except errors.CgNameExistsError as e:"},{"line_number":1967,"context_line":"            model_update \u003d {\u0027status\u0027: fields.GroupStatus.AVAILABLE}"},{"line_number":1968,"context_line":"        except errors.CgLimitReachedError as e:"},{"line_number":1969,"context_line":"            error \u003d _(\"Maximum number of consistency groups reached\")"},{"line_number":1970,"context_line":"            LOG.error(error)"},{"line_number":1971,"context_line":"            raise self._get_exception()(error)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f201791_f7b85c11","line":1968,"range":{"start_line":1968,"start_character":45,"end_line":1968,"end_character":46},"updated":"2017-06-28 06:07:09.000000000","message":"same","commit_id":"cac3a84895b849a3867011b25650ff89bde9df7f"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"69ba0d92c357dceade86688893c3540a9a1ab907","unresolved":false,"context_lines":[{"line_number":425,"context_line":"            info[\u0027rpo\u0027] \u003d int(specs.get(\u0027rpo\u0027, u\u0027\u003cis\u003e 0\u0027)[5:])"},{"line_number":426,"context_line":"            supported_rpos \u003d repl.Replication.get_supported_rpo()"},{"line_number":427,"context_line":"            if info[\u0027rpo\u0027] and info[\u0027rpo\u0027] not in supported_rpos:"},{"line_number":428,"context_line":"                msg \u003d (_(\"Unsupported replication RPO %(rpo)s\"),"},{"line_number":429,"context_line":"                       {\u0027rpo\u0027: info[\u0027rpo\u0027]})"},{"line_number":430,"context_line":"                LOG.error(msg)"},{"line_number":431,"context_line":"                raise self._get_exception()(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f1d235d_d2b648da","line":428,"range":{"start_line":428,"start_character":63,"end_line":428,"end_character":64},"updated":"2017-06-30 03:58:03.000000000","message":"it should be \u0027%\u0027, not \u0027,\u0027.","commit_id":"661e91195795fa1808360996f50ac752bf2d12ae"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"69ba0d92c357dceade86688893c3540a9a1ab907","unresolved":false,"context_lines":[{"line_number":516,"context_line":"        volume_update[\u0027replication_status\u0027] \u003d \u0027disabled\u0027"},{"line_number":517,"context_line":"        if replication_info[\u0027enabled\u0027]:"},{"line_number":518,"context_line":"            try:"},{"line_number":519,"context_line":"                repl.VolumeReplication(self).create_replication("},{"line_number":520,"context_line":"                    volume, replication_info)"},{"line_number":521,"context_line":"            except Exception as e:"},{"line_number":522,"context_line":"                details \u003d self._get_code_and_status_or_message(e)"},{"line_number":523,"context_line":"                msg \u003d (\u0027Failed create_replication for \u0027"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f1d235d_923b3037","line":520,"range":{"start_line":519,"start_character":16,"end_line":520,"end_character":45},"updated":"2017-06-30 03:58:03.000000000","message":"do you really want to initialize VolumeReplication every time when user create volume?","commit_id":"661e91195795fa1808360996f50ac752bf2d12ae"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"69ba0d92c357dceade86688893c3540a9a1ab907","unresolved":false,"context_lines":[{"line_number":532,"context_line":""},{"line_number":533,"context_line":"        return volume_update"},{"line_number":534,"context_line":""},{"line_number":535,"context_line":"    def get_group_specs_by_group_resource(self, context, group):"},{"line_number":536,"context_line":"        group_type \u003d group_types.get_group_type_by_name(context,"},{"line_number":537,"context_line":"                                                        group.get(\u0027name\u0027))"},{"line_number":538,"context_line":"        if group_type is None:"},{"line_number":539,"context_line":"            msg \u003d (\u0027No group specs inside group type.\u0027)"},{"line_number":540,"context_line":"            return None, msg"},{"line_number":541,"context_line":"        group_specs \u003d group_types.get_group_type_specs(group_type.get("},{"line_number":542,"context_line":"            \u0027group_id\u0027))"},{"line_number":543,"context_line":"        keyword \u003d \u0027consistent_group_replication_enabled\u0027"},{"line_number":544,"context_line":"        if not group_specs.get(keyword) \u003d\u003d \u0027\u003cis\u003e True\u0027:"},{"line_number":545,"context_line":"            msg \u003d (\u0027No cg replication field in group specs.\u0027)"},{"line_number":546,"context_line":"            return None, msg"},{"line_number":547,"context_line":"        return group_specs, \u0027\u0027"},{"line_number":548,"context_line":""},{"line_number":549,"context_line":"    @proxy._trace_time"},{"line_number":550,"context_line":"    def enable_replication(self, context, group, volumes):"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f1d235d_f20dc490","line":547,"range":{"start_line":535,"start_character":4,"end_line":547,"end_character":28},"updated":"2017-06-30 03:58:03.000000000","message":"please use some methods in utils.py to do it instead of do it by yourself.","commit_id":"661e91195795fa1808360996f50ac752bf2d12ae"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"69ba0d92c357dceade86688893c3540a9a1ab907","unresolved":false,"context_lines":[{"line_number":550,"context_line":"    def enable_replication(self, context, group, volumes):"},{"line_number":551,"context_line":"        \"\"\"Enable cg replication\"\"\""},{"line_number":552,"context_line":"        # fetch replication info"},{"line_number":553,"context_line":"        group_specs, msg \u003d self.get_group_specs_by_group_resource(context,"},{"line_number":554,"context_line":"                                                                  group)"},{"line_number":555,"context_line":"        if group_specs is None:"},{"line_number":556,"context_line":"            LOG.error(msg)"},{"line_number":557,"context_line":"            raise self.meta[\u0027exception\u0027].VolumeBackendAPIException(data\u003dmsg)"},{"line_number":558,"context_line":"        # Add this field to adjust it to generic replication (for volumes)"},{"line_number":559,"context_line":"        group_specs[\u0027replication_enabled\u0027] \u003d \u0027\u003cis\u003e True\u0027"},{"line_number":560,"context_line":"        replication_info \u003d self._get_replication_info(group_specs)"},{"line_number":561,"context_line":"        # take every vol out of cg - we can\u0027t mirror the cg otherwise."},{"line_number":562,"context_line":"        if volumes:"},{"line_number":563,"context_line":"            self._update_consistencygroup(context, group,"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f1d235d_72765409","line":560,"range":{"start_line":553,"start_character":8,"end_line":560,"end_character":66},"updated":"2017-06-30 03:58:03.000000000","message":"same","commit_id":"661e91195795fa1808360996f50ac752bf2d12ae"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"69ba0d92c357dceade86688893c3540a9a1ab907","unresolved":false,"context_lines":[{"line_number":567,"context_line":"                    volume, replication_info)"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"        # mirror entire group"},{"line_number":570,"context_line":"        self._create_consistencygroup_on_remote(context, group[\u0027name\u0027])"},{"line_number":571,"context_line":"        repl.GroupReplication(self).create_replication(group, group_specs)"},{"line_number":572,"context_line":""},{"line_number":573,"context_line":"        updated_volumes \u003d []"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f1d235d_b2550c53","line":570,"range":{"start_line":570,"start_character":57,"end_line":570,"end_character":70},"updated":"2017-06-30 03:58:03.000000000","message":"group.name","commit_id":"661e91195795fa1808360996f50ac752bf2d12ae"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"69ba0d92c357dceade86688893c3540a9a1ab907","unresolved":false,"context_lines":[{"line_number":584,"context_line":"    @proxy._trace_time"},{"line_number":585,"context_line":"    def disable_replication(self, context, group):"},{"line_number":586,"context_line":"        \"\"\"disables CG replication\"\"\""},{"line_number":587,"context_line":"        group_specs, msg \u003d self.get_group_specs_by_group_resource(context,"},{"line_number":588,"context_line":"                                                                  group)"},{"line_number":589,"context_line":"        if group_specs is None:"},{"line_number":590,"context_line":"            LOG.error(msg)"},{"line_number":591,"context_line":"            raise self.meta[\u0027exception\u0027].VolumeBackendAPIException(data\u003dmsg)"},{"line_number":592,"context_line":"        group_specs[\u0027replication_enabled\u0027] \u003d \u0027\u003cis\u003e True\u0027"},{"line_number":593,"context_line":"        replication_info \u003d self._get_replication_info(group_specs)"},{"line_number":594,"context_line":"        # one call deletes replication for cgs and volumes together."},{"line_number":595,"context_line":""},{"line_number":596,"context_line":"        repl.GroupReplication(self).delete_replication(group, replication_info)"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f1d235d_72e414ad","line":593,"range":{"start_line":587,"start_character":8,"end_line":593,"end_character":66},"updated":"2017-06-30 03:58:03.000000000","message":"same","commit_id":"661e91195795fa1808360996f50ac752bf2d12ae"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"69ba0d92c357dceade86688893c3540a9a1ab907","unresolved":false,"context_lines":[{"line_number":603,"context_line":"                self.ibm_storage_cli.cmd.vol_unlock(vol\u003dvolume[\u0027name\u0027])"},{"line_number":604,"context_line":"            except errors.XCLIError as e:"},{"line_number":605,"context_line":"                details \u003d self._get_code_and_status_or_message(e)"},{"line_number":606,"context_line":"                msg \u003d (\u0027Failed to unlock volumes %(details)s\u0027,"},{"line_number":607,"context_line":"                       {\u0027details\u0027: details})"},{"line_number":608,"context_line":"                LOG.error(msg)"},{"line_number":609,"context_line":"                raise self.meta[\u0027exception\u0027].VolumeBackendAPIException("}],"source_content_type":"text/x-python","patch_set":17,"id":"3f1d235d_b203cc42","line":606,"range":{"start_line":606,"start_character":61,"end_line":606,"end_character":62},"updated":"2017-06-30 03:58:03.000000000","message":"% instead of ,","commit_id":"661e91195795fa1808360996f50ac752bf2d12ae"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"69ba0d92c357dceade86688893c3540a9a1ab907","unresolved":false,"context_lines":[{"line_number":609,"context_line":"                raise self.meta[\u0027exception\u0027].VolumeBackendAPIException("},{"line_number":610,"context_line":"                    data\u003dmsg)"},{"line_number":611,"context_line":"            updated_volumes.append("},{"line_number":612,"context_line":"                {\u0027id\u0027: volume[\u0027id\u0027],"},{"line_number":613,"context_line":"                 \u0027replication_status\u0027: fields.ReplicationStatus.DISABLED})"},{"line_number":614,"context_line":"        return ({\u0027replication_status\u0027: fields.ReplicationStatus.DISABLED},"},{"line_number":615,"context_line":"                updated_volumes)"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f1d235d_32f0dc67","line":612,"range":{"start_line":612,"start_character":23,"end_line":612,"end_character":35},"updated":"2017-06-30 03:58:03.000000000","message":"volume.id","commit_id":"661e91195795fa1808360996f50ac752bf2d12ae"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"69ba0d92c357dceade86688893c3540a9a1ab907","unresolved":false,"context_lines":[{"line_number":656,"context_line":"        group_updated \u003d {\u0027replication_status\u0027: group.replication_status}"},{"line_number":657,"context_line":"        LOG.info(\"failover_replication: of cg %(cg)s \""},{"line_number":658,"context_line":"                 \"from %(active)s to %(id)s\","},{"line_number":659,"context_line":"                 {\u0027cg\u0027: group.get(\u0027name\u0027),"},{"line_number":660,"context_line":"                  \u0027active\u0027: self.active_backend_id,"},{"line_number":661,"context_line":"                  \u0027id\u0027: secondary_backend_id})"},{"line_number":662,"context_line":"        if secondary_backend_id \u003d\u003d strings.PRIMARY_BACKEND_ID:"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f1d235d_d2a3e84e","line":659,"range":{"start_line":659,"start_character":24,"end_line":659,"end_character":41},"updated":"2017-06-30 03:58:03.000000000","message":"group.name","commit_id":"661e91195795fa1808360996f50ac752bf2d12ae"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"69ba0d92c357dceade86688893c3540a9a1ab907","unresolved":false,"context_lines":[{"line_number":661,"context_line":"                  \u0027id\u0027: secondary_backend_id})"},{"line_number":662,"context_line":"        if secondary_backend_id \u003d\u003d strings.PRIMARY_BACKEND_ID:"},{"line_number":663,"context_line":"            # default as active backend id"},{"line_number":664,"context_line":"            if self._using_default_backend():"},{"line_number":665,"context_line":"                LOG.info(\"CG has been failed back. \""},{"line_number":666,"context_line":"                         \"No need to fail back again.\")"},{"line_number":667,"context_line":"                return group_updated, volumes_updated"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f1d235d_321a1c7d","line":664,"range":{"start_line":664,"start_character":20,"end_line":664,"end_character":42},"updated":"2017-06-30 03:58:03.000000000","message":"you can not check whether group has been failed back via the way as failover-host. user can only fail over group without fail over host.","commit_id":"661e91195795fa1808360996f50ac752bf2d12ae"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"69ba0d92c357dceade86688893c3540a9a1ab907","unresolved":false,"context_lines":[{"line_number":671,"context_line":"            pool_slave \u003d self.storage_info[storage.FLAG_KEYS[\u0027storage_pool\u0027]]"},{"line_number":672,"context_line":"            goal_status \u003d \u0027available\u0027"},{"line_number":673,"context_line":"        else:"},{"line_number":674,"context_line":"            if self._using_default_backend():"},{"line_number":675,"context_line":"                LOG.info(\"cg already failed over.\")"},{"line_number":676,"context_line":"                return group_updated, volumes_updated"},{"line_number":677,"context_line":"            # using same api as Cheesecake, we need"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f1d235d_b20d0c40","line":674,"range":{"start_line":674,"start_character":20,"end_line":674,"end_character":42},"updated":"2017-06-30 03:58:03.000000000","message":"same","commit_id":"661e91195795fa1808360996f50ac752bf2d12ae"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"69ba0d92c357dceade86688893c3540a9a1ab907","unresolved":false,"context_lines":[{"line_number":683,"context_line":"                secondary_backend_id)[\u0027san_clustername\u0027]"},{"line_number":684,"context_line":"            goal_status \u003d fields.ReplicationStatus.FAILED_OVER"},{"line_number":685,"context_line":"        # we should have secondary_backend_id by here."},{"line_number":686,"context_line":"        self.ibm_storage_remote_cli \u003d self._init_xcli(secondary_backend_id)"},{"line_number":687,"context_line":""},{"line_number":688,"context_line":"        # check for split brain in mirrored volumes"},{"line_number":689,"context_line":"        self.check_for_splitbrain(volumes, pool_master, pool_slave)"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f1d235d_cd0d8d38","line":686,"range":{"start_line":686,"start_character":43,"end_line":686,"end_character":53},"updated":"2017-06-30 03:58:03.000000000","message":"i not sure init a new cli for failover every time or not.","commit_id":"661e91195795fa1808360996f50ac752bf2d12ae"}],"cinder/volume/drivers/ibm/ibm_storage/xiv_replication.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5f39af55aa7e496d8fd62eafa81e01aeefc064f3","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"#"},{"line_number":16,"context_line":"import six"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from oslo_log import log as logging"},{"line_number":19,"context_line":"from oslo_utils import importutils"}],"source_content_type":"text/x-python","patch_set":28,"id":"1f1a1f67_e5d518e7","line":16,"updated":"2017-07-20 13:12:24.000000000","message":"six is a third party import and should be grouped with and below the oslo imports.","commit_id":"bb9a4e1a90e6223a3602172336c8b45f578df55f"}],"releasenotes/notes/xiv-replication-group-7ca437c90f2474a7.yaml":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"165f312306ca8f5a0326df549993824eaf9f19f0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add consistency group replication support in XIV\\A9000 Cinder driver"}],"source_content_type":"text/x-yaml","patch_set":17,"id":"3f1d235d_d6398341","line":4,"updated":"2017-06-30 18:08:41.000000000","message":"Add period.","commit_id":"661e91195795fa1808360996f50ac752bf2d12ae"}]}
