)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"5ec98e0a8d3faabda7da18c541a5cb76fa947b36","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add support for force backup for Nimble Storage"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add capability to support backup of an in-use volume"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Implements: blueprint nimble-add-force-backup"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I913570ac77951957f01b79b1851642ed99c38f51"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9ad45d7e_567d28b0","line":10,"updated":"2016-08-09 16:01:39.000000000","message":"This should have a DocImpact tag.","commit_id":"347c7f92c4bd90a35deff81c038d50f008fa3aa3"},{"author":{"_account_id":16668,"name":"Raunak Kumar","email":"rkumar@nimblestorage.com","username":"rkumar"},"change_message_id":"0a1347e81939ab558b72a9c5af436e868ab87072","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add support for force backup for Nimble Storage"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add capability to support backup of an in-use volume"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Implements: blueprint nimble-add-force-backup"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I913570ac77951957f01b79b1851642ed99c38f51"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9ad45d7e_1942bc10","line":10,"in_reply_to":"9ad45d7e_567d28b0","updated":"2016-08-09 17:34:34.000000000","message":"Done","commit_id":"347c7f92c4bd90a35deff81c038d50f008fa3aa3"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dae221d6e1c100550760fb8b80567fb545d55cd1","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add support for force backup for Nimble Storage"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add capability to support backup of an in-use volume"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"DocImpact"},{"line_number":12,"context_line":"Implements: blueprint nimble-add-force-backup"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"3ac371cc_2bf1a8cd","line":9,"updated":"2016-08-18 08:57:30.000000000","message":"-1: A little more information here and in the code on why the delete operation needs to be modified in order for this to work.\n\nI must be missing something, because it looks to me as if current code wasn\u0027t properly handling the deletion of created cloned volumes, because I don\u0027t see any reason why a cloned volume or a volume snapshot should be handled differently for the backup than for anything else...","commit_id":"8d3936037ab786b35d875fa07ceb220121cf4704"},{"author":{"_account_id":16668,"name":"Raunak Kumar","email":"rkumar@nimblestorage.com","username":"rkumar"},"change_message_id":"f0036c5a2d9cccc8d2604f92146ad55033cf9d7c","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add support for force backup for Nimble Storage"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add capability to support backup of an in-use volume"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"DocImpact"},{"line_number":12,"context_line":"Implements: blueprint nimble-add-force-backup"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"3ac371cc_8a634f41","line":9,"in_reply_to":"3ac371cc_2bf1a8cd","updated":"2016-08-18 20:12:41.000000000","message":"We cannot delete the base snapshot if the clones are present from it. Since this is a specific use case in which we know beforehand what the name of temporary snapshot and temporary clone would be to delete, the delete is modified to handle the deletes of clone and then the snapshot in the respective order else the operation will fail.","commit_id":"8d3936037ab786b35d875fa07ceb220121cf4704"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"b2925b671b14dc6493e49cae3bf1e6f908582b90","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add support for force backup for Nimble Storage"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add capability to support backup of an in-use volume"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"DocImpact"},{"line_number":12,"context_line":"Implements: blueprint nimble-add-force-backup"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"1ac06dbe_37960095","line":9,"in_reply_to":"3ac371cc_8a634f41","updated":"2016-08-19 11:12:20.000000000","message":"I\u0027m clearly missing something here :-(, could you ping me on IRC to discuss this, please?\n\nWhat I\u0027m not understanding is why you need to treat the delete operation different.  If I\u0027m not mistaken, force backup for attached volumes will either create a snapshot or create a clone of the source volume, and it will delete it on its own, so it shouldn\u0027t be necessary to do anything specific in the delete operation, it\u0027s a normal snapshot/clone, right?","commit_id":"8d3936037ab786b35d875fa07ceb220121cf4704"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e92350a17b40f1f6d50e9c34e46bf0685e330988","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add support for force backup for Nimble Storage"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add capability to support backup of an in-use volume"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"DocImpact"},{"line_number":12,"context_line":"Implements: blueprint nimble-add-force-backup"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"1ac06dbe_d7f7acf3","line":9,"updated":"2016-08-19 11:11:47.000000000","message":"I\u0027m clearly missing something here :-(, could you ping me on IRC to discuss this, please?\n\nWhat I\u0027m not understanding is why you need to treat the delete operation different.  If I\u0027m not mistaken, force backup for attached volumes will either create a snapshot or create a clone of the source volume, and it will delete it on its own, so it shouldn\u0027t be necessary to do anything specific in the delete operation, it\u0027s a normal snapshot/clone, right?","commit_id":"d7ea774e18e49f87d9d7b93e556df8a001d8775e"}],"cinder/tests/unit/volume/drivers/test_nimble.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e92350a17b40f1f6d50e9c34e46bf0685e330988","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from cinder import test"},{"line_number":26,"context_line":"from cinder.volume.drivers import nimble"},{"line_number":27,"context_line":"from cinder.volume import volume_types"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"CONF \u003d cfg.CONF"},{"line_number":31,"context_line":"NIMBLE_CLIENT \u003d \u0027cinder.volume.drivers.nimble.client\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"1ac06dbe_57bbbc0e","line":28,"updated":"2016-08-19 11:11:47.000000000","message":"-1: There are no tests for the newly added code.","commit_id":"d7ea774e18e49f87d9d7b93e556df8a001d8775e"},{"author":{"_account_id":16668,"name":"Raunak Kumar","email":"rkumar@nimblestorage.com","username":"rkumar"},"change_message_id":"73f890ecd9887a59a1d28b5cfb5ba33c6d173e75","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from cinder import test"},{"line_number":26,"context_line":"from cinder.volume.drivers import nimble"},{"line_number":27,"context_line":"from cinder.volume import volume_types"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"CONF \u003d cfg.CONF"},{"line_number":31,"context_line":"NIMBLE_CLIENT \u003d \u0027cinder.volume.drivers.nimble.client\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"1ac06dbe_9478172d","line":28,"in_reply_to":"1ac06dbe_57bbbc0e","updated":"2016-08-22 17:25:10.000000000","message":"Done","commit_id":"d7ea774e18e49f87d9d7b93e556df8a001d8775e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"8c4ac3295d995dc0a6042d278e4f9529d88d9d5a","unresolved":false,"context_lines":[{"line_number":122,"context_line":"            \u0027agent-type\u0027: 1,"},{"line_number":123,"context_line":"            \u0027online\u0027: False}}"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"FAKE_GET_VOL_INFO_BACKUP_RESPONSE \u003d {"},{"line_number":126,"context_line":"    \u0027err-list\u0027: {\u0027err-list\u0027: [{\u0027code\u0027: 0}]},"},{"line_number":127,"context_line":"    \u0027vol\u0027: {\u0027target-name\u0027: \u0027iqn.test\u0027,"},{"line_number":128,"context_line":"            \u0027name\u0027: \u0027test_vol\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ac06dbe_000ddbe7","line":125,"updated":"2016-08-23 10:08:01.000000000","message":"-1: We are still missing a test where the new delete volume code path is executed (backup cloned volume).","commit_id":"e58834180aada3f397356eb0831bedd95e3ad717"},{"author":{"_account_id":16668,"name":"Raunak Kumar","email":"rkumar@nimblestorage.com","username":"rkumar"},"change_message_id":"5d947f7c4c12ef8e06cbf75ba692dabef7a332fd","unresolved":false,"context_lines":[{"line_number":122,"context_line":"            \u0027agent-type\u0027: 1,"},{"line_number":123,"context_line":"            \u0027online\u0027: False}}"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"FAKE_GET_VOL_INFO_BACKUP_RESPONSE \u003d {"},{"line_number":126,"context_line":"    \u0027err-list\u0027: {\u0027err-list\u0027: [{\u0027code\u0027: 0}]},"},{"line_number":127,"context_line":"    \u0027vol\u0027: {\u0027target-name\u0027: \u0027iqn.test\u0027,"},{"line_number":128,"context_line":"            \u0027name\u0027: \u0027test_vol\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ac06dbe_9e28f134","line":125,"in_reply_to":"1ac06dbe_000ddbe7","updated":"2016-08-23 16:54:42.000000000","message":"added a new test case test_delete_volume_with_backup","commit_id":"e58834180aada3f397356eb0831bedd95e3ad717"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"8c4ac3295d995dc0a6042d278e4f9529d88d9d5a","unresolved":false,"context_lines":[{"line_number":567,"context_line":"                                   volume_type_id\u003dFAKE_TYPE_ID"},{"line_number":568,"context_line":"                                   )"},{"line_number":569,"context_line":"        src_volume \u003d obj_volume.Volume(context.get_admin_context(),"},{"line_number":570,"context_line":"                                       id\u003dfake.VOLUME_ID,"},{"line_number":571,"context_line":"                                       _name_id\u003dNone,"},{"line_number":572,"context_line":"                                       size\u003d5.0)"},{"line_number":573,"context_line":"        self.assertEqual({"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ac06dbe_e0707fa6","line":570,"updated":"2016-08-23 10:08:01.000000000","message":"-1: Both volumes shouldn\u0027t have the same id","commit_id":"e58834180aada3f397356eb0831bedd95e3ad717"},{"author":{"_account_id":16668,"name":"Raunak Kumar","email":"rkumar@nimblestorage.com","username":"rkumar"},"change_message_id":"5d947f7c4c12ef8e06cbf75ba692dabef7a332fd","unresolved":false,"context_lines":[{"line_number":567,"context_line":"                                   volume_type_id\u003dFAKE_TYPE_ID"},{"line_number":568,"context_line":"                                   )"},{"line_number":569,"context_line":"        src_volume \u003d obj_volume.Volume(context.get_admin_context(),"},{"line_number":570,"context_line":"                                       id\u003dfake.VOLUME_ID,"},{"line_number":571,"context_line":"                                       _name_id\u003dNone,"},{"line_number":572,"context_line":"                                       size\u003d5.0)"},{"line_number":573,"context_line":"        self.assertEqual({"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ac06dbe_be1b37c9","line":570,"in_reply_to":"1ac06dbe_e0707fa6","updated":"2016-08-23 16:54:42.000000000","message":"Done","commit_id":"e58834180aada3f397356eb0831bedd95e3ad717"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"8c4ac3295d995dc0a6042d278e4f9529d88d9d5a","unresolved":false,"context_lines":[{"line_number":792,"context_line":"    @mock.patch(NIMBLE_URLLIB2)"},{"line_number":793,"context_line":"    @mock.patch(NIMBLE_CLIENT)"},{"line_number":794,"context_line":"    @mock.patch.object(obj_volume.VolumeList, \u0027get_all_by_host\u0027,"},{"line_number":795,"context_line":"                       mock.Mock(return_value\u003d[]))"},{"line_number":796,"context_line":"    @NimbleDriverBaseTestCase.client_mock_decorator(create_configuration("},{"line_number":797,"context_line":"        \u0027nimble\u0027, \u0027nimble_pass\u0027, \u002710.18.108.55\u0027, \u0027default\u0027, \u0027*\u0027))"},{"line_number":798,"context_line":"    def test_is_volume_backup_clone(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ac06dbe_20dc5772","line":795,"range":{"start_line":795,"start_character":23,"end_line":795,"end_character":48},"updated":"2016-08-23 10:08:01.000000000","message":"nit: It should be enough with:\n\n return_value\u003d[])","commit_id":"e58834180aada3f397356eb0831bedd95e3ad717"},{"author":{"_account_id":16668,"name":"Raunak Kumar","email":"rkumar@nimblestorage.com","username":"rkumar"},"change_message_id":"5d947f7c4c12ef8e06cbf75ba692dabef7a332fd","unresolved":false,"context_lines":[{"line_number":792,"context_line":"    @mock.patch(NIMBLE_URLLIB2)"},{"line_number":793,"context_line":"    @mock.patch(NIMBLE_CLIENT)"},{"line_number":794,"context_line":"    @mock.patch.object(obj_volume.VolumeList, \u0027get_all_by_host\u0027,"},{"line_number":795,"context_line":"                       mock.Mock(return_value\u003d[]))"},{"line_number":796,"context_line":"    @NimbleDriverBaseTestCase.client_mock_decorator(create_configuration("},{"line_number":797,"context_line":"        \u0027nimble\u0027, \u0027nimble_pass\u0027, \u002710.18.108.55\u0027, \u0027default\u0027, \u0027*\u0027))"},{"line_number":798,"context_line":"    def test_is_volume_backup_clone(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ac06dbe_dee55338","line":795,"range":{"start_line":795,"start_character":23,"end_line":795,"end_character":48},"in_reply_to":"1ac06dbe_20dc5772","updated":"2016-08-23 16:54:42.000000000","message":"Edited this to return_value instead of mocking it","commit_id":"e58834180aada3f397356eb0831bedd95e3ad717"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"8c4ac3295d995dc0a6042d278e4f9529d88d9d5a","unresolved":false,"context_lines":[{"line_number":803,"context_line":"        volume \u003d obj_volume.Volume(context.get_admin_context(),"},{"line_number":804,"context_line":"                                   id\u003dfake.VOLUME_ID,"},{"line_number":805,"context_line":"                                   _name_id\u003dNone)"},{"line_number":806,"context_line":"        self.driver.is_volume_backup_clone(volume)"},{"line_number":807,"context_line":"        self.mock_client_service.service.getVolInfo.assert_called_once_with("},{"line_number":808,"context_line":"            request\u003d{\u0027name\u0027: \u0027volume-\u0027 + fake.VOLUME_ID,"},{"line_number":809,"context_line":"                     \u0027sid\u0027: \u0027a9b9aba7\u0027})"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ac06dbe_60500fd5","line":806,"updated":"2016-08-23 10:08:01.000000000","message":"-1: We should check returned value","commit_id":"e58834180aada3f397356eb0831bedd95e3ad717"},{"author":{"_account_id":16668,"name":"Raunak Kumar","email":"rkumar@nimblestorage.com","username":"rkumar"},"change_message_id":"5d947f7c4c12ef8e06cbf75ba692dabef7a332fd","unresolved":false,"context_lines":[{"line_number":803,"context_line":"        volume \u003d obj_volume.Volume(context.get_admin_context(),"},{"line_number":804,"context_line":"                                   id\u003dfake.VOLUME_ID,"},{"line_number":805,"context_line":"                                   _name_id\u003dNone)"},{"line_number":806,"context_line":"        self.driver.is_volume_backup_clone(volume)"},{"line_number":807,"context_line":"        self.mock_client_service.service.getVolInfo.assert_called_once_with("},{"line_number":808,"context_line":"            request\u003d{\u0027name\u0027: \u0027volume-\u0027 + fake.VOLUME_ID,"},{"line_number":809,"context_line":"                     \u0027sid\u0027: \u0027a9b9aba7\u0027})"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ac06dbe_1e140b9e","line":806,"in_reply_to":"1ac06dbe_60500fd5","updated":"2016-08-23 16:54:42.000000000","message":"Done","commit_id":"e58834180aada3f397356eb0831bedd95e3ad717"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5e31ec416c637d613defa043a071aa7c67c93b3f","unresolved":false,"context_lines":[{"line_number":523,"context_line":"    @mock.patch(NIMBLE_ISCSI_DRIVER + \".is_volume_backup_clone\", mock.Mock("},{"line_number":524,"context_line":"        return_value\u003d[\u0027test-backup-snap\u0027, \u0027volume-\u0027 + fake.VOLUME_ID]))"},{"line_number":525,"context_line":"    @mock.patch.object(obj_volume.VolumeList, \u0027get_all_by_host\u0027)"},{"line_number":526,"context_line":"    def test_delete_volume_with_backup(self, mock_volume_list):"},{"line_number":527,"context_line":"        mock_volume_list.return_value \u003d []"},{"line_number":528,"context_line":"        self.mock_client_service.service.onlineVol.return_value \u003d \\"},{"line_number":529,"context_line":"            FAKE_GENERIC_POSITIVE_RESPONSE"}],"source_content_type":"text/x-python","patch_set":12,"id":"1ac06dbe_9d1f20b6","line":526,"updated":"2016-08-24 10:08:28.000000000","message":"Thanks!","commit_id":"8606e2e7818cf298517dc3699023ce81a630b07b"}],"cinder/volume/drivers/nimble.py":[{"author":{"_account_id":18026,"name":"huanan","email":"huanan@huawei.com","username":"huanan"},"change_message_id":"d0f1eaec105113abcfbf7761d9b24fc7d9931d01","unresolved":false,"context_lines":[{"line_number":548,"context_line":"                initiator_name)"},{"line_number":549,"context_line":"        self.APIExecutor.remove_acl(volume, initiator_group_name)"},{"line_number":550,"context_line":""},{"line_number":551,"context_line":"    def backup_use_temp_snapshot(self):"},{"line_number":552,"context_line":"        return False"},{"line_number":553,"context_line":""},{"line_number":554,"context_line":""},{"line_number":555,"context_line":"def _response_checker(func):"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_c043a66a","line":552,"range":{"start_line":551,"start_character":0,"end_line":552,"end_character":20},"updated":"2016-08-01 11:14:17.000000000","message":"The default is False in driver.py, There is no need to return False.","commit_id":"b9cd844f9bd89e3cb2e9f81d21d7dc04f602fe15"},{"author":{"_account_id":16668,"name":"Raunak Kumar","email":"rkumar@nimblestorage.com","username":"rkumar"},"change_message_id":"e90705ddae06c2d35c9b5a0d1af1160c46952e84","unresolved":false,"context_lines":[{"line_number":548,"context_line":"                initiator_name)"},{"line_number":549,"context_line":"        self.APIExecutor.remove_acl(volume, initiator_group_name)"},{"line_number":550,"context_line":""},{"line_number":551,"context_line":"    def backup_use_temp_snapshot(self):"},{"line_number":552,"context_line":"        return False"},{"line_number":553,"context_line":""},{"line_number":554,"context_line":""},{"line_number":555,"context_line":"def _response_checker(func):"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_9ec9a9af","line":552,"range":{"start_line":551,"start_character":0,"end_line":552,"end_character":20},"in_reply_to":"bacf61ea_c043a66a","updated":"2016-08-03 01:14:39.000000000","message":"Done","commit_id":"b9cd844f9bd89e3cb2e9f81d21d7dc04f602fe15"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"b8997c34790d6f70fc90fdd019950cf6c60189a2","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"# work around for ubuntu_openssl_bug_965371"},{"line_number":68,"context_line":"if hasattr(ssl, \u0027_create_unverified_context\u0027):"},{"line_number":69,"context_line":"    _create_unverified_https_context \u003d ssl._create_unverified_context"},{"line_number":70,"context_line":"    ssl._create_default_https_context \u003d _create_unverified_https_context"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9ad45d7e_0e4e066f","line":69,"updated":"2016-08-09 12:55:18.000000000","message":"I don\u0027t see a reason for needing this interim variable. Can\u0027t you just assign ssl._create_default_https_context \u003d ssl._create_unverified_context?","commit_id":"347c7f92c4bd90a35deff81c038d50f008fa3aa3"},{"author":{"_account_id":16668,"name":"Raunak Kumar","email":"rkumar@nimblestorage.com","username":"rkumar"},"change_message_id":"0a1347e81939ab558b72a9c5af436e868ab87072","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"# work around for ubuntu_openssl_bug_965371"},{"line_number":68,"context_line":"if hasattr(ssl, \u0027_create_unverified_context\u0027):"},{"line_number":69,"context_line":"    _create_unverified_https_context \u003d ssl._create_unverified_context"},{"line_number":70,"context_line":"    ssl._create_default_https_context \u003d _create_unverified_https_context"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9ad45d7e_5e97fa8f","line":69,"in_reply_to":"9ad45d7e_0e4e066f","updated":"2016-08-09 17:34:34.000000000","message":"Done","commit_id":"347c7f92c4bd90a35deff81c038d50f008fa3aa3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"b8997c34790d6f70fc90fdd019950cf6c60189a2","unresolved":false,"context_lines":[{"line_number":226,"context_line":"    def is_volume_backup_clone(self, volume):"},{"line_number":227,"context_line":"        \"\"\"check if the volume is created through cinder-backup workflow"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        :param volume"},{"line_number":230,"context_line":"        \"\"\""},{"line_number":231,"context_line":"        vol_info \u003d self.APIExecutor.get_vol_info(volume[\u0027name\u0027])"},{"line_number":232,"context_line":"        if vol_info[\u0027clone\u0027] and vol_info[\u0027base-snap\u0027] and vol_info["}],"source_content_type":"text/x-python","patch_set":2,"id":"9ad45d7e_6ec0627d","line":229,"updated":"2016-08-09 12:55:18.000000000","message":"Trivial nits: End one line docstring with a period. And if you\u0027re going to put in the volume param, at least put a small description of what the volume variable is.","commit_id":"347c7f92c4bd90a35deff81c038d50f008fa3aa3"},{"author":{"_account_id":16668,"name":"Raunak Kumar","email":"rkumar@nimblestorage.com","username":"rkumar"},"change_message_id":"0a1347e81939ab558b72a9c5af436e868ab87072","unresolved":false,"context_lines":[{"line_number":226,"context_line":"    def is_volume_backup_clone(self, volume):"},{"line_number":227,"context_line":"        \"\"\"check if the volume is created through cinder-backup workflow"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        :param volume"},{"line_number":230,"context_line":"        \"\"\""},{"line_number":231,"context_line":"        vol_info \u003d self.APIExecutor.get_vol_info(volume[\u0027name\u0027])"},{"line_number":232,"context_line":"        if vol_info[\u0027clone\u0027] and vol_info[\u0027base-snap\u0027] and vol_info["}],"source_content_type":"text/x-python","patch_set":2,"id":"9ad45d7e_7ea63e54","line":229,"in_reply_to":"9ad45d7e_6ec0627d","updated":"2016-08-09 17:34:34.000000000","message":"Done","commit_id":"347c7f92c4bd90a35deff81c038d50f008fa3aa3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"b8997c34790d6f70fc90fdd019950cf6c60189a2","unresolved":false,"context_lines":[{"line_number":238,"context_line":"                                                       vol_info[\u0027parent-vol\u0027])"},{"line_number":239,"context_line":"            if snap_info[\u0027description\u0027] and \"backup-vol-\" in snap_info["},{"line_number":240,"context_line":"                    \u0027description\u0027]:"},{"line_number":241,"context_line":"                parent_vol_id \u003d vol_info[\u0027parent-vol\u0027].\\"},{"line_number":242,"context_line":"                    replace(volume_name_prefix, \"\")"},{"line_number":243,"context_line":"                if \"backup-vol-\" + parent_vol_id in snap_info[\u0027description\u0027]:"},{"line_number":244,"context_line":"                    LOG.info(_LI(\"nimble backup-snapshot exists name: %s\"),"}],"source_content_type":"text/x-python","patch_set":2,"id":"9ad45d7e_4ef47ef1","line":241,"range":{"start_line":241,"start_character":55,"end_line":241,"end_character":56},"updated":"2016-08-09 12:55:18.000000000","message":"Refactor this to avoid using \\ for line continuation. Either don\u0027t close the [] until the next line, or just wrap the whole assignment in () so it can span multiple lines.","commit_id":"347c7f92c4bd90a35deff81c038d50f008fa3aa3"},{"author":{"_account_id":16668,"name":"Raunak Kumar","email":"rkumar@nimblestorage.com","username":"rkumar"},"change_message_id":"0a1347e81939ab558b72a9c5af436e868ab87072","unresolved":false,"context_lines":[{"line_number":238,"context_line":"                                                       vol_info[\u0027parent-vol\u0027])"},{"line_number":239,"context_line":"            if snap_info[\u0027description\u0027] and \"backup-vol-\" in snap_info["},{"line_number":240,"context_line":"                    \u0027description\u0027]:"},{"line_number":241,"context_line":"                parent_vol_id \u003d vol_info[\u0027parent-vol\u0027].\\"},{"line_number":242,"context_line":"                    replace(volume_name_prefix, \"\")"},{"line_number":243,"context_line":"                if \"backup-vol-\" + parent_vol_id in snap_info[\u0027description\u0027]:"},{"line_number":244,"context_line":"                    LOG.info(_LI(\"nimble backup-snapshot exists name: %s\"),"}],"source_content_type":"text/x-python","patch_set":2,"id":"9ad45d7e_fe44ee1b","line":241,"range":{"start_line":241,"start_character":55,"end_line":241,"end_character":56},"in_reply_to":"9ad45d7e_4ef47ef1","updated":"2016-08-09 17:34:34.000000000","message":"Done","commit_id":"347c7f92c4bd90a35deff81c038d50f008fa3aa3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"b8997c34790d6f70fc90fdd019950cf6c60189a2","unresolved":false,"context_lines":[{"line_number":807,"context_line":"                                                        \u0027name\u0027: snap_name})"},{"line_number":808,"context_line":""},{"line_number":809,"context_line":"    def get_snap_info(self, snap_name, vol_name):"},{"line_number":810,"context_line":"        \u0027\u0027\u0027get snapshot information"},{"line_number":811,"context_line":""},{"line_number":812,"context_line":"        :param snap_name:"},{"line_number":813,"context_line":"        :param vol_name:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9ad45d7e_8e731680","line":810,"range":{"start_line":810,"start_character":8,"end_line":810,"end_character":11},"updated":"2016-08-09 12:55:18.000000000","message":"\u0027\u0027\u0027 is not actually correct for docstrings, should be \"\"\". Same comment as above applies.","commit_id":"347c7f92c4bd90a35deff81c038d50f008fa3aa3"},{"author":{"_account_id":16668,"name":"Raunak Kumar","email":"rkumar@nimblestorage.com","username":"rkumar"},"change_message_id":"0a1347e81939ab558b72a9c5af436e868ab87072","unresolved":false,"context_lines":[{"line_number":807,"context_line":"                                                        \u0027name\u0027: snap_name})"},{"line_number":808,"context_line":""},{"line_number":809,"context_line":"    def get_snap_info(self, snap_name, vol_name):"},{"line_number":810,"context_line":"        \u0027\u0027\u0027get snapshot information"},{"line_number":811,"context_line":""},{"line_number":812,"context_line":"        :param snap_name:"},{"line_number":813,"context_line":"        :param vol_name:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9ad45d7e_3e08462d","line":810,"range":{"start_line":810,"start_character":8,"end_line":810,"end_character":11},"in_reply_to":"9ad45d7e_8e731680","updated":"2016-08-09 17:34:34.000000000","message":"Done","commit_id":"347c7f92c4bd90a35deff81c038d50f008fa3aa3"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dae221d6e1c100550760fb8b80567fb545d55cd1","unresolved":false,"context_lines":[{"line_number":64,"context_line":"LUN_ID \u003d \u00270\u0027"},{"line_number":65,"context_line":"WARN_LEVEL \u003d 0.8"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"# work around for ubuntu_openssl_bug_965371"},{"line_number":68,"context_line":"if hasattr(ssl, \u0027_create_unverified_context\u0027):"},{"line_number":69,"context_line":"    ssl._create_default_https_context \u003d ssl._create_unverified_context"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_c3d43eed","line":67,"updated":"2016-08-18 08:57:30.000000000","message":"nit: An explanation of why this fixes the issue or where this fix is taken from would be great.","commit_id":"8d3936037ab786b35d875fa07ceb220121cf4704"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"b2925b671b14dc6493e49cae3bf1e6f908582b90","unresolved":false,"context_lines":[{"line_number":64,"context_line":"LUN_ID \u003d \u00270\u0027"},{"line_number":65,"context_line":"WARN_LEVEL \u003d 0.8"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"# work around for ubuntu_openssl_bug_965371"},{"line_number":68,"context_line":"if hasattr(ssl, \u0027_create_unverified_context\u0027):"},{"line_number":69,"context_line":"    ssl._create_default_https_context \u003d ssl._create_unverified_context"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1ac06dbe_acb587d1","line":67,"in_reply_to":"3ac371cc_ad9f4564","updated":"2016-08-19 11:12:20.000000000","message":"Yes, the bug is mentioned, but there\u0027s not a single comment about the fix in your comments, and as far as I can see it didn\u0027t come from the LP bug comments.","commit_id":"8d3936037ab786b35d875fa07ceb220121cf4704"},{"author":{"_account_id":16668,"name":"Raunak Kumar","email":"rkumar@nimblestorage.com","username":"rkumar"},"change_message_id":"f0036c5a2d9cccc8d2604f92146ad55033cf9d7c","unresolved":false,"context_lines":[{"line_number":64,"context_line":"LUN_ID \u003d \u00270\u0027"},{"line_number":65,"context_line":"WARN_LEVEL \u003d 0.8"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"# work around for ubuntu_openssl_bug_965371"},{"line_number":68,"context_line":"if hasattr(ssl, \u0027_create_unverified_context\u0027):"},{"line_number":69,"context_line":"    ssl._create_default_https_context \u003d ssl._create_unverified_context"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_ad9f4564","line":67,"in_reply_to":"3ac371cc_c3d43eed","updated":"2016-08-18 20:12:41.000000000","message":"The issue is due to ubuntu bug https://bugs.launchpad.net/ubuntu/+source/openssl/+bug/965371 (it is mentioned in the comments)","commit_id":"8d3936037ab786b35d875fa07ceb220121cf4704"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dae221d6e1c100550760fb8b80567fb545d55cd1","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                Added Manage/Unmanage volume support"},{"line_number":109,"context_line":"        2.0.1 - Added multi-initiator support through extra-specs"},{"line_number":110,"context_line":"        2.0.2 - Fixed supporting extra specs while cloning vols"},{"line_number":111,"context_line":"        2.0.3 - Support for Force Backup"},{"line_number":112,"context_line":"        3.0.0 - Newton Driver Support for Force Backup"},{"line_number":113,"context_line":"    \"\"\""},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    VERSION \u003d DRIVER_VERSION"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_a324a20c","line":112,"range":{"start_line":111,"start_character":0,"end_line":112,"end_character":54},"updated":"2016-08-18 08:57:30.000000000","message":"-1: If we jump to 3.0.0 we shouldn\u0027t add non existent 2.0.3, even if it is intended to facilitate backporting.","commit_id":"8d3936037ab786b35d875fa07ceb220121cf4704"},{"author":{"_account_id":16668,"name":"Raunak Kumar","email":"rkumar@nimblestorage.com","username":"rkumar"},"change_message_id":"f0036c5a2d9cccc8d2604f92146ad55033cf9d7c","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                Added Manage/Unmanage volume support"},{"line_number":109,"context_line":"        2.0.1 - Added multi-initiator support through extra-specs"},{"line_number":110,"context_line":"        2.0.2 - Fixed supporting extra specs while cloning vols"},{"line_number":111,"context_line":"        2.0.3 - Support for Force Backup"},{"line_number":112,"context_line":"        3.0.0 - Newton Driver Support for Force Backup"},{"line_number":113,"context_line":"    \"\"\""},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    VERSION \u003d DRIVER_VERSION"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_4aa9577b","line":112,"range":{"start_line":111,"start_character":0,"end_line":112,"end_character":54},"in_reply_to":"3ac371cc_a324a20c","updated":"2016-08-18 20:12:41.000000000","message":"Done","commit_id":"8d3936037ab786b35d875fa07ceb220121cf4704"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dae221d6e1c100550760fb8b80567fb545d55cd1","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        return self._get_model_info(volume[\u0027name\u0027])"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    def is_volume_backup_clone(self, volume):"},{"line_number":226,"context_line":"        \"\"\"check if the volume is created through cinder-backup workflow."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        :param volume: reference to volume from delete_volume()"},{"line_number":229,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_c3571e56","line":226,"range":{"start_line":226,"start_character":11,"end_line":226,"end_character":16},"updated":"2016-08-18 08:57:30.000000000","message":"nit: Check","commit_id":"8d3936037ab786b35d875fa07ceb220121cf4704"},{"author":{"_account_id":16668,"name":"Raunak Kumar","email":"rkumar@nimblestorage.com","username":"rkumar"},"change_message_id":"f0036c5a2d9cccc8d2604f92146ad55033cf9d7c","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        return self._get_model_info(volume[\u0027name\u0027])"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    def is_volume_backup_clone(self, volume):"},{"line_number":226,"context_line":"        \"\"\"check if the volume is created through cinder-backup workflow."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        :param volume: reference to volume from delete_volume()"},{"line_number":229,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_6aac138d","line":226,"range":{"start_line":226,"start_character":11,"end_line":226,"end_character":16},"in_reply_to":"3ac371cc_c3571e56","updated":"2016-08-18 20:12:41.000000000","message":"Done","commit_id":"8d3936037ab786b35d875fa07ceb220121cf4704"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dae221d6e1c100550760fb8b80567fb545d55cd1","unresolved":false,"context_lines":[{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        :param volume: reference to volume from delete_volume()"},{"line_number":229,"context_line":"        \"\"\""},{"line_number":230,"context_line":"        vol_info \u003d self.APIExecutor.get_vol_info(volume[\u0027name\u0027])"},{"line_number":231,"context_line":"        if vol_info[\u0027clone\u0027] and vol_info[\u0027base-snap\u0027] and vol_info["},{"line_number":232,"context_line":"           \u0027parent-vol\u0027]:"},{"line_number":233,"context_line":"            LOG.debug(\"Nimble base-snap exists for volume :%s\", volume[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_23f43259","line":230,"range":{"start_line":230,"start_character":49,"end_line":230,"end_character":64},"updated":"2016-08-18 08:57:30.000000000","message":"-1: Volume is an OVO instance, we should use attribute notation:\n\n volume.name","commit_id":"8d3936037ab786b35d875fa07ceb220121cf4704"},{"author":{"_account_id":16668,"name":"Raunak Kumar","email":"rkumar@nimblestorage.com","username":"rkumar"},"change_message_id":"f0036c5a2d9cccc8d2604f92146ad55033cf9d7c","unresolved":false,"context_lines":[{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        :param volume: reference to volume from delete_volume()"},{"line_number":229,"context_line":"        \"\"\""},{"line_number":230,"context_line":"        vol_info \u003d self.APIExecutor.get_vol_info(volume[\u0027name\u0027])"},{"line_number":231,"context_line":"        if vol_info[\u0027clone\u0027] and vol_info[\u0027base-snap\u0027] and vol_info["},{"line_number":232,"context_line":"           \u0027parent-vol\u0027]:"},{"line_number":233,"context_line":"            LOG.debug(\"Nimble base-snap exists for volume :%s\", volume[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_0a9f5f51","line":230,"range":{"start_line":230,"start_character":49,"end_line":230,"end_character":64},"in_reply_to":"3ac371cc_23f43259","updated":"2016-08-18 20:12:41.000000000","message":"Done","commit_id":"8d3936037ab786b35d875fa07ceb220121cf4704"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dae221d6e1c100550760fb8b80567fb545d55cd1","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        if vol_info[\u0027clone\u0027] and vol_info[\u0027base-snap\u0027] and vol_info["},{"line_number":232,"context_line":"           \u0027parent-vol\u0027]:"},{"line_number":233,"context_line":"            LOG.debug(\"Nimble base-snap exists for volume :%s\", volume[\u0027name\u0027])"},{"line_number":234,"context_line":"            volume_name_prefix \u003d volume[\u0027name\u0027].replace(volume[\u0027id\u0027], \"\")"},{"line_number":235,"context_line":"            LOG.debug(\"volume_name_prefix : %s\", volume_name_prefix)"},{"line_number":236,"context_line":"            snap_info \u003d self.APIExecutor.get_snap_info(vol_info[\u0027base-snap\u0027],"},{"line_number":237,"context_line":"                                                       vol_info[\u0027parent-vol\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_23c272e9","line":234,"updated":"2016-08-18 08:57:30.000000000","message":"volume_name_prefix \u003d volume.name.replace(volume.id, \u0027\u0027)","commit_id":"8d3936037ab786b35d875fa07ceb220121cf4704"},{"author":{"_account_id":16668,"name":"Raunak Kumar","email":"rkumar@nimblestorage.com","username":"rkumar"},"change_message_id":"f0036c5a2d9cccc8d2604f92146ad55033cf9d7c","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        if vol_info[\u0027clone\u0027] and vol_info[\u0027base-snap\u0027] and vol_info["},{"line_number":232,"context_line":"           \u0027parent-vol\u0027]:"},{"line_number":233,"context_line":"            LOG.debug(\"Nimble base-snap exists for volume :%s\", volume[\u0027name\u0027])"},{"line_number":234,"context_line":"            volume_name_prefix \u003d volume[\u0027name\u0027].replace(volume[\u0027id\u0027], \"\")"},{"line_number":235,"context_line":"            LOG.debug(\"volume_name_prefix : %s\", volume_name_prefix)"},{"line_number":236,"context_line":"            snap_info \u003d self.APIExecutor.get_snap_info(vol_info[\u0027base-snap\u0027],"},{"line_number":237,"context_line":"                                                       vol_info[\u0027parent-vol\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_2aa21b9b","line":234,"in_reply_to":"3ac371cc_23c272e9","updated":"2016-08-18 20:12:41.000000000","message":"Done","commit_id":"8d3936037ab786b35d875fa07ceb220121cf4704"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dae221d6e1c100550760fb8b80567fb545d55cd1","unresolved":false,"context_lines":[{"line_number":235,"context_line":"            LOG.debug(\"volume_name_prefix : %s\", volume_name_prefix)"},{"line_number":236,"context_line":"            snap_info \u003d self.APIExecutor.get_snap_info(vol_info[\u0027base-snap\u0027],"},{"line_number":237,"context_line":"                                                       vol_info[\u0027parent-vol\u0027])"},{"line_number":238,"context_line":"            if snap_info[\u0027description\u0027] and \"backup-vol-\" in snap_info["},{"line_number":239,"context_line":"                    \u0027description\u0027]:"},{"line_number":240,"context_line":"                parent_vol_id \u003d vol_info[\u0027parent-vol\u0027"},{"line_number":241,"context_line":"                                         ].replace(volume_name_prefix, \"\")"},{"line_number":242,"context_line":"                if \"backup-vol-\" + parent_vol_id in snap_info[\u0027description\u0027]:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_1853603a","line":239,"range":{"start_line":238,"start_character":12,"end_line":239,"end_character":35},"updated":"2016-08-18 08:57:30.000000000","message":"-1: Are we basing the detection on a description that can be changed by the user?","commit_id":"8d3936037ab786b35d875fa07ceb220121cf4704"},{"author":{"_account_id":16668,"name":"Raunak Kumar","email":"rkumar@nimblestorage.com","username":"rkumar"},"change_message_id":"f0036c5a2d9cccc8d2604f92146ad55033cf9d7c","unresolved":false,"context_lines":[{"line_number":235,"context_line":"            LOG.debug(\"volume_name_prefix : %s\", volume_name_prefix)"},{"line_number":236,"context_line":"            snap_info \u003d self.APIExecutor.get_snap_info(vol_info[\u0027base-snap\u0027],"},{"line_number":237,"context_line":"                                                       vol_info[\u0027parent-vol\u0027])"},{"line_number":238,"context_line":"            if snap_info[\u0027description\u0027] and \"backup-vol-\" in snap_info["},{"line_number":239,"context_line":"                    \u0027description\u0027]:"},{"line_number":240,"context_line":"                parent_vol_id \u003d vol_info[\u0027parent-vol\u0027"},{"line_number":241,"context_line":"                                         ].replace(volume_name_prefix, \"\")"},{"line_number":242,"context_line":"                if \"backup-vol-\" + parent_vol_id in snap_info[\u0027description\u0027]:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_4a72f74a","line":239,"range":{"start_line":238,"start_character":12,"end_line":239,"end_character":35},"in_reply_to":"3ac371cc_1853603a","updated":"2016-08-18 20:12:41.000000000","message":"Since this description comes from the backup vol service, this field cannot be changed by the user. It is a temporary clone facilitated for backup.","commit_id":"8d3936037ab786b35d875fa07ceb220121cf4704"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"b2925b671b14dc6493e49cae3bf1e6f908582b90","unresolved":false,"context_lines":[{"line_number":235,"context_line":"            LOG.debug(\"volume_name_prefix : %s\", volume_name_prefix)"},{"line_number":236,"context_line":"            snap_info \u003d self.APIExecutor.get_snap_info(vol_info[\u0027base-snap\u0027],"},{"line_number":237,"context_line":"                                                       vol_info[\u0027parent-vol\u0027])"},{"line_number":238,"context_line":"            if snap_info[\u0027description\u0027] and \"backup-vol-\" in snap_info["},{"line_number":239,"context_line":"                    \u0027description\u0027]:"},{"line_number":240,"context_line":"                parent_vol_id \u003d vol_info[\u0027parent-vol\u0027"},{"line_number":241,"context_line":"                                         ].replace(volume_name_prefix, \"\")"},{"line_number":242,"context_line":"                if \"backup-vol-\" + parent_vol_id in snap_info[\u0027description\u0027]:"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ac06dbe_cc39e343","line":239,"range":{"start_line":238,"start_character":12,"end_line":239,"end_character":35},"in_reply_to":"3ac371cc_4a72f74a","updated":"2016-08-19 11:12:20.000000000","message":"This is a normal volume or snapshot right? It just so happens that it\u0027s being used by the backup service. So are we protected agains snapshots created by users that have \"backup-vol-\" in the description?","commit_id":"8d3936037ab786b35d875fa07ceb220121cf4704"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dae221d6e1c100550760fb8b80567fb545d55cd1","unresolved":false,"context_lines":[{"line_number":254,"context_line":"                                            ignore_list\u003d[\u0027SM-enoent\u0027])"},{"line_number":255,"context_line":"        self.APIExecutor.delete_vol(volume[\u0027name\u0027], ignore_list\u003d[\u0027SM-enoent\u0027])"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"        if snap_name !\u003d \"\" and vol_name !\u003d \"\":"},{"line_number":258,"context_line":"            self.APIExecutor.online_snap(vol_name,"},{"line_number":259,"context_line":"                                         False,"},{"line_number":260,"context_line":"                                         snap_name,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_55cda12f","line":257,"updated":"2016-08-18 08:57:30.000000000","message":"nit: More pythonic:\n\n if snap_name and vol_name:","commit_id":"8d3936037ab786b35d875fa07ceb220121cf4704"},{"author":{"_account_id":16668,"name":"Raunak Kumar","email":"rkumar@nimblestorage.com","username":"rkumar"},"change_message_id":"f0036c5a2d9cccc8d2604f92146ad55033cf9d7c","unresolved":false,"context_lines":[{"line_number":254,"context_line":"                                            ignore_list\u003d[\u0027SM-enoent\u0027])"},{"line_number":255,"context_line":"        self.APIExecutor.delete_vol(volume[\u0027name\u0027], ignore_list\u003d[\u0027SM-enoent\u0027])"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"        if snap_name !\u003d \"\" and vol_name !\u003d \"\":"},{"line_number":258,"context_line":"            self.APIExecutor.online_snap(vol_name,"},{"line_number":259,"context_line":"                                         False,"},{"line_number":260,"context_line":"                                         snap_name,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_ea976338","line":257,"in_reply_to":"3ac371cc_55cda12f","updated":"2016-08-18 20:12:41.000000000","message":"Done","commit_id":"8d3936037ab786b35d875fa07ceb220121cf4704"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dae221d6e1c100550760fb8b80567fb545d55cd1","unresolved":false,"context_lines":[{"line_number":297,"context_line":"        snapshot \u003d {\u0027volume_name\u0027: src_vref[\u0027name\u0027],"},{"line_number":298,"context_line":"                    \u0027name\u0027: snapshot_name,"},{"line_number":299,"context_line":"                    \u0027volume_size\u0027: src_vref[\u0027size\u0027],"},{"line_number":300,"context_line":"                    \u0027display_name\u0027: volume[\u0027display_name\u0027],"},{"line_number":301,"context_line":"                    \u0027display_description\u0027: \u0027\u0027}"},{"line_number":302,"context_line":"        self.APIExecutor.snap_vol(snapshot)"},{"line_number":303,"context_line":"        self._clone_volume_from_snapshot(volume, snapshot)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_15e04995","line":300,"range":{"start_line":300,"start_character":37,"end_line":300,"end_character":58},"updated":"2016-08-18 08:57:30.000000000","message":"-1: volume.display_name","commit_id":"8d3936037ab786b35d875fa07ceb220121cf4704"},{"author":{"_account_id":16668,"name":"Raunak Kumar","email":"rkumar@nimblestorage.com","username":"rkumar"},"change_message_id":"f0036c5a2d9cccc8d2604f92146ad55033cf9d7c","unresolved":false,"context_lines":[{"line_number":297,"context_line":"        snapshot \u003d {\u0027volume_name\u0027: src_vref[\u0027name\u0027],"},{"line_number":298,"context_line":"                    \u0027name\u0027: snapshot_name,"},{"line_number":299,"context_line":"                    \u0027volume_size\u0027: src_vref[\u0027size\u0027],"},{"line_number":300,"context_line":"                    \u0027display_name\u0027: volume[\u0027display_name\u0027],"},{"line_number":301,"context_line":"                    \u0027display_description\u0027: \u0027\u0027}"},{"line_number":302,"context_line":"        self.APIExecutor.snap_vol(snapshot)"},{"line_number":303,"context_line":"        self._clone_volume_from_snapshot(volume, snapshot)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_8ab98fce","line":300,"range":{"start_line":300,"start_character":37,"end_line":300,"end_character":58},"in_reply_to":"3ac371cc_15e04995","updated":"2016-08-18 20:12:41.000000000","message":"Done","commit_id":"8d3936037ab786b35d875fa07ceb220121cf4704"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"b2925b671b14dc6493e49cae3bf1e6f908582b90","unresolved":false,"context_lines":[{"line_number":297,"context_line":"        snapshot \u003d {\u0027volume_name\u0027: src_vref[\u0027name\u0027],"},{"line_number":298,"context_line":"                    \u0027name\u0027: snapshot_name,"},{"line_number":299,"context_line":"                    \u0027volume_size\u0027: src_vref[\u0027size\u0027],"},{"line_number":300,"context_line":"                    \u0027display_name\u0027: volume[\u0027display_name\u0027],"},{"line_number":301,"context_line":"                    \u0027display_description\u0027: \u0027\u0027}"},{"line_number":302,"context_line":"        self.APIExecutor.snap_vol(snapshot)"},{"line_number":303,"context_line":"        self._clone_volume_from_snapshot(volume, snapshot)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ac06dbe_ac1107b2","line":300,"range":{"start_line":300,"start_character":37,"end_line":300,"end_character":58},"in_reply_to":"3ac371cc_8ab98fce","updated":"2016-08-19 11:12:20.000000000","message":"Mmmm, I don\u0027t see it done.  It was done on 8 and removed on 9.","commit_id":"8d3936037ab786b35d875fa07ceb220121cf4704"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dae221d6e1c100550760fb8b80567fb545d55cd1","unresolved":false,"context_lines":[{"line_number":806,"context_line":"                                                        \u0027name\u0027: snap_name})"},{"line_number":807,"context_line":""},{"line_number":808,"context_line":"    def get_snap_info(self, snap_name, vol_name):"},{"line_number":809,"context_line":"        \"\"\"get snapshot information."},{"line_number":810,"context_line":""},{"line_number":811,"context_line":"        :param snap_name: snapshot name"},{"line_number":812,"context_line":"        :param vol_name: volume name"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_58531817","line":809,"range":{"start_line":809,"start_character":11,"end_line":809,"end_character":15},"updated":"2016-08-18 08:57:30.000000000","message":"nit: Get","commit_id":"8d3936037ab786b35d875fa07ceb220121cf4704"},{"author":{"_account_id":16668,"name":"Raunak Kumar","email":"rkumar@nimblestorage.com","username":"rkumar"},"change_message_id":"f0036c5a2d9cccc8d2604f92146ad55033cf9d7c","unresolved":false,"context_lines":[{"line_number":806,"context_line":"                                                        \u0027name\u0027: snap_name})"},{"line_number":807,"context_line":""},{"line_number":808,"context_line":"    def get_snap_info(self, snap_name, vol_name):"},{"line_number":809,"context_line":"        \"\"\"get snapshot information."},{"line_number":810,"context_line":""},{"line_number":811,"context_line":"        :param snap_name: snapshot name"},{"line_number":812,"context_line":"        :param vol_name: volume name"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_cab387e8","line":809,"range":{"start_line":809,"start_character":11,"end_line":809,"end_character":15},"in_reply_to":"3ac371cc_58531817","updated":"2016-08-18 20:12:41.000000000","message":"Done","commit_id":"8d3936037ab786b35d875fa07ceb220121cf4704"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dae221d6e1c100550760fb8b80567fb545d55cd1","unresolved":false,"context_lines":[{"line_number":870,"context_line":"                        getattr(snapshot, \u0027display_description\u0027, \u0027\u0027)]"},{"line_number":871,"context_line":"        snap_description \u003d \u0027:\u0027.join(filter(None, display_list))"},{"line_number":872,"context_line":"        # Limit to 254 characters"},{"line_number":873,"context_line":"        LOG.debug(\"snap_description -%s\", snap_description)"},{"line_number":874,"context_line":"        snap_description \u003d snap_description[:254]"},{"line_number":875,"context_line":"        LOG.info(_LI(\u0027Creating snapshot for volume_name\u003d%(vol)s\u0027"},{"line_number":876,"context_line":"                     \u0027 snap_name\u003d%(name)s snap_description\u003d%(desc)s\u0027),"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_580b18d6","line":873,"range":{"start_line":873,"start_character":36,"end_line":873,"end_character":39},"updated":"2016-08-18 08:57:30.000000000","message":"nit: Maybe a space after the - or using a : instead:\n\n LOG.debug(\"snap_description: %s\", snap_description)","commit_id":"8d3936037ab786b35d875fa07ceb220121cf4704"},{"author":{"_account_id":16668,"name":"Raunak Kumar","email":"rkumar@nimblestorage.com","username":"rkumar"},"change_message_id":"f0036c5a2d9cccc8d2604f92146ad55033cf9d7c","unresolved":false,"context_lines":[{"line_number":870,"context_line":"                        getattr(snapshot, \u0027display_description\u0027, \u0027\u0027)]"},{"line_number":871,"context_line":"        snap_description \u003d \u0027:\u0027.join(filter(None, display_list))"},{"line_number":872,"context_line":"        # Limit to 254 characters"},{"line_number":873,"context_line":"        LOG.debug(\"snap_description -%s\", snap_description)"},{"line_number":874,"context_line":"        snap_description \u003d snap_description[:254]"},{"line_number":875,"context_line":"        LOG.info(_LI(\u0027Creating snapshot for volume_name\u003d%(vol)s\u0027"},{"line_number":876,"context_line":"                     \u0027 snap_name\u003d%(name)s snap_description\u003d%(desc)s\u0027),"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_0ac63f49","line":873,"range":{"start_line":873,"start_character":36,"end_line":873,"end_character":39},"in_reply_to":"3ac371cc_580b18d6","updated":"2016-08-18 20:12:41.000000000","message":"Done","commit_id":"8d3936037ab786b35d875fa07ceb220121cf4704"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e92350a17b40f1f6d50e9c34e46bf0685e330988","unresolved":false,"context_lines":[{"line_number":296,"context_line":"        snapshot \u003d {\u0027volume_name\u0027: src_vref[\u0027name\u0027],"},{"line_number":297,"context_line":"                    \u0027name\u0027: snapshot_name,"},{"line_number":298,"context_line":"                    \u0027volume_size\u0027: src_vref[\u0027size\u0027],"},{"line_number":299,"context_line":"                    \u0027display_name\u0027: volume[\u0027display_name\u0027],"},{"line_number":300,"context_line":"                    \u0027display_description\u0027: \u0027\u0027}"},{"line_number":301,"context_line":"        self.APIExecutor.snap_vol(snapshot)"},{"line_number":302,"context_line":"        self._clone_volume_from_snapshot(volume, snapshot)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1ac06dbe_ec82dfc7","line":299,"range":{"start_line":299,"start_character":36,"end_line":299,"end_character":58},"updated":"2016-08-19 11:11:47.000000000","message":"-1: volume.display_name","commit_id":"d7ea774e18e49f87d9d7b93e556df8a001d8775e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"8c4ac3295d995dc0a6042d278e4f9529d88d9d5a","unresolved":false,"context_lines":[{"line_number":64,"context_line":"LUN_ID \u003d \u00270\u0027"},{"line_number":65,"context_line":"WARN_LEVEL \u003d 0.8"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"# work around for ubuntu_openssl_bug_965371. Python soap client suds"},{"line_number":68,"context_line":"# throws the error ssl-certificate-verify-failed-error, workaround to disable"},{"line_number":69,"context_line":"# ssl check for now"},{"line_number":70,"context_line":"if hasattr(ssl, \u0027_create_unverified_context\u0027):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ac06dbe_e0b6bff7","line":67,"range":{"start_line":67,"start_character":2,"end_line":67,"end_character":6},"updated":"2016-08-23 10:08:01.000000000","message":"nit: Work","commit_id":"e58834180aada3f397356eb0831bedd95e3ad717"},{"author":{"_account_id":16668,"name":"Raunak Kumar","email":"rkumar@nimblestorage.com","username":"rkumar"},"change_message_id":"5d947f7c4c12ef8e06cbf75ba692dabef7a332fd","unresolved":false,"context_lines":[{"line_number":64,"context_line":"LUN_ID \u003d \u00270\u0027"},{"line_number":65,"context_line":"WARN_LEVEL \u003d 0.8"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"# work around for ubuntu_openssl_bug_965371. Python soap client suds"},{"line_number":68,"context_line":"# throws the error ssl-certificate-verify-failed-error, workaround to disable"},{"line_number":69,"context_line":"# ssl check for now"},{"line_number":70,"context_line":"if hasattr(ssl, \u0027_create_unverified_context\u0027):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ac06dbe_bb25ff5c","line":67,"range":{"start_line":67,"start_character":2,"end_line":67,"end_character":6},"in_reply_to":"1ac06dbe_e0b6bff7","updated":"2016-08-23 16:54:42.000000000","message":"Done","commit_id":"e58834180aada3f397356eb0831bedd95e3ad717"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5e31ec416c637d613defa043a071aa7c67c93b3f","unresolved":false,"context_lines":[{"line_number":255,"context_line":"                                            ignore_list\u003d[\u0027SM-enoent\u0027])"},{"line_number":256,"context_line":"        self.APIExecutor.delete_vol(volume[\u0027name\u0027], ignore_list\u003d[\u0027SM-enoent\u0027])"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        \u0027\u0027\u0027"},{"line_number":259,"context_line":"        Nimble backend does not delete the snapshot from the parent volume"},{"line_number":260,"context_line":"        if there is a dependent clone. So the deletes need to be in reverse"},{"line_number":261,"context_line":"        order i.e."},{"line_number":262,"context_line":"        1. First delete the clone volume used for backup"},{"line_number":263,"context_line":"        2. Delete the base snapshot use for clone from the parent volume."},{"line_number":264,"context_line":"        \u0027\u0027\u0027"},{"line_number":265,"context_line":"        if snap_name and vol_name:"},{"line_number":266,"context_line":"            self.APIExecutor.online_snap(vol_name,"},{"line_number":267,"context_line":"                                         False,"}],"source_content_type":"text/x-python","patch_set":12,"id":"1ac06dbe_fd3c54e2","line":264,"range":{"start_line":258,"start_character":0,"end_line":264,"end_character":11},"updated":"2016-08-24 10:08:28.000000000","message":"-1: This is not PEP8 compliant, regardless of what the CI says.  Each line should start with a # instead of creating this kind of string [1].\n\nWhile this is a great comment on why we are doing it in this order and you shouldn\u0027t remove it, what we discussed on IRC was that the comment would explain why this driver is treating differently deleting a normal cloned volume from deleting a temporary cloned volume for backups, since one would expect that deleting a clone would be the same regardless of the use that is given to that clone.\n\n[1]: https://www.python.org/dev/peps/pep-0008/#block-comments","commit_id":"8606e2e7818cf298517dc3699023ce81a630b07b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"76196a6cb5bdab3ffa79448873489b2afaf3822f","unresolved":false,"context_lines":[{"line_number":262,"context_line":"        # 2. Delete the base snapshot used for clone from the parent volume."},{"line_number":263,"context_line":"        # This is only done for the force backup clone operation as it is"},{"line_number":264,"context_line":"        # a temporary operation in which we are certain that the snapshot does"},{"line_number":265,"context_line":"        # not need to be preserved after the backup is completed."},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        if snap_name and vol_name:"},{"line_number":268,"context_line":"            self.APIExecutor.online_snap(vol_name,"}],"source_content_type":"text/x-python","patch_set":13,"id":"1ac06dbe_e27f8364","line":265,"updated":"2016-08-24 14:04:58.000000000","message":"PERFECT!!!!","commit_id":"1f7f45e34a4f21e1f017bfbd8aa7f9523680dfd4"}]}
