)]}'
{"cinder/objects/group.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d1b2e7f62872d3f6f84f5cbb031d3cfd5e216071","unresolved":false,"context_lines":[{"line_number":227,"context_line":"                                          objects.Group,"},{"line_number":228,"context_line":"                                          groups)"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"        out_groups \u003d []"},{"line_number":231,"context_line":"        for grp in grp_obj_list:"},{"line_number":232,"context_line":"            if grp.is_replicated:"},{"line_number":233,"context_line":"                out_groups.append(grp)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        return out_groups"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f1d235d_e4d974f4","line":233,"range":{"start_line":230,"start_character":0,"end_line":233,"end_character":38},"updated":"2017-07-10 15:42:25.000000000","message":"nit: this should be a list comprehension\n\n out_groups \u003d [grp for grp in grp_obj_list\n               if grp.is_replicated]","commit_id":"0d74100bbbe3e699b7974609f4bc403664d6e794"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1736d95669af80e44105f0616c3303914f703227","unresolved":false,"context_lines":[{"line_number":227,"context_line":"                                          objects.Group,"},{"line_number":228,"context_line":"                                          groups)"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"        out_groups \u003d []"},{"line_number":231,"context_line":"        for grp in grp_obj_list:"},{"line_number":232,"context_line":"            if grp.is_replicated:"},{"line_number":233,"context_line":"                out_groups.append(grp)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        return out_groups"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f1d235d_748d0f7a","line":233,"range":{"start_line":230,"start_character":0,"end_line":233,"end_character":38},"in_reply_to":"3f1d235d_e4d974f4","updated":"2017-07-10 16:50:25.000000000","message":"Done","commit_id":"0d74100bbbe3e699b7974609f4bc403664d6e794"}],"cinder/tests/fake_driver.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d1b2e7f62872d3f6f84f5cbb031d3cfd5e216071","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        model_update \u003d super(FakeLoggingVolumeDriver, self).create_group("},{"line_number":190,"context_line":"            context, group)"},{"line_number":191,"context_line":"        try:"},{"line_number":192,"context_line":"            if group.is_replicated():"},{"line_number":193,"context_line":"                # Sets the new group\u0027s replication_status to disabled"},{"line_number":194,"context_line":"                model_update[\u0027replication_status\u0027] \u003d ("},{"line_number":195,"context_line":"                    fields.ReplicationStatus.DISABLED)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f1d235d_24b76c89","line":192,"range":{"start_line":192,"start_character":34,"end_line":192,"end_character":36},"updated":"2017-07-10 15:42:25.000000000","message":"-1: It\u0027s a property, not a method, should not use ()","commit_id":"0d74100bbbe3e699b7974609f4bc403664d6e794"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1736d95669af80e44105f0616c3303914f703227","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        model_update \u003d super(FakeLoggingVolumeDriver, self).create_group("},{"line_number":190,"context_line":"            context, group)"},{"line_number":191,"context_line":"        try:"},{"line_number":192,"context_line":"            if group.is_replicated():"},{"line_number":193,"context_line":"                # Sets the new group\u0027s replication_status to disabled"},{"line_number":194,"context_line":"                model_update[\u0027replication_status\u0027] \u003d ("},{"line_number":195,"context_line":"                    fields.ReplicationStatus.DISABLED)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f1d235d_f4735fb0","line":192,"range":{"start_line":192,"start_character":34,"end_line":192,"end_character":36},"in_reply_to":"3f1d235d_24b76c89","updated":"2017-07-10 16:50:25.000000000","message":"Done","commit_id":"0d74100bbbe3e699b7974609f4bc403664d6e794"}],"cinder/tests/unit/objects/test_group.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d1b2e7f62872d3f6f84f5cbb031d3cfd5e216071","unresolved":false,"context_lines":[{"line_number":183,"context_line":"    def test_is_replicated_true(self, mock_get_specs):"},{"line_number":184,"context_line":"        mock_get_specs.return_value \u003d \u0027\u003cis\u003e True\u0027"},{"line_number":185,"context_line":"        group \u003d objects.Group(self.context, group_type_id\u003dfake.GROUP_TYPE_ID)"},{"line_number":186,"context_line":"        self.assertTrue(group.is_replicated)"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    @ddt.data(\u0027\u003cis\u003e False\u0027, None, \u0027notASpecValueWeCareAbout\u0027)"},{"line_number":189,"context_line":"    def test_is_replicated_false(self, spec_value):"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f1d235d_047110e1","line":186,"range":{"start_line":186,"start_character":13,"end_line":186,"end_character":23},"updated":"2017-07-10 15:42:25.000000000","message":"nit: Should use\n\n self.assertEqual(True, group.is_replicated)\n\nBecause if is_replicated where a method and not a property this test would still pass","commit_id":"0d74100bbbe3e699b7974609f4bc403664d6e794"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1736d95669af80e44105f0616c3303914f703227","unresolved":false,"context_lines":[{"line_number":183,"context_line":"    def test_is_replicated_true(self, mock_get_specs):"},{"line_number":184,"context_line":"        mock_get_specs.return_value \u003d \u0027\u003cis\u003e True\u0027"},{"line_number":185,"context_line":"        group \u003d objects.Group(self.context, group_type_id\u003dfake.GROUP_TYPE_ID)"},{"line_number":186,"context_line":"        self.assertTrue(group.is_replicated)"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    @ddt.data(\u0027\u003cis\u003e False\u0027, None, \u0027notASpecValueWeCareAbout\u0027)"},{"line_number":189,"context_line":"    def test_is_replicated_false(self, spec_value):"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f1d235d_f4111fae","line":186,"range":{"start_line":186,"start_character":13,"end_line":186,"end_character":23},"in_reply_to":"3f1d235d_047110e1","updated":"2017-07-10 16:50:25.000000000","message":"Done.\n\nAlso added a detailed comment to explain this change to avoid getting an opposite review comment that asks me to change it back to assertTrue and to prevent someone else from submitting a patch to change this back to assertTrue.","commit_id":"0d74100bbbe3e699b7974609f4bc403664d6e794"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d1b2e7f62872d3f6f84f5cbb031d3cfd5e216071","unresolved":false,"context_lines":[{"line_number":192,"context_line":"            mock_get_specs.return_value \u003d spec_value"},{"line_number":193,"context_line":"            group \u003d objects.Group(self.context,"},{"line_number":194,"context_line":"                                  group_type_id\u003dfake.GROUP_TYPE_ID)"},{"line_number":195,"context_line":"            self.assertFalse(group.is_replicated)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"@ddt.ddt"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f1d235d_44502833","line":195,"updated":"2017-07-10 15:42:25.000000000","message":"nit: Should use self.assertEqual","commit_id":"0d74100bbbe3e699b7974609f4bc403664d6e794"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1736d95669af80e44105f0616c3303914f703227","unresolved":false,"context_lines":[{"line_number":192,"context_line":"            mock_get_specs.return_value \u003d spec_value"},{"line_number":193,"context_line":"            group \u003d objects.Group(self.context,"},{"line_number":194,"context_line":"                                  group_type_id\u003dfake.GROUP_TYPE_ID)"},{"line_number":195,"context_line":"            self.assertFalse(group.is_replicated)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"@ddt.ddt"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f1d235d_d4262317","line":195,"in_reply_to":"3f1d235d_44502833","updated":"2017-07-10 16:50:25.000000000","message":"Done","commit_id":"0d74100bbbe3e699b7974609f4bc403664d6e794"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d1b2e7f62872d3f6f84f5cbb031d3cfd5e216071","unresolved":false,"context_lines":[{"line_number":262,"context_line":"            self.assertEqual(\u0027fake_cluster\u0027, res[0].cluster_name)"},{"line_number":263,"context_line":"        else:"},{"line_number":264,"context_line":"            self.assertEqual(fake.GROUP_ID, res[0].id)"},{"line_number":265,"context_line":"            self.assertIsNone(res[0].cluster_name)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f1d235d_bfcb8570","line":265,"updated":"2017-07-10 15:42:25.000000000","message":"nit: With so much if...else it doesn\u0027t look like using ddt is beneficial here.","commit_id":"0d74100bbbe3e699b7974609f4bc403664d6e794"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1736d95669af80e44105f0616c3303914f703227","unresolved":false,"context_lines":[{"line_number":262,"context_line":"            self.assertEqual(\u0027fake_cluster\u0027, res[0].cluster_name)"},{"line_number":263,"context_line":"        else:"},{"line_number":264,"context_line":"            self.assertEqual(fake.GROUP_ID, res[0].id)"},{"line_number":265,"context_line":"            self.assertIsNone(res[0].cluster_name)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f1d235d_94e30ba5","line":265,"in_reply_to":"3f1d235d_bfcb8570","updated":"2017-07-10 16:50:25.000000000","message":"Maybe, but with ddt lines 249-259 are common.  If I don\u0027t use ddt, someone else will give me a comment to use it:).  I\u0027ll keep it this way.","commit_id":"0d74100bbbe3e699b7974609f4bc403664d6e794"}],"cinder/tests/unit/volume/test_replication_manager.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a93a3a43e0e4a590c432c67033db1cf784349b1d","unresolved":false,"context_lines":[{"line_number":504,"context_line":"        ]"},{"line_number":505,"context_line":"        # Generate real group IDs"},{"line_number":506,"context_line":"        for group in in_groups:"},{"line_number":507,"context_line":"            group[\u0027id\u0027] \u003d str(uuid.uuid4())"},{"line_number":508,"context_line":"        driver_group_result \u003d ["},{"line_number":509,"context_line":"            {\u0027group_id\u0027: in_groups[0][\u0027id\u0027],"},{"line_number":510,"context_line":"             \u0027updates\u0027: {\u0027replication_status\u0027: status.FAILOVER_ERROR}},"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f1d235d_94bbe00c","line":507,"updated":"2017-07-03 12:44:05.000000000","message":"?: Why are we doing this here instead on L496 and L500?","commit_id":"31dea4d86c85dbbfe03b8812a13be2627b9726e3"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"01af8050f08564e088211a09128f5e87efcdc460","unresolved":false,"context_lines":[{"line_number":504,"context_line":"        ]"},{"line_number":505,"context_line":"        # Generate real group IDs"},{"line_number":506,"context_line":"        for group in in_groups:"},{"line_number":507,"context_line":"            group[\u0027id\u0027] \u003d str(uuid.uuid4())"},{"line_number":508,"context_line":"        driver_group_result \u003d ["},{"line_number":509,"context_line":"            {\u0027group_id\u0027: in_groups[0][\u0027id\u0027],"},{"line_number":510,"context_line":"             \u0027updates\u0027: {\u0027replication_status\u0027: status.FAILOVER_ERROR}},"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f1d235d_9766edc0","line":507,"in_reply_to":"3f1d235d_94bbe00c","updated":"2017-07-05 21:48:30.000000000","message":"Done","commit_id":"31dea4d86c85dbbfe03b8812a13be2627b9726e3"}],"cinder/volume/driver.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a93a3a43e0e4a590c432c67033db1cf784349b1d","unresolved":false,"context_lines":[{"line_number":1480,"context_line":"        :param secondary_id: Specifies rep target backend to fail over to"},{"line_number":1481,"context_line":"        :param groups: replication groups"},{"line_number":1482,"context_line":"        :returns: ID of the backend that was failed-over to,"},{"line_number":1483,"context_line":"                   model update for volumes, and model update for groups"},{"line_number":1484,"context_line":"        \"\"\""},{"line_number":1485,"context_line":""},{"line_number":1486,"context_line":"        # Example volume_updates data structure:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f1d235d_d43718e3","line":1483,"updated":"2017-07-03 12:44:05.000000000","message":"nit: maybe align it with ID","commit_id":"31dea4d86c85dbbfe03b8812a13be2627b9726e3"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"01af8050f08564e088211a09128f5e87efcdc460","unresolved":false,"context_lines":[{"line_number":1480,"context_line":"        :param secondary_id: Specifies rep target backend to fail over to"},{"line_number":1481,"context_line":"        :param groups: replication groups"},{"line_number":1482,"context_line":"        :returns: ID of the backend that was failed-over to,"},{"line_number":1483,"context_line":"                   model update for volumes, and model update for groups"},{"line_number":1484,"context_line":"        \"\"\""},{"line_number":1485,"context_line":""},{"line_number":1486,"context_line":"        # Example volume_updates data structure:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f1d235d_5ab4fcd0","line":1483,"in_reply_to":"3f1d235d_d43718e3","updated":"2017-07-05 21:48:30.000000000","message":"Done","commit_id":"31dea4d86c85dbbfe03b8812a13be2627b9726e3"}],"cinder/volume/drivers/dell_emc/sc/storagecenter_common.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a93a3a43e0e4a590c432c67033db1cf784349b1d","unresolved":false,"context_lines":[{"line_number":1807,"context_line":"        if self.failed_over:"},{"line_number":1808,"context_line":"            if secondary_id \u003d\u003d \u0027default\u0027:"},{"line_number":1809,"context_line":"                LOG.debug(\u0027failing back\u0027)"},{"line_number":1810,"context_line":"                return \u0027default\u0027, self.failback_volumes(volumes)"},{"line_number":1811,"context_line":"            raise exception.InvalidReplicationTarget("},{"line_number":1812,"context_line":"                reason\u003d_(\u0027Already failed over\u0027))"},{"line_number":1813,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3f1d235d_b41dbc67","line":1810,"updated":"2017-07-03 12:44:05.000000000","message":"-1: Missing group updates","commit_id":"31dea4d86c85dbbfe03b8812a13be2627b9726e3"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"01af8050f08564e088211a09128f5e87efcdc460","unresolved":false,"context_lines":[{"line_number":1807,"context_line":"        if self.failed_over:"},{"line_number":1808,"context_line":"            if secondary_id \u003d\u003d \u0027default\u0027:"},{"line_number":1809,"context_line":"                LOG.debug(\u0027failing back\u0027)"},{"line_number":1810,"context_line":"                return \u0027default\u0027, self.failback_volumes(volumes)"},{"line_number":1811,"context_line":"            raise exception.InvalidReplicationTarget("},{"line_number":1812,"context_line":"                reason\u003d_(\u0027Already failed over\u0027))"},{"line_number":1813,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3f1d235d_9a31745d","line":1810,"in_reply_to":"3f1d235d_b41dbc67","updated":"2017-07-05 21:48:30.000000000","message":"Done","commit_id":"31dea4d86c85dbbfe03b8812a13be2627b9726e3"}],"cinder/volume/manager.py":[{"author":{"_account_id":17045,"name":"xiaoqin","email":"xiaoqin.li@hotmail.com","username":"xiaoqin"},"change_message_id":"4ab767df554674bdfd3e0e040278af1281626855","unresolved":false,"context_lines":[{"line_number":3909,"context_line":"            backend \u003d vol_utils.extract_host(self.host, \u0027backend\u0027)"},{"line_number":3910,"context_line":"            groups \u003d vol_utils.get_replication_groups_by_host("},{"line_number":3911,"context_line":"                context, backend)"},{"line_number":3912,"context_line":"            active_backend_id, volume_update_list \u003d failover("},{"line_number":3913,"context_line":"                context,"},{"line_number":3914,"context_line":"                replicated_vols,"},{"line_number":3915,"context_line":"                secondary_id\u003dsecondary_backend_id,"},{"line_number":3916,"context_line":"                groups\u003dgroups)"},{"line_number":3917,"context_line":"            try:"},{"line_number":3918,"context_line":"                update_data \u003d {u[\u0027volume_id\u0027]: u[\u0027updates\u0027]"},{"line_number":3919,"context_line":"                               for u in volume_update_list}"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f201791_7348e52b","line":3916,"range":{"start_line":3912,"start_character":0,"end_line":3916,"end_character":30},"updated":"2017-06-28 02:58:32.000000000","message":"Currently replicated_vols contains all the replication volumes regardless it is in a replication group or not. Is it necessary to filer out those volumes in a replication group for replicated_vols? The replication volumes which are in a replication group can be got from groups and operated by groups. Or just let each driver to filter by itself?","commit_id":"5c13582fd6859b5827322a77972717609ee67b04"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"1900b2ea7fc196dac4444e787a9075ac49345a92","unresolved":false,"context_lines":[{"line_number":3909,"context_line":"            backend \u003d vol_utils.extract_host(self.host, \u0027backend\u0027)"},{"line_number":3910,"context_line":"            groups \u003d vol_utils.get_replication_groups_by_host("},{"line_number":3911,"context_line":"                context, backend)"},{"line_number":3912,"context_line":"            active_backend_id, volume_update_list \u003d failover("},{"line_number":3913,"context_line":"                context,"},{"line_number":3914,"context_line":"                replicated_vols,"},{"line_number":3915,"context_line":"                secondary_id\u003dsecondary_backend_id,"},{"line_number":3916,"context_line":"                groups\u003dgroups)"},{"line_number":3917,"context_line":"            try:"},{"line_number":3918,"context_line":"                update_data \u003d {u[\u0027volume_id\u0027]: u[\u0027updates\u0027]"},{"line_number":3919,"context_line":"                               for u in volume_update_list}"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f201791_2048fa59","line":3916,"range":{"start_line":3912,"start_character":12,"end_line":3916,"end_character":30},"updated":"2017-06-27 04:43:24.000000000","message":"just a question, i don\u0027t know is it better to update the replication_status of the group after failover or not? if yes,\nfailover needs to return group_update_list.","commit_id":"5c13582fd6859b5827322a77972717609ee67b04"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5ed144dfd1ea5b863de054ca9b2b0a0f4598fad2","unresolved":false,"context_lines":[{"line_number":3909,"context_line":"            backend \u003d vol_utils.extract_host(self.host, \u0027backend\u0027)"},{"line_number":3910,"context_line":"            groups \u003d vol_utils.get_replication_groups_by_host("},{"line_number":3911,"context_line":"                context, backend)"},{"line_number":3912,"context_line":"            active_backend_id, volume_update_list \u003d failover("},{"line_number":3913,"context_line":"                context,"},{"line_number":3914,"context_line":"                replicated_vols,"},{"line_number":3915,"context_line":"                secondary_id\u003dsecondary_backend_id,"},{"line_number":3916,"context_line":"                groups\u003dgroups)"},{"line_number":3917,"context_line":"            try:"},{"line_number":3918,"context_line":"                update_data \u003d {u[\u0027volume_id\u0027]: u[\u0027updates\u0027]"},{"line_number":3919,"context_line":"                               for u in volume_update_list}"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f201791_b62201b8","line":3916,"range":{"start_line":3912,"start_character":12,"end_line":3916,"end_character":30},"in_reply_to":"5f201791_2048fa59","updated":"2017-06-27 14:41:17.000000000","message":"That\u0027s a good point.  I think group_update_list should be returned as well.","commit_id":"5c13582fd6859b5827322a77972717609ee67b04"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"43f6bd69acf8218e02cdfc2fc24656c656a5c795","unresolved":false,"context_lines":[{"line_number":3909,"context_line":"            backend \u003d vol_utils.extract_host(self.host, \u0027backend\u0027)"},{"line_number":3910,"context_line":"            groups \u003d vol_utils.get_replication_groups_by_host("},{"line_number":3911,"context_line":"                context, backend)"},{"line_number":3912,"context_line":"            active_backend_id, volume_update_list \u003d failover("},{"line_number":3913,"context_line":"                context,"},{"line_number":3914,"context_line":"                replicated_vols,"},{"line_number":3915,"context_line":"                secondary_id\u003dsecondary_backend_id,"},{"line_number":3916,"context_line":"                groups\u003dgroups)"},{"line_number":3917,"context_line":"            try:"},{"line_number":3918,"context_line":"                update_data \u003d {u[\u0027volume_id\u0027]: u[\u0027updates\u0027]"},{"line_number":3919,"context_line":"                               for u in volume_update_list}"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f1d235d_4b4b892a","line":3916,"range":{"start_line":3912,"start_character":0,"end_line":3916,"end_character":30},"in_reply_to":"5f201791_7348e52b","updated":"2017-06-30 22:21:45.000000000","message":"I think replicated_vols should still contain all the replication volumes because the return param volume_update_list needs to contain all volume updates.  Driver can check whether a volume belongs to a group or not by group_id.","commit_id":"5c13582fd6859b5827322a77972717609ee67b04"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a93a3a43e0e4a590c432c67033db1cf784349b1d","unresolved":false,"context_lines":[{"line_number":3910,"context_line":"            # expected form of group_update_list:"},{"line_number":3911,"context_line":"            # [{group_id: \u003ccinder-grpid\u003e, updates: {\u0027xxxx\u0027: xxxx....}},"},{"line_number":3912,"context_line":"            #  {group_id: \u003ccinder-grpid\u003e, updates: {\u0027xxxx\u0027: xxxx....}}]"},{"line_number":3913,"context_line":"            backend \u003d vol_utils.extract_host(self.host, \u0027backend\u0027)"},{"line_number":3914,"context_line":"            groups \u003d vol_utils.get_replication_groups_by_host("},{"line_number":3915,"context_line":"                context, backend)"},{"line_number":3916,"context_line":"            active_backend_id, volume_update_list, group_update_list \u003d ("}],"source_content_type":"text/x-python","patch_set":6,"id":"3f1d235d_e9f921c8","line":3913,"updated":"2017-07-03 12:44:05.000000000","message":"-1: If service is A/A it\u0027s not enough to check the host, and this method is expected to handle A/A backends.","commit_id":"31dea4d86c85dbbfe03b8812a13be2627b9726e3"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"01af8050f08564e088211a09128f5e87efcdc460","unresolved":false,"context_lines":[{"line_number":3910,"context_line":"            # expected form of group_update_list:"},{"line_number":3911,"context_line":"            # [{group_id: \u003ccinder-grpid\u003e, updates: {\u0027xxxx\u0027: xxxx....}},"},{"line_number":3912,"context_line":"            #  {group_id: \u003ccinder-grpid\u003e, updates: {\u0027xxxx\u0027: xxxx....}}]"},{"line_number":3913,"context_line":"            backend \u003d vol_utils.extract_host(self.host, \u0027backend\u0027)"},{"line_number":3914,"context_line":"            groups \u003d vol_utils.get_replication_groups_by_host("},{"line_number":3915,"context_line":"                context, backend)"},{"line_number":3916,"context_line":"            active_backend_id, volume_update_list, group_update_list \u003d ("}],"source_content_type":"text/x-python","patch_set":6,"id":"3f1d235d_37b03943","line":3913,"in_reply_to":"3f1d235d_e9f921c8","updated":"2017-07-05 21:48:30.000000000","message":"Done","commit_id":"31dea4d86c85dbbfe03b8812a13be2627b9726e3"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"342d2e3af18345795694869eb105c8a6eb02c4fb","unresolved":false,"context_lines":[{"line_number":3994,"context_line":"            volume.update(update)"},{"line_number":3995,"context_line":"            volume.save()"},{"line_number":3996,"context_line":""},{"line_number":3997,"context_line":"        for grp in groups:"},{"line_number":3998,"context_line":"            update \u003d update_group_data.get(grp.id, {})"},{"line_number":3999,"context_line":"            if update.get(\u0027status\u0027, \u0027\u0027) \u003d\u003d \u0027error\u0027:"},{"line_number":4000,"context_line":"                update[\u0027replication_status\u0027] \u003d repl_status.FAILOVER_ERROR"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f1d235d_221180ad","line":3997,"updated":"2017-07-03 02:28:41.000000000","message":"How a driver updates the status for volumes in a group?\n\njust merge the update into the \"volume_update_list\"?\n\nThanks\nPeter","commit_id":"31dea4d86c85dbbfe03b8812a13be2627b9726e3"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a93a3a43e0e4a590c432c67033db1cf784349b1d","unresolved":false,"context_lines":[{"line_number":3994,"context_line":"            volume.update(update)"},{"line_number":3995,"context_line":"            volume.save()"},{"line_number":3996,"context_line":""},{"line_number":3997,"context_line":"        for grp in groups:"},{"line_number":3998,"context_line":"            update \u003d update_group_data.get(grp.id, {})"},{"line_number":3999,"context_line":"            if update.get(\u0027status\u0027, \u0027\u0027) \u003d\u003d \u0027error\u0027:"},{"line_number":4000,"context_line":"                update[\u0027replication_status\u0027] \u003d repl_status.FAILOVER_ERROR"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f1d235d_49937550","line":3997,"in_reply_to":"3f1d235d_221180ad","updated":"2017-07-03 12:44:05.000000000","message":"Volumes are update using current mechanism, which is handled by L3978-3994","commit_id":"31dea4d86c85dbbfe03b8812a13be2627b9726e3"},{"author":{"_account_id":10628,"name":"Peter Wang","email":"peter.wang13@emc.com","username":"peter_wang"},"change_message_id":"5ef3ebea296f7a1c42492898382892f1e6fde386","unresolved":false,"context_lines":[{"line_number":3994,"context_line":"            volume.update(update)"},{"line_number":3995,"context_line":"            volume.save()"},{"line_number":3996,"context_line":""},{"line_number":3997,"context_line":"        for grp in groups:"},{"line_number":3998,"context_line":"            update \u003d update_group_data.get(grp.id, {})"},{"line_number":3999,"context_line":"            if update.get(\u0027status\u0027, \u0027\u0027) \u003d\u003d \u0027error\u0027:"},{"line_number":4000,"context_line":"                update[\u0027replication_status\u0027] \u003d repl_status.FAILOVER_ERROR"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f1d235d_e604511a","line":3997,"in_reply_to":"3f1d235d_49937550","updated":"2017-07-06 01:51:23.000000000","message":"Thanks Gorka","commit_id":"31dea4d86c85dbbfe03b8812a13be2627b9726e3"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a93a3a43e0e4a590c432c67033db1cf784349b1d","unresolved":false,"context_lines":[{"line_number":3995,"context_line":"            volume.save()"},{"line_number":3996,"context_line":""},{"line_number":3997,"context_line":"        for grp in groups:"},{"line_number":3998,"context_line":"            update \u003d update_group_data.get(grp.id, {})"},{"line_number":3999,"context_line":"            if update.get(\u0027status\u0027, \u0027\u0027) \u003d\u003d \u0027error\u0027:"},{"line_number":4000,"context_line":"                update[\u0027replication_status\u0027] \u003d repl_status.FAILOVER_ERROR"},{"line_number":4001,"context_line":"            elif update.get(\u0027replication_status\u0027) in (None,"},{"line_number":4002,"context_line":"                                                      repl_status.FAILED_OVER):"},{"line_number":4003,"context_line":"                update[\u0027replication_status\u0027] \u003d updates[\u0027replication_status\u0027]"},{"line_number":4004,"context_line":""},{"line_number":4005,"context_line":"            if update[\u0027replication_status\u0027] \u003d\u003d repl_status.FAILOVER_ERROR:"},{"line_number":4006,"context_line":"                update.setdefault(\u0027status\u0027, \u0027error\u0027)"},{"line_number":4007,"context_line":"            grp.update(update)"},{"line_number":4008,"context_line":"            grp.save()"},{"line_number":4009,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3f1d235d_a9c68947","line":4006,"range":{"start_line":3998,"start_character":0,"end_line":4006,"end_character":52},"updated":"2017-07-03 12:44:05.000000000","message":"?: All this code seems quite redundant, since most of it is the same as for the volumes although I don\u0027t know if trying to consolidate both would make it less readable.","commit_id":"31dea4d86c85dbbfe03b8812a13be2627b9726e3"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"01af8050f08564e088211a09128f5e87efcdc460","unresolved":false,"context_lines":[{"line_number":3995,"context_line":"            volume.save()"},{"line_number":3996,"context_line":""},{"line_number":3997,"context_line":"        for grp in groups:"},{"line_number":3998,"context_line":"            update \u003d update_group_data.get(grp.id, {})"},{"line_number":3999,"context_line":"            if update.get(\u0027status\u0027, \u0027\u0027) \u003d\u003d \u0027error\u0027:"},{"line_number":4000,"context_line":"                update[\u0027replication_status\u0027] \u003d repl_status.FAILOVER_ERROR"},{"line_number":4001,"context_line":"            elif update.get(\u0027replication_status\u0027) in (None,"},{"line_number":4002,"context_line":"                                                      repl_status.FAILED_OVER):"},{"line_number":4003,"context_line":"                update[\u0027replication_status\u0027] \u003d updates[\u0027replication_status\u0027]"},{"line_number":4004,"context_line":""},{"line_number":4005,"context_line":"            if update[\u0027replication_status\u0027] \u003d\u003d repl_status.FAILOVER_ERROR:"},{"line_number":4006,"context_line":"                update.setdefault(\u0027status\u0027, \u0027error\u0027)"},{"line_number":4007,"context_line":"            grp.update(update)"},{"line_number":4008,"context_line":"            grp.save()"},{"line_number":4009,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3f1d235d_57a7350c","line":4006,"range":{"start_line":3998,"start_character":0,"end_line":4006,"end_character":52},"in_reply_to":"3f1d235d_a9c68947","updated":"2017-07-05 21:48:30.000000000","message":"I thought about it too but decide not to mix the two as one is for volume and one is group.","commit_id":"31dea4d86c85dbbfe03b8812a13be2627b9726e3"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"9bb880584223f2d40cef221dc1b4731cd5823e1b","unresolved":false,"context_lines":[{"line_number":3978,"context_line":"            # expected form of group_update_list:"},{"line_number":3979,"context_line":"            # [{group_id: \u003ccinder-grpid\u003e, updates: {\u0027xxxx\u0027: xxxx....}},"},{"line_number":3980,"context_line":"            #  {group_id: \u003ccinder-grpid\u003e, updates: {\u0027xxxx\u0027: xxxx....}}]"},{"line_number":3981,"context_line":"            if self.cluster:"},{"line_number":3982,"context_line":"                filters \u003d {\u0027cluster_name\u0027: self.cluster}"},{"line_number":3983,"context_line":"            else:"},{"line_number":3984,"context_line":"                filters \u003d {\u0027host\u0027: self.host}"},{"line_number":3985,"context_line":"            groups \u003d vol_utils.get_replication_groups_by_host_or_cluster("},{"line_number":3986,"context_line":"                context, filters)"},{"line_number":3987,"context_line":"            active_backend_id, volume_update_list, group_update_list \u003d ("}],"source_content_type":"text/x-python","patch_set":9,"id":"3f1d235d_accd1086","line":3984,"range":{"start_line":3981,"start_character":1,"end_line":3984,"end_character":45},"updated":"2017-07-06 08:42:55.000000000","message":"?: Should we make this a common method since it\u0027s also used in _get_my_resources?","commit_id":"4a9583f63d4bc8c1194afab30749c2cbc2921acb"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"9bb880584223f2d40cef221dc1b4731cd5823e1b","unresolved":false,"context_lines":[{"line_number":3978,"context_line":"            # expected form of group_update_list:"},{"line_number":3979,"context_line":"            # [{group_id: \u003ccinder-grpid\u003e, updates: {\u0027xxxx\u0027: xxxx....}},"},{"line_number":3980,"context_line":"            #  {group_id: \u003ccinder-grpid\u003e, updates: {\u0027xxxx\u0027: xxxx....}}]"},{"line_number":3981,"context_line":"            if self.cluster:"},{"line_number":3982,"context_line":"                filters \u003d {\u0027cluster_name\u0027: self.cluster}"},{"line_number":3983,"context_line":"            else:"},{"line_number":3984,"context_line":"                filters \u003d {\u0027host\u0027: self.host}"},{"line_number":3985,"context_line":"            groups \u003d vol_utils.get_replication_groups_by_host_or_cluster("},{"line_number":3986,"context_line":"                context, filters)"},{"line_number":3987,"context_line":"            active_backend_id, volume_update_list, group_update_list \u003d ("}],"source_content_type":"text/x-python","patch_set":9,"id":"3f1d235d_acacf0ec","line":3984,"range":{"start_line":3981,"start_character":0,"end_line":3984,"end_character":45},"updated":"2017-07-06 08:42:55.000000000","message":"nit: Since this is also done in _get_my_resources maybe we should just create a common method?","commit_id":"4a9583f63d4bc8c1194afab30749c2cbc2921acb"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"48b26f430c9c707b0f248feff2449764ff2707f2","unresolved":false,"context_lines":[{"line_number":3978,"context_line":"            # expected form of group_update_list:"},{"line_number":3979,"context_line":"            # [{group_id: \u003ccinder-grpid\u003e, updates: {\u0027xxxx\u0027: xxxx....}},"},{"line_number":3980,"context_line":"            #  {group_id: \u003ccinder-grpid\u003e, updates: {\u0027xxxx\u0027: xxxx....}}]"},{"line_number":3981,"context_line":"            if self.cluster:"},{"line_number":3982,"context_line":"                filters \u003d {\u0027cluster_name\u0027: self.cluster}"},{"line_number":3983,"context_line":"            else:"},{"line_number":3984,"context_line":"                filters \u003d {\u0027host\u0027: self.host}"},{"line_number":3985,"context_line":"            groups \u003d vol_utils.get_replication_groups_by_host_or_cluster("},{"line_number":3986,"context_line":"                context, filters)"},{"line_number":3987,"context_line":"            active_backend_id, volume_update_list, group_update_list \u003d ("}],"source_content_type":"text/x-python","patch_set":9,"id":"3f1d235d_570f0787","line":3984,"range":{"start_line":3981,"start_character":1,"end_line":3984,"end_character":45},"in_reply_to":"3f1d235d_accd1086","updated":"2017-07-06 21:16:38.000000000","message":"Done","commit_id":"4a9583f63d4bc8c1194afab30749c2cbc2921acb"}],"cinder/volume/utils.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"9bb880584223f2d40cef221dc1b4731cd5823e1b","unresolved":false,"context_lines":[{"line_number":945,"context_line":"    return is_group_a_type(group, \"consistent_group_replication_enabled\")"},{"line_number":946,"context_line":""},{"line_number":947,"context_line":""},{"line_number":948,"context_line":"def is_group_a_replication_group_type(group):"},{"line_number":949,"context_line":"    if (is_group_a_non_consistent_replication_group_type(group) or"},{"line_number":950,"context_line":"            is_group_a_consistent_replication_group_type(group)):"},{"line_number":951,"context_line":"        return True"},{"line_number":952,"context_line":"    return False"},{"line_number":953,"context_line":""},{"line_number":954,"context_line":""},{"line_number":955,"context_line":"def get_replication_groups_by_host_or_cluster(ctxt, host_cluster_filters):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f1d235d_e90f7a85","line":952,"range":{"start_line":948,"start_character":0,"end_line":952,"end_character":16},"updated":"2017-07-06 08:42:55.000000000","message":"We should move this to the Group OVO and have it as a property:\n\n @property\n def is_replicated(self):","commit_id":"4a9583f63d4bc8c1194afab30749c2cbc2921acb"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"48b26f430c9c707b0f248feff2449764ff2707f2","unresolved":false,"context_lines":[{"line_number":945,"context_line":"    return is_group_a_type(group, \"consistent_group_replication_enabled\")"},{"line_number":946,"context_line":""},{"line_number":947,"context_line":""},{"line_number":948,"context_line":"def is_group_a_replication_group_type(group):"},{"line_number":949,"context_line":"    if (is_group_a_non_consistent_replication_group_type(group) or"},{"line_number":950,"context_line":"            is_group_a_consistent_replication_group_type(group)):"},{"line_number":951,"context_line":"        return True"},{"line_number":952,"context_line":"    return False"},{"line_number":953,"context_line":""},{"line_number":954,"context_line":""},{"line_number":955,"context_line":"def get_replication_groups_by_host_or_cluster(ctxt, host_cluster_filters):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f1d235d_17250f09","line":952,"range":{"start_line":948,"start_character":0,"end_line":952,"end_character":16},"in_reply_to":"3f1d235d_e90f7a85","updated":"2017-07-06 21:16:38.000000000","message":"Done","commit_id":"4a9583f63d4bc8c1194afab30749c2cbc2921acb"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"9bb880584223f2d40cef221dc1b4731cd5823e1b","unresolved":false,"context_lines":[{"line_number":952,"context_line":"    return False"},{"line_number":953,"context_line":""},{"line_number":954,"context_line":""},{"line_number":955,"context_line":"def get_replication_groups_by_host_or_cluster(ctxt, host_cluster_filters):"},{"line_number":956,"context_line":"    # host_cluster_filters is either {\u0027cluster_name\u0027: cluster} or"},{"line_number":957,"context_line":"    # {\u0027host\u0027: host}"},{"line_number":958,"context_line":"    groups \u003d []"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f1d235d_69f7ea5a","line":955,"updated":"2017-07-06 08:42:55.000000000","message":"-1: This should be part of the GroupList OVO as `get_all_replicated` and accept filters just like the other get_all methods.","commit_id":"4a9583f63d4bc8c1194afab30749c2cbc2921acb"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"48b26f430c9c707b0f248feff2449764ff2707f2","unresolved":false,"context_lines":[{"line_number":952,"context_line":"    return False"},{"line_number":953,"context_line":""},{"line_number":954,"context_line":""},{"line_number":955,"context_line":"def get_replication_groups_by_host_or_cluster(ctxt, host_cluster_filters):"},{"line_number":956,"context_line":"    # host_cluster_filters is either {\u0027cluster_name\u0027: cluster} or"},{"line_number":957,"context_line":"    # {\u0027host\u0027: host}"},{"line_number":958,"context_line":"    groups \u003d []"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f1d235d_f71f33b4","line":955,"in_reply_to":"3f1d235d_69f7ea5a","updated":"2017-07-06 21:16:38.000000000","message":"Done","commit_id":"4a9583f63d4bc8c1194afab30749c2cbc2921acb"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"9bb880584223f2d40cef221dc1b4731cd5823e1b","unresolved":false,"context_lines":[{"line_number":956,"context_line":"    # host_cluster_filters is either {\u0027cluster_name\u0027: cluster} or"},{"line_number":957,"context_line":"    # {\u0027host\u0027: host}"},{"line_number":958,"context_line":"    groups \u003d []"},{"line_number":959,"context_line":"    host_cluster_filters[\u0027backend_match_level\u0027] \u003d \u0027backend\u0027"},{"line_number":960,"context_line":"    grps \u003d objects.GroupList.get_all(ctxt, filters\u003dhost_cluster_filters)"},{"line_number":961,"context_line":"    for grp in grps:"},{"line_number":962,"context_line":"        if is_group_a_replication_group_type(grp):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f1d235d_6ce01827","line":959,"range":{"start_line":959,"start_character":0,"end_line":959,"end_character":59},"updated":"2017-07-06 08:42:55.000000000","message":"-1: This is the default value, there\u0027s really no need to specify it","commit_id":"4a9583f63d4bc8c1194afab30749c2cbc2921acb"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"48b26f430c9c707b0f248feff2449764ff2707f2","unresolved":false,"context_lines":[{"line_number":956,"context_line":"    # host_cluster_filters is either {\u0027cluster_name\u0027: cluster} or"},{"line_number":957,"context_line":"    # {\u0027host\u0027: host}"},{"line_number":958,"context_line":"    groups \u003d []"},{"line_number":959,"context_line":"    host_cluster_filters[\u0027backend_match_level\u0027] \u003d \u0027backend\u0027"},{"line_number":960,"context_line":"    grps \u003d objects.GroupList.get_all(ctxt, filters\u003dhost_cluster_filters)"},{"line_number":961,"context_line":"    for grp in grps:"},{"line_number":962,"context_line":"        if is_group_a_replication_group_type(grp):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f1d235d_d71af7c3","line":959,"range":{"start_line":959,"start_character":0,"end_line":959,"end_character":59},"in_reply_to":"3f1d235d_6ce01827","updated":"2017-07-06 21:16:38.000000000","message":"Done","commit_id":"4a9583f63d4bc8c1194afab30749c2cbc2921acb"}]}
