)]}'
{"cinder/tests/unit/volume/drivers/huawei/test_huawei_drivers.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8f230f43d0cba8533941faef2f9c6a60a0934d90","unresolved":false,"context_lines":[{"line_number":5125,"context_line":"                       \u0027_get_group_type\u0027,"},{"line_number":5126,"context_line":"                       return_value\u003d[{\"hypermetro\": \"true\"}])"},{"line_number":5127,"context_line":"    @cg_or_cg_snapshot"},{"line_number":5128,"context_line":"    def test_create_hypermetro_consistencygroup_success(self, mock_grouptype):"},{"line_number":5129,"context_line":"        \"\"\"Test that create_consistencygroup return successfully.\"\"\""},{"line_number":5130,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":5131,"context_line":"        # Create consistency group"}],"source_content_type":"text/x-python","patch_set":6,"id":"dfeb2761_81b77ad9","line":5128,"range":{"start_line":5128,"start_character":31,"end_line":5128,"end_character":47},"updated":"2017-03-30 17:17:19.000000000","message":"group","commit_id":"04e00bb093abd86beab2e091feb363beda4d2836"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"4a4850d4c5d685b1e2fdea699025b0091b858ac6","unresolved":false,"context_lines":[{"line_number":5125,"context_line":"                       \u0027_get_group_type\u0027,"},{"line_number":5126,"context_line":"                       return_value\u003d[{\"hypermetro\": \"true\"}])"},{"line_number":5127,"context_line":"    @cg_or_cg_snapshot"},{"line_number":5128,"context_line":"    def test_create_hypermetro_consistencygroup_success(self, mock_grouptype):"},{"line_number":5129,"context_line":"        \"\"\"Test that create_consistencygroup return successfully.\"\"\""},{"line_number":5130,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":5131,"context_line":"        # Create consistency group"}],"source_content_type":"text/x-python","patch_set":6,"id":"dfeb2761_f41b9970","line":5128,"range":{"start_line":5128,"start_character":31,"end_line":5128,"end_character":47},"in_reply_to":"dfeb2761_81b77ad9","updated":"2017-03-31 02:21:13.000000000","message":"Done","commit_id":"04e00bb093abd86beab2e091feb363beda4d2836"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8f230f43d0cba8533941faef2f9c6a60a0934d90","unresolved":false,"context_lines":[{"line_number":5126,"context_line":"                       return_value\u003d[{\"hypermetro\": \"true\"}])"},{"line_number":5127,"context_line":"    @cg_or_cg_snapshot"},{"line_number":5128,"context_line":"    def test_create_hypermetro_consistencygroup_success(self, mock_grouptype):"},{"line_number":5129,"context_line":"        \"\"\"Test that create_consistencygroup return successfully.\"\"\""},{"line_number":5130,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":5131,"context_line":"        # Create consistency group"},{"line_number":5132,"context_line":"        model_update \u003d self.driver.create_group(ctxt, self.group)"}],"source_content_type":"text/x-python","patch_set":6,"id":"dfeb2761_21b66edb","line":5129,"range":{"start_line":5129,"start_character":28,"end_line":5129,"end_character":44},"updated":"2017-03-30 17:17:19.000000000","message":"group","commit_id":"04e00bb093abd86beab2e091feb363beda4d2836"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"4a4850d4c5d685b1e2fdea699025b0091b858ac6","unresolved":false,"context_lines":[{"line_number":5126,"context_line":"                       return_value\u003d[{\"hypermetro\": \"true\"}])"},{"line_number":5127,"context_line":"    @cg_or_cg_snapshot"},{"line_number":5128,"context_line":"    def test_create_hypermetro_consistencygroup_success(self, mock_grouptype):"},{"line_number":5129,"context_line":"        \"\"\"Test that create_consistencygroup return successfully.\"\"\""},{"line_number":5130,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":5131,"context_line":"        # Create consistency group"},{"line_number":5132,"context_line":"        model_update \u003d self.driver.create_group(ctxt, self.group)"}],"source_content_type":"text/x-python","patch_set":6,"id":"dfeb2761_d4189576","line":5129,"range":{"start_line":5129,"start_character":28,"end_line":5129,"end_character":44},"in_reply_to":"dfeb2761_21b66edb","updated":"2017-03-31 02:21:13.000000000","message":"Done","commit_id":"04e00bb093abd86beab2e091feb363beda4d2836"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8f230f43d0cba8533941faef2f9c6a60a0934d90","unresolved":false,"context_lines":[{"line_number":5128,"context_line":"    def test_create_hypermetro_consistencygroup_success(self, mock_grouptype):"},{"line_number":5129,"context_line":"        \"\"\"Test that create_consistencygroup return successfully.\"\"\""},{"line_number":5130,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":5131,"context_line":"        # Create consistency group"},{"line_number":5132,"context_line":"        model_update \u003d self.driver.create_group(ctxt, self.group)"},{"line_number":5133,"context_line":""},{"line_number":5134,"context_line":"        self.assertEqual(\u0027available\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"dfeb2761_e1c76645","line":5131,"range":{"start_line":5131,"start_character":17,"end_line":5131,"end_character":28},"updated":"2017-03-30 17:17:19.000000000","message":"group","commit_id":"04e00bb093abd86beab2e091feb363beda4d2836"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"4a4850d4c5d685b1e2fdea699025b0091b858ac6","unresolved":false,"context_lines":[{"line_number":5128,"context_line":"    def test_create_hypermetro_consistencygroup_success(self, mock_grouptype):"},{"line_number":5129,"context_line":"        \"\"\"Test that create_consistencygroup return successfully.\"\"\""},{"line_number":5130,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":5131,"context_line":"        # Create consistency group"},{"line_number":5132,"context_line":"        model_update \u003d self.driver.create_group(ctxt, self.group)"},{"line_number":5133,"context_line":""},{"line_number":5134,"context_line":"        self.assertEqual(\u0027available\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"dfeb2761_b42751b7","line":5131,"range":{"start_line":5131,"start_character":17,"end_line":5131,"end_character":28},"in_reply_to":"dfeb2761_e1c76645","updated":"2017-03-31 02:21:13.000000000","message":"Done","commit_id":"04e00bb093abd86beab2e091feb363beda4d2836"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8f230f43d0cba8533941faef2f9c6a60a0934d90","unresolved":false,"context_lines":[{"line_number":5133,"context_line":""},{"line_number":5134,"context_line":"        self.assertEqual(\u0027available\u0027,"},{"line_number":5135,"context_line":"                         model_update[\u0027status\u0027],"},{"line_number":5136,"context_line":"                         \"Consistency Group created failed\")"},{"line_number":5137,"context_line":""},{"line_number":5138,"context_line":"    @mock.patch.object(huawei_driver.HuaweiBaseDriver,"},{"line_number":5139,"context_line":"                       \u0027_get_group_type\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"dfeb2761_a1c15e31","line":5136,"range":{"start_line":5136,"start_character":26,"end_line":5136,"end_character":38},"updated":"2017-03-30 17:17:19.000000000","message":"Group","commit_id":"04e00bb093abd86beab2e091feb363beda4d2836"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"4a4850d4c5d685b1e2fdea699025b0091b858ac6","unresolved":false,"context_lines":[{"line_number":5133,"context_line":""},{"line_number":5134,"context_line":"        self.assertEqual(\u0027available\u0027,"},{"line_number":5135,"context_line":"                         model_update[\u0027status\u0027],"},{"line_number":5136,"context_line":"                         \"Consistency Group created failed\")"},{"line_number":5137,"context_line":""},{"line_number":5138,"context_line":"    @mock.patch.object(huawei_driver.HuaweiBaseDriver,"},{"line_number":5139,"context_line":"                       \u0027_get_group_type\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"dfeb2761_7421c99f","line":5136,"range":{"start_line":5136,"start_character":26,"end_line":5136,"end_character":38},"in_reply_to":"dfeb2761_a1c15e31","updated":"2017-03-31 02:21:13.000000000","message":"Done","commit_id":"04e00bb093abd86beab2e091feb363beda4d2836"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8f230f43d0cba8533941faef2f9c6a60a0934d90","unresolved":false,"context_lines":[{"line_number":5208,"context_line":"        temp_cg[\u0027volume_type_id\u0027] \u003d \u0027550c089b-bfdd-4f7f-86e1-3ba88125555c,\u0027"},{"line_number":5209,"context_line":"        self.mock_object(volume_types, \u0027get_volume_type\u0027,"},{"line_number":5210,"context_line":"                         return_value\u003dtest_hypermetro_type)"},{"line_number":5211,"context_line":"        model_update \u003d self.driver.create_group(ctxt, temp_cg)"},{"line_number":5212,"context_line":""},{"line_number":5213,"context_line":"        self.assertEqual(\u0027available\u0027,"},{"line_number":5214,"context_line":"                         model_update[\u0027status\u0027],"}],"source_content_type":"text/x-python","patch_set":6,"id":"dfeb2761_61e116d1","line":5211,"updated":"2017-03-30 17:17:19.000000000","message":"Please change consistency group to group in all tests.","commit_id":"04e00bb093abd86beab2e091feb363beda4d2836"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"4a4850d4c5d685b1e2fdea699025b0091b858ac6","unresolved":false,"context_lines":[{"line_number":5208,"context_line":"        temp_cg[\u0027volume_type_id\u0027] \u003d \u0027550c089b-bfdd-4f7f-86e1-3ba88125555c,\u0027"},{"line_number":5209,"context_line":"        self.mock_object(volume_types, \u0027get_volume_type\u0027,"},{"line_number":5210,"context_line":"                         return_value\u003dtest_hypermetro_type)"},{"line_number":5211,"context_line":"        model_update \u003d self.driver.create_group(ctxt, temp_cg)"},{"line_number":5212,"context_line":""},{"line_number":5213,"context_line":"        self.assertEqual(\u0027available\u0027,"},{"line_number":5214,"context_line":"                         model_update[\u0027status\u0027],"}],"source_content_type":"text/x-python","patch_set":6,"id":"dfeb2761_5426c5b9","line":5211,"in_reply_to":"dfeb2761_61e116d1","updated":"2017-03-31 02:21:13.000000000","message":"Done","commit_id":"04e00bb093abd86beab2e091feb363beda4d2836"}],"cinder/volume/drivers/huawei/huawei_driver.py":[{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"7374730835df82d0417b290c8bb3868df57358f4","unresolved":false,"context_lines":[{"line_number":230,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        try:"},{"line_number":233,"context_line":"            type_id_list \u003d group[\u0027volume_type_id\u0027].split(\",\")"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"            for type_id in type_id_list:"},{"line_number":236,"context_line":"                if type_id:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a1ced50_14b3f40a","line":233,"range":{"start_line":233,"start_character":10,"end_line":233,"end_character":61},"updated":"2017-03-23 10:57:27.000000000","message":"type_id_list \u003d filter(None, group[\u0027volume_type_id\u0027].split(\",\")) would remove the empty items.","commit_id":"200baa9a9a4bb9663acab8c121def8fedb7c0caa"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"fe355928aeb8f222d51630d632f7a92273a4f6d3","unresolved":false,"context_lines":[{"line_number":230,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        try:"},{"line_number":233,"context_line":"            type_id_list \u003d group[\u0027volume_type_id\u0027].split(\",\")"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"            for type_id in type_id_list:"},{"line_number":236,"context_line":"                if type_id:"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffe62b97_b88e2625","line":233,"range":{"start_line":233,"start_character":10,"end_line":233,"end_character":61},"in_reply_to":"1a1ced50_14b3f40a","updated":"2017-03-25 06:15:50.000000000","message":"Done","commit_id":"200baa9a9a4bb9663acab8c121def8fedb7c0caa"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"7374730835df82d0417b290c8bb3868df57358f4","unresolved":false,"context_lines":[{"line_number":232,"context_line":"        try:"},{"line_number":233,"context_line":"            type_id_list \u003d group[\u0027volume_type_id\u0027].split(\",\")"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"            for type_id in type_id_list:"},{"line_number":236,"context_line":"                if type_id:"},{"line_number":237,"context_line":"                    volume_type \u003d volume_types.get_volume_type(ctxt, type_id)"},{"line_number":238,"context_line":"                    vol_types.append(volume_type)"},{"line_number":239,"context_line":"        except AttributeError:"},{"line_number":240,"context_line":"            vol_types \u003d volume_types.get_all_types_by_group(ctxt, group.id)"},{"line_number":241,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1a1ced50_34847009","line":238,"range":{"start_line":235,"start_character":10,"end_line":238,"end_character":49},"updated":"2017-03-23 10:57:27.000000000","message":"This can refactored into:\nvol_types.extend([volume_types.get_volume_type(ctxt, type_id) for type_id in type_id_list])","commit_id":"200baa9a9a4bb9663acab8c121def8fedb7c0caa"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"fe355928aeb8f222d51630d632f7a92273a4f6d3","unresolved":false,"context_lines":[{"line_number":232,"context_line":"        try:"},{"line_number":233,"context_line":"            type_id_list \u003d group[\u0027volume_type_id\u0027].split(\",\")"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"            for type_id in type_id_list:"},{"line_number":236,"context_line":"                if type_id:"},{"line_number":237,"context_line":"                    volume_type \u003d volume_types.get_volume_type(ctxt, type_id)"},{"line_number":238,"context_line":"                    vol_types.append(volume_type)"},{"line_number":239,"context_line":"        except AttributeError:"},{"line_number":240,"context_line":"            vol_types \u003d volume_types.get_all_types_by_group(ctxt, group.id)"},{"line_number":241,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ffe62b97_5a5a3d2a","line":238,"range":{"start_line":235,"start_character":10,"end_line":238,"end_character":49},"in_reply_to":"1a1ced50_34847009","updated":"2017-03-25 06:15:50.000000000","message":"Done","commit_id":"200baa9a9a4bb9663acab8c121def8fedb7c0caa"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"7374730835df82d0417b290c8bb3868df57358f4","unresolved":false,"context_lines":[{"line_number":1630,"context_line":"    def create_consistencygroup(self, context, group):"},{"line_number":1631,"context_line":"        \"\"\"Creates a consistencygroup.\"\"\""},{"line_number":1632,"context_line":"        model_update \u003d {\u0027status\u0027: \u0027available\u0027}"},{"line_number":1633,"context_line":"        opts \u003d self._get_consistencygroup_type(group)"},{"line_number":1634,"context_line":"        if self._check_volume_type_support(opts, \u0027hypermetro\u0027):"},{"line_number":1635,"context_line":"            metro \u003d hypermetro.HuaweiHyperMetro(self.client,"},{"line_number":1636,"context_line":"                                                self.rmt_client,"},{"line_number":1637,"context_line":"                                                self.configuration)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a1ced50_74f6e88f","line":1634,"range":{"start_line":1633,"start_character":7,"end_line":1634,"end_character":63},"updated":"2017-03-23 10:57:27.000000000","message":"the opts variable is only used in the _check_volume_type_support method. So maybe we could wrap the the two. So does the others","commit_id":"200baa9a9a4bb9663acab8c121def8fedb7c0caa"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"fe355928aeb8f222d51630d632f7a92273a4f6d3","unresolved":false,"context_lines":[{"line_number":1630,"context_line":"    def create_consistencygroup(self, context, group):"},{"line_number":1631,"context_line":"        \"\"\"Creates a consistencygroup.\"\"\""},{"line_number":1632,"context_line":"        model_update \u003d {\u0027status\u0027: \u0027available\u0027}"},{"line_number":1633,"context_line":"        opts \u003d self._get_consistencygroup_type(group)"},{"line_number":1634,"context_line":"        if self._check_volume_type_support(opts, \u0027hypermetro\u0027):"},{"line_number":1635,"context_line":"            metro \u003d hypermetro.HuaweiHyperMetro(self.client,"},{"line_number":1636,"context_line":"                                                self.rmt_client,"},{"line_number":1637,"context_line":"                                                self.configuration)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffe62b97_58d03a51","line":1634,"range":{"start_line":1633,"start_character":7,"end_line":1634,"end_character":63},"in_reply_to":"1a1ced50_74f6e88f","updated":"2017-03-25 06:15:50.000000000","message":"now just support hypermetro, maybe later will support replication, and common cg/hypermetro cg/replication cg, how to use wrap to separate.","commit_id":"200baa9a9a4bb9663acab8c121def8fedb7c0caa"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"7374730835df82d0417b290c8bb3868df57358f4","unresolved":false,"context_lines":[{"line_number":1685,"context_line":"    def create_consistencygroup_from_src(self, context, group, volumes,"},{"line_number":1686,"context_line":"                                         cgsnapshot\u003dNone, snapshots\u003dNone,"},{"line_number":1687,"context_line":"                                         source_cg\u003dNone, source_vols\u003dNone):"},{"line_number":1688,"context_line":"        err_msg \u003d _(\"create_consistencygroup_from_src doesn\u0027t support \""},{"line_number":1689,"context_line":"                    \"in Huawei Storage.\")"},{"line_number":1690,"context_line":"        LOG.error(err_msg)"},{"line_number":1691,"context_line":"        raise exception.VolumeBackendAPIException(data\u003derr_msg)"},{"line_number":1692,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1a1ced50_3a0e178c","line":1689,"range":{"start_line":1688,"start_character":21,"end_line":1689,"end_character":39},"updated":"2017-03-23 10:57:27.000000000","message":"nit: Huawei Storage doesn\u0027t support create_consistencygroup_from_src","commit_id":"200baa9a9a4bb9663acab8c121def8fedb7c0caa"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"fe355928aeb8f222d51630d632f7a92273a4f6d3","unresolved":false,"context_lines":[{"line_number":1685,"context_line":"    def create_consistencygroup_from_src(self, context, group, volumes,"},{"line_number":1686,"context_line":"                                         cgsnapshot\u003dNone, snapshots\u003dNone,"},{"line_number":1687,"context_line":"                                         source_cg\u003dNone, source_vols\u003dNone):"},{"line_number":1688,"context_line":"        err_msg \u003d _(\"create_consistencygroup_from_src doesn\u0027t support \""},{"line_number":1689,"context_line":"                    \"in Huawei Storage.\")"},{"line_number":1690,"context_line":"        LOG.error(err_msg)"},{"line_number":1691,"context_line":"        raise exception.VolumeBackendAPIException(data\u003derr_msg)"},{"line_number":1692,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ffe62b97_18abd2d6","line":1689,"range":{"start_line":1688,"start_character":21,"end_line":1689,"end_character":39},"in_reply_to":"1a1ced50_3a0e178c","updated":"2017-03-25 06:15:50.000000000","message":"Done","commit_id":"200baa9a9a4bb9663acab8c121def8fedb7c0caa"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"58d002c6dded0c542aa360cf98ba5d2cdfef1e2d","unresolved":false,"context_lines":[{"line_number":230,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        try:"},{"line_number":233,"context_line":"            type_id_list \u003d filter(None, group[\u0027volume_type_id\u0027].split(\",\"))"},{"line_number":234,"context_line":"            vol_types.extend([volume_types.get_volume_type(ctxt, type_id)"},{"line_number":235,"context_line":"                              for type_id in type_id_list])"},{"line_number":236,"context_line":"        except AttributeError:"},{"line_number":237,"context_line":"            vol_types \u003d volume_types.get_all_types_by_group(ctxt, group.id)"},{"line_number":238,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_d71cd014","line":235,"range":{"start_line":233,"start_character":0,"end_line":235,"end_character":59},"updated":"2017-03-27 04:18:37.000000000","message":"This is not needed any more because you won\u0027t get a CG in Pike.","commit_id":"292a4570e4dd20ae0843c722aa701dcf90aa67d9"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"90459c18758e991d1895b8f142a7abefbc0a05f1","unresolved":false,"context_lines":[{"line_number":230,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        try:"},{"line_number":233,"context_line":"            type_id_list \u003d filter(None, group[\u0027volume_type_id\u0027].split(\",\"))"},{"line_number":234,"context_line":"            vol_types.extend([volume_types.get_volume_type(ctxt, type_id)"},{"line_number":235,"context_line":"                              for type_id in type_id_list])"},{"line_number":236,"context_line":"        except AttributeError:"},{"line_number":237,"context_line":"            vol_types \u003d volume_types.get_all_types_by_group(ctxt, group.id)"},{"line_number":238,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_bde48dad","line":235,"range":{"start_line":233,"start_character":0,"end_line":235,"end_character":59},"in_reply_to":"ffe62b97_d71cd014","updated":"2017-03-27 06:33:52.000000000","message":"We keep it because use it compatible with previous OpenStack version.","commit_id":"292a4570e4dd20ae0843c722aa701dcf90aa67d9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"58d002c6dded0c542aa360cf98ba5d2cdfef1e2d","unresolved":false,"context_lines":[{"line_number":234,"context_line":"            vol_types.extend([volume_types.get_volume_type(ctxt, type_id)"},{"line_number":235,"context_line":"                              for type_id in type_id_list])"},{"line_number":236,"context_line":"        except AttributeError:"},{"line_number":237,"context_line":"            vol_types \u003d volume_types.get_all_types_by_group(ctxt, group.id)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"        for vol_type in vol_types:"},{"line_number":240,"context_line":"            specs \u003d dict(vol_type).get(\u0027extra_specs\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_97ebe8da","line":237,"range":{"start_line":237,"start_character":12,"end_line":237,"end_character":75},"updated":"2017-03-27 04:18:37.000000000","message":"group.volume_types should give you what you need.  No need to get admin context on line 230.","commit_id":"292a4570e4dd20ae0843c722aa701dcf90aa67d9"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"a7969969187a588bd0d00e6d9477dc485e47cd08","unresolved":false,"context_lines":[{"line_number":234,"context_line":"            vol_types.extend([volume_types.get_volume_type(ctxt, type_id)"},{"line_number":235,"context_line":"                              for type_id in type_id_list])"},{"line_number":236,"context_line":"        except AttributeError:"},{"line_number":237,"context_line":"            vol_types \u003d volume_types.get_all_types_by_group(ctxt, group.id)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"        for vol_type in vol_types:"},{"line_number":240,"context_line":"            specs \u003d dict(vol_type).get(\u0027extra_specs\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_14a2f6fd","line":237,"range":{"start_line":237,"start_character":12,"end_line":237,"end_character":75},"in_reply_to":"ffe62b97_18ea4b0e","updated":"2017-03-28 07:46:13.000000000","message":"Thanks xing-yang, group.volume_types is ok. Last time I made a mistake, it\u0027s \"volume_type_ids\" is None when delete group. Sorry for that.","commit_id":"292a4570e4dd20ae0843c722aa701dcf90aa67d9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"79331a105cb9aaabcd6fb0ac45cef9d56815acbc","unresolved":false,"context_lines":[{"line_number":234,"context_line":"            vol_types.extend([volume_types.get_volume_type(ctxt, type_id)"},{"line_number":235,"context_line":"                              for type_id in type_id_list])"},{"line_number":236,"context_line":"        except AttributeError:"},{"line_number":237,"context_line":"            vol_types \u003d volume_types.get_all_types_by_group(ctxt, group.id)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"        for vol_type in vol_types:"},{"line_number":240,"context_line":"            specs \u003d dict(vol_type).get(\u0027extra_specs\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_7650515e","line":237,"range":{"start_line":237,"start_character":12,"end_line":237,"end_character":75},"in_reply_to":"ffe62b97_5dc101e4","updated":"2017-03-27 13:17:04.000000000","message":"I\u0027ll have to take a look.  It sounds like a bug.  group.volume_types should be available at delete_group time.","commit_id":"292a4570e4dd20ae0843c722aa701dcf90aa67d9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9892a23ea95548f5ef473d26009d0162bb40ef68","unresolved":false,"context_lines":[{"line_number":234,"context_line":"            vol_types.extend([volume_types.get_volume_type(ctxt, type_id)"},{"line_number":235,"context_line":"                              for type_id in type_id_list])"},{"line_number":236,"context_line":"        except AttributeError:"},{"line_number":237,"context_line":"            vol_types \u003d volume_types.get_all_types_by_group(ctxt, group.id)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"        for vol_type in vol_types:"},{"line_number":240,"context_line":"            specs \u003d dict(vol_type).get(\u0027extra_specs\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_18ea4b0e","line":237,"range":{"start_line":237,"start_character":12,"end_line":237,"end_character":75},"in_reply_to":"ffe62b97_7650515e","updated":"2017-03-27 15:56:39.000000000","message":"I tested this.  group.volume_types is available in delete_group().  Please try it again.  If you still don\u0027t have group.volume_types, please open a bug and describe exactly how to reproduce it.","commit_id":"292a4570e4dd20ae0843c722aa701dcf90aa67d9"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"90459c18758e991d1895b8f142a7abefbc0a05f1","unresolved":false,"context_lines":[{"line_number":234,"context_line":"            vol_types.extend([volume_types.get_volume_type(ctxt, type_id)"},{"line_number":235,"context_line":"                              for type_id in type_id_list])"},{"line_number":236,"context_line":"        except AttributeError:"},{"line_number":237,"context_line":"            vol_types \u003d volume_types.get_all_types_by_group(ctxt, group.id)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"        for vol_type in vol_types:"},{"line_number":240,"context_line":"            specs \u003d dict(vol_type).get(\u0027extra_specs\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_5dc101e4","line":237,"range":{"start_line":237,"start_character":12,"end_line":237,"end_character":75},"in_reply_to":"ffe62b97_97ebe8da","updated":"2017-03-27 06:33:52.000000000","message":"Huawei Driver need volume_types when create/delete/update group to determine whether it\u0027s hypermetro cg. But I found group.volume_types is None when call delete group. So we use the way to find the volume types.","commit_id":"292a4570e4dd20ae0843c722aa701dcf90aa67d9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"58d002c6dded0c542aa360cf98ba5d2cdfef1e2d","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        except AttributeError:"},{"line_number":237,"context_line":"            vol_types \u003d volume_types.get_all_types_by_group(ctxt, group.id)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"        for vol_type in vol_types:"},{"line_number":240,"context_line":"            specs \u003d dict(vol_type).get(\u0027extra_specs\u0027)"},{"line_number":241,"context_line":"            if isinstance(specs, list):"},{"line_number":242,"context_line":"                tmp_specs \u003d {}"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_57a440b9","line":239,"range":{"start_line":239,"start_character":8,"end_line":239,"end_character":34},"updated":"2017-03-27 04:18:37.000000000","message":"group.volume_types is a list of volume_type objects, not dict.","commit_id":"292a4570e4dd20ae0843c722aa701dcf90aa67d9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"58d002c6dded0c542aa360cf98ba5d2cdfef1e2d","unresolved":false,"context_lines":[{"line_number":1624,"context_line":"           self.client.is_host_associated_to_hostgroup(host_id)):"},{"line_number":1625,"context_line":"            self.client.remove_host(host_id)"},{"line_number":1626,"context_line":""},{"line_number":1627,"context_line":"    def create_consistencygroup(self, context, group):"},{"line_number":1628,"context_line":"        \"\"\"Creates a consistencygroup.\"\"\""},{"line_number":1629,"context_line":"        model_update \u003d {\u0027status\u0027: \u0027available\u0027}"},{"line_number":1630,"context_line":"        opts \u003d self._get_consistencygroup_type(group)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_778aa41b","line":1627,"range":{"start_line":1627,"start_character":8,"end_line":1627,"end_character":31},"updated":"2017-03-27 04:18:37.000000000","message":"Not needed any more.  Please change to create_group.","commit_id":"292a4570e4dd20ae0843c722aa701dcf90aa67d9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"de02522846c432a494e4e1078b05ae90eabb08a9","unresolved":false,"context_lines":[{"line_number":1624,"context_line":"           self.client.is_host_associated_to_hostgroup(host_id)):"},{"line_number":1625,"context_line":"            self.client.remove_host(host_id)"},{"line_number":1626,"context_line":""},{"line_number":1627,"context_line":"    def create_consistencygroup(self, context, group):"},{"line_number":1628,"context_line":"        \"\"\"Creates a consistencygroup.\"\"\""},{"line_number":1629,"context_line":"        model_update \u003d {\u0027status\u0027: \u0027available\u0027}"},{"line_number":1630,"context_line":"        opts \u003d self._get_consistencygroup_type(group)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_b6fa5972","line":1627,"range":{"start_line":1627,"start_character":8,"end_line":1627,"end_character":31},"in_reply_to":"ffe62b97_6f09a82a","updated":"2017-03-27 13:15:07.000000000","message":"Please note the XtremIO driver patch was merged back in Ocata.  You\u0027ll find a few other driver patches merged in Ocata with similar situation.  In Ocata, it is possible for user to keep database entries in consistencygroups and cgsnapshots.  That\u0027s why we need to handle CG there.  In Pike, users are forced to migrate everything to groups and group_snapshots.  There is no need to keep this any more.  Please remove this.  I have made the similar comments in other patches in Pike too.\n\nhttps://review.openstack.org/#/c/409935/","commit_id":"292a4570e4dd20ae0843c722aa701dcf90aa67d9"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"90459c18758e991d1895b8f142a7abefbc0a05f1","unresolved":false,"context_lines":[{"line_number":1624,"context_line":"           self.client.is_host_associated_to_hostgroup(host_id)):"},{"line_number":1625,"context_line":"            self.client.remove_host(host_id)"},{"line_number":1626,"context_line":""},{"line_number":1627,"context_line":"    def create_consistencygroup(self, context, group):"},{"line_number":1628,"context_line":"        \"\"\"Creates a consistencygroup.\"\"\""},{"line_number":1629,"context_line":"        model_update \u003d {\u0027status\u0027: \u0027available\u0027}"},{"line_number":1630,"context_line":"        opts \u003d self._get_consistencygroup_type(group)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_6f09a82a","line":1627,"range":{"start_line":1627,"start_character":8,"end_line":1627,"end_character":31},"in_reply_to":"ffe62b97_778aa41b","updated":"2017-03-27 06:33:52.000000000","message":"We keep it because use it compatible with previous OpenStack version. And we find xtremio driver also keep it.","commit_id":"292a4570e4dd20ae0843c722aa701dcf90aa67d9"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"a7969969187a588bd0d00e6d9477dc485e47cd08","unresolved":false,"context_lines":[{"line_number":1624,"context_line":"           self.client.is_host_associated_to_hostgroup(host_id)):"},{"line_number":1625,"context_line":"            self.client.remove_host(host_id)"},{"line_number":1626,"context_line":""},{"line_number":1627,"context_line":"    def create_consistencygroup(self, context, group):"},{"line_number":1628,"context_line":"        \"\"\"Creates a consistencygroup.\"\"\""},{"line_number":1629,"context_line":"        model_update \u003d {\u0027status\u0027: \u0027available\u0027}"},{"line_number":1630,"context_line":"        opts \u003d self._get_consistencygroup_type(group)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_94ade6ea","line":1627,"range":{"start_line":1627,"start_character":8,"end_line":1627,"end_character":31},"in_reply_to":"ffe62b97_b6fa5972","updated":"2017-03-28 07:46:13.000000000","message":"OK, I will remove it in Pike.","commit_id":"292a4570e4dd20ae0843c722aa701dcf90aa67d9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"58d002c6dded0c542aa360cf98ba5d2cdfef1e2d","unresolved":false,"context_lines":[{"line_number":1639,"context_line":"        # maintain the CG and volumes relationship in the db."},{"line_number":1640,"context_line":"        return model_update"},{"line_number":1641,"context_line":""},{"line_number":1642,"context_line":"    def delete_consistencygroup(self, context, group, volumes):"},{"line_number":1643,"context_line":"        opts \u003d self._get_consistencygroup_type(group)"},{"line_number":1644,"context_line":"        if self._check_volume_type_support(opts, \u0027hypermetro\u0027):"},{"line_number":1645,"context_line":"            metro \u003d hypermetro.HuaweiHyperMetro(self.client,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_578d602f","line":1642,"range":{"start_line":1642,"start_character":8,"end_line":1642,"end_character":31},"updated":"2017-03-27 04:18:37.000000000","message":"delete_group","commit_id":"292a4570e4dd20ae0843c722aa701dcf90aa67d9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"58d002c6dded0c542aa360cf98ba5d2cdfef1e2d","unresolved":false,"context_lines":[{"line_number":1662,"context_line":""},{"line_number":1663,"context_line":"        return model_update, volumes_model_update"},{"line_number":1664,"context_line":""},{"line_number":1665,"context_line":"    def update_consistencygroup(self, context, group,"},{"line_number":1666,"context_line":"                                add_volumes\u003dNone, remove_volumes\u003dNone):"},{"line_number":1667,"context_line":"        model_update \u003d {\u0027status\u0027: \u0027available\u0027}"},{"line_number":1668,"context_line":"        opts \u003d self._get_consistencygroup_type(group)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_37841c0c","line":1665,"range":{"start_line":1665,"start_character":8,"end_line":1665,"end_character":31},"updated":"2017-03-27 04:18:37.000000000","message":"update_group","commit_id":"292a4570e4dd20ae0843c722aa701dcf90aa67d9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"58d002c6dded0c542aa360cf98ba5d2cdfef1e2d","unresolved":false,"context_lines":[{"line_number":1679,"context_line":"        # maintain the CG and volumes relationship in the db."},{"line_number":1680,"context_line":"        return model_update, None, None"},{"line_number":1681,"context_line":""},{"line_number":1682,"context_line":"    def create_consistencygroup_from_src(self, context, group, volumes,"},{"line_number":1683,"context_line":"                                         cgsnapshot\u003dNone, snapshots\u003dNone,"},{"line_number":1684,"context_line":"                                         source_cg\u003dNone, source_vols\u003dNone):"},{"line_number":1685,"context_line":"        err_msg \u003d _(\"Huawei Storage doesn\u0027t support \""}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_f77d941c","line":1682,"range":{"start_line":1682,"start_character":8,"end_line":1682,"end_character":40},"updated":"2017-03-27 04:18:37.000000000","message":"create_group_from_src","commit_id":"292a4570e4dd20ae0843c722aa701dcf90aa67d9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"58d002c6dded0c542aa360cf98ba5d2cdfef1e2d","unresolved":false,"context_lines":[{"line_number":1687,"context_line":"        LOG.error(err_msg)"},{"line_number":1688,"context_line":"        raise exception.VolumeBackendAPIException(data\u003derr_msg)"},{"line_number":1689,"context_line":""},{"line_number":1690,"context_line":"    def create_cgsnapshot(self, context, cgsnapshot, snapshots):"},{"line_number":1691,"context_line":"        \"\"\"Create cgsnapshot.\"\"\""},{"line_number":1692,"context_line":"        LOG.info(\u0027Create cgsnapshot for consistency group\u0027"},{"line_number":1693,"context_line":"                 \u0027: %(group_id)s\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_b7770c3b","line":1690,"range":{"start_line":1690,"start_character":8,"end_line":1690,"end_character":25},"updated":"2017-03-27 04:18:37.000000000","message":"create_group_snapshot","commit_id":"292a4570e4dd20ae0843c722aa701dcf90aa67d9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"58d002c6dded0c542aa360cf98ba5d2cdfef1e2d","unresolved":false,"context_lines":[{"line_number":1736,"context_line":""},{"line_number":1737,"context_line":"        return model_update, snapshots_model_update"},{"line_number":1738,"context_line":""},{"line_number":1739,"context_line":"    def delete_cgsnapshot(self, context, cgsnapshot, snapshots):"},{"line_number":1740,"context_line":"        \"\"\"Delete consistency group snapshot.\"\"\""},{"line_number":1741,"context_line":"        LOG.info(\u0027Delete cgsnapshot %(snap_id)s for consistency group: \u0027"},{"line_number":1742,"context_line":"                 \u0027%(group_id)s\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_5792004d","line":1739,"range":{"start_line":1739,"start_character":8,"end_line":1739,"end_character":25},"updated":"2017-03-27 04:18:37.000000000","message":"delete_group_snapshot","commit_id":"292a4570e4dd20ae0843c722aa701dcf90aa67d9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"58d002c6dded0c542aa360cf98ba5d2cdfef1e2d","unresolved":false,"context_lines":[{"line_number":1760,"context_line":"        return model_update, snapshots_model_update"},{"line_number":1761,"context_line":""},{"line_number":1762,"context_line":"    def _get_group_id(self, group_snapshot):"},{"line_number":1763,"context_line":"        if group_snapshot.get(\u0027consistencygroup_id\u0027):"},{"line_number":1764,"context_line":"            group_id \u003d group_snapshot.consistencygroup_id"},{"line_number":1765,"context_line":"        else:"},{"line_number":1766,"context_line":"            group_id \u003d group_snapshot.group_id"},{"line_number":1767,"context_line":"        return group_id"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_179c785b","line":1764,"range":{"start_line":1763,"start_character":7,"end_line":1764,"end_character":57},"updated":"2017-03-27 04:18:37.000000000","message":"This is not needed.  It won\u0027t get called in Pike.","commit_id":"292a4570e4dd20ae0843c722aa701dcf90aa67d9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"58d002c6dded0c542aa360cf98ba5d2cdfef1e2d","unresolved":false,"context_lines":[{"line_number":1766,"context_line":"            group_id \u003d group_snapshot.group_id"},{"line_number":1767,"context_line":"        return group_id"},{"line_number":1768,"context_line":""},{"line_number":1769,"context_line":"    @huawei_utils.check_whether_operate_consistent_group"},{"line_number":1770,"context_line":"    def create_group(self, context, group):"},{"line_number":1771,"context_line":"        return self.create_consistencygroup(context, group)"},{"line_number":1772,"context_line":""},{"line_number":1773,"context_line":"    @huawei_utils.check_whether_operate_consistent_group"},{"line_number":1774,"context_line":"    def delete_group(self, context, group, volumes):"},{"line_number":1775,"context_line":"        return self.delete_consistencygroup(context, group, volumes)"},{"line_number":1776,"context_line":""},{"line_number":1777,"context_line":"    @huawei_utils.check_whether_operate_consistent_group"},{"line_number":1778,"context_line":"    def update_group(self, context, group,"},{"line_number":1779,"context_line":"                     add_volumes\u003dNone, remove_volumes\u003dNone):"},{"line_number":1780,"context_line":"        return self.update_consistencygroup(context, group,"},{"line_number":1781,"context_line":"                                            add_volumes, remove_volumes)"},{"line_number":1782,"context_line":""},{"line_number":1783,"context_line":"    @huawei_utils.check_whether_operate_consistent_group"},{"line_number":1784,"context_line":"    def create_group_snapshot(self, context, group_snapshot, snapshots):"},{"line_number":1785,"context_line":"        return self.create_cgsnapshot(context, group_snapshot, snapshots)"},{"line_number":1786,"context_line":""},{"line_number":1787,"context_line":"    @huawei_utils.check_whether_operate_consistent_group"},{"line_number":1788,"context_line":"    def delete_group_snapshot(self, context, group_snapshot, snapshots):"},{"line_number":1789,"context_line":"        return self.delete_cgsnapshot(context, group_snapshot, snapshots)"},{"line_number":1790,"context_line":""},{"line_number":1791,"context_line":"    @huawei_utils.check_whether_operate_consistent_group"},{"line_number":1792,"context_line":"    def create_group_from_src(self, context, group, volumes,"},{"line_number":1793,"context_line":"                              group_snapshot\u003dNone, snapshots\u003dNone,"},{"line_number":1794,"context_line":"                              source_group\u003dNone, source_vols\u003dNone):"},{"line_number":1795,"context_line":"        return self.create_consistencygroup_from_src(context, group, volumes,"},{"line_number":1796,"context_line":"                                                     group_snapshot, snapshots,"},{"line_number":1797,"context_line":"                                                     source_group, source_vols)"},{"line_number":1798,"context_line":""},{"line_number":1799,"context_line":"    def _classify_volume(self, volumes):"},{"line_number":1800,"context_line":"        normal_volumes \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_d79df057","line":1797,"range":{"start_line":1769,"start_character":0,"end_line":1797,"end_character":79},"updated":"2017-03-27 04:18:37.000000000","message":"There\u0027s no need to keep consistency group and cgsnapshot functions any more.","commit_id":"292a4570e4dd20ae0843c722aa701dcf90aa67d9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4e124c89d10267186666ea16943491ca48532357","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        vol_types \u003d group.volume_types"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        for vol_type in vol_types:"},{"line_number":232,"context_line":"            specs \u003d dict(vol_type).get(\u0027extra_specs\u0027)"},{"line_number":233,"context_line":"            opts.append(self._get_volume_params_from_specs(specs))"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        return opts"}],"source_content_type":"text/x-python","patch_set":4,"id":"ffe62b97_d745a2b5","line":232,"range":{"start_line":232,"start_character":20,"end_line":232,"end_character":34},"updated":"2017-03-28 13:21:38.000000000","message":"vol_type is an object.  vol_type.extra_specs will give you extra_specs.","commit_id":"2f1c1503a3aae07c3ec570d4d7918d4c03acf986"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"cd3015f3cda474482aacfb5e7f16173520d9eafd","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        vol_types \u003d group.volume_types"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        for vol_type in vol_types:"},{"line_number":232,"context_line":"            specs \u003d dict(vol_type).get(\u0027extra_specs\u0027)"},{"line_number":233,"context_line":"            opts.append(self._get_volume_params_from_specs(specs))"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        return opts"}],"source_content_type":"text/x-python","patch_set":4,"id":"ffe62b97_0dc2bd59","line":232,"range":{"start_line":232,"start_character":20,"end_line":232,"end_character":34},"in_reply_to":"ffe62b97_d745a2b5","updated":"2017-03-29 01:43:32.000000000","message":"Done","commit_id":"2f1c1503a3aae07c3ec570d4d7918d4c03acf986"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4e124c89d10267186666ea16943491ca48532357","unresolved":false,"context_lines":[{"line_number":1612,"context_line":""},{"line_number":1613,"context_line":"    @huawei_utils.check_whether_operate_consistency_group"},{"line_number":1614,"context_line":"    def create_group(self, context, group):"},{"line_number":1615,"context_line":"        \"\"\"Creates a consistencygroup.\"\"\""},{"line_number":1616,"context_line":"        model_update \u003d {\u0027status\u0027: \u0027available\u0027}"},{"line_number":1617,"context_line":"        opts \u003d self._get_consistencygroup_type(group)"},{"line_number":1618,"context_line":"        if self._check_volume_type_support(opts, \u0027hypermetro\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ffe62b97_f77426d1","line":1615,"range":{"start_line":1615,"start_character":21,"end_line":1615,"end_character":38},"updated":"2017-03-28 13:21:38.000000000","message":"group","commit_id":"2f1c1503a3aae07c3ec570d4d7918d4c03acf986"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"cd3015f3cda474482aacfb5e7f16173520d9eafd","unresolved":false,"context_lines":[{"line_number":1612,"context_line":""},{"line_number":1613,"context_line":"    @huawei_utils.check_whether_operate_consistency_group"},{"line_number":1614,"context_line":"    def create_group(self, context, group):"},{"line_number":1615,"context_line":"        \"\"\"Creates a consistencygroup.\"\"\""},{"line_number":1616,"context_line":"        model_update \u003d {\u0027status\u0027: \u0027available\u0027}"},{"line_number":1617,"context_line":"        opts \u003d self._get_consistencygroup_type(group)"},{"line_number":1618,"context_line":"        if self._check_volume_type_support(opts, \u0027hypermetro\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ffe62b97_eda9d98f","line":1615,"range":{"start_line":1615,"start_character":21,"end_line":1615,"end_character":38},"in_reply_to":"ffe62b97_f77426d1","updated":"2017-03-29 01:43:32.000000000","message":"Done","commit_id":"2f1c1503a3aae07c3ec570d4d7918d4c03acf986"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4e124c89d10267186666ea16943491ca48532357","unresolved":false,"context_lines":[{"line_number":1622,"context_line":"            metro.create_consistencygroup(group)"},{"line_number":1623,"context_line":"            return model_update"},{"line_number":1624,"context_line":""},{"line_number":1625,"context_line":"        # Array will create CG at create_cgsnapshot time. Cinder will"},{"line_number":1626,"context_line":"        # maintain the CG and volumes relationship in the db."},{"line_number":1627,"context_line":"        return model_update"},{"line_number":1628,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ffe62b97_b728de96","line":1625,"range":{"start_line":1625,"start_character":28,"end_line":1625,"end_character":30},"updated":"2017-03-28 13:21:38.000000000","message":"s/CG/group","commit_id":"2f1c1503a3aae07c3ec570d4d7918d4c03acf986"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4e124c89d10267186666ea16943491ca48532357","unresolved":false,"context_lines":[{"line_number":1622,"context_line":"            metro.create_consistencygroup(group)"},{"line_number":1623,"context_line":"            return model_update"},{"line_number":1624,"context_line":""},{"line_number":1625,"context_line":"        # Array will create CG at create_cgsnapshot time. Cinder will"},{"line_number":1626,"context_line":"        # maintain the CG and volumes relationship in the db."},{"line_number":1627,"context_line":"        return model_update"},{"line_number":1628,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ffe62b97_5711925c","line":1625,"range":{"start_line":1625,"start_character":34,"end_line":1625,"end_character":51},"updated":"2017-03-28 13:21:38.000000000","message":"s/create_cgsnapshot/create_group_snapshot","commit_id":"2f1c1503a3aae07c3ec570d4d7918d4c03acf986"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"cd3015f3cda474482aacfb5e7f16173520d9eafd","unresolved":false,"context_lines":[{"line_number":1622,"context_line":"            metro.create_consistencygroup(group)"},{"line_number":1623,"context_line":"            return model_update"},{"line_number":1624,"context_line":""},{"line_number":1625,"context_line":"        # Array will create CG at create_cgsnapshot time. Cinder will"},{"line_number":1626,"context_line":"        # maintain the CG and volumes relationship in the db."},{"line_number":1627,"context_line":"        return model_update"},{"line_number":1628,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ffe62b97_ad8071f6","line":1625,"range":{"start_line":1625,"start_character":34,"end_line":1625,"end_character":51},"in_reply_to":"ffe62b97_5711925c","updated":"2017-03-29 01:43:32.000000000","message":"Done","commit_id":"2f1c1503a3aae07c3ec570d4d7918d4c03acf986"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"cd3015f3cda474482aacfb5e7f16173520d9eafd","unresolved":false,"context_lines":[{"line_number":1622,"context_line":"            metro.create_consistencygroup(group)"},{"line_number":1623,"context_line":"            return model_update"},{"line_number":1624,"context_line":""},{"line_number":1625,"context_line":"        # Array will create CG at create_cgsnapshot time. Cinder will"},{"line_number":1626,"context_line":"        # maintain the CG and volumes relationship in the db."},{"line_number":1627,"context_line":"        return model_update"},{"line_number":1628,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ffe62b97_6d76e940","line":1625,"range":{"start_line":1625,"start_character":28,"end_line":1625,"end_character":30},"in_reply_to":"ffe62b97_b728de96","updated":"2017-03-29 01:43:32.000000000","message":"Done","commit_id":"2f1c1503a3aae07c3ec570d4d7918d4c03acf986"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4e124c89d10267186666ea16943491ca48532357","unresolved":false,"context_lines":[{"line_number":1623,"context_line":"            return model_update"},{"line_number":1624,"context_line":""},{"line_number":1625,"context_line":"        # Array will create CG at create_cgsnapshot time. Cinder will"},{"line_number":1626,"context_line":"        # maintain the CG and volumes relationship in the db."},{"line_number":1627,"context_line":"        return model_update"},{"line_number":1628,"context_line":""},{"line_number":1629,"context_line":"    @huawei_utils.check_whether_operate_consistency_group"}],"source_content_type":"text/x-python","patch_set":4,"id":"ffe62b97_f70b0627","line":1626,"range":{"start_line":1626,"start_character":23,"end_line":1626,"end_character":25},"updated":"2017-03-28 13:21:38.000000000","message":"s/CG/group","commit_id":"2f1c1503a3aae07c3ec570d4d7918d4c03acf986"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"cd3015f3cda474482aacfb5e7f16173520d9eafd","unresolved":false,"context_lines":[{"line_number":1623,"context_line":"            return model_update"},{"line_number":1624,"context_line":""},{"line_number":1625,"context_line":"        # Array will create CG at create_cgsnapshot time. Cinder will"},{"line_number":1626,"context_line":"        # maintain the CG and volumes relationship in the db."},{"line_number":1627,"context_line":"        return model_update"},{"line_number":1628,"context_line":""},{"line_number":1629,"context_line":"    @huawei_utils.check_whether_operate_consistency_group"}],"source_content_type":"text/x-python","patch_set":4,"id":"ffe62b97_4d71e543","line":1626,"range":{"start_line":1626,"start_character":23,"end_line":1626,"end_character":25},"in_reply_to":"ffe62b97_f70b0627","updated":"2017-03-29 01:43:32.000000000","message":"Done","commit_id":"2f1c1503a3aae07c3ec570d4d7918d4c03acf986"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4e124c89d10267186666ea16943491ca48532357","unresolved":false,"context_lines":[{"line_number":1665,"context_line":"            return model_update, None, None"},{"line_number":1666,"context_line":""},{"line_number":1667,"context_line":"        # Array will create CG at create_cgsnapshot time. Cinder will"},{"line_number":1668,"context_line":"        # maintain the CG and volumes relationship in the db."},{"line_number":1669,"context_line":"        return model_update, None, None"},{"line_number":1670,"context_line":""},{"line_number":1671,"context_line":"    @huawei_utils.check_whether_operate_consistency_group"}],"source_content_type":"text/x-python","patch_set":4,"id":"ffe62b97_a229ba8a","line":1668,"updated":"2017-03-28 13:21:38.000000000","message":"s/CG/group\n\ns/create_cgsnapshot/create_group_snapshot","commit_id":"2f1c1503a3aae07c3ec570d4d7918d4c03acf986"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"cd3015f3cda474482aacfb5e7f16173520d9eafd","unresolved":false,"context_lines":[{"line_number":1665,"context_line":"            return model_update, None, None"},{"line_number":1666,"context_line":""},{"line_number":1667,"context_line":"        # Array will create CG at create_cgsnapshot time. Cinder will"},{"line_number":1668,"context_line":"        # maintain the CG and volumes relationship in the db."},{"line_number":1669,"context_line":"        return model_update, None, None"},{"line_number":1670,"context_line":""},{"line_number":1671,"context_line":"    @huawei_utils.check_whether_operate_consistency_group"}],"source_content_type":"text/x-python","patch_set":4,"id":"ffe62b97_8dc92d5a","line":1668,"in_reply_to":"ffe62b97_a229ba8a","updated":"2017-03-29 01:43:32.000000000","message":"Done","commit_id":"2f1c1503a3aae07c3ec570d4d7918d4c03acf986"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4e124c89d10267186666ea16943491ca48532357","unresolved":false,"context_lines":[{"line_number":1673,"context_line":"                              group_snapshot\u003dNone, snapshots\u003dNone,"},{"line_number":1674,"context_line":"                              source_group\u003dNone, source_vols\u003dNone):"},{"line_number":1675,"context_line":"        err_msg \u003d _(\"Huawei Storage doesn\u0027t support \""},{"line_number":1676,"context_line":"                    \"create_consistencygroup_from_src.\")"},{"line_number":1677,"context_line":"        LOG.error(err_msg)"},{"line_number":1678,"context_line":"        raise exception.VolumeBackendAPIException(data\u003derr_msg)"},{"line_number":1679,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ffe62b97_023aa6ca","line":1676,"range":{"start_line":1676,"start_character":28,"end_line":1676,"end_character":44},"updated":"2017-03-28 13:21:38.000000000","message":"s/consistencygroup/group\n\nWhy can\u0027t you support this?  This means you can\u0027t pass all the generic volume group tempest tests when they are ready.","commit_id":"2f1c1503a3aae07c3ec570d4d7918d4c03acf986"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"cd3015f3cda474482aacfb5e7f16173520d9eafd","unresolved":false,"context_lines":[{"line_number":1673,"context_line":"                              group_snapshot\u003dNone, snapshots\u003dNone,"},{"line_number":1674,"context_line":"                              source_group\u003dNone, source_vols\u003dNone):"},{"line_number":1675,"context_line":"        err_msg \u003d _(\"Huawei Storage doesn\u0027t support \""},{"line_number":1676,"context_line":"                    \"create_consistencygroup_from_src.\")"},{"line_number":1677,"context_line":"        LOG.error(err_msg)"},{"line_number":1678,"context_line":"        raise exception.VolumeBackendAPIException(data\u003derr_msg)"},{"line_number":1679,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ffe62b97_6d4709be","line":1676,"range":{"start_line":1676,"start_character":28,"end_line":1676,"end_character":44},"in_reply_to":"ffe62b97_023aa6ca","updated":"2017-03-29 01:43:32.000000000","message":"Huawei Storage only support hypermetro and replication cg, and it cannot create hypermetro/replication cg from src.","commit_id":"2f1c1503a3aae07c3ec570d4d7918d4c03acf986"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4e124c89d10267186666ea16943491ca48532357","unresolved":false,"context_lines":[{"line_number":1680,"context_line":"    @huawei_utils.check_whether_operate_consistency_group"},{"line_number":1681,"context_line":"    def create_group_snapshot(self, context, group_snapshot, snapshots):"},{"line_number":1682,"context_line":"        \"\"\"Create cgsnapshot.\"\"\""},{"line_number":1683,"context_line":"        LOG.info(\u0027Create cgsnapshot for consistency group\u0027"},{"line_number":1684,"context_line":"                 \u0027: %(group_id)s\u0027, {\u0027group_id\u0027: group_snapshot.group_id})"},{"line_number":1685,"context_line":""},{"line_number":1686,"context_line":"        model_update \u003d {}"}],"source_content_type":"text/x-python","patch_set":4,"id":"ffe62b97_e247c24b","line":1683,"updated":"2017-03-28 13:21:38.000000000","message":"s/cgsnapshot/group_snapshot\ns/consistency group/group","commit_id":"2f1c1503a3aae07c3ec570d4d7918d4c03acf986"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"cd3015f3cda474482aacfb5e7f16173520d9eafd","unresolved":false,"context_lines":[{"line_number":1680,"context_line":"    @huawei_utils.check_whether_operate_consistency_group"},{"line_number":1681,"context_line":"    def create_group_snapshot(self, context, group_snapshot, snapshots):"},{"line_number":1682,"context_line":"        \"\"\"Create cgsnapshot.\"\"\""},{"line_number":1683,"context_line":"        LOG.info(\u0027Create cgsnapshot for consistency group\u0027"},{"line_number":1684,"context_line":"                 \u0027: %(group_id)s\u0027, {\u0027group_id\u0027: group_snapshot.group_id})"},{"line_number":1685,"context_line":""},{"line_number":1686,"context_line":"        model_update \u003d {}"}],"source_content_type":"text/x-python","patch_set":4,"id":"ffe62b97_cd84d5d5","line":1683,"in_reply_to":"ffe62b97_e247c24b","updated":"2017-03-29 01:43:32.000000000","message":"Done","commit_id":"2f1c1503a3aae07c3ec570d4d7918d4c03acf986"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4e124c89d10267186666ea16943491ca48532357","unresolved":false,"context_lines":[{"line_number":1711,"context_line":"                added_snapshots_info.append(info)"},{"line_number":1712,"context_line":"        except Exception:"},{"line_number":1713,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":1714,"context_line":"                LOG.error(\"Create cgsnapshots failed. \""},{"line_number":1715,"context_line":"                          \"Cgsnapshot id: %s.\", group_snapshot.id)"},{"line_number":1716,"context_line":"        snapshot_ids \u003d [added_snapshot[\u0027ID\u0027]"},{"line_number":1717,"context_line":"                        for added_snapshot in added_snapshots_info]"}],"source_content_type":"text/x-python","patch_set":4,"id":"ffe62b97_4272eeae","line":1714,"range":{"start_line":1714,"start_character":34,"end_line":1714,"end_character":45},"updated":"2017-03-28 13:21:38.000000000","message":"cgsnapshot","commit_id":"2f1c1503a3aae07c3ec570d4d7918d4c03acf986"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"cd3015f3cda474482aacfb5e7f16173520d9eafd","unresolved":false,"context_lines":[{"line_number":1711,"context_line":"                added_snapshots_info.append(info)"},{"line_number":1712,"context_line":"        except Exception:"},{"line_number":1713,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":1714,"context_line":"                LOG.error(\"Create cgsnapshots failed. \""},{"line_number":1715,"context_line":"                          \"Cgsnapshot id: %s.\", group_snapshot.id)"},{"line_number":1716,"context_line":"        snapshot_ids \u003d [added_snapshot[\u0027ID\u0027]"},{"line_number":1717,"context_line":"                        for added_snapshot in added_snapshots_info]"}],"source_content_type":"text/x-python","patch_set":4,"id":"ffe62b97_0d687d1a","line":1714,"range":{"start_line":1714,"start_character":34,"end_line":1714,"end_character":45},"in_reply_to":"ffe62b97_4272eeae","updated":"2017-03-29 01:43:32.000000000","message":"Done","commit_id":"2f1c1503a3aae07c3ec570d4d7918d4c03acf986"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4e124c89d10267186666ea16943491ca48532357","unresolved":false,"context_lines":[{"line_number":1719,"context_line":"            self.client.activate_snapshot(snapshot_ids)"},{"line_number":1720,"context_line":"        except Exception:"},{"line_number":1721,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":1722,"context_line":"                LOG.error(\"Active cgsnapshots failed. \""},{"line_number":1723,"context_line":"                          \"Cgsnapshot id: %s.\", group_snapshot.id)"},{"line_number":1724,"context_line":""},{"line_number":1725,"context_line":"        model_update[\u0027status\u0027] \u003d \u0027available\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"ffe62b97_a29c1ac0","line":1722,"range":{"start_line":1722,"start_character":34,"end_line":1722,"end_character":44},"updated":"2017-03-28 13:21:38.000000000","message":"cgsnapshot","commit_id":"2f1c1503a3aae07c3ec570d4d7918d4c03acf986"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"cd3015f3cda474482aacfb5e7f16173520d9eafd","unresolved":false,"context_lines":[{"line_number":1719,"context_line":"            self.client.activate_snapshot(snapshot_ids)"},{"line_number":1720,"context_line":"        except Exception:"},{"line_number":1721,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":1722,"context_line":"                LOG.error(\"Active cgsnapshots failed. \""},{"line_number":1723,"context_line":"                          \"Cgsnapshot id: %s.\", group_snapshot.id)"},{"line_number":1724,"context_line":""},{"line_number":1725,"context_line":"        model_update[\u0027status\u0027] \u003d \u0027available\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"ffe62b97_ed5af980","line":1722,"range":{"start_line":1722,"start_character":34,"end_line":1722,"end_character":44},"in_reply_to":"ffe62b97_a29c1ac0","updated":"2017-03-29 01:43:32.000000000","message":"Done","commit_id":"2f1c1503a3aae07c3ec570d4d7918d4c03acf986"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4e124c89d10267186666ea16943491ca48532357","unresolved":false,"context_lines":[{"line_number":1729,"context_line":"    @huawei_utils.check_whether_operate_consistency_group"},{"line_number":1730,"context_line":"    def delete_group_snapshot(self, context, group_snapshot, snapshots):"},{"line_number":1731,"context_line":"        \"\"\"Delete consistency group snapshot.\"\"\""},{"line_number":1732,"context_line":"        LOG.info(\u0027Delete cgsnapshot %(snap_id)s for consistency group: \u0027"},{"line_number":1733,"context_line":"                 \u0027%(group_id)s\u0027,"},{"line_number":1734,"context_line":"                 {\u0027snap_id\u0027: group_snapshot.id,"},{"line_number":1735,"context_line":"                  \u0027group_id\u0027: group_snapshot.group_id})"}],"source_content_type":"text/x-python","patch_set":4,"id":"ffe62b97_42a78e0c","line":1732,"updated":"2017-03-28 13:21:38.000000000","message":"s/cgsnapshot/group_snapshot\ns/consistency group/group","commit_id":"2f1c1503a3aae07c3ec570d4d7918d4c03acf986"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"cd3015f3cda474482aacfb5e7f16173520d9eafd","unresolved":false,"context_lines":[{"line_number":1729,"context_line":"    @huawei_utils.check_whether_operate_consistency_group"},{"line_number":1730,"context_line":"    def delete_group_snapshot(self, context, group_snapshot, snapshots):"},{"line_number":1731,"context_line":"        \"\"\"Delete consistency group snapshot.\"\"\""},{"line_number":1732,"context_line":"        LOG.info(\u0027Delete cgsnapshot %(snap_id)s for consistency group: \u0027"},{"line_number":1733,"context_line":"                 \u0027%(group_id)s\u0027,"},{"line_number":1734,"context_line":"                 {\u0027snap_id\u0027: group_snapshot.id,"},{"line_number":1735,"context_line":"                  \u0027group_id\u0027: group_snapshot.group_id})"}],"source_content_type":"text/x-python","patch_set":4,"id":"ffe62b97_2dca211a","line":1732,"in_reply_to":"ffe62b97_42a78e0c","updated":"2017-03-29 01:43:32.000000000","message":"Done","commit_id":"2f1c1503a3aae07c3ec570d4d7918d4c03acf986"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4e124c89d10267186666ea16943491ca48532357","unresolved":false,"context_lines":[{"line_number":1742,"context_line":"            try:"},{"line_number":1743,"context_line":"                self.delete_snapshot(snapshot)"},{"line_number":1744,"context_line":"                snapshots_model_update.append({\u0027id\u0027: snapshot.id,"},{"line_number":1745,"context_line":"                                               \u0027status\u0027: \u0027deleted\u0027})"},{"line_number":1746,"context_line":"            except Exception:"},{"line_number":1747,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":1748,"context_line":"                    LOG.error(\"Delete cg snapshots failed. \""}],"source_content_type":"text/x-python","patch_set":4,"id":"ffe62b97_82efd61c","line":1745,"range":{"start_line":1745,"start_character":57,"end_line":1745,"end_character":66},"updated":"2017-03-28 13:21:38.000000000","message":"Use fields.SnapshotStatus","commit_id":"2f1c1503a3aae07c3ec570d4d7918d4c03acf986"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"cd3015f3cda474482aacfb5e7f16173520d9eafd","unresolved":false,"context_lines":[{"line_number":1742,"context_line":"            try:"},{"line_number":1743,"context_line":"                self.delete_snapshot(snapshot)"},{"line_number":1744,"context_line":"                snapshots_model_update.append({\u0027id\u0027: snapshot.id,"},{"line_number":1745,"context_line":"                                               \u0027status\u0027: \u0027deleted\u0027})"},{"line_number":1746,"context_line":"            except Exception:"},{"line_number":1747,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":1748,"context_line":"                    LOG.error(\"Delete cg snapshots failed. \""}],"source_content_type":"text/x-python","patch_set":4,"id":"ffe62b97_505dfc12","line":1745,"range":{"start_line":1745,"start_character":57,"end_line":1745,"end_character":66},"in_reply_to":"ffe62b97_82efd61c","updated":"2017-03-29 01:43:32.000000000","message":"Done","commit_id":"2f1c1503a3aae07c3ec570d4d7918d4c03acf986"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4e124c89d10267186666ea16943491ca48532357","unresolved":false,"context_lines":[{"line_number":1745,"context_line":"                                               \u0027status\u0027: \u0027deleted\u0027})"},{"line_number":1746,"context_line":"            except Exception:"},{"line_number":1747,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":1748,"context_line":"                    LOG.error(\"Delete cg snapshots failed. \""},{"line_number":1749,"context_line":"                              \"Cgsnapshot id: %s\", group_snapshot.id)"},{"line_number":1750,"context_line":""},{"line_number":1751,"context_line":"        return model_update, snapshots_model_update"}],"source_content_type":"text/x-python","patch_set":4,"id":"ffe62b97_62f052fe","line":1748,"updated":"2017-03-28 13:21:38.000000000","message":"group_snapshot","commit_id":"2f1c1503a3aae07c3ec570d4d7918d4c03acf986"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"cd3015f3cda474482aacfb5e7f16173520d9eafd","unresolved":false,"context_lines":[{"line_number":1745,"context_line":"                                               \u0027status\u0027: \u0027deleted\u0027})"},{"line_number":1746,"context_line":"            except Exception:"},{"line_number":1747,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":1748,"context_line":"                    LOG.error(\"Delete cg snapshots failed. \""},{"line_number":1749,"context_line":"                              \"Cgsnapshot id: %s\", group_snapshot.id)"},{"line_number":1750,"context_line":""},{"line_number":1751,"context_line":"        return model_update, snapshots_model_update"}],"source_content_type":"text/x-python","patch_set":4,"id":"ffe62b97_906704ea","line":1748,"in_reply_to":"ffe62b97_62f052fe","updated":"2017-03-29 01:43:32.000000000","message":"Done","commit_id":"2f1c1503a3aae07c3ec570d4d7918d4c03acf986"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8f230f43d0cba8533941faef2f9c6a60a0934d90","unresolved":false,"context_lines":[{"line_number":1637,"context_line":""},{"line_number":1638,"context_line":"        model_update \u003d {}"},{"line_number":1639,"context_line":"        volumes_model_update \u003d []"},{"line_number":1640,"context_line":"        model_update.update({\u0027status\u0027: group.status})"},{"line_number":1641,"context_line":""},{"line_number":1642,"context_line":"        for volume_ref in volumes:"},{"line_number":1643,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"dfeb2761_8189ba27","line":1640,"range":{"start_line":1640,"start_character":39,"end_line":1640,"end_character":51},"updated":"2017-03-30 17:17:19.000000000","message":"fields.GroupStatus.DELETED","commit_id":"04e00bb093abd86beab2e091feb363beda4d2836"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"4a4850d4c5d685b1e2fdea699025b0091b858ac6","unresolved":false,"context_lines":[{"line_number":1637,"context_line":""},{"line_number":1638,"context_line":"        model_update \u003d {}"},{"line_number":1639,"context_line":"        volumes_model_update \u003d []"},{"line_number":1640,"context_line":"        model_update.update({\u0027status\u0027: group.status})"},{"line_number":1641,"context_line":""},{"line_number":1642,"context_line":"        for volume_ref in volumes:"},{"line_number":1643,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"dfeb2761_9935a6fa","line":1640,"range":{"start_line":1640,"start_character":39,"end_line":1640,"end_character":51},"in_reply_to":"dfeb2761_8189ba27","updated":"2017-03-31 02:21:13.000000000","message":"Done","commit_id":"04e00bb093abd86beab2e091feb363beda4d2836"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8f230f43d0cba8533941faef2f9c6a60a0934d90","unresolved":false,"context_lines":[{"line_number":1735,"context_line":""},{"line_number":1736,"context_line":"        model_update \u003d {}"},{"line_number":1737,"context_line":"        snapshots_model_update \u003d []"},{"line_number":1738,"context_line":"        model_update[\u0027status\u0027] \u003d group_snapshot.status"},{"line_number":1739,"context_line":""},{"line_number":1740,"context_line":"        for snapshot in snapshots:"},{"line_number":1741,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"dfeb2761_e1cbe66f","line":1738,"range":{"start_line":1738,"start_character":33,"end_line":1738,"end_character":54},"updated":"2017-03-30 17:17:19.000000000","message":"fields.GroupSnapshotStatus.DELETED","commit_id":"04e00bb093abd86beab2e091feb363beda4d2836"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"4a4850d4c5d685b1e2fdea699025b0091b858ac6","unresolved":false,"context_lines":[{"line_number":1735,"context_line":""},{"line_number":1736,"context_line":"        model_update \u003d {}"},{"line_number":1737,"context_line":"        snapshots_model_update \u003d []"},{"line_number":1738,"context_line":"        model_update[\u0027status\u0027] \u003d group_snapshot.status"},{"line_number":1739,"context_line":""},{"line_number":1740,"context_line":"        for snapshot in snapshots:"},{"line_number":1741,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"dfeb2761_593f1ed6","line":1738,"range":{"start_line":1738,"start_character":33,"end_line":1738,"end_character":54},"in_reply_to":"dfeb2761_e1cbe66f","updated":"2017-03-31 02:21:13.000000000","message":"Done","commit_id":"04e00bb093abd86beab2e091feb363beda4d2836"}],"cinder/volume/drivers/huawei/huawei_utils.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"9bd0a7a64ec9dcb14c112d795f5b2645edc7ca7d","unresolved":false,"context_lines":[{"line_number":118,"context_line":"def check_whether_operate_consistent_group(func):"},{"line_number":119,"context_line":"    def inner(self, context, group, *args, **kwargs):"},{"line_number":120,"context_line":"        if not utils.is_group_a_cg_snapshot_type(group):"},{"line_number":121,"context_line":"            raise NotImplementedError"},{"line_number":122,"context_line":"        return func(self, context, group, *args, **kwargs)"},{"line_number":123,"context_line":"    return inner"}],"source_content_type":"text/x-python","patch_set":3,"id":"ffe62b97_137d97e6","line":121,"updated":"2017-03-27 12:59:52.000000000","message":"Please, change to\nraise NotImplementedError(msg) \nand add a message what actually function is not implemented","commit_id":"6350a8a12c4bc3420bfcd821ed4f169c9cdef6f7"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"3277290396c878a1afbe340a5d3f95a32f7cc617","unresolved":false,"context_lines":[{"line_number":118,"context_line":"def check_whether_operate_consistent_group(func):"},{"line_number":119,"context_line":"    def inner(self, context, group, *args, **kwargs):"},{"line_number":120,"context_line":"        if not utils.is_group_a_cg_snapshot_type(group):"},{"line_number":121,"context_line":"            raise NotImplementedError"},{"line_number":122,"context_line":"        return func(self, context, group, *args, **kwargs)"},{"line_number":123,"context_line":"    return inner"}],"source_content_type":"text/x-python","patch_set":3,"id":"ffe62b97_299c830d","line":121,"in_reply_to":"ffe62b97_137d97e6","updated":"2017-03-28 07:39:49.000000000","message":"Done","commit_id":"6350a8a12c4bc3420bfcd821ed4f169c9cdef6f7"}],"releasenotes/notes/huawei-generic-group-bc3fb7236efc58e7.yaml":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"58d002c6dded0c542aa360cf98ba5d2cdfef1e2d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---\r"},{"line_number":2,"context_line":"features:\r"},{"line_number":3,"context_line":"  - Add CG capability to generic groups in Huawei driver.\r"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"ffe62b97_37f3fc0c","line":3,"range":{"start_line":3,"start_character":25,"end_line":3,"end_character":39},"updated":"2017-03-27 04:18:37.000000000","message":"generic volume groups","commit_id":"292a4570e4dd20ae0843c722aa701dcf90aa67d9"}]}
