)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"beafa994c15dcc8aaf8e237caa5abf9965dea38b","unresolved":false,"context_lines":[{"line_number":7,"context_line":"XtremIO driver fix array snapshot problem"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"use create snapshot v2, to resolve a potential bug"},{"line_number":10,"context_line":"when 2 such requests are processed in the same second."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: If2801cb737e8a3d1847c68c9e19265c2123e6687"},{"line_number":13,"context_line":"Closes-Bug: #1467386"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"fa32b979_d931a25a","line":10,"updated":"2015-06-24 13:46:23.000000000","message":"Can you mention that the fix you are proposing will be renaming the snapshot because the error message says \"snapshotset_name_not_unique\"?","commit_id":"f3a62f861fd6c33ae87d85e9df81a54d708968b1"},{"author":{"_account_id":11418,"name":"Shay Halsband","email":"shay.halsband@emc.com","username":"shyh"},"change_message_id":"60a217a274538b539da20fd877c4350b9fcb7600","unresolved":false,"context_lines":[{"line_number":7,"context_line":"XtremIO driver fix array snapshot problem"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"use create snapshot v2, to resolve a potential bug"},{"line_number":10,"context_line":"when 2 such requests are processed in the same second."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: If2801cb737e8a3d1847c68c9e19265c2123e6687"},{"line_number":13,"context_line":"Closes-Bug: #1467386"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"fa32b979_2d32c4a7","line":10,"in_reply_to":"fa32b979_d931a25a","updated":"2015-06-24 15:15:30.000000000","message":"snapshot-set isn\u0027t snapshot, in V1 create snapshot allows you to assign a name to the snapshot and snapshot-set would be name according to current second. in V2 snapshot-set can be explicitly named fixing the bug, but the snapshot can only be assigned a suffix, so I need to rename it myself.","commit_id":"f3a62f861fd6c33ae87d85e9df81a54d708968b1"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9b28c151fd62ff5d47e444c1a553f523d708e489","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"XtremIO driver fix array snapshot problem"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"use create snapshot v2, to resolve a potential bug"},{"line_number":10,"context_line":"when 2 such requests are processed in the same second."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: If2801cb737e8a3d1847c68c9e19265c2123e6687"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"ba3cc151_695e3d47","line":9,"updated":"2015-06-29 02:35:43.000000000","message":"use -\u003e Use","commit_id":"4a4029b34656009d5ecd60650b27ceeb3ce46aa3"},{"author":{"_account_id":11418,"name":"Shay Halsband","email":"shay.halsband@emc.com","username":"shyh"},"change_message_id":"ce0f7252a231164e4fe129d2288b1f2741074dce","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"XtremIO driver fix array snapshot problem"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"use create snapshot v2, to resolve a potential bug"},{"line_number":10,"context_line":"when 2 such requests are processed in the same second."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: If2801cb737e8a3d1847c68c9e19265c2123e6687"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"ba3cc151_1acc8d34","line":9,"in_reply_to":"ba3cc151_695e3d47","updated":"2015-06-29 04:59:27.000000000","message":"Done","commit_id":"4a4029b34656009d5ecd60650b27ceeb3ce46aa3"}],"cinder/tests/unit/test_emc_xtremio.py":[{"author":{"_account_id":14305,"name":"Yuriy Nesenenko","email":"ynesenenko@mirantis.com","username":"yuriy_n"},"change_message_id":"0ac5efb8a8c7dd80e772fd7136758eafce269743","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        self.driver.create_volume(self.data.test_volume)"},{"line_number":269,"context_line":"        self.driver.create_snapshot(self.data.test_snapshot)"},{"line_number":270,"context_line":"        self.assertEqual(self.data.test_volume[\u0027id\u0027],"},{"line_number":271,"context_line":"                         xms_data[\u0027volumes\u0027][1][\u0027name\u0027])"},{"line_number":272,"context_line":"        self.driver.delete_snapshot(self.data.test_snapshot)"},{"line_number":273,"context_line":"        self.driver.delete_volume(self.data.test_volume)"},{"line_number":274,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_be17d9a1","line":271,"updated":"2015-06-24 16:19:15.000000000","message":"Your test_create_delete_snapshot(self, req) deals with snapshot, but here it\u0027s compared volume\u0027s id.","commit_id":"9f60f3f89e2d67dca97bdc714c8b6ccfecd7ed6f"},{"author":{"_account_id":11418,"name":"Shay Halsband","email":"shay.halsband@emc.com","username":"shyh"},"change_message_id":"044fd1c35afff66305567bce0e7cf7ccd8570834","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        self.driver.create_volume(self.data.test_volume)"},{"line_number":269,"context_line":"        self.driver.create_snapshot(self.data.test_snapshot)"},{"line_number":270,"context_line":"        self.assertEqual(self.data.test_volume[\u0027id\u0027],"},{"line_number":271,"context_line":"                         xms_data[\u0027volumes\u0027][1][\u0027name\u0027])"},{"line_number":272,"context_line":"        self.driver.delete_snapshot(self.data.test_snapshot)"},{"line_number":273,"context_line":"        self.driver.delete_volume(self.data.test_volume)"},{"line_number":274,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_83d84af0","line":271,"in_reply_to":"fa32b979_68e965e5","updated":"2015-06-25 15:21:09.000000000","message":"sorry, my bad, didn\u0027t notice I was using the test volume instead of the snapshot","commit_id":"9f60f3f89e2d67dca97bdc714c8b6ccfecd7ed6f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"87aa98235c271c2d5ed2b3daab1d0b6eb9043c93","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        self.driver.create_volume(self.data.test_volume)"},{"line_number":269,"context_line":"        self.driver.create_snapshot(self.data.test_snapshot)"},{"line_number":270,"context_line":"        self.assertEqual(self.data.test_volume[\u0027id\u0027],"},{"line_number":271,"context_line":"                         xms_data[\u0027volumes\u0027][1][\u0027name\u0027])"},{"line_number":272,"context_line":"        self.driver.delete_snapshot(self.data.test_snapshot)"},{"line_number":273,"context_line":"        self.driver.delete_volume(self.data.test_volume)"},{"line_number":274,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_68e965e5","line":271,"in_reply_to":"fa32b979_a4eb4612","updated":"2015-06-25 14:18:46.000000000","message":"I think we need some more clarification here.  Can you add an assert for self.data.test_snapshot[\u0027id\u0027]?","commit_id":"9f60f3f89e2d67dca97bdc714c8b6ccfecd7ed6f"},{"author":{"_account_id":11418,"name":"Shay Halsband","email":"shay.halsband@emc.com","username":"shyh"},"change_message_id":"97064a5cb38d6744509c28d33fc63f82b2c34383","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        self.driver.create_volume(self.data.test_volume)"},{"line_number":269,"context_line":"        self.driver.create_snapshot(self.data.test_snapshot)"},{"line_number":270,"context_line":"        self.assertEqual(self.data.test_volume[\u0027id\u0027],"},{"line_number":271,"context_line":"                         xms_data[\u0027volumes\u0027][1][\u0027name\u0027])"},{"line_number":272,"context_line":"        self.driver.delete_snapshot(self.data.test_snapshot)"},{"line_number":273,"context_line":"        self.driver.delete_volume(self.data.test_volume)"},{"line_number":274,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_a4eb4612","line":271,"in_reply_to":"fa32b979_be17d9a1","updated":"2015-06-24 16:50:07.000000000","message":"XtremIO snapshot is also a volume. So it is saved as one.","commit_id":"9f60f3f89e2d67dca97bdc714c8b6ccfecd7ed6f"},{"author":{"_account_id":14305,"name":"Yuriy Nesenenko","email":"ynesenenko@mirantis.com","username":"yuriy_n"},"change_message_id":"dd736b79a9b423a28b0734bd6665ce9818555644","unresolved":false,"context_lines":[{"line_number":184,"context_line":"                    \"href\": \"https://host/api/json/v2/types/snapshots/27\","},{"line_number":185,"context_line":"                    \"rel\": \"self\"}]}"},{"line_number":186,"context_line":"    elif request_typ \u003d\u003d \u0027PUT\u0027:"},{"line_number":187,"context_line":"        raise exception.VolumeBackendAPIException(msg\u003d\u0027delet failed\u0027)"},{"line_number":188,"context_line":"    elif request_typ \u003d\u003d \u0027DELETE\u0027:"},{"line_number":189,"context_line":"        del xms_data[\u0027volumes\u0027][27]"},{"line_number":190,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_013f2b88","line":187,"updated":"2015-06-26 10:35:23.000000000","message":"It would be better: \u0027Failed to delete\u0027","commit_id":"9bfeb47471c77f4e06ce092af9a7bf9f0f100fd0"},{"author":{"_account_id":11418,"name":"Shay Halsband","email":"shay.halsband@emc.com","username":"shyh"},"change_message_id":"8bafc229996969024e69cf160c55ccba6f6a6739","unresolved":false,"context_lines":[{"line_number":184,"context_line":"                    \"href\": \"https://host/api/json/v2/types/snapshots/27\","},{"line_number":185,"context_line":"                    \"rel\": \"self\"}]}"},{"line_number":186,"context_line":"    elif request_typ \u003d\u003d \u0027PUT\u0027:"},{"line_number":187,"context_line":"        raise exception.VolumeBackendAPIException(msg\u003d\u0027delet failed\u0027)"},{"line_number":188,"context_line":"    elif request_typ \u003d\u003d \u0027DELETE\u0027:"},{"line_number":189,"context_line":"        del xms_data[\u0027volumes\u0027][27]"},{"line_number":190,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_2b6f7efd","line":187,"in_reply_to":"fa32b979_013f2b88","updated":"2015-06-28 07:40:57.000000000","message":"Done","commit_id":"9bfeb47471c77f4e06ce092af9a7bf9f0f100fd0"}],"cinder/volume/drivers/emc/xtremio.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"93a86fbfcfbe654c16b96a52fbd795b9cd422669","unresolved":false,"context_lines":[{"line_number":291,"context_line":""},{"line_number":292,"context_line":"        self.client.req(\u0027volumes\u0027, \u0027POST\u0027, data)"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"    @cinder.utils.retry(exception.VolumeBackendAPIException, 1, 1)"},{"line_number":295,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":296,"context_line":"        \"\"\"Creates a volume from a snapshot.\"\"\""},{"line_number":297,"context_line":"        data \u003d {\u0027snap-vol-name\u0027: volume[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_909359fa","line":294,"updated":"2015-06-22 20:00:29.000000000","message":"Can you make the two retry parameters configurable rather than hard-coded as 1?","commit_id":"59020b46f7ace8ca127cdd9e07fb41be0a66069b"},{"author":{"_account_id":11418,"name":"Shay Halsband","email":"shay.halsband@emc.com","username":"shyh"},"change_message_id":"049fe1a12b72aabe435bbe928623c7efa05e5248","unresolved":false,"context_lines":[{"line_number":291,"context_line":""},{"line_number":292,"context_line":"        self.client.req(\u0027volumes\u0027, \u0027POST\u0027, data)"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"    @cinder.utils.retry(exception.VolumeBackendAPIException, 1, 1)"},{"line_number":295,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":296,"context_line":"        \"\"\"Creates a volume from a snapshot.\"\"\""},{"line_number":297,"context_line":"        data \u003d {\u0027snap-vol-name\u0027: volume[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_8404587e","line":294,"in_reply_to":"fa32b979_909359fa","updated":"2015-06-23 07:45:24.000000000","message":"no need, as this is a temporary array issue ,soon to be fixed, the only case it is relevant for is 1 retry after 1 second.","commit_id":"59020b46f7ace8ca127cdd9e07fb41be0a66069b"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"3e8bc5c218eed955a6850f43d146dda35867a9f2","unresolved":false,"context_lines":[{"line_number":315,"context_line":"            LOG.info(_LI(\"volume %s doesn\u0027t exist\"), volume[\u0027id\u0027])"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"    @cinder.utils.retry(exception.VolumeBackendAPIException, 1, 1)"},{"line_number":318,"context_line":"    def create_snapshot(self, snapshot):"},{"line_number":319,"context_line":"        \"\"\"Creates a snapshot.\"\"\""},{"line_number":320,"context_line":"        data \u003d {\u0027snap-vol-name\u0027: snapshot.id,"},{"line_number":321,"context_line":"                \u0027ancestor-vol-id\u0027: snapshot.volume_id}"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_f50e5731","line":318,"updated":"2015-06-22 13:55:43.000000000","message":"You commit message says \"Add one retry to failed create snapshot\".  It looks like you are adding retries for create_cloned_volume and create_volume_from_snapshot also.  Maybe change the commit message?\n\nAlso to \"resolve a potential bug when 2 such requests are processed in the same second\", would it be better to just add a lock here instead of a retry?","commit_id":"59020b46f7ace8ca127cdd9e07fb41be0a66069b"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"71ffa4ee3ad4198660e0e3c8343e38458bd9d919","unresolved":false,"context_lines":[{"line_number":315,"context_line":"            LOG.info(_LI(\"volume %s doesn\u0027t exist\"), volume[\u0027id\u0027])"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"    @cinder.utils.retry(exception.VolumeBackendAPIException, 1, 1)"},{"line_number":318,"context_line":"    def create_snapshot(self, snapshot):"},{"line_number":319,"context_line":"        \"\"\"Creates a snapshot.\"\"\""},{"line_number":320,"context_line":"        data \u003d {\u0027snap-vol-name\u0027: snapshot.id,"},{"line_number":321,"context_line":"                \u0027ancestor-vol-id\u0027: snapshot.volume_id}"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_994ff6bd","line":318,"in_reply_to":"fa32b979_32636743","updated":"2015-06-22 20:09:15.000000000","message":"Probably outside the context of this patch, but what about eventlet queue?  i.e. from eventlet import queue","commit_id":"59020b46f7ace8ca127cdd9e07fb41be0a66069b"},{"author":{"_account_id":11418,"name":"Shay Halsband","email":"shay.halsband@emc.com","username":"shyh"},"change_message_id":"049fe1a12b72aabe435bbe928623c7efa05e5248","unresolved":false,"context_lines":[{"line_number":315,"context_line":"            LOG.info(_LI(\"volume %s doesn\u0027t exist\"), volume[\u0027id\u0027])"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"    @cinder.utils.retry(exception.VolumeBackendAPIException, 1, 1)"},{"line_number":318,"context_line":"    def create_snapshot(self, snapshot):"},{"line_number":319,"context_line":"        \"\"\"Creates a snapshot.\"\"\""},{"line_number":320,"context_line":"        data \u003d {\u0027snap-vol-name\u0027: snapshot.id,"},{"line_number":321,"context_line":"                \u0027ancestor-vol-id\u0027: snapshot.volume_id}"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_a7bf1e5f","line":318,"in_reply_to":"fa32b979_f50e5731","updated":"2015-06-23 07:45:24.000000000","message":"I was referring to the array create snapshot action, not cinder.\nadding a lock sounds better however we need to consider the case when 2 cinder services are running on deferment machines?","commit_id":"59020b46f7ace8ca127cdd9e07fb41be0a66069b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"93a86fbfcfbe654c16b96a52fbd795b9cd422669","unresolved":false,"context_lines":[{"line_number":315,"context_line":"            LOG.info(_LI(\"volume %s doesn\u0027t exist\"), volume[\u0027id\u0027])"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"    @cinder.utils.retry(exception.VolumeBackendAPIException, 1, 1)"},{"line_number":318,"context_line":"    def create_snapshot(self, snapshot):"},{"line_number":319,"context_line":"        \"\"\"Creates a snapshot.\"\"\""},{"line_number":320,"context_line":"        data \u003d {\u0027snap-vol-name\u0027: snapshot.id,"},{"line_number":321,"context_line":"                \u0027ancestor-vol-id\u0027: snapshot.volume_id}"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_32636743","line":318,"in_reply_to":"fa32b979_f50e5731","updated":"2015-06-22 20:00:29.000000000","message":"There is WIP patch to remove local system locks.  So I\u0027m not sure what is the best way to add a lock at the moment.\n\nhttps://review.openstack.org/#/c/153748/","commit_id":"59020b46f7ace8ca127cdd9e07fb41be0a66069b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"beafa994c15dcc8aaf8e237caa5abf9965dea38b","unresolved":false,"context_lines":[{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        return self.req(\u0027clusters\u0027, name\u003dself.cluster_id)[\u0027content\u0027]"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    def create_snapshot(self, src, dest, ro\u003dFalse):"},{"line_number":243,"context_line":"        data \u003d {\u0027snapshot-set-name\u0027: dest, \u0027snap-suffix\u0027: dest,"},{"line_number":244,"context_line":"                \u0027volume-list\u0027: [src],"},{"line_number":245,"context_line":"                \u0027snapshot-type\u0027: \u0027readonly\u0027 if ro else \u0027regular\u0027}"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa32b979_5973524e","line":242,"updated":"2015-06-24 13:46:23.000000000","message":"Can you add a unit test for this method?","commit_id":"f3a62f861fd6c33ae87d85e9df81a54d708968b1"},{"author":{"_account_id":11418,"name":"Shay Halsband","email":"shay.halsband@emc.com","username":"shyh"},"change_message_id":"60a217a274538b539da20fd877c4350b9fcb7600","unresolved":false,"context_lines":[{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        return self.req(\u0027clusters\u0027, name\u003dself.cluster_id)[\u0027content\u0027]"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    def create_snapshot(self, src, dest, ro\u003dFalse):"},{"line_number":243,"context_line":"        data \u003d {\u0027snapshot-set-name\u0027: dest, \u0027snap-suffix\u0027: dest,"},{"line_number":244,"context_line":"                \u0027volume-list\u0027: [src],"},{"line_number":245,"context_line":"                \u0027snapshot-type\u0027: \u0027readonly\u0027 if ro else \u0027regular\u0027}"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa32b979_0a29e3e5","line":242,"in_reply_to":"fa32b979_5973524e","updated":"2015-06-24 15:15:30.000000000","message":"Done","commit_id":"f3a62f861fd6c33ae87d85e9df81a54d708968b1"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"8ccd55aff052e911e1752605480e0103171bacc4","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"        return self._portals"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def create_snapshot(self, src, dest, ro\u003dFalse):"},{"line_number":199,"context_line":"        data \u003d {\u0027snap-vol-name\u0027: dest, \u0027ancestor-vol-id\u0027: src}"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        self.req(\u0027snapshots\u0027, \u0027POST\u0027, data)"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_afca0c9e","line":198,"updated":"2015-06-25 16:41:29.000000000","message":"ro option is not used anywhere here, is it necessary?","commit_id":"9bfeb47471c77f4e06ce092af9a7bf9f0f100fd0"},{"author":{"_account_id":11418,"name":"Shay Halsband","email":"shay.halsband@emc.com","username":"shyh"},"change_message_id":"8bafc229996969024e69cf160c55ccba6f6a6739","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"        return self._portals"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def create_snapshot(self, src, dest, ro\u003dFalse):"},{"line_number":199,"context_line":"        data \u003d {\u0027snap-vol-name\u0027: dest, \u0027ancestor-vol-id\u0027: src}"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        self.req(\u0027snapshots\u0027, \u0027POST\u0027, data)"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_0b6cfa06","line":198,"in_reply_to":"fa32b979_91d646c2","updated":"2015-06-28 07:40:57.000000000","message":"Done","commit_id":"9bfeb47471c77f4e06ce092af9a7bf9f0f100fd0"},{"author":{"_account_id":11418,"name":"Shay Halsband","email":"shay.halsband@emc.com","username":"shyh"},"change_message_id":"3304cb8a931e3b85fb4fe09d3081bacaeeb758f4","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"        return self._portals"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def create_snapshot(self, src, dest, ro\u003dFalse):"},{"line_number":199,"context_line":"        data \u003d {\u0027snap-vol-name\u0027: dest, \u0027ancestor-vol-id\u0027: src}"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        self.req(\u0027snapshots\u0027, \u0027POST\u0027, data)"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_e2fca60e","line":198,"in_reply_to":"fa32b979_afca0c9e","updated":"2015-06-25 18:08:30.000000000","message":"This is in order to keep the same interface as client 4","commit_id":"9bfeb47471c77f4e06ce092af9a7bf9f0f100fd0"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1152f76f7f1b5a4076b7b3f22397c3d1602404ae","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"        return self._portals"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def create_snapshot(self, src, dest, ro\u003dFalse):"},{"line_number":199,"context_line":"        data \u003d {\u0027snap-vol-name\u0027: dest, \u0027ancestor-vol-id\u0027: src}"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        self.req(\u0027snapshots\u0027, \u0027POST\u0027, data)"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_91d646c2","line":198,"in_reply_to":"fa32b979_e2e6e649","updated":"2015-06-25 21:03:27.000000000","message":"Shay,\n\nCan you add a comment here saying the ro option is for keeping the same interface as client 4?","commit_id":"9bfeb47471c77f4e06ce092af9a7bf9f0f100fd0"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"861e1efc699df4dcef3d5c1e2670ad2380801fd6","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"        return self._portals"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def create_snapshot(self, src, dest, ro\u003dFalse):"},{"line_number":199,"context_line":"        data \u003d {\u0027snap-vol-name\u0027: dest, \u0027ancestor-vol-id\u0027: src}"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        self.req(\u0027snapshots\u0027, \u0027POST\u0027, data)"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_e2e6e649","line":198,"in_reply_to":"fa32b979_e2fca60e","updated":"2015-06-25 18:14:59.000000000","message":"Ok","commit_id":"9bfeb47471c77f4e06ce092af9a7bf9f0f100fd0"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"861e1efc699df4dcef3d5c1e2670ad2380801fd6","unresolved":false,"context_lines":[{"line_number":253,"context_line":"            self.req(typ, \u0027PUT\u0027, data, idx\u003dint(idx))"},{"line_number":254,"context_line":"        except exception.VolumeBackendAPIException as e:"},{"line_number":255,"context_line":"            # reverting"},{"line_number":256,"context_line":"            msg \u003d _(\u0027Failed to rename acreated snapshot, reverting\u0027)"},{"line_number":257,"context_line":"            LOG.error(msg)"},{"line_number":258,"context_line":"            self.req(typ, \u0027DELETE\u0027, idx\u003dint(idx))"},{"line_number":259,"context_line":"            raise e"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_023aea98","line":256,"updated":"2015-06-25 18:14:59.000000000","message":"This should be _LE, since it is only passed to LOG.error","commit_id":"9bfeb47471c77f4e06ce092af9a7bf9f0f100fd0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"45fba8ab27857c31596393cceed0866a9baf8096","unresolved":false,"context_lines":[{"line_number":256,"context_line":"            msg \u003d _(\u0027Failed to rename acreated snapshot, reverting\u0027)"},{"line_number":257,"context_line":"            LOG.error(msg)"},{"line_number":258,"context_line":"            self.req(typ, \u0027DELETE\u0027, idx\u003dint(idx))"},{"line_number":259,"context_line":"            raise e"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"class XtremIOVolumeDriver(san.SanDriver):"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_a541c865","line":259,"updated":"2015-06-25 19:05:41.000000000","message":"This should just be \"raise\" not \"raise e\".","commit_id":"9bfeb47471c77f4e06ce092af9a7bf9f0f100fd0"},{"author":{"_account_id":11418,"name":"Shay Halsband","email":"shay.halsband@emc.com","username":"shyh"},"change_message_id":"8bafc229996969024e69cf160c55ccba6f6a6739","unresolved":false,"context_lines":[{"line_number":256,"context_line":"            msg \u003d _(\u0027Failed to rename acreated snapshot, reverting\u0027)"},{"line_number":257,"context_line":"            LOG.error(msg)"},{"line_number":258,"context_line":"            self.req(typ, \u0027DELETE\u0027, idx\u003dint(idx))"},{"line_number":259,"context_line":"            raise e"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"class XtremIOVolumeDriver(san.SanDriver):"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_4bc68217","line":259,"in_reply_to":"fa32b979_314c1ac8","updated":"2015-06-28 07:40:57.000000000","message":"Done","commit_id":"9bfeb47471c77f4e06ce092af9a7bf9f0f100fd0"},{"author":{"_account_id":11418,"name":"Shay Halsband","email":"shay.halsband@emc.com","username":"shyh"},"change_message_id":"8bafc229996969024e69cf160c55ccba6f6a6739","unresolved":false,"context_lines":[{"line_number":256,"context_line":"            msg \u003d _(\u0027Failed to rename acreated snapshot, reverting\u0027)"},{"line_number":257,"context_line":"            LOG.error(msg)"},{"line_number":258,"context_line":"            self.req(typ, \u0027DELETE\u0027, idx\u003dint(idx))"},{"line_number":259,"context_line":"            raise e"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"class XtremIOVolumeDriver(san.SanDriver):"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_0bd07ac8","line":259,"in_reply_to":"fa32b979_a541c865","updated":"2015-06-28 07:40:57.000000000","message":"Done","commit_id":"9bfeb47471c77f4e06ce092af9a7bf9f0f100fd0"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1152f76f7f1b5a4076b7b3f22397c3d1602404ae","unresolved":false,"context_lines":[{"line_number":256,"context_line":"            msg \u003d _(\u0027Failed to rename acreated snapshot, reverting\u0027)"},{"line_number":257,"context_line":"            LOG.error(msg)"},{"line_number":258,"context_line":"            self.req(typ, \u0027DELETE\u0027, idx\u003dint(idx))"},{"line_number":259,"context_line":"            raise e"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"class XtremIOVolumeDriver(san.SanDriver):"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_314c1ac8","line":259,"in_reply_to":"fa32b979_a541c865","updated":"2015-06-25 21:03:27.000000000","message":"Once you\u0027ve removed e here, please remove it from line 254 as well as it is not used any more.","commit_id":"9bfeb47471c77f4e06ce092af9a7bf9f0f100fd0"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"8ccd55aff052e911e1752605480e0103171bacc4","unresolved":false,"context_lines":[{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    def create_snapshot(self, snapshot):"},{"line_number":333,"context_line":"        \"\"\"Creates a snapshot.\"\"\""},{"line_number":334,"context_line":"        self.client.create_snapshot(snapshot.volume_id, snapshot.id, True)"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    def delete_snapshot(self, snapshot):"},{"line_number":337,"context_line":"        \"\"\"Deletes a snapshot.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_cf38b0a2","line":334,"updated":"2015-06-25 16:41:29.000000000","message":"This call XtremIOClient3.create_snapshot, but the ro option is not used anywhere there.","commit_id":"9bfeb47471c77f4e06ce092af9a7bf9f0f100fd0"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"861e1efc699df4dcef3d5c1e2670ad2380801fd6","unresolved":false,"context_lines":[{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    def create_snapshot(self, snapshot):"},{"line_number":333,"context_line":"        \"\"\"Creates a snapshot.\"\"\""},{"line_number":334,"context_line":"        self.client.create_snapshot(snapshot.volume_id, snapshot.id, True)"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    def delete_snapshot(self, snapshot):"},{"line_number":337,"context_line":"        \"\"\"Deletes a snapshot.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_a2f0defe","line":334,"in_reply_to":"fa32b979_82359adc","updated":"2015-06-25 18:14:59.000000000","message":"Ok","commit_id":"9bfeb47471c77f4e06ce092af9a7bf9f0f100fd0"},{"author":{"_account_id":11418,"name":"Shay Halsband","email":"shay.halsband@emc.com","username":"shyh"},"change_message_id":"3304cb8a931e3b85fb4fe09d3081bacaeeb758f4","unresolved":false,"context_lines":[{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    def create_snapshot(self, snapshot):"},{"line_number":333,"context_line":"        \"\"\"Creates a snapshot.\"\"\""},{"line_number":334,"context_line":"        self.client.create_snapshot(snapshot.volume_id, snapshot.id, True)"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    def delete_snapshot(self, snapshot):"},{"line_number":337,"context_line":"        \"\"\"Deletes a snapshot.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_82359adc","line":334,"in_reply_to":"fa32b979_cf38b0a2","updated":"2015-06-25 18:08:30.000000000","message":"This code support both client 3 and 4","commit_id":"9bfeb47471c77f4e06ce092af9a7bf9f0f100fd0"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9b28c151fd62ff5d47e444c1a553f523d708e489","unresolved":false,"context_lines":[{"line_number":155,"context_line":"    def create_snapshot(self, src, dest, ro\u003dFalse):"},{"line_number":156,"context_line":"        \"\"\"create a snapshot of a volume on the array"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        keep in mind that, XtreamIO array snapshot is also a volume."},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        :src: name of the source volume to be cloned"},{"line_number":161,"context_line":"        :dest: name for the new snapshot"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba3cc151_69771dd5","line":158,"updated":"2015-06-29 02:35:43.000000000","message":"Can you remove \"keep in mind that,\"?  The remaining text looks good.","commit_id":"4a4029b34656009d5ecd60650b27ceeb3ce46aa3"},{"author":{"_account_id":11418,"name":"Shay Halsband","email":"shay.halsband@emc.com","username":"shyh"},"change_message_id":"ce0f7252a231164e4fe129d2288b1f2741074dce","unresolved":false,"context_lines":[{"line_number":155,"context_line":"    def create_snapshot(self, src, dest, ro\u003dFalse):"},{"line_number":156,"context_line":"        \"\"\"create a snapshot of a volume on the array"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        keep in mind that, XtreamIO array snapshot is also a volume."},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        :src: name of the source volume to be cloned"},{"line_number":161,"context_line":"        :dest: name for the new snapshot"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba3cc151_5a1d35bc","line":158,"in_reply_to":"ba3cc151_69771dd5","updated":"2015-06-29 04:59:27.000000000","message":"Done","commit_id":"4a4029b34656009d5ecd60650b27ceeb3ce46aa3"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9b28c151fd62ff5d47e444c1a553f523d708e489","unresolved":false,"context_lines":[{"line_number":264,"context_line":"            self.req(typ, \u0027PUT\u0027, data, idx\u003dint(idx))"},{"line_number":265,"context_line":"        except exception.VolumeBackendAPIException:"},{"line_number":266,"context_line":"            # reverting"},{"line_number":267,"context_line":"            msg \u003d _(\u0027Failed to rename acreated snapshot, reverting\u0027)"},{"line_number":268,"context_line":"            LOG.error(msg)"},{"line_number":269,"context_line":"            self.req(typ, \u0027DELETE\u0027, idx\u003dint(idx))"},{"line_number":270,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba3cc151_e9624d16","line":267,"updated":"2015-06-29 02:35:43.000000000","message":"This needs a _LE marker for error message. Also please add a period at the end.","commit_id":"4a4029b34656009d5ecd60650b27ceeb3ce46aa3"},{"author":{"_account_id":11418,"name":"Shay Halsband","email":"shay.halsband@emc.com","username":"shyh"},"change_message_id":"ce0f7252a231164e4fe129d2288b1f2741074dce","unresolved":false,"context_lines":[{"line_number":264,"context_line":"            self.req(typ, \u0027PUT\u0027, data, idx\u003dint(idx))"},{"line_number":265,"context_line":"        except exception.VolumeBackendAPIException:"},{"line_number":266,"context_line":"            # reverting"},{"line_number":267,"context_line":"            msg \u003d _(\u0027Failed to rename acreated snapshot, reverting\u0027)"},{"line_number":268,"context_line":"            LOG.error(msg)"},{"line_number":269,"context_line":"            self.req(typ, \u0027DELETE\u0027, idx\u003dint(idx))"},{"line_number":270,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba3cc151_1a656d44","line":267,"in_reply_to":"ba3cc151_e9624d16","updated":"2015-06-29 04:59:27.000000000","message":"Done","commit_id":"4a4029b34656009d5ecd60650b27ceeb3ce46aa3"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9721601d6cd25aa3499db5de616d332d5d6aebad","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        return self.req(\u0027clusters\u0027, idx\u003d1)[\u0027content\u0027]"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def create_snapshot(self, src, dest, ro\u003dFalse):"},{"line_number":156,"context_line":"        \"\"\"create a snapshot of a volume on the array"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        XtreamIO array snapshots are also a volumes."},{"line_number":159,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"ba3cc151_b9e47e3b","line":156,"updated":"2015-06-29 14:02:27.000000000","message":"Please add a period at the end and make the first letter capital.","commit_id":"49495e5ef908263641ee81b487bb38e8ccef4314"},{"author":{"_account_id":11418,"name":"Shay Halsband","email":"shay.halsband@emc.com","username":"shyh"},"change_message_id":"ea73d29eaf1878dbc3666b0ae90c5b3b96eeb7ef","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        return self.req(\u0027clusters\u0027, idx\u003d1)[\u0027content\u0027]"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def create_snapshot(self, src, dest, ro\u003dFalse):"},{"line_number":156,"context_line":"        \"\"\"create a snapshot of a volume on the array"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        XtreamIO array snapshots are also a volumes."},{"line_number":159,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"ba3cc151_c3ddcb71","line":156,"in_reply_to":"ba3cc151_b9e47e3b","updated":"2015-06-29 15:54:48.000000000","message":"Done","commit_id":"49495e5ef908263641ee81b487bb38e8ccef4314"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9721601d6cd25aa3499db5de616d332d5d6aebad","unresolved":false,"context_lines":[{"line_number":155,"context_line":"    def create_snapshot(self, src, dest, ro\u003dFalse):"},{"line_number":156,"context_line":"        \"\"\"create a snapshot of a volume on the array"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        XtreamIO array snapshots are also a volumes."},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        :src: name of the source volume to be cloned"},{"line_number":161,"context_line":"        :dest: name for the new snapshot"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba3cc151_19ca4aa2","line":158,"updated":"2015-06-29 14:02:27.000000000","message":"Remove \"a\".","commit_id":"49495e5ef908263641ee81b487bb38e8ccef4314"},{"author":{"_account_id":11418,"name":"Shay Halsband","email":"shay.halsband@emc.com","username":"shyh"},"change_message_id":"ea73d29eaf1878dbc3666b0ae90c5b3b96eeb7ef","unresolved":false,"context_lines":[{"line_number":155,"context_line":"    def create_snapshot(self, src, dest, ro\u003dFalse):"},{"line_number":156,"context_line":"        \"\"\"create a snapshot of a volume on the array"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        XtreamIO array snapshots are also a volumes."},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        :src: name of the source volume to be cloned"},{"line_number":161,"context_line":"        :dest: name for the new snapshot"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba3cc151_63d5df41","line":158,"in_reply_to":"ba3cc151_19ca4aa2","updated":"2015-06-29 15:54:48.000000000","message":"Done","commit_id":"49495e5ef908263641ee81b487bb38e8ccef4314"}]}
