)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Helen Walsh \u003chelen.walsh@emc.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-07-12 22:25:47 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"VMAX driver - implement Generic Volume Group feature"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Generic Volume Group replaces Consistency group in pike. All"},{"line_number":10,"context_line":"Consistency Group APIs have been replaced with a corresponding"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"1f1a1f67_b2f5c585","line":7,"range":{"start_line":7,"start_character":14,"end_line":7,"end_character":15},"updated":"2017-07-14 20:16:54.000000000","message":"Capital \"I\".","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"VMAX driver - implement Generic Volume Group feature"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Generic Volume Group replaces Consistency group in pike. All"},{"line_number":10,"context_line":"Consistency Group APIs have been replaced with a corresponding"},{"line_number":11,"context_line":"Generic Volume Group API."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I1564f12e052b3c7e9a45826b3f1f707011e3c634"},{"line_number":14,"context_line":"Partially-Implements: blueprint vmax-generic-volume-group"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"1f1a1f67_322f75f7","line":11,"range":{"start_line":9,"start_character":0,"end_line":11,"end_character":25},"updated":"2017-07-14 20:16:54.000000000","message":"Change to the following:\n\nThis patch adds Consistency Group capability to Generic Volume Groups in the VMAX driver.","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"}],"cinder/volume/drivers/dell_emc/vmax/common.py":[{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"e02497c881d5d449ef7ffdec351e1ed56aca6ffe","unresolved":false,"context_lines":[{"line_number":864,"context_line":"            if \u0027admin_metadata\u0027 in volume:"},{"line_number":865,"context_line":"                admin_metadata \u003d volume.admin_metadata"},{"line_number":866,"context_line":"            if \u0027targetVolumeName\u0027 in admin_metadata:"},{"line_number":867,"context_line":"                targetVolName \u003d admin_metadata[\u0027targetVolumeName\u0027]"},{"line_number":868,"context_line":"                founddevice_id \u003d self.rest.find_volume_device_id("},{"line_number":869,"context_line":"                    array, targetVolName)"},{"line_number":870,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_5f257ec1","line":867,"range":{"start_line":867,"start_character":16,"end_line":867,"end_character":29},"updated":"2017-06-22 16:08:55.000000000","message":"Please change all camelCase variable names to snake_case.","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"e02497c881d5d449ef7ffdec351e1ed56aca6ffe","unresolved":false,"context_lines":[{"line_number":2679,"context_line":"        :param volumes: the list of volumes in the generic group to be deleted"},{"line_number":2680,"context_line":"        :returns: dict -- modelUpdate"},{"line_number":2681,"context_line":"        :returns: list -- list of volume model updates"},{"line_number":2682,"context_line":"        :raises: VolumeBackendAPIException"},{"line_number":2683,"context_line":"        \"\"\""},{"line_number":2684,"context_line":"        LOG.info(\"Delete generic volume group: %(group)s.\","},{"line_number":2685,"context_line":"                 {\u0027group\u0027: group[\u0027id\u0027]})"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_9544171d","line":2682,"range":{"start_line":2682,"start_character":8,"end_line":2682,"end_character":42},"updated":"2017-06-22 16:08:55.000000000","message":"Remove this from docstring (exception not raised here)","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"e02497c881d5d449ef7ffdec351e1ed56aca6ffe","unresolved":false,"context_lines":[{"line_number":2694,"context_line":"        :param volumes: the member volume objects"},{"line_number":2695,"context_line":"        :return: model_update, volumes_model_update"},{"line_number":2696,"context_line":"        \"\"\""},{"line_number":2697,"context_line":"        array, extraSpecsDictList \u003d self._get_volume_group_utils(group)"},{"line_number":2698,"context_line":"        vol_grp_name \u003d None"},{"line_number":2699,"context_line":""},{"line_number":2700,"context_line":"        volume_group \u003d self._find_volume_group("}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_5f0e9e3b","line":2697,"range":{"start_line":2697,"start_character":15,"end_line":2697,"end_character":33},"updated":"2017-06-22 16:08:55.000000000","message":"camelCase to snake_case","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"e02497c881d5d449ef7ffdec351e1ed56aca6ffe","unresolved":false,"context_lines":[{"line_number":2717,"context_line":"        try:"},{"line_number":2718,"context_line":"            self.rest.delete_storage_group(array, vol_grp_name)"},{"line_number":2719,"context_line":"            for vol in volumes:"},{"line_number":2720,"context_line":"                for extraSpecsDict in extraSpecsDictList:"},{"line_number":2721,"context_line":"                    if vol.volume_type_id in extraSpecsDict[\u0027volumeTypeId\u0027]:"},{"line_number":2722,"context_line":"                        extraSpecs \u003d extraSpecsDict.get(utils.EXTRA_SPECS)"},{"line_number":2723,"context_line":"                        device_id \u003d self._find_device_on_array(vol,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_9a0c443c","line":2720,"range":{"start_line":2720,"start_character":20,"end_line":2720,"end_character":56},"updated":"2017-06-22 16:08:55.000000000","message":"same","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"e02497c881d5d449ef7ffdec351e1ed56aca6ffe","unresolved":false,"context_lines":[{"line_number":2787,"context_line":"        This can be a group snapshot or a cloned volume group."},{"line_number":2788,"context_line":"        :param source_group: the group object"},{"line_number":2789,"context_line":"        :param snap_name: the name of the snapshot"},{"line_number":2790,"context_line":"        \"\"\""},{"line_number":2791,"context_line":"        array, __ \u003d ("},{"line_number":2792,"context_line":"            self._get_volume_group_utils(source_group))"},{"line_number":2793,"context_line":"        vol_grp_name \u003d None"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_15e24730","line":2790,"range":{"start_line":2790,"start_character":8,"end_line":2790,"end_character":11},"updated":"2017-06-22 16:08:55.000000000","message":":raises VolumeBackendAPIException","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"e02497c881d5d449ef7ffdec351e1ed56aca6ffe","unresolved":false,"context_lines":[{"line_number":2824,"context_line":""},{"line_number":2825,"context_line":"        :param group_snapshot: the group snapshot object"},{"line_number":2826,"context_line":"        :param snapshots: the snapshot objects"},{"line_number":2827,"context_line":"        \"\"\""},{"line_number":2828,"context_line":"        snapshots_model_update \u003d []"},{"line_number":2829,"context_line":"        model_update \u003d {}"},{"line_number":2830,"context_line":"        source_group \u003d group_snapshot.get(\u0027group\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_b57ef368","line":2827,"range":{"start_line":2827,"start_character":8,"end_line":2827,"end_character":11},"updated":"2017-06-22 16:08:55.000000000","message":":returns: model_update, snapshots_model_update\n:raises VolumeBackendApiException:","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"e02497c881d5d449ef7ffdec351e1ed56aca6ffe","unresolved":false,"context_lines":[{"line_number":2927,"context_line":"        :param add_volumes: the volumes uuids you want to add to the vol grp"},{"line_number":2928,"context_line":"        :param remove_volumes: the volumes uuids you want to remove from"},{"line_number":2929,"context_line":"                               the CG"},{"line_number":2930,"context_line":"        \"\"\""},{"line_number":2931,"context_line":"        LOG.info(\"Update generic volume Group: %(group)s. \""},{"line_number":2932,"context_line":"                 \"This adds and/or removes volumes from \""},{"line_number":2933,"context_line":"                 \"a generic volume group.\","}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_75985bbf","line":2930,"range":{"start_line":2930,"start_character":8,"end_line":2930,"end_character":11},"updated":"2017-06-22 16:08:55.000000000","message":"Add :returns and :raises to docstring","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"e02497c881d5d449ef7ffdec351e1ed56aca6ffe","unresolved":false,"context_lines":[{"line_number":2933,"context_line":"                 \"a generic volume group.\","},{"line_number":2934,"context_line":"                 {\u0027group\u0027: six.text_type(group.id)})"},{"line_number":2935,"context_line":""},{"line_number":2936,"context_line":"        array, __ \u003d ("},{"line_number":2937,"context_line":"            self._get_volume_group_utils(group))"},{"line_number":2938,"context_line":"        model_update \u003d {\u0027status\u0027: fields.GroupStatus.AVAILABLE}"},{"line_number":2939,"context_line":"        add_vols \u003d [vol for vol in add_volumes] if add_volumes else []"},{"line_number":2940,"context_line":"        add_device_ids \u003d self._get_volume_device_ids(add_vols, array)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_3a6410e4","line":2937,"range":{"start_line":2936,"start_character":8,"end_line":2937,"end_character":48},"updated":"2017-06-22 16:08:55.000000000","message":"This will fit on one line. Please then remove the parentheses.","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"e02497c881d5d449ef7ffdec351e1ed56aca6ffe","unresolved":false,"context_lines":[{"line_number":2952,"context_line":"                    group_id\u003dgroup.id)"},{"line_number":2953,"context_line":"            interval_retries_dict \u003d self.utils.get_default_intervals_retries()"},{"line_number":2954,"context_line":"            # Add volume(s) to the group"},{"line_number":2955,"context_line":"            for device_id in add_device_ids:"},{"line_number":2956,"context_line":"                self.masking.add_volume_to_storage_group("},{"line_number":2957,"context_line":"                    array, device_id, vol_grp_name,"},{"line_number":2958,"context_line":"                    \u0027member_vols\u0027, interval_retries_dict)"},{"line_number":2959,"context_line":"            # Remove volume(s) from the group"},{"line_number":2960,"context_line":"            for device_id in remove_device_ids:"},{"line_number":2961,"context_line":"                self.masking.remove_vol_from_storage_group("}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_fa37b8af","line":2958,"range":{"start_line":2955,"start_character":11,"end_line":2958,"end_character":57},"updated":"2017-06-22 16:08:55.000000000","message":"Instead of doing this in a loop for each volume, the whole list of the volume ids can be sent in the one rest call to the storage system. This would significantly improve performance for this operation.","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"e02497c881d5d449ef7ffdec351e1ed56aca6ffe","unresolved":false,"context_lines":[{"line_number":2957,"context_line":"                    array, device_id, vol_grp_name,"},{"line_number":2958,"context_line":"                    \u0027member_vols\u0027, interval_retries_dict)"},{"line_number":2959,"context_line":"            # Remove volume(s) from the group"},{"line_number":2960,"context_line":"            for device_id in remove_device_ids:"},{"line_number":2961,"context_line":"                self.masking.remove_vol_from_storage_group("},{"line_number":2962,"context_line":"                    array, device_id, vol_grp_name,"},{"line_number":2963,"context_line":"                    \u0027member_vols\u0027, interval_retries_dict)"},{"line_number":2964,"context_line":"        except exception.GroupNotFound:"},{"line_number":2965,"context_line":"            raise"},{"line_number":2966,"context_line":"        except Exception as ex:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_fae9f819","line":2963,"range":{"start_line":2960,"start_character":12,"end_line":2963,"end_character":57},"updated":"2017-06-22 16:08:55.000000000","message":"As above comment.","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"e02497c881d5d449ef7ffdec351e1ed56aca6ffe","unresolved":false,"context_lines":[{"line_number":2977,"context_line":"        \"\"\"Get volume device ids from volume."},{"line_number":2978,"context_line":""},{"line_number":2979,"context_line":"        :param volumes: volume objects"},{"line_number":2980,"context_line":"        :returns: volume instance names"},{"line_number":2981,"context_line":"        \"\"\""},{"line_number":2982,"context_line":"        device_ids \u003d []"},{"line_number":2983,"context_line":"        for volume in volumes:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_35ac2333","line":2980,"range":{"start_line":2980,"start_character":18,"end_line":2980,"end_character":39},"updated":"2017-06-22 16:08:55.000000000","message":"device_ids","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"e02497c881d5d449ef7ffdec351e1ed56aca6ffe","unresolved":false,"context_lines":[{"line_number":3006,"context_line":"                  model_update is a dictionary of cg status"},{"line_number":3007,"context_line":"                  volumes_model_update is a list of dictionaries of volume"},{"line_number":3008,"context_line":"                  update"},{"line_number":3009,"context_line":"        \"\"\""},{"line_number":3010,"context_line":"        # Check if we need to create a snapshot"},{"line_number":3011,"context_line":"        create_snapshot \u003d False"},{"line_number":3012,"context_line":"        if group_snapshot:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_355ae34e","line":3009,"range":{"start_line":3009,"start_character":8,"end_line":3009,"end_character":11},"updated":"2017-06-22 16:08:55.000000000","message":":raises VolumeBackendAPIException:","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"e02497c881d5d449ef7ffdec351e1ed56aca6ffe","unresolved":false,"context_lines":[{"line_number":3038,"context_line":"                self._get_volume_group_utils(group))"},{"line_number":3039,"context_line":"            vol_grp_name \u003d \"\""},{"line_number":3040,"context_line":"            # Create the target devices"},{"line_number":3041,"context_line":"            dictOfVolumeDicts \u003d {}"},{"line_number":3042,"context_line":"            targetVolumeNames \u003d {}"},{"line_number":3043,"context_line":"            for volume, source_vol_or_snapshot in zip("},{"line_number":3044,"context_line":"                    volumes, source_vols_or_snapshots):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_1ac1542f","line":3041,"range":{"start_line":3041,"start_character":12,"end_line":3041,"end_character":29},"updated":"2017-06-22 16:08:55.000000000","message":"change to snake_case","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"e02497c881d5d449ef7ffdec351e1ed56aca6ffe","unresolved":false,"context_lines":[{"line_number":3039,"context_line":"            vol_grp_name \u003d \"\""},{"line_number":3040,"context_line":"            # Create the target devices"},{"line_number":3041,"context_line":"            dictOfVolumeDicts \u003d {}"},{"line_number":3042,"context_line":"            targetVolumeNames \u003d {}"},{"line_number":3043,"context_line":"            for volume, source_vol_or_snapshot in zip("},{"line_number":3044,"context_line":"                    volumes, source_vols_or_snapshots):"},{"line_number":3045,"context_line":"                if \u0027size\u0027 in source_vol_or_snapshot:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_fadd7814","line":3042,"range":{"start_line":3042,"start_character":12,"end_line":3042,"end_character":29},"updated":"2017-06-22 16:08:55.000000000","message":"same","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"e02497c881d5d449ef7ffdec351e1ed56aca6ffe","unresolved":false,"context_lines":[{"line_number":3043,"context_line":"            for volume, source_vol_or_snapshot in zip("},{"line_number":3044,"context_line":"                    volumes, source_vols_or_snapshots):"},{"line_number":3045,"context_line":"                if \u0027size\u0027 in source_vol_or_snapshot:"},{"line_number":3046,"context_line":"                    volumeSize \u003d source_vol_or_snapshot[\u0027size\u0027]"},{"line_number":3047,"context_line":"                else:"},{"line_number":3048,"context_line":"                    volumeSize \u003d source_vol_or_snapshot[\u0027volume_size\u0027]"},{"line_number":3049,"context_line":"                for extraSpecsDict in extraSpecsDictList:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_bae700e5","line":3046,"range":{"start_line":3046,"start_character":20,"end_line":3046,"end_character":30},"updated":"2017-06-22 16:08:55.000000000","message":"same","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"e02497c881d5d449ef7ffdec351e1ed56aca6ffe","unresolved":false,"context_lines":[{"line_number":3046,"context_line":"                    volumeSize \u003d source_vol_or_snapshot[\u0027size\u0027]"},{"line_number":3047,"context_line":"                else:"},{"line_number":3048,"context_line":"                    volumeSize \u003d source_vol_or_snapshot[\u0027volume_size\u0027]"},{"line_number":3049,"context_line":"                for extraSpecsDict in extraSpecsDictList:"},{"line_number":3050,"context_line":"                    if volume.volume_type_id in extraSpecsDict[\u0027volumeTypeId\u0027]:"},{"line_number":3051,"context_line":"                        extraSpecs \u003d extraSpecsDict.get(utils.EXTRA_SPECS)"},{"line_number":3052,"context_line":"                        # Create a random UUID and use it as volume name"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_5acc6c60","line":3049,"range":{"start_line":3049,"start_character":16,"end_line":3049,"end_character":56},"updated":"2017-06-22 16:08:55.000000000","message":"same","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"e02497c881d5d449ef7ffdec351e1ed56aca6ffe","unresolved":false,"context_lines":[{"line_number":3104,"context_line":""},{"line_number":3105,"context_line":"        return model_update, volumes_model_update"},{"line_number":3106,"context_line":""},{"line_number":3107,"context_line":"    def update_admin_metadata("},{"line_number":3108,"context_line":"            self, volumes_model_update, key, values):"},{"line_number":3109,"context_line":"        \"\"\"Update the volume_model_updates with admin metadata"},{"line_number":3110,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_7a3f2825","line":3107,"range":{"start_line":3107,"start_character":8,"end_line":3107,"end_character":30},"updated":"2017-06-22 16:08:55.000000000","message":"Could these stand alone utility functions be moved to utils.py?","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"e02497c881d5d449ef7ffdec351e1ed56aca6ffe","unresolved":false,"context_lines":[{"line_number":3120,"context_line":"                volume_model_update.update("},{"line_number":3121,"context_line":"                    {\u0027admin_metadata\u0027: admin_metadata})"},{"line_number":3122,"context_line":""},{"line_number":3123,"context_line":"    def _get_volume_group_utils(self, group):"},{"line_number":3124,"context_line":"        \"\"\"Standard utility for generic volume groups"},{"line_number":3125,"context_line":""},{"line_number":3126,"context_line":"        :param group: the generic volume group object to be created"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_da175ca3","line":3123,"range":{"start_line":3123,"start_character":8,"end_line":3123,"end_character":30},"updated":"2017-06-22 16:08:55.000000000","message":"As above comment","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"e02497c881d5d449ef7ffdec351e1ed56aca6ffe","unresolved":false,"context_lines":[{"line_number":3125,"context_line":""},{"line_number":3126,"context_line":"        :param group: the generic volume group object to be created"},{"line_number":3127,"context_line":"        :return: array, extra specs dict list"},{"line_number":3128,"context_line":"        \"\"\""},{"line_number":3129,"context_line":"        arrays \u003d set()"},{"line_number":3130,"context_line":"        extraSpecsDictList \u003d []"},{"line_number":3131,"context_line":"        # Check if it is a generic volume group instance"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_d0029d09","line":3128,"range":{"start_line":3128,"start_character":8,"end_line":3128,"end_character":11},"updated":"2017-06-22 16:08:55.000000000","message":"raises VolumeBackendAPIException","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"e02497c881d5d449ef7ffdec351e1ed56aca6ffe","unresolved":false,"context_lines":[{"line_number":3127,"context_line":"        :return: array, extra specs dict list"},{"line_number":3128,"context_line":"        \"\"\""},{"line_number":3129,"context_line":"        arrays \u003d set()"},{"line_number":3130,"context_line":"        extraSpecsDictList \u003d []"},{"line_number":3131,"context_line":"        # Check if it is a generic volume group instance"},{"line_number":3132,"context_line":"        if isinstance(group, Group):"},{"line_number":3133,"context_line":"            for volume_type in group.volume_types:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_da663c2a","line":3130,"range":{"start_line":3130,"start_character":8,"end_line":3130,"end_character":26},"updated":"2017-06-22 16:08:55.000000000","message":"camelCase to snake_case","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"e02497c881d5d449ef7ffdec351e1ed56aca6ffe","unresolved":false,"context_lines":[{"line_number":3156,"context_line":"        array \u003d arrays.pop()"},{"line_number":3157,"context_line":"        return array, extraSpecsDictList"},{"line_number":3158,"context_line":""},{"line_number":3159,"context_line":"    def _update_extra_specs_list("},{"line_number":3160,"context_line":"            self, extraSpecs, volumeTypeId):"},{"line_number":3161,"context_line":"        \"\"\"Update the extra specs list"},{"line_number":3162,"context_line":""},{"line_number":3163,"context_line":"        :param extraSpecs: extraSpecs"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_fabe9863","line":3160,"range":{"start_line":3159,"start_character":8,"end_line":3160,"end_character":44},"updated":"2017-06-22 16:08:55.000000000","message":"Could be moved to utils.py?\nAlso, this would fit on one line, and please change camelCase to snake_case.","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"2e2fa1fc7a42c591211a267abaeee704daf0ac58","unresolved":false,"context_lines":[{"line_number":3156,"context_line":"        array \u003d arrays.pop()"},{"line_number":3157,"context_line":"        return array, extraSpecsDictList"},{"line_number":3158,"context_line":""},{"line_number":3159,"context_line":"    def _update_extra_specs_list("},{"line_number":3160,"context_line":"            self, extraSpecs, volumeTypeId):"},{"line_number":3161,"context_line":"        \"\"\"Update the extra specs list"},{"line_number":3162,"context_line":""},{"line_number":3163,"context_line":"        :param extraSpecs: extraSpecs"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_162e5a91","line":3160,"range":{"start_line":3159,"start_character":8,"end_line":3160,"end_character":44},"in_reply_to":"5f201791_fabe9863","updated":"2017-06-27 12:49:03.000000000","message":"TO DO","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"e02497c881d5d449ef7ffdec351e1ed56aca6ffe","unresolved":false,"context_lines":[{"line_number":3164,"context_line":"        :param volumeTypeId: volume type identifier"},{"line_number":3165,"context_line":"        :return: extraSpecsDictList"},{"line_number":3166,"context_line":"        \"\"\""},{"line_number":3167,"context_line":"        extraSpecsDict \u003d {}"},{"line_number":3168,"context_line":"        extraSpecs \u003d self.utils.update_extra_specs(extraSpecs)"},{"line_number":3169,"context_line":"        extraSpecs \u003d self._update_intervals_and_retries(extraSpecs)"},{"line_number":3170,"context_line":"        extraSpecsDict[\"volumeTypeId\"] \u003d volumeTypeId"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_dac19ce6","line":3167,"range":{"start_line":3167,"start_character":8,"end_line":3167,"end_character":22},"updated":"2017-06-22 16:08:55.000000000","message":"camelCase to snake_case","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"e02497c881d5d449ef7ffdec351e1ed56aca6ffe","unresolved":false,"context_lines":[{"line_number":3171,"context_line":"        extraSpecsDict[utils.EXTRA_SPECS] \u003d extraSpecs"},{"line_number":3172,"context_line":"        return extraSpecsDict"},{"line_number":3173,"context_line":""},{"line_number":3174,"context_line":"    def _update_volume_group_name(self, group):"},{"line_number":3175,"context_line":"        \"\"\"Format id and name consistency group"},{"line_number":3176,"context_line":""},{"line_number":3177,"context_line":"        :param group: the generic volume group object"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_952537ae","line":3174,"range":{"start_line":3174,"start_character":8,"end_line":3174,"end_character":33},"updated":"2017-06-22 16:08:55.000000000","message":"Could be moved to utils.py","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"2e2fa1fc7a42c591211a267abaeee704daf0ac58","unresolved":false,"context_lines":[{"line_number":3171,"context_line":"        extraSpecsDict[utils.EXTRA_SPECS] \u003d extraSpecs"},{"line_number":3172,"context_line":"        return extraSpecsDict"},{"line_number":3173,"context_line":""},{"line_number":3174,"context_line":"    def _update_volume_group_name(self, group):"},{"line_number":3175,"context_line":"        \"\"\"Format id and name consistency group"},{"line_number":3176,"context_line":""},{"line_number":3177,"context_line":"        :param group: the generic volume group object"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_b63e86be","line":3174,"range":{"start_line":3174,"start_character":8,"end_line":3174,"end_character":33},"in_reply_to":"5f201791_952537ae","updated":"2017-06-27 12:49:03.000000000","message":"TO DO","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"e02497c881d5d449ef7ffdec351e1ed56aca6ffe","unresolved":false,"context_lines":[{"line_number":3186,"context_line":"        group_name +\u003d six.text_type(group.id)"},{"line_number":3187,"context_line":"        return group_name"},{"line_number":3188,"context_line":""},{"line_number":3189,"context_line":"    def _update_intervals_and_retries(self, extra_specs):"},{"line_number":3190,"context_line":"        \"\"\"Updates the extraSpecs with intervals and retries values"},{"line_number":3191,"context_line":""},{"line_number":3192,"context_line":"        :param extra_specs:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_1a4b94b0","line":3189,"range":{"start_line":3189,"start_character":8,"end_line":3189,"end_character":37},"updated":"2017-06-22 16:08:55.000000000","message":"As above (self.interval and self.retries could be passed in as parameters)","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"2e2fa1fc7a42c591211a267abaeee704daf0ac58","unresolved":false,"context_lines":[{"line_number":3186,"context_line":"        group_name +\u003d six.text_type(group.id)"},{"line_number":3187,"context_line":"        return group_name"},{"line_number":3188,"context_line":""},{"line_number":3189,"context_line":"    def _update_intervals_and_retries(self, extra_specs):"},{"line_number":3190,"context_line":"        \"\"\"Updates the extraSpecs with intervals and retries values"},{"line_number":3191,"context_line":""},{"line_number":3192,"context_line":"        :param extra_specs:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_96394ad8","line":3189,"range":{"start_line":3189,"start_character":8,"end_line":3189,"end_character":37},"in_reply_to":"5f201791_1a4b94b0","updated":"2017-06-27 12:49:03.000000000","message":"TO DO","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c0bdc203b6ea74b61d7c6965d5dddb3b98e04933","unresolved":false,"context_lines":[{"line_number":2668,"context_line":"                                 % {\u0027volGrpName\u0027: six.text_type(vol_grp_name)})"},{"line_number":2669,"context_line":"            LOG.exception(exception_message)"},{"line_number":2670,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dexception_message)"},{"line_number":2671,"context_line":""},{"line_number":2672,"context_line":"        return model_update"},{"line_number":2673,"context_line":""},{"line_number":2674,"context_line":"    def delete_group(self, context, group, volumes):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f1d235d_0e8915c9","line":2671,"updated":"2017-07-02 14:20:35.000000000","message":"Please check whether the group_type supports consistent group snapshot or not.  If so, create a CG on the backend; otherwise, raise NotImplementedError exception so the default implementation in manager.py will handle it.  This is to enforce the requirement of {\"consistent_group_snapshot_enabled\": \u003cis\u003e True} group_specs when creating a consistent group snapshot and also have all drivers handle this consistently.  All driver patches adding CG support to generic volume groups have been given this comment.  Please see example in the ScaleIO driver.\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/dell_emc/scaleio/driver.py#L1541","commit_id":"8f1140f8a6b1d95f7fb5883272a0961e65f18b14"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c0bdc203b6ea74b61d7c6965d5dddb3b98e04933","unresolved":false,"context_lines":[{"line_number":2683,"context_line":"        LOG.info(\"Delete generic volume group: %(group)s.\","},{"line_number":2684,"context_line":"                 {\u0027group\u0027: group[\u0027id\u0027]})"},{"line_number":2685,"context_line":"        model_update, volumes_model_update \u003d self._delete_group("},{"line_number":2686,"context_line":"            group, volumes)"},{"line_number":2687,"context_line":"        return model_update, volumes_model_update"},{"line_number":2688,"context_line":""},{"line_number":2689,"context_line":"    def _delete_group(self, group, volumes):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f1d235d_ee8379a8","line":2686,"updated":"2017-07-02 14:20:35.000000000","message":"See comment above.  All generic volume group functions create/delete/update group, create/delete group snapshot, and create group from src should be handled like this.","commit_id":"8f1140f8a6b1d95f7fb5883272a0961e65f18b14"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d58c6ae42ead16f73f4880065abf8cbfd521088","unresolved":false,"context_lines":[{"line_number":2658,"context_line":"        # Check if consistent group snapshot is set on the group type"},{"line_number":2659,"context_line":"        grp_type_id \u003d group.group_type_id"},{"line_number":2660,"context_line":"        is_consistent_snapshot_enabled \u003d ("},{"line_number":2661,"context_line":"            self.utils.check_consistent_snapshot_enabled(grp_type_id))"},{"line_number":2662,"context_line":"        if not is_consistent_snapshot_enabled:"},{"line_number":2663,"context_line":"            raise NotImplementedError()"},{"line_number":2664,"context_line":"        model_update \u003d {\u0027status\u0027: fields.GroupStatus.AVAILABLE}"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f1d235d_cb42e4ab","line":2661,"range":{"start_line":2661,"start_character":12,"end_line":2661,"end_character":68},"updated":"2017-07-11 13:21:32.000000000","message":"Please follow other drivers and use the existing util function.\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/dell_emc/scaleio/driver.py#L1541","commit_id":"97196c8abaccaae41111ab800c50d5faf4912dd4"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"200382139fc8f589fd69ddf69f89456e98ae1936","unresolved":false,"context_lines":[{"line_number":2658,"context_line":"        # Check if consistent group snapshot is set on the group type"},{"line_number":2659,"context_line":"        grp_type_id \u003d group.group_type_id"},{"line_number":2660,"context_line":"        is_consistent_snapshot_enabled \u003d ("},{"line_number":2661,"context_line":"            self.utils.check_consistent_snapshot_enabled(grp_type_id))"},{"line_number":2662,"context_line":"        if not is_consistent_snapshot_enabled:"},{"line_number":2663,"context_line":"            raise NotImplementedError()"},{"line_number":2664,"context_line":"        model_update \u003d {\u0027status\u0027: fields.GroupStatus.AVAILABLE}"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f1d235d_5f568a08","line":2661,"range":{"start_line":2661,"start_character":12,"end_line":2661,"end_character":68},"in_reply_to":"3f1d235d_cb42e4ab","updated":"2017-07-11 14:41:12.000000000","message":"Sure.  Thanks","commit_id":"97196c8abaccaae41111ab800c50d5faf4912dd4"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":2705,"context_line":""},{"line_number":2706,"context_line":"        :param group: the group object"},{"line_number":2707,"context_line":"        :param volumes: the member volume objects"},{"line_number":2708,"context_line":"        :return: model_update, volumes_model_update"},{"line_number":2709,"context_line":"        \"\"\""},{"line_number":2710,"context_line":"        volumes_model_update \u003d []"},{"line_number":2711,"context_line":"        array, extraspecs_dict_list \u003d self.utils.get_volume_group_utils("}],"source_content_type":"text/x-python","patch_set":20,"id":"1f1a1f67_72fe0daf","line":2708,"range":{"start_line":2708,"start_character":8,"end_line":2708,"end_character":16},"updated":"2017-07-14 20:16:54.000000000","message":":returns:","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":2755,"context_line":"                            self._delete_from_srp("},{"line_number":2756,"context_line":"                                array, device_id, \"group vol\", extraspecs)"},{"line_number":2757,"context_line":"                        else:"},{"line_number":2758,"context_line":"                            LOG.debug(\"Volume not present in storage group\")"},{"line_number":2759,"context_line":"                        # Add the device id to the deleted list"},{"line_number":2760,"context_line":"                        deleted_volume_device_ids.append(device_id)"},{"line_number":2761,"context_line":"            # Once all volumes are deleted then delete the SG"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f1a1f67_52d43120","line":2758,"updated":"2017-07-14 20:16:54.000000000","message":"Add ending period.","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":2765,"context_line":"                volumes_model_update, volumes, group.id, status\u003d\u0027deleted\u0027)"},{"line_number":2766,"context_line":"        except Exception as e:"},{"line_number":2767,"context_line":"            LOG.error(\"Error deleting volume group.\""},{"line_number":2768,"context_line":"                      \"Error received: %(e)s\", {\u0027e\u0027: six.text_type(e)})"},{"line_number":2769,"context_line":"            model_update \u003d {\u0027status\u0027: fields.GroupStatus.ERROR_DELETING}"},{"line_number":2770,"context_line":"            # Update the volumes_model_update"},{"line_number":2771,"context_line":"            volumes_not_deleted \u003d []"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f1a1f67_92f1a9d0","line":2768,"range":{"start_line":2768,"start_character":53,"end_line":2768,"end_character":66},"updated":"2017-07-14 20:16:54.000000000","message":"No need to use six.text_type here as the LOGGER will handle it.","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":2858,"context_line":"        if vol_grp_name is None:"},{"line_number":2859,"context_line":"            exception_message \u003d ("},{"line_number":2860,"context_line":"                _(\"Cannot find generic volume group %(group_id)s.\") %"},{"line_number":2861,"context_line":"                {\u0027group_id\u0027: six.text_type(source_group[\u0027id\u0027])})"},{"line_number":2862,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":2863,"context_line":"                data\u003dexception_message)"},{"line_number":2864,"context_line":"        interval_retries_dict \u003d self.utils.get_intervals_retries_dict("}],"source_content_type":"text/x-python","patch_set":20,"id":"1f1a1f67_729a8d6e","line":2861,"range":{"start_line":2861,"start_character":29,"end_line":2861,"end_character":42},"updated":"2017-07-14 20:16:54.000000000","message":"\u0027id\u0027 should be a string already.  No need to use six.text_type.","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":2880,"context_line":"        return model_update, snapshots_model_update"},{"line_number":2881,"context_line":""},{"line_number":2882,"context_line":"    def _delete_group_snapshot(self, group_snapshot, snapshots):"},{"line_number":2883,"context_line":"        \"\"\"Helper function to delete a group snapshot"},{"line_number":2884,"context_line":""},{"line_number":2885,"context_line":"        :param group_snapshot: the group snapshot object"},{"line_number":2886,"context_line":"        :param snapshots: the snapshot objects"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f1a1f67_f29c5d5e","line":2883,"updated":"2017-07-14 20:16:54.000000000","message":"period","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":2885,"context_line":"        :param group_snapshot: the group snapshot object"},{"line_number":2886,"context_line":"        :param snapshots: the snapshot objects"},{"line_number":2887,"context_line":"        :returns: model_update, snapshots_model_update"},{"line_number":2888,"context_line":"        :raises VolumeBackendApiException, NotImplementedError"},{"line_number":2889,"context_line":"        \"\"\""},{"line_number":2890,"context_line":"        snapshots_model_update \u003d []"},{"line_number":2891,"context_line":"        model_update \u003d {}"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f1a1f67_d2a3a19d","line":2888,"range":{"start_line":2888,"start_character":8,"end_line":2888,"end_character":15},"updated":"2017-07-14 20:16:54.000000000","message":":raises:","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":2897,"context_line":"        LOG.info(\"Delete snapshot grpSnapshotId: %(grpSnapshotId)s\""},{"line_number":2898,"context_line":"                 \" for source group %(grpId)s\","},{"line_number":2899,"context_line":"                 {\u0027grpSnapshotId\u0027: group_snapshot[\u0027id\u0027],"},{"line_number":2900,"context_line":"                  \u0027grpId\u0027: six.text_type(grp_id)})"},{"line_number":2901,"context_line":""},{"line_number":2902,"context_line":"        snap_name \u003d self.utils.truncate_string(group_snapshot[\u0027id\u0027], 19)"},{"line_number":2903,"context_line":"        vol_grp_name \u003d None"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f1a1f67_52b9d1c9","line":2900,"range":{"start_line":2900,"start_character":27,"end_line":2900,"end_character":40},"updated":"2017-07-14 20:16:54.000000000","message":"No need for six.text_type","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":2998,"context_line":"        LOG.info(\"Update generic volume Group: %(group)s. \""},{"line_number":2999,"context_line":"                 \"This adds and/or removes volumes from \""},{"line_number":3000,"context_line":"                 \"a generic volume group.\","},{"line_number":3001,"context_line":"                 {\u0027group\u0027: six.text_type(group.id)})"},{"line_number":3002,"context_line":"        if not volume_utils.is_group_a_cg_snapshot_type(group):"},{"line_number":3003,"context_line":"            raise NotImplementedError()"},{"line_number":3004,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"1f1a1f67_f2b57dce","line":3001,"range":{"start_line":3001,"start_character":27,"end_line":3001,"end_character":40},"updated":"2017-07-14 20:16:54.000000000","message":"Remove six.text_type","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":3099,"context_line":""},{"line_number":3100,"context_line":"        LOG.debug(\"Enter VMAX create_volume group_from_src. Group to be \""},{"line_number":3101,"context_line":"                  \"created: %(grpId)s, Source : %(SourceGrpId)s.\","},{"line_number":3102,"context_line":"                  {\u0027grpId\u0027: six.text_type(group.id),"},{"line_number":3103,"context_line":"                   \u0027SourceGrpId\u0027: six.text_type(source_id)})"},{"line_number":3104,"context_line":""},{"line_number":3105,"context_line":"        tgt_name \u003d self.utils.update_volume_group_name(group)"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f1a1f67_b2cca561","line":3102,"range":{"start_line":3102,"start_character":28,"end_line":3102,"end_character":41},"updated":"2017-07-14 20:16:54.000000000","message":"Remove six.text_type","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":3100,"context_line":"        LOG.debug(\"Enter VMAX create_volume group_from_src. Group to be \""},{"line_number":3101,"context_line":"                  \"created: %(grpId)s, Source : %(SourceGrpId)s.\","},{"line_number":3102,"context_line":"                  {\u0027grpId\u0027: six.text_type(group.id),"},{"line_number":3103,"context_line":"                   \u0027SourceGrpId\u0027: six.text_type(source_id)})"},{"line_number":3104,"context_line":""},{"line_number":3105,"context_line":"        tgt_name \u003d self.utils.update_volume_group_name(group)"},{"line_number":3106,"context_line":"        self.create_group(context, group)"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f1a1f67_92dbe919","line":3103,"range":{"start_line":3103,"start_character":34,"end_line":3103,"end_character":48},"updated":"2017-07-14 20:16:54.000000000","message":"Same","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6ab612253c392bd5989c83676ff0eb814a00658f","unresolved":false,"context_lines":[{"line_number":2993,"context_line":"        :param remove_volumes: the volumes uuids you want to remove from"},{"line_number":2994,"context_line":"                               the CG"},{"line_number":2995,"context_line":"        :returns: model_update"},{"line_number":2996,"context_line":"        :raises VolumeBackendAPIException, NotImplementedError"},{"line_number":2997,"context_line":"        \"\"\""},{"line_number":2998,"context_line":"        LOG.info(\"Update generic volume Group: %(group)s. \""},{"line_number":2999,"context_line":"                 \"This adds and/or removes volumes from \""}],"source_content_type":"text/x-python","patch_set":21,"id":"1f1a1f67_036bdff0","line":2996,"range":{"start_line":2996,"start_character":8,"end_line":2996,"end_character":15},"updated":"2017-07-17 18:56:08.000000000","message":":raises:","commit_id":"15236abeed449988ae953db999272c9321fe22d3"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6ab612253c392bd5989c83676ff0eb814a00658f","unresolved":false,"context_lines":[{"line_number":3075,"context_line":"                  model_update is a dictionary of cg status"},{"line_number":3076,"context_line":"                  volumes_model_update is a list of dictionaries of volume"},{"line_number":3077,"context_line":"                  update"},{"line_number":3078,"context_line":"        :raises VolumeBackendAPIException, NotImplementedError"},{"line_number":3079,"context_line":"        \"\"\""},{"line_number":3080,"context_line":"        if not volume_utils.is_group_a_cg_snapshot_type(group):"},{"line_number":3081,"context_line":"            raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":21,"id":"1f1a1f67_e36fc3f9","line":3078,"range":{"start_line":3078,"start_character":8,"end_line":3078,"end_character":15},"updated":"2017-07-17 18:56:08.000000000","message":":raises:","commit_id":"15236abeed449988ae953db999272c9321fe22d3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"70491a0ca113c69667ec8a52167fbb289f29f5e6","unresolved":false,"context_lines":[{"line_number":2790,"context_line":"                        array, volumes_not_deleted,"},{"line_number":2791,"context_line":"                        vol_grp_name, intervals_retries_dict)"},{"line_number":2792,"context_line":"            except Exception as ex:"},{"line_number":2793,"context_line":"                LOG.error(\"Error in rollback - (%ex). \""},{"line_number":2794,"context_line":"                          \"Failed to add back volumes to sg (%sg_name)\","},{"line_number":2795,"context_line":"                          {\u0027ex\u0027: ex, \u0027sg_name\u0027: vol_grp_name})"},{"line_number":2796,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1f1a1f67_e352c766","line":2793,"range":{"start_line":2793,"start_character":47,"end_line":2793,"end_character":52},"updated":"2017-07-19 23:50:13.000000000","message":"You have some formatting errors here, should be \"%(ex)s\" and \"%(sg_name)s\".","commit_id":"a181d3c08a7e5b82b003f4cc9e86b12edbe99bc6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"098b5c91a4ab8b541409114501ec3c334ffeea3b","unresolved":false,"context_lines":[{"line_number":2791,"context_line":"                        vol_grp_name, intervals_retries_dict)"},{"line_number":2792,"context_line":"            except Exception as ex:"},{"line_number":2793,"context_line":"                LOG.error(\"Error in rollback - (%ex). \""},{"line_number":2794,"context_line":"                          \"Failed to add back volumes to sg (%sg_name)\","},{"line_number":2795,"context_line":"                          {\u0027ex\u0027: ex, \u0027sg_name\u0027: vol_grp_name})"},{"line_number":2796,"context_line":""},{"line_number":2797,"context_line":"        return model_update, volumes_model_update"}],"source_content_type":"text/x-python","patch_set":22,"id":"1f1a1f67_3907cc1a","line":2794,"range":{"start_line":2794,"start_character":60,"end_line":2794,"end_character":70},"updated":"2017-07-20 00:58:39.000000000","message":"Good catch, Sean.\n\nHelen, don\u0027t forget this one.","commit_id":"a181d3c08a7e5b82b003f4cc9e86b12edbe99bc6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f4487bd00c3b25b10c07bb22f5927b78597ea6c3","unresolved":false,"context_lines":[{"line_number":2815,"context_line":"            \"Create snapshot for %(grpId)s \""},{"line_number":2816,"context_line":"            \"group Snapshot ID: %(group_snapshot)s.\","},{"line_number":2817,"context_line":"            {\u0027group_snapshot\u0027: group_snapshot[\u0027id\u0027],"},{"line_number":2818,"context_line":"             \u0027grpId\u0027: six.text_type(grp_id)})"},{"line_number":2819,"context_line":""},{"line_number":2820,"context_line":"        try:"},{"line_number":2821,"context_line":"            snap_name \u003d self.utils.truncate_string(group_snapshot[\u0027id\u0027], 19)"}],"source_content_type":"text/x-python","patch_set":22,"id":"1f1a1f67_f4783bc4","line":2818,"range":{"start_line":2818,"start_character":22,"end_line":2818,"end_character":35},"updated":"2017-07-20 02:33:16.000000000","message":"Not needed.","commit_id":"a181d3c08a7e5b82b003f4cc9e86b12edbe99bc6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f4487bd00c3b25b10c07bb22f5927b78597ea6c3","unresolved":false,"context_lines":[{"line_number":2915,"context_line":"            if vol_grp_name is None:"},{"line_number":2916,"context_line":"                exception_message \u003d ("},{"line_number":2917,"context_line":"                    _(\"Cannot find generic volume group %(grp_id)s.\") %"},{"line_number":2918,"context_line":"                    {\u0027group_id\u0027: six.text_type(source_group[\u0027id\u0027])})"},{"line_number":2919,"context_line":"                raise exception.VolumeBackendAPIException("},{"line_number":2920,"context_line":"                    data\u003dexception_message)"},{"line_number":2921,"context_line":"            # Check if the snapshot exists"}],"source_content_type":"text/x-python","patch_set":22,"id":"1f1a1f67_947907c6","line":2918,"range":{"start_line":2918,"start_character":33,"end_line":2918,"end_character":46},"updated":"2017-07-20 02:33:16.000000000","message":"Not needed.","commit_id":"a181d3c08a7e5b82b003f4cc9e86b12edbe99bc6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f4487bd00c3b25b10c07bb22f5927b78597ea6c3","unresolved":false,"context_lines":[{"line_number":3036,"context_line":"            LOG.error(\"Exception: %(ex)s\", {\u0027ex\u0027: ex})"},{"line_number":3037,"context_line":"            exception_message \u003d (_(\"Failed to update volume group:\""},{"line_number":3038,"context_line":"                                   \" %(volGrpName)s.\")"},{"line_number":3039,"context_line":"                                 % {\u0027volGrpName\u0027: six.text_type(group.id)})"},{"line_number":3040,"context_line":"            LOG.error(exception_message)"},{"line_number":3041,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dexception_message)"},{"line_number":3042,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1f1a1f67_f4615b06","line":3039,"range":{"start_line":3039,"start_character":50,"end_line":3039,"end_character":64},"updated":"2017-07-20 02:33:16.000000000","message":"Not needed.","commit_id":"a181d3c08a7e5b82b003f4cc9e86b12edbe99bc6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f4487bd00c3b25b10c07bb22f5927b78597ea6c3","unresolved":false,"context_lines":[{"line_number":3125,"context_line":"                            extraspecs_dict[\u0027volumeTypeId\u0027]):"},{"line_number":3126,"context_line":"                        extraspecs \u003d extraspecs_dict.get(utils.EXTRA_SPECS)"},{"line_number":3127,"context_line":"                        # Create a random UUID and use it as volume name"},{"line_number":3128,"context_line":"                        target_volume_name \u003d str(uuid.uuid4())"},{"line_number":3129,"context_line":"                        volume_dict \u003d self.provision.create_volume_from_sg("},{"line_number":3130,"context_line":"                            array, target_volume_name,"},{"line_number":3131,"context_line":"                            tgt_name, volume_size, extraspecs)"}],"source_content_type":"text/x-python","patch_set":22,"id":"1f1a1f67_94522734","line":3128,"range":{"start_line":3128,"start_character":45,"end_line":3128,"end_character":48},"updated":"2017-07-20 02:33:16.000000000","message":"six.text_type","commit_id":"a181d3c08a7e5b82b003f4cc9e86b12edbe99bc6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f4487bd00c3b25b10c07bb22f5927b78597ea6c3","unresolved":false,"context_lines":[{"line_number":3159,"context_line":"        except Exception:"},{"line_number":3160,"context_line":"            exception_message \u003d (_(\"Failed to create vol grp %(volGrpName)s\""},{"line_number":3161,"context_line":"                                   \" from source %(grpSnapshot)s.\")"},{"line_number":3162,"context_line":"                                 % {\u0027volGrpName\u0027: six.text_type(group.id),"},{"line_number":3163,"context_line":"                                    \u0027grpSnapshot\u0027: six.text_type(source_id)})"},{"line_number":3164,"context_line":"            LOG.exception(exception_message)"},{"line_number":3165,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dexception_message)"}],"source_content_type":"text/x-python","patch_set":22,"id":"1f1a1f67_5436cf04","line":3162,"range":{"start_line":3162,"start_character":50,"end_line":3162,"end_character":63},"updated":"2017-07-20 02:33:16.000000000","message":"Not needed.","commit_id":"a181d3c08a7e5b82b003f4cc9e86b12edbe99bc6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f4487bd00c3b25b10c07bb22f5927b78597ea6c3","unresolved":false,"context_lines":[{"line_number":3160,"context_line":"            exception_message \u003d (_(\"Failed to create vol grp %(volGrpName)s\""},{"line_number":3161,"context_line":"                                   \" from source %(grpSnapshot)s.\")"},{"line_number":3162,"context_line":"                                 % {\u0027volGrpName\u0027: six.text_type(group.id),"},{"line_number":3163,"context_line":"                                    \u0027grpSnapshot\u0027: six.text_type(source_id)})"},{"line_number":3164,"context_line":"            LOG.exception(exception_message)"},{"line_number":3165,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dexception_message)"},{"line_number":3166,"context_line":"        volumes_model_update \u003d self.utils.update_volume_model_updates("}],"source_content_type":"text/x-python","patch_set":22,"id":"1f1a1f67_343913f1","line":3163,"range":{"start_line":3163,"start_character":50,"end_line":3163,"end_character":65},"updated":"2017-07-20 02:33:16.000000000","message":"Not needed.","commit_id":"a181d3c08a7e5b82b003f4cc9e86b12edbe99bc6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5489e4ca8ad1cea0acbae9872da85849e01d5ef4","unresolved":false,"context_lines":[{"line_number":2676,"context_line":"        except Exception:"},{"line_number":2677,"context_line":"            exception_message \u003d (_(\"Failed to create generic volume group:\""},{"line_number":2678,"context_line":"                                   \" %(volGrpName)s.\")"},{"line_number":2679,"context_line":"                                 % {\u0027volGrpName\u0027: six.text_type(vol_grp_name)})"},{"line_number":2680,"context_line":"            LOG.exception(exception_message)"},{"line_number":2681,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dexception_message)"},{"line_number":2682,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"1f1a1f67_e1fbcd44","line":2679,"range":{"start_line":2679,"start_character":50,"end_line":2679,"end_character":77},"updated":"2017-07-20 13:03:43.000000000","message":"vol_grp_name is already a string so it does not need six.text_type.","commit_id":"b949ad3ce472b649e5b8589a4e02194823218513"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5489e4ca8ad1cea0acbae9872da85849e01d5ef4","unresolved":false,"context_lines":[{"line_number":2693,"context_line":"        :raises: NotImplementedError"},{"line_number":2694,"context_line":"        \"\"\""},{"line_number":2695,"context_line":"        LOG.info(\"Delete generic volume group: %(group)s.\","},{"line_number":2696,"context_line":"                 {\u0027group\u0027: group[\u0027id\u0027]})"},{"line_number":2697,"context_line":"        if not volume_utils.is_group_a_cg_snapshot_type(group):"},{"line_number":2698,"context_line":"            raise NotImplementedError()"},{"line_number":2699,"context_line":"        model_update, volumes_model_update \u003d self._delete_group("}],"source_content_type":"text/x-python","patch_set":23,"id":"1f1a1f67_619d7d09","line":2696,"range":{"start_line":2696,"start_character":27,"end_line":2696,"end_character":38},"updated":"2017-07-20 13:03:43.000000000","message":"group.id","commit_id":"b949ad3ce472b649e5b8589a4e02194823218513"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5489e4ca8ad1cea0acbae9872da85849e01d5ef4","unresolved":false,"context_lines":[{"line_number":2717,"context_line":""},{"line_number":2718,"context_line":"        if volume_group is None:"},{"line_number":2719,"context_line":"            LOG.error(\"Cannot find generic volume group %(volGrpName)s.\","},{"line_number":2720,"context_line":"                      {\u0027volGrpName\u0027: six.text_type(group.id)})"},{"line_number":2721,"context_line":"            model_update \u003d {\u0027status\u0027: fields.GroupStatus.DELETED}"},{"line_number":2722,"context_line":""},{"line_number":2723,"context_line":"            volumes_model_update \u003d self.utils.update_volume_model_updates("}],"source_content_type":"text/x-python","patch_set":23,"id":"1f1a1f67_018489b0","line":2720,"range":{"start_line":2720,"start_character":37,"end_line":2720,"end_character":50},"updated":"2017-07-20 13:03:43.000000000","message":"Remove six.text_type","commit_id":"b949ad3ce472b649e5b8589a4e02194823218513"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5489e4ca8ad1cea0acbae9872da85849e01d5ef4","unresolved":false,"context_lines":[{"line_number":2814,"context_line":"        LOG.info("},{"line_number":2815,"context_line":"            \"Create snapshot for %(grpId)s \""},{"line_number":2816,"context_line":"            \"group Snapshot ID: %(group_snapshot)s.\","},{"line_number":2817,"context_line":"            {\u0027group_snapshot\u0027: group_snapshot[\u0027id\u0027],"},{"line_number":2818,"context_line":"             \u0027grpId\u0027: grp_id})"},{"line_number":2819,"context_line":""},{"line_number":2820,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":23,"id":"1f1a1f67_21b0a58b","line":2817,"range":{"start_line":2817,"start_character":31,"end_line":2817,"end_character":51},"updated":"2017-07-20 13:03:43.000000000","message":"group_snapshot.id","commit_id":"b949ad3ce472b649e5b8589a4e02194823218513"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5489e4ca8ad1cea0acbae9872da85849e01d5ef4","unresolved":false,"context_lines":[{"line_number":2818,"context_line":"             \u0027grpId\u0027: grp_id})"},{"line_number":2819,"context_line":""},{"line_number":2820,"context_line":"        try:"},{"line_number":2821,"context_line":"            snap_name \u003d self.utils.truncate_string(group_snapshot[\u0027id\u0027], 19)"},{"line_number":2822,"context_line":"            self._create_group_replica(source_group,"},{"line_number":2823,"context_line":"                                       snap_name)"},{"line_number":2824,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"1f1a1f67_c1a69154","line":2821,"range":{"start_line":2821,"start_character":51,"end_line":2821,"end_character":71},"updated":"2017-07-20 13:03:43.000000000","message":"group_snapshot.id","commit_id":"b949ad3ce472b649e5b8589a4e02194823218513"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5489e4ca8ad1cea0acbae9872da85849e01d5ef4","unresolved":false,"context_lines":[{"line_number":2832,"context_line":""},{"line_number":2833,"context_line":"        for snapshot in snapshots:"},{"line_number":2834,"context_line":"            snapshots_model_update.append("},{"line_number":2835,"context_line":"                {\u0027id\u0027: snapshot[\u0027id\u0027],"},{"line_number":2836,"context_line":"                 \u0027status\u0027: fields.SnapshotStatus.AVAILABLE})"},{"line_number":2837,"context_line":"        model_update \u003d {\u0027status\u0027: fields.GroupStatus.AVAILABLE}"},{"line_number":2838,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"1f1a1f67_e17e2dae","line":2835,"range":{"start_line":2835,"start_character":23,"end_line":2835,"end_character":37},"updated":"2017-07-20 13:03:43.000000000","message":"snapshot.id","commit_id":"b949ad3ce472b649e5b8589a4e02194823218513"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5489e4ca8ad1cea0acbae9872da85849e01d5ef4","unresolved":false,"context_lines":[{"line_number":2858,"context_line":"        if vol_grp_name is None:"},{"line_number":2859,"context_line":"            exception_message \u003d ("},{"line_number":2860,"context_line":"                _(\"Cannot find generic volume group %(group_id)s.\") %"},{"line_number":2861,"context_line":"                {\u0027group_id\u0027: source_group[\u0027id\u0027]})"},{"line_number":2862,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":2863,"context_line":"                data\u003dexception_message)"},{"line_number":2864,"context_line":"        interval_retries_dict \u003d self.utils.get_intervals_retries_dict("}],"source_content_type":"text/x-python","patch_set":23,"id":"1f1a1f67_61445d75","line":2861,"range":{"start_line":2861,"start_character":29,"end_line":2861,"end_character":47},"updated":"2017-07-20 13:03:43.000000000","message":"source_group.id","commit_id":"b949ad3ce472b649e5b8589a4e02194823218513"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5489e4ca8ad1cea0acbae9872da85849e01d5ef4","unresolved":false,"context_lines":[{"line_number":2890,"context_line":"        snapshots_model_update \u003d []"},{"line_number":2891,"context_line":"        model_update \u003d {}"},{"line_number":2892,"context_line":"        source_group \u003d group_snapshot.get(\u0027group\u0027)"},{"line_number":2893,"context_line":"        grp_id \u003d group_snapshot[\u0027group_id\u0027]"},{"line_number":2894,"context_line":"        if not volume_utils.is_group_a_cg_snapshot_type(source_group):"},{"line_number":2895,"context_line":"            raise NotImplementedError()"},{"line_number":2896,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"1f1a1f67_e1574d26","line":2893,"range":{"start_line":2893,"start_character":17,"end_line":2893,"end_character":43},"updated":"2017-07-20 13:03:43.000000000","message":"group_snapshot.id","commit_id":"b949ad3ce472b649e5b8589a4e02194823218513"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5489e4ca8ad1cea0acbae9872da85849e01d5ef4","unresolved":false,"context_lines":[{"line_number":2896,"context_line":""},{"line_number":2897,"context_line":"        LOG.info(\"Delete snapshot grpSnapshotId: %(grpSnapshotId)s\""},{"line_number":2898,"context_line":"                 \" for source group %(grpId)s\","},{"line_number":2899,"context_line":"                 {\u0027grpSnapshotId\u0027: group_snapshot[\u0027id\u0027],"},{"line_number":2900,"context_line":"                  \u0027grpId\u0027: grp_id})"},{"line_number":2901,"context_line":""},{"line_number":2902,"context_line":"        snap_name \u003d self.utils.truncate_string(group_snapshot[\u0027id\u0027], 19)"}],"source_content_type":"text/x-python","patch_set":23,"id":"1f1a1f67_813419fd","line":2899,"range":{"start_line":2899,"start_character":35,"end_line":2899,"end_character":55},"updated":"2017-07-20 13:03:43.000000000","message":"group_snapshot.id","commit_id":"b949ad3ce472b649e5b8589a4e02194823218513"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5489e4ca8ad1cea0acbae9872da85849e01d5ef4","unresolved":false,"context_lines":[{"line_number":2899,"context_line":"                 {\u0027grpSnapshotId\u0027: group_snapshot[\u0027id\u0027],"},{"line_number":2900,"context_line":"                  \u0027grpId\u0027: grp_id})"},{"line_number":2901,"context_line":""},{"line_number":2902,"context_line":"        snap_name \u003d self.utils.truncate_string(group_snapshot[\u0027id\u0027], 19)"},{"line_number":2903,"context_line":"        vol_grp_name \u003d None"},{"line_number":2904,"context_line":"        try:"},{"line_number":2905,"context_line":"            # Get the array serial"}],"source_content_type":"text/x-python","patch_set":23,"id":"1f1a1f67_212305c1","line":2902,"range":{"start_line":2902,"start_character":47,"end_line":2902,"end_character":67},"updated":"2017-07-20 13:03:43.000000000","message":"group_snapshot.id","commit_id":"b949ad3ce472b649e5b8589a4e02194823218513"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5489e4ca8ad1cea0acbae9872da85849e01d5ef4","unresolved":false,"context_lines":[{"line_number":2915,"context_line":"            if vol_grp_name is None:"},{"line_number":2916,"context_line":"                exception_message \u003d ("},{"line_number":2917,"context_line":"                    _(\"Cannot find generic volume group %(grp_id)s.\") %"},{"line_number":2918,"context_line":"                    {\u0027group_id\u0027: source_group[\u0027id\u0027]})"},{"line_number":2919,"context_line":"                raise exception.VolumeBackendAPIException("},{"line_number":2920,"context_line":"                    data\u003dexception_message)"},{"line_number":2921,"context_line":"            # Check if the snapshot exists"}],"source_content_type":"text/x-python","patch_set":23,"id":"1f1a1f67_a1183584","line":2918,"range":{"start_line":2918,"start_character":33,"end_line":2918,"end_character":51},"updated":"2017-07-20 13:03:43.000000000","message":"source_group.id","commit_id":"b949ad3ce472b649e5b8589a4e02194823218513"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5489e4ca8ad1cea0acbae9872da85849e01d5ef4","unresolved":false,"context_lines":[{"line_number":2927,"context_line":"            else:"},{"line_number":2928,"context_line":"                # Snapshot has been already deleted, return successfully"},{"line_number":2929,"context_line":"                LOG.error(\"Cannot find group snapshot %(snapId)s.\","},{"line_number":2930,"context_line":"                          {\u0027snapId\u0027: six.text_type(group_snapshot[\u0027id\u0027])})"},{"line_number":2931,"context_line":"            model_update \u003d {\u0027status\u0027: fields.GroupSnapshotStatus.DELETED}"},{"line_number":2932,"context_line":"            for snapshot in snapshots:"},{"line_number":2933,"context_line":"                snapshots_model_update.append("}],"source_content_type":"text/x-python","patch_set":23,"id":"1f1a1f67_210c2541","line":2930,"range":{"start_line":2930,"start_character":37,"end_line":2930,"end_character":50},"updated":"2017-07-20 13:03:43.000000000","message":"Remove six.text_type","commit_id":"b949ad3ce472b649e5b8589a4e02194823218513"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5489e4ca8ad1cea0acbae9872da85849e01d5ef4","unresolved":false,"context_lines":[{"line_number":2927,"context_line":"            else:"},{"line_number":2928,"context_line":"                # Snapshot has been already deleted, return successfully"},{"line_number":2929,"context_line":"                LOG.error(\"Cannot find group snapshot %(snapId)s.\","},{"line_number":2930,"context_line":"                          {\u0027snapId\u0027: six.text_type(group_snapshot[\u0027id\u0027])})"},{"line_number":2931,"context_line":"            model_update \u003d {\u0027status\u0027: fields.GroupSnapshotStatus.DELETED}"},{"line_number":2932,"context_line":"            for snapshot in snapshots:"},{"line_number":2933,"context_line":"                snapshots_model_update.append("}],"source_content_type":"text/x-python","patch_set":23,"id":"1f1a1f67_01092930","line":2930,"range":{"start_line":2930,"start_character":51,"end_line":2930,"end_character":71},"updated":"2017-07-20 13:03:43.000000000","message":"group_snapshot.id","commit_id":"b949ad3ce472b649e5b8589a4e02194823218513"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5489e4ca8ad1cea0acbae9872da85849e01d5ef4","unresolved":false,"context_lines":[{"line_number":2931,"context_line":"            model_update \u003d {\u0027status\u0027: fields.GroupSnapshotStatus.DELETED}"},{"line_number":2932,"context_line":"            for snapshot in snapshots:"},{"line_number":2933,"context_line":"                snapshots_model_update.append("},{"line_number":2934,"context_line":"                    {\u0027id\u0027: snapshot[\u0027id\u0027],"},{"line_number":2935,"context_line":"                     \u0027status\u0027: fields.SnapshotStatus.DELETED})"},{"line_number":2936,"context_line":"        except Exception as e:"},{"line_number":2937,"context_line":"            LOG.error(\"Error deleting volume group snapshot.\""}],"source_content_type":"text/x-python","patch_set":23,"id":"1f1a1f67_c102110c","line":2934,"range":{"start_line":2934,"start_character":27,"end_line":2934,"end_character":41},"updated":"2017-07-20 13:03:43.000000000","message":"snapshot.id","commit_id":"b949ad3ce472b649e5b8589a4e02194823218513"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5489e4ca8ad1cea0acbae9872da85849e01d5ef4","unresolved":false,"context_lines":[{"line_number":3033,"context_line":"        except exception.GroupNotFound:"},{"line_number":3034,"context_line":"            raise"},{"line_number":3035,"context_line":"        except Exception as ex:"},{"line_number":3036,"context_line":"            LOG.error(\"Exception: %(ex)s\", {\u0027ex\u0027: ex})"},{"line_number":3037,"context_line":"            exception_message \u003d (_(\"Failed to update volume group:\""},{"line_number":3038,"context_line":"                                   \" %(volGrpName)s.\")"},{"line_number":3039,"context_line":"                                 % {\u0027volGrpName\u0027: group.id})"}],"source_content_type":"text/x-python","patch_set":23,"id":"1f1a1f67_c5269cbb","line":3036,"range":{"start_line":3036,"start_character":12,"end_line":3036,"end_character":54},"updated":"2017-07-20 13:03:43.000000000","message":"Remove this line.","commit_id":"b949ad3ce472b649e5b8589a4e02194823218513"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5489e4ca8ad1cea0acbae9872da85849e01d5ef4","unresolved":false,"context_lines":[{"line_number":3037,"context_line":"            exception_message \u003d (_(\"Failed to update volume group:\""},{"line_number":3038,"context_line":"                                   \" %(volGrpName)s.\")"},{"line_number":3039,"context_line":"                                 % {\u0027volGrpName\u0027: group.id})"},{"line_number":3040,"context_line":"            LOG.error(exception_message)"},{"line_number":3041,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dexception_message)"},{"line_number":3042,"context_line":""},{"line_number":3043,"context_line":"        return model_update, None, None"}],"source_content_type":"text/x-python","patch_set":23,"id":"1f1a1f67_652588ab","line":3040,"range":{"start_line":3040,"start_character":12,"end_line":3040,"end_character":21},"updated":"2017-07-20 13:03:43.000000000","message":"Change to LOG.exception so you\u0027ll have the exception logged.","commit_id":"b949ad3ce472b649e5b8589a4e02194823218513"}],"cinder/volume/drivers/dell_emc/vmax/fc.py":[{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"e02497c881d5d449ef7ffdec351e1ed56aca6ffe","unresolved":false,"context_lines":[{"line_number":462,"context_line":""},{"line_number":463,"context_line":"        :param context: the context"},{"line_number":464,"context_line":"        :param group: the group object"},{"line_number":465,"context_line":"        :returns: model_update"},{"line_number":466,"context_line":"        \"\"\""},{"line_number":467,"context_line":"        self.common.create_group(context, group)"},{"line_number":468,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_907305b2","line":465,"range":{"start_line":465,"start_character":8,"end_line":465,"end_character":30},"updated":"2017-06-22 16:08:55.000000000","message":"Does not return anything","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":513,"context_line":"            snapshots\u003dNone, source_group\u003dNone, source_vols\u003dNone):"},{"line_number":514,"context_line":"        \"\"\"Creates the volume group from source."},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"        Currently the source can only be a group_snapshot."},{"line_number":517,"context_line":"        :param context: the context"},{"line_number":518,"context_line":"        :param group: the consistency group object to be created"},{"line_number":519,"context_line":"        :param volumes: volumes in the consistency group"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f1a1f67_326415b9","line":516,"range":{"start_line":516,"start_character":8,"end_line":516,"end_character":58},"updated":"2017-07-14 20:16:54.000000000","message":"The driver supports create group from a group.  Remove the above.","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":515,"context_line":""},{"line_number":516,"context_line":"        Currently the source can only be a group_snapshot."},{"line_number":517,"context_line":"        :param context: the context"},{"line_number":518,"context_line":"        :param group: the consistency group object to be created"},{"line_number":519,"context_line":"        :param volumes: volumes in the consistency group"},{"line_number":520,"context_line":"        :param group_snapshot: the source volume group snapshot"},{"line_number":521,"context_line":"        :param snapshots: snapshots of the source volumes"},{"line_number":522,"context_line":"        :param source_group: the dictionary of a volume group as source."}],"source_content_type":"text/x-python","patch_set":20,"id":"1f1a1f67_b26f0591","line":519,"range":{"start_line":518,"start_character":26,"end_line":519,"end_character":56},"updated":"2017-07-14 20:16:54.000000000","message":"Remove \"consistency\".","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"}],"cinder/volume/drivers/dell_emc/vmax/iscsi.py":[{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"e02497c881d5d449ef7ffdec351e1ed56aca6ffe","unresolved":false,"context_lines":[{"line_number":406,"context_line":""},{"line_number":407,"context_line":"        :param context: the context"},{"line_number":408,"context_line":"        :param group: the group object"},{"line_number":409,"context_line":"        :returns: model_update"},{"line_number":410,"context_line":"        \"\"\""},{"line_number":411,"context_line":"        self.common.create_group(context, group)"},{"line_number":412,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_10e25530","line":409,"range":{"start_line":409,"start_character":8,"end_line":409,"end_character":30},"updated":"2017-06-22 16:08:55.000000000","message":"Does not return anything","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":424,"context_line":"        \"\"\"Creates a group snapshot."},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"        :param context: the context"},{"line_number":427,"context_line":"        :param group_snapshot: the grouop snapshot"},{"line_number":428,"context_line":"        :param snapshots: snapshots list"},{"line_number":429,"context_line":"        \"\"\""},{"line_number":430,"context_line":"        return self.common.create_group_snapshot(context,"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f1a1f67_52d31161","line":427,"range":{"start_line":427,"start_character":35,"end_line":427,"end_character":41},"updated":"2017-07-14 20:16:54.000000000","message":"group","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":442,"context_line":""},{"line_number":443,"context_line":"    def update_group(self, context, group,"},{"line_number":444,"context_line":"                     add_volumes\u003dNone, remove_volumes\u003dNone):"},{"line_number":445,"context_line":"        \"\"\"Updates LUNs in consistency group."},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"        :param context: the context"},{"line_number":448,"context_line":"        :param group: the group object"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f1a1f67_d2c6019b","line":445,"range":{"start_line":445,"start_character":27,"end_line":445,"end_character":39},"updated":"2017-07-14 20:16:54.000000000","message":"Remove \"consistency\".","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":457,"context_line":"            snapshots\u003dNone, source_group\u003dNone, source_vols\u003dNone):"},{"line_number":458,"context_line":"        \"\"\"Creates the volume group from source."},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"        Currently the source can only be a group_snapshot."},{"line_number":461,"context_line":"        :param context: the context"},{"line_number":462,"context_line":"        :param group: the consistency group object to be created"},{"line_number":463,"context_line":"        :param volumes: volumes in the consistency group"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f1a1f67_5238b19e","line":460,"range":{"start_line":460,"start_character":8,"end_line":460,"end_character":58},"updated":"2017-07-14 20:16:54.000000000","message":"The driver supports source as a group.  Remove this sentence.","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":459,"context_line":""},{"line_number":460,"context_line":"        Currently the source can only be a group_snapshot."},{"line_number":461,"context_line":"        :param context: the context"},{"line_number":462,"context_line":"        :param group: the consistency group object to be created"},{"line_number":463,"context_line":"        :param volumes: volumes in the consistency group"},{"line_number":464,"context_line":"        :param group_snapshot: the source volume group snapshot"},{"line_number":465,"context_line":"        :param snapshots: snapshots of the source volumes"},{"line_number":466,"context_line":"        :param source_group: the dictionary of a volume group as source."}],"source_content_type":"text/x-python","patch_set":20,"id":"1f1a1f67_12423911","line":463,"range":{"start_line":462,"start_character":22,"end_line":463,"end_character":56},"updated":"2017-07-14 20:16:54.000000000","message":"Remove \"consistency\"","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"}],"cinder/volume/drivers/dell_emc/vmax/provision.py":[{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"e02497c881d5d449ef7ffdec351e1ed56aca6ffe","unresolved":false,"context_lines":[{"line_number":451,"context_line":"        self.rest.modify_rdf_device_pair("},{"line_number":452,"context_line":"            array, device_id, rdf_group, extra_specs, split\u003dFalse)"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"    def create_volume_group(self, array, group_name, extra_specs):"},{"line_number":455,"context_line":"        \"\"\"Create a generic volume group."},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"        :param array: the array serial number"},{"line_number":458,"context_line":"        :param group_name: the name of the group"},{"line_number":459,"context_line":"        :param extra_specs: the extra specifications"},{"line_number":460,"context_line":"        :return: volume_group"},{"line_number":461,"context_line":"        \"\"\""},{"line_number":462,"context_line":"        start_time \u003d time.time()"},{"line_number":463,"context_line":""},{"line_number":464,"context_line":"        @coordination.synchronized(\"emc-sg-{storage_group}\")"},{"line_number":465,"context_line":"        def do_create_storage_group(storage_group):"},{"line_number":466,"context_line":"            storagegroup \u003d self.rest.create_volume_group("},{"line_number":467,"context_line":"                array, storage_group, extra_specs)"},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"            LOG.debug(\"Create volume group took: %(delta)s H:MM:SS.\","},{"line_number":470,"context_line":"                      {\u0027delta\u0027: self.utils.get_time_delta(start_time,"},{"line_number":471,"context_line":"                                                          time.time())})"},{"line_number":472,"context_line":"            LOG.info(\"Volume group %(sg)s created successfully\","},{"line_number":473,"context_line":"                     {\u0027sg\u0027: storage_group})"},{"line_number":474,"context_line":"            return storagegroup"},{"line_number":475,"context_line":""},{"line_number":476,"context_line":"        return do_create_storage_group(group_name)"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"    def create_group_replica("},{"line_number":479,"context_line":"            self, array, source_group, snap_name, extra_specs):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_104b75b0","line":476,"range":{"start_line":454,"start_character":4,"end_line":476,"end_character":50},"updated":"2017-06-22 16:08:55.000000000","message":"This is really code duplication - instead of create_volume_group, create_storage_group above could be called as follows:\ncreate_storage_group(array, group_name, None, None, None, extra_specs). This will create the required non-fast managed storage group, and also removes the need for the additional rest.create_volume_group.","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"2e2fa1fc7a42c591211a267abaeee704daf0ac58","unresolved":false,"context_lines":[{"line_number":451,"context_line":"        self.rest.modify_rdf_device_pair("},{"line_number":452,"context_line":"            array, device_id, rdf_group, extra_specs, split\u003dFalse)"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"    def create_volume_group(self, array, group_name, extra_specs):"},{"line_number":455,"context_line":"        \"\"\"Create a generic volume group."},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"        :param array: the array serial number"},{"line_number":458,"context_line":"        :param group_name: the name of the group"},{"line_number":459,"context_line":"        :param extra_specs: the extra specifications"},{"line_number":460,"context_line":"        :return: volume_group"},{"line_number":461,"context_line":"        \"\"\""},{"line_number":462,"context_line":"        start_time \u003d time.time()"},{"line_number":463,"context_line":""},{"line_number":464,"context_line":"        @coordination.synchronized(\"emc-sg-{storage_group}\")"},{"line_number":465,"context_line":"        def do_create_storage_group(storage_group):"},{"line_number":466,"context_line":"            storagegroup \u003d self.rest.create_volume_group("},{"line_number":467,"context_line":"                array, storage_group, extra_specs)"},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"            LOG.debug(\"Create volume group took: %(delta)s H:MM:SS.\","},{"line_number":470,"context_line":"                      {\u0027delta\u0027: self.utils.get_time_delta(start_time,"},{"line_number":471,"context_line":"                                                          time.time())})"},{"line_number":472,"context_line":"            LOG.info(\"Volume group %(sg)s created successfully\","},{"line_number":473,"context_line":"                     {\u0027sg\u0027: storage_group})"},{"line_number":474,"context_line":"            return storagegroup"},{"line_number":475,"context_line":""},{"line_number":476,"context_line":"        return do_create_storage_group(group_name)"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"    def create_group_replica("},{"line_number":479,"context_line":"            self, array, source_group, snap_name, extra_specs):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_761b4e72","line":476,"range":{"start_line":454,"start_character":4,"end_line":476,"end_character":50},"in_reply_to":"5f201791_104b75b0","updated":"2017-06-27 12:49:03.000000000","message":"TO DO","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"e02497c881d5d449ef7ffdec351e1ed56aca6ffe","unresolved":false,"context_lines":[{"line_number":493,"context_line":""},{"line_number":494,"context_line":"    def delete_group_replica(self, array, snap_name,"},{"line_number":495,"context_line":"                             source_group_name):"},{"line_number":496,"context_line":"        \"\"\"Delete the snapshot"},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"        :param array: the array serial number"},{"line_number":499,"context_line":"        :param snap_name: the name for the snap shot"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_70dbc9ec","line":496,"range":{"start_line":496,"start_character":22,"end_line":496,"end_character":30},"updated":"2017-06-22 16:08:55.000000000","message":"Please add a full stop.","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"e02497c881d5d449ef7ffdec351e1ed56aca6ffe","unresolved":false,"context_lines":[{"line_number":510,"context_line":""},{"line_number":511,"context_line":"    def link_and_break_replica(self, array, source_group_name,"},{"line_number":512,"context_line":"                               target_group_name, snap_name, extra_specs,"},{"line_number":513,"context_line":"                               deleteSnapshot\u003dFalse):"},{"line_number":514,"context_line":"        \"\"\"Links a group snap and breaks the relationship"},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"        :param array: the array serial"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_d0f3bd72","line":513,"range":{"start_line":513,"start_character":31,"end_line":513,"end_character":45},"updated":"2017-06-22 16:08:55.000000000","message":"Change to snake_case","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"e02497c881d5d449ef7ffdec351e1ed56aca6ffe","unresolved":false,"context_lines":[{"line_number":511,"context_line":"    def link_and_break_replica(self, array, source_group_name,"},{"line_number":512,"context_line":"                               target_group_name, snap_name, extra_specs,"},{"line_number":513,"context_line":"                               deleteSnapshot\u003dFalse):"},{"line_number":514,"context_line":"        \"\"\"Links a group snap and breaks the relationship"},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"        :param array: the array serial"},{"line_number":517,"context_line":"        :param source_group_name: the source group name"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_30e551a9","line":514,"range":{"start_line":514,"start_character":11,"end_line":514,"end_character":57},"updated":"2017-06-22 16:08:55.000000000","message":"Please add a full stop.","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"e02497c881d5d449ef7ffdec351e1ed56aca6ffe","unresolved":false,"context_lines":[{"line_number":528,"context_line":"            array, source_group_name, target_group_name, snap_name,"},{"line_number":529,"context_line":"            extra_specs, link\u003dTrue)"},{"line_number":530,"context_line":"        # Wait for the copy to get over"},{"line_number":531,"context_line":"        self.rest.is_sync_complete_group(array, source_group_name,"},{"line_number":532,"context_line":"                                         target_group_name,"},{"line_number":533,"context_line":"                                         snap_name, extra_specs)"},{"line_number":534,"context_line":"        # Unlink the snapshot"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_107c95b3","line":531,"range":{"start_line":531,"start_character":18,"end_line":531,"end_character":40},"updated":"2017-06-22 16:08:55.000000000","message":"Do we need to wait for this to be fully copied before we return the operation successfully? It could take a very long time. For single volume clones, we don\u0027t unlink (and delete the snapshot, if required) until we have to (such as on delete, extend etc.) Is this something we could adopt here, or do we have to wait_for_sync before we can complete?","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"2e2fa1fc7a42c591211a267abaeee704daf0ac58","unresolved":false,"context_lines":[{"line_number":528,"context_line":"            array, source_group_name, target_group_name, snap_name,"},{"line_number":529,"context_line":"            extra_specs, link\u003dTrue)"},{"line_number":530,"context_line":"        # Wait for the copy to get over"},{"line_number":531,"context_line":"        self.rest.is_sync_complete_group(array, source_group_name,"},{"line_number":532,"context_line":"                                         target_group_name,"},{"line_number":533,"context_line":"                                         snap_name, extra_specs)"},{"line_number":534,"context_line":"        # Unlink the snapshot"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_5644d246","line":531,"range":{"start_line":531,"start_character":18,"end_line":531,"end_character":40},"in_reply_to":"5f201791_107c95b3","updated":"2017-06-27 12:49:03.000000000","message":"TO DO","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c0bdc203b6ea74b61d7c6965d5dddb3b98e04933","unresolved":false,"context_lines":[{"line_number":501,"context_line":"        LOG.debug(\"Deleting Snap Vx snapshot: source group: %(srcGroup)s \""},{"line_number":502,"context_line":"                  \"snapshot: %(snap_name)s.\","},{"line_number":503,"context_line":"                  {\u0027srcGroup\u0027: source_group_name,"},{"line_number":504,"context_line":"                   \u0027snapshot\u0027: snap_name})"},{"line_number":505,"context_line":"        # The check for existence of snapshot has already happened"},{"line_number":506,"context_line":"        # So we just need to delete the snapshot"},{"line_number":507,"context_line":"        self.rest.delete_storagegroup_snap(array, snap_name, source_group_name)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f1d235d_8e9525e7","line":504,"range":{"start_line":504,"start_character":20,"end_line":504,"end_character":28},"updated":"2017-07-02 14:20:35.000000000","message":"This should be \"snap_name\".","commit_id":"8f1140f8a6b1d95f7fb5883272a0961e65f18b14"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":458,"context_line":"        :param array: the array serial number"},{"line_number":459,"context_line":"        :param group_name: the name of the group"},{"line_number":460,"context_line":"        :param extra_specs: the extra specifications"},{"line_number":461,"context_line":"        :return: volume_group"},{"line_number":462,"context_line":"        \"\"\""},{"line_number":463,"context_line":"        return self.create_storage_group(array, group_name,"},{"line_number":464,"context_line":"                                         None, None, None, extra_specs)"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f1a1f67_f2a8dddb","line":461,"range":{"start_line":461,"start_character":8,"end_line":461,"end_character":16},"updated":"2017-07-14 20:16:54.000000000","message":":returns:","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":472,"context_line":"        :param snap_name: the name for the snap shot"},{"line_number":473,"context_line":"        :param extra_specs: extra specifications"},{"line_number":474,"context_line":"        \"\"\""},{"line_number":475,"context_line":"        LOG.debug(\"Creating Snap Vx snapshot of storage group: %(srcGroup)s \","},{"line_number":476,"context_line":"                  {\u0027srcGroup\u0027: source_group})"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"        # Create snapshot"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f1a1f67_72b4cd35","line":475,"range":{"start_line":475,"start_character":75,"end_line":475,"end_character":76},"updated":"2017-07-14 20:16:54.000000000","message":"Remove extra white space and add ending period.","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":528,"context_line":"            LOG.debug(\"Deleting Snap Vx snapshot: source group: %(srcGroup)s \""},{"line_number":529,"context_line":"                      \"snapshot: %(snap_name)s.\","},{"line_number":530,"context_line":"                      {\u0027srcGroup\u0027: source_group_name,"},{"line_number":531,"context_line":"                       \u0027snapshot\u0027: snap_name})"},{"line_number":532,"context_line":"            self.rest.delete_storagegroup_snap(array, snap_name,"},{"line_number":533,"context_line":"                                               source_group_name)"},{"line_number":534,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"1f1a1f67_9292c99d","line":531,"range":{"start_line":531,"start_character":24,"end_line":531,"end_character":32},"updated":"2017-07-14 20:16:54.000000000","message":"This should be \u0027snap_name\u0027.","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":535,"context_line":"    def _unlink_group("},{"line_number":536,"context_line":"            self, array, source_group_name, target_group_name, snap_name,"},{"line_number":537,"context_line":"            extra_specs):"},{"line_number":538,"context_line":"        \"\"\"Unlink a target group from its source group"},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"        :param array: the array serial number"},{"line_number":541,"context_line":"        :param source_group_name: the source group name"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f1a1f67_728ded79","line":538,"updated":"2017-07-14 20:16:54.000000000","message":"ending period","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":542,"context_line":"        :param target_group_name: the target device name"},{"line_number":543,"context_line":"        :param snap_name: the snap name"},{"line_number":544,"context_line":"        :param extra_specs: extra specifications"},{"line_number":545,"context_line":"        :return: return code"},{"line_number":546,"context_line":"        \"\"\""},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"        def _unlink_grp():"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f1a1f67_52eaf10e","line":545,"range":{"start_line":545,"start_character":8,"end_line":545,"end_character":16},"updated":"2017-07-14 20:16:54.000000000","message":":returns:","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"}],"cinder/volume/drivers/dell_emc/vmax/rest.py":[{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"e02497c881d5d449ef7ffdec351e1ed56aca6ffe","unresolved":false,"context_lines":[{"line_number":1905,"context_line":"        :param array: the array serial number"},{"line_number":1906,"context_line":"        :param group_name: the name of the group"},{"line_number":1907,"context_line":"        :param extra_specs: the extra specifications"},{"line_number":1908,"context_line":"        :return: volume_group"},{"line_number":1909,"context_line":"        \"\"\""},{"line_number":1910,"context_line":"        payload \u003d {\"srpId\": \"NONE\","},{"line_number":1911,"context_line":"                   \"storageGroupId\": group_name,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_1055b51d","line":1908,"range":{"start_line":1908,"start_character":17,"end_line":1908,"end_character":29},"updated":"2017-06-22 16:08:55.000000000","message":"group_name","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"e02497c881d5d449ef7ffdec351e1ed56aca6ffe","unresolved":false,"context_lines":[{"line_number":1935,"context_line":""},{"line_number":1936,"context_line":"        :param array: the array serial number"},{"line_number":1937,"context_line":"        :param storagegroup_name: name of the source sg"},{"line_number":1938,"context_line":"        :return:"},{"line_number":1939,"context_line":"        \"\"\""},{"line_number":1940,"context_line":"        snap_info \u003d None"},{"line_number":1941,"context_line":"        snap_info \u003d self.get_storagegroup_snap_info(array,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_903e65d8","line":1938,"range":{"start_line":1938,"start_character":9,"end_line":1938,"end_character":15},"updated":"2017-06-22 16:08:55.000000000","message":":return: linked_storage_group_list","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"e02497c881d5d449ef7ffdec351e1ed56aca6ffe","unresolved":false,"context_lines":[{"line_number":1951,"context_line":""},{"line_number":1952,"context_line":"        :param array: the array serial number"},{"line_number":1953,"context_line":"        :param volume_name: the volume name (OS-\u003cUUID\u003e)"},{"line_number":1954,"context_line":"        :return: device_id"},{"line_number":1955,"context_line":"        \"\"\""},{"line_number":1956,"context_line":"        volume_list \u003d None"},{"line_number":1957,"context_line":"        params \u003d {\"storageGroupId\": storagegroup_name}"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_702509c2","line":1954,"range":{"start_line":1954,"start_character":17,"end_line":1954,"end_character":26},"updated":"2017-06-22 16:08:55.000000000","message":"volume_list","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"e02497c881d5d449ef7ffdec351e1ed56aca6ffe","unresolved":false,"context_lines":[{"line_number":2035,"context_line":"        :param snap_name: the snapshot name"},{"line_number":2036,"context_line":"        :param target_group_name: the target group name"},{"line_number":2037,"context_line":"        :return: copied -- bool"},{"line_number":2038,"context_line":"        \"\"\""},{"line_number":2039,"context_line":"        copied \u003d False"},{"line_number":2040,"context_line":"        session \u003d self._get_sync_session_group("},{"line_number":2041,"context_line":"            array, source_group_name, snap_name, target_group_name)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_eb280887","line":2038,"range":{"start_line":2038,"start_character":8,"end_line":2038,"end_character":11},"updated":"2017-06-22 16:08:55.000000000","message":":raises VolumeBackendAPIException","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"e02497c881d5d449ef7ffdec351e1ed56aca6ffe","unresolved":false,"context_lines":[{"line_number":2040,"context_line":"        session \u003d self._get_sync_session_group("},{"line_number":2041,"context_line":"            array, source_group_name, snap_name, target_group_name)"},{"line_number":2042,"context_line":"        if session:"},{"line_number":2043,"context_line":"            percentageCopied \u003d session[\u0027percentageCopied\u0027]"},{"line_number":2044,"context_line":"            if percentageCopied \u003d\u003d 100:"},{"line_number":2045,"context_line":"                copied \u003d True"},{"line_number":2046,"context_line":"        elif session is None:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_6b3cf8c7","line":2043,"range":{"start_line":2043,"start_character":12,"end_line":2043,"end_character":28},"updated":"2017-06-22 16:08:55.000000000","message":"camelCase to snake_case","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"e02497c881d5d449ef7ffdec351e1ed56aca6ffe","unresolved":false,"context_lines":[{"line_number":2041,"context_line":"            array, source_group_name, snap_name, target_group_name)"},{"line_number":2042,"context_line":"        if session:"},{"line_number":2043,"context_line":"            percentageCopied \u003d session[\u0027percentageCopied\u0027]"},{"line_number":2044,"context_line":"            if percentageCopied \u003d\u003d 100:"},{"line_number":2045,"context_line":"                copied \u003d True"},{"line_number":2046,"context_line":"        elif session is None:"},{"line_number":2047,"context_line":"            exception_message \u003d (_(\"No snap sessions found for\""}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_cbe0accf","line":2044,"range":{"start_line":2044,"start_character":15,"end_line":2044,"end_character":39},"updated":"2017-06-22 16:08:55.000000000","message":"Is this value kept up to date? The equivalent values for single volume snapshots are not necessarily current - it could be the same here.","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"2e2fa1fc7a42c591211a267abaeee704daf0ac58","unresolved":false,"context_lines":[{"line_number":2041,"context_line":"            array, source_group_name, snap_name, target_group_name)"},{"line_number":2042,"context_line":"        if session:"},{"line_number":2043,"context_line":"            percentageCopied \u003d session[\u0027percentageCopied\u0027]"},{"line_number":2044,"context_line":"            if percentageCopied \u003d\u003d 100:"},{"line_number":2045,"context_line":"                copied \u003d True"},{"line_number":2046,"context_line":"        elif session is None:"},{"line_number":2047,"context_line":"            exception_message \u003d (_(\"No snap sessions found for\""}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_d67102aa","line":2044,"range":{"start_line":2044,"start_character":15,"end_line":2044,"end_character":39},"in_reply_to":"5f201791_cbe0accf","updated":"2017-06-27 12:49:03.000000000","message":"TO DO","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":1896,"context_line":""},{"line_number":1897,"context_line":"        :param array: the array serial number"},{"line_number":1898,"context_line":"        :param storage_group_name: the name of the storage group"},{"line_number":1899,"context_line":"        :return: storage group dict or None"},{"line_number":1900,"context_line":"        \"\"\""},{"line_number":1901,"context_line":"        return self.get_resource("},{"line_number":1902,"context_line":"            array, REPLICATION, \u0027storagegroup\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f1a1f67_97acfb34","line":1899,"range":{"start_line":1899,"start_character":8,"end_line":1899,"end_character":16},"updated":"2017-07-14 20:16:54.000000000","message":":returns:","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":1907,"context_line":""},{"line_number":1908,"context_line":"        :param array: the array serial number"},{"line_number":1909,"context_line":"        :param volume_name: the volume name (OS-\u003cUUID\u003e)"},{"line_number":1910,"context_line":"        :return: volume_list"},{"line_number":1911,"context_line":"        \"\"\""},{"line_number":1912,"context_line":"        volume_list \u003d None"},{"line_number":1913,"context_line":"        params \u003d {\"storageGroupId\": storagegroup_name}"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f1a1f67_77a71f51","line":1910,"range":{"start_line":1910,"start_character":8,"end_line":1910,"end_character":16},"updated":"2017-07-14 20:16:54.000000000","message":":returns:","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"4a459658ead57162cc941a4986283a2b90aa4e5b","unresolved":false,"context_lines":[{"line_number":1906,"context_line":"        \"\"\"Given a volume identifier, find the corresponding device_id."},{"line_number":1907,"context_line":""},{"line_number":1908,"context_line":"        :param array: the array serial number"},{"line_number":1909,"context_line":"        :param volume_name: the volume name (OS-\u003cUUID\u003e)"},{"line_number":1910,"context_line":"        :returns: volume_list"},{"line_number":1911,"context_line":"        \"\"\""},{"line_number":1912,"context_line":"        volume_list \u003d None"}],"source_content_type":"text/x-python","patch_set":23,"id":"1f1a1f67_e8c4cd61","line":1909,"range":{"start_line":1909,"start_character":15,"end_line":1909,"end_character":26},"updated":"2017-07-20 13:36:48.000000000","message":"This should be \u0027storagegroup_name\u0027","commit_id":"b949ad3ce472b649e5b8589a4e02194823218513"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5489e4ca8ad1cea0acbae9872da85849e01d5ef4","unresolved":false,"context_lines":[{"line_number":1915,"context_line":"        volume_list \u003d self.get_volume_list(array, params)"},{"line_number":1916,"context_line":"        if not volume_list:"},{"line_number":1917,"context_line":"            LOG.debug(\"Cannot find record for storage group %(storageGrpId)s\","},{"line_number":1918,"context_line":"                      {\u0027volumeId\u0027: storagegroup_name})"},{"line_number":1919,"context_line":"        return volume_list"},{"line_number":1920,"context_line":""},{"line_number":1921,"context_line":"    def create_storagegroup_snap(self, array, source_group,"}],"source_content_type":"text/x-python","patch_set":23,"id":"1f1a1f67_e11f4db5","line":1918,"range":{"start_line":1918,"start_character":24,"end_line":1918,"end_character":33},"updated":"2017-07-20 13:03:43.000000000","message":"This is wrong.  It should be \u0027storageGrpId\u0027 to match the variable name in the message.","commit_id":"b949ad3ce472b649e5b8589a4e02194823218513"}],"cinder/volume/drivers/dell_emc/vmax/utils.py":[{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"e02497c881d5d449ef7ffdec351e1ed56aca6ffe","unresolved":false,"context_lines":[{"line_number":573,"context_line":"                      \" the provided extra_specs.\")"},{"line_number":574,"context_line":"        return extraSpecs"},{"line_number":575,"context_line":""},{"line_number":576,"context_line":"    def get_default_intervals_retries(self):"},{"line_number":577,"context_line":"        \"\"\"Get the default intervals and retries."},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"        :return: default_dict"},{"line_number":580,"context_line":"        \"\"\""},{"line_number":581,"context_line":"        default_dict \u003d {}"},{"line_number":582,"context_line":"        default_dict[INTERVAL] \u003d INTERVAL_10_SEC"},{"line_number":583,"context_line":"        default_dict[RETRIES] \u003d JOB_RETRIES"},{"line_number":584,"context_line":"        return default_dict"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_cb630bdc","line":584,"range":{"start_line":576,"start_character":3,"end_line":584,"end_character":27},"updated":"2017-06-22 16:08:55.000000000","message":"Why are these defaulting to constants set here instead of what is either user set in the cinder.conf or default in common.py? common.interval and common.retries are set on driver initialization (they do not require calling the initial_setup steps to get the extra_specs as they did before). I don\u0027t think they should be set to something different here.","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"2e2fa1fc7a42c591211a267abaeee704daf0ac58","unresolved":false,"context_lines":[{"line_number":573,"context_line":"                      \" the provided extra_specs.\")"},{"line_number":574,"context_line":"        return extraSpecs"},{"line_number":575,"context_line":""},{"line_number":576,"context_line":"    def get_default_intervals_retries(self):"},{"line_number":577,"context_line":"        \"\"\"Get the default intervals and retries."},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"        :return: default_dict"},{"line_number":580,"context_line":"        \"\"\""},{"line_number":581,"context_line":"        default_dict \u003d {}"},{"line_number":582,"context_line":"        default_dict[INTERVAL] \u003d INTERVAL_10_SEC"},{"line_number":583,"context_line":"        default_dict[RETRIES] \u003d JOB_RETRIES"},{"line_number":584,"context_line":"        return default_dict"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_565df212","line":584,"range":{"start_line":576,"start_character":3,"end_line":584,"end_character":27},"in_reply_to":"5f201791_cb630bdc","updated":"2017-06-27 12:49:03.000000000","message":"TO DO","commit_id":"77f0ed68c606d2f2e4c325651288e6117573264e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d58c6ae42ead16f73f4880065abf8cbfd521088","unresolved":false,"context_lines":[{"line_number":666,"context_line":"                  {\u0027retries\u0027: retries})"},{"line_number":667,"context_line":"        return extra_specs"},{"line_number":668,"context_line":""},{"line_number":669,"context_line":"    @staticmethod"},{"line_number":670,"context_line":"    def check_consistent_snapshot_enabled(group_type_id):"},{"line_number":671,"context_line":"        \"\"\"Checks if the consistent snapshot flag is enabled"},{"line_number":672,"context_line":""},{"line_number":673,"context_line":"        :param group_type_id: Group type ID"},{"line_number":674,"context_line":"        :return: bool: True if enabled else False"},{"line_number":675,"context_line":"        \"\"\""},{"line_number":676,"context_line":"        # Get the group specs"},{"line_number":677,"context_line":"        grp_specs \u003d group_types.get_group_type_specs(group_type_id)"},{"line_number":678,"context_line":"        if grp_specs.get(\u0027consistent_group_snapshot_enabled\u0027) \u003d\u003d \u0027\u003cis\u003e True\u0027:"},{"line_number":679,"context_line":"            return True"},{"line_number":680,"context_line":"        else:"},{"line_number":681,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f1d235d_6bff5067","line":681,"range":{"start_line":669,"start_character":1,"end_line":681,"end_character":24},"updated":"2017-07-11 13:21:32.000000000","message":"This util function is not necessary.  Please follow other drivers and use the existing function in cinder/volume/utils.py.","commit_id":"97196c8abaccaae41111ab800c50d5faf4912dd4"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"200382139fc8f589fd69ddf69f89456e98ae1936","unresolved":false,"context_lines":[{"line_number":666,"context_line":"                  {\u0027retries\u0027: retries})"},{"line_number":667,"context_line":"        return extra_specs"},{"line_number":668,"context_line":""},{"line_number":669,"context_line":"    @staticmethod"},{"line_number":670,"context_line":"    def check_consistent_snapshot_enabled(group_type_id):"},{"line_number":671,"context_line":"        \"\"\"Checks if the consistent snapshot flag is enabled"},{"line_number":672,"context_line":""},{"line_number":673,"context_line":"        :param group_type_id: Group type ID"},{"line_number":674,"context_line":"        :return: bool: True if enabled else False"},{"line_number":675,"context_line":"        \"\"\""},{"line_number":676,"context_line":"        # Get the group specs"},{"line_number":677,"context_line":"        grp_specs \u003d group_types.get_group_type_specs(group_type_id)"},{"line_number":678,"context_line":"        if grp_specs.get(\u0027consistent_group_snapshot_enabled\u0027) \u003d\u003d \u0027\u003cis\u003e True\u0027:"},{"line_number":679,"context_line":"            return True"},{"line_number":680,"context_line":"        else:"},{"line_number":681,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f1d235d_3f24eeae","line":681,"range":{"start_line":669,"start_character":1,"end_line":681,"end_character":24},"in_reply_to":"3f1d235d_6bff5067","updated":"2017-07-11 14:41:12.000000000","message":"ok. Thanks","commit_id":"97196c8abaccaae41111ab800c50d5faf4912dd4"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":534,"context_line":"        \"\"\"Update extra specs."},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"        :param extraspecs: the additional info"},{"line_number":537,"context_line":"        :return: extraspecs"},{"line_number":538,"context_line":"        \"\"\""},{"line_number":539,"context_line":"        try:"},{"line_number":540,"context_line":"            pool_details \u003d extraspecs[\u0027pool_name\u0027].split(\u0027+\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f1a1f67_9722bbff","line":537,"range":{"start_line":537,"start_character":8,"end_line":537,"end_character":16},"updated":"2017-07-14 20:16:54.000000000","message":":returns:","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":553,"context_line":""},{"line_number":554,"context_line":"        :param interval: Interval in seconds between retries"},{"line_number":555,"context_line":"        :param retries: Retry count"},{"line_number":556,"context_line":"        :return: default_dict"},{"line_number":557,"context_line":"        \"\"\""},{"line_number":558,"context_line":"        default_dict \u003d {}"},{"line_number":559,"context_line":"        default_dict[INTERVAL] \u003d interval"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f1a1f67_f7868fdb","line":556,"range":{"start_line":556,"start_character":8,"end_line":556,"end_character":16},"updated":"2017-07-14 20:16:54.000000000","message":":returns:","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":562,"context_line":""},{"line_number":563,"context_line":"    @staticmethod"},{"line_number":564,"context_line":"    def update_admin_metadata(volumes_model_update, key, values):"},{"line_number":565,"context_line":"        \"\"\"Update the volume_model_updates with admin metadata"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"        :param volumes_model_update: List of volume model updates"},{"line_number":568,"context_line":"        :param key: Key to be updated in the admin_metadata"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f1a1f67_57630343","line":565,"updated":"2017-07-14 20:16:54.000000000","message":"Missing ending period.","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":577,"context_line":"                    {\u0027admin_metadata\u0027: admin_metadata})"},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"    def get_volume_group_utils(self, group, interval, retries):"},{"line_number":580,"context_line":"        \"\"\"Standard utility for generic volume groups"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"        :param group: the generic volume group object to be created"},{"line_number":583,"context_line":"        :param interval: Interval in seconds between retries"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f1a1f67_f75faf6f","line":580,"updated":"2017-07-14 20:16:54.000000000","message":"period","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":582,"context_line":"        :param group: the generic volume group object to be created"},{"line_number":583,"context_line":"        :param interval: Interval in seconds between retries"},{"line_number":584,"context_line":"        :param retries: Retry count"},{"line_number":585,"context_line":"        :return: array, extra specs dict list"},{"line_number":586,"context_line":"        :raises VolumeBackendAPIException"},{"line_number":587,"context_line":"        \"\"\""},{"line_number":588,"context_line":"        arrays \u003d set()"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f1a1f67_37cbe71e","line":585,"range":{"start_line":585,"start_character":8,"end_line":585,"end_character":16},"updated":"2017-07-14 20:16:54.000000000","message":":returns:","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":583,"context_line":"        :param interval: Interval in seconds between retries"},{"line_number":584,"context_line":"        :param retries: Retry count"},{"line_number":585,"context_line":"        :return: array, extra specs dict list"},{"line_number":586,"context_line":"        :raises VolumeBackendAPIException"},{"line_number":587,"context_line":"        \"\"\""},{"line_number":588,"context_line":"        arrays \u003d set()"},{"line_number":589,"context_line":"        extraspecs_dict_list \u003d []"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f1a1f67_97e51bab","line":586,"range":{"start_line":586,"start_character":8,"end_line":586,"end_character":15},"updated":"2017-07-14 20:16:54.000000000","message":":raises:","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":603,"context_line":""},{"line_number":604,"context_line":"        if len(arrays) !\u003d 1:"},{"line_number":605,"context_line":"            if not arrays:"},{"line_number":606,"context_line":"                msg \u003d (_(\"Failed to get a array associated with \""},{"line_number":607,"context_line":"                         \"volume group: %(groupid)s.\")"},{"line_number":608,"context_line":"                       % {\u0027groupid\u0027: group.id})"},{"line_number":609,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f1a1f67_579663f2","line":606,"range":{"start_line":606,"start_character":40,"end_line":606,"end_character":41},"updated":"2017-07-14 20:16:54.000000000","message":"an","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":617,"context_line":""},{"line_number":618,"context_line":"    def _update_extra_specs_list(self, extraspecs, volumetype_id,"},{"line_number":619,"context_line":"                                 interval, retries):"},{"line_number":620,"context_line":"        \"\"\"Update the extra specs list"},{"line_number":621,"context_line":""},{"line_number":622,"context_line":"        :param extraspecs: extraspecs"},{"line_number":623,"context_line":"        :param volumetype_Id: volume type identifier"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f1a1f67_f7a20f4b","line":620,"updated":"2017-07-14 20:16:54.000000000","message":"period","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":623,"context_line":"        :param volumetype_Id: volume type identifier"},{"line_number":624,"context_line":"        :param interval: Interval in seconds between retries"},{"line_number":625,"context_line":"        :param retries: Retry count"},{"line_number":626,"context_line":"        :return: extraspecs_dict_list"},{"line_number":627,"context_line":"        \"\"\""},{"line_number":628,"context_line":"        extraspecs_dict \u003d {}"},{"line_number":629,"context_line":"        extraspecs \u003d self.update_extra_specs(extraspecs)"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f1a1f67_b78497b2","line":626,"range":{"start_line":626,"start_character":8,"end_line":626,"end_character":16},"updated":"2017-07-14 20:16:54.000000000","message":":returns:","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":634,"context_line":"        return extraspecs_dict"},{"line_number":635,"context_line":""},{"line_number":636,"context_line":"    def update_volume_group_name(self, group):"},{"line_number":637,"context_line":"        \"\"\"Format id and name consistency group"},{"line_number":638,"context_line":""},{"line_number":639,"context_line":"        :param group: the generic volume group object"},{"line_number":640,"context_line":"        :return: group_name -- formatted name + id"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f1a1f67_9793dbfa","line":637,"updated":"2017-07-14 20:16:54.000000000","message":"period","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":637,"context_line":"        \"\"\"Format id and name consistency group"},{"line_number":638,"context_line":""},{"line_number":639,"context_line":"        :param group: the generic volume group object"},{"line_number":640,"context_line":"        :return: group_name -- formatted name + id"},{"line_number":641,"context_line":"        \"\"\""},{"line_number":642,"context_line":"        group_name \u003d \"\""},{"line_number":643,"context_line":"        if group.name is not None:"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f1a1f67_57bf8360","line":640,"range":{"start_line":640,"start_character":8,"end_line":640,"end_character":16},"updated":"2017-07-14 20:16:54.000000000","message":":returns:","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":650,"context_line":""},{"line_number":651,"context_line":"    @staticmethod"},{"line_number":652,"context_line":"    def _update_intervals_and_retries(extra_specs, interval, retries):"},{"line_number":653,"context_line":"        \"\"\"Updates the extraSpecs with intervals and retries values"},{"line_number":654,"context_line":""},{"line_number":655,"context_line":"        :param extra_specs:"},{"line_number":656,"context_line":"        :param interval: Interval in seconds between retries"}],"source_content_type":"text/x-python","patch_set":20,"id":"1f1a1f67_17b90b79","line":653,"updated":"2017-07-14 20:16:54.000000000","message":"period","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":655,"context_line":"        :param extra_specs:"},{"line_number":656,"context_line":"        :param interval: Interval in seconds between retries"},{"line_number":657,"context_line":"        :param retries: Retry count"},{"line_number":658,"context_line":"        :return: Updated extra_specs"},{"line_number":659,"context_line":"        \"\"\""},{"line_number":660,"context_line":"        extra_specs[INTERVAL] \u003d interval"},{"line_number":661,"context_line":"        LOG.debug(\"The interval is set at: %(intervalInSecs)s.\","}],"source_content_type":"text/x-python","patch_set":20,"id":"1f1a1f67_f7bb2f6f","line":658,"range":{"start_line":658,"start_character":8,"end_line":658,"end_character":16},"updated":"2017-07-14 20:16:54.000000000","message":":returns:","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"4a459658ead57162cc941a4986283a2b90aa4e5b","unresolved":false,"context_lines":[{"line_number":44,"context_line":"ARRAY \u003d \u0027array\u0027"},{"line_number":45,"context_line":"SLO \u003d \u0027slo\u0027"},{"line_number":46,"context_line":"WORKLOAD \u003d \u0027workload\u0027"},{"line_number":47,"context_line":"POOL \u003d \u0027pool\u0027"},{"line_number":48,"context_line":"SRP \u003d \u0027srp\u0027"},{"line_number":49,"context_line":"PORTGROUPNAME \u003d \u0027port_group_name\u0027"},{"line_number":50,"context_line":"DEVICE_ID \u003d \u0027device_id\u0027"}],"source_content_type":"text/x-python","patch_set":23,"id":"1f1a1f67_88e559df","line":47,"range":{"start_line":47,"start_character":0,"end_line":47,"end_character":13},"updated":"2017-07-20 13:36:48.000000000","message":"This should be removed - see comment below on line 543.","commit_id":"b949ad3ce472b649e5b8589a4e02194823218513"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"4a459658ead57162cc941a4986283a2b90aa4e5b","unresolved":false,"context_lines":[{"line_number":58,"context_line":"EXTRA_SPECS \u003d \u0027extra_specs\u0027"},{"line_number":59,"context_line":"IS_RE \u003d \u0027replication_enabled\u0027"},{"line_number":60,"context_line":"DISABLECOMPRESSION \u003d \u0027storagetype:disablecompression\u0027"},{"line_number":61,"context_line":"INTERVAL_10_SEC \u003d 10"},{"line_number":62,"context_line":"JOB_RETRIES \u003d 60"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"class VMAXUtils(object):"}],"source_content_type":"text/x-python","patch_set":23,"id":"1f1a1f67_c8b6b1dd","line":62,"range":{"start_line":61,"start_character":0,"end_line":62,"end_character":16},"updated":"2017-07-20 13:36:48.000000000","message":"These are not being used.","commit_id":"b949ad3ce472b649e5b8589a4e02194823218513"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"4a459658ead57162cc941a4986283a2b90aa4e5b","unresolved":false,"context_lines":[{"line_number":540,"context_line":"            pool_details \u003d extraspecs[\u0027pool_name\u0027].split(\u0027+\u0027)"},{"line_number":541,"context_line":"            extraspecs[SLO] \u003d pool_details[0]"},{"line_number":542,"context_line":"            extraspecs[WORKLOAD] \u003d pool_details[1]"},{"line_number":543,"context_line":"            extraspecs[POOL] \u003d pool_details[2]"},{"line_number":544,"context_line":"            extraspecs[ARRAY] \u003d pool_details[3]"},{"line_number":545,"context_line":"        except KeyError:"},{"line_number":546,"context_line":"            LOG.error(\"Error parsing SLO, workload from\""}],"source_content_type":"text/x-python","patch_set":23,"id":"1f1a1f67_486bc11e","line":543,"range":{"start_line":543,"start_character":23,"end_line":543,"end_character":27},"updated":"2017-07-20 13:36:48.000000000","message":"This should be \u0027SRP\u0027 - POOL has been replaced with SRP to distinguish between VMAX pools and cinder pools.","commit_id":"b949ad3ce472b649e5b8589a4e02194823218513"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5489e4ca8ad1cea0acbae9872da85849e01d5ef4","unresolved":false,"context_lines":[{"line_number":645,"context_line":"                self.truncate_string("},{"line_number":646,"context_line":"                    group.name, TRUNCATE_27) + \"_\")"},{"line_number":647,"context_line":""},{"line_number":648,"context_line":"        group_name +\u003d six.text_type(group.id)"},{"line_number":649,"context_line":"        return group_name"},{"line_number":650,"context_line":""},{"line_number":651,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":23,"id":"1f1a1f67_c5821c53","line":648,"range":{"start_line":648,"start_character":22,"end_line":648,"end_character":35},"updated":"2017-07-20 13:03:43.000000000","message":"group.id is a string already.  Remove six.text_type.","commit_id":"b949ad3ce472b649e5b8589a4e02194823218513"}],"releasenotes/notes/vmax-generic-volume-group-28b3b2674c492bbc.yaml":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c0bdc203b6ea74b61d7c6965d5dddb3b98e04933","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adding Generic Volume group support to VMAX driver version 3.0."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"3f1d235d_0e047549","line":4,"updated":"2017-07-02 14:20:35.000000000","message":"Add consistent group snapshot support to generic volume groups in VMAX driver version 3.0.","commit_id":"8f1140f8a6b1d95f7fb5883272a0961e65f18b14"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f1e6c859cd766458e73290f1c183c8c075b93687","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add Consistent group snapshot support to generic volume groups in"},{"line_number":5,"context_line":"    VMAX driver version 3.0."}],"source_content_type":"text/x-yaml","patch_set":20,"id":"1f1a1f67_d23f2123","line":4,"range":{"start_line":4,"start_character":8,"end_line":4,"end_character":9},"updated":"2017-07-14 20:16:54.000000000","message":"Use lower case \"c\" to be consistent with the rest of the sentence.","commit_id":"41e2665286882d918d11c7604c775c2b19adc0f2"}]}
