)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"8f4c53e30687f8ade7c6db2e2871c2ef8dbf8faa","unresolved":false,"context_lines":[{"line_number":12,"context_line":"Add the following drivers APIs:"},{"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":"* Get replication error status"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Depends-On: I4d488252bd670b3ebabbcc9f5e29e0e4e913765a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"df140735_bba86a77","line":15,"range":{"start_line":15,"start_character":2,"end_line":15,"end_character":11},"updated":"2017-05-29 00:05:08.000000000","message":"Failover?","commit_id":"ac136fa0288f415ed69fb1ce52d37f0547a44f68"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f9919e85b48708fea8ff331701387ae0848ebdc0","unresolved":false,"context_lines":[{"line_number":15,"context_line":"* Fail over replication"},{"line_number":16,"context_line":"* Get replication error status"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Depends-On: I4d488252bd670b3ebabbcc9f5e29e0e4e913765a"},{"line_number":19,"context_line":"Implements: blueprint replication-cg-ibm-storage"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: Ia4af4dd011d569a3ac84387b37dcf2606da48fba"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"df140735_aa080dd9","line":18,"updated":"2017-06-07 03:43:19.000000000","message":"Depends-On is used for dependencies across different repo\u0027s.  Here your patch and my patch that adds replication group support are both in Cinder.  You should make your branch dependent on mine.  Otherwise you can\u0027t test your patch.","commit_id":"b6d7e7c8648c4d48bc59b748289768234b308b66"}],"cinder/tests/unit/volume/drivers/ibm/test_ibm_storage.py":[{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"b3cbeeb7c1bf280aa1ade2e36acf4879c4a376a7","unresolved":false,"context_lines":[{"line_number":277,"context_line":"        return target_id, volume_update_list"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    def enable_replication(self, context, group, volumes):"},{"line_number":280,"context_line":"        return {\u0027status\u0027: fields.ReplicationStatus.ENABLED}, volumes"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    def disable_replication(self, context, group, volumes):"},{"line_number":283,"context_line":"        return {\u0027status\u0027: fields.ReplicationStatus.DISABLED}, volumes"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f044301_e9aebe96","line":280,"range":{"start_line":280,"start_character":61,"end_line":280,"end_character":68},"updated":"2017-05-09 01:22:43.000000000","message":"the status of group returned should be {\u0027replication_status\u0027: fields.ReplicationStatus.ENABLED},\n\nand please return the status of volumes too, such as {\u0027id\u0027: volume.id, \u0027replication_status\u0027: fields.ReplicationStatus.ENABLED, ...},\n\nand fake exception in this method too.","commit_id":"f78e9fbaa915770058e358e7dbb01df9b84850c5"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"3cc92363ff06b4362d0e3d34ed7c170d4108d1a6","unresolved":false,"context_lines":[{"line_number":277,"context_line":"        return target_id, volume_update_list"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    def enable_replication(self, context, group, volumes):"},{"line_number":280,"context_line":"        return {\u0027status\u0027: fields.ReplicationStatus.ENABLED}, volumes"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    def disable_replication(self, context, group, volumes):"},{"line_number":283,"context_line":"        return {\u0027status\u0027: fields.ReplicationStatus.DISABLED}, volumes"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f044301_ac81d3fd","line":280,"range":{"start_line":280,"start_character":61,"end_line":280,"end_character":68},"in_reply_to":"3f044301_9fa3e19e","updated":"2017-05-10 01:19:28.000000000","message":"please don\u0027t return volumes directly, it means that our APIs of replication group are not consistency with the requirement of base cinder. which require driver to return the replication status of volumes in the format of {\u0027id\u0027: volume.id, \u0027replication_status\u0027: xxxx, ...}, please check how the manage.py does.\n\nand i strongly recommend to add case of exception in the fake implementation.","commit_id":"f78e9fbaa915770058e358e7dbb01df9b84850c5"},{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"5ee81c6c7dec2552b8b6969a103c48a1d3153245","unresolved":false,"context_lines":[{"line_number":277,"context_line":"        return target_id, volume_update_list"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    def enable_replication(self, context, group, volumes):"},{"line_number":280,"context_line":"        return {\u0027status\u0027: fields.ReplicationStatus.ENABLED}, volumes"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    def disable_replication(self, context, group, volumes):"},{"line_number":283,"context_line":"        return {\u0027status\u0027: fields.ReplicationStatus.DISABLED}, volumes"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f044301_9fa3e19e","line":280,"range":{"start_line":280,"start_character":61,"end_line":280,"end_character":68},"in_reply_to":"3f044301_e9aebe96","updated":"2017-05-09 13:40:45.000000000","message":"The test here comes to check the API. this means that it is important to check the type of the input parameters, checking the content is less important. I fixed it anyway. \nDone","commit_id":"f78e9fbaa915770058e358e7dbb01df9b84850c5"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"b3cbeeb7c1bf280aa1ade2e36acf4879c4a376a7","unresolved":false,"context_lines":[{"line_number":280,"context_line":"        return {\u0027status\u0027: fields.ReplicationStatus.ENABLED}, volumes"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    def disable_replication(self, context, group, volumes):"},{"line_number":283,"context_line":"        return {\u0027status\u0027: fields.ReplicationStatus.DISABLED}, volumes"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    def failover_replication(self, context, group, volumes, secondary_id):"},{"line_number":286,"context_line":"        return ({\u0027replication_status\u0027: fields.ReplicationStatus.FAILED_OVER},"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f044301_a990b64f","line":283,"range":{"start_line":283,"start_character":62,"end_line":283,"end_character":69},"updated":"2017-05-09 01:22:43.000000000","message":"ditto","commit_id":"f78e9fbaa915770058e358e7dbb01df9b84850c5"},{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"5ee81c6c7dec2552b8b6969a103c48a1d3153245","unresolved":false,"context_lines":[{"line_number":280,"context_line":"        return {\u0027status\u0027: fields.ReplicationStatus.ENABLED}, volumes"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    def disable_replication(self, context, group, volumes):"},{"line_number":283,"context_line":"        return {\u0027status\u0027: fields.ReplicationStatus.DISABLED}, volumes"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    def failover_replication(self, context, group, volumes, secondary_id):"},{"line_number":286,"context_line":"        return ({\u0027replication_status\u0027: fields.ReplicationStatus.FAILED_OVER},"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f044301_7ff495cf","line":283,"range":{"start_line":283,"start_character":62,"end_line":283,"end_character":69},"in_reply_to":"3f044301_a990b64f","updated":"2017-05-09 13:40:45.000000000","message":"Done","commit_id":"f78e9fbaa915770058e358e7dbb01df9b84850c5"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"b3cbeeb7c1bf280aa1ade2e36acf4879c4a376a7","unresolved":false,"context_lines":[{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    def failover_replication(self, context, group, volumes, secondary_id):"},{"line_number":286,"context_line":"        return ({\u0027replication_status\u0027: fields.ReplicationStatus.FAILED_OVER},"},{"line_number":287,"context_line":"                volumes)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def get_replication_error_status(self, context, groups):"},{"line_number":290,"context_line":"        return([{"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f044301_899f3a5e","line":287,"range":{"start_line":287,"start_character":23,"end_line":287,"end_character":24},"updated":"2017-05-09 01:22:43.000000000","message":"ditto","commit_id":"f78e9fbaa915770058e358e7dbb01df9b84850c5"},{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"5ee81c6c7dec2552b8b6969a103c48a1d3153245","unresolved":false,"context_lines":[{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    def failover_replication(self, context, group, volumes, secondary_id):"},{"line_number":286,"context_line":"        return ({\u0027replication_status\u0027: fields.ReplicationStatus.FAILED_OVER},"},{"line_number":287,"context_line":"                volumes)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def get_replication_error_status(self, context, groups):"},{"line_number":290,"context_line":"        return([{"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f044301_3ffe0dae","line":287,"range":{"start_line":287,"start_character":23,"end_line":287,"end_character":24},"in_reply_to":"3f044301_899f3a5e","updated":"2017-05-09 13:40:45.000000000","message":"Done","commit_id":"f78e9fbaa915770058e358e7dbb01df9b84850c5"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"b3cbeeb7c1bf280aa1ade2e36acf4879c4a376a7","unresolved":false,"context_lines":[{"line_number":289,"context_line":"    def get_replication_error_status(self, context, groups):"},{"line_number":290,"context_line":"        return([{"},{"line_number":291,"context_line":"            \u0027replication_status\u0027: fields.ReplicationStatus.FAILOVER_ERROR"},{"line_number":292,"context_line":"        }], [])"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"class IBMStorageVolumeDriverTest(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f044301_a979d62f","line":292,"range":{"start_line":292,"start_character":12,"end_line":292,"end_character":15},"updated":"2017-05-09 01:22:43.000000000","message":"you should return the status of volumes in the groups too.","commit_id":"f78e9fbaa915770058e358e7dbb01df9b84850c5"},{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"5ee81c6c7dec2552b8b6969a103c48a1d3153245","unresolved":false,"context_lines":[{"line_number":289,"context_line":"    def get_replication_error_status(self, context, groups):"},{"line_number":290,"context_line":"        return([{"},{"line_number":291,"context_line":"            \u0027replication_status\u0027: fields.ReplicationStatus.FAILOVER_ERROR"},{"line_number":292,"context_line":"        }], [])"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"class IBMStorageVolumeDriverTest(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f044301_1f2fd13f","line":292,"range":{"start_line":292,"start_character":12,"end_line":292,"end_character":15},"in_reply_to":"3f044301_a979d62f","updated":"2017-05-09 13:40:45.000000000","message":"Done","commit_id":"f78e9fbaa915770058e358e7dbb01df9b84850c5"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"b3cbeeb7c1bf280aa1ade2e36acf4879c4a376a7","unresolved":false,"context_lines":[{"line_number":926,"context_line":"        self.driver.do_setup(None)"},{"line_number":927,"context_line":"        model_update, volumes_model_update \u003d self.driver.enable_replication("},{"line_number":928,"context_line":"            CONTEXT, GROUP, [VOLUME])"},{"line_number":929,"context_line":"        self.assertEqual(model_update[\u0027status\u0027],"},{"line_number":930,"context_line":"                         fields.ReplicationStatus.ENABLED)"},{"line_number":931,"context_line":"        self.assertEqual(volumes_model_update, [VOLUME])"},{"line_number":932,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f044301_6973ce4e","line":929,"range":{"start_line":929,"start_character":39,"end_line":929,"end_character":45},"updated":"2017-05-09 01:22:43.000000000","message":"it should be replication_status","commit_id":"f78e9fbaa915770058e358e7dbb01df9b84850c5"},{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"5ee81c6c7dec2552b8b6969a103c48a1d3153245","unresolved":false,"context_lines":[{"line_number":926,"context_line":"        self.driver.do_setup(None)"},{"line_number":927,"context_line":"        model_update, volumes_model_update \u003d self.driver.enable_replication("},{"line_number":928,"context_line":"            CONTEXT, GROUP, [VOLUME])"},{"line_number":929,"context_line":"        self.assertEqual(model_update[\u0027status\u0027],"},{"line_number":930,"context_line":"                         fields.ReplicationStatus.ENABLED)"},{"line_number":931,"context_line":"        self.assertEqual(volumes_model_update, [VOLUME])"},{"line_number":932,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f044301_ff31c5a3","line":929,"range":{"start_line":929,"start_character":39,"end_line":929,"end_character":45},"in_reply_to":"3f044301_6973ce4e","updated":"2017-05-09 13:40:45.000000000","message":"Done","commit_id":"f78e9fbaa915770058e358e7dbb01df9b84850c5"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"b3cbeeb7c1bf280aa1ade2e36acf4879c4a376a7","unresolved":false,"context_lines":[{"line_number":934,"context_line":"        self.driver.do_setup(None)"},{"line_number":935,"context_line":"        model_update, volumes_model_update \u003d self.driver.disable_replication("},{"line_number":936,"context_line":"            CONTEXT, GROUP, [VOLUME])"},{"line_number":937,"context_line":"        self.assertEqual(model_update[\u0027status\u0027],"},{"line_number":938,"context_line":"                         fields.ReplicationStatus.DISABLED)"},{"line_number":939,"context_line":"        self.assertEqual(volumes_model_update, [VOLUME])"},{"line_number":940,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f044301_49901244","line":937,"range":{"start_line":937,"start_character":39,"end_line":937,"end_character":45},"updated":"2017-05-09 01:22:43.000000000","message":"ditto","commit_id":"f78e9fbaa915770058e358e7dbb01df9b84850c5"},{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"5ee81c6c7dec2552b8b6969a103c48a1d3153245","unresolved":false,"context_lines":[{"line_number":934,"context_line":"        self.driver.do_setup(None)"},{"line_number":935,"context_line":"        model_update, volumes_model_update \u003d self.driver.disable_replication("},{"line_number":936,"context_line":"            CONTEXT, GROUP, [VOLUME])"},{"line_number":937,"context_line":"        self.assertEqual(model_update[\u0027status\u0027],"},{"line_number":938,"context_line":"                         fields.ReplicationStatus.DISABLED)"},{"line_number":939,"context_line":"        self.assertEqual(volumes_model_update, [VOLUME])"},{"line_number":940,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f044301_df284935","line":937,"range":{"start_line":937,"start_character":39,"end_line":937,"end_character":45},"in_reply_to":"3f044301_49901244","updated":"2017-05-09 13:40:45.000000000","message":"Done","commit_id":"f78e9fbaa915770058e358e7dbb01df9b84850c5"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"d2167890582c0b53985d616958ea2e4991fa3d57","unresolved":false,"context_lines":[{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    def get_replication_error_status(self, context, groups):"},{"line_number":313,"context_line":"        return("},{"line_number":314,"context_line":"            [{\u0027replication_status\u0027: fields.ReplicationStatus.FAILOVER_ERROR}],"},{"line_number":315,"context_line":"            [{\u0027status\u0027: fields.ReplicationStatus.FAILOVER_ERROR}])"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"class IBMStorageVolumeDriverTest(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f013ff3_44a24d4d","line":315,"range":{"start_line":314,"start_character":12,"end_line":315,"end_character":65},"updated":"2017-05-17 05:55:19.000000000","message":"should be returned as below:\n[{\u0027group_id\u0027: xxxx, replication_status\u0027: fields.ReplicationStatus.FAILOVER_ERROR}, ...],\n[{\u0027volume_id\u0027: xxxx, \u0027replication_status\u0027: fields.ReplicationStatus.FAILOVER_ERROR}, ...]","commit_id":"4d3f5be2a7ac7e23124394f70021f88d63280e94"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"d2167890582c0b53985d616958ea2e4991fa3d57","unresolved":false,"context_lines":[{"line_number":949,"context_line":"        self.driver.do_setup(None)"},{"line_number":950,"context_line":"        model_update, volumes_model_update \u003d self.driver.enable_replication("},{"line_number":951,"context_line":"            CONTEXT, GROUP, [REPLICATED_VOLUME])"},{"line_number":952,"context_line":"        self.assertEqual(model_update[\u0027replication_status\u0027],"},{"line_number":953,"context_line":"                         fields.ReplicationStatus.ENABLED)"},{"line_number":954,"context_line":"        for vol in volumes_model_update:"},{"line_number":955,"context_line":"            self.assertEqual(vol[\u0027replication_status\u0027],"},{"line_number":956,"context_line":"                             fields.ReplicationStatus.ENABLED)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f013ff3_243f4126","line":953,"range":{"start_line":952,"start_character":8,"end_line":953,"end_character":58},"updated":"2017-05-17 05:55:19.000000000","message":"nits: revert the order of the parameter.","commit_id":"4d3f5be2a7ac7e23124394f70021f88d63280e94"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"d2167890582c0b53985d616958ea2e4991fa3d57","unresolved":false,"context_lines":[{"line_number":962,"context_line":"        self.assertEqual(model_update[\u0027replication_status\u0027],"},{"line_number":963,"context_line":"                         fields.ReplicationStatus.DISABLED)"},{"line_number":964,"context_line":"        for vol in volumes_model_update:"},{"line_number":965,"context_line":"            self.assertEqual(volumes_model_update[0][\u0027replication_status\u0027],"},{"line_number":966,"context_line":"                             fields.ReplicationStatus.DISABLED),"},{"line_number":967,"context_line":""},{"line_number":968,"context_line":"    def test_failover_replication(self):"},{"line_number":969,"context_line":"        self.driver.do_setup(None)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f013ff3_4486cddd","line":966,"range":{"start_line":965,"start_character":12,"end_line":966,"end_character":63},"updated":"2017-05-17 05:55:19.000000000","message":"ditto","commit_id":"4d3f5be2a7ac7e23124394f70021f88d63280e94"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"d2167890582c0b53985d616958ea2e4991fa3d57","unresolved":false,"context_lines":[{"line_number":969,"context_line":"        self.driver.do_setup(None)"},{"line_number":970,"context_line":"        model_update, volumes_model_update \u003d self.driver.failover_replication("},{"line_number":971,"context_line":"            CONTEXT, GROUP, [VOLUME], SECONDARY)"},{"line_number":972,"context_line":"        self.assertEqual(model_update[\u0027replication_status\u0027],"},{"line_number":973,"context_line":"                         fields.ReplicationStatus.FAILED_OVER)"},{"line_number":974,"context_line":""},{"line_number":975,"context_line":"    def test_get_replication_error_status(self):"},{"line_number":976,"context_line":"        self.driver.do_setup(None)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f013ff3_0468c51e","line":973,"range":{"start_line":972,"start_character":8,"end_line":973,"end_character":62},"updated":"2017-05-17 05:55:19.000000000","message":"ditto","commit_id":"4d3f5be2a7ac7e23124394f70021f88d63280e94"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"d2167890582c0b53985d616958ea2e4991fa3d57","unresolved":false,"context_lines":[{"line_number":976,"context_line":"        self.driver.do_setup(None)"},{"line_number":977,"context_line":"        group_model_updates, volume_model_updates \u003d ("},{"line_number":978,"context_line":"            self.driver.get_replication_error_status(CONTEXT, [GROUP]))"},{"line_number":979,"context_line":"        self.assertEqual(group_model_updates[0][\u0027replication_status\u0027],"},{"line_number":980,"context_line":"                         fields.ReplicationStatus.FAILOVER_ERROR)"},{"line_number":981,"context_line":"        self.assertEqual(volume_model_updates[0][\u0027status\u0027],"},{"line_number":982,"context_line":"                         fields.ReplicationStatus.FAILOVER_ERROR)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f013ff3_a462313d","line":982,"range":{"start_line":979,"start_character":8,"end_line":982,"end_character":65},"updated":"2017-05-17 05:55:19.000000000","message":"ditto","commit_id":"4d3f5be2a7ac7e23124394f70021f88d63280e94"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"df25c52b4c91a95be875753eb68f8d1d7fbff3db","unresolved":false,"context_lines":[{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    def get_replication_error_status(self, context, groups):"},{"line_number":313,"context_line":"        return("},{"line_number":314,"context_line":"            [{\u0027id\u0027: groups[0][\u0027id\u0027],"},{"line_number":315,"context_line":"              \u0027replication_status\u0027: fields.ReplicationStatus.ERROR}],"},{"line_number":316,"context_line":"            [{\u0027id\u0027: VOLUME[\u0027id\u0027],"},{"line_number":317,"context_line":"              \u0027replication_status\u0027: fields.ReplicationStatus.ERROR}])"}],"source_content_type":"text/x-python","patch_set":7,"id":"ff0f0b1f_32e6af46","line":314,"range":{"start_line":314,"start_character":14,"end_line":314,"end_character":18},"updated":"2017-05-18 01:14:36.000000000","message":"it is \u0027group_id\u0027, not \u0027id\u0027.\n\nfor grp_update in group_model_updates:\n    grp_obj \u003d objects.Group.get_by_id(\n        context, grp_update[\u0027group_id\u0027])\n    grp_obj.update(grp_update)\n    grp_obj.save()","commit_id":"f6b066ed04433b4632b168b52bca903d90333aeb"},{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"b2bcf3bd0f7acfafbf6096c2bf2d7afdc1ef3b52","unresolved":false,"context_lines":[{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    def get_replication_error_status(self, context, groups):"},{"line_number":313,"context_line":"        return("},{"line_number":314,"context_line":"            [{\u0027id\u0027: groups[0][\u0027id\u0027],"},{"line_number":315,"context_line":"              \u0027replication_status\u0027: fields.ReplicationStatus.ERROR}],"},{"line_number":316,"context_line":"            [{\u0027id\u0027: VOLUME[\u0027id\u0027],"},{"line_number":317,"context_line":"              \u0027replication_status\u0027: fields.ReplicationStatus.ERROR}])"}],"source_content_type":"text/x-python","patch_set":7,"id":"ff0f0b1f_ab27dd12","line":314,"range":{"start_line":314,"start_character":14,"end_line":314,"end_character":18},"in_reply_to":"ff0f0b1f_32e6af46","updated":"2017-05-18 10:38:29.000000000","message":"Done","commit_id":"f6b066ed04433b4632b168b52bca903d90333aeb"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"df25c52b4c91a95be875753eb68f8d1d7fbff3db","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        return("},{"line_number":314,"context_line":"            [{\u0027id\u0027: groups[0][\u0027id\u0027],"},{"line_number":315,"context_line":"              \u0027replication_status\u0027: fields.ReplicationStatus.ERROR}],"},{"line_number":316,"context_line":"            [{\u0027id\u0027: VOLUME[\u0027id\u0027],"},{"line_number":317,"context_line":"              \u0027replication_status\u0027: fields.ReplicationStatus.ERROR}])"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ff0f0b1f_32546fca","line":316,"range":{"start_line":316,"start_character":14,"end_line":316,"end_character":18},"updated":"2017-05-18 01:14:36.000000000","message":"it is \u0027volume_id\u0027, not \u0027id\u0027. it is a little weird that xyang \ndoesn\u0027t make it consistency with other APIs, such as failover_replication, disable_replication and enable_replication.\n\nfor vol_update in volume_model_updates:\n    vol_obj \u003d objects.Volume.get_by_id(\n        context, vol_update[\u0027volume_id\u0027])\n    vol_obj.update(vol_update)\n    vol_obj.save()","commit_id":"f6b066ed04433b4632b168b52bca903d90333aeb"},{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"b2bcf3bd0f7acfafbf6096c2bf2d7afdc1ef3b52","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        return("},{"line_number":314,"context_line":"            [{\u0027id\u0027: groups[0][\u0027id\u0027],"},{"line_number":315,"context_line":"              \u0027replication_status\u0027: fields.ReplicationStatus.ERROR}],"},{"line_number":316,"context_line":"            [{\u0027id\u0027: VOLUME[\u0027id\u0027],"},{"line_number":317,"context_line":"              \u0027replication_status\u0027: fields.ReplicationStatus.ERROR}])"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ff0f0b1f_8b24190f","line":316,"range":{"start_line":316,"start_character":14,"end_line":316,"end_character":18},"in_reply_to":"ff0f0b1f_32546fca","updated":"2017-05-18 10:38:29.000000000","message":"Done","commit_id":"f6b066ed04433b4632b168b52bca903d90333aeb"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"6f94dc67a274065b99c6589847d4904542b90c10","unresolved":false,"context_lines":[{"line_number":56,"context_line":"REPLICA_FAKE \u003d \"repicated_fake\""},{"line_number":57,"context_line":"REPLICATED_VOLUME \u003d {\u0027size\u0027: 64,"},{"line_number":58,"context_line":"                     \u0027name\u0027: REPLICA_FAKE,"},{"line_number":59,"context_line":"                     \u0027id\u0027: 2,"},{"line_number":60,"context_line":"                     \u0027status\u0027: fields.ReplicationStatus.ENABLED}"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"REPLICATED_VOLUME_DISABLED \u003d REPLICATED_VOLUME.copy()"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff0f0b1f_453c94c7","line":59,"range":{"start_line":59,"start_character":21,"end_line":59,"end_character":29},"updated":"2017-05-19 01:59:55.000000000","message":"so weird that we used int type for \u0027id\u0027, it should be string.","commit_id":"9e0ce0667a1381c33fe3f55855fedac5e439e07f"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"6f94dc67a274065b99c6589847d4904542b90c10","unresolved":false,"context_lines":[{"line_number":57,"context_line":"REPLICATED_VOLUME \u003d {\u0027size\u0027: 64,"},{"line_number":58,"context_line":"                     \u0027name\u0027: REPLICA_FAKE,"},{"line_number":59,"context_line":"                     \u0027id\u0027: 2,"},{"line_number":60,"context_line":"                     \u0027status\u0027: fields.ReplicationStatus.ENABLED}"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"REPLICATED_VOLUME_DISABLED \u003d REPLICATED_VOLUME.copy()"},{"line_number":63,"context_line":"REPLICATED_VOLUME_DISABLED[\u0027status\u0027] \u003d fields.ReplicationStatus.DISABLED"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff0f0b1f_a23486fc","line":60,"range":{"start_line":60,"start_character":21,"end_line":60,"end_character":63},"updated":"2017-05-19 01:59:55.000000000","message":"I am sorry that i did not take notice of this before, it should be \u0027replication_status\u0027, and the value of \u0027status should be \u0027available\u0027.","commit_id":"9e0ce0667a1381c33fe3f55855fedac5e439e07f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f9919e85b48708fea8ff331701387ae0848ebdc0","unresolved":false,"context_lines":[{"line_number":955,"context_line":"        self.assertEqual(model_update[\u0027replication_status\u0027],"},{"line_number":956,"context_line":"                         fields.ReplicationStatus.ENABLED)"},{"line_number":957,"context_line":"        for vol in volumes_model_update:"},{"line_number":958,"context_line":"            self.assertEqual(vol[\u0027replication_status\u0027],"},{"line_number":959,"context_line":"                             fields.ReplicationStatus.ENABLED)"},{"line_number":960,"context_line":""},{"line_number":961,"context_line":"    def test_disable_replication(self):"},{"line_number":962,"context_line":"        self.driver.do_setup(None)"}],"source_content_type":"text/x-python","patch_set":12,"id":"df140735_ca74619f","line":959,"range":{"start_line":958,"start_character":1,"end_line":959,"end_character":62},"updated":"2017-06-07 03:43:19.000000000","message":"This is reversed.  Should be self.assertEqual(fields.ReplicationStatus.ENABLED,\nvol[\u0027replication_status\u0027])","commit_id":"b6d7e7c8648c4d48bc59b748289768234b308b66"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f9919e85b48708fea8ff331701387ae0848ebdc0","unresolved":false,"context_lines":[{"line_number":965,"context_line":"        self.assertEqual(model_update[\u0027replication_status\u0027],"},{"line_number":966,"context_line":"                         fields.ReplicationStatus.DISABLED)"},{"line_number":967,"context_line":"        for vol in volumes_model_update:"},{"line_number":968,"context_line":"            self.assertEqual(volumes_model_update[0][\u0027replication_status\u0027],"},{"line_number":969,"context_line":"                             fields.ReplicationStatus.DISABLED),"},{"line_number":970,"context_line":""},{"line_number":971,"context_line":"    def test_failover_replication(self):"},{"line_number":972,"context_line":"        self.driver.do_setup(None)"}],"source_content_type":"text/x-python","patch_set":12,"id":"df140735_aa792d94","line":969,"range":{"start_line":968,"start_character":29,"end_line":969,"end_character":62},"updated":"2017-06-07 03:43:19.000000000","message":"Reversed.","commit_id":"b6d7e7c8648c4d48bc59b748289768234b308b66"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f9919e85b48708fea8ff331701387ae0848ebdc0","unresolved":false,"context_lines":[{"line_number":972,"context_line":"        self.driver.do_setup(None)"},{"line_number":973,"context_line":"        model_update, volumes_model_update \u003d self.driver.failover_replication("},{"line_number":974,"context_line":"            CONTEXT, GROUP, [VOLUME], SECONDARY)"},{"line_number":975,"context_line":"        self.assertEqual(model_update[\u0027replication_status\u0027],"},{"line_number":976,"context_line":"                         fields.ReplicationStatus.FAILED_OVER)"},{"line_number":977,"context_line":""},{"line_number":978,"context_line":"    def test_get_replication_error_status(self):"},{"line_number":979,"context_line":"        self.driver.do_setup(None)"}],"source_content_type":"text/x-python","patch_set":12,"id":"df140735_8a6e69c7","line":976,"range":{"start_line":975,"start_character":25,"end_line":976,"end_character":61},"updated":"2017-06-07 03:43:19.000000000","message":"Same","commit_id":"b6d7e7c8648c4d48bc59b748289768234b308b66"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f9919e85b48708fea8ff331701387ae0848ebdc0","unresolved":false,"context_lines":[{"line_number":979,"context_line":"        self.driver.do_setup(None)"},{"line_number":980,"context_line":"        group_model_updates, volume_model_updates \u003d ("},{"line_number":981,"context_line":"            self.driver.get_replication_error_status(CONTEXT, [GROUP]))"},{"line_number":982,"context_line":"        self.assertEqual(group_model_updates[0][\u0027replication_status\u0027],"},{"line_number":983,"context_line":"                         fields.ReplicationStatus.ERROR)"},{"line_number":984,"context_line":"        self.assertEqual(volume_model_updates[0][\u0027replication_status\u0027],"},{"line_number":985,"context_line":"                         fields.ReplicationStatus.ERROR)"}],"source_content_type":"text/x-python","patch_set":12,"id":"df140735_6aa8b5da","line":985,"range":{"start_line":982,"start_character":0,"end_line":985,"end_character":56},"updated":"2017-06-07 03:43:19.000000000","message":"Reversed.","commit_id":"b6d7e7c8648c4d48bc59b748289768234b308b66"}],"cinder/volume/drivers/ibm/ibm_storage/ibm_storage.py":[{"author":{"_account_id":17947,"name":"Tzur Eliyahu","email":"tzure@il.ibm.com","username":"TzurEliyahu"},"change_message_id":"3537f4ab4cfd8402fe62cb332c8a86e427abfaa9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"1f013ff3_1d712faa","line":284,"updated":"2017-05-17 08:54:25.000000000","message":"according to this:\nhttps://specs.openstack.org/openstack/cinder-specs/specs/pike/replication-group.html#proposed-change\n\nwe need to add \u0027list_replication_targets\u0027 function as well, if we want to support group replication.","commit_id":"4d3f5be2a7ac7e23124394f70021f88d63280e94"},{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"a875103a489f1997fcc864bbb4e61717c453747e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"1f013ff3_402fd0f5","line":284,"in_reply_to":"1f013ff3_1d712faa","updated":"2017-05-17 09:29:08.000000000","message":"This function is implemented in manager.py. see:\nhttps://review.openstack.org/#/c/352228/25/cinder/volume/manager.py","commit_id":"4d3f5be2a7ac7e23124394f70021f88d63280e94"}]}
