)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7c97565d8526e2ffd976e1cac0333470f8634e40","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Helen Walsh \u003chelen.walsh@emc.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-12-23 12:12:49 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"VMAX driver - Generic Volume Group feature"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"generic-volume-groups facilitates storing volumes in groups,"},{"line_number":10,"context_line":"like for the purpose of managing all volumes associated with"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"da4df55a_aee897b5","line":7,"updated":"2016-12-23 20:39:49.000000000","message":"Add CG capability to Groups in VMAX driver","commit_id":"a457483f31cd32d123a1b35371b6bc83927e874a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"887fe549b7f5ce7b5c1aa69f6fa5147182f930b3","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Helen Walsh \u003chelen.walsh@emc.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-01-09 15:33:15 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"VMAX driver - Generic Volume Group feature"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"generic-volume-groups facilitates storing volumes in groups,"},{"line_number":10,"context_line":"like for the purpose of managing all volumes associated with"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"7a3c09a3_85f1d103","line":7,"range":{"start_line":7,"start_character":14,"end_line":7,"end_character":42},"updated":"2017-01-16 22:06:33.000000000","message":"Add CG capability to groups","commit_id":"5d7d8e122610be1e4b111d17aa79a1e94c0a07db"}],"cinder/tests/unit/volume/drivers/emc/test_emc_vmax.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bff7ba26acfa7bfd80ceaeeb9c44daa19a3d004b","unresolved":false,"context_lines":[{"line_number":6614,"context_line":"            self, _mock_volume_type, _mock_storage, _mock_volGrp,"},{"line_number":6615,"context_line":"            _mock_members, mock_rg):"},{"line_number":6616,"context_line":"        provisionv3 \u003d self.driver.common.provisionv3"},{"line_number":6617,"context_line":"        provisionv3.create_group_replica \u003d mock.Mock(return_value\u003d(0, None))"},{"line_number":6618,"context_line":"        self.driver.create_group_snapshot("},{"line_number":6619,"context_line":"            self.data.test_ctxt, self.data.test_volGrp_snapshot, [])"},{"line_number":6620,"context_line":"        repServ \u003d self.conn.EnumerateInstanceNames(\"EMC_ReplicationService\")[0]"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_7c0085ab","line":6617,"range":{"start_line":6617,"start_character":8,"end_line":6617,"end_character":76},"updated":"2017-01-19 04:13:00.000000000","message":"Please use @mock.patch.object","commit_id":"ec82e92085c7d66b39ee5bfbd65877a047574b46"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"330269aab45fb76180bf5b1817f6f8f90b28b24d","unresolved":false,"context_lines":[{"line_number":6614,"context_line":"            self, _mock_volume_type, _mock_storage, _mock_volGrp,"},{"line_number":6615,"context_line":"            _mock_members, mock_rg):"},{"line_number":6616,"context_line":"        provisionv3 \u003d self.driver.common.provisionv3"},{"line_number":6617,"context_line":"        provisionv3.create_group_replica \u003d mock.Mock(return_value\u003d(0, None))"},{"line_number":6618,"context_line":"        self.driver.create_group_snapshot("},{"line_number":6619,"context_line":"            self.data.test_ctxt, self.data.test_volGrp_snapshot, [])"},{"line_number":6620,"context_line":"        repServ \u003d self.conn.EnumerateInstanceNames(\"EMC_ReplicationService\")[0]"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_f1aac418","line":6617,"range":{"start_line":6617,"start_character":8,"end_line":6617,"end_character":76},"in_reply_to":"5a3905b3_7c0085ab","updated":"2017-01-19 14:35:09.000000000","message":"Sure","commit_id":"ec82e92085c7d66b39ee5bfbd65877a047574b46"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bff7ba26acfa7bfd80ceaeeb9c44daa19a3d004b","unresolved":false,"context_lines":[{"line_number":6701,"context_line":"            self.data.test_ctxt, self.data.test_volGrp,"},{"line_number":6702,"context_line":"            add_volumes, remove_volumes)"},{"line_number":6703,"context_line":"        # Can\u0027t find volume group"},{"line_number":6704,"context_line":"        self.driver.common._find_consistency_group \u003d mock.Mock("},{"line_number":6705,"context_line":"            return_value\u003d(None, None))"},{"line_number":6706,"context_line":"        self.assertRaises(exception.GroupNotFound,"},{"line_number":6707,"context_line":"                          self.driver.update_group,"},{"line_number":6708,"context_line":"                          self.data.test_ctxt, self.data.test_volGrp,"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_3c1d1d10","line":6705,"range":{"start_line":6704,"start_character":1,"end_line":6705,"end_character":38},"updated":"2017-01-19 04:13:00.000000000","message":"Use mock.patch.object","commit_id":"ec82e92085c7d66b39ee5bfbd65877a047574b46"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"330269aab45fb76180bf5b1817f6f8f90b28b24d","unresolved":false,"context_lines":[{"line_number":6701,"context_line":"            self.data.test_ctxt, self.data.test_volGrp,"},{"line_number":6702,"context_line":"            add_volumes, remove_volumes)"},{"line_number":6703,"context_line":"        # Can\u0027t find volume group"},{"line_number":6704,"context_line":"        self.driver.common._find_consistency_group \u003d mock.Mock("},{"line_number":6705,"context_line":"            return_value\u003d(None, None))"},{"line_number":6706,"context_line":"        self.assertRaises(exception.GroupNotFound,"},{"line_number":6707,"context_line":"                          self.driver.update_group,"},{"line_number":6708,"context_line":"                          self.data.test_ctxt, self.data.test_volGrp,"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_11a8301f","line":6705,"range":{"start_line":6704,"start_character":1,"end_line":6705,"end_character":38},"in_reply_to":"5a3905b3_3c1d1d10","updated":"2017-01-19 14:35:09.000000000","message":"Sure","commit_id":"ec82e92085c7d66b39ee5bfbd65877a047574b46"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bff7ba26acfa7bfd80ceaeeb9c44daa19a3d004b","unresolved":false,"context_lines":[{"line_number":7395,"context_line":"            self, mock_storage_system, mock_is, mock_sg):"},{"line_number":7396,"context_line":"        self.data.test_volume_volGrp_v3[\u0027provider_location\u0027] \u003d None"},{"line_number":7397,"context_line":"        model_update \u003d self.driver.create_volume("},{"line_number":7398,"context_line":"            (self.data.test_volume_v3_volGrp))"},{"line_number":7399,"context_line":"        # Verify if the device id is provided in the output"},{"line_number":7400,"context_line":"        provider_location \u003d model_update[\u0027provider_location\u0027]"},{"line_number":7401,"context_line":"        provider_location \u003d ast.literal_eval(provider_location)"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_bcbe6dd2","line":7398,"range":{"start_line":7398,"start_character":12,"end_line":7398,"end_character":45},"updated":"2017-01-19 04:13:00.000000000","message":"This inner () is not necessary.","commit_id":"ec82e92085c7d66b39ee5bfbd65877a047574b46"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"330269aab45fb76180bf5b1817f6f8f90b28b24d","unresolved":false,"context_lines":[{"line_number":7395,"context_line":"            self, mock_storage_system, mock_is, mock_sg):"},{"line_number":7396,"context_line":"        self.data.test_volume_volGrp_v3[\u0027provider_location\u0027] \u003d None"},{"line_number":7397,"context_line":"        model_update \u003d self.driver.create_volume("},{"line_number":7398,"context_line":"            (self.data.test_volume_v3_volGrp))"},{"line_number":7399,"context_line":"        # Verify if the device id is provided in the output"},{"line_number":7400,"context_line":"        provider_location \u003d model_update[\u0027provider_location\u0027]"},{"line_number":7401,"context_line":"        provider_location \u003d ast.literal_eval(provider_location)"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_917260e4","line":7398,"range":{"start_line":7398,"start_character":12,"end_line":7398,"end_character":45},"in_reply_to":"5a3905b3_bcbe6dd2","updated":"2017-01-19 14:35:09.000000000","message":"Sure","commit_id":"ec82e92085c7d66b39ee5bfbd65877a047574b46"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bff7ba26acfa7bfd80ceaeeb9c44daa19a3d004b","unresolved":false,"context_lines":[{"line_number":7544,"context_line":"        ret_model_update, ret_volumes_model_update \u003d ("},{"line_number":7545,"context_line":"            self.driver.delete_group(self.data.test_ctxt,"},{"line_number":7546,"context_line":"                                     self.data.test_volGrp, []))"},{"line_number":7547,"context_line":"        self.assertEqual(ret_model_update, model_update)"},{"line_number":7548,"context_line":""},{"line_number":7549,"context_line":"    @mock.patch.object("},{"line_number":7550,"context_line":"        emc_vmax_common.EMCVMAXCommon,"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_3ccb5d74","line":7547,"range":{"start_line":7547,"start_character":25,"end_line":7547,"end_character":56},"updated":"2017-01-19 04:13:00.000000000","message":"Reversed","commit_id":"ec82e92085c7d66b39ee5bfbd65877a047574b46"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"330269aab45fb76180bf5b1817f6f8f90b28b24d","unresolved":false,"context_lines":[{"line_number":7544,"context_line":"        ret_model_update, ret_volumes_model_update \u003d ("},{"line_number":7545,"context_line":"            self.driver.delete_group(self.data.test_ctxt,"},{"line_number":7546,"context_line":"                                     self.data.test_volGrp, []))"},{"line_number":7547,"context_line":"        self.assertEqual(ret_model_update, model_update)"},{"line_number":7548,"context_line":""},{"line_number":7549,"context_line":"    @mock.patch.object("},{"line_number":7550,"context_line":"        emc_vmax_common.EMCVMAXCommon,"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_514f1892","line":7547,"range":{"start_line":7547,"start_character":25,"end_line":7547,"end_character":56},"in_reply_to":"5a3905b3_3ccb5d74","updated":"2017-01-19 14:35:09.000000000","message":"Sure","commit_id":"ec82e92085c7d66b39ee5bfbd65877a047574b46"}],"cinder/volume/drivers/emc/emc_vmax_common.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3ddb94a20020af98c89c27b5362a5adaae940795","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        # If volume is created as part of a consistency group."},{"line_number":268,"context_line":"        grp_id \u003d None"},{"line_number":269,"context_line":"        if \u0027consistencygroup_id\u0027 in volume and volume[\u0027consistencygroup_id\u0027]:"},{"line_number":270,"context_line":"            grp_id \u003d str(volume[\u0027consistencygroup_id\u0027])"},{"line_number":271,"context_line":"        elif \u0027group_id\u0027 in volume and volume[\u0027group_id\u0027]:"},{"line_number":272,"context_line":"            grp_id \u003d str(volume[\u0027group_id\u0027])"},{"line_number":273,"context_line":"        if grp_id:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_5217f853","line":270,"updated":"2016-12-08 04:22:10.000000000","message":"str -\u003e six.text_type","commit_id":"86fcbd34eba2e9e1ef1cf6eab9fbfe5afac86df6"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"cd341ef454ed48c78411e9cefdec250653b5ac0f","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        # If volume is created as part of a consistency group."},{"line_number":268,"context_line":"        grp_id \u003d None"},{"line_number":269,"context_line":"        if \u0027consistencygroup_id\u0027 in volume and volume[\u0027consistencygroup_id\u0027]:"},{"line_number":270,"context_line":"            grp_id \u003d str(volume[\u0027consistencygroup_id\u0027])"},{"line_number":271,"context_line":"        elif \u0027group_id\u0027 in volume and volume[\u0027group_id\u0027]:"},{"line_number":272,"context_line":"            grp_id \u003d str(volume[\u0027group_id\u0027])"},{"line_number":273,"context_line":"        if grp_id:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_deb867e8","line":270,"in_reply_to":"3a71b18c_5217f853","updated":"2016-12-08 10:47:59.000000000","message":"Sure, we will change","commit_id":"86fcbd34eba2e9e1ef1cf6eab9fbfe5afac86df6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3ddb94a20020af98c89c27b5362a5adaae940795","unresolved":false,"context_lines":[{"line_number":269,"context_line":"        if \u0027consistencygroup_id\u0027 in volume and volume[\u0027consistencygroup_id\u0027]:"},{"line_number":270,"context_line":"            grp_id \u003d str(volume[\u0027consistencygroup_id\u0027])"},{"line_number":271,"context_line":"        elif \u0027group_id\u0027 in volume and volume[\u0027group_id\u0027]:"},{"line_number":272,"context_line":"            grp_id \u003d str(volume[\u0027group_id\u0027])"},{"line_number":273,"context_line":"        if grp_id:"},{"line_number":274,"context_line":"            volumeInstance \u003d self.utils.find_volume_instance("},{"line_number":275,"context_line":"                self.conn, volumeDict, volumeName)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_721cf477","line":272,"updated":"2016-12-08 04:22:10.000000000","message":"str -\u003e six.text_type","commit_id":"86fcbd34eba2e9e1ef1cf6eab9fbfe5afac86df6"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"cd341ef454ed48c78411e9cefdec250653b5ac0f","unresolved":false,"context_lines":[{"line_number":269,"context_line":"        if \u0027consistencygroup_id\u0027 in volume and volume[\u0027consistencygroup_id\u0027]:"},{"line_number":270,"context_line":"            grp_id \u003d str(volume[\u0027consistencygroup_id\u0027])"},{"line_number":271,"context_line":"        elif \u0027group_id\u0027 in volume and volume[\u0027group_id\u0027]:"},{"line_number":272,"context_line":"            grp_id \u003d str(volume[\u0027group_id\u0027])"},{"line_number":273,"context_line":"        if grp_id:"},{"line_number":274,"context_line":"            volumeInstance \u003d self.utils.find_volume_instance("},{"line_number":275,"context_line":"                self.conn, volumeDict, volumeName)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_5ec53759","line":272,"in_reply_to":"3a71b18c_721cf477","updated":"2016-12-08 10:47:59.000000000","message":"ok","commit_id":"86fcbd34eba2e9e1ef1cf6eab9fbfe5afac86df6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3ddb94a20020af98c89c27b5362a5adaae940795","unresolved":false,"context_lines":[{"line_number":270,"context_line":"            grp_id \u003d str(volume[\u0027consistencygroup_id\u0027])"},{"line_number":271,"context_line":"        elif \u0027group_id\u0027 in volume and volume[\u0027group_id\u0027]:"},{"line_number":272,"context_line":"            grp_id \u003d str(volume[\u0027group_id\u0027])"},{"line_number":273,"context_line":"        if grp_id:"},{"line_number":274,"context_line":"            volumeInstance \u003d self.utils.find_volume_instance("},{"line_number":275,"context_line":"                self.conn, volumeDict, volumeName)"},{"line_number":276,"context_line":"            replicationService \u003d ("}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_8da41509","line":273,"updated":"2016-12-08 04:22:10.000000000","message":"We should check volume_type and see if consistent_group_snapshot_enabled is set in extra_specs.  Handle it as consistency group if it is set, else it should be treated as a regular group.","commit_id":"86fcbd34eba2e9e1ef1cf6eab9fbfe5afac86df6"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"cd341ef454ed48c78411e9cefdec250653b5ac0f","unresolved":false,"context_lines":[{"line_number":270,"context_line":"            grp_id \u003d str(volume[\u0027consistencygroup_id\u0027])"},{"line_number":271,"context_line":"        elif \u0027group_id\u0027 in volume and volume[\u0027group_id\u0027]:"},{"line_number":272,"context_line":"            grp_id \u003d str(volume[\u0027group_id\u0027])"},{"line_number":273,"context_line":"        if grp_id:"},{"line_number":274,"context_line":"            volumeInstance \u003d self.utils.find_volume_instance("},{"line_number":275,"context_line":"                self.conn, volumeDict, volumeName)"},{"line_number":276,"context_line":"            replicationService \u003d ("}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_deaf8792","line":273,"in_reply_to":"3a71b18c_8da41509","updated":"2016-12-08 10:47:59.000000000","message":"Sure","commit_id":"86fcbd34eba2e9e1ef1cf6eab9fbfe5afac86df6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3ddb94a20020af98c89c27b5362a5adaae940795","unresolved":false,"context_lines":[{"line_number":2662,"context_line":"                 {\u0027group\u0027: group[\u0027id\u0027]})"},{"line_number":2663,"context_line":""},{"line_number":2664,"context_line":"        modelUpdate \u003d {\u0027status\u0027: fields.GroupStatus.AVAILABLE}"},{"line_number":2665,"context_line":"        volGrpName \u003d self._update_consistency_group_name(group)"},{"line_number":2666,"context_line":""},{"line_number":2667,"context_line":"        self.conn \u003d self._get_ecom_connection()"},{"line_number":2668,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_d276a8d7","line":2665,"updated":"2016-12-08 04:22:10.000000000","message":"Are you only supporting consistent group snapshot case?  Driver should check group_type and see if {\"consistent_group_snapshot_enabled\": \"\u003cis\u003e True\"} is in the group specs.  If it is there, it will be a consistency group, otherwise, it should just create a loose grouping of volumes.  See here:\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/manager.py#L3152\n\nIn the above example, it will just create an empty group in Cinder.  No special definition on the storage.  Later on when you create volume with this group_id, you can add to this group.","commit_id":"86fcbd34eba2e9e1ef1cf6eab9fbfe5afac86df6"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"cd341ef454ed48c78411e9cefdec250653b5ac0f","unresolved":false,"context_lines":[{"line_number":2662,"context_line":"                 {\u0027group\u0027: group[\u0027id\u0027]})"},{"line_number":2663,"context_line":""},{"line_number":2664,"context_line":"        modelUpdate \u003d {\u0027status\u0027: fields.GroupStatus.AVAILABLE}"},{"line_number":2665,"context_line":"        volGrpName \u003d self._update_consistency_group_name(group)"},{"line_number":2666,"context_line":""},{"line_number":2667,"context_line":"        self.conn \u003d self._get_ecom_connection()"},{"line_number":2668,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_fe944345","line":2665,"in_reply_to":"3a71b18c_d276a8d7","updated":"2016-12-08 10:47:59.000000000","message":"Thanks Xing, we will change based on your recommendations","commit_id":"86fcbd34eba2e9e1ef1cf6eab9fbfe5afac86df6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"69ba6b97f9bbbd4192e6a804452b98e18c7e3319","unresolved":false,"context_lines":[{"line_number":2662,"context_line":"                 {\u0027group\u0027: group[\u0027id\u0027]})"},{"line_number":2663,"context_line":""},{"line_number":2664,"context_line":"        modelUpdate \u003d {\u0027status\u0027: fields.GroupStatus.AVAILABLE}"},{"line_number":2665,"context_line":"        volGrpName \u003d self._update_consistency_group_name(group)"},{"line_number":2666,"context_line":""},{"line_number":2667,"context_line":"        self.conn \u003d self._get_ecom_connection()"},{"line_number":2668,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_d5c166e5","line":2665,"in_reply_to":"3a71b18c_fe944345","updated":"2016-12-16 22:50:39.000000000","message":"Alright.  It is okay to create consistency group snapshot by default regardless of group_specs.  In driver doc, please still document the need to set {\"consistent_group_snapshot_enabled\": \"\u003cis\u003e True\"} in group_specs and volume type extra specs.\n\nIn the future, when we have more group_specs, i.e., consistent_group_replication_enabled, you will need to check group_specs and make further decision.","commit_id":"86fcbd34eba2e9e1ef1cf6eab9fbfe5afac86df6"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"78f21bc81ef7a26eb4458cfcd56583004fd9bde1","unresolved":false,"context_lines":[{"line_number":2712,"context_line":"            if cgInstanceName is None:"},{"line_number":2713,"context_line":"                LOG.error(_LE(\"Cannot find generic \""},{"line_number":2714,"context_line":"                              \"volume group %(volGrpName)s.\"),"},{"line_number":2715,"context_line":"                          {\u0027volGrpName\u0027: str(group[\u0027id\u0027])})"},{"line_number":2716,"context_line":"                modelUpdate \u003d {\u0027status\u0027: fields.GroupStatus.DELETED}"},{"line_number":2717,"context_line":"                volumes_model_update \u003d self.utils.get_volume_model_updates("},{"line_number":2718,"context_line":"                    volumes, group.id,"}],"source_content_type":"text/x-python","patch_set":11,"id":"da4df55a_588f1a23","line":2715,"range":{"start_line":2715,"start_character":41,"end_line":2715,"end_character":44},"updated":"2016-12-22 23:10:46.000000000","message":"This is not needed as the formatting to %s will do a string conversion.","commit_id":"baae4251c1c6274ace5ead7b6661f6cba9d8e382"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"96c8b7e477b4a6db3b0e928f5442f199ca391e44","unresolved":false,"context_lines":[{"line_number":2712,"context_line":"            if cgInstanceName is None:"},{"line_number":2713,"context_line":"                LOG.error(_LE(\"Cannot find generic \""},{"line_number":2714,"context_line":"                              \"volume group %(volGrpName)s.\"),"},{"line_number":2715,"context_line":"                          {\u0027volGrpName\u0027: str(group[\u0027id\u0027])})"},{"line_number":2716,"context_line":"                modelUpdate \u003d {\u0027status\u0027: fields.GroupStatus.DELETED}"},{"line_number":2717,"context_line":"                volumes_model_update \u003d self.utils.get_volume_model_updates("},{"line_number":2718,"context_line":"                    volumes, group.id,"}],"source_content_type":"text/x-python","patch_set":11,"id":"da4df55a_669d0f59","line":2715,"range":{"start_line":2715,"start_character":41,"end_line":2715,"end_character":44},"in_reply_to":"da4df55a_588f1a23","updated":"2016-12-23 09:26:11.000000000","message":"I will.  Thank you","commit_id":"baae4251c1c6274ace5ead7b6661f6cba9d8e382"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"78f21bc81ef7a26eb4458cfcd56583004fd9bde1","unresolved":false,"context_lines":[{"line_number":2737,"context_line":"        except Exception:"},{"line_number":2738,"context_line":"            exceptionMessage \u003d (_("},{"line_number":2739,"context_line":"                \"Failed to delete generic volume group: %(volGrpName)s.\")"},{"line_number":2740,"context_line":"                % {\u0027volGrpName\u0027: str(group[\u0027id\u0027])})"},{"line_number":2741,"context_line":"            LOG.exception(exceptionMessage)"},{"line_number":2742,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dexceptionMessage)"},{"line_number":2743,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"da4df55a_b8ec86c8","line":2740,"range":{"start_line":2740,"start_character":33,"end_line":2740,"end_character":36},"updated":"2016-12-22 23:10:46.000000000","message":"Same.","commit_id":"baae4251c1c6274ace5ead7b6661f6cba9d8e382"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"78f21bc81ef7a26eb4458cfcd56583004fd9bde1","unresolved":false,"context_lines":[{"line_number":2912,"context_line":"                        group_snapshot[\u0027group_id\u0027])))"},{"line_number":2913,"context_line":"            if cgInstanceName is None:"},{"line_number":2914,"context_line":"                exception_message \u003d (_("},{"line_number":2915,"context_line":"                    \"Cannot find generic volume group %s.\") % str("},{"line_number":2916,"context_line":"                        group_snapshot[\u0027group_id\u0027]))"},{"line_number":2917,"context_line":"                raise exception.VolumeBackendAPIException("},{"line_number":2918,"context_line":"                    data\u003dexception_message)"}],"source_content_type":"text/x-python","patch_set":11,"id":"da4df55a_7865be43","line":2915,"range":{"start_line":2915,"start_character":62,"end_line":2915,"end_character":65},"updated":"2016-12-22 23:10:46.000000000","message":"Remove","commit_id":"baae4251c1c6274ace5ead7b6661f6cba9d8e382"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7c97565d8526e2ffd976e1cac0333470f8634e40","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        # If volume is created as part of a consistency group."},{"line_number":269,"context_line":"        grp_id \u003d None"},{"line_number":270,"context_line":"        if \u0027consistencygroup_id\u0027 in volume and volume[\u0027consistencygroup_id\u0027]:"},{"line_number":271,"context_line":"            grp_id \u003d str(volume[\u0027consistencygroup_id\u0027])"},{"line_number":272,"context_line":"        elif \u0027group_id\u0027 in volume and volume[\u0027group_id\u0027]:"},{"line_number":273,"context_line":"            grp_id \u003d str(volume[\u0027group_id\u0027])"},{"line_number":274,"context_line":"        if grp_id:"}],"source_content_type":"text/x-python","patch_set":13,"id":"da4df55a_8e62f3ab","line":271,"updated":"2016-12-23 20:39:49.000000000","message":"str()-\u003esix.text_type()","commit_id":"a457483f31cd32d123a1b35371b6bc83927e874a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7c97565d8526e2ffd976e1cac0333470f8634e40","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        if \u0027consistencygroup_id\u0027 in volume and volume[\u0027consistencygroup_id\u0027]:"},{"line_number":271,"context_line":"            grp_id \u003d str(volume[\u0027consistencygroup_id\u0027])"},{"line_number":272,"context_line":"        elif \u0027group_id\u0027 in volume and volume[\u0027group_id\u0027]:"},{"line_number":273,"context_line":"            grp_id \u003d str(volume[\u0027group_id\u0027])"},{"line_number":274,"context_line":"        if grp_id:"},{"line_number":275,"context_line":"            volumeInstance \u003d self.utils.find_volume_instance("},{"line_number":276,"context_line":"                self.conn, volumeDict, volumeName)"}],"source_content_type":"text/x-python","patch_set":13,"id":"da4df55a_ce5cfbef","line":273,"updated":"2016-12-23 20:39:49.000000000","message":"Same","commit_id":"a457483f31cd32d123a1b35371b6bc83927e874a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7c97565d8526e2ffd976e1cac0333470f8634e40","unresolved":false,"context_lines":[{"line_number":2926,"context_line":"                self.conn, replicationService, targetCgName, extraSpecs)"},{"line_number":2927,"context_line":"            targetCgInstanceName, targetCgName \u003d self._find_consistency_group("},{"line_number":2928,"context_line":"                replicationService, group_snapshot[\u0027id\u0027])"},{"line_number":2929,"context_line":"            LOG.info(_LI(\"Create target consistency group %(targetCg)s.\"),"},{"line_number":2930,"context_line":"                     {\u0027targetCg\u0027: targetCgInstanceName})"},{"line_number":2931,"context_line":""},{"line_number":2932,"context_line":"            for memberInstanceName in memberInstanceNames:"}],"source_content_type":"text/x-python","patch_set":13,"id":"da4df55a_4e000bab","line":2929,"updated":"2016-12-23 20:39:49.000000000","message":"Remove \"consistency\".","commit_id":"a457483f31cd32d123a1b35371b6bc83927e874a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7c97565d8526e2ffd976e1cac0333470f8634e40","unresolved":false,"context_lines":[{"line_number":3000,"context_line":"                                                         extraSpecs)"},{"line_number":3001,"context_line":""},{"line_number":3002,"context_line":"        except Exception:"},{"line_number":3003,"context_line":"            exceptionMessage \u003d (_(\"Failed to create snapshot for cg:\""},{"line_number":3004,"context_line":"                                  \" %(volGrpName)s.\")"},{"line_number":3005,"context_line":"                                % {\u0027volGrpName\u0027: group_snapshot[\u0027group_id\u0027]})"},{"line_number":3006,"context_line":"            LOG.exception(exceptionMessage)"}],"source_content_type":"text/x-python","patch_set":13,"id":"da4df55a_8e3033a0","line":3003,"updated":"2016-12-23 20:39:49.000000000","message":"s/cg/group","commit_id":"a457483f31cd32d123a1b35371b6bc83927e874a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7c97565d8526e2ffd976e1cac0333470f8634e40","unresolved":false,"context_lines":[{"line_number":3150,"context_line":"        return modelUpdate, snapshots_model_update"},{"line_number":3151,"context_line":""},{"line_number":3152,"context_line":"    def delete_group_snapshot(self, context, group_snapshot, snapshots):"},{"line_number":3153,"context_line":"        \"\"\"Delete a cgsnapshot."},{"line_number":3154,"context_line":""},{"line_number":3155,"context_line":"        :param context: the context"},{"line_number":3156,"context_line":"        :param group_snapshot: the volume group snapshot to be created"}],"source_content_type":"text/x-python","patch_set":13,"id":"da4df55a_2e1ca711","line":3153,"updated":"2016-12-23 20:39:49.000000000","message":"s/cgsnapshot/group snapshot","commit_id":"a457483f31cd32d123a1b35371b6bc83927e874a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7c97565d8526e2ffd976e1cac0333470f8634e40","unresolved":false,"context_lines":[{"line_number":3184,"context_line":"                     \u0027status\u0027: fields.SnapshotStatus.DELETED})"},{"line_number":3185,"context_line":"        except Exception:"},{"line_number":3186,"context_line":"            exceptionMessage \u003d (_(\"Failed to delete snapshot for vol grp: \""},{"line_number":3187,"context_line":"                                  \"%(grpId)s.\")"},{"line_number":3188,"context_line":"                                % {\u0027grpId\u0027: group_snapshot[\u0027group_id\u0027]})"},{"line_number":3189,"context_line":"            LOG.exception(exceptionMessage)"},{"line_number":3190,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dexceptionMessage)"}],"source_content_type":"text/x-python","patch_set":13,"id":"da4df55a_cee15b00","line":3187,"updated":"2016-12-23 20:39:49.000000000","message":"Please log id of the group snapshot as well.","commit_id":"a457483f31cd32d123a1b35371b6bc83927e874a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7c97565d8526e2ffd976e1cac0333470f8634e40","unresolved":false,"context_lines":[{"line_number":4763,"context_line":"        :param group: storage configuration service instance"},{"line_number":4764,"context_line":"        :param add_volumes: the volumes uuids you want to add to the vol grp"},{"line_number":4765,"context_line":"        :param remove_volumes: the volumes uuids you want to remove from"},{"line_number":4766,"context_line":"                               the CG"},{"line_number":4767,"context_line":"        \"\"\""},{"line_number":4768,"context_line":"        LOG.info(_LI(\"Update generic volume Group: %(group)s. \""},{"line_number":4769,"context_line":"                     \"This adds and/or removes volumes from \""}],"source_content_type":"text/x-python","patch_set":13,"id":"da4df55a_eee8dfe4","line":4766,"updated":"2016-12-23 20:39:49.000000000","message":"s/CG/group","commit_id":"a457483f31cd32d123a1b35371b6bc83927e874a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7c97565d8526e2ffd976e1cac0333470f8634e40","unresolved":false,"context_lines":[{"line_number":4886,"context_line":"                              source_vols):"},{"line_number":4887,"context_line":"        \"\"\"Creates the volume group from source."},{"line_number":4888,"context_line":""},{"line_number":4889,"context_line":"        Currently the source can only be a group_snapshot."},{"line_number":4890,"context_line":""},{"line_number":4891,"context_line":"        :param context: the context"},{"line_number":4892,"context_line":"        :param group: the volume group object to be created"}],"source_content_type":"text/x-python","patch_set":13,"id":"da4df55a_0ecb6373","line":4889,"updated":"2016-12-23 20:39:49.000000000","message":"Remove this line. Now you can support source as a source group.","commit_id":"a457483f31cd32d123a1b35371b6bc83927e874a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7c97565d8526e2ffd976e1cac0333470f8634e40","unresolved":false,"context_lines":[{"line_number":4890,"context_line":""},{"line_number":4891,"context_line":"        :param context: the context"},{"line_number":4892,"context_line":"        :param group: the volume group object to be created"},{"line_number":4893,"context_line":"        :param volumes: volumes in the consistency group"},{"line_number":4894,"context_line":"        :param group_snapshot: the source volume group snapshot"},{"line_number":4895,"context_line":"        :param snapshots: snapshots of the source volumes"},{"line_number":4896,"context_line":"        :param source_group: the source volume group"}],"source_content_type":"text/x-python","patch_set":13,"id":"da4df55a_4ec56b59","line":4893,"updated":"2016-12-23 20:39:49.000000000","message":"Remove \"consistency\".","commit_id":"a457483f31cd32d123a1b35371b6bc83927e874a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7c97565d8526e2ffd976e1cac0333470f8634e40","unresolved":false,"context_lines":[{"line_number":4896,"context_line":"        :param source_group: the source volume group"},{"line_number":4897,"context_line":"        :param source_vols: the source vols"},{"line_number":4898,"context_line":"        :returns: model_update, volumes_model_update"},{"line_number":4899,"context_line":"                  model_update is a dictionary of cg status"},{"line_number":4900,"context_line":"                  volumes_model_update is a list of dictionaries of volume"},{"line_number":4901,"context_line":"                  update"},{"line_number":4902,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"da4df55a_aeac17a1","line":4899,"updated":"2016-12-23 20:39:49.000000000","message":"s/cg/group","commit_id":"a457483f31cd32d123a1b35371b6bc83927e874a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7c97565d8526e2ffd976e1cac0333470f8634e40","unresolved":false,"context_lines":[{"line_number":4914,"context_line":""},{"line_number":4915,"context_line":"        LOG.debug(\"Enter EMCVMAXCommon::create_volume group_from_src. \""},{"line_number":4916,"context_line":"                  \"Group to be created: %(grpId)s, \""},{"line_number":4917,"context_line":"                  \"Source : %(SourceGrpId)s.\","},{"line_number":4918,"context_line":"                  {\u0027grpId\u0027: group[\u0027id\u0027],"},{"line_number":4919,"context_line":"                   \u0027SourceGrpId\u0027: source_id})"},{"line_number":4920,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"da4df55a_8e93d34e","line":4917,"updated":"2016-12-23 20:39:49.000000000","message":"s/SourceGrpId/SourceId","commit_id":"a457483f31cd32d123a1b35371b6bc83927e874a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7c97565d8526e2ffd976e1cac0333470f8634e40","unresolved":false,"context_lines":[{"line_number":4916,"context_line":"                  \"Group to be created: %(grpId)s, \""},{"line_number":4917,"context_line":"                  \"Source : %(SourceGrpId)s.\","},{"line_number":4918,"context_line":"                  {\u0027grpId\u0027: group[\u0027id\u0027],"},{"line_number":4919,"context_line":"                   \u0027SourceGrpId\u0027: source_id})"},{"line_number":4920,"context_line":""},{"line_number":4921,"context_line":"        self.create_group(context, group)"},{"line_number":4922,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"da4df55a_ae9a5761","line":4919,"updated":"2016-12-23 20:39:49.000000000","message":"SourceId","commit_id":"a457483f31cd32d123a1b35371b6bc83927e874a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7c97565d8526e2ffd976e1cac0333470f8634e40","unresolved":false,"context_lines":[{"line_number":5011,"context_line":"            exceptionMessage \u003d (_(\"Failed to create vol grp %(volGrpName)s \""},{"line_number":5012,"context_line":"                                  \"from source %(grpSnapshot)s.\")"},{"line_number":5013,"context_line":"                                % {\u0027volGrpName\u0027: group[\u0027id\u0027],"},{"line_number":5014,"context_line":"                                   \u0027grpSnapshot\u0027: source_id})"},{"line_number":5015,"context_line":"            LOG.exception(exceptionMessage)"},{"line_number":5016,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dexceptionMessage)"},{"line_number":5017,"context_line":"        volumes_model_update \u003d self.utils.get_volume_model_updates("}],"source_content_type":"text/x-python","patch_set":13,"id":"da4df55a_2eaf4782","line":5014,"updated":"2016-12-23 20:39:49.000000000","message":"This message needs to be changed.  Source could be a source group too.","commit_id":"a457483f31cd32d123a1b35371b6bc83927e874a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"887fe549b7f5ce7b5c1aa69f6fa5147182f930b3","unresolved":false,"context_lines":[{"line_number":2690,"context_line":"        :param group: the group object to be deleted"},{"line_number":2691,"context_line":"        :param volumes: the list of volumes in the generic group to be deleted"},{"line_number":2692,"context_line":"        :returns: dict -- modelUpdate"},{"line_number":2693,"context_line":"        :returns: list -- list of volume objects"},{"line_number":2694,"context_line":"        :raises: VolumeBackendAPIException"},{"line_number":2695,"context_line":"        \"\"\""},{"line_number":2696,"context_line":"        LOG.info(_LI(\"Delete generic volume group: %(group)s.\"),"}],"source_content_type":"text/x-python","patch_set":22,"id":"7a3c09a3_f36a6280","line":2693,"range":{"start_line":2693,"start_character":41,"end_line":2693,"end_character":48},"updated":"2017-01-16 22:06:33.000000000","message":"list of dicts\n\ns/objects/model updates","commit_id":"5d7d8e122610be1e4b111d17aa79a1e94c0a07db"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"887fe549b7f5ce7b5c1aa69f6fa5147182f930b3","unresolved":false,"context_lines":[{"line_number":2889,"context_line":"        :param group_snapshot: the volume group snapshot to be created"},{"line_number":2890,"context_line":"        :param snapshots: snapshots"},{"line_number":2891,"context_line":"        :returns: dict -- modelUpdate"},{"line_number":2892,"context_line":"        :returns: list -- list of snapshots"},{"line_number":2893,"context_line":"        :raises: VolumeBackendAPIException"},{"line_number":2894,"context_line":"        \"\"\""},{"line_number":2895,"context_line":"        volumeGroup \u003d group_snapshot.get(\u0027group\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"7a3c09a3_d34ac625","line":2892,"range":{"start_line":2892,"start_character":34,"end_line":2892,"end_character":43},"updated":"2017-01-16 22:06:33.000000000","message":"snapshot model updates","commit_id":"5d7d8e122610be1e4b111d17aa79a1e94c0a07db"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"887fe549b7f5ce7b5c1aa69f6fa5147182f930b3","unresolved":false,"context_lines":[{"line_number":3157,"context_line":"        :param group_snapshot: the volume group snapshot to be created"},{"line_number":3158,"context_line":"        :param snapshots: snapshots"},{"line_number":3159,"context_line":"        :returns: dict -- modelUpdate"},{"line_number":3160,"context_line":"        :returns: list -- list of snapshots"},{"line_number":3161,"context_line":"        :raises: VolumeBackendAPIException"},{"line_number":3162,"context_line":"        \"\"\""},{"line_number":3163,"context_line":"        volGrp \u003d group_snapshot.get(\u0027group\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"7a3c09a3_b3e9bae8","line":3160,"range":{"start_line":3160,"start_character":34,"end_line":3160,"end_character":43},"updated":"2017-01-16 22:06:33.000000000","message":"snapshot model updates","commit_id":"5d7d8e122610be1e4b111d17aa79a1e94c0a07db"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"887fe549b7f5ce7b5c1aa69f6fa5147182f930b3","unresolved":false,"context_lines":[{"line_number":4762,"context_line":"    def update_group(self, group, add_volumes, remove_volumes):"},{"line_number":4763,"context_line":"        \"\"\"Updates LUNs in generic volume group."},{"line_number":4764,"context_line":""},{"line_number":4765,"context_line":"        :param group: storage configuration service instance"},{"line_number":4766,"context_line":"        :param add_volumes: the volumes uuids you want to add to the vol grp"},{"line_number":4767,"context_line":"        :param remove_volumes: the volumes uuids you want to remove from"},{"line_number":4768,"context_line":"                               the group"}],"source_content_type":"text/x-python","patch_set":22,"id":"7a3c09a3_b3d0da20","line":4765,"range":{"start_line":4765,"start_character":22,"end_line":4765,"end_character":60},"updated":"2017-01-16 22:06:33.000000000","message":"generic volume group object to be updated","commit_id":"5d7d8e122610be1e4b111d17aa79a1e94c0a07db"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"887fe549b7f5ce7b5c1aa69f6fa5147182f930b3","unresolved":false,"context_lines":[{"line_number":4763,"context_line":"        \"\"\"Updates LUNs in generic volume group."},{"line_number":4764,"context_line":""},{"line_number":4765,"context_line":"        :param group: storage configuration service instance"},{"line_number":4766,"context_line":"        :param add_volumes: the volumes uuids you want to add to the vol grp"},{"line_number":4767,"context_line":"        :param remove_volumes: the volumes uuids you want to remove from"},{"line_number":4768,"context_line":"                               the group"},{"line_number":4769,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":22,"id":"7a3c09a3_f37fc2a8","line":4766,"range":{"start_line":4766,"start_character":28,"end_line":4766,"end_character":45},"updated":"2017-01-16 22:06:33.000000000","message":"This should be a list of volume objects, not volume uuids.","commit_id":"5d7d8e122610be1e4b111d17aa79a1e94c0a07db"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"887fe549b7f5ce7b5c1aa69f6fa5147182f930b3","unresolved":false,"context_lines":[{"line_number":4764,"context_line":""},{"line_number":4765,"context_line":"        :param group: storage configuration service instance"},{"line_number":4766,"context_line":"        :param add_volumes: the volumes uuids you want to add to the vol grp"},{"line_number":4767,"context_line":"        :param remove_volumes: the volumes uuids you want to remove from"},{"line_number":4768,"context_line":"                               the group"},{"line_number":4769,"context_line":"        \"\"\""},{"line_number":4770,"context_line":"        LOG.info(_LI(\"Update generic volume Group: %(group)s. \""}],"source_content_type":"text/x-python","patch_set":22,"id":"7a3c09a3_334cea9d","line":4767,"range":{"start_line":4767,"start_character":31,"end_line":4767,"end_character":48},"updated":"2017-01-16 22:06:33.000000000","message":"Same here","commit_id":"5d7d8e122610be1e4b111d17aa79a1e94c0a07db"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"887fe549b7f5ce7b5c1aa69f6fa5147182f930b3","unresolved":false,"context_lines":[{"line_number":4789,"context_line":"            if cgInstanceName is None:"},{"line_number":4790,"context_line":"                raise exception.GroupNotFound("},{"line_number":4791,"context_line":"                    group_id\u003dvolGrpName)"},{"line_number":4792,"context_line":"            # Add volume(s) to a consistency group"},{"line_number":4793,"context_line":"            if add_instance_names:"},{"line_number":4794,"context_line":"                self.provision.add_volume_to_cg("},{"line_number":4795,"context_line":"                    self.conn, replicationService, cgInstanceName,"}],"source_content_type":"text/x-python","patch_set":22,"id":"7a3c09a3_f356e228","line":4792,"range":{"start_line":4792,"start_character":33,"end_line":4792,"end_character":44},"updated":"2017-01-16 22:06:33.000000000","message":"Remove \"consistency\".","commit_id":"5d7d8e122610be1e4b111d17aa79a1e94c0a07db"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"887fe549b7f5ce7b5c1aa69f6fa5147182f930b3","unresolved":false,"context_lines":[{"line_number":4795,"context_line":"                    self.conn, replicationService, cgInstanceName,"},{"line_number":4796,"context_line":"                    add_instance_names, volGrpName, None,"},{"line_number":4797,"context_line":"                    extraSpecs)"},{"line_number":4798,"context_line":"            # Remove volume(s) from a consistency group"},{"line_number":4799,"context_line":"            if remove_instance_names:"},{"line_number":4800,"context_line":"                self.provision.remove_volume_from_cg("},{"line_number":4801,"context_line":"                    self.conn, replicationService, cgInstanceName,"}],"source_content_type":"text/x-python","patch_set":22,"id":"7a3c09a3_33330a16","line":4798,"range":{"start_line":4798,"start_character":38,"end_line":4798,"end_character":49},"updated":"2017-01-16 22:06:33.000000000","message":"Remove \"consistency\".","commit_id":"5d7d8e122610be1e4b111d17aa79a1e94c0a07db"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"887fe549b7f5ce7b5c1aa69f6fa5147182f930b3","unresolved":false,"context_lines":[{"line_number":4803,"context_line":"                    extraSpecs)"},{"line_number":4804,"context_line":"        except exception.GroupNotFound:"},{"line_number":4805,"context_line":"            raise"},{"line_number":4806,"context_line":"        except Exception as ex:"},{"line_number":4807,"context_line":"            LOG.error(_LE(\"Exception: %(ex)s\"), {\u0027ex\u0027: ex})"},{"line_number":4808,"context_line":"            exceptionMessage \u003d (_(\"Failed to update volume group:\""},{"line_number":4809,"context_line":"                                  \" %(volGrpName)s.\")"}],"source_content_type":"text/x-python","patch_set":22,"id":"7a3c09a3_132b6e95","line":4806,"range":{"start_line":4806,"start_character":24,"end_line":4806,"end_character":30},"updated":"2017-01-16 22:06:33.000000000","message":"Remove \"as ex\"","commit_id":"5d7d8e122610be1e4b111d17aa79a1e94c0a07db"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"887fe549b7f5ce7b5c1aa69f6fa5147182f930b3","unresolved":false,"context_lines":[{"line_number":4804,"context_line":"        except exception.GroupNotFound:"},{"line_number":4805,"context_line":"            raise"},{"line_number":4806,"context_line":"        except Exception as ex:"},{"line_number":4807,"context_line":"            LOG.error(_LE(\"Exception: %(ex)s\"), {\u0027ex\u0027: ex})"},{"line_number":4808,"context_line":"            exceptionMessage \u003d (_(\"Failed to update volume group:\""},{"line_number":4809,"context_line":"                                  \" %(volGrpName)s.\")"},{"line_number":4810,"context_line":"                                % {\u0027volGrpName\u0027: group[\u0027id\u0027]})"}],"source_content_type":"text/x-python","patch_set":22,"id":"7a3c09a3_d32486c6","line":4807,"range":{"start_line":4807,"start_character":12,"end_line":4807,"end_character":59},"updated":"2017-01-16 22:06:33.000000000","message":"Remove this line.","commit_id":"5d7d8e122610be1e4b111d17aa79a1e94c0a07db"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"887fe549b7f5ce7b5c1aa69f6fa5147182f930b3","unresolved":false,"context_lines":[{"line_number":4808,"context_line":"            exceptionMessage \u003d (_(\"Failed to update volume group:\""},{"line_number":4809,"context_line":"                                  \" %(volGrpName)s.\")"},{"line_number":4810,"context_line":"                                % {\u0027volGrpName\u0027: group[\u0027id\u0027]})"},{"line_number":4811,"context_line":"            LOG.error(exceptionMessage)"},{"line_number":4812,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dexceptionMessage)"},{"line_number":4813,"context_line":""},{"line_number":4814,"context_line":"        return modelUpdate, None, None"}],"source_content_type":"text/x-python","patch_set":22,"id":"7a3c09a3_b30e1a39","line":4811,"range":{"start_line":4811,"start_character":12,"end_line":4811,"end_character":39},"updated":"2017-01-16 22:06:33.000000000","message":"Use LOG.exception.\n\nLOG.exception(exceptionMessage)","commit_id":"5d7d8e122610be1e4b111d17aa79a1e94c0a07db"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"887fe549b7f5ce7b5c1aa69f6fa5147182f930b3","unresolved":false,"context_lines":[{"line_number":4890,"context_line":""},{"line_number":4891,"context_line":"        :param context: the context"},{"line_number":4892,"context_line":"        :param group: the volume group object to be created"},{"line_number":4893,"context_line":"        :param volumes: volumes in the group"},{"line_number":4894,"context_line":"        :param group_snapshot: the source volume group snapshot"},{"line_number":4895,"context_line":"        :param snapshots: snapshots of the source volumes"},{"line_number":4896,"context_line":"        :param source_group: the source volume group"}],"source_content_type":"text/x-python","patch_set":22,"id":"7a3c09a3_f39d0267","line":4893,"range":{"start_line":4893,"start_character":24,"end_line":4893,"end_character":31},"updated":"2017-01-16 22:06:33.000000000","message":"volume objects","commit_id":"5d7d8e122610be1e4b111d17aa79a1e94c0a07db"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"887fe549b7f5ce7b5c1aa69f6fa5147182f930b3","unresolved":false,"context_lines":[{"line_number":4892,"context_line":"        :param group: the volume group object to be created"},{"line_number":4893,"context_line":"        :param volumes: volumes in the group"},{"line_number":4894,"context_line":"        :param group_snapshot: the source volume group snapshot"},{"line_number":4895,"context_line":"        :param snapshots: snapshots of the source volumes"},{"line_number":4896,"context_line":"        :param source_group: the source volume group"},{"line_number":4897,"context_line":"        :param source_vols: the source vols"},{"line_number":4898,"context_line":"        :returns: model_update, volumes_model_update"}],"source_content_type":"text/x-python","patch_set":22,"id":"7a3c09a3_538fb629","line":4895,"range":{"start_line":4895,"start_character":26,"end_line":4895,"end_character":57},"updated":"2017-01-16 22:06:33.000000000","message":"snapshot objects in the group_snapshot","commit_id":"5d7d8e122610be1e4b111d17aa79a1e94c0a07db"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"887fe549b7f5ce7b5c1aa69f6fa5147182f930b3","unresolved":false,"context_lines":[{"line_number":4894,"context_line":"        :param group_snapshot: the source volume group snapshot"},{"line_number":4895,"context_line":"        :param snapshots: snapshots of the source volumes"},{"line_number":4896,"context_line":"        :param source_group: the source volume group"},{"line_number":4897,"context_line":"        :param source_vols: the source vols"},{"line_number":4898,"context_line":"        :returns: model_update, volumes_model_update"},{"line_number":4899,"context_line":"                  model_update is a dictionary of group status"},{"line_number":4900,"context_line":"                  volumes_model_update is a list of dictionaries of volume"}],"source_content_type":"text/x-python","patch_set":22,"id":"7a3c09a3_13728e49","line":4897,"range":{"start_line":4897,"start_character":32,"end_line":4897,"end_character":43},"updated":"2017-01-16 22:06:33.000000000","message":"source volume objects in the source group","commit_id":"5d7d8e122610be1e4b111d17aa79a1e94c0a07db"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"887fe549b7f5ce7b5c1aa69f6fa5147182f930b3","unresolved":false,"context_lines":[{"line_number":5280,"context_line":"        # If there are no volumeTypeId specified,"},{"line_number":5281,"context_line":"        # then set it to a list with one entry which is an empty string"},{"line_number":5282,"context_line":"        if volumeTypeIds is None:"},{"line_number":5283,"context_line":"            volumeTypeIds \u003d {\"fakeVolumeType\"}"},{"line_number":5284,"context_line":""},{"line_number":5285,"context_line":"        for volumeTypeId in volumeTypeIds:"},{"line_number":5286,"context_line":"            if volumeTypeId:"}],"source_content_type":"text/x-python","patch_set":22,"id":"7a3c09a3_138feecc","line":5283,"range":{"start_line":5283,"start_character":28,"end_line":5283,"end_character":46},"updated":"2017-01-16 22:06:33.000000000","message":"Please re-test this with the latest code.  You should not see volumeTypeId not specified any more.\n\nIf you have to handle the case when volumeTypeIds is None, please set this to an empty array: \"volumeTypeIds \u003d []\".","commit_id":"5d7d8e122610be1e4b111d17aa79a1e94c0a07db"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bff7ba26acfa7bfd80ceaeeb9c44daa19a3d004b","unresolved":false,"context_lines":[{"line_number":269,"context_line":"        # Change"},{"line_number":270,"context_line":"        grp_id \u003d None"},{"line_number":271,"context_line":"        if \u0027consistencygroup_id\u0027 in volume and volume[\u0027consistencygroup_id\u0027]:"},{"line_number":272,"context_line":"            grp_id \u003d six.text_type(volume[\u0027consistencygroup_id\u0027])"},{"line_number":273,"context_line":"        elif \u0027group_id\u0027 in volume and volume[\u0027group_id\u0027]:"},{"line_number":274,"context_line":"            grp_id \u003d six.text_type(volume[\u0027group_id\u0027])"},{"line_number":275,"context_line":"        if grp_id:"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_fcaf1592","line":272,"range":{"start_line":272,"start_character":21,"end_line":272,"end_character":34},"updated":"2017-01-19 04:13:00.000000000","message":"six.text_type is not necessary here.  volume[\u0027consistencygroup_id\u0027] should be a string.","commit_id":"ec82e92085c7d66b39ee5bfbd65877a047574b46"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"330269aab45fb76180bf5b1817f6f8f90b28b24d","unresolved":false,"context_lines":[{"line_number":269,"context_line":"        # Change"},{"line_number":270,"context_line":"        grp_id \u003d None"},{"line_number":271,"context_line":"        if \u0027consistencygroup_id\u0027 in volume and volume[\u0027consistencygroup_id\u0027]:"},{"line_number":272,"context_line":"            grp_id \u003d six.text_type(volume[\u0027consistencygroup_id\u0027])"},{"line_number":273,"context_line":"        elif \u0027group_id\u0027 in volume and volume[\u0027group_id\u0027]:"},{"line_number":274,"context_line":"            grp_id \u003d six.text_type(volume[\u0027group_id\u0027])"},{"line_number":275,"context_line":"        if grp_id:"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_51363804","line":272,"range":{"start_line":272,"start_character":21,"end_line":272,"end_character":34},"in_reply_to":"5a3905b3_fcaf1592","updated":"2017-01-19 14:35:09.000000000","message":"Will change. Thanks","commit_id":"ec82e92085c7d66b39ee5bfbd65877a047574b46"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bff7ba26acfa7bfd80ceaeeb9c44daa19a3d004b","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        if \u0027consistencygroup_id\u0027 in volume and volume[\u0027consistencygroup_id\u0027]:"},{"line_number":272,"context_line":"            grp_id \u003d six.text_type(volume[\u0027consistencygroup_id\u0027])"},{"line_number":273,"context_line":"        elif \u0027group_id\u0027 in volume and volume[\u0027group_id\u0027]:"},{"line_number":274,"context_line":"            grp_id \u003d six.text_type(volume[\u0027group_id\u0027])"},{"line_number":275,"context_line":"        if grp_id:"},{"line_number":276,"context_line":"            volumeInstance \u003d self.utils.find_volume_instance("},{"line_number":277,"context_line":"                self.conn, volumeDict, volumeName)"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_5c9f495f","line":274,"range":{"start_line":274,"start_character":21,"end_line":274,"end_character":34},"updated":"2017-01-19 04:13:00.000000000","message":"six.text_type not necessary.","commit_id":"ec82e92085c7d66b39ee5bfbd65877a047574b46"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"330269aab45fb76180bf5b1817f6f8f90b28b24d","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        if \u0027consistencygroup_id\u0027 in volume and volume[\u0027consistencygroup_id\u0027]:"},{"line_number":272,"context_line":"            grp_id \u003d six.text_type(volume[\u0027consistencygroup_id\u0027])"},{"line_number":273,"context_line":"        elif \u0027group_id\u0027 in volume and volume[\u0027group_id\u0027]:"},{"line_number":274,"context_line":"            grp_id \u003d six.text_type(volume[\u0027group_id\u0027])"},{"line_number":275,"context_line":"        if grp_id:"},{"line_number":276,"context_line":"            volumeInstance \u003d self.utils.find_volume_instance("},{"line_number":277,"context_line":"                self.conn, volumeDict, volumeName)"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_9140a058","line":274,"range":{"start_line":274,"start_character":21,"end_line":274,"end_character":34},"in_reply_to":"5a3905b3_5c9f495f","updated":"2017-01-19 14:35:09.000000000","message":"Ok","commit_id":"ec82e92085c7d66b39ee5bfbd65877a047574b46"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bff7ba26acfa7bfd80ceaeeb9c44daa19a3d004b","unresolved":false,"context_lines":[{"line_number":2894,"context_line":"        snapshots_model_update \u003d []"},{"line_number":2895,"context_line":""},{"line_number":2896,"context_line":"        LOG.info(_LI("},{"line_number":2897,"context_line":"            \"Create snapshot for generic volume group Group %(grpId)s \""},{"line_number":2898,"context_line":"            \"grpSnapshotID: %(group_snapshot)s.\"),"},{"line_number":2899,"context_line":"            {\u0027group_snapshot\u0027: group_snapshot[\u0027id\u0027],"},{"line_number":2900,"context_line":"             \u0027grpId\u0027: group_snapshot[\u0027group_id\u0027]})"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_5cad8987","line":2897,"range":{"start_line":2897,"start_character":62,"end_line":2897,"end_character":67},"updated":"2017-01-19 04:13:00.000000000","message":"Better to use python style parameter naming convention when possible:\n\ns/grpId/grp_id","commit_id":"ec82e92085c7d66b39ee5bfbd65877a047574b46"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"330269aab45fb76180bf5b1817f6f8f90b28b24d","unresolved":false,"context_lines":[{"line_number":2894,"context_line":"        snapshots_model_update \u003d []"},{"line_number":2895,"context_line":""},{"line_number":2896,"context_line":"        LOG.info(_LI("},{"line_number":2897,"context_line":"            \"Create snapshot for generic volume group Group %(grpId)s \""},{"line_number":2898,"context_line":"            \"grpSnapshotID: %(group_snapshot)s.\"),"},{"line_number":2899,"context_line":"            {\u0027group_snapshot\u0027: group_snapshot[\u0027id\u0027],"},{"line_number":2900,"context_line":"             \u0027grpId\u0027: group_snapshot[\u0027group_id\u0027]})"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_112d90a7","line":2897,"range":{"start_line":2897,"start_character":62,"end_line":2897,"end_character":67},"in_reply_to":"5a3905b3_5cad8987","updated":"2017-01-19 14:35:09.000000000","message":"Will do","commit_id":"ec82e92085c7d66b39ee5bfbd65877a047574b46"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bff7ba26acfa7bfd80ceaeeb9c44daa19a3d004b","unresolved":false,"context_lines":[{"line_number":2897,"context_line":"            \"Create snapshot for generic volume group Group %(grpId)s \""},{"line_number":2898,"context_line":"            \"grpSnapshotID: %(group_snapshot)s.\"),"},{"line_number":2899,"context_line":"            {\u0027group_snapshot\u0027: group_snapshot[\u0027id\u0027],"},{"line_number":2900,"context_line":"             \u0027grpId\u0027: group_snapshot[\u0027group_id\u0027]})"},{"line_number":2901,"context_line":""},{"line_number":2902,"context_line":"        self.conn \u003d self._get_ecom_connection()"},{"line_number":2903,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_fcb475d2","line":2900,"range":{"start_line":2900,"start_character":14,"end_line":2900,"end_character":19},"updated":"2017-01-19 04:13:00.000000000","message":"grp_id","commit_id":"ec82e92085c7d66b39ee5bfbd65877a047574b46"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"330269aab45fb76180bf5b1817f6f8f90b28b24d","unresolved":false,"context_lines":[{"line_number":2897,"context_line":"            \"Create snapshot for generic volume group Group %(grpId)s \""},{"line_number":2898,"context_line":"            \"grpSnapshotID: %(group_snapshot)s.\"),"},{"line_number":2899,"context_line":"            {\u0027group_snapshot\u0027: group_snapshot[\u0027id\u0027],"},{"line_number":2900,"context_line":"             \u0027grpId\u0027: group_snapshot[\u0027group_id\u0027]})"},{"line_number":2901,"context_line":""},{"line_number":2902,"context_line":"        self.conn \u003d self._get_ecom_connection()"},{"line_number":2903,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_b10cbc43","line":2900,"range":{"start_line":2900,"start_character":14,"end_line":2900,"end_character":19},"in_reply_to":"5a3905b3_fcb475d2","updated":"2017-01-19 14:35:09.000000000","message":"Sure","commit_id":"ec82e92085c7d66b39ee5bfbd65877a047574b46"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bff7ba26acfa7bfd80ceaeeb9c44daa19a3d004b","unresolved":false,"context_lines":[{"line_number":3000,"context_line":""},{"line_number":3001,"context_line":"        except Exception:"},{"line_number":3002,"context_line":"            exceptionMessage \u003d (_(\"Failed to create snapshot for group:\""},{"line_number":3003,"context_line":"                                  \" %(volGrpName)s.\")"},{"line_number":3004,"context_line":"                                % {\u0027volGrpName\u0027: group_snapshot[\u0027group_id\u0027]})"},{"line_number":3005,"context_line":"            LOG.exception(exceptionMessage)"},{"line_number":3006,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dexceptionMessage)"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_bce10dd3","line":3003,"range":{"start_line":3003,"start_character":38,"end_line":3003,"end_character":48},"updated":"2017-01-19 04:13:00.000000000","message":"vol_grp_name","commit_id":"ec82e92085c7d66b39ee5bfbd65877a047574b46"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"330269aab45fb76180bf5b1817f6f8f90b28b24d","unresolved":false,"context_lines":[{"line_number":3000,"context_line":""},{"line_number":3001,"context_line":"        except Exception:"},{"line_number":3002,"context_line":"            exceptionMessage \u003d (_(\"Failed to create snapshot for group:\""},{"line_number":3003,"context_line":"                                  \" %(volGrpName)s.\")"},{"line_number":3004,"context_line":"                                % {\u0027volGrpName\u0027: group_snapshot[\u0027group_id\u0027]})"},{"line_number":3005,"context_line":"            LOG.exception(exceptionMessage)"},{"line_number":3006,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dexceptionMessage)"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_34ffda02","line":3003,"range":{"start_line":3003,"start_character":38,"end_line":3003,"end_character":48},"in_reply_to":"5a3905b3_bce10dd3","updated":"2017-01-19 14:35:09.000000000","message":"Yes","commit_id":"ec82e92085c7d66b39ee5bfbd65877a047574b46"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bff7ba26acfa7bfd80ceaeeb9c44daa19a3d004b","unresolved":false,"context_lines":[{"line_number":3162,"context_line":"        model_update \u003d {}"},{"line_number":3163,"context_line":"        snapshots_model_update \u003d []"},{"line_number":3164,"context_line":"        LOG.info(_LI("},{"line_number":3165,"context_line":"            \"Delete snapshot for source group %(grpId)s \""},{"line_number":3166,"context_line":"            \"grpsnapshotID: %(grpsnapshot)s.\"),"},{"line_number":3167,"context_line":"            {\u0027grpsnapshot\u0027: group_snapshot[\u0027id\u0027],"},{"line_number":3168,"context_line":"             \u0027grpId\u0027: group_snapshot[\u0027group_id\u0027]})"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_1cd141fc","line":3165,"range":{"start_line":3165,"start_character":48,"end_line":3165,"end_character":53},"updated":"2017-01-19 04:13:00.000000000","message":"grp_id","commit_id":"ec82e92085c7d66b39ee5bfbd65877a047574b46"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"330269aab45fb76180bf5b1817f6f8f90b28b24d","unresolved":false,"context_lines":[{"line_number":3162,"context_line":"        model_update \u003d {}"},{"line_number":3163,"context_line":"        snapshots_model_update \u003d []"},{"line_number":3164,"context_line":"        LOG.info(_LI("},{"line_number":3165,"context_line":"            \"Delete snapshot for source group %(grpId)s \""},{"line_number":3166,"context_line":"            \"grpsnapshotID: %(grpsnapshot)s.\"),"},{"line_number":3167,"context_line":"            {\u0027grpsnapshot\u0027: group_snapshot[\u0027id\u0027],"},{"line_number":3168,"context_line":"             \u0027grpId\u0027: group_snapshot[\u0027group_id\u0027]})"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_54046614","line":3165,"range":{"start_line":3165,"start_character":48,"end_line":3165,"end_character":53},"in_reply_to":"5a3905b3_1cd141fc","updated":"2017-01-19 14:35:09.000000000","message":"Sure","commit_id":"ec82e92085c7d66b39ee5bfbd65877a047574b46"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bff7ba26acfa7bfd80ceaeeb9c44daa19a3d004b","unresolved":false,"context_lines":[{"line_number":3182,"context_line":"                    {\u0027id\u0027: snapshot[\u0027id\u0027],"},{"line_number":3183,"context_line":"                     \u0027status\u0027: fields.SnapshotStatus.DELETED})"},{"line_number":3184,"context_line":"        except Exception:"},{"line_number":3185,"context_line":"            exceptionMessage \u003d (_(\"Failed to delete snapshot: (grpssId)s \""},{"line_number":3186,"context_line":"                                  \"for vol grp: %(grpId)s.\")"},{"line_number":3187,"context_line":"                                % {\u0027grpssId\u0027: group_snapshot[\u0027id\u0027],"},{"line_number":3188,"context_line":"                                   \u0027grpId\u0027: group_snapshot[\u0027group_id\u0027]})"},{"line_number":3189,"context_line":"            LOG.exception(exceptionMessage)"},{"line_number":3190,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dexceptionMessage)"},{"line_number":3191,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_3cf51d83","line":3188,"range":{"start_line":3185,"start_character":34,"end_line":3188,"end_character":72},"updated":"2017-01-19 04:13:00.000000000","message":"Please follow python naming convention when possible.","commit_id":"ec82e92085c7d66b39ee5bfbd65877a047574b46"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"330269aab45fb76180bf5b1817f6f8f90b28b24d","unresolved":false,"context_lines":[{"line_number":3182,"context_line":"                    {\u0027id\u0027: snapshot[\u0027id\u0027],"},{"line_number":3183,"context_line":"                     \u0027status\u0027: fields.SnapshotStatus.DELETED})"},{"line_number":3184,"context_line":"        except Exception:"},{"line_number":3185,"context_line":"            exceptionMessage \u003d (_(\"Failed to delete snapshot: (grpssId)s \""},{"line_number":3186,"context_line":"                                  \"for vol grp: %(grpId)s.\")"},{"line_number":3187,"context_line":"                                % {\u0027grpssId\u0027: group_snapshot[\u0027id\u0027],"},{"line_number":3188,"context_line":"                                   \u0027grpId\u0027: group_snapshot[\u0027group_id\u0027]})"},{"line_number":3189,"context_line":"            LOG.exception(exceptionMessage)"},{"line_number":3190,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dexceptionMessage)"},{"line_number":3191,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_7409622c","line":3188,"range":{"start_line":3185,"start_character":34,"end_line":3188,"end_character":72},"in_reply_to":"5a3905b3_3cf51d83","updated":"2017-01-19 14:35:09.000000000","message":"I will","commit_id":"ec82e92085c7d66b39ee5bfbd65877a047574b46"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bff7ba26acfa7bfd80ceaeeb9c44daa19a3d004b","unresolved":false,"context_lines":[{"line_number":4789,"context_line":"                    replicationService, six.text_type(group[\u0027id\u0027])))"},{"line_number":4790,"context_line":"            if cgInstanceName is None:"},{"line_number":4791,"context_line":"                raise exception.GroupNotFound("},{"line_number":4792,"context_line":"                    group_id\u003dvolGrpName)"},{"line_number":4793,"context_line":"            # Add volume(s) to a group"},{"line_number":4794,"context_line":"            if add_instance_names:"},{"line_number":4795,"context_line":"                self.provision.add_volume_to_cg("}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_dc34194c","line":4792,"range":{"start_line":4792,"start_character":29,"end_line":4792,"end_character":39},"updated":"2017-01-19 04:13:00.000000000","message":"Should be group_id\u003dgroup[\u0027id\u0027]","commit_id":"ec82e92085c7d66b39ee5bfbd65877a047574b46"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"330269aab45fb76180bf5b1817f6f8f90b28b24d","unresolved":false,"context_lines":[{"line_number":4789,"context_line":"                    replicationService, six.text_type(group[\u0027id\u0027])))"},{"line_number":4790,"context_line":"            if cgInstanceName is None:"},{"line_number":4791,"context_line":"                raise exception.GroupNotFound("},{"line_number":4792,"context_line":"                    group_id\u003dvolGrpName)"},{"line_number":4793,"context_line":"            # Add volume(s) to a group"},{"line_number":4794,"context_line":"            if add_instance_names:"},{"line_number":4795,"context_line":"                self.provision.add_volume_to_cg("}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_940ece32","line":4792,"range":{"start_line":4792,"start_character":29,"end_line":4792,"end_character":39},"in_reply_to":"5a3905b3_dc34194c","updated":"2017-01-19 14:35:09.000000000","message":"Ok","commit_id":"ec82e92085c7d66b39ee5bfbd65877a047574b46"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bff7ba26acfa7bfd80ceaeeb9c44daa19a3d004b","unresolved":false,"context_lines":[{"line_number":5279,"context_line":"        # If there are no volumeTypeId specified,"},{"line_number":5280,"context_line":"        # then set it to a list with one entry which is an empty string"},{"line_number":5281,"context_line":"        if volumeTypeIds is None:"},{"line_number":5282,"context_line":"            volumeTypeIds \u003d {\"fakeVolumeType\"}"},{"line_number":5283,"context_line":""},{"line_number":5284,"context_line":"        for volumeTypeId in volumeTypeIds:"},{"line_number":5285,"context_line":"            if volumeTypeId:"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_9c78d1fa","line":5282,"range":{"start_line":5282,"start_character":1,"end_line":5282,"end_character":46},"updated":"2017-01-19 04:13:00.000000000","message":"I thought you\u0027ve addressed my comments, but this code is the same as before.","commit_id":"ec82e92085c7d66b39ee5bfbd65877a047574b46"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"330269aab45fb76180bf5b1817f6f8f90b28b24d","unresolved":false,"context_lines":[{"line_number":5279,"context_line":"        # If there are no volumeTypeId specified,"},{"line_number":5280,"context_line":"        # then set it to a list with one entry which is an empty string"},{"line_number":5281,"context_line":"        if volumeTypeIds is None:"},{"line_number":5282,"context_line":"            volumeTypeIds \u003d {\"fakeVolumeType\"}"},{"line_number":5283,"context_line":""},{"line_number":5284,"context_line":"        for volumeTypeId in volumeTypeIds:"},{"line_number":5285,"context_line":"            if volumeTypeId:"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a3905b3_9425eeac","line":5282,"range":{"start_line":5282,"start_character":1,"end_line":5282,"end_character":46},"in_reply_to":"5a3905b3_9c78d1fa","updated":"2017-01-19 14:35:09.000000000","message":"Yes, I will change this now.  Thanks","commit_id":"ec82e92085c7d66b39ee5bfbd65877a047574b46"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e5240cfcc73ce03dde33714666b21262c92c707e","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        # If volume is created as part of a consistency group."},{"line_number":269,"context_line":"        # Change"},{"line_number":270,"context_line":"        grp_id \u003d None"},{"line_number":271,"context_line":"        if \u0027consistencygroup_id\u0027 in volume and volume[\u0027consistencygroup_id\u0027]:"},{"line_number":272,"context_line":"            grp_id \u003d volume[\u0027consistencygroup_id\u0027]"},{"line_number":273,"context_line":"        elif \u0027group_id\u0027 in volume and volume[\u0027group_id\u0027]:"},{"line_number":274,"context_line":"            grp_id \u003d volume[\u0027group_id\u0027]"},{"line_number":275,"context_line":"        if grp_id:"},{"line_number":276,"context_line":"            volumeInstance \u003d self.utils.find_volume_instance("},{"line_number":277,"context_line":"                self.conn, volumeDict, volumeName)"}],"source_content_type":"text/x-python","patch_set":26,"id":"5a3905b3_7a67174d","line":274,"range":{"start_line":271,"start_character":0,"end_line":274,"end_character":39},"updated":"2017-01-22 18:53:12.000000000","message":"It\u0027s better to check \u0027group_id\u0027 first and then check \u0027consistencygroup_id\u0027.  In case both are in volume (although unlikely), \u0027group_id\u0027 should be used.","commit_id":"64069acb808ff7e70efa30e97f5a931e820a1c3a"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"36428042b23435466cf0939fa1a2f5568bf32d79","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        # If volume is created as part of a consistency group."},{"line_number":269,"context_line":"        # Change"},{"line_number":270,"context_line":"        grp_id \u003d None"},{"line_number":271,"context_line":"        if \u0027consistencygroup_id\u0027 in volume and volume[\u0027consistencygroup_id\u0027]:"},{"line_number":272,"context_line":"            grp_id \u003d volume[\u0027consistencygroup_id\u0027]"},{"line_number":273,"context_line":"        elif \u0027group_id\u0027 in volume and volume[\u0027group_id\u0027]:"},{"line_number":274,"context_line":"            grp_id \u003d volume[\u0027group_id\u0027]"},{"line_number":275,"context_line":"        if grp_id:"},{"line_number":276,"context_line":"            volumeInstance \u003d self.utils.find_volume_instance("},{"line_number":277,"context_line":"                self.conn, volumeDict, volumeName)"}],"source_content_type":"text/x-python","patch_set":26,"id":"5a3905b3_54c30f38","line":274,"range":{"start_line":271,"start_character":0,"end_line":274,"end_character":39},"in_reply_to":"5a3905b3_7a67174d","updated":"2017-01-22 19:06:23.000000000","message":"ok","commit_id":"64069acb808ff7e70efa30e97f5a931e820a1c3a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e5240cfcc73ce03dde33714666b21262c92c707e","unresolved":false,"context_lines":[{"line_number":5287,"context_line":"        else:"},{"line_number":5288,"context_line":"            for volumeTypeId in volumeTypeIds:"},{"line_number":5289,"context_line":"                if volumeTypeId:"},{"line_number":5290,"context_line":"                    extraSpecs \u003d self._initial_setup(None, volumeTypeId)"},{"line_number":5291,"context_line":""},{"line_number":5292,"context_line":"                    __, storageSystem \u003d ("},{"line_number":5293,"context_line":"                        self._get_pool_and_storage_system(extraSpecs))"},{"line_number":5294,"context_line":"                    if storageSystem:"},{"line_number":5295,"context_line":"                        storageSystems.add(storageSystem)"},{"line_number":5296,"context_line":""},{"line_number":5297,"context_line":"        if len(storageSystems) !\u003d 1:"},{"line_number":5298,"context_line":"            if not storageSystems:"}],"source_content_type":"text/x-python","patch_set":26,"id":"5a3905b3_1498a777","line":5295,"range":{"start_line":5290,"start_character":0,"end_line":5295,"end_character":57},"updated":"2017-01-22 18:53:12.000000000","message":"This code is the same as lines 5282-5286 except for volumeTypeId.  For efficiency, it is better to write a small inner function and call it with different input parameters.","commit_id":"64069acb808ff7e70efa30e97f5a931e820a1c3a"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"36428042b23435466cf0939fa1a2f5568bf32d79","unresolved":false,"context_lines":[{"line_number":5287,"context_line":"        else:"},{"line_number":5288,"context_line":"            for volumeTypeId in volumeTypeIds:"},{"line_number":5289,"context_line":"                if volumeTypeId:"},{"line_number":5290,"context_line":"                    extraSpecs \u003d self._initial_setup(None, volumeTypeId)"},{"line_number":5291,"context_line":""},{"line_number":5292,"context_line":"                    __, storageSystem \u003d ("},{"line_number":5293,"context_line":"                        self._get_pool_and_storage_system(extraSpecs))"},{"line_number":5294,"context_line":"                    if storageSystem:"},{"line_number":5295,"context_line":"                        storageSystems.add(storageSystem)"},{"line_number":5296,"context_line":""},{"line_number":5297,"context_line":"        if len(storageSystems) !\u003d 1:"},{"line_number":5298,"context_line":"            if not storageSystems:"}],"source_content_type":"text/x-python","patch_set":26,"id":"5a3905b3_74c00b2b","line":5295,"range":{"start_line":5290,"start_character":0,"end_line":5295,"end_character":57},"in_reply_to":"5a3905b3_1498a777","updated":"2017-01-22 19:06:23.000000000","message":"Ok","commit_id":"64069acb808ff7e70efa30e97f5a931e820a1c3a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"36fdce8085240a60043e7f811ce702be58d17797","unresolved":false,"context_lines":[{"line_number":266,"context_line":"                                              extraSpecs))"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"        # If volume is created as part of a consistency group."},{"line_number":269,"context_line":"        # Change"},{"line_number":270,"context_line":"        grp_id \u003d None"},{"line_number":271,"context_line":"        if \u0027group_id\u0027 in volume and volume[\u0027group_id\u0027]:"},{"line_number":272,"context_line":"            grp_id \u003d volume[\u0027group_id\u0027]"}],"source_content_type":"text/x-python","patch_set":27,"id":"5a3905b3_d46b7fef","line":269,"range":{"start_line":269,"start_character":8,"end_line":269,"end_character":16},"updated":"2017-01-22 19:58:24.000000000","message":"Remove this, please","commit_id":"528d1f2f8e4c5edfea3f6a8508c776b6b8858b3d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"36fdce8085240a60043e7f811ce702be58d17797","unresolved":false,"context_lines":[{"line_number":5278,"context_line":"            bGenericVolGroup \u003d True"},{"line_number":5279,"context_line":"            volumeTypeIds \u003d group[\u0027volume_type_ids\u0027]"},{"line_number":5280,"context_line":""},{"line_number":5281,"context_line":"        def inner_setup():"},{"line_number":5282,"context_line":"            extraSpecs \u003d self._initial_setup(None, volumeTypeId\u003dvolumeTypeId)"},{"line_number":5283,"context_line":"            __, storageSystem \u003d ("},{"line_number":5284,"context_line":"                self._get_pool_and_storage_system(extraSpecs))"}],"source_content_type":"text/x-python","patch_set":27,"id":"5a3905b3_542eafa5","line":5281,"range":{"start_line":5281,"start_character":12,"end_line":5281,"end_character":23},"updated":"2017-01-22 19:58:24.000000000","message":"s/inner_setup/_inner_setup\n\nvolumeTypeId needs to be passed in.","commit_id":"528d1f2f8e4c5edfea3f6a8508c776b6b8858b3d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"36fdce8085240a60043e7f811ce702be58d17797","unresolved":false,"context_lines":[{"line_number":5291,"context_line":"        else:"},{"line_number":5292,"context_line":"            for volumeTypeId in volumeTypeIds:"},{"line_number":5293,"context_line":"                if volumeTypeId:"},{"line_number":5294,"context_line":"                    extraSpecs, storageSystems \u003d inner_setup()"},{"line_number":5295,"context_line":"        if len(storageSystems) !\u003d 1:"},{"line_number":5296,"context_line":"            if not storageSystems:"},{"line_number":5297,"context_line":"                msg \u003d (_(\"Failed to get a single storage system \""}],"source_content_type":"text/x-python","patch_set":27,"id":"5a3905b3_941ad77b","line":5294,"updated":"2017-01-22 19:58:24.000000000","message":"Two calls to inner_setup should have different input params.","commit_id":"528d1f2f8e4c5edfea3f6a8508c776b6b8858b3d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a3803663d0dfbd249b78daf85016f4b868f4ad95","unresolved":false,"context_lines":[{"line_number":5270,"context_line":"        bGenericVolGroup \u003d False"},{"line_number":5271,"context_line":""},{"line_number":5272,"context_line":"        # This check is required as the new generic groups"},{"line_number":5273,"context_line":"        # have a different field"},{"line_number":5274,"context_line":"        if \u0027volume_type_id\u0027 in group:"},{"line_number":5275,"context_line":"            volumeTypeIds \u003d group.volume_type_id.split(\",\")"},{"line_number":5276,"context_line":"        elif \u0027volume_type_ids\u0027 in group:"}],"source_content_type":"text/x-python","patch_set":28,"id":"5a3905b3_d7a381fe","line":5273,"updated":"2017-01-22 20:31:15.000000000","message":"Define the following before the if block:\n\nvolumeTypeIds \u003d None","commit_id":"314f9134da36d51900464d6b18e64d71056ca5ec"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"2e7164b18c0e0cb3613e7d20f177dc1ac98fdf71","unresolved":false,"context_lines":[{"line_number":5270,"context_line":"        bGenericVolGroup \u003d False"},{"line_number":5271,"context_line":""},{"line_number":5272,"context_line":"        # This check is required as the new generic groups"},{"line_number":5273,"context_line":"        # have a different field"},{"line_number":5274,"context_line":"        if \u0027volume_type_id\u0027 in group:"},{"line_number":5275,"context_line":"            volumeTypeIds \u003d group.volume_type_id.split(\",\")"},{"line_number":5276,"context_line":"        elif \u0027volume_type_ids\u0027 in group:"}],"source_content_type":"text/x-python","patch_set":28,"id":"5a3905b3_77a9ed7a","line":5273,"in_reply_to":"5a3905b3_d7a381fe","updated":"2017-01-22 21:32:25.000000000","message":"volumeTypeIds \u003d []","commit_id":"314f9134da36d51900464d6b18e64d71056ca5ec"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"2e7164b18c0e0cb3613e7d20f177dc1ac98fdf71","unresolved":false,"context_lines":[{"line_number":5285,"context_line":"                storageSystems.add(storageSystem)"},{"line_number":5286,"context_line":"            return extraSpecs, storageSystems"},{"line_number":5287,"context_line":""},{"line_number":5288,"context_line":"        if bGenericVolGroup and volumeTypeIds is None:"},{"line_number":5289,"context_line":"            extraSpecs, storageSystems \u003d _inner_setup()"},{"line_number":5290,"context_line":"        else:"},{"line_number":5291,"context_line":"            for volumeTypeId in volumeTypeIds:"}],"source_content_type":"text/x-python","patch_set":28,"id":"5a3905b3_37a3e59e","line":5288,"range":{"start_line":5288,"start_character":8,"end_line":5288,"end_character":54},"updated":"2017-01-22 21:32:25.000000000","message":"if bGenericVolGroup and not volumeTypeIds:","commit_id":"314f9134da36d51900464d6b18e64d71056ca5ec"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a3803663d0dfbd249b78daf85016f4b868f4ad95","unresolved":false,"context_lines":[{"line_number":5290,"context_line":"        else:"},{"line_number":5291,"context_line":"            for volumeTypeId in volumeTypeIds:"},{"line_number":5292,"context_line":"                if volumeTypeId:"},{"line_number":5293,"context_line":"                    extraSpecs, storageSystems \u003d _inner_setup(volumeTypeId)"},{"line_number":5294,"context_line":"        if len(storageSystems) !\u003d 1:"},{"line_number":5295,"context_line":"            if not storageSystems:"},{"line_number":5296,"context_line":"                msg \u003d (_(\"Failed to get a single storage system \""}],"source_content_type":"text/x-python","patch_set":28,"id":"5a3905b3_b7f0b5ff","line":5293,"range":{"start_line":5293,"start_character":20,"end_line":5293,"end_character":30},"updated":"2017-01-22 20:31:15.000000000","message":"Are you expecting extraSpecs to be the same for every volume type?  Here the extraSpecs will be overwritten again and again in this loop.","commit_id":"314f9134da36d51900464d6b18e64d71056ca5ec"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"fa89b38916f4911c6f58abfbc6a06a1086da54b4","unresolved":false,"context_lines":[{"line_number":5290,"context_line":"        else:"},{"line_number":5291,"context_line":"            for volumeTypeId in volumeTypeIds:"},{"line_number":5292,"context_line":"                if volumeTypeId:"},{"line_number":5293,"context_line":"                    extraSpecs, storageSystems \u003d _inner_setup(volumeTypeId)"},{"line_number":5294,"context_line":"        if len(storageSystems) !\u003d 1:"},{"line_number":5295,"context_line":"            if not storageSystems:"},{"line_number":5296,"context_line":"                msg \u003d (_(\"Failed to get a single storage system \""}],"source_content_type":"text/x-python","patch_set":28,"id":"5a3905b3_3772057c","line":5293,"range":{"start_line":5293,"start_character":20,"end_line":5293,"end_character":30},"in_reply_to":"5a3905b3_b7f0b5ff","updated":"2017-01-22 20:48:19.000000000","message":"Also only the last storageSystems will be added to the storageSystems.  So this is not right.","commit_id":"314f9134da36d51900464d6b18e64d71056ca5ec"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"f203a726744339db44b6ac0db6978662de87b4d9","unresolved":false,"context_lines":[{"line_number":5290,"context_line":"        else:"},{"line_number":5291,"context_line":"            for volumeTypeId in volumeTypeIds:"},{"line_number":5292,"context_line":"                if volumeTypeId:"},{"line_number":5293,"context_line":"                    extraSpecs, storageSystems \u003d _inner_setup(volumeTypeId)"},{"line_number":5294,"context_line":"        if len(storageSystems) !\u003d 1:"},{"line_number":5295,"context_line":"            if not storageSystems:"},{"line_number":5296,"context_line":"                msg \u003d (_(\"Failed to get a single storage system \""}],"source_content_type":"text/x-python","patch_set":28,"id":"5a3905b3_77ed6dee","line":5293,"range":{"start_line":5293,"start_character":20,"end_line":5293,"end_character":30},"in_reply_to":"5a3905b3_b7f0b5ff","updated":"2017-01-22 21:10:53.000000000","message":"Doesn\u0027t matter as the code with except if storageSystems is \u003e1 or empty","commit_id":"314f9134da36d51900464d6b18e64d71056ca5ec"}],"cinder/volume/drivers/emc/emc_vmax_fc.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7c97565d8526e2ffd976e1cac0333470f8634e40","unresolved":false,"context_lines":[{"line_number":492,"context_line":""},{"line_number":493,"context_line":"    def update_group(self, context, group,"},{"line_number":494,"context_line":"                     add_volumes, remove_volumes):"},{"line_number":495,"context_line":"        \"\"\"Updates LUNs in consistency group.\"\"\""},{"line_number":496,"context_line":"        return self.common.update_group(group, add_volumes,"},{"line_number":497,"context_line":"                                        remove_volumes)"},{"line_number":498,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"da4df55a_8e3bd39b","line":495,"updated":"2016-12-23 20:39:49.000000000","message":"Remove \"consistency\".","commit_id":"a457483f31cd32d123a1b35371b6bc83927e874a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7c97565d8526e2ffd976e1cac0333470f8634e40","unresolved":false,"context_lines":[{"line_number":502,"context_line":"                              source_vols\u003dNone):"},{"line_number":503,"context_line":"        \"\"\"Creates the volume group from source."},{"line_number":504,"context_line":""},{"line_number":505,"context_line":"        Currently the source can only be a group_snapshot."},{"line_number":506,"context_line":""},{"line_number":507,"context_line":"        :param context: the context"},{"line_number":508,"context_line":"        :param group: the consistency group object to be created"}],"source_content_type":"text/x-python","patch_set":13,"id":"da4df55a_ce45db17","line":505,"updated":"2016-12-23 20:39:49.000000000","message":"I believe you have add clone CG in Ocata, so you should be able to support create group from a source group as well.","commit_id":"a457483f31cd32d123a1b35371b6bc83927e874a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7c97565d8526e2ffd976e1cac0333470f8634e40","unresolved":false,"context_lines":[{"line_number":509,"context_line":"        :param volumes: volumes in the consistency group"},{"line_number":510,"context_line":"        :param group_snapshot: the source volume group snapshot"},{"line_number":511,"context_line":"        :param snapshots: snapshots of the source volumes"},{"line_number":512,"context_line":"        :param source_group: the dictionary of a volume group as source."},{"line_number":513,"context_line":"        :param source_vols: a list of volume dictionaries in the source_group."},{"line_number":514,"context_line":"        \"\"\""},{"line_number":515,"context_line":"        return self.common.create_group_from_src("}],"source_content_type":"text/x-python","patch_set":13,"id":"da4df55a_0e48c32c","line":512,"updated":"2016-12-23 20:39:49.000000000","message":"s/dictionary/object","commit_id":"a457483f31cd32d123a1b35371b6bc83927e874a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7c97565d8526e2ffd976e1cac0333470f8634e40","unresolved":false,"context_lines":[{"line_number":510,"context_line":"        :param group_snapshot: the source volume group snapshot"},{"line_number":511,"context_line":"        :param snapshots: snapshots of the source volumes"},{"line_number":512,"context_line":"        :param source_group: the dictionary of a volume group as source."},{"line_number":513,"context_line":"        :param source_vols: a list of volume dictionaries in the source_group."},{"line_number":514,"context_line":"        \"\"\""},{"line_number":515,"context_line":"        return self.common.create_group_from_src("},{"line_number":516,"context_line":"            context, group, volumes, group_snapshot, snapshots, source_group,"}],"source_content_type":"text/x-python","patch_set":13,"id":"da4df55a_2e5747cf","line":513,"updated":"2016-12-23 20:39:49.000000000","message":"s/dictionaries/objects","commit_id":"a457483f31cd32d123a1b35371b6bc83927e874a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"887fe549b7f5ce7b5c1aa69f6fa5147182f930b3","unresolved":false,"context_lines":[{"line_number":503,"context_line":"                              source_vols\u003dNone):"},{"line_number":504,"context_line":"        \"\"\"Creates the volume group from source."},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"        Currently the source can only be a group_snapshot."},{"line_number":507,"context_line":""},{"line_number":508,"context_line":"        :param context: the context"},{"line_number":509,"context_line":"        :param group: the consistency group object to be created"}],"source_content_type":"text/x-python","patch_set":22,"id":"7a3c09a3_731e7260","line":506,"range":{"start_line":506,"start_character":8,"end_line":506,"end_character":58},"updated":"2017-01-16 22:06:33.000000000","message":"Remove this sentence.  This is wrong.","commit_id":"5d7d8e122610be1e4b111d17aa79a1e94c0a07db"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"887fe549b7f5ce7b5c1aa69f6fa5147182f930b3","unresolved":false,"context_lines":[{"line_number":506,"context_line":"        Currently the source can only be a group_snapshot."},{"line_number":507,"context_line":""},{"line_number":508,"context_line":"        :param context: the context"},{"line_number":509,"context_line":"        :param group: the consistency group object to be created"},{"line_number":510,"context_line":"        :param volumes: volumes in the consistency group"},{"line_number":511,"context_line":"        :param group_snapshot: the source volume group snapshot"},{"line_number":512,"context_line":"        :param snapshots: snapshots of the source volumes"}],"source_content_type":"text/x-python","patch_set":22,"id":"7a3c09a3_9323dea6","line":509,"range":{"start_line":509,"start_character":26,"end_line":509,"end_character":37},"updated":"2017-01-16 22:06:33.000000000","message":"Remove \"consistency\".","commit_id":"5d7d8e122610be1e4b111d17aa79a1e94c0a07db"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"887fe549b7f5ce7b5c1aa69f6fa5147182f930b3","unresolved":false,"context_lines":[{"line_number":507,"context_line":""},{"line_number":508,"context_line":"        :param context: the context"},{"line_number":509,"context_line":"        :param group: the consistency group object to be created"},{"line_number":510,"context_line":"        :param volumes: volumes in the consistency group"},{"line_number":511,"context_line":"        :param group_snapshot: the source volume group snapshot"},{"line_number":512,"context_line":"        :param snapshots: snapshots of the source volumes"},{"line_number":513,"context_line":"        :param source_group: the object of a volume group as source."}],"source_content_type":"text/x-python","patch_set":22,"id":"7a3c09a3_d339e6d8","line":510,"updated":"2017-01-16 22:06:33.000000000","message":"volume objects in the group","commit_id":"5d7d8e122610be1e4b111d17aa79a1e94c0a07db"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"887fe549b7f5ce7b5c1aa69f6fa5147182f930b3","unresolved":false,"context_lines":[{"line_number":509,"context_line":"        :param group: the consistency group object to be created"},{"line_number":510,"context_line":"        :param volumes: volumes in the consistency group"},{"line_number":511,"context_line":"        :param group_snapshot: the source volume group snapshot"},{"line_number":512,"context_line":"        :param snapshots: snapshots of the source volumes"},{"line_number":513,"context_line":"        :param source_group: the object of a volume group as source."},{"line_number":514,"context_line":"        :param source_vols: a list of volume objects in the source_group."},{"line_number":515,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":22,"id":"7a3c09a3_b3437a41","line":512,"updated":"2017-01-16 22:06:33.000000000","message":"snapshot objects in the group_snapshot","commit_id":"5d7d8e122610be1e4b111d17aa79a1e94c0a07db"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"887fe549b7f5ce7b5c1aa69f6fa5147182f930b3","unresolved":false,"context_lines":[{"line_number":522,"context_line":"                                         source_cg\u003dNone, source_vols\u003dNone):"},{"line_number":523,"context_line":"        \"\"\"Creates the consistency group from source."},{"line_number":524,"context_line":""},{"line_number":525,"context_line":"        Currently the source can only be a cgsnapshot."},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"        :param context: the context"},{"line_number":528,"context_line":"        :param group: the consistency group object to be created"}],"source_content_type":"text/x-python","patch_set":22,"id":"7a3c09a3_f3498261","line":525,"range":{"start_line":525,"start_character":8,"end_line":525,"end_character":54},"updated":"2017-01-16 22:06:33.000000000","message":"Remove this.","commit_id":"5d7d8e122610be1e4b111d17aa79a1e94c0a07db"}],"cinder/volume/drivers/emc/emc_vmax_iscsi.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7c97565d8526e2ffd976e1cac0333470f8634e40","unresolved":false,"context_lines":[{"line_number":80,"context_line":"              - MVs and SGs not reflecting correct protocol (bug #1640222)"},{"line_number":81,"context_line":"              - Storage assisted volume migration (bp vmax-volume-migration)"},{"line_number":82,"context_line":"              - Support for compression on All Flash"},{"line_number":83,"context_line":"              - Generic Volume Group feature (bp vmax-generic-volume-group)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    \"\"\""},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"da4df55a_6e830f57","line":83,"updated":"2016-12-23 20:39:49.000000000","message":"Change to \"Add CG capability to Generic Volume Groups.\"","commit_id":"a457483f31cd32d123a1b35371b6bc83927e874a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7c97565d8526e2ffd976e1cac0333470f8634e40","unresolved":false,"context_lines":[{"line_number":413,"context_line":""},{"line_number":414,"context_line":"    def update_group(self, context, group,"},{"line_number":415,"context_line":"                     add_volumes, remove_volumes):"},{"line_number":416,"context_line":"        \"\"\"Updates LUNs in consistency group.\"\"\""},{"line_number":417,"context_line":"        return self.common.update_group(group, add_volumes,"},{"line_number":418,"context_line":"                                        remove_volumes)"},{"line_number":419,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"da4df55a_2e92e79e","line":416,"updated":"2016-12-23 20:39:49.000000000","message":"s/consistency group/group","commit_id":"a457483f31cd32d123a1b35371b6bc83927e874a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7c97565d8526e2ffd976e1cac0333470f8634e40","unresolved":false,"context_lines":[{"line_number":423,"context_line":"                              source_vols\u003dNone):"},{"line_number":424,"context_line":"        \"\"\"Creates the volume group from source."},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"        Currently the source can only be a group_snapshot."},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"        :param context: the context"},{"line_number":429,"context_line":"        :param group: the consistency group object to be created"}],"source_content_type":"text/x-python","patch_set":13,"id":"da4df55a_aecb37a4","line":426,"updated":"2016-12-23 20:39:49.000000000","message":"I believe you have add clone CG in Ocata, so you should be able to support create group from a source group as well.","commit_id":"a457483f31cd32d123a1b35371b6bc83927e874a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7c97565d8526e2ffd976e1cac0333470f8634e40","unresolved":false,"context_lines":[{"line_number":430,"context_line":"        :param volumes: volumes in the consistency group"},{"line_number":431,"context_line":"        :param group_snapshot: the source volume group snapshot"},{"line_number":432,"context_line":"        :param snapshots: snapshots of the source volumes"},{"line_number":433,"context_line":"        :param source_group: the dictionary of a volume group as source."},{"line_number":434,"context_line":"        :param source_vols: a list of volume dictionaries in the source_group."},{"line_number":435,"context_line":"        \"\"\""},{"line_number":436,"context_line":"        return self.common.create_group_from_src("}],"source_content_type":"text/x-python","patch_set":13,"id":"da4df55a_cecebbb3","line":433,"updated":"2016-12-23 20:39:49.000000000","message":"This is an object, not dictionary.","commit_id":"a457483f31cd32d123a1b35371b6bc83927e874a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7c97565d8526e2ffd976e1cac0333470f8634e40","unresolved":false,"context_lines":[{"line_number":431,"context_line":"        :param group_snapshot: the source volume group snapshot"},{"line_number":432,"context_line":"        :param snapshots: snapshots of the source volumes"},{"line_number":433,"context_line":"        :param source_group: the dictionary of a volume group as source."},{"line_number":434,"context_line":"        :param source_vols: a list of volume dictionaries in the source_group."},{"line_number":435,"context_line":"        \"\"\""},{"line_number":436,"context_line":"        return self.common.create_group_from_src("},{"line_number":437,"context_line":"            context, group, volumes, group_snapshot, snapshots, source_group,"}],"source_content_type":"text/x-python","patch_set":13,"id":"da4df55a_eec53f8e","line":434,"updated":"2016-12-23 20:39:49.000000000","message":"objects","commit_id":"a457483f31cd32d123a1b35371b6bc83927e874a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"887fe549b7f5ce7b5c1aa69f6fa5147182f930b3","unresolved":false,"context_lines":[{"line_number":424,"context_line":"                              source_vols\u003dNone):"},{"line_number":425,"context_line":"        \"\"\"Creates the volume group from source."},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"        Currently the source can only be a group_snapshot."},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"        :param context: the context"},{"line_number":430,"context_line":"        :param group: the consistency group object to be created"}],"source_content_type":"text/x-python","patch_set":22,"id":"7a3c09a3_d8af4528","line":427,"range":{"start_line":427,"start_character":8,"end_line":427,"end_character":58},"updated":"2017-01-16 22:06:33.000000000","message":"This is not right.  The source can be a group_snapshot or a source group.  Please remove this sentence.","commit_id":"5d7d8e122610be1e4b111d17aa79a1e94c0a07db"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"887fe549b7f5ce7b5c1aa69f6fa5147182f930b3","unresolved":false,"context_lines":[{"line_number":427,"context_line":"        Currently the source can only be a group_snapshot."},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"        :param context: the context"},{"line_number":430,"context_line":"        :param group: the consistency group object to be created"},{"line_number":431,"context_line":"        :param volumes: volumes in the consistency group"},{"line_number":432,"context_line":"        :param group_snapshot: the source volume group snapshot"},{"line_number":433,"context_line":"        :param snapshots: snapshots of the source volumes"}],"source_content_type":"text/x-python","patch_set":22,"id":"7a3c09a3_d87665d6","line":430,"range":{"start_line":430,"start_character":26,"end_line":430,"end_character":37},"updated":"2017-01-16 22:06:33.000000000","message":"Remove \"consistency\".","commit_id":"5d7d8e122610be1e4b111d17aa79a1e94c0a07db"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"887fe549b7f5ce7b5c1aa69f6fa5147182f930b3","unresolved":false,"context_lines":[{"line_number":428,"context_line":""},{"line_number":429,"context_line":"        :param context: the context"},{"line_number":430,"context_line":"        :param group: the consistency group object to be created"},{"line_number":431,"context_line":"        :param volumes: volumes in the consistency group"},{"line_number":432,"context_line":"        :param group_snapshot: the source volume group snapshot"},{"line_number":433,"context_line":"        :param snapshots: snapshots of the source volumes"},{"line_number":434,"context_line":"        :param source_group: the object of a volume group as source."}],"source_content_type":"text/x-python","patch_set":22,"id":"7a3c09a3_187d4db1","line":431,"range":{"start_line":431,"start_character":39,"end_line":431,"end_character":50},"updated":"2017-01-16 22:06:33.000000000","message":"Remove \"consistency\".  s/volumes/volume objects","commit_id":"5d7d8e122610be1e4b111d17aa79a1e94c0a07db"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"887fe549b7f5ce7b5c1aa69f6fa5147182f930b3","unresolved":false,"context_lines":[{"line_number":430,"context_line":"        :param group: the consistency group object to be created"},{"line_number":431,"context_line":"        :param volumes: volumes in the consistency group"},{"line_number":432,"context_line":"        :param group_snapshot: the source volume group snapshot"},{"line_number":433,"context_line":"        :param snapshots: snapshots of the source volumes"},{"line_number":434,"context_line":"        :param source_group: the object of a volume group as source."},{"line_number":435,"context_line":"        :param source_vols: a list of volume objects in the source_group."},{"line_number":436,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":22,"id":"7a3c09a3_b827d9c8","line":433,"range":{"start_line":433,"start_character":26,"end_line":433,"end_character":35},"updated":"2017-01-16 22:06:33.000000000","message":"snapshot objects in the group_snapshot","commit_id":"5d7d8e122610be1e4b111d17aa79a1e94c0a07db"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"887fe549b7f5ce7b5c1aa69f6fa5147182f930b3","unresolved":false,"context_lines":[{"line_number":443,"context_line":"                                         source_cg\u003dNone, source_vols\u003dNone):"},{"line_number":444,"context_line":"        \"\"\"Creates the consistency group from source."},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"        Currently the source can only be a cgsnapshot."},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"        :param context: the context"},{"line_number":449,"context_line":"        :param group: the consistency group object to be created"}],"source_content_type":"text/x-python","patch_set":22,"id":"7a3c09a3_73075218","line":446,"range":{"start_line":446,"start_character":8,"end_line":446,"end_character":54},"updated":"2017-01-16 22:06:33.000000000","message":"This sentence should be removed.","commit_id":"5d7d8e122610be1e4b111d17aa79a1e94c0a07db"}],"releasenotes/notes/vmax-generic-volume-group-56b978523c39faa3.yaml":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"887fe549b7f5ce7b5c1aa69f6fa5147182f930b3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - VMAX driver implementation of Generic Volume Group feature."}],"source_content_type":"text/x-yaml","patch_set":22,"id":"7a3c09a3_05bde101","line":3,"updated":"2017-01-16 22:06:33.000000000","message":"- Add consistent group capability to generic volume groups in the VMAX driver.","commit_id":"5d7d8e122610be1e4b111d17aa79a1e94c0a07db"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e5240cfcc73ce03dde33714666b21262c92c707e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Add consistent group capability to generic volume groups in the VMAX"},{"line_number":4,"context_line":"    driver."}],"source_content_type":"text/x-yaml","patch_set":26,"id":"5a3905b3_5adfbb0c","line":3,"range":{"start_line":3,"start_character":8,"end_line":3,"end_character":18},"updated":"2017-01-22 18:53:12.000000000","message":"nit: s/consistent/consistency","commit_id":"64069acb808ff7e70efa30e97f5a931e820a1c3a"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"36428042b23435466cf0939fa1a2f5568bf32d79","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Add consistent group capability to generic volume groups in the VMAX"},{"line_number":4,"context_line":"    driver."}],"source_content_type":"text/x-yaml","patch_set":26,"id":"5a3905b3_b4e433e1","line":3,"range":{"start_line":3,"start_character":8,"end_line":3,"end_character":18},"in_reply_to":"5a3905b3_5adfbb0c","updated":"2017-01-22 19:06:23.000000000","message":"Ok. Thanks","commit_id":"64069acb808ff7e70efa30e97f5a931e820a1c3a"}]}
