)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"eea25a48d1da837cdf9368dd517ea18371a7a5fd","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"FalconStor: Support generic group"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add CG capability to Groups"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: Ifb298ba827cc575695eec1f629108f53c08b66d0"},{"line_number":12,"context_line":"Closes-Bug: #1682248"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"5f201791_54ce4a82","line":9,"updated":"2017-06-24 19:49:53.000000000","message":"nit: add a period.","commit_id":"216ed69c7c8a8b3bf8b3a5bc7368e784d5a89f32"}],"cinder/tests/unit/volume/drivers/test_falconstor_fss.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"eea25a48d1da837cdf9368dd517ea18371a7a5fd","unresolved":false,"context_lines":[{"line_number":60,"context_line":"          \u0027host\u0027: \"hostname@backend#%s\" % FAKE_ID,"},{"line_number":61,"context_line":"          \u0027volume_type\u0027: None,"},{"line_number":62,"context_line":"          \u0027volume_type_id\u0027: None,"},{"line_number":63,"context_line":"          \u0027consistencygroup_id\u0027: None,"},{"line_number":64,"context_line":"          \u0027group_id\u0027: None,"},{"line_number":65,"context_line":"          \u0027volume_metadata\u0027: [],"},{"line_number":66,"context_line":"          \u0027metadata\u0027: {\"Type\": \"work\"}}"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f201791_34c74e67","line":63,"range":{"start_line":63,"start_character":11,"end_line":63,"end_character":30},"updated":"2017-06-24 19:49:53.000000000","message":"You don\u0027t need this any more.  Please remove it.","commit_id":"216ed69c7c8a8b3bf8b3a5bc7368e784d5a89f32"},{"author":{"_account_id":17959,"name":"Sofie Huang","email":"Soffie.Huang@falconstor.com","username":"Soffie"},"change_message_id":"a5ce2616306e6657d27f481c6928830ebfb681d7","unresolved":false,"context_lines":[{"line_number":60,"context_line":"          \u0027host\u0027: \"hostname@backend#%s\" % FAKE_ID,"},{"line_number":61,"context_line":"          \u0027volume_type\u0027: None,"},{"line_number":62,"context_line":"          \u0027volume_type_id\u0027: None,"},{"line_number":63,"context_line":"          \u0027consistencygroup_id\u0027: None,"},{"line_number":64,"context_line":"          \u0027group_id\u0027: None,"},{"line_number":65,"context_line":"          \u0027volume_metadata\u0027: [],"},{"line_number":66,"context_line":"          \u0027metadata\u0027: {\"Type\": \"work\"}}"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f201791_7a5ea376","line":63,"range":{"start_line":63,"start_character":11,"end_line":63,"end_character":30},"in_reply_to":"5f201791_34c74e67","updated":"2017-06-27 04:31:58.000000000","message":"Done","commit_id":"216ed69c7c8a8b3bf8b3a5bc7368e784d5a89f32"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"eea25a48d1da837cdf9368dd517ea18371a7a5fd","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    \u0027display_name\u0027: \u0027abc123\u0027,"},{"line_number":86,"context_line":"    \u0027display_description\u0027: \u0027\u0027,"},{"line_number":87,"context_line":"    \u0027size\u0027: 1,"},{"line_number":88,"context_line":"    \u0027consistencygroup_id\u0027: fake.GROUP_ID,"},{"line_number":89,"context_line":"    \u0027status\u0027: \u0027available\u0027,"},{"line_number":90,"context_line":"    \u0027host\u0027: \"hostname@backend#%s\" % FAKE_ID}"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f201791_14c4525e","line":88,"range":{"start_line":88,"start_character":5,"end_line":88,"end_character":24},"updated":"2017-06-24 19:49:53.000000000","message":"Please replace consistencygroup_id with group_id in all places.","commit_id":"216ed69c7c8a8b3bf8b3a5bc7368e784d5a89f32"},{"author":{"_account_id":17959,"name":"Sofie Huang","email":"Soffie.Huang@falconstor.com","username":"Soffie"},"change_message_id":"a5ce2616306e6657d27f481c6928830ebfb681d7","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    \u0027display_name\u0027: \u0027abc123\u0027,"},{"line_number":86,"context_line":"    \u0027display_description\u0027: \u0027\u0027,"},{"line_number":87,"context_line":"    \u0027size\u0027: 1,"},{"line_number":88,"context_line":"    \u0027consistencygroup_id\u0027: fake.GROUP_ID,"},{"line_number":89,"context_line":"    \u0027status\u0027: \u0027available\u0027,"},{"line_number":90,"context_line":"    \u0027host\u0027: \"hostname@backend#%s\" % FAKE_ID}"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f201791_1ae20fa1","line":88,"range":{"start_line":88,"start_character":5,"end_line":88,"end_character":24},"in_reply_to":"5f201791_14c4525e","updated":"2017-06-27 04:31:58.000000000","message":"Done","commit_id":"216ed69c7c8a8b3bf8b3a5bc7368e784d5a89f32"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"eea25a48d1da837cdf9368dd517ea18371a7a5fd","unresolved":false,"context_lines":[{"line_number":104,"context_line":"         \u0027name\u0027: \u0027fake_group\u0027,"},{"line_number":105,"context_line":"         \u0027description\u0027: \u0027fake_group_des\u0027,"},{"line_number":106,"context_line":"         \u0027status\u0027: \u0027\u0027}"},{"line_number":107,"context_line":"CG_SNAPSHOT \u003d GROUP.copy()"},{"line_number":108,"context_line":"CG_SNAPSHOT[\u0027group_snapshot\u0027] \u003d {"},{"line_number":109,"context_line":"    \u0027id\u0027: fake.CGSNAPSHOT_ID"},{"line_number":110,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f201791_b4a8fe8b","line":107,"range":{"start_line":107,"start_character":0,"end_line":107,"end_character":11},"updated":"2017-06-24 19:49:53.000000000","message":"Change to GROUP_SNAPSHOT. \n\nWhy is group_snapshot a copy of a group?","commit_id":"216ed69c7c8a8b3bf8b3a5bc7368e784d5a89f32"},{"author":{"_account_id":17959,"name":"Sofie Huang","email":"Soffie.Huang@falconstor.com","username":"Soffie"},"change_message_id":"a5ce2616306e6657d27f481c6928830ebfb681d7","unresolved":false,"context_lines":[{"line_number":104,"context_line":"         \u0027name\u0027: \u0027fake_group\u0027,"},{"line_number":105,"context_line":"         \u0027description\u0027: \u0027fake_group_des\u0027,"},{"line_number":106,"context_line":"         \u0027status\u0027: \u0027\u0027}"},{"line_number":107,"context_line":"CG_SNAPSHOT \u003d GROUP.copy()"},{"line_number":108,"context_line":"CG_SNAPSHOT[\u0027group_snapshot\u0027] \u003d {"},{"line_number":109,"context_line":"    \u0027id\u0027: fake.CGSNAPSHOT_ID"},{"line_number":110,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f201791_1a57af28","line":107,"range":{"start_line":107,"start_character":0,"end_line":107,"end_character":11},"in_reply_to":"5f201791_b4a8fe8b","updated":"2017-06-27 04:31:58.000000000","message":"Done","commit_id":"216ed69c7c8a8b3bf8b3a5bc7368e784d5a89f32"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"eea25a48d1da837cdf9368dd517ea18371a7a5fd","unresolved":false,"context_lines":[{"line_number":105,"context_line":"         \u0027description\u0027: \u0027fake_group_des\u0027,"},{"line_number":106,"context_line":"         \u0027status\u0027: \u0027\u0027}"},{"line_number":107,"context_line":"CG_SNAPSHOT \u003d GROUP.copy()"},{"line_number":108,"context_line":"CG_SNAPSHOT[\u0027group_snapshot\u0027] \u003d {"},{"line_number":109,"context_line":"    \u0027id\u0027: fake.CGSNAPSHOT_ID"},{"line_number":110,"context_line":"}"},{"line_number":111,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f201791_94ad029d","line":108,"range":{"start_line":108,"start_character":0,"end_line":108,"end_character":11},"updated":"2017-06-24 19:49:53.000000000","message":"GROUP_SNAPSHOT","commit_id":"216ed69c7c8a8b3bf8b3a5bc7368e784d5a89f32"},{"author":{"_account_id":17959,"name":"Sofie Huang","email":"Soffie.Huang@falconstor.com","username":"Soffie"},"change_message_id":"a5ce2616306e6657d27f481c6928830ebfb681d7","unresolved":false,"context_lines":[{"line_number":105,"context_line":"         \u0027description\u0027: \u0027fake_group_des\u0027,"},{"line_number":106,"context_line":"         \u0027status\u0027: \u0027\u0027}"},{"line_number":107,"context_line":"CG_SNAPSHOT \u003d GROUP.copy()"},{"line_number":108,"context_line":"CG_SNAPSHOT[\u0027group_snapshot\u0027] \u003d {"},{"line_number":109,"context_line":"    \u0027id\u0027: fake.CGSNAPSHOT_ID"},{"line_number":110,"context_line":"}"},{"line_number":111,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f201791_5a052745","line":108,"range":{"start_line":108,"start_character":0,"end_line":108,"end_character":11},"in_reply_to":"5f201791_94ad029d","updated":"2017-06-27 04:31:58.000000000","message":"Done","commit_id":"216ed69c7c8a8b3bf8b3a5bc7368e784d5a89f32"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"eea25a48d1da837cdf9368dd517ea18371a7a5fd","unresolved":false,"context_lines":[{"line_number":106,"context_line":"         \u0027status\u0027: \u0027\u0027}"},{"line_number":107,"context_line":"CG_SNAPSHOT \u003d GROUP.copy()"},{"line_number":108,"context_line":"CG_SNAPSHOT[\u0027group_snapshot\u0027] \u003d {"},{"line_number":109,"context_line":"    \u0027id\u0027: fake.CGSNAPSHOT_ID"},{"line_number":110,"context_line":"}"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"SNAPSHOT_ID \u003d \"abcdabcd-1234-abcd-1234-abcdeffedcbb\""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f201791_7496e64e","line":109,"range":{"start_line":109,"start_character":15,"end_line":109,"end_character":28},"updated":"2017-06-24 19:49:53.000000000","message":"Please change all cgsnapshot_id to group_snapshot_id","commit_id":"216ed69c7c8a8b3bf8b3a5bc7368e784d5a89f32"},{"author":{"_account_id":17959,"name":"Sofie Huang","email":"Soffie.Huang@falconstor.com","username":"Soffie"},"change_message_id":"a5ce2616306e6657d27f481c6928830ebfb681d7","unresolved":false,"context_lines":[{"line_number":106,"context_line":"         \u0027status\u0027: \u0027\u0027}"},{"line_number":107,"context_line":"CG_SNAPSHOT \u003d GROUP.copy()"},{"line_number":108,"context_line":"CG_SNAPSHOT[\u0027group_snapshot\u0027] \u003d {"},{"line_number":109,"context_line":"    \u0027id\u0027: fake.CGSNAPSHOT_ID"},{"line_number":110,"context_line":"}"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"SNAPSHOT_ID \u003d \"abcdabcd-1234-abcd-1234-abcdeffedcbb\""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f201791_3a238bbf","line":109,"range":{"start_line":109,"start_character":15,"end_line":109,"end_character":28},"in_reply_to":"5f201791_7496e64e","updated":"2017-06-27 04:31:58.000000000","message":"Done","commit_id":"216ed69c7c8a8b3bf8b3a5bc7368e784d5a89f32"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"eea25a48d1da837cdf9368dd517ea18371a7a5fd","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            \u0027volume_size\u0027: 2,"},{"line_number":119,"context_line":"            \u0027display_name\u0027: \"fake_snapshot\","},{"line_number":120,"context_line":"            \u0027display_description\u0027: \u0027\u0027,"},{"line_number":121,"context_line":"            \u0027cgsnapshot_id\u0027: None,"},{"line_number":122,"context_line":"            \u0027cgsnapshot\u0027: None,"},{"line_number":123,"context_line":"            \u0027group_snapshot_id\u0027: None,"},{"line_number":124,"context_line":"            \u0027group_snapshot\u0027: None,"},{"line_number":125,"context_line":"            \u0027volume\u0027: VOLUME,"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f201791_5493ea5b","line":122,"range":{"start_line":121,"start_character":12,"end_line":122,"end_character":31},"updated":"2017-06-24 19:49:53.000000000","message":"Not needed any more.","commit_id":"216ed69c7c8a8b3bf8b3a5bc7368e784d5a89f32"},{"author":{"_account_id":17959,"name":"Sofie Huang","email":"Soffie.Huang@falconstor.com","username":"Soffie"},"change_message_id":"a5ce2616306e6657d27f481c6928830ebfb681d7","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            \u0027volume_size\u0027: 2,"},{"line_number":119,"context_line":"            \u0027display_name\u0027: \"fake_snapshot\","},{"line_number":120,"context_line":"            \u0027display_description\u0027: \u0027\u0027,"},{"line_number":121,"context_line":"            \u0027cgsnapshot_id\u0027: None,"},{"line_number":122,"context_line":"            \u0027cgsnapshot\u0027: None,"},{"line_number":123,"context_line":"            \u0027group_snapshot_id\u0027: None,"},{"line_number":124,"context_line":"            \u0027group_snapshot\u0027: None,"},{"line_number":125,"context_line":"            \u0027volume\u0027: VOLUME,"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f201791_7a16a357","line":122,"range":{"start_line":121,"start_character":12,"end_line":122,"end_character":31},"in_reply_to":"5f201791_5493ea5b","updated":"2017-06-27 04:31:58.000000000","message":"Done","commit_id":"216ed69c7c8a8b3bf8b3a5bc7368e784d5a89f32"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"eea25a48d1da837cdf9368dd517ea18371a7a5fd","unresolved":false,"context_lines":[{"line_number":255,"context_line":"                       return_value\u003dDATA_OUTPUT)"},{"line_number":256,"context_line":"    def test_create_volume(self, mock_create_vdev, mock_add_to_group):"},{"line_number":257,"context_line":"        volume \u003d deepcopy(VOLUME)"},{"line_number":258,"context_line":"        volume[\"consistencygroup_id\"] \u003d fake.GROUP_ID"},{"line_number":259,"context_line":"        volume[\"group_id\"] \u003d fake.GROUP_ID"},{"line_number":260,"context_line":"        self.driver.create_volume(volume)"},{"line_number":261,"context_line":"        mock_create_vdev.assert_called_once_with(volume)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f201791_349cee68","line":258,"range":{"start_line":258,"start_character":16,"end_line":258,"end_character":36},"updated":"2017-06-24 19:49:53.000000000","message":"Remove all places with consistencygroup_id and make sure you have group_id instead.\n\nSimilarly, replace cgsnapshot_id with group_snapshot_id.","commit_id":"216ed69c7c8a8b3bf8b3a5bc7368e784d5a89f32"},{"author":{"_account_id":17959,"name":"Sofie Huang","email":"Soffie.Huang@falconstor.com","username":"Soffie"},"change_message_id":"a5ce2616306e6657d27f481c6928830ebfb681d7","unresolved":false,"context_lines":[{"line_number":255,"context_line":"                       return_value\u003dDATA_OUTPUT)"},{"line_number":256,"context_line":"    def test_create_volume(self, mock_create_vdev, mock_add_to_group):"},{"line_number":257,"context_line":"        volume \u003d deepcopy(VOLUME)"},{"line_number":258,"context_line":"        volume[\"consistencygroup_id\"] \u003d fake.GROUP_ID"},{"line_number":259,"context_line":"        volume[\"group_id\"] \u003d fake.GROUP_ID"},{"line_number":260,"context_line":"        self.driver.create_volume(volume)"},{"line_number":261,"context_line":"        mock_create_vdev.assert_called_once_with(volume)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f201791_7d0b3d23","line":258,"range":{"start_line":258,"start_character":16,"end_line":258,"end_character":36},"in_reply_to":"5f201791_349cee68","updated":"2017-06-27 04:31:58.000000000","message":"Done","commit_id":"216ed69c7c8a8b3bf8b3a5bc7368e784d5a89f32"}],"cinder/volume/drivers/falconstor/fss_common.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3f1525c47656f1194d454a11fd1c2da3248d64a2","unresolved":false,"context_lines":[{"line_number":342,"context_line":"                        \"total_capacity_gb\": total_capacity,"},{"line_number":343,"context_line":"                        \"free_capacity_gb\": free_space,"},{"line_number":344,"context_line":"                        \"reserved_percentage\": 0,"},{"line_number":345,"context_line":"                        \"consistencygroup_support\": True,"},{"line_number":346,"context_line":"                        \"thin_provisioning_support\": thin_enabled,"},{"line_number":347,"context_line":"                        \"thick_provisioning_support\": not thin_enabled"},{"line_number":348,"context_line":"                        }"}],"source_content_type":"text/x-python","patch_set":6,"id":"df140735_593a0434","line":345,"updated":"2017-06-01 17:30:59.000000000","message":"Add consistent_group_snapshot_enabled \u003d True","commit_id":"18802558a692a976719d3d4f234f2db484ac4bb6"},{"author":{"_account_id":17959,"name":"Sofie Huang","email":"Soffie.Huang@falconstor.com","username":"Soffie"},"change_message_id":"2e8958b424fef38cf4b21d1b3ccf4d4dd65555ff","unresolved":false,"context_lines":[{"line_number":342,"context_line":"                        \"total_capacity_gb\": total_capacity,"},{"line_number":343,"context_line":"                        \"free_capacity_gb\": free_space,"},{"line_number":344,"context_line":"                        \"reserved_percentage\": 0,"},{"line_number":345,"context_line":"                        \"consistencygroup_support\": True,"},{"line_number":346,"context_line":"                        \"thin_provisioning_support\": thin_enabled,"},{"line_number":347,"context_line":"                        \"thick_provisioning_support\": not thin_enabled"},{"line_number":348,"context_line":"                        }"}],"source_content_type":"text/x-python","patch_set":6,"id":"df140735_8796c03d","line":345,"in_reply_to":"df140735_593a0434","updated":"2017-06-07 09:57:19.000000000","message":"Done","commit_id":"18802558a692a976719d3d4f234f2db484ac4bb6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3f1525c47656f1194d454a11fd1c2da3248d64a2","unresolved":false,"context_lines":[{"line_number":358,"context_line":"                          {\u0027exc\u0027: exc})"},{"line_number":359,"context_line":"        return self._stats"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    def create_consistencygroup(self, context, group):"},{"line_number":362,"context_line":"        \"\"\"Creates a consistencygroup.\"\"\""},{"line_number":363,"context_line":"        self.proxy.create_group(group)"},{"line_number":364,"context_line":"        model_update \u003d {\u0027status\u0027: fields.ConsistencyGroupStatus.AVAILABLE}"}],"source_content_type":"text/x-python","patch_set":6,"id":"df140735_b97000a7","line":361,"range":{"start_line":361,"start_character":8,"end_line":361,"end_character":31},"updated":"2017-06-01 17:30:59.000000000","message":"Please rename this to _create_consistencygroup","commit_id":"18802558a692a976719d3d4f234f2db484ac4bb6"},{"author":{"_account_id":17959,"name":"Sofie Huang","email":"Soffie.Huang@falconstor.com","username":"Soffie"},"change_message_id":"2e8958b424fef38cf4b21d1b3ccf4d4dd65555ff","unresolved":false,"context_lines":[{"line_number":358,"context_line":"                          {\u0027exc\u0027: exc})"},{"line_number":359,"context_line":"        return self._stats"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    def create_consistencygroup(self, context, group):"},{"line_number":362,"context_line":"        \"\"\"Creates a consistencygroup.\"\"\""},{"line_number":363,"context_line":"        self.proxy.create_group(group)"},{"line_number":364,"context_line":"        model_update \u003d {\u0027status\u0027: fields.ConsistencyGroupStatus.AVAILABLE}"}],"source_content_type":"text/x-python","patch_set":6,"id":"df140735_679bac65","line":361,"range":{"start_line":361,"start_character":8,"end_line":361,"end_character":31},"in_reply_to":"df140735_b97000a7","updated":"2017-06-07 09:57:19.000000000","message":"Done","commit_id":"18802558a692a976719d3d4f234f2db484ac4bb6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3f1525c47656f1194d454a11fd1c2da3248d64a2","unresolved":false,"context_lines":[{"line_number":364,"context_line":"        model_update \u003d {\u0027status\u0027: fields.ConsistencyGroupStatus.AVAILABLE}"},{"line_number":365,"context_line":"        return model_update"},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"    def delete_consistencygroup(self, context, group, volumes):"},{"line_number":368,"context_line":"        \"\"\"Deletes a consistency group.\"\"\""},{"line_number":369,"context_line":"        self.proxy.destroy_group(group)"},{"line_number":370,"context_line":"        volume_updates \u003d []"},{"line_number":371,"context_line":"        for volume in volumes:"}],"source_content_type":"text/x-python","patch_set":6,"id":"df140735_f960b8a7","line":368,"range":{"start_line":367,"start_character":8,"end_line":368,"end_character":31},"updated":"2017-06-01 17:30:59.000000000","message":"Please rename this to _delete_consistencygroup","commit_id":"18802558a692a976719d3d4f234f2db484ac4bb6"},{"author":{"_account_id":17959,"name":"Sofie Huang","email":"Soffie.Huang@falconstor.com","username":"Soffie"},"change_message_id":"2e8958b424fef38cf4b21d1b3ccf4d4dd65555ff","unresolved":false,"context_lines":[{"line_number":364,"context_line":"        model_update \u003d {\u0027status\u0027: fields.ConsistencyGroupStatus.AVAILABLE}"},{"line_number":365,"context_line":"        return model_update"},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"    def delete_consistencygroup(self, context, group, volumes):"},{"line_number":368,"context_line":"        \"\"\"Deletes a consistency group.\"\"\""},{"line_number":369,"context_line":"        self.proxy.destroy_group(group)"},{"line_number":370,"context_line":"        volume_updates \u003d []"},{"line_number":371,"context_line":"        for volume in volumes:"}],"source_content_type":"text/x-python","patch_set":6,"id":"df140735_47a428a6","line":368,"range":{"start_line":367,"start_character":8,"end_line":368,"end_character":31},"in_reply_to":"df140735_f960b8a7","updated":"2017-06-07 09:57:19.000000000","message":"Done","commit_id":"18802558a692a976719d3d4f234f2db484ac4bb6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3f1525c47656f1194d454a11fd1c2da3248d64a2","unresolved":false,"context_lines":[{"line_number":378,"context_line":"        model_update \u003d {\u0027status\u0027: group[\u0027status\u0027]}"},{"line_number":379,"context_line":"        return model_update, volume_updates"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"    def update_consistencygroup(self, context, group,"},{"line_number":382,"context_line":"                                add_volumes\u003dNone, remove_volumes\u003dNone):"},{"line_number":383,"context_line":"        addvollist \u003d []"},{"line_number":384,"context_line":"        remvollist \u003d []"}],"source_content_type":"text/x-python","patch_set":6,"id":"df140735_d963b4b0","line":381,"range":{"start_line":381,"start_character":8,"end_line":381,"end_character":31},"updated":"2017-06-01 17:30:59.000000000","message":"Please rename this to _update_consistencygroup","commit_id":"18802558a692a976719d3d4f234f2db484ac4bb6"},{"author":{"_account_id":17959,"name":"Sofie Huang","email":"Soffie.Huang@falconstor.com","username":"Soffie"},"change_message_id":"2e8958b424fef38cf4b21d1b3ccf4d4dd65555ff","unresolved":false,"context_lines":[{"line_number":378,"context_line":"        model_update \u003d {\u0027status\u0027: group[\u0027status\u0027]}"},{"line_number":379,"context_line":"        return model_update, volume_updates"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"    def update_consistencygroup(self, context, group,"},{"line_number":382,"context_line":"                                add_volumes\u003dNone, remove_volumes\u003dNone):"},{"line_number":383,"context_line":"        addvollist \u003d []"},{"line_number":384,"context_line":"        remvollist \u003d []"}],"source_content_type":"text/x-python","patch_set":6,"id":"df140735_27a13495","line":381,"range":{"start_line":381,"start_character":8,"end_line":381,"end_character":31},"in_reply_to":"df140735_d963b4b0","updated":"2017-06-07 09:57:19.000000000","message":"Done","commit_id":"18802558a692a976719d3d4f234f2db484ac4bb6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3f1525c47656f1194d454a11fd1c2da3248d64a2","unresolved":false,"context_lines":[{"line_number":393,"context_line":"                             remvollist\u003dremvollist)"},{"line_number":394,"context_line":"        return None, None, None"},{"line_number":395,"context_line":""},{"line_number":396,"context_line":"    def create_cgsnapshot(self, context, cgsnapshot, snapshots):"},{"line_number":397,"context_line":"        \"\"\"Creates a cgsnapshot.\"\"\""},{"line_number":398,"context_line":"        cgsnapshot[\u0027consistencygroup_id\u0027] \u003d cgsnapshot.get(\u0027group_id\u0027)"},{"line_number":399,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"df140735_f90558c3","line":396,"range":{"start_line":396,"start_character":8,"end_line":396,"end_character":25},"updated":"2017-06-01 17:30:59.000000000","message":"Rename to _create_cgsnapshot","commit_id":"18802558a692a976719d3d4f234f2db484ac4bb6"},{"author":{"_account_id":17959,"name":"Sofie Huang","email":"Soffie.Huang@falconstor.com","username":"Soffie"},"change_message_id":"2e8958b424fef38cf4b21d1b3ccf4d4dd65555ff","unresolved":false,"context_lines":[{"line_number":393,"context_line":"                             remvollist\u003dremvollist)"},{"line_number":394,"context_line":"        return None, None, None"},{"line_number":395,"context_line":""},{"line_number":396,"context_line":"    def create_cgsnapshot(self, context, cgsnapshot, snapshots):"},{"line_number":397,"context_line":"        \"\"\"Creates a cgsnapshot.\"\"\""},{"line_number":398,"context_line":"        cgsnapshot[\u0027consistencygroup_id\u0027] \u003d cgsnapshot.get(\u0027group_id\u0027)"},{"line_number":399,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"df140735_07aab06f","line":396,"range":{"start_line":396,"start_character":8,"end_line":396,"end_character":25},"in_reply_to":"df140735_f90558c3","updated":"2017-06-07 09:57:19.000000000","message":"Done","commit_id":"18802558a692a976719d3d4f234f2db484ac4bb6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3f1525c47656f1194d454a11fd1c2da3248d64a2","unresolved":false,"context_lines":[{"line_number":395,"context_line":""},{"line_number":396,"context_line":"    def create_cgsnapshot(self, context, cgsnapshot, snapshots):"},{"line_number":397,"context_line":"        \"\"\"Creates a cgsnapshot.\"\"\""},{"line_number":398,"context_line":"        cgsnapshot[\u0027consistencygroup_id\u0027] \u003d cgsnapshot.get(\u0027group_id\u0027)"},{"line_number":399,"context_line":"        try:"},{"line_number":400,"context_line":"            self.proxy.create_cgsnapshot(cgsnapshot)"},{"line_number":401,"context_line":"        except Exception as e:"}],"source_content_type":"text/x-python","patch_set":6,"id":"df140735_99cf7caf","line":398,"range":{"start_line":398,"start_character":44,"end_line":398,"end_character":70},"updated":"2017-06-01 17:30:59.000000000","message":"cgsnapshot is an object.  Please don\u0027t use get for object.  cgsnapshot.group_id should do it.\n\nAlso please modify rest_proxy.py and not to use consistencygroup_id any more. change to group_id instead.  So this line won\u0027t be needed.","commit_id":"18802558a692a976719d3d4f234f2db484ac4bb6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3f1525c47656f1194d454a11fd1c2da3248d64a2","unresolved":false,"context_lines":[{"line_number":400,"context_line":"            self.proxy.create_cgsnapshot(cgsnapshot)"},{"line_number":401,"context_line":"        except Exception as e:"},{"line_number":402,"context_line":"            msg \u003d _(\u0027Failed to create cg snapshot %(id)s \u0027"},{"line_number":403,"context_line":"                    \u0027due to %(reason)s.\u0027) % {\u0027id\u0027: snapshots.id,"},{"line_number":404,"context_line":"                                             \u0027reason\u0027: six.text_type(e)}"},{"line_number":405,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":406,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"df140735_d93a9496","line":403,"range":{"start_line":403,"start_character":51,"end_line":403,"end_character":63},"updated":"2017-06-01 17:30:59.000000000","message":"This will throw an exception.  snapshots is a list of Snapshot objects.  Should use cgsnapshot.id instead.","commit_id":"18802558a692a976719d3d4f234f2db484ac4bb6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3f1525c47656f1194d454a11fd1c2da3248d64a2","unresolved":false,"context_lines":[{"line_number":413,"context_line":"        model_update \u003d {\u0027status\u0027: \u0027available\u0027}"},{"line_number":414,"context_line":"        return model_update, snapshot_updates"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"    def delete_cgsnapshot(self, context, cgsnapshot, snapshots):"},{"line_number":417,"context_line":"        \"\"\"Deletes a cgsnapshot.\"\"\""},{"line_number":418,"context_line":"        cgsnapshot[\u0027consistencygroup_id\u0027] \u003d cgsnapshot.get(\u0027group_id\u0027)"},{"line_number":419,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"df140735_d90854da","line":416,"range":{"start_line":416,"start_character":8,"end_line":416,"end_character":25},"updated":"2017-06-01 17:30:59.000000000","message":"Rename to _delete_cgsnapshot","commit_id":"18802558a692a976719d3d4f234f2db484ac4bb6"},{"author":{"_account_id":17959,"name":"Sofie Huang","email":"Soffie.Huang@falconstor.com","username":"Soffie"},"change_message_id":"2e8958b424fef38cf4b21d1b3ccf4d4dd65555ff","unresolved":false,"context_lines":[{"line_number":413,"context_line":"        model_update \u003d {\u0027status\u0027: \u0027available\u0027}"},{"line_number":414,"context_line":"        return model_update, snapshot_updates"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"    def delete_cgsnapshot(self, context, cgsnapshot, snapshots):"},{"line_number":417,"context_line":"        \"\"\"Deletes a cgsnapshot.\"\"\""},{"line_number":418,"context_line":"        cgsnapshot[\u0027consistencygroup_id\u0027] \u003d cgsnapshot.get(\u0027group_id\u0027)"},{"line_number":419,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"df140735_a7be64b1","line":416,"range":{"start_line":416,"start_character":8,"end_line":416,"end_character":25},"in_reply_to":"df140735_d90854da","updated":"2017-06-07 09:57:19.000000000","message":"Done","commit_id":"18802558a692a976719d3d4f234f2db484ac4bb6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3f1525c47656f1194d454a11fd1c2da3248d64a2","unresolved":false,"context_lines":[{"line_number":415,"context_line":""},{"line_number":416,"context_line":"    def delete_cgsnapshot(self, context, cgsnapshot, snapshots):"},{"line_number":417,"context_line":"        \"\"\"Deletes a cgsnapshot.\"\"\""},{"line_number":418,"context_line":"        cgsnapshot[\u0027consistencygroup_id\u0027] \u003d cgsnapshot.get(\u0027group_id\u0027)"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"        try:"},{"line_number":421,"context_line":"            self.proxy.delete_cgsnapshot(cgsnapshot)"}],"source_content_type":"text/x-python","patch_set":6,"id":"df140735_591d640d","line":418,"range":{"start_line":418,"start_character":8,"end_line":418,"end_character":70},"updated":"2017-06-01 17:30:59.000000000","message":"Change consistencygroup_id to group_id in rest_proxy.py and get rid of the above line.","commit_id":"18802558a692a976719d3d4f234f2db484ac4bb6"},{"author":{"_account_id":17959,"name":"Sofie Huang","email":"Soffie.Huang@falconstor.com","username":"Soffie"},"change_message_id":"2e8958b424fef38cf4b21d1b3ccf4d4dd65555ff","unresolved":false,"context_lines":[{"line_number":415,"context_line":""},{"line_number":416,"context_line":"    def delete_cgsnapshot(self, context, cgsnapshot, snapshots):"},{"line_number":417,"context_line":"        \"\"\"Deletes a cgsnapshot.\"\"\""},{"line_number":418,"context_line":"        cgsnapshot[\u0027consistencygroup_id\u0027] \u003d cgsnapshot.get(\u0027group_id\u0027)"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"        try:"},{"line_number":421,"context_line":"            self.proxy.delete_cgsnapshot(cgsnapshot)"}],"source_content_type":"text/x-python","patch_set":6,"id":"df140735_3b3d712c","line":418,"range":{"start_line":418,"start_character":8,"end_line":418,"end_character":70},"in_reply_to":"df140735_591d640d","updated":"2017-06-07 09:57:19.000000000","message":"Done","commit_id":"18802558a692a976719d3d4f234f2db484ac4bb6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3f1525c47656f1194d454a11fd1c2da3248d64a2","unresolved":false,"context_lines":[{"line_number":438,"context_line":"        # Add the volume to a cg in case volume requested a cgid or group_id."},{"line_number":439,"context_line":"        # If both cg_id and group_id exists in a volume. group_id will take"},{"line_number":440,"context_line":"        # place."},{"line_number":441,"context_line":"        consistency_group \u003d volume.get(\u0027consistencygroup_id\u0027)"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"        # if cg_id and group_id are both exists, we gives priority to group_id."},{"line_number":444,"context_line":"        if volume.get(\u0027group_id\u0027):"}],"source_content_type":"text/x-python","patch_set":6,"id":"df140735_d9d61428","line":441,"range":{"start_line":441,"start_character":40,"end_line":441,"end_character":59},"updated":"2017-06-01 17:30:59.000000000","message":"Change to group_id.  Also volume is an object.  Use volume.group_id","commit_id":"18802558a692a976719d3d4f234f2db484ac4bb6"},{"author":{"_account_id":17959,"name":"Sofie Huang","email":"Soffie.Huang@falconstor.com","username":"Soffie"},"change_message_id":"2e8958b424fef38cf4b21d1b3ccf4d4dd65555ff","unresolved":false,"context_lines":[{"line_number":438,"context_line":"        # Add the volume to a cg in case volume requested a cgid or group_id."},{"line_number":439,"context_line":"        # If both cg_id and group_id exists in a volume. group_id will take"},{"line_number":440,"context_line":"        # place."},{"line_number":441,"context_line":"        consistency_group \u003d volume.get(\u0027consistencygroup_id\u0027)"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"        # if cg_id and group_id are both exists, we gives priority to group_id."},{"line_number":444,"context_line":"        if volume.get(\u0027group_id\u0027):"}],"source_content_type":"text/x-python","patch_set":6,"id":"df140735_d67becbb","line":441,"range":{"start_line":441,"start_character":40,"end_line":441,"end_character":59},"in_reply_to":"df140735_d9d61428","updated":"2017-06-07 09:57:19.000000000","message":"Done","commit_id":"18802558a692a976719d3d4f234f2db484ac4bb6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3f1525c47656f1194d454a11fd1c2da3248d64a2","unresolved":false,"context_lines":[{"line_number":442,"context_line":""},{"line_number":443,"context_line":"        # if cg_id and group_id are both exists, we gives priority to group_id."},{"line_number":444,"context_line":"        if volume.get(\u0027group_id\u0027):"},{"line_number":445,"context_line":"            consistency_group \u003d volume.get(\u0027group_id\u0027)"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"        if consistency_group:"},{"line_number":448,"context_line":"            self.proxy._add_volume_to_consistency_group("}],"source_content_type":"text/x-python","patch_set":6,"id":"df140735_f9bc38dd","line":445,"range":{"start_line":445,"start_character":32,"end_line":445,"end_character":54},"updated":"2017-06-01 17:30:59.000000000","message":"volume.group_id","commit_id":"18802558a692a976719d3d4f234f2db484ac4bb6"},{"author":{"_account_id":17959,"name":"Sofie Huang","email":"Soffie.Huang@falconstor.com","username":"Soffie"},"change_message_id":"2e8958b424fef38cf4b21d1b3ccf4d4dd65555ff","unresolved":false,"context_lines":[{"line_number":442,"context_line":""},{"line_number":443,"context_line":"        # if cg_id and group_id are both exists, we gives priority to group_id."},{"line_number":444,"context_line":"        if volume.get(\u0027group_id\u0027):"},{"line_number":445,"context_line":"            consistency_group \u003d volume.get(\u0027group_id\u0027)"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"        if consistency_group:"},{"line_number":448,"context_line":"            self.proxy._add_volume_to_consistency_group("}],"source_content_type":"text/x-python","patch_set":6,"id":"df140735_76442075","line":445,"range":{"start_line":445,"start_character":32,"end_line":445,"end_character":54},"in_reply_to":"df140735_f9bc38dd","updated":"2017-06-07 09:57:19.000000000","message":"Done","commit_id":"18802558a692a976719d3d4f234f2db484ac4bb6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3f1525c47656f1194d454a11fd1c2da3248d64a2","unresolved":false,"context_lines":[{"line_number":446,"context_line":""},{"line_number":447,"context_line":"        if consistency_group:"},{"line_number":448,"context_line":"            self.proxy._add_volume_to_consistency_group("},{"line_number":449,"context_line":"                volume[\u0027consistencygroup_id\u0027],"},{"line_number":450,"context_line":"                vol_name"},{"line_number":451,"context_line":"            )"},{"line_number":452,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"df140735_59cb2471","line":449,"range":{"start_line":449,"start_character":16,"end_line":449,"end_character":45},"updated":"2017-06-01 17:30:59.000000000","message":"Don\u0027t use consistencygroup_id","commit_id":"18802558a692a976719d3d4f234f2db484ac4bb6"},{"author":{"_account_id":17959,"name":"Sofie Huang","email":"Soffie.Huang@falconstor.com","username":"Soffie"},"change_message_id":"2e8958b424fef38cf4b21d1b3ccf4d4dd65555ff","unresolved":false,"context_lines":[{"line_number":446,"context_line":""},{"line_number":447,"context_line":"        if consistency_group:"},{"line_number":448,"context_line":"            self.proxy._add_volume_to_consistency_group("},{"line_number":449,"context_line":"                volume[\u0027consistencygroup_id\u0027],"},{"line_number":450,"context_line":"                vol_name"},{"line_number":451,"context_line":"            )"},{"line_number":452,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"df140735_b62f58a6","line":449,"range":{"start_line":449,"start_character":16,"end_line":449,"end_character":45},"in_reply_to":"df140735_59cb2471","updated":"2017-06-07 09:57:19.000000000","message":"Done","commit_id":"18802558a692a976719d3d4f234f2db484ac4bb6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3f1525c47656f1194d454a11fd1c2da3248d64a2","unresolved":false,"context_lines":[{"line_number":476,"context_line":"        \"\"\"Creates a group from source.\"\"\""},{"line_number":477,"context_line":"        # the driver treats a group as a CG internally."},{"line_number":478,"context_line":"        # We proxy the calls to the CG api."},{"line_number":479,"context_line":"        return self.create_consistencygroup_from_src(context, group, volumes,"},{"line_number":480,"context_line":"                                                     group_snapshot, snapshots,"},{"line_number":481,"context_line":"                                                     source_group, source_vols)"},{"line_number":482,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"df140735_b984800d","line":479,"range":{"start_line":479,"start_character":20,"end_line":479,"end_character":52},"updated":"2017-06-01 17:30:59.000000000","message":"Can you point to me the line # of create_consistencygroup_from_src?  I couldn\u0027t find it in this file.","commit_id":"18802558a692a976719d3d4f234f2db484ac4bb6"},{"author":{"_account_id":17959,"name":"Sofie Huang","email":"Soffie.Huang@falconstor.com","username":"Soffie"},"change_message_id":"2e8958b424fef38cf4b21d1b3ccf4d4dd65555ff","unresolved":false,"context_lines":[{"line_number":476,"context_line":"        \"\"\"Creates a group from source.\"\"\""},{"line_number":477,"context_line":"        # the driver treats a group as a CG internally."},{"line_number":478,"context_line":"        # We proxy the calls to the CG api."},{"line_number":479,"context_line":"        return self.create_consistencygroup_from_src(context, group, volumes,"},{"line_number":480,"context_line":"                                                     group_snapshot, snapshots,"},{"line_number":481,"context_line":"                                                     source_group, source_vols)"},{"line_number":482,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"df140735_218420b1","line":479,"range":{"start_line":479,"start_character":20,"end_line":479,"end_character":52},"in_reply_to":"df140735_b984800d","updated":"2017-06-07 09:57:19.000000000","message":"Sorry, this was merged failure, we prepare this feature for further patch.","commit_id":"18802558a692a976719d3d4f234f2db484ac4bb6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3f1525c47656f1194d454a11fd1c2da3248d64a2","unresolved":false,"context_lines":[{"line_number":450,"context_line":"                vol_name"},{"line_number":451,"context_line":"            )"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"    def create_group(self, context, group):"},{"line_number":454,"context_line":"        \"\"\"Creates a group.\"\"\""},{"line_number":455,"context_line":"        # the driver treats a group as a CG internally."},{"line_number":456,"context_line":"        # We proxy the calls to the CG api."},{"line_number":457,"context_line":"        return self.create_consistencygroup(context, group)"},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"    def delete_group(self, context, group, volumes):"},{"line_number":460,"context_line":"        \"\"\"Deletes a group.\"\"\""},{"line_number":461,"context_line":"        # the driver treats a group as a CG internally."},{"line_number":462,"context_line":"        # We proxy the calls to the CG api."},{"line_number":463,"context_line":"        return self.delete_consistencygroup(context, group, volumes)"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"    def update_group(self, context, group,"},{"line_number":466,"context_line":"                     add_volumes\u003dNone, remove_volumes\u003dNone):"},{"line_number":467,"context_line":"        \"\"\"Updates a group.\"\"\""},{"line_number":468,"context_line":"        # the driver treats a group as a CG internally."},{"line_number":469,"context_line":"        # We proxy the calls to the CG api."},{"line_number":470,"context_line":"        return self.update_consistencygroup(context, group, add_volumes,"},{"line_number":471,"context_line":"                                            remove_volumes)"},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"    def create_group_from_src(self, context, group, volumes,"},{"line_number":474,"context_line":"                              group_snapshot\u003dNone, snapshots\u003dNone,"},{"line_number":475,"context_line":"                              source_group\u003dNone, source_vols\u003dNone):"},{"line_number":476,"context_line":"        \"\"\"Creates a group from source.\"\"\""},{"line_number":477,"context_line":"        # the driver treats a group as a CG internally."},{"line_number":478,"context_line":"        # We proxy the calls to the CG api."},{"line_number":479,"context_line":"        return self.create_consistencygroup_from_src(context, group, volumes,"},{"line_number":480,"context_line":"                                                     group_snapshot, snapshots,"},{"line_number":481,"context_line":"                                                     source_group, source_vols)"},{"line_number":482,"context_line":""},{"line_number":483,"context_line":"    def create_group_snapshot(self, context, group_snapshot, snapshots):"},{"line_number":484,"context_line":"        \"\"\"Creates a group_snapshot.\"\"\""},{"line_number":485,"context_line":"        # the driver treats a group as a CG internally."},{"line_number":486,"context_line":"        # We proxy the calls to the CG api."},{"line_number":487,"context_line":"        return self.create_cgsnapshot(context, group_snapshot, snapshots)"},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"    def delete_group_snapshot(self, context, group_snapshot, snapshots):"},{"line_number":490,"context_line":"        \"\"\"Deletes a group_snapshot.\"\"\""},{"line_number":491,"context_line":"        # the driver treats a group as a CG internally."},{"line_number":492,"context_line":"        # We proxy the calls to the CG api."},{"line_number":493,"context_line":"        return self.delete_cgsnapshot(context, group_snapshot, snapshots)"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"    def manage_existing(self, volume, existing_ref):"},{"line_number":496,"context_line":"        \"\"\"Convert an existing FSS volume to a Cinder volume."}],"source_content_type":"text/x-python","patch_set":6,"id":"df140735_59f56482","line":493,"range":{"start_line":453,"start_character":0,"end_line":493,"end_character":73},"updated":"2017-06-01 17:30:59.000000000","message":"Please check the group type before handling it as a consistency group.  If the group type does not support consistent group snapshot, raise NotImplementedError so it can be handled by the generic implementation.\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/dell_emc/scaleio/driver.py#L1279","commit_id":"18802558a692a976719d3d4f234f2db484ac4bb6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"eea25a48d1da837cdf9368dd517ea18371a7a5fd","unresolved":false,"context_lines":[{"line_number":357,"context_line":"    def _create_consistencygroup(self, context, group):"},{"line_number":358,"context_line":"        \"\"\"Creates a consistencygroup.\"\"\""},{"line_number":359,"context_line":"        self.proxy.create_group(group)"},{"line_number":360,"context_line":"        model_update \u003d {\u0027status\u0027: fields.ConsistencyGroupStatus.AVAILABLE}"},{"line_number":361,"context_line":"        return model_update"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"    def _delete_consistencygroup(self, context, group, volumes):"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f201791_f48b161c","line":360,"range":{"start_line":360,"start_character":41,"end_line":360,"end_character":63},"updated":"2017-06-24 19:49:53.000000000","message":"Use GroupStatus","commit_id":"216ed69c7c8a8b3bf8b3a5bc7368e784d5a89f32"},{"author":{"_account_id":17959,"name":"Sofie Huang","email":"Soffie.Huang@falconstor.com","username":"Soffie"},"change_message_id":"a5ce2616306e6657d27f481c6928830ebfb681d7","unresolved":false,"context_lines":[{"line_number":357,"context_line":"    def _create_consistencygroup(self, context, group):"},{"line_number":358,"context_line":"        \"\"\"Creates a consistencygroup.\"\"\""},{"line_number":359,"context_line":"        self.proxy.create_group(group)"},{"line_number":360,"context_line":"        model_update \u003d {\u0027status\u0027: fields.ConsistencyGroupStatus.AVAILABLE}"},{"line_number":361,"context_line":"        return model_update"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"    def _delete_consistencygroup(self, context, group, volumes):"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f201791_bd7c3583","line":360,"range":{"start_line":360,"start_character":41,"end_line":360,"end_character":63},"in_reply_to":"5f201791_f48b161c","updated":"2017-06-27 04:31:58.000000000","message":"Done","commit_id":"216ed69c7c8a8b3bf8b3a5bc7368e784d5a89f32"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"eea25a48d1da837cdf9368dd517ea18371a7a5fd","unresolved":false,"context_lines":[{"line_number":434,"context_line":"        # place."},{"line_number":435,"context_line":""},{"line_number":436,"context_line":"        # if cg_id and group_id are both exists, we gives priority to group_id."},{"line_number":437,"context_line":"        consistency_group \u003d volume[\u0027consistencygroup_id\u0027]"},{"line_number":438,"context_line":"        if volume.group_id:"},{"line_number":439,"context_line":"            consistency_group \u003d volume.group_id"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"        if consistency_group:"},{"line_number":442,"context_line":"            self.proxy._add_volume_to_consistency_group("}],"source_content_type":"text/x-python","patch_set":8,"id":"5f201791_d4901a4d","line":439,"range":{"start_line":437,"start_character":1,"end_line":439,"end_character":47},"updated":"2017-06-24 19:49:53.000000000","message":"We only need to handle group_id","commit_id":"216ed69c7c8a8b3bf8b3a5bc7368e784d5a89f32"},{"author":{"_account_id":17959,"name":"Sofie Huang","email":"Soffie.Huang@falconstor.com","username":"Soffie"},"change_message_id":"a5ce2616306e6657d27f481c6928830ebfb681d7","unresolved":false,"context_lines":[{"line_number":434,"context_line":"        # place."},{"line_number":435,"context_line":""},{"line_number":436,"context_line":"        # if cg_id and group_id are both exists, we gives priority to group_id."},{"line_number":437,"context_line":"        consistency_group \u003d volume[\u0027consistencygroup_id\u0027]"},{"line_number":438,"context_line":"        if volume.group_id:"},{"line_number":439,"context_line":"            consistency_group \u003d volume.group_id"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"        if consistency_group:"},{"line_number":442,"context_line":"            self.proxy._add_volume_to_consistency_group("}],"source_content_type":"text/x-python","patch_set":8,"id":"5f201791_9dfdf96f","line":439,"range":{"start_line":437,"start_character":1,"end_line":439,"end_character":47},"in_reply_to":"5f201791_d4901a4d","updated":"2017-06-27 04:31:58.000000000","message":"Done","commit_id":"216ed69c7c8a8b3bf8b3a5bc7368e784d5a89f32"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"eea25a48d1da837cdf9368dd517ea18371a7a5fd","unresolved":false,"context_lines":[{"line_number":448,"context_line":"        \"\"\"Creates a group.\"\"\""},{"line_number":449,"context_line":"        # the driver treats a group as a CG internally."},{"line_number":450,"context_line":"        # We proxy the calls to the CG api."},{"line_number":451,"context_line":"        return self._create_consistencygroup(context, group)"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"    def delete_group(self, context, group, volumes):"},{"line_number":454,"context_line":"        \"\"\"Deletes a group.\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f201791_f490b645","line":451,"range":{"start_line":451,"start_character":8,"end_line":451,"end_character":60},"updated":"2017-06-24 19:49:53.000000000","message":"Check whether the group supports consistent group snapshot.  If so, call self._create_consistencygroup(context, group); otherwise, raise NotImplementedError.  See example here: \n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/dell_emc/scaleio/driver.py#L1483\n\nUse the similar logic for delete_group, update_group, create_group_snapshot, delete_group_snapshot, and create_group_from_src.","commit_id":"216ed69c7c8a8b3bf8b3a5bc7368e784d5a89f32"},{"author":{"_account_id":17959,"name":"Sofie Huang","email":"Soffie.Huang@falconstor.com","username":"Soffie"},"change_message_id":"a5ce2616306e6657d27f481c6928830ebfb681d7","unresolved":false,"context_lines":[{"line_number":448,"context_line":"        \"\"\"Creates a group.\"\"\""},{"line_number":449,"context_line":"        # the driver treats a group as a CG internally."},{"line_number":450,"context_line":"        # We proxy the calls to the CG api."},{"line_number":451,"context_line":"        return self._create_consistencygroup(context, group)"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"    def delete_group(self, context, group, volumes):"},{"line_number":454,"context_line":"        \"\"\"Deletes a group.\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f201791_1d4d69c3","line":451,"range":{"start_line":451,"start_character":8,"end_line":451,"end_character":60},"in_reply_to":"5f201791_f490b645","updated":"2017-06-27 04:31:58.000000000","message":"Done","commit_id":"216ed69c7c8a8b3bf8b3a5bc7368e784d5a89f32"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"eea25a48d1da837cdf9368dd517ea18371a7a5fd","unresolved":false,"context_lines":[{"line_number":475,"context_line":"        # the driver treats a group as a CG internally."},{"line_number":476,"context_line":"        # We proxy the calls to the CG api."},{"line_number":477,"context_line":"        return self._delete_cgsnapshot(context, group_snapshot, snapshots)"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"    def manage_existing(self, volume, existing_ref):"},{"line_number":480,"context_line":"        \"\"\"Convert an existing FSS volume to a Cinder volume."},{"line_number":481,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f201791_d495ba34","line":478,"updated":"2017-06-24 19:49:53.000000000","message":"Where is create_group_from_src()?","commit_id":"216ed69c7c8a8b3bf8b3a5bc7368e784d5a89f32"},{"author":{"_account_id":17959,"name":"Sofie Huang","email":"Soffie.Huang@falconstor.com","username":"Soffie"},"change_message_id":"a5ce2616306e6657d27f481c6928830ebfb681d7","unresolved":false,"context_lines":[{"line_number":475,"context_line":"        # the driver treats a group as a CG internally."},{"line_number":476,"context_line":"        # We proxy the calls to the CG api."},{"line_number":477,"context_line":"        return self._delete_cgsnapshot(context, group_snapshot, snapshots)"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"    def manage_existing(self, volume, existing_ref):"},{"line_number":480,"context_line":"        \"\"\"Convert an existing FSS volume to a Cinder volume."},{"line_number":481,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f201791_1d57a928","line":478,"in_reply_to":"5f201791_d495ba34","updated":"2017-06-27 04:31:58.000000000","message":"Currently, we do not support this, thanks.","commit_id":"216ed69c7c8a8b3bf8b3a5bc7368e784d5a89f32"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f55e36261082b2a684542d44f64588153a64f5cc","unresolved":false,"context_lines":[{"line_number":431,"context_line":""},{"line_number":432,"context_line":"    def _add_to_group_if_needed(self, volume, vol_name):"},{"line_number":433,"context_line":"        if volume.group_id:"},{"line_number":434,"context_line":"            self.proxy._add_volume_to_group(volume.group_id, vol_name)"},{"line_number":435,"context_line":""},{"line_number":436,"context_line":"    def create_group(self, context, group):"},{"line_number":437,"context_line":"        \"\"\"Creates a group.\"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"3f1d235d_919b04c8","line":434,"updated":"2017-07-02 14:49:16.000000000","message":"I think you need to check if volume_utils.is_group_a_cg_snapshot_type(volume.group) is True.  If so, add volume to your CG on the backend, otherwise don\u0027t add it because Cinder will manage the default group relationship.","commit_id":"5c93ee5e9cc34dac80726469da574678054e8736"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f55e36261082b2a684542d44f64588153a64f5cc","unresolved":false,"context_lines":[{"line_number":469,"context_line":"            return self._delete_cgsnapshot(context, group_snapshot, snapshots)"},{"line_number":470,"context_line":"        else:"},{"line_number":471,"context_line":"            raise NotImplementedError()"},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"    def manage_existing(self, volume, existing_ref):"},{"line_number":474,"context_line":"        \"\"\"Convert an existing FSS volume to a Cinder volume."},{"line_number":475,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3f1d235d_b15e0010","line":472,"updated":"2017-07-02 14:49:16.000000000","message":"Does your driver not support create_group_from_src?  If so, implement it like this:\n\nif volume_utils.is_group_a_cg_snapshot_type(group_snapshot):\n    # print an error message that your driver does not support it and raise VolumeBackendAPIException exception.\nelse:\n    raise NotImplementedError()","commit_id":"5c93ee5e9cc34dac80726469da574678054e8736"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4a3d252f32601489349a480042dd11fec4d9938e","unresolved":false,"context_lines":[{"line_number":417,"context_line":"            self.proxy.delete_cgsnapshot(cgsnapshot)"},{"line_number":418,"context_line":"        except Exception as e:"},{"line_number":419,"context_line":"            msg \u003d _(\u0027Failed to delete cgsnapshot %(id)s \u0027"},{"line_number":420,"context_line":"                    \u0027due to %(reason)s.\u0027) % {\u0027id\u0027: snapshots.id,"},{"line_number":421,"context_line":"                                             \u0027reason\u0027: six.text_type(e)}"},{"line_number":422,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":423,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_d3d88080","line":420,"range":{"start_line":420,"start_character":51,"end_line":420,"end_character":63},"updated":"2017-07-10 13:59:36.000000000","message":"snapshots.id will raise an exception because snapshots is a list.  You should use \"cgsnapshot.id\" instead.","commit_id":"a5aecbccf11cb6f8d8ffa710153c3d29d7106ddd"},{"author":{"_account_id":17959,"name":"Sofie Huang","email":"Soffie.Huang@falconstor.com","username":"Soffie"},"change_message_id":"13ace4d41ccd2774eaef78bdfab488a56c3b8630","unresolved":false,"context_lines":[{"line_number":417,"context_line":"            self.proxy.delete_cgsnapshot(cgsnapshot)"},{"line_number":418,"context_line":"        except Exception as e:"},{"line_number":419,"context_line":"            msg \u003d _(\u0027Failed to delete cgsnapshot %(id)s \u0027"},{"line_number":420,"context_line":"                    \u0027due to %(reason)s.\u0027) % {\u0027id\u0027: snapshots.id,"},{"line_number":421,"context_line":"                                             \u0027reason\u0027: six.text_type(e)}"},{"line_number":422,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":423,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_d7017306","line":420,"range":{"start_line":420,"start_character":51,"end_line":420,"end_character":63},"in_reply_to":"3f1d235d_d3d88080","updated":"2017-07-11 06:14:36.000000000","message":"Done","commit_id":"a5aecbccf11cb6f8d8ffa710153c3d29d7106ddd"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4a3d252f32601489349a480042dd11fec4d9938e","unresolved":false,"context_lines":[{"line_number":477,"context_line":"                              source_group\u003dNone, source_vols\u003dNone):"},{"line_number":478,"context_line":"        \"\"\"Creates a group from source.\"\"\""},{"line_number":479,"context_line":"        if volume_utils.is_group_a_cg_snapshot_type(group_snapshot):"},{"line_number":480,"context_line":"            msg \u003d _(\u0027Do not support the create_group_from_src feature.\u0027)"},{"line_number":481,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":482,"context_line":"        else:"},{"line_number":483,"context_line":"            raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_700402c7","line":480,"range":{"start_line":480,"start_character":21,"end_line":480,"end_character":70},"updated":"2017-07-10 13:59:36.000000000","message":"FalconStor driver does not support the create_group_from_src feature.","commit_id":"a5aecbccf11cb6f8d8ffa710153c3d29d7106ddd"},{"author":{"_account_id":17959,"name":"Sofie Huang","email":"Soffie.Huang@falconstor.com","username":"Soffie"},"change_message_id":"13ace4d41ccd2774eaef78bdfab488a56c3b8630","unresolved":false,"context_lines":[{"line_number":477,"context_line":"                              source_group\u003dNone, source_vols\u003dNone):"},{"line_number":478,"context_line":"        \"\"\"Creates a group from source.\"\"\""},{"line_number":479,"context_line":"        if volume_utils.is_group_a_cg_snapshot_type(group_snapshot):"},{"line_number":480,"context_line":"            msg \u003d _(\u0027Do not support the create_group_from_src feature.\u0027)"},{"line_number":481,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":482,"context_line":"        else:"},{"line_number":483,"context_line":"            raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_77129f5a","line":480,"range":{"start_line":480,"start_character":21,"end_line":480,"end_character":70},"in_reply_to":"3f1d235d_700402c7","updated":"2017-07-11 06:14:36.000000000","message":"Done","commit_id":"a5aecbccf11cb6f8d8ffa710153c3d29d7106ddd"}],"cinder/volume/drivers/falconstor/rest_proxy.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f55e36261082b2a684542d44f64588153a64f5cc","unresolved":false,"context_lines":[{"line_number":562,"context_line":""},{"line_number":563,"context_line":"    def create_cgsnapshot(self, cgsnapshot):"},{"line_number":564,"context_line":"        group_name \u003d self._get_group_name_from_id("},{"line_number":565,"context_line":"            cgsnapshot[\u0027group_id\u0027])"},{"line_number":566,"context_line":"        gsnap_name \u003d self._encode_name(cgsnapshot[\u0027id\u0027])"},{"line_number":567,"context_line":"        gid \u003d self._get_fss_gid_from_name(group_name)"},{"line_number":568,"context_line":"        vidlist \u003d self._get_vdev_id_from_group_id(gid)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f1d235d_31a8b0d9","line":565,"range":{"start_line":565,"start_character":12,"end_line":565,"end_character":34},"updated":"2017-07-02 14:49:16.000000000","message":"cgsnapshot.group_id","commit_id":"5c93ee5e9cc34dac80726469da574678054e8736"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f55e36261082b2a684542d44f64588153a64f5cc","unresolved":false,"context_lines":[{"line_number":599,"context_line":""},{"line_number":600,"context_line":"    def delete_cgsnapshot(self, cgsnapshot):"},{"line_number":601,"context_line":"        group_name \u003d self._get_group_name_from_id("},{"line_number":602,"context_line":"            cgsnapshot[\u0027group_id\u0027])"},{"line_number":603,"context_line":"        encode_snap_name \u003d self._encode_name(cgsnapshot[\u0027id\u0027])"},{"line_number":604,"context_line":"        gid \u003d self._get_fss_gid_from_name(group_name)"},{"line_number":605,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3f1d235d_51a56c03","line":602,"range":{"start_line":602,"start_character":12,"end_line":602,"end_character":34},"updated":"2017-07-02 14:49:16.000000000","message":"cgsnapshot.group_id","commit_id":"5c93ee5e9cc34dac80726469da574678054e8736"}]}
