)]}'
{"cinder/tests/unit/volume/drivers/dell_emc/vnx/fake_exception.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4cc908b44085afcd9a53c6580313eb08270b4b68","unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"class VNXMirrorGroupNotFoundError(VNXMirrorException):"},{"line_number":192,"context_line":"    message \u003d \u0027Unable to locate the specified group\u0027"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"class VNXMirrorGroupAlreadyMemberError(VNXMirrorException):"},{"line_number":196,"context_line":"    message \u003d \u0027The mirror is already a member of a group\u0027"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"class VNXMirrorGroupMirrorNotMemberError(VNXMirrorException):"},{"line_number":200,"context_line":"    message \u003d \u0027The specified mirror is not a member of the group\u0027"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"class VNXMirrorGroupAlreadyPromotedError(VNXMirrorException):"}],"source_content_type":"text/x-python","patch_set":15,"id":"3f1d235d_7915949b","line":200,"range":{"start_line":192,"start_character":4,"end_line":200,"end_character":65},"updated":"2017-07-05 15:22:35.000000000","message":"Should the \"group\" be changed to \"Mirror Group\" to be consistent with message on line 188?","commit_id":"c9f228a024fdd6dc9505dcae322318ca32912425"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"5ec16b4b30973fd9dc9b14835f23f1e34cc7bd19","unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"class VNXMirrorGroupNotFoundError(VNXMirrorException):"},{"line_number":192,"context_line":"    message \u003d \u0027Unable to locate the specified group\u0027"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"class VNXMirrorGroupAlreadyMemberError(VNXMirrorException):"},{"line_number":196,"context_line":"    message \u003d \u0027The mirror is already a member of a group\u0027"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"class VNXMirrorGroupMirrorNotMemberError(VNXMirrorException):"},{"line_number":200,"context_line":"    message \u003d \u0027The specified mirror is not a member of the group\u0027"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"class VNXMirrorGroupAlreadyPromotedError(VNXMirrorException):"}],"source_content_type":"text/x-python","patch_set":15,"id":"3f1d235d_a6f1b96d","line":200,"range":{"start_line":192,"start_character":4,"end_line":200,"end_character":65},"in_reply_to":"3f1d235d_7915949b","updated":"2017-07-06 01:42:36.000000000","message":"Hi xing,\nAgreed that they are not consistent with each other, but these messages are the output(part of) of naviseccli, and storops uses these message to detect exception type by exactly matching the naviseccli output.\n\nMaybe it\u0027s better to not modify it in order to adhere to storops and naviseccli output.\n\nThanks\nPeter","commit_id":"c9f228a024fdd6dc9505dcae322318ca32912425"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c1dad5a47e41dde07a3951ddb390ee9d64b46ccf","unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"class VNXMirrorGroupNotFoundError(VNXMirrorException):"},{"line_number":192,"context_line":"    message \u003d \u0027Unable to locate the specified group\u0027"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"class VNXMirrorGroupAlreadyMemberError(VNXMirrorException):"},{"line_number":196,"context_line":"    message \u003d \u0027The mirror is already a member of a group\u0027"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"class VNXMirrorGroupMirrorNotMemberError(VNXMirrorException):"},{"line_number":200,"context_line":"    message \u003d \u0027The specified mirror is not a member of the group\u0027"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"class VNXMirrorGroupAlreadyPromotedError(VNXMirrorException):"}],"source_content_type":"text/x-python","patch_set":15,"id":"3f1d235d_72fc783d","line":200,"range":{"start_line":192,"start_character":4,"end_line":200,"end_character":65},"in_reply_to":"3f1d235d_a6f1b96d","updated":"2017-07-06 04:02:25.000000000","message":"Sure.","commit_id":"c9f228a024fdd6dc9505dcae322318ca32912425"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4cc908b44085afcd9a53c6580313eb08270b4b68","unresolved":false,"context_lines":[{"line_number":201,"context_line":""},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"class VNXMirrorGroupAlreadyPromotedError(VNXMirrorException):"},{"line_number":204,"context_line":"    message \u003d \u0027The Consistency Group has no secondary images to promote\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"3f1d235d_b9d7acee","line":204,"range":{"start_line":204,"start_character":19,"end_line":204,"end_character":36},"updated":"2017-07-05 15:22:35.000000000","message":"Should this be changed to \"Mirror Group\" to be consistent with the message on line 188?","commit_id":"c9f228a024fdd6dc9505dcae322318ca32912425"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"5ec16b4b30973fd9dc9b14835f23f1e34cc7bd19","unresolved":false,"context_lines":[{"line_number":201,"context_line":""},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"class VNXMirrorGroupAlreadyPromotedError(VNXMirrorException):"},{"line_number":204,"context_line":"    message \u003d \u0027The Consistency Group has no secondary images to promote\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"3f1d235d_66e721ae","line":204,"range":{"start_line":204,"start_character":19,"end_line":204,"end_character":36},"in_reply_to":"3f1d235d_b9d7acee","updated":"2017-07-06 01:42:36.000000000","message":"same","commit_id":"c9f228a024fdd6dc9505dcae322318ca32912425"}],"cinder/tests/unit/volume/drivers/dell_emc/vnx/test_replication.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"2852355dc069085f5691e414f40e0658c3c4c43b","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"            fake_mirror.promote_mirror_group.assert_called_with("},{"line_number":90,"context_line":"                group.id.replace(\u0027-\u0027, \u0027\u0027))"},{"line_number":91,"context_line":"            self.assertEqual(\u0027failed-over\u0027, model_update[\u0027replication_status\u0027])"},{"line_number":92,"context_line":"            for update in volume_updates:"},{"line_number":93,"context_line":"                self.assertEqual(\u0027failed-over\u0027, update[\u0027replication_status\u0027])"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f1d235d_56ffb3a9","line":91,"range":{"start_line":91,"start_character":30,"end_line":91,"end_character":41},"updated":"2017-06-30 17:55:23.000000000","message":"Please use objects.fields.ReplicationStatus.","commit_id":"7e100a78e35fc6f1bce1cce35fe0d44325f834c3"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"6486b7e9e7d40e26d6a0c086a0da23c0728cbfeb","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"            fake_mirror.promote_mirror_group.assert_called_with("},{"line_number":90,"context_line":"                group.id.replace(\u0027-\u0027, \u0027\u0027))"},{"line_number":91,"context_line":"            self.assertEqual(\u0027failed-over\u0027, model_update[\u0027replication_status\u0027])"},{"line_number":92,"context_line":"            for update in volume_updates:"},{"line_number":93,"context_line":"                self.assertEqual(\u0027failed-over\u0027, update[\u0027replication_status\u0027])"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f1d235d_8205f4c4","line":91,"range":{"start_line":91,"start_character":30,"end_line":91,"end_character":41},"in_reply_to":"3f1d235d_56ffb3a9","updated":"2017-07-03 02:14:51.000000000","message":"Done","commit_id":"7e100a78e35fc6f1bce1cce35fe0d44325f834c3"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"2852355dc069085f5691e414f40e0658c3c4c43b","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                group.id.replace(\u0027-\u0027, \u0027\u0027))"},{"line_number":91,"context_line":"            self.assertEqual(\u0027failed-over\u0027, model_update[\u0027replication_status\u0027])"},{"line_number":92,"context_line":"            for update in volume_updates:"},{"line_number":93,"context_line":"                self.assertEqual(\u0027failed-over\u0027, update[\u0027replication_status\u0027])"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f1d235d_16337bad","line":93,"range":{"start_line":93,"start_character":34,"end_line":93,"end_character":45},"updated":"2017-06-30 17:55:23.000000000","message":"Same","commit_id":"7e100a78e35fc6f1bce1cce35fe0d44325f834c3"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"6486b7e9e7d40e26d6a0c086a0da23c0728cbfeb","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                group.id.replace(\u0027-\u0027, \u0027\u0027))"},{"line_number":91,"context_line":"            self.assertEqual(\u0027failed-over\u0027, model_update[\u0027replication_status\u0027])"},{"line_number":92,"context_line":"            for update in volume_updates:"},{"line_number":93,"context_line":"                self.assertEqual(\u0027failed-over\u0027, update[\u0027replication_status\u0027])"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f1d235d_620898d8","line":93,"range":{"start_line":93,"start_character":34,"end_line":93,"end_character":45},"in_reply_to":"3f1d235d_16337bad","updated":"2017-07-03 02:14:51.000000000","message":"Done","commit_id":"7e100a78e35fc6f1bce1cce35fe0d44325f834c3"}],"cinder/volume/drivers/dell_emc/vnx/adapter.py":[{"author":{"_account_id":23276,"name":"Nicholas Jones","email":"nj762h@att.com","username":"nj762h"},"change_message_id":"3cf8d00216a124ccbfad724dc39c4f75c3485611","unresolved":false,"context_lines":[{"line_number":1162,"context_line":"                     add_volumes\u003dNone, remove_volumes\u003dNone):"},{"line_number":1163,"context_line":"        \"\"\"Updates a group.\"\"\""},{"line_number":1164,"context_line":"        # 1. First make sure group and volumes have same"},{"line_number":1165,"context_line":"        #    replication extra-sepcs and replications status."},{"line_number":1166,"context_line":"        for volume in add_volumes:"},{"line_number":1167,"context_line":"            utils.check_type_matched(volume)"},{"line_number":1168,"context_line":"        for volume in remove_volumes:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_78f80a48","line":1165,"range":{"start_line":1165,"start_character":31,"end_line":1165,"end_character":36},"updated":"2017-04-27 14:58:05.000000000","message":"s/sepcs/specs/","commit_id":"a6a26e02de01f479805b4622e64cf2a60a6e1973"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"a80451758b0be33b853c41bfd6266419095b0e76","unresolved":false,"context_lines":[{"line_number":1162,"context_line":"                     add_volumes\u003dNone, remove_volumes\u003dNone):"},{"line_number":1163,"context_line":"        \"\"\"Updates a group.\"\"\""},{"line_number":1164,"context_line":"        # 1. First make sure group and volumes have same"},{"line_number":1165,"context_line":"        #    replication extra-sepcs and replications status."},{"line_number":1166,"context_line":"        for volume in add_volumes:"},{"line_number":1167,"context_line":"            utils.check_type_matched(volume)"},{"line_number":1168,"context_line":"        for volume in remove_volumes:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_dfd3715f","line":1165,"range":{"start_line":1165,"start_character":31,"end_line":1165,"end_character":36},"in_reply_to":"5ff73747_78f80a48","updated":"2017-04-28 01:22:01.000000000","message":"Done","commit_id":"a6a26e02de01f479805b4622e64cf2a60a6e1973"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"8167a6bec395c11879729039cc874145441ff0c3","unresolved":false,"context_lines":[{"line_number":37,"context_line":"from cinder.zonemanager import utils as zm_utils"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"storops \u003d importutils.try_import(\u0027storops\u0027)"},{"line_number":40,"context_line":"if storops:"},{"line_number":41,"context_line":"    from storops import exception as storops_ex"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":8,"id":"df140735_bb03c1be","line":40,"range":{"start_line":40,"start_character":0,"end_line":40,"end_character":11},"updated":"2017-06-07 06:30:14.000000000","message":"Consider here need a else since if can\u0027t import storops successfully, there will be some exception in below #213.","commit_id":"6a27c72d9bf89c5e36c447a6d081d5d74ff0e47a"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"1f9357bf99e5bf930367d0aff083956fae6e3933","unresolved":false,"context_lines":[{"line_number":37,"context_line":"from cinder.zonemanager import utils as zm_utils"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"storops \u003d importutils.try_import(\u0027storops\u0027)"},{"line_number":40,"context_line":"if storops:"},{"line_number":41,"context_line":"    from storops import exception as storops_ex"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":8,"id":"bf091321_44872bd9","line":40,"range":{"start_line":40,"start_character":0,"end_line":40,"end_character":11},"in_reply_to":"df140735_bb03c1be","updated":"2017-06-08 05:54:25.000000000","message":"according to community preference, third party package is not required for cinder, it should not report any error if not present.\nThanks\nPeter","commit_id":"6a27c72d9bf89c5e36c447a6d081d5d74ff0e47a"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"8167a6bec395c11879729039cc874145441ff0c3","unresolved":false,"context_lines":[{"line_number":1169,"context_line":"        \"\"\"Updates a group.\"\"\""},{"line_number":1170,"context_line":"        # 1. First make sure group and volumes have same"},{"line_number":1171,"context_line":"        #    replication extra-specs and replications status."},{"line_number":1172,"context_line":"        for volume in add_volumes:"},{"line_number":1173,"context_line":"            utils.check_type_matched(volume)"},{"line_number":1174,"context_line":"        for volume in remove_volumes:"},{"line_number":1175,"context_line":"            utils.check_type_matched(volume)"},{"line_number":1176,"context_line":"        # 2. Secondly, make sure replication status must be enabled for"},{"line_number":1177,"context_line":"        # replication-enabled group,"},{"line_number":1178,"context_line":"        utils.check_rep_status_matched(group)"}],"source_content_type":"text/x-python","patch_set":8,"id":"df140735_fb9c996b","line":1175,"range":{"start_line":1172,"start_character":0,"end_line":1175,"end_character":44},"updated":"2017-06-07 06:30:14.000000000","message":"Those could be merged as:\n\nfor volume in add_volumes + remove_volumes:","commit_id":"6a27c72d9bf89c5e36c447a6d081d5d74ff0e47a"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"1f9357bf99e5bf930367d0aff083956fae6e3933","unresolved":false,"context_lines":[{"line_number":1169,"context_line":"        \"\"\"Updates a group.\"\"\""},{"line_number":1170,"context_line":"        # 1. First make sure group and volumes have same"},{"line_number":1171,"context_line":"        #    replication extra-specs and replications status."},{"line_number":1172,"context_line":"        for volume in add_volumes:"},{"line_number":1173,"context_line":"            utils.check_type_matched(volume)"},{"line_number":1174,"context_line":"        for volume in remove_volumes:"},{"line_number":1175,"context_line":"            utils.check_type_matched(volume)"},{"line_number":1176,"context_line":"        # 2. Secondly, make sure replication status must be enabled for"},{"line_number":1177,"context_line":"        # replication-enabled group,"},{"line_number":1178,"context_line":"        utils.check_rep_status_matched(group)"}],"source_content_type":"text/x-python","patch_set":8,"id":"bf091321_04693324","line":1175,"range":{"start_line":1172,"start_character":0,"end_line":1175,"end_character":44},"in_reply_to":"df140735_fb9c996b","updated":"2017-06-08 05:54:25.000000000","message":"Good, addressed","commit_id":"6a27c72d9bf89c5e36c447a6d081d5d74ff0e47a"}],"cinder/volume/drivers/dell_emc/vnx/client.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd03f64c77def66ac25a0db36001188a278f37a7","unresolved":false,"context_lines":[{"line_number":614,"context_line":"            mg.add_mirror(mv)"},{"line_number":615,"context_line":"        except storops_ex.VNXMirrorGroupAlreadyMemberError:"},{"line_number":616,"context_line":"            LOG.info(\u0027Mirror %s is alrady a member of %s\u0027,"},{"line_number":617,"context_line":"                     mirror_name, group_name)"},{"line_number":618,"context_line":"        return mg"},{"line_number":619,"context_line":""},{"line_number":620,"context_line":"    def remove_mirror(self, group_name, mirror_name):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_3c88716f","line":617,"updated":"2017-04-26 04:56:11.000000000","message":"User named key words %(var)s","commit_id":"550c2a654154e7c764e7e89d0ec59ee9898427e9"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"c43444da65638d2ed2eb361fa657416a947d11d5","unresolved":false,"context_lines":[{"line_number":614,"context_line":"            mg.add_mirror(mv)"},{"line_number":615,"context_line":"        except storops_ex.VNXMirrorGroupAlreadyMemberError:"},{"line_number":616,"context_line":"            LOG.info(\u0027Mirror %s is alrady a member of %s\u0027,"},{"line_number":617,"context_line":"                     mirror_name, group_name)"},{"line_number":618,"context_line":"        return mg"},{"line_number":619,"context_line":""},{"line_number":620,"context_line":"    def remove_mirror(self, group_name, mirror_name):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_074e5a96","line":617,"in_reply_to":"5ff73747_3c88716f","updated":"2017-04-27 02:22:20.000000000","message":"Done","commit_id":"550c2a654154e7c764e7e89d0ec59ee9898427e9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd03f64c77def66ac25a0db36001188a278f37a7","unresolved":false,"context_lines":[{"line_number":624,"context_line":"            mg.remove_mirror(mv)"},{"line_number":625,"context_line":"        except storops_ex.VNXMirrorGroupMirrorNotMemberError:"},{"line_number":626,"context_line":"            LOG.info(\u0027Mirror %s was not a member of %s\u0027,"},{"line_number":627,"context_line":"                     mirror_name, group_name)"},{"line_number":628,"context_line":""},{"line_number":629,"context_line":"    def promote_mirror_group(self, group_name):"},{"line_number":630,"context_line":"        mg \u003d self.vnx.get_mirror_group(group_name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_fc81e94b","line":627,"updated":"2017-04-26 04:56:11.000000000","message":"Same","commit_id":"550c2a654154e7c764e7e89d0ec59ee9898427e9"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"c43444da65638d2ed2eb361fa657416a947d11d5","unresolved":false,"context_lines":[{"line_number":624,"context_line":"            mg.remove_mirror(mv)"},{"line_number":625,"context_line":"        except storops_ex.VNXMirrorGroupMirrorNotMemberError:"},{"line_number":626,"context_line":"            LOG.info(\u0027Mirror %s was not a member of %s\u0027,"},{"line_number":627,"context_line":"                     mirror_name, group_name)"},{"line_number":628,"context_line":""},{"line_number":629,"context_line":"    def promote_mirror_group(self, group_name):"},{"line_number":630,"context_line":"        mg \u003d self.vnx.get_mirror_group(group_name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_e7524e3b","line":627,"in_reply_to":"5ff73747_fc81e94b","updated":"2017-04-27 02:22:20.000000000","message":"Done","commit_id":"550c2a654154e7c764e7e89d0ec59ee9898427e9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"2852355dc069085f5691e414f40e0658c3c4c43b","unresolved":false,"context_lines":[{"line_number":613,"context_line":"        try:"},{"line_number":614,"context_line":"            mg.add_mirror(mv)"},{"line_number":615,"context_line":"        except storops_ex.VNXMirrorGroupAlreadyMemberError:"},{"line_number":616,"context_line":"            LOG.info(\u0027Mirror %(mirror)s is alrady a member of %(group)s\u0027,"},{"line_number":617,"context_line":"                     {\u0027mirror\u0027: mirror_name, \u0027group\u0027: group_name})"},{"line_number":618,"context_line":"        return mg"},{"line_number":619,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3f1d235d_56bc5304","line":616,"range":{"start_line":616,"start_character":43,"end_line":616,"end_character":49},"updated":"2017-06-30 17:55:23.000000000","message":"already","commit_id":"7e100a78e35fc6f1bce1cce35fe0d44325f834c3"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"6486b7e9e7d40e26d6a0c086a0da23c0728cbfeb","unresolved":false,"context_lines":[{"line_number":613,"context_line":"        try:"},{"line_number":614,"context_line":"            mg.add_mirror(mv)"},{"line_number":615,"context_line":"        except storops_ex.VNXMirrorGroupAlreadyMemberError:"},{"line_number":616,"context_line":"            LOG.info(\u0027Mirror %(mirror)s is alrady a member of %(group)s\u0027,"},{"line_number":617,"context_line":"                     {\u0027mirror\u0027: mirror_name, \u0027group\u0027: group_name})"},{"line_number":618,"context_line":"        return mg"},{"line_number":619,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3f1d235d_2212a00a","line":616,"range":{"start_line":616,"start_character":43,"end_line":616,"end_character":49},"in_reply_to":"3f1d235d_56bc5304","updated":"2017-07-03 02:14:51.000000000","message":"Done","commit_id":"7e100a78e35fc6f1bce1cce35fe0d44325f834c3"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"2852355dc069085f5691e414f40e0658c3c4c43b","unresolved":false,"context_lines":[{"line_number":623,"context_line":"        try:"},{"line_number":624,"context_line":"            mg.remove_mirror(mv)"},{"line_number":625,"context_line":"        except storops_ex.VNXMirrorGroupMirrorNotMemberError:"},{"line_number":626,"context_line":"            LOG.info(\u0027Mirror %(mirror)s was not a member of %(group)s\u0027,"},{"line_number":627,"context_line":"                     {\u0027mirror\u0027: mirror_name, \u0027group\u0027: group_name})"},{"line_number":628,"context_line":""},{"line_number":629,"context_line":"    def promote_mirror_group(self, group_name):"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f1d235d_f6591ffe","line":626,"range":{"start_line":626,"start_character":40,"end_line":626,"end_character":43},"updated":"2017-06-30 17:55:23.000000000","message":"is","commit_id":"7e100a78e35fc6f1bce1cce35fe0d44325f834c3"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"6486b7e9e7d40e26d6a0c086a0da23c0728cbfeb","unresolved":false,"context_lines":[{"line_number":623,"context_line":"        try:"},{"line_number":624,"context_line":"            mg.remove_mirror(mv)"},{"line_number":625,"context_line":"        except storops_ex.VNXMirrorGroupMirrorNotMemberError:"},{"line_number":626,"context_line":"            LOG.info(\u0027Mirror %(mirror)s was not a member of %(group)s\u0027,"},{"line_number":627,"context_line":"                     {\u0027mirror\u0027: mirror_name, \u0027group\u0027: group_name})"},{"line_number":628,"context_line":""},{"line_number":629,"context_line":"    def promote_mirror_group(self, group_name):"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f1d235d_02f9e4c6","line":626,"range":{"start_line":626,"start_character":40,"end_line":626,"end_character":43},"in_reply_to":"3f1d235d_f6591ffe","updated":"2017-07-03 02:14:51.000000000","message":"Done","commit_id":"7e100a78e35fc6f1bce1cce35fe0d44325f834c3"}],"cinder/volume/drivers/dell_emc/vnx/replication.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd03f64c77def66ac25a0db36001188a278f37a7","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            self.client.remove_mirror(group_name, mirror_name)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        if specs.is_replication_enabled:"},{"line_number":121,"context_line":"            LOG.debug(\u0027Starting cleanup replication from volume: \u0027"},{"line_number":122,"context_line":"                      \u0027%s.\u0027, volume.id)"},{"line_number":123,"context_line":"            mirror_name \u003d utils.construct_mirror_name(volume)"},{"line_number":124,"context_line":"            mirror_view \u003d self.build_mirror_view(self.config, True)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_bc3c81bf","line":121,"range":{"start_line":121,"start_character":52,"end_line":121,"end_character":56},"updated":"2017-04-26 04:56:11.000000000","message":"for","commit_id":"550c2a654154e7c764e7e89d0ec59ee9898427e9"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"c43444da65638d2ed2eb361fa657416a947d11d5","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            self.client.remove_mirror(group_name, mirror_name)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        if specs.is_replication_enabled:"},{"line_number":121,"context_line":"            LOG.debug(\u0027Starting cleanup replication from volume: \u0027"},{"line_number":122,"context_line":"                      \u0027%s.\u0027, volume.id)"},{"line_number":123,"context_line":"            mirror_name \u003d utils.construct_mirror_name(volume)"},{"line_number":124,"context_line":"            mirror_view \u003d self.build_mirror_view(self.config, True)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_87614a08","line":121,"range":{"start_line":121,"start_character":52,"end_line":121,"end_character":56},"in_reply_to":"5ff73747_bc3c81bf","updated":"2017-04-27 02:22:20.000000000","message":"Done","commit_id":"550c2a654154e7c764e7e89d0ec59ee9898427e9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd03f64c77def66ac25a0db36001188a278f37a7","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        if self.active_backend_id:"},{"line_number":185,"context_line":"            if backend_id !\u003d \u0027default\u0027:"},{"line_number":186,"context_line":"                raise exception.InvalidReplicationTarget("},{"line_number":187,"context_line":"                    reason\u003d\u0027Invalid backend_id specified.\u0027)"},{"line_number":188,"context_line":"        elif backend_id not in ("},{"line_number":189,"context_line":"                common.ReplicationDeviceList.get_backend_ids(self.config)):"},{"line_number":190,"context_line":"            raise exception.InvalidReplicationTarget("}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_dc6aadb1","line":187,"range":{"start_line":187,"start_character":27,"end_line":187,"end_character":58},"updated":"2017-04-26 04:56:11.000000000","message":"Need _","commit_id":"550c2a654154e7c764e7e89d0ec59ee9898427e9"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"c43444da65638d2ed2eb361fa657416a947d11d5","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        if self.active_backend_id:"},{"line_number":185,"context_line":"            if backend_id !\u003d \u0027default\u0027:"},{"line_number":186,"context_line":"                raise exception.InvalidReplicationTarget("},{"line_number":187,"context_line":"                    reason\u003d\u0027Invalid backend_id specified.\u0027)"},{"line_number":188,"context_line":"        elif backend_id not in ("},{"line_number":189,"context_line":"                common.ReplicationDeviceList.get_backend_ids(self.config)):"},{"line_number":190,"context_line":"            raise exception.InvalidReplicationTarget("}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_675e3e45","line":187,"range":{"start_line":187,"start_character":27,"end_line":187,"end_character":58},"in_reply_to":"5ff73747_dc6aadb1","updated":"2017-04-27 02:22:20.000000000","message":"Done","commit_id":"550c2a654154e7c764e7e89d0ec59ee9898427e9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd03f64c77def66ac25a0db36001188a278f37a7","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        elif backend_id not in ("},{"line_number":189,"context_line":"                common.ReplicationDeviceList.get_backend_ids(self.config)):"},{"line_number":190,"context_line":"            raise exception.InvalidReplicationTarget("},{"line_number":191,"context_line":"                reason\u003d\u0027Invalid backend_id specified.\u0027)"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    def failover_host(self, context, volumes, secondary_backend_id):"},{"line_number":194,"context_line":"        \"\"\"Fails over the volume back and forth."}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_bc65a1e3","line":191,"range":{"start_line":191,"start_character":23,"end_line":191,"end_character":54},"updated":"2017-04-26 04:56:11.000000000","message":"Need _","commit_id":"550c2a654154e7c764e7e89d0ec59ee9898427e9"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"c43444da65638d2ed2eb361fa657416a947d11d5","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        elif backend_id not in ("},{"line_number":189,"context_line":"                common.ReplicationDeviceList.get_backend_ids(self.config)):"},{"line_number":190,"context_line":"            raise exception.InvalidReplicationTarget("},{"line_number":191,"context_line":"                reason\u003d\u0027Invalid backend_id specified.\u0027)"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    def failover_host(self, context, volumes, secondary_backend_id):"},{"line_number":194,"context_line":"        \"\"\"Fails over the volume back and forth."}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_6723debe","line":191,"range":{"start_line":191,"start_character":23,"end_line":191,"end_character":54},"in_reply_to":"5ff73747_bc65a1e3","updated":"2017-04-27 02:22:20.000000000","message":"Done","commit_id":"550c2a654154e7c764e7e89d0ec59ee9898427e9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd03f64c77def66ac25a0db36001188a278f37a7","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        \"\"\"\"Fail-over the consistent mirror group."},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"        Note:"},{"line_number":276,"context_line":"            VNX supports fail-over all the mirrors as a whole,"},{"line_number":277,"context_line":"            no need to handle mirror one by one."},{"line_number":278,"context_line":"        \"\"\""},{"line_number":279,"context_line":"        volume_update_list \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_1ca6d511","line":276,"range":{"start_line":276,"start_character":35,"end_line":276,"end_character":50},"updated":"2017-04-26 04:56:11.000000000","message":"You mean \"all the mirrors in a group\"?  Please add \"in a group\".","commit_id":"550c2a654154e7c764e7e89d0ec59ee9898427e9"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"c43444da65638d2ed2eb361fa657416a947d11d5","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        \"\"\"\"Fail-over the consistent mirror group."},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"        Note:"},{"line_number":276,"context_line":"            VNX supports fail-over all the mirrors as a whole,"},{"line_number":277,"context_line":"            no need to handle mirror one by one."},{"line_number":278,"context_line":"        \"\"\""},{"line_number":279,"context_line":"        volume_update_list \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_0278888d","line":276,"range":{"start_line":276,"start_character":35,"end_line":276,"end_character":50},"in_reply_to":"5ff73747_1ca6d511","updated":"2017-04-27 02:22:20.000000000","message":"Added","commit_id":"550c2a654154e7c764e7e89d0ec59ee9898427e9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a3f2031e15089861eb3394833293a1330cba4105","unresolved":false,"context_lines":[{"line_number":315,"context_line":"        return group_update, volume_update_list"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"    def get_replication_error_status(self, context):"},{"line_number":318,"context_line":"        # TODO(peter) need xing\u0027s update"},{"line_number":319,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_b3e019fc","line":318,"updated":"2017-04-26 17:00:25.000000000","message":"Please take a look of my latest patch set.  I added groups as input parameter.","commit_id":"550c2a654154e7c764e7e89d0ec59ee9898427e9"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"c43444da65638d2ed2eb361fa657416a947d11d5","unresolved":false,"context_lines":[{"line_number":315,"context_line":"        return group_update, volume_update_list"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"    def get_replication_error_status(self, context):"},{"line_number":318,"context_line":"        # TODO(peter) need xing\u0027s update"},{"line_number":319,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_62686cb8","line":318,"in_reply_to":"5ff73747_b3e019fc","updated":"2017-04-27 02:22:20.000000000","message":"Changed this interface.","commit_id":"550c2a654154e7c764e7e89d0ec59ee9898427e9"},{"author":{"_account_id":23276,"name":"Nicholas Jones","email":"nj762h@att.com","username":"nj762h"},"change_message_id":"3cf8d00216a124ccbfad724dc39c4f75c3485611","unresolved":false,"context_lines":[{"line_number":245,"context_line":"                    \u0027volume_id\u0027: volume.id,"},{"line_number":246,"context_line":"                    \u0027updates\u0027: {\u0027status\u0027: \u0027error\u0027}})"},{"line_number":247,"context_line":"        # After failover, the secondary is now the primary,"},{"line_number":248,"context_line":"        # any sequential request will be redirected to it."},{"line_number":249,"context_line":"        self.client \u003d mirror_view.secondary_client"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"        return secondary_backend_id, volume_update_list"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_984d16c6","line":248,"range":{"start_line":248,"start_character":14,"end_line":248,"end_character":24},"updated":"2017-04-27 14:58:05.000000000","message":"minor nit: subsequent","commit_id":"a6a26e02de01f479805b4622e64cf2a60a6e1973"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"a80451758b0be33b853c41bfd6266419095b0e76","unresolved":false,"context_lines":[{"line_number":245,"context_line":"                    \u0027volume_id\u0027: volume.id,"},{"line_number":246,"context_line":"                    \u0027updates\u0027: {\u0027status\u0027: \u0027error\u0027}})"},{"line_number":247,"context_line":"        # After failover, the secondary is now the primary,"},{"line_number":248,"context_line":"        # any sequential request will be redirected to it."},{"line_number":249,"context_line":"        self.client \u003d mirror_view.secondary_client"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"        return secondary_backend_id, volume_update_list"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_1fbd5901","line":248,"range":{"start_line":248,"start_character":14,"end_line":248,"end_character":24},"in_reply_to":"5ff73747_984d16c6","updated":"2017-04-28 01:22:01.000000000","message":"Done","commit_id":"a6a26e02de01f479805b4622e64cf2a60a6e1973"},{"author":{"_account_id":23276,"name":"Nicholas Jones","email":"nj762h@att.com","username":"nj762h"},"change_message_id":"3cf8d00216a124ccbfad724dc39c4f75c3485611","unresolved":false,"context_lines":[{"line_number":253,"context_line":"    def enable_replication(self, context, group, volumes):"},{"line_number":254,"context_line":"        \"\"\"Enable the group replication."},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"        Note: this will not interfer the replication on individual LUNs."},{"line_number":257,"context_line":"        \"\"\""},{"line_number":258,"context_line":"        self.create_group_replication(group)"},{"line_number":259,"context_line":"        self.add_volumes_to_group_replication(group, volumes)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_38ce022e","line":256,"range":{"start_line":256,"start_character":28,"end_line":256,"end_character":36},"updated":"2017-04-27 14:58:05.000000000","message":"s/interfer/interfere with/","commit_id":"a6a26e02de01f479805b4622e64cf2a60a6e1973"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"a80451758b0be33b853c41bfd6266419095b0e76","unresolved":false,"context_lines":[{"line_number":253,"context_line":"    def enable_replication(self, context, group, volumes):"},{"line_number":254,"context_line":"        \"\"\"Enable the group replication."},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"        Note: this will not interfer the replication on individual LUNs."},{"line_number":257,"context_line":"        \"\"\""},{"line_number":258,"context_line":"        self.create_group_replication(group)"},{"line_number":259,"context_line":"        self.add_volumes_to_group_replication(group, volumes)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_7f433d14","line":256,"range":{"start_line":256,"start_character":28,"end_line":256,"end_character":36},"in_reply_to":"5ff73747_38ce022e","updated":"2017-04-28 01:22:01.000000000","message":"Done","commit_id":"a6a26e02de01f479805b4622e64cf2a60a6e1973"},{"author":{"_account_id":23276,"name":"Nicholas Jones","email":"nj762h@att.com","username":"nj762h"},"change_message_id":"3cf8d00216a124ccbfad724dc39c4f75c3485611","unresolved":false,"context_lines":[{"line_number":274,"context_line":""},{"line_number":275,"context_line":"        Note:"},{"line_number":276,"context_line":"            VNX supports fail over all the mirrors in a group as a whole,"},{"line_number":277,"context_line":"            no need to handle mirror one by one."},{"line_number":278,"context_line":"        \"\"\""},{"line_number":279,"context_line":"        volume_update_list \u003d []"},{"line_number":280,"context_line":"        group_update \u003d {\u0027replication_status\u0027: group.replication_status}"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_58f2ee71","line":277,"range":{"start_line":277,"start_character":29,"end_line":277,"end_character":30},"updated":"2017-04-27 14:58:05.000000000","message":"s/handle mirror/handle each mirror","commit_id":"a6a26e02de01f479805b4622e64cf2a60a6e1973"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"a80451758b0be33b853c41bfd6266419095b0e76","unresolved":false,"context_lines":[{"line_number":274,"context_line":""},{"line_number":275,"context_line":"        Note:"},{"line_number":276,"context_line":"            VNX supports fail over all the mirrors in a group as a whole,"},{"line_number":277,"context_line":"            no need to handle mirror one by one."},{"line_number":278,"context_line":"        \"\"\""},{"line_number":279,"context_line":"        volume_update_list \u003d []"},{"line_number":280,"context_line":"        group_update \u003d {\u0027replication_status\u0027: group.replication_status}"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_1f52f9de","line":277,"range":{"start_line":277,"start_character":29,"end_line":277,"end_character":30},"in_reply_to":"5ff73747_58f2ee71","updated":"2017-04-28 01:22:01.000000000","message":"Done","commit_id":"a6a26e02de01f479805b4622e64cf2a60a6e1973"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"2852355dc069085f5691e414f40e0658c3c4c43b","unresolved":false,"context_lines":[{"line_number":83,"context_line":"            self.client.create_mirror_group(group_name)"},{"line_number":84,"context_line":"            rep_update[\u0027replication_status\u0027] \u003d ("},{"line_number":85,"context_line":"                fields.ReplicationStatus.ENABLED)"},{"line_number":86,"context_line":"        return rep_update"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def add_volumes_to_group_replication(self, group, volumes):"},{"line_number":89,"context_line":"        group_specs \u003d common.ExtraSpecs.from_group(group)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f1d235d_76350fda","line":86,"range":{"start_line":86,"start_character":8,"end_line":86,"end_character":25},"updated":"2017-06-30 17:55:23.000000000","message":"The return param is not used in enable_replication.","commit_id":"7e100a78e35fc6f1bce1cce35fe0d44325f834c3"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"6486b7e9e7d40e26d6a0c086a0da23c0728cbfeb","unresolved":false,"context_lines":[{"line_number":83,"context_line":"            self.client.create_mirror_group(group_name)"},{"line_number":84,"context_line":"            rep_update[\u0027replication_status\u0027] \u003d ("},{"line_number":85,"context_line":"                fields.ReplicationStatus.ENABLED)"},{"line_number":86,"context_line":"        return rep_update"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def add_volumes_to_group_replication(self, group, volumes):"},{"line_number":89,"context_line":"        group_specs \u003d common.ExtraSpecs.from_group(group)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f1d235d_42b6bcfc","line":86,"range":{"start_line":86,"start_character":8,"end_line":86,"end_character":25},"in_reply_to":"3f1d235d_76350fda","updated":"2017-07-03 02:14:51.000000000","message":"This is intended, and use for create_group interface.","commit_id":"7e100a78e35fc6f1bce1cce35fe0d44325f834c3"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"2852355dc069085f5691e414f40e0658c3c4c43b","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        \"\"\""},{"line_number":258,"context_line":"        self.create_group_replication(group)"},{"line_number":259,"context_line":"        self.add_volumes_to_group_replication(group, volumes)"},{"line_number":260,"context_line":"        return [], []"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    def disable_replication(self, context, group, volumes):"},{"line_number":263,"context_line":"        \"\"\"Disable the group replication."}],"source_content_type":"text/x-python","patch_set":14,"id":"3f1d235d_5b047e17","line":260,"range":{"start_line":260,"start_character":15,"end_line":260,"end_character":17},"updated":"2017-06-30 17:55:23.000000000","message":"The first return param is a dict, not []","commit_id":"7e100a78e35fc6f1bce1cce35fe0d44325f834c3"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"6486b7e9e7d40e26d6a0c086a0da23c0728cbfeb","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        \"\"\""},{"line_number":258,"context_line":"        self.create_group_replication(group)"},{"line_number":259,"context_line":"        self.add_volumes_to_group_replication(group, volumes)"},{"line_number":260,"context_line":"        return [], []"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    def disable_replication(self, context, group, volumes):"},{"line_number":263,"context_line":"        \"\"\"Disable the group replication."}],"source_content_type":"text/x-python","patch_set":14,"id":"3f1d235d_22b980e8","line":260,"range":{"start_line":260,"start_character":15,"end_line":260,"end_character":17},"in_reply_to":"3f1d235d_5b047e17","updated":"2017-07-03 02:14:51.000000000","message":"Done","commit_id":"7e100a78e35fc6f1bce1cce35fe0d44325f834c3"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"2852355dc069085f5691e414f40e0658c3c4c43b","unresolved":false,"context_lines":[{"line_number":266,"context_line":"        \"\"\""},{"line_number":267,"context_line":"        self.remove_volumes_from_group_replication(group, volumes)"},{"line_number":268,"context_line":"        self.delete_group_replication(group)"},{"line_number":269,"context_line":"        return [], []"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"    def failover_replication(self, context, group, volumes,"},{"line_number":272,"context_line":"                             secondary_backend_id):"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f1d235d_36ff9702","line":269,"range":{"start_line":269,"start_character":15,"end_line":269,"end_character":17},"updated":"2017-06-30 17:55:23.000000000","message":"Same","commit_id":"7e100a78e35fc6f1bce1cce35fe0d44325f834c3"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"6486b7e9e7d40e26d6a0c086a0da23c0728cbfeb","unresolved":false,"context_lines":[{"line_number":266,"context_line":"        \"\"\""},{"line_number":267,"context_line":"        self.remove_volumes_from_group_replication(group, volumes)"},{"line_number":268,"context_line":"        self.delete_group_replication(group)"},{"line_number":269,"context_line":"        return [], []"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"    def failover_replication(self, context, group, volumes,"},{"line_number":272,"context_line":"                             secondary_backend_id):"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f1d235d_e2ca686c","line":269,"range":{"start_line":269,"start_character":15,"end_line":269,"end_character":17},"in_reply_to":"3f1d235d_36ff9702","updated":"2017-07-03 02:14:51.000000000","message":"Done","commit_id":"7e100a78e35fc6f1bce1cce35fe0d44325f834c3"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ec8fb52006d3edcc3e04f01ca13b05231fe53196","unresolved":false,"context_lines":[{"line_number":248,"context_line":"        # any subsequent request will be redirected to it."},{"line_number":249,"context_line":"        self.client \u003d mirror_view.secondary_client"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"        return secondary_backend_id, volume_update_list, []"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    def enable_replication(self, context, group, volumes):"},{"line_number":254,"context_line":"        \"\"\"Enable the group replication."}],"source_content_type":"text/x-python","patch_set":18,"id":"1f1a1f67_6b8f6ecc","line":251,"updated":"2017-07-13 14:56:37.000000000","message":"My patch https://review.openstack.org/#/c/477688/ is merged.  This patch should handle groups now.","commit_id":"ef2719d83799d15cfd923a3bfec75f89471e69f5"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"294c0e8b944bb45c0d0733114f760ed3d27dbd10","unresolved":false,"context_lines":[{"line_number":248,"context_line":"        # any subsequent request will be redirected to it."},{"line_number":249,"context_line":"        self.client \u003d mirror_view.secondary_client"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"        return secondary_backend_id, volume_update_list, []"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    def enable_replication(self, context, group, volumes):"},{"line_number":254,"context_line":"        \"\"\"Enable the group replication."}],"source_content_type":"text/x-python","patch_set":18,"id":"1f1a1f67_9d1b3572","line":251,"in_reply_to":"1f1a1f67_6b8f6ecc","updated":"2017-07-21 08:52:41.000000000","message":"Hi Xing\nI added related logic in patch 21, please take a review again.","commit_id":"ef2719d83799d15cfd923a3bfec75f89471e69f5"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3950a955f0484a732b4d581f8f465a907cd60107","unresolved":false,"context_lines":[{"line_number":267,"context_line":""},{"line_number":268,"context_line":"        for volume in volumes:"},{"line_number":269,"context_line":"            specs \u003d common.ExtraSpecs.from_volume(volume)"},{"line_number":270,"context_line":"            if specs.is_replication_enabled:"},{"line_number":271,"context_line":"                failover_volume(volume, rep_status)"},{"line_number":272,"context_line":"            else:"},{"line_number":273,"context_line":"                # Since the array has been failed-over"}],"source_content_type":"text/x-python","patch_set":21,"id":"1f1a1f67_063a31e6","line":270,"updated":"2017-07-21 13:40:28.000000000","message":"The volumes passed in from manager include all volumes (whether they are in groups or not) on the backend, so you should filter out volumes that has a group_id in the passed in groups.","commit_id":"2acd250d17ffc701da710866aecf65f5bdda85e3"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"8bf3aaca720737d7e08e2fa9fcc3fa9b7348d7e5","unresolved":false,"context_lines":[{"line_number":267,"context_line":""},{"line_number":268,"context_line":"        for volume in volumes:"},{"line_number":269,"context_line":"            specs \u003d common.ExtraSpecs.from_volume(volume)"},{"line_number":270,"context_line":"            if specs.is_replication_enabled:"},{"line_number":271,"context_line":"                failover_volume(volume, rep_status)"},{"line_number":272,"context_line":"            else:"},{"line_number":273,"context_line":"                # Since the array has been failed-over"}],"source_content_type":"text/x-python","patch_set":21,"id":"ff346bd7_09770f3d","line":270,"in_reply_to":"1f1a1f67_063a31e6","updated":"2017-07-23 04:46:02.000000000","message":"Done","commit_id":"2acd250d17ffc701da710866aecf65f5bdda85e3"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3950a955f0484a732b4d581f8f465a907cd60107","unresolved":false,"context_lines":[{"line_number":276,"context_line":"                    \u0027volume_id\u0027: volume.id,"},{"line_number":277,"context_line":"                    \u0027updates\u0027: {\u0027status\u0027: \u0027error\u0027}})"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"        for group in groups:"},{"line_number":280,"context_line":"            specs \u003d common.ExtraSpecs.from_group(group)"},{"line_number":281,"context_line":"            if specs.is_group_replication_enabled:"},{"line_number":282,"context_line":"                group_update, vols_in_group_update \u003d failover_group(group)"}],"source_content_type":"text/x-python","patch_set":21,"id":"1f1a1f67_46194986","line":279,"updated":"2017-07-21 13:40:28.000000000","message":"I think it\u0027s better to failover groups first and then failover volumes.","commit_id":"2acd250d17ffc701da710866aecf65f5bdda85e3"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"8bf3aaca720737d7e08e2fa9fcc3fa9b7348d7e5","unresolved":false,"context_lines":[{"line_number":276,"context_line":"                    \u0027volume_id\u0027: volume.id,"},{"line_number":277,"context_line":"                    \u0027updates\u0027: {\u0027status\u0027: \u0027error\u0027}})"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"        for group in groups:"},{"line_number":280,"context_line":"            specs \u003d common.ExtraSpecs.from_group(group)"},{"line_number":281,"context_line":"            if specs.is_group_replication_enabled:"},{"line_number":282,"context_line":"                group_update, vols_in_group_update \u003d failover_group(group)"}],"source_content_type":"text/x-python","patch_set":21,"id":"ff346bd7_e973ab4c","line":279,"in_reply_to":"1f1a1f67_46194986","updated":"2017-07-23 04:46:02.000000000","message":"Done","commit_id":"2acd250d17ffc701da710866aecf65f5bdda85e3"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"306209a92cdb29596dcc8fdc61b3d300b809d010","unresolved":false,"context_lines":[{"line_number":286,"context_line":"                        \u0027updates\u0027: {\u0027status\u0027: \u0027error\u0027}})"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        # Filter out the volumes in groups."},{"line_number":289,"context_line":"        for volume in [volume for volume in volumes if not volume.group_id]:"},{"line_number":290,"context_line":"            specs \u003d common.ExtraSpecs.from_volume(volume)"},{"line_number":291,"context_line":"            if specs.is_replication_enabled:"},{"line_number":292,"context_line":"                failover_volume(volume, rep_status)"}],"source_content_type":"text/x-python","patch_set":22,"id":"ff346bd7_fd3122ee","line":289,"range":{"start_line":289,"start_character":59,"end_line":289,"end_character":74},"updated":"2017-07-23 19:55:36.000000000","message":"I think we should only filter out volumes with group_id which is in the passed in groups because you could have a volume in a group that supports group_snapshot but not replication group?  If a volume is in a group snapshot, it probably won\u0027t have replication_enabled and should be marked as error as well.","commit_id":"942f49d0b2edd9c8ea160fba6f364cd8bbe75c40"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"6d93dd3e95ec2cb4ff137d446810f1dd041099fd","unresolved":false,"context_lines":[{"line_number":286,"context_line":"                        \u0027updates\u0027: {\u0027status\u0027: \u0027error\u0027}})"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        # Filter out the volumes in groups."},{"line_number":289,"context_line":"        for volume in [volume for volume in volumes if not volume.group_id]:"},{"line_number":290,"context_line":"            specs \u003d common.ExtraSpecs.from_volume(volume)"},{"line_number":291,"context_line":"            if specs.is_replication_enabled:"},{"line_number":292,"context_line":"                failover_volume(volume, rep_status)"}],"source_content_type":"text/x-python","patch_set":22,"id":"ff346bd7_96e673e8","line":289,"range":{"start_line":289,"start_character":59,"end_line":289,"end_character":74},"in_reply_to":"ff346bd7_76742f9a","updated":"2017-07-24 03:26:52.000000000","message":"Done, and removed redundant logic for volumes/groups without replication.\n\nThanks\nPeter","commit_id":"942f49d0b2edd9c8ea160fba6f364cd8bbe75c40"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3b8feadfb10ca8898262999f62d79b0506ff150c","unresolved":false,"context_lines":[{"line_number":286,"context_line":"                        \u0027updates\u0027: {\u0027status\u0027: \u0027error\u0027}})"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        # Filter out the volumes in groups."},{"line_number":289,"context_line":"        for volume in [volume for volume in volumes if not volume.group_id]:"},{"line_number":290,"context_line":"            specs \u003d common.ExtraSpecs.from_volume(volume)"},{"line_number":291,"context_line":"            if specs.is_replication_enabled:"},{"line_number":292,"context_line":"                failover_volume(volume, rep_status)"}],"source_content_type":"text/x-python","patch_set":22,"id":"ff346bd7_76742f9a","line":289,"range":{"start_line":289,"start_character":59,"end_line":289,"end_character":74},"in_reply_to":"ff346bd7_9b821ec8","updated":"2017-07-24 02:44:41.000000000","message":"The manager will only pass in groups with group_type supporting replication to the driver in failover_host.  So a group supporting group_snapshot but not replication_group won\u0027t be passed to the driver.  Driver can\u0027t failover a group supporting group_snapshot but not replication_group any way.","commit_id":"942f49d0b2edd9c8ea160fba6f364cd8bbe75c40"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"51e48fb8afdbf5f81479d6f7e5e47e3106561bc0","unresolved":false,"context_lines":[{"line_number":286,"context_line":"                        \u0027updates\u0027: {\u0027status\u0027: \u0027error\u0027}})"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        # Filter out the volumes in groups."},{"line_number":289,"context_line":"        for volume in [volume for volume in volumes if not volume.group_id]:"},{"line_number":290,"context_line":"            specs \u003d common.ExtraSpecs.from_volume(volume)"},{"line_number":291,"context_line":"            if specs.is_replication_enabled:"},{"line_number":292,"context_line":"                failover_volume(volume, rep_status)"}],"source_content_type":"text/x-python","patch_set":22,"id":"ff346bd7_9b821ec8","line":289,"range":{"start_line":289,"start_character":59,"end_line":289,"end_character":74},"in_reply_to":"ff346bd7_fd3122ee","updated":"2017-07-24 02:08:20.000000000","message":"Volumes in any groups(no replication enabled) should be handled by Line 281-286 and marked as error.\n\n\nThanks\nPeter","commit_id":"942f49d0b2edd9c8ea160fba6f364cd8bbe75c40"}],"cinder/volume/drivers/dell_emc/vnx/utils.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd03f64c77def66ac25a0db36001188a278f37a7","unresolved":false,"context_lines":[{"line_number":106,"context_line":"def update_remote_provider_location(volume, client):"},{"line_number":107,"context_line":"    \"\"\"Update volume provider_location after volume failed-over.\"\"\""},{"line_number":108,"context_line":"    provider_location \u003d volume.provider_location"},{"line_number":109,"context_line":"    updated \u003d dict()"},{"line_number":110,"context_line":"    updated[\u0027system\u0027] \u003d client.get_serial()"},{"line_number":111,"context_line":"    updated[\u0027id\u0027] \u003d six.text_type("},{"line_number":112,"context_line":"        client.get_lun(name\u003dvolume.name).lun_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_f93e9bd8","line":109,"range":{"start_line":109,"start_character":14,"end_line":109,"end_character":20},"updated":"2017-04-26 04:56:11.000000000","message":"Use dict comprehension {} which has better performance.","commit_id":"550c2a654154e7c764e7e89d0ec59ee9898427e9"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"c43444da65638d2ed2eb361fa657416a947d11d5","unresolved":false,"context_lines":[{"line_number":106,"context_line":"def update_remote_provider_location(volume, client):"},{"line_number":107,"context_line":"    \"\"\"Update volume provider_location after volume failed-over.\"\"\""},{"line_number":108,"context_line":"    provider_location \u003d volume.provider_location"},{"line_number":109,"context_line":"    updated \u003d dict()"},{"line_number":110,"context_line":"    updated[\u0027system\u0027] \u003d client.get_serial()"},{"line_number":111,"context_line":"    updated[\u0027id\u0027] \u003d six.text_type("},{"line_number":112,"context_line":"        client.get_lun(name\u003dvolume.name).lun_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_4261f0d2","line":109,"range":{"start_line":109,"start_character":14,"end_line":109,"end_character":20},"in_reply_to":"5ff73747_f93e9bd8","updated":"2017-04-27 02:22:20.000000000","message":"Done","commit_id":"550c2a654154e7c764e7e89d0ec59ee9898427e9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd03f64c77def66ac25a0db36001188a278f37a7","unresolved":false,"context_lines":[{"line_number":315,"context_line":"    if not (group_specs.is_group_replication_enabled \u003d\u003d"},{"line_number":316,"context_line":"            extra_specs.is_replication_enabled):"},{"line_number":317,"context_line":"        raise exception.InvalidInput("},{"line_number":318,"context_line":"            \u0027Replication should be enabled or disabled for both \u0027"},{"line_number":319,"context_line":"            \u0027volume or group. volume replication status: %s, group \u0027"},{"line_number":320,"context_line":"            \u0027replication status: %s\u0027 % ("},{"line_number":321,"context_line":"                extra_specs.is_replication_enabled,"},{"line_number":322,"context_line":"                group_specs.is_group_replication_enabled))"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"def check_rep_status_matched(group):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_bc0ec12f","line":322,"range":{"start_line":318,"start_character":12,"end_line":322,"end_character":57},"updated":"2017-04-26 04:56:11.000000000","message":"Exception message needs to be wrapped in _\n\nAlso should be InvalidInput(reason\u003dxxxx)","commit_id":"550c2a654154e7c764e7e89d0ec59ee9898427e9"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"c43444da65638d2ed2eb361fa657416a947d11d5","unresolved":false,"context_lines":[{"line_number":315,"context_line":"    if not (group_specs.is_group_replication_enabled \u003d\u003d"},{"line_number":316,"context_line":"            extra_specs.is_replication_enabled):"},{"line_number":317,"context_line":"        raise exception.InvalidInput("},{"line_number":318,"context_line":"            \u0027Replication should be enabled or disabled for both \u0027"},{"line_number":319,"context_line":"            \u0027volume or group. volume replication status: %s, group \u0027"},{"line_number":320,"context_line":"            \u0027replication status: %s\u0027 % ("},{"line_number":321,"context_line":"                extra_specs.is_replication_enabled,"},{"line_number":322,"context_line":"                group_specs.is_group_replication_enabled))"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"def check_rep_status_matched(group):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_029d28bb","line":322,"range":{"start_line":318,"start_character":12,"end_line":322,"end_character":57},"in_reply_to":"5ff73747_bc0ec12f","updated":"2017-04-27 02:22:20.000000000","message":"Done","commit_id":"550c2a654154e7c764e7e89d0ec59ee9898427e9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd03f64c77def66ac25a0db36001188a278f37a7","unresolved":false,"context_lines":[{"line_number":332,"context_line":"        if group.replication_status !\u003d fields.ReplicationStatus.ENABLED:"},{"line_number":333,"context_line":"            raise exception.InvalidInput("},{"line_number":334,"context_line":"                \u0027Replication status should be %s for replication-enabled \u0027"},{"line_number":335,"context_line":"                \u0027group.\u0027 % fields.ReplicationStatus.ENABLED)"},{"line_number":336,"context_line":"    else:"},{"line_number":337,"context_line":"        LOG.info(\u0027Replication is not enabled on group %s, skip status check.\u0027,"},{"line_number":338,"context_line":"                 group.id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_5c29fd87","line":335,"updated":"2017-04-26 04:56:11.000000000","message":"Same","commit_id":"550c2a654154e7c764e7e89d0ec59ee9898427e9"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"c43444da65638d2ed2eb361fa657416a947d11d5","unresolved":false,"context_lines":[{"line_number":332,"context_line":"        if group.replication_status !\u003d fields.ReplicationStatus.ENABLED:"},{"line_number":333,"context_line":"            raise exception.InvalidInput("},{"line_number":334,"context_line":"                \u0027Replication status should be %s for replication-enabled \u0027"},{"line_number":335,"context_line":"                \u0027group.\u0027 % fields.ReplicationStatus.ENABLED)"},{"line_number":336,"context_line":"    else:"},{"line_number":337,"context_line":"        LOG.info(\u0027Replication is not enabled on group %s, skip status check.\u0027,"},{"line_number":338,"context_line":"                 group.id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_a2f554ef","line":335,"in_reply_to":"5ff73747_5c29fd87","updated":"2017-04-27 02:22:20.000000000","message":"Done","commit_id":"550c2a654154e7c764e7e89d0ec59ee9898427e9"},{"author":{"_account_id":23276,"name":"Nicholas Jones","email":"nj762h@att.com","username":"nj762h"},"change_message_id":"3cf8d00216a124ccbfad724dc39c4f75c3485611","unresolved":false,"context_lines":[{"line_number":227,"context_line":"def construct_group_name(group):"},{"line_number":228,"context_line":"    \"\"\"Constructs MirrorGroup name for volumes."},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    VNX only allows for 32-charactor group name, so"},{"line_number":231,"context_line":"    trim the dash(-) from group id."},{"line_number":232,"context_line":"    \"\"\""},{"line_number":233,"context_line":"    return six.text_type(group.id).replace(\u0027-\u0027, \u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_b8f8d27a","line":230,"range":{"start_line":230,"start_character":27,"end_line":230,"end_character":36},"updated":"2017-04-27 14:58:05.000000000","message":"s/charactor/character/","commit_id":"a6a26e02de01f479805b4622e64cf2a60a6e1973"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"a80451758b0be33b853c41bfd6266419095b0e76","unresolved":false,"context_lines":[{"line_number":227,"context_line":"def construct_group_name(group):"},{"line_number":228,"context_line":"    \"\"\"Constructs MirrorGroup name for volumes."},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    VNX only allows for 32-charactor group name, so"},{"line_number":231,"context_line":"    trim the dash(-) from group id."},{"line_number":232,"context_line":"    \"\"\""},{"line_number":233,"context_line":"    return six.text_type(group.id).replace(\u0027-\u0027, \u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_9f5729cb","line":230,"range":{"start_line":230,"start_character":27,"end_line":230,"end_character":36},"in_reply_to":"5ff73747_b8f8d27a","updated":"2017-04-28 01:22:01.000000000","message":"Done","commit_id":"a6a26e02de01f479805b4622e64cf2a60a6e1973"},{"author":{"_account_id":23276,"name":"Nicholas Jones","email":"nj762h@att.com","username":"nj762h"},"change_message_id":"3cf8d00216a124ccbfad724dc39c4f75c3485611","unresolved":false,"context_lines":[{"line_number":298,"context_line":"def check_type_matched(volume):"},{"line_number":299,"context_line":"    \"\"\"Check volume type and group type"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"    This will make sure they are not conflict with each other."},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"    :param volume: volume to be checked"},{"line_number":304,"context_line":"    :returns: None"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_984636c0","line":301,"range":{"start_line":301,"start_character":29,"end_line":301,"end_character":36},"updated":"2017-04-27 14:58:05.000000000","message":"s/are not/do not/","commit_id":"a6a26e02de01f479805b4622e64cf2a60a6e1973"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"a80451758b0be33b853c41bfd6266419095b0e76","unresolved":false,"context_lines":[{"line_number":298,"context_line":"def check_type_matched(volume):"},{"line_number":299,"context_line":"    \"\"\"Check volume type and group type"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"    This will make sure they are not conflict with each other."},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"    :param volume: volume to be checked"},{"line_number":304,"context_line":"    :returns: None"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_ff674db6","line":301,"range":{"start_line":301,"start_character":29,"end_line":301,"end_character":36},"in_reply_to":"5ff73747_984636c0","updated":"2017-04-28 01:22:01.000000000","message":"Done","commit_id":"a6a26e02de01f479805b4622e64cf2a60a6e1973"},{"author":{"_account_id":23276,"name":"Nicholas Jones","email":"nj762h@att.com","username":"nj762h"},"change_message_id":"3cf8d00216a124ccbfad724dc39c4f75c3485611","unresolved":false,"context_lines":[{"line_number":325,"context_line":"def check_rep_status_matched(group):"},{"line_number":326,"context_line":"    \"\"\"Check replication status for group."},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    Group status must be in enabled before proceeding."},{"line_number":329,"context_line":"    \"\"\""},{"line_number":330,"context_line":"    group_specs \u003d common.ExtraSpecs.from_group(group)"},{"line_number":331,"context_line":"    if group_specs.is_group_replication_enabled:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_388042c0","line":328,"range":{"start_line":328,"start_character":25,"end_line":328,"end_character":27},"updated":"2017-04-27 14:58:05.000000000","message":"s/in//","commit_id":"a6a26e02de01f479805b4622e64cf2a60a6e1973"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"a80451758b0be33b853c41bfd6266419095b0e76","unresolved":false,"context_lines":[{"line_number":325,"context_line":"def check_rep_status_matched(group):"},{"line_number":326,"context_line":"    \"\"\"Check replication status for group."},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    Group status must be in enabled before proceeding."},{"line_number":329,"context_line":"    \"\"\""},{"line_number":330,"context_line":"    group_specs \u003d common.ExtraSpecs.from_group(group)"},{"line_number":331,"context_line":"    if group_specs.is_group_replication_enabled:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_df06d1ce","line":328,"range":{"start_line":328,"start_character":25,"end_line":328,"end_character":27},"in_reply_to":"5ff73747_388042c0","updated":"2017-04-28 01:22:01.000000000","message":"Done","commit_id":"a6a26e02de01f479805b4622e64cf2a60a6e1973"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3950a955f0484a732b4d581f8f465a907cd60107","unresolved":false,"context_lines":[{"line_number":233,"context_line":"    VNX only allows for 32-character group name, so"},{"line_number":234,"context_line":"    trim the dash(-) from group id."},{"line_number":235,"context_line":"    \"\"\""},{"line_number":236,"context_line":"    return six.text_type(group.id).replace(\u0027-\u0027, \u0027\u0027)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"def construct_tmp_cg_snap_name(cg_name):"}],"source_content_type":"text/x-python","patch_set":21,"id":"1f1a1f67_c67c3922","line":236,"range":{"start_line":236,"start_character":11,"end_line":236,"end_character":24},"updated":"2017-07-21 13:40:28.000000000","message":"I don\u0027t think six.text_type is needed here as group.id is already a string.","commit_id":"2acd250d17ffc701da710866aecf65f5bdda85e3"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"8bf3aaca720737d7e08e2fa9fcc3fa9b7348d7e5","unresolved":false,"context_lines":[{"line_number":233,"context_line":"    VNX only allows for 32-character group name, so"},{"line_number":234,"context_line":"    trim the dash(-) from group id."},{"line_number":235,"context_line":"    \"\"\""},{"line_number":236,"context_line":"    return six.text_type(group.id).replace(\u0027-\u0027, \u0027\u0027)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"def construct_tmp_cg_snap_name(cg_name):"}],"source_content_type":"text/x-python","patch_set":21,"id":"ff346bd7_69457b17","line":236,"range":{"start_line":236,"start_character":11,"end_line":236,"end_character":24},"in_reply_to":"1f1a1f67_c67c3922","updated":"2017-07-23 04:46:02.000000000","message":"Removed","commit_id":"2acd250d17ffc701da710866aecf65f5bdda85e3"}],"releasenotes/notes/vnx-replication-group-2ebf04c80e2171f7.yaml":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4cc908b44085afcd9a53c6580313eb08270b4b68","unresolved":false,"context_lines":[{"line_number":1,"context_line":"features:"},{"line_number":2,"context_line":"  - Add consistent replication group support in VNX cinder driver."}],"source_content_type":"text/x-yaml","patch_set":15,"id":"3f1d235d_796114a9","line":1,"updated":"2017-07-05 15:22:35.000000000","message":"The beginning \"---\" line is missing.  Please add back.\n\nhttps://github.com/openstack/cinder/blob/master/releasenotes/notes/vnx-async-migration-support-3c449139bb264004.yaml#L1","commit_id":"c9f228a024fdd6dc9505dcae322318ca32912425"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"5ec16b4b30973fd9dc9b14835f23f1e34cc7bd19","unresolved":false,"context_lines":[{"line_number":1,"context_line":"features:"},{"line_number":2,"context_line":"  - Add consistent replication group support in VNX cinder driver."}],"source_content_type":"text/x-yaml","patch_set":15,"id":"3f1d235d_a69659ef","line":1,"in_reply_to":"3f1d235d_796114a9","updated":"2017-07-06 01:42:36.000000000","message":"Done\nThanks for finding it out!\n\nThanks\nPeter","commit_id":"c9f228a024fdd6dc9505dcae322318ca32912425"}]}
