)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"7305e823bc753c0c20ac3bd0321a97c723d66bfd","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Elad Zucker \u003celadz@hexsys-solutions.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-12-20 00:17:52 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"XtremIO: Implements generic groups for the XtremIO Driver."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"implements groups functionality using consistency groups."},{"line_number":10,"context_line":"adding unit-tests."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"ba5201f7_879e5cb6","line":7,"range":{"start_line":7,"start_character":57,"end_line":7,"end_character":58},"updated":"2017-01-11 01:54:51.000000000","message":"\u0027.\u0027 is not required at the end of the summary line","commit_id":"5f3fcfaac53cb671b1a876727ba46832f986bdfc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"df35940a6fc8a1d3fcd710133ed36366e1be14f8","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Elad Zucker \u003celadz@hexsys-solutions.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-12-20 00:17:52 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"XtremIO: Implements generic groups for the XtremIO Driver."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"implements groups functionality using consistency groups."},{"line_number":10,"context_line":"adding unit-tests."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7a3c09a3_cf5beff4","line":7,"range":{"start_line":7,"start_character":9,"end_line":7,"end_character":57},"updated":"2017-01-17 04:05:07.000000000","message":"XtremIO: Add CG capability to groups","commit_id":"5f3fcfaac53cb671b1a876727ba46832f986bdfc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"df35940a6fc8a1d3fcd710133ed36366e1be14f8","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"XtremIO: Implements generic groups for the XtremIO Driver."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"implements groups functionality using consistency groups."},{"line_number":10,"context_line":"adding unit-tests."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I0276769b5457961dafbfc4e7f570ac67aa41bbe3"},{"line_number":13,"context_line":"implements: blueprint xtremio-cg-over-generic-groups"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7a3c09a3_0f72577b","line":10,"range":{"start_line":9,"start_character":0,"end_line":10,"end_character":18},"updated":"2017-01-17 04:05:07.000000000","message":"Add consistency group capability to generic volume groups.","commit_id":"5f3fcfaac53cb671b1a876727ba46832f986bdfc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"df35940a6fc8a1d3fcd710133ed36366e1be14f8","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"implements groups functionality using consistency groups."},{"line_number":10,"context_line":"adding unit-tests."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I0276769b5457961dafbfc4e7f570ac67aa41bbe3"},{"line_number":13,"context_line":"implements: blueprint xtremio-cg-over-generic-groups"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7a3c09a3_2f6b9386","line":11,"updated":"2017-01-17 04:05:07.000000000","message":"Add a DocImpact flag","commit_id":"5f3fcfaac53cb671b1a876727ba46832f986bdfc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"042fe883937e6a5ca7d9b5e83a4f0d323f042a4a","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Elad Zucker \u003celadz@hexsys-solutions.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-01-18 23:04:30 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"XtremIO: ADD CG capability to groups."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add consistency group capability to generic volume groups."},{"line_number":10,"context_line":"adding unit-tests."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7a3c09a3_e22920f4","line":7,"range":{"start_line":7,"start_character":9,"end_line":7,"end_character":12},"updated":"2017-01-18 23:20:15.000000000","message":"s/ADD/Add","commit_id":"f8ac435f65ec890dbb036d522a3015ae3173a5b5"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"042fe883937e6a5ca7d9b5e83a4f0d323f042a4a","unresolved":false,"context_lines":[{"line_number":7,"context_line":"XtremIO: ADD CG capability to groups."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add consistency group capability to generic volume groups."},{"line_number":10,"context_line":"adding unit-tests."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"DocImpact"},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7a3c09a3_623e102b","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":18},"updated":"2017-01-18 23:20:15.000000000","message":"This line is not necessary in the commit message.","commit_id":"f8ac435f65ec890dbb036d522a3015ae3173a5b5"}],"cinder/tests/unit/volume/drivers/dell_emc/test_xtremio.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6e6050ce298c43d2e0fd48a60c2868ab149d0cfb","unresolved":false,"context_lines":[{"line_number":961,"context_line":"                                 remove_volumes\u003d[d.test_volume2])"},{"line_number":962,"context_line":"        self.assertEqual(1, len(xms_data[\u0027consistency-group-volumes\u0027]))"},{"line_number":963,"context_line":""},{"line_number":964,"context_line":"    def test_create_group(self, req):"},{"line_number":965,"context_line":"        \"\"\"Test create group.\"\"\""},{"line_number":966,"context_line":""},{"line_number":967,"context_line":"        req.side_effect \u003d xms_request"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a3905b3_79eca08f","line":964,"range":{"start_line":964,"start_character":8,"end_line":964,"end_character":25},"updated":"2017-01-20 23:26:05.000000000","message":"test_create_group_snapshot","commit_id":"904b1a8b81284b7aacac19f4015bc72519f74671"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6e6050ce298c43d2e0fd48a60c2868ab149d0cfb","unresolved":false,"context_lines":[{"line_number":962,"context_line":"        self.assertEqual(1, len(xms_data[\u0027consistency-group-volumes\u0027]))"},{"line_number":963,"context_line":""},{"line_number":964,"context_line":"    def test_create_group(self, req):"},{"line_number":965,"context_line":"        \"\"\"Test create group.\"\"\""},{"line_number":966,"context_line":""},{"line_number":967,"context_line":"        req.side_effect \u003d xms_request"},{"line_number":968,"context_line":"        d \u003d self.data"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a3905b3_b9fe0836","line":965,"range":{"start_line":965,"start_character":23,"end_line":965,"end_character":28},"updated":"2017-01-20 23:26:05.000000000","message":"group snapshot","commit_id":"904b1a8b81284b7aacac19f4015bc72519f74671"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6e6050ce298c43d2e0fd48a60c2868ab149d0cfb","unresolved":false,"context_lines":[{"line_number":979,"context_line":"        self.assertEqual((None, None), res)"},{"line_number":980,"context_line":""},{"line_number":981,"context_line":"    def test_group_delete(self, req):"},{"line_number":982,"context_line":"        \"\"\"\"test delete group\"\"\""},{"line_number":983,"context_line":"        req.side_effect \u003d xms_request"},{"line_number":984,"context_line":"        d \u003d self.data"},{"line_number":985,"context_line":"        snapshot_obj \u003d fake_snapshot.fake_snapshot_obj(d.context)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a3905b3_998a2cbe","line":982,"range":{"start_line":982,"start_character":12,"end_line":982,"end_character":29},"updated":"2017-01-20 23:26:05.000000000","message":"Capital T and add period: Test delete group.","commit_id":"904b1a8b81284b7aacac19f4015bc72519f74671"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6e6050ce298c43d2e0fd48a60c2868ab149d0cfb","unresolved":false,"context_lines":[{"line_number":991,"context_line":"        self.driver.db \u003d mock.Mock()"},{"line_number":992,"context_line":"        (self.driver.db."},{"line_number":993,"context_line":"         volume_get_all_by_group.return_value) \u003d [mock.MagicMock()]"},{"line_number":994,"context_line":"        self.driver.create_cgsnapshot(d.context, d.cgsnapshot, [snapshot_obj])"},{"line_number":995,"context_line":"        self.driver.delete_group(d.context, d.group, [])"},{"line_number":996,"context_line":""},{"line_number":997,"context_line":"    def test_group_snapshot(self, req):"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a3905b3_59b7e485","line":994,"range":{"start_line":994,"start_character":20,"end_line":994,"end_character":37},"updated":"2017-01-20 23:26:05.000000000","message":"create_group_snapshot","commit_id":"904b1a8b81284b7aacac19f4015bc72519f74671"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"206b18d8ae51838335794ef556569131f1c314df","unresolved":false,"context_lines":[{"line_number":979,"context_line":"        self.assertEqual((None, None), res)"},{"line_number":980,"context_line":""},{"line_number":981,"context_line":"    def test_group_delete(self, req):"},{"line_number":982,"context_line":"        \"\"\"\"Test delete group\"\"\""},{"line_number":983,"context_line":"        req.side_effect \u003d xms_request"},{"line_number":984,"context_line":"        d \u003d self.data"},{"line_number":985,"context_line":"        snapshot_obj \u003d fake_snapshot.fake_snapshot_obj(d.context)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a3905b3_92eafaaa","line":982,"updated":"2017-01-21 15:04:21.000000000","message":"Add a period at the end of the sentence.","commit_id":"6fb2f85275916b8f5dd05f8bf4dc293463e92050"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"206b18d8ae51838335794ef556569131f1c314df","unresolved":false,"context_lines":[{"line_number":991,"context_line":"        self.driver.db \u003d mock.Mock()"},{"line_number":992,"context_line":"        (self.driver.db."},{"line_number":993,"context_line":"         volume_get_all_by_group.return_value) \u003d [mock.MagicMock()]"},{"line_number":994,"context_line":"        self.driver.create_group_snapshot(d.context, d.cgsnapshot, [snapshot_obj])"},{"line_number":995,"context_line":"        self.driver.delete_group(d.context, d.group, [])"},{"line_number":996,"context_line":""},{"line_number":997,"context_line":"    def test_group_snapshot(self, req):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a3905b3_b74d2840","line":994,"range":{"start_line":994,"start_character":8,"end_line":994,"end_character":82},"updated":"2017-01-21 15:04:21.000000000","message":"This failed the Jenkins:\n\n/cinder/tests/unit/volume/drivers/dell_emc/test_xtremio.py:994:80: E501 line too long (82 \u003e 79 characters)","commit_id":"6fb2f85275916b8f5dd05f8bf4dc293463e92050"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"ba78df8fc9267276de59146ba6555f936decf46d","unresolved":false,"context_lines":[{"line_number":936,"context_line":"                          self.driver.create_consistencygroup_from_src,"},{"line_number":937,"context_line":"                          d.context, d.group, [], None, None, None, None)"},{"line_number":938,"context_line":""},{"line_number":939,"context_line":"#   #### Groups ####"},{"line_number":940,"context_line":"    def test_group_create(self, req):"},{"line_number":941,"context_line":"        \"\"\"Test group create.\"\"\""},{"line_number":942,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a3905b3_579aff6e","line":939,"range":{"start_line":939,"start_character":0,"end_line":939,"end_character":1},"updated":"2017-01-23 20:27:29.000000000","message":"typo?","commit_id":"ca77a489dc5a172b89f0609e2901e399daea925b"}],"cinder/tests/unit/volume/drivers/emc/test_emc_xtremio.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"954086c1d41dbfe4cf4ae8e1f16b40e99a76134e","unresolved":false,"context_lines":[{"line_number":940,"context_line":"                          d.context, d.group, [], None, None, None, None)"},{"line_number":941,"context_line":""},{"line_number":942,"context_line":"#   #### Groups ####"},{"line_number":943,"context_line":"    @mock.patch(\u0027cinder.objects.snapshot.SnapshotList.get_all_for_cgsnapshot\u0027)"},{"line_number":944,"context_line":"    def test_group_create(self, get_all_for_cgsnapshot, req):"},{"line_number":945,"context_line":"        \"\"\"Test group create\"\"\""},{"line_number":946,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_8413ef5b","line":943,"updated":"2016-12-20 04:14:39.000000000","message":"Your unit tests are full of consistency groups and cgsnapshots.  These tests are for generic volume groups so it should not be testing consistency groups and cgsnapshots.","commit_id":"5f3fcfaac53cb671b1a876727ba46832f986bdfc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"521135424d1425ab2897adf38228f1094787fe41","unresolved":false,"context_lines":[{"line_number":940,"context_line":"                          d.context, d.group, [], None, None, None, None)"},{"line_number":941,"context_line":""},{"line_number":942,"context_line":"#   #### Groups ####"},{"line_number":943,"context_line":"    @mock.patch(\u0027cinder.objects.snapshot.SnapshotList.get_all_for_cgsnapshot\u0027)"},{"line_number":944,"context_line":"    def test_group_create(self, get_all_for_cgsnapshot, req):"},{"line_number":945,"context_line":"        \"\"\"Test group create\"\"\""},{"line_number":946,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a3c09a3_aa7bbf79","line":943,"in_reply_to":"1a6eadb0_8413ef5b","updated":"2017-01-17 21:09:38.000000000","message":"Please ignore the above comments as you are creating CGs with groups calls.  \n\nI have another question.  Is this mock.patch necessary?  I don\u0027t see cinder.objects.snapshot.SnapshotList.get_all_for_cgsnapshot gets called in the XtremIO driver.","commit_id":"5f3fcfaac53cb671b1a876727ba46832f986bdfc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"954086c1d41dbfe4cf4ae8e1f16b40e99a76134e","unresolved":false,"context_lines":[{"line_number":942,"context_line":"#   #### Groups ####"},{"line_number":943,"context_line":"    @mock.patch(\u0027cinder.objects.snapshot.SnapshotList.get_all_for_cgsnapshot\u0027)"},{"line_number":944,"context_line":"    def test_group_create(self, get_all_for_cgsnapshot, req):"},{"line_number":945,"context_line":"        \"\"\"Test group create\"\"\""},{"line_number":946,"context_line":""},{"line_number":947,"context_line":"        req.side_effect \u003d xms_request"},{"line_number":948,"context_line":"        d \u003d self.data"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_108b9a1f","line":945,"updated":"2016-12-20 04:14:39.000000000","message":"Period missing at the end of the docstring.","commit_id":"5f3fcfaac53cb671b1a876727ba46832f986bdfc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"954086c1d41dbfe4cf4ae8e1f16b40e99a76134e","unresolved":false,"context_lines":[{"line_number":954,"context_line":"        self.assertEqual(1, len(xms_data[\u0027consistency-groups\u0027]))"},{"line_number":955,"context_line":""},{"line_number":956,"context_line":"    @mock.patch(\u0027cinder.objects.snapshot.SnapshotList.get_all_for_cgsnapshot\u0027)"},{"line_number":957,"context_line":"    def test_cg_update(self, get_all_for_cgsnapshot, req):"},{"line_number":958,"context_line":"        \"\"\"Test group update\"\"\""},{"line_number":959,"context_line":""},{"line_number":960,"context_line":"        req.side_effect \u003d xms_request"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_d09a026e","line":957,"updated":"2016-12-20 04:14:39.000000000","message":"test_group_update","commit_id":"5f3fcfaac53cb671b1a876727ba46832f986bdfc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"954086c1d41dbfe4cf4ae8e1f16b40e99a76134e","unresolved":false,"context_lines":[{"line_number":955,"context_line":""},{"line_number":956,"context_line":"    @mock.patch(\u0027cinder.objects.snapshot.SnapshotList.get_all_for_cgsnapshot\u0027)"},{"line_number":957,"context_line":"    def test_cg_update(self, get_all_for_cgsnapshot, req):"},{"line_number":958,"context_line":"        \"\"\"Test group update\"\"\""},{"line_number":959,"context_line":""},{"line_number":960,"context_line":"        req.side_effect \u003d xms_request"},{"line_number":961,"context_line":"        d \u003d self.data"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_30825601","line":958,"updated":"2016-12-20 04:14:39.000000000","message":"Period","commit_id":"5f3fcfaac53cb671b1a876727ba46832f986bdfc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"954086c1d41dbfe4cf4ae8e1f16b40e99a76134e","unresolved":false,"context_lines":[{"line_number":974,"context_line":""},{"line_number":975,"context_line":"    @mock.patch(\u0027cinder.objects.snapshot.SnapshotList.get_all_for_cgsnapshot\u0027)"},{"line_number":976,"context_line":"    def test_create_group(self, get_all_for_cgsnapshot, req):"},{"line_number":977,"context_line":"        \"\"\"Test create group\"\"\""},{"line_number":978,"context_line":""},{"line_number":979,"context_line":"        req.side_effect \u003d xms_request"},{"line_number":980,"context_line":"        d \u003d self.data"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_9077aa3a","line":977,"updated":"2016-12-20 04:14:39.000000000","message":"Period","commit_id":"5f3fcfaac53cb671b1a876727ba46832f986bdfc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"954086c1d41dbfe4cf4ae8e1f16b40e99a76134e","unresolved":false,"context_lines":[{"line_number":987,"context_line":"                                              d.test_volume2])"},{"line_number":988,"context_line":"        self.driver.db \u003d mock.Mock()"},{"line_number":989,"context_line":"        (self.driver.db."},{"line_number":990,"context_line":"         volume_get_all_by_group.return_value) \u003d [mock.MagicMock()]"},{"line_number":991,"context_line":"        res \u003d self.driver.create_group_snapshot(d.context, d.cgsnapshot,"},{"line_number":992,"context_line":"                                                [snapshot_obj])"},{"line_number":993,"context_line":"        self.assertEqual((None, None), res)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_509c325d","line":990,"updated":"2016-12-20 04:14:39.000000000","message":"Driver should not need to read from db.","commit_id":"5f3fcfaac53cb671b1a876727ba46832f986bdfc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"042fe883937e6a5ca7d9b5e83a4f0d323f042a4a","unresolved":false,"context_lines":[{"line_number":938,"context_line":"                          d.context, d.group, [], None, None, None, None)"},{"line_number":939,"context_line":""},{"line_number":940,"context_line":"#   #### Groups ####"},{"line_number":941,"context_line":"    @mock.patch(\u0027cinder.objects.snapshot.SnapshotList.get_all_for_cgsnapshot\u0027)"},{"line_number":942,"context_line":"    def test_group_create(self, get_all_for_cgsnapshot, req):"},{"line_number":943,"context_line":"        \"\"\"Test group create.\"\"\""},{"line_number":944,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7a3c09a3_e2dbe01f","line":941,"range":{"start_line":941,"start_character":4,"end_line":941,"end_character":78},"updated":"2017-01-18 23:20:15.000000000","message":"I know I asked about this earlier.  Can you tell me where this is used?  I can\u0027t find get_all_for_cgsnapshot in the XtremIO driver.","commit_id":"f8ac435f65ec890dbb036d522a3015ae3173a5b5"}],"cinder/volume/drivers/dell_emc/xtremio.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6e6050ce298c43d2e0fd48a60c2868ab149d0cfb","unresolved":false,"context_lines":[{"line_number":415,"context_line":"        self.client.req(\u0027volumes\u0027, \u0027POST\u0027, data)"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"        # add the volume to a cg in case volume requested a cgid or group_id."},{"line_number":418,"context_line":"        # if both cg_id and group_id exists in a volume. group_id will take"},{"line_number":419,"context_line":"        # place."},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"        consistency_group \u003d volume.get(\u0027consistencygroup_id\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a3905b3_d9e674b3","line":418,"range":{"start_line":418,"start_character":10,"end_line":418,"end_character":12},"updated":"2017-01-20 23:26:05.000000000","message":"nit: s/if/If\n\nChange the period to a comma before group_id.","commit_id":"904b1a8b81284b7aacac19f4015bc72519f74671"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"206b18d8ae51838335794ef556569131f1c314df","unresolved":false,"context_lines":[{"line_number":415,"context_line":"        self.client.req(\u0027volumes\u0027, \u0027POST\u0027, data)"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"        # add the volume to a cg in case volume requested a cgid or group_id,"},{"line_number":418,"context_line":"        # if both cg_id and group_id exists in a volume. group_id will take"},{"line_number":419,"context_line":"        # place."},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"        consistency_group \u003d volume.get(\u0027consistencygroup_id\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a3905b3_5296d23f","line":418,"range":{"start_line":418,"start_character":55,"end_line":418,"end_character":56},"updated":"2017-01-21 15:04:21.000000000","message":"s/./,","commit_id":"6fb2f85275916b8f5dd05f8bf4dc293463e92050"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"206b18d8ae51838335794ef556569131f1c314df","unresolved":false,"context_lines":[{"line_number":415,"context_line":"        self.client.req(\u0027volumes\u0027, \u0027POST\u0027, data)"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"        # add the volume to a cg in case volume requested a cgid or group_id,"},{"line_number":418,"context_line":"        # if both cg_id and group_id exists in a volume. group_id will take"},{"line_number":419,"context_line":"        # place."},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"        consistency_group \u003d volume.get(\u0027consistencygroup_id\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a3905b3_f2741e37","line":418,"range":{"start_line":418,"start_character":10,"end_line":418,"end_character":13},"updated":"2017-01-21 15:04:21.000000000","message":"s/if/If","commit_id":"6fb2f85275916b8f5dd05f8bf4dc293463e92050"}],"cinder/volume/drivers/emc/xtremio.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"77a69975267a95be9cf4c3749c6b89c2cac25b80","unresolved":false,"context_lines":[{"line_number":408,"context_line":"            self.client \u003d XtremIOClient4(self.configuration, self.cluster_id)"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"    def create_volume(self, volume):"},{"line_number":411,"context_line":"        \"\"\"Creates a volume\"\"\""},{"line_number":412,"context_line":"        data \u003d {\u0027vol-name\u0027: volume[\u0027id\u0027],"},{"line_number":413,"context_line":"                \u0027vol-size\u0027: str(volume[\u0027size\u0027]) + \u0027g\u0027"},{"line_number":414,"context_line":"                }"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_68d17dfb","line":411,"updated":"2016-12-12 21:50:59.000000000","message":"Please add a period at the end.","commit_id":"4da576034d2c1993b2c1e675468e13a6d1ea1638"},{"author":{"_account_id":24355,"name":"Elad Zucker","email":"eladz@hexsys-solutions.com","username":"elad-zucker"},"change_message_id":"c2ed6a07fa09950757c034bcbd61f6548ff38a57","unresolved":false,"context_lines":[{"line_number":408,"context_line":"            self.client \u003d XtremIOClient4(self.configuration, self.cluster_id)"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"    def create_volume(self, volume):"},{"line_number":411,"context_line":"        \"\"\"Creates a volume\"\"\""},{"line_number":412,"context_line":"        data \u003d {\u0027vol-name\u0027: volume[\u0027id\u0027],"},{"line_number":413,"context_line":"                \u0027vol-size\u0027: str(volume[\u0027size\u0027]) + \u0027g\u0027"},{"line_number":414,"context_line":"                }"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_e30a2778","line":411,"in_reply_to":"1a6eadb0_68d17dfb","updated":"2016-12-17 10:05:35.000000000","message":"Sure.","commit_id":"4da576034d2c1993b2c1e675468e13a6d1ea1638"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"77a69975267a95be9cf4c3749c6b89c2cac25b80","unresolved":false,"context_lines":[{"line_number":796,"context_line":"        \"\"\""},{"line_number":797,"context_line":""},{"line_number":798,"context_line":"        # the driver treats a group as a CG internally. We proxy the calls to the CG api."},{"line_number":799,"context_line":"        return self.create_consistencygroup(context, group)"},{"line_number":800,"context_line":""},{"line_number":801,"context_line":"    def delete_group(self, context, group, volumes):"},{"line_number":802,"context_line":"        \"\"\"Deletes a group."}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_28d145ce","line":799,"updated":"2016-12-12 21:50:59.000000000","message":"Driver should not always treat a generic volume group as a CG.  It needs to check the group_specs of the group_type of the group passed in.  If the following is set in group_specs, the group should be treated as a CG, otherwise, driver should just return model_update without creating a CG on the storage backend (Cinder will be tracking the relationship between the generic volume group and individual volumes).\n\n{\u0027consistent_group_snapshot_enabled\u0027: \u003cis\u003e True}","commit_id":"4da576034d2c1993b2c1e675468e13a6d1ea1638"},{"author":{"_account_id":24355,"name":"Elad Zucker","email":"eladz@hexsys-solutions.com","username":"elad-zucker"},"change_message_id":"c2ed6a07fa09950757c034bcbd61f6548ff38a57","unresolved":false,"context_lines":[{"line_number":796,"context_line":"        \"\"\""},{"line_number":797,"context_line":""},{"line_number":798,"context_line":"        # the driver treats a group as a CG internally. We proxy the calls to the CG api."},{"line_number":799,"context_line":"        return self.create_consistencygroup(context, group)"},{"line_number":800,"context_line":""},{"line_number":801,"context_line":"    def delete_group(self, context, group, volumes):"},{"line_number":802,"context_line":"        \"\"\"Deletes a group."}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_a314af9f","line":799,"in_reply_to":"1a6eadb0_28d145ce","updated":"2016-12-17 10:05:35.000000000","message":"Thanks for your comments xing-yang, I have updated the stats to return \u0027consistent_group_snapshot_enabled\u0027 but I am not quite sure I understand what do yo mean by group_specs and who is responsible to set the \u0027consistent_group_snapshot_enabled\u0027 in the specs. Could you please elaborate more about the group_sepcs ?","commit_id":"4da576034d2c1993b2c1e675468e13a6d1ea1638"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3ddc2e1f4277e89c7de32ed43c2f265246622169","unresolved":false,"context_lines":[{"line_number":796,"context_line":"        \"\"\""},{"line_number":797,"context_line":""},{"line_number":798,"context_line":"        # the driver treats a group as a CG internally. We proxy the calls to the CG api."},{"line_number":799,"context_line":"        return self.create_consistencygroup(context, group)"},{"line_number":800,"context_line":""},{"line_number":801,"context_line":"    def delete_group(self, context, group, volumes):"},{"line_number":802,"context_line":"        \"\"\"Deletes a group."}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_46f7578c","line":799,"in_reply_to":"1a6eadb0_a314af9f","updated":"2016-12-19 02:48:43.000000000","message":"The admin who creates volume types and group types are responsible for setting \u0027consistent_group_snapshot_enabled\u0027 to \u0027\u003cis\u003e True\u0027 in volume type extra specs and group specs.  Driver doc should have this documented.\n\nI discussed with other Cinder cores about how driver should handle types with and without \u0027consistent_group_snapshot_enable\u0027 set.  The decision is driver can decide whether to create CG as the default.  So if type does not have \u0027consistent_group_snapshot_enabled\u0027 set, driver can still create CG if desired.  \n\nThis means you don\u0027t have to make any change on line 799.","commit_id":"4da576034d2c1993b2c1e675468e13a6d1ea1638"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"954086c1d41dbfe4cf4ae8e1f16b40e99a76134e","unresolved":false,"context_lines":[{"line_number":414,"context_line":"                }"},{"line_number":415,"context_line":"        self.client.req(\u0027volumes\u0027, \u0027POST\u0027, data)"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"        if volume.get(\u0027consistencygroup_id\u0027):"},{"line_number":418,"context_line":"            self.client.add_vol_to_cg(volume[\u0027id\u0027],"},{"line_number":419,"context_line":"                                      volume[\u0027consistencygroup_id\u0027])"},{"line_number":420,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_f05ffe72","line":417,"updated":"2016-12-20 04:14:39.000000000","message":"You will get a \u0027group_id\u0027 now if it is a generic volume group.  So you need to handle \u0027group_id\u0027 as well.","commit_id":"5f3fcfaac53cb671b1a876727ba46832f986bdfc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"954086c1d41dbfe4cf4ae8e1f16b40e99a76134e","unresolved":false,"context_lines":[{"line_number":680,"context_line":"        self.client.req(\u0027consistency-groups\u0027, \u0027DELETE\u0027, name\u003dgroup[\u0027id\u0027],"},{"line_number":681,"context_line":"                        ver\u003d\u0027v2\u0027)"},{"line_number":682,"context_line":""},{"line_number":683,"context_line":"        volumes \u003d self.db.volume_get_all_by_group(context, group[\u0027id\u0027])"},{"line_number":684,"context_line":""},{"line_number":685,"context_line":"        for volume in volumes:"},{"line_number":686,"context_line":"            self.delete_volume(volume)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_b093c6f9","line":683,"updated":"2016-12-20 04:14:39.000000000","message":"This line should be removed because the passed in volumes is a list of volume objects.  Driver should not access db directly.","commit_id":"5f3fcfaac53cb671b1a876727ba46832f986bdfc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"954086c1d41dbfe4cf4ae8e1f16b40e99a76134e","unresolved":false,"context_lines":[{"line_number":792,"context_line":"        \"\"\"Creates a group."},{"line_number":793,"context_line":""},{"line_number":794,"context_line":"        :param context: the context of the caller."},{"line_number":795,"context_line":"        :param group: the dictionary of the group to be created."},{"line_number":796,"context_line":"        :returns: model_update"},{"line_number":797,"context_line":"        \"\"\""},{"line_number":798,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_50019269","line":795,"updated":"2016-12-20 04:14:39.000000000","message":"Not the dictionary.  It is the group object.","commit_id":"5f3fcfaac53cb671b1a876727ba46832f986bdfc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"954086c1d41dbfe4cf4ae8e1f16b40e99a76134e","unresolved":false,"context_lines":[{"line_number":803,"context_line":"        \"\"\"Deletes a group."},{"line_number":804,"context_line":""},{"line_number":805,"context_line":"        :param context: the context of the caller."},{"line_number":806,"context_line":"        :param group: the dictionary of the group to be deleted."},{"line_number":807,"context_line":"        :param volumes: a list of volume dictionaries in the group."},{"line_number":808,"context_line":"        :returns: model_update, volumes_model_update"},{"line_number":809,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_f02a9ee6","line":806,"updated":"2016-12-20 04:14:39.000000000","message":"the group object, not dictionary.","commit_id":"5f3fcfaac53cb671b1a876727ba46832f986bdfc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"954086c1d41dbfe4cf4ae8e1f16b40e99a76134e","unresolved":false,"context_lines":[{"line_number":804,"context_line":""},{"line_number":805,"context_line":"        :param context: the context of the caller."},{"line_number":806,"context_line":"        :param group: the dictionary of the group to be deleted."},{"line_number":807,"context_line":"        :param volumes: a list of volume dictionaries in the group."},{"line_number":808,"context_line":"        :returns: model_update, volumes_model_update"},{"line_number":809,"context_line":"        \"\"\""},{"line_number":810,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_3035f645","line":807,"updated":"2016-12-20 04:14:39.000000000","message":"volume objects.","commit_id":"5f3fcfaac53cb671b1a876727ba46832f986bdfc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"954086c1d41dbfe4cf4ae8e1f16b40e99a76134e","unresolved":false,"context_lines":[{"line_number":816,"context_line":"        \"\"\"Updates a group."},{"line_number":817,"context_line":""},{"line_number":818,"context_line":"        :param context: the context of the caller."},{"line_number":819,"context_line":"        :param group: the dictionary of the group to be updated."},{"line_number":820,"context_line":"        :param add_volumes: a list of volume dictionaries to be added."},{"line_number":821,"context_line":"        :param remove_volumes: a list of volume dictionaries to be removed."},{"line_number":822,"context_line":"        :returns: model_update, add_volumes_update, remove_volumes_update"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_500fd287","line":819,"updated":"2016-12-20 04:14:39.000000000","message":"object","commit_id":"5f3fcfaac53cb671b1a876727ba46832f986bdfc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"954086c1d41dbfe4cf4ae8e1f16b40e99a76134e","unresolved":false,"context_lines":[{"line_number":817,"context_line":""},{"line_number":818,"context_line":"        :param context: the context of the caller."},{"line_number":819,"context_line":"        :param group: the dictionary of the group to be updated."},{"line_number":820,"context_line":"        :param add_volumes: a list of volume dictionaries to be added."},{"line_number":821,"context_line":"        :param remove_volumes: a list of volume dictionaries to be removed."},{"line_number":822,"context_line":"        :returns: model_update, add_volumes_update, remove_volumes_update"},{"line_number":823,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_70268e17","line":820,"updated":"2016-12-20 04:14:39.000000000","message":"objects","commit_id":"5f3fcfaac53cb671b1a876727ba46832f986bdfc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"954086c1d41dbfe4cf4ae8e1f16b40e99a76134e","unresolved":false,"context_lines":[{"line_number":818,"context_line":"        :param context: the context of the caller."},{"line_number":819,"context_line":"        :param group: the dictionary of the group to be updated."},{"line_number":820,"context_line":"        :param add_volumes: a list of volume dictionaries to be added."},{"line_number":821,"context_line":"        :param remove_volumes: a list of volume dictionaries to be removed."},{"line_number":822,"context_line":"        :returns: model_update, add_volumes_update, remove_volumes_update"},{"line_number":823,"context_line":"        \"\"\""},{"line_number":824,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_b02026f9","line":821,"updated":"2016-12-20 04:14:39.000000000","message":"objects","commit_id":"5f3fcfaac53cb671b1a876727ba46832f986bdfc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"042fe883937e6a5ca7d9b5e83a4f0d323f042a4a","unresolved":false,"context_lines":[{"line_number":419,"context_line":""},{"line_number":420,"context_line":"        consistency_group \u003d volume.get(\u0027group_id\u0027)"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"        # if cg_id and group_id are both exists, we gives priority to cg."},{"line_number":423,"context_line":"        if volume.get(\u0027consistencygroup_id\u0027):"},{"line_number":424,"context_line":"            consistency_group \u003d volume.get(\u0027consistencygroup_id\u0027)"},{"line_number":425,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7a3c09a3_627b702a","line":422,"range":{"start_line":422,"start_character":49,"end_line":422,"end_character":72},"updated":"2017-01-18 23:20:15.000000000","message":"I would suggest that you give priority to group_id because that is newer and cg will eventually go away.","commit_id":"f8ac435f65ec890dbb036d522a3015ae3173a5b5"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"042fe883937e6a5ca7d9b5e83a4f0d323f042a4a","unresolved":false,"context_lines":[{"line_number":425,"context_line":""},{"line_number":426,"context_line":"        if consistency_group:"},{"line_number":427,"context_line":"            self.client.add_vol_to_cg(volume[\u0027id\u0027],"},{"line_number":428,"context_line":"                                      volume[\u0027consistencygroup_id\u0027])"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":431,"context_line":"        \"\"\"Creates a volume from a snapshot.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"7a3c09a3_22aa4886","line":428,"range":{"start_line":428,"start_character":38,"end_line":428,"end_character":67},"updated":"2017-01-18 23:20:15.000000000","message":"This should be consistency_group instead.","commit_id":"f8ac435f65ec890dbb036d522a3015ae3173a5b5"}],"releasenotes/notes/xtremio-generic-groups-912e11525573e970.yaml":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6e6050ce298c43d2e0fd48a60c2868ab149d0cfb","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  Add generic group support to XtremIO Driver using Consistency groups."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5a3905b3_39cbf81f","line":3,"updated":"2017-01-20 23:26:05.000000000","message":"Missed \"- \" in front of the sentence.  Without that, the release notes won\u0027t be built properly.\n\nSee example here:\n\nhttps://github.com/openstack/cinder/blob/master/releasenotes/notes/generic-groups-in-vnx-cbbe1346e889b5c2.yaml","commit_id":"904b1a8b81284b7aacac19f4015bc72519f74671"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"206b18d8ae51838335794ef556569131f1c314df","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Add generic group support to XtremIO Driver using Consistency groups."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"5a3905b3_12a9aa7b","line":3,"updated":"2017-01-21 15:04:21.000000000","message":"Add consistent group capability to generic volume groups in the XtremIO driver.  Don\u0027t forget the \"- \" in the beginning.","commit_id":"6fb2f85275916b8f5dd05f8bf4dc293463e92050"}]}
