)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3bcf0c7d672af9c4bee6bed4d3cb60ee8f8c0537","unresolved":false,"context_lines":[{"line_number":10,"context_line":"\u0027Concerto OS 7\u0027. A new Violin iSCSI cinder driver is added in this"},{"line_number":11,"context_line":"change to support iSCSI in the 7000 series Openstack deployments."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Review comments incorporated"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"DocImpact"},{"line_number":16,"context_line":"Implements: blueprint vmem-7000-series-iscsi-driver"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"bab6814e_33580788","line":13,"updated":"2016-05-22 20:16:17.000000000","message":"Not sure why this line is here. This can be removed if you are doing an update.","commit_id":"45e7401f0943ee683e826c6bd2e06ad794858ebd"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"c832d80f2bab1b441723094ca9211c448644b0b6","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Vasanthi Thirumalai \u003cvthirumalai@vmem.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-06-21 22:40:23 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Violin Memory ISCSI storage for 7000 series AFA"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The latest 7000 series Violin arrays are based on a new OS called"},{"line_number":10,"context_line":"\u0027Concerto OS 7\u0027. A new Violin iSCSI cinder driver is added in this"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"3aaa91ec_77097b2c","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":47},"updated":"2016-06-22 09:48:22.000000000","message":"nit: Violin iSCSI driver for 7000 series","commit_id":"4712c74d2a97ae45c5140c4cdfc3053d9689fc59"}],"cinder/exception.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"8b54f2d51589504baff2d2402cfc36af573529f9","unresolved":false,"context_lines":[{"line_number":1026,"context_line":""},{"line_number":1027,"context_line":""},{"line_number":1028,"context_line":"class ViolinResourceNotFound(CinderException):"},{"line_number":1029,"context_line":"    message \u003d _(\"Backend reports: No suitable resource\")"},{"line_number":1030,"context_line":""},{"line_number":1031,"context_line":""},{"line_number":1032,"context_line":"# ZFSSA NFS driver exception."}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_00698bbe","line":1029,"updated":"2016-06-03 17:55:48.000000000","message":"This should inherit from VolumeDriverException or VolumeBackendAPIException rather than CinderException.","commit_id":"857b9eb1aa1f253758f75705b304e513a98888a2"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"c832d80f2bab1b441723094ca9211c448644b0b6","unresolved":false,"context_lines":[{"line_number":1043,"context_line":"    message \u003d _(\"Backend reports: item not found\")"},{"line_number":1044,"context_line":""},{"line_number":1045,"context_line":""},{"line_number":1046,"context_line":"class ViolinResourceNotFound(VolumeBackendAPIException):"},{"line_number":1047,"context_line":"    message \u003d _(\"Backend reports: No suitable resource\")"},{"line_number":1048,"context_line":""},{"line_number":1049,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_b7af63e2","line":1046,"range":{"start_line":1046,"start_character":29,"end_line":1046,"end_character":54},"updated":"2016-06-22 09:48:22.000000000","message":"Why this is extending VolumeBackendAPIException when other similar (based on the error message) Violin* exceptions extend CinderException?","commit_id":"4712c74d2a97ae45c5140c4cdfc3053d9689fc59"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ae4e54b6507a2d523b8abc6eda40331fbd1cb6e7","unresolved":false,"context_lines":[{"line_number":1039,"context_line":"    message \u003d _(\"Backend reports: item already exists\")"},{"line_number":1040,"context_line":""},{"line_number":1041,"context_line":""},{"line_number":1042,"context_line":"class ViolinBackendErrNotFound(VolumeBackendAPIException):"},{"line_number":1043,"context_line":"    message \u003d _(\"Backend reports: item not found\")"},{"line_number":1044,"context_line":""},{"line_number":1045,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1aa78d24_197cc671","line":1042,"updated":"2016-07-02 20:07:39.000000000","message":"Should inherit from the exception NotFound.","commit_id":"6e438db22fbecd0b57b90677a382a8ebfd864a32"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ae4e54b6507a2d523b8abc6eda40331fbd1cb6e7","unresolved":false,"context_lines":[{"line_number":1043,"context_line":"    message \u003d _(\"Backend reports: item not found\")"},{"line_number":1044,"context_line":""},{"line_number":1045,"context_line":""},{"line_number":1046,"context_line":"class ViolinResourceNotFound(VolumeBackendAPIException):"},{"line_number":1047,"context_line":"    message \u003d _(\"Backend reports: No suitable resource\")"},{"line_number":1048,"context_line":""},{"line_number":1049,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1aa78d24_59af6ee3","line":1046,"updated":"2016-07-02 20:07:39.000000000","message":"This should inherit from the exception NotFound.","commit_id":"6e438db22fbecd0b57b90677a382a8ebfd864a32"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ae4e54b6507a2d523b8abc6eda40331fbd1cb6e7","unresolved":false,"context_lines":[{"line_number":1044,"context_line":""},{"line_number":1045,"context_line":""},{"line_number":1046,"context_line":"class ViolinResourceNotFound(VolumeBackendAPIException):"},{"line_number":1047,"context_line":"    message \u003d _(\"Backend reports: No suitable resource\")"},{"line_number":1048,"context_line":""},{"line_number":1049,"context_line":""},{"line_number":1050,"context_line":"# ZFSSA NFS driver exception."}],"source_content_type":"text/x-python","patch_set":12,"id":"1aa78d24_b9865263","line":1047,"updated":"2016-07-02 20:07:39.000000000","message":"The message in ViolinResourceNotFound is very general.  You can\u0027t even tell what kind of resource cannot be found.\n\nSuggest add a %(reason)s parameter in this message.","commit_id":"6e438db22fbecd0b57b90677a382a8ebfd864a32"},{"author":{"_account_id":18026,"name":"huanan","email":"huanan@huawei.com","username":"huanan"},"change_message_id":"6afb65a142501b0d870fcdf6dbd4b72a78568c21","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2010 United States Government as represented by the"},{"line_number":2,"context_line":"# Administrator of the National Aeronautics and Space Administration."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":18,"id":"1aa78d24_1f650144","line":1,"range":{"start_line":1,"start_character":11,"end_line":1,"end_character":16},"updated":"2016-07-13 03:55:30.000000000","message":"I don\u0027t know what\u0027s the effect of time.","commit_id":"7720fce5098fa25eec55dfde6a4eec46fbe4b030"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4f5e78a89b27647434111f3a3b817586e61e775c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2010 United States Government as represented by the"},{"line_number":2,"context_line":"# Administrator of the National Aeronautics and Space Administration."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":18,"id":"1aa78d24_9f8611b7","line":1,"range":{"start_line":1,"start_character":11,"end_line":1,"end_character":16},"in_reply_to":"1aa78d24_1f650144","updated":"2016-07-13 04:01:26.000000000","message":"Copyright only need to state the year when the file was first published.  There is no need to specify a range.  So this is fine.  There are drivers which specify a range, but it is not necessary.","commit_id":"7720fce5098fa25eec55dfde6a4eec46fbe4b030"}],"cinder/tests/unit/fake_vmem_client.py":[{"author":{"_account_id":18026,"name":"huanan","email":"huanan@huawei.com","username":"huanan"},"change_message_id":"6afb65a142501b0d870fcdf6dbd4b72a78568c21","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 Violin Memory, Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":18,"id":"1aa78d24_bfd30d03","line":1,"range":{"start_line":1,"start_character":11,"end_line":1,"end_character":16},"updated":"2016-07-13 03:55:30.000000000","message":"Same","commit_id":"7720fce5098fa25eec55dfde6a4eec46fbe4b030"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4f5e78a89b27647434111f3a3b817586e61e775c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 Violin Memory, Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":18,"id":"1aa78d24_ff9115f2","line":1,"range":{"start_line":1,"start_character":11,"end_line":1,"end_character":16},"in_reply_to":"1aa78d24_bfd30d03","updated":"2016-07-13 04:01:26.000000000","message":"Same","commit_id":"7720fce5098fa25eec55dfde6a4eec46fbe4b030"}],"cinder/tests/unit/test_v7000_common.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a2f3021ef59d97998fd394da550ca664435b6894","unresolved":false,"context_lines":[{"line_number":509,"context_line":"            storage_pool_id\u003d99)"},{"line_number":510,"context_line":"        self.assertIsNone(result)"},{"line_number":511,"context_line":""},{"line_number":512,"context_line":"#    def test_fail_extend_dedup_lun(self):"},{"line_number":513,"context_line":"#        \"\"\"Volume extend fails when new size would shrink the volume.\"\"\""},{"line_number":514,"context_line":"#        vol \u003d VOLUME.copy()"},{"line_number":515,"context_line":"#        vol[\u0027volume_type_id\u0027] \u003d \u00271\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba63e191_cd47f61b","line":512,"updated":"2016-01-19 21:35:10.000000000","message":"Commented out code should be removed. Although I think you want to actually have these tests.","commit_id":"5e82e302e861f5b86565bfafe81648612e6370bd"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"009f654eff3142657700cf213dbe00f76ffce04e","unresolved":false,"context_lines":[{"line_number":509,"context_line":"            storage_pool_id\u003d99)"},{"line_number":510,"context_line":"        self.assertIsNone(result)"},{"line_number":511,"context_line":""},{"line_number":512,"context_line":"#    def test_fail_extend_dedup_lun(self):"},{"line_number":513,"context_line":"#        \"\"\"Volume extend fails when new size would shrink the volume.\"\"\""},{"line_number":514,"context_line":"#        vol \u003d VOLUME.copy()"},{"line_number":515,"context_line":"#        vol[\u0027volume_type_id\u0027] \u003d \u00271\u0027"},{"line_number":516,"context_line":"#        volume_type \u003d {\u0027id\u0027: 1, \u0027name\u0027: \u0027Dedup\u0027}"},{"line_number":517,"context_line":"#"},{"line_number":518,"context_line":"#        size_in_mb \u003d vol[\u0027size\u0027] * units.Ki"},{"line_number":519,"context_line":"#        self.driver.vmem_mg \u003d self.setup_mock_concerto()"},{"line_number":520,"context_line":"#        type(self.driver.vmem_mg.utility).is_external_head \u003d"},{"line_number":521,"context_line":"#            mock.PropertyMock(return_value\u003dFalse)"},{"line_number":522,"context_line":"#"},{"line_number":523,"context_line":"#        self.driver._get_volume_type_extra_spec \u003d mock.Mock("},{"line_number":524,"context_line":"#            return_value\u003d\"True\")"},{"line_number":525,"context_line":"#"},{"line_number":526,"context_line":"#        failure \u003d v7000_common.ViolinUnsupportedFeature"},{"line_number":527,"context_line":"#        self.assertRaises(failure, self.driver._extend_lun,"},{"line_number":528,"context_line":"#                          vol, size_in_mb)"},{"line_number":529,"context_line":"#"},{"line_number":530,"context_line":"#    def test_extend_dedup_lun_external_head(self):"},{"line_number":531,"context_line":"#        \"\"\"Volume extend fails when new size would shrink the volume.\"\"\""},{"line_number":532,"context_line":"#        vol \u003d VOLUME.copy()"},{"line_number":533,"context_line":"#        vol[\u0027volume_type_id\u0027] \u003d \u00271\u0027"},{"line_number":534,"context_line":"#        volume_type \u003d {\u0027id\u0027: 1, \u0027name\u0027: \u0027Dedup\u0027}"},{"line_number":535,"context_line":"#        new_volume_size \u003d 10"},{"line_number":536,"context_line":"#"},{"line_number":537,"context_line":"#        response \u003d{\u0027success\u0027: True, \u0027message\u0027: \u0027Expand resource successfully\u0027}"},{"line_number":538,"context_line":"#        conf \u003d {"},{"line_number":539,"context_line":"#            \u0027lun.extend_lun.return_value\u0027: response,"},{"line_number":540,"context_line":"#        }"},{"line_number":541,"context_line":"#"},{"line_number":542,"context_line":"#        self.driver.vmem_mg \u003d self.setup_mock_concerto(m_conf\u003dconf)"},{"line_number":543,"context_line":"#        type(self.driver.vmem_mg.utility).is_external_head \u003d"},{"line_number":544,"context_line":"#             mock.PropertyMock(return_value\u003dFalse)"},{"line_number":545,"context_line":"#"},{"line_number":546,"context_line":"#        change_in_size_mb \u003d (new_volume_size - VOLUME[\u0027size\u0027]) * units.Ki"},{"line_number":547,"context_line":"#        self.driver._send_cmd \u003d mock.Mock(return_value\u003dresponse)"},{"line_number":548,"context_line":"#"},{"line_number":549,"context_line":"#        result \u003d self.driver._extend_lun(VOLUME, new_volume_size)"},{"line_number":550,"context_line":"#"},{"line_number":551,"context_line":"#        self.driver._send_cmd.assert_called_with("},{"line_number":552,"context_line":"#            self.driver.vmem_mg.lun.extend_lun,"},{"line_number":553,"context_line":"#            response[\u0027message\u0027], VOLUME[\u0027id\u0027], change_in_size_mb)"},{"line_number":554,"context_line":"#        self.assertTrue(result is None)"},{"line_number":555,"context_line":"#"},{"line_number":556,"context_line":""},{"line_number":557,"context_line":"    def test_create_non_dedup_lun(self):"},{"line_number":558,"context_line":"        \"\"\"Lun is successfully created.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a122d0e_fe0f3a36","line":555,"range":{"start_line":512,"start_character":0,"end_line":555,"end_character":1},"updated":"2016-04-29 20:13:41.000000000","message":"Why is all this commented out?","commit_id":"fe7b5bb80fd1cc234affaacc8e5ace47757c25fd"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"66d0d59897ab77d351a710ffdf8e4aef569db0f1","unresolved":false,"context_lines":[{"line_number":549,"context_line":"        self.driver._send_cmd.assert_called_with("},{"line_number":550,"context_line":"            self.driver.vmem_mg.lun.extend_lun,"},{"line_number":551,"context_line":"            response[\u0027message\u0027], VOLUME[\u0027id\u0027], change_in_size_mb)"},{"line_number":552,"context_line":"        self.assertTrue(result is None)"},{"line_number":553,"context_line":""},{"line_number":554,"context_line":"    def test_create_non_dedup_lun(self):"},{"line_number":555,"context_line":"        \"\"\"Lun is successfully created.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_44156799","line":552,"updated":"2016-05-13 22:43:13.000000000","message":"Change to self.assertIsNone(result)","commit_id":"1bfa2c39174a69303027eb41856f64723d7f1723"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f02351180d82c8b68926dab9285168c013cb1e68","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 Violin Memory, Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_94067e83","line":1,"updated":"2016-06-10 14:31:22.000000000","message":"The year of the Copyright should be when the code was first published.  So this should stay as 2015.","commit_id":"857b9eb1aa1f253758f75705b304e513a98888a2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f02351180d82c8b68926dab9285168c013cb1e68","unresolved":false,"context_lines":[{"line_number":522,"context_line":"        self.driver._get_volume_type_extra_spec \u003d mock.Mock("},{"line_number":523,"context_line":"            return_value\u003d\"True\")"},{"line_number":524,"context_line":""},{"line_number":525,"context_line":"        failure \u003d exception.VolumeDriverException"},{"line_number":526,"context_line":"        self.assertRaises(failure, self.driver._extend_lun,"},{"line_number":527,"context_line":"                          vol, size_in_mb)"},{"line_number":528,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_b7257caf","line":525,"updated":"2016-06-10 14:31:22.000000000","message":"It\u0027s not necessary to make this assignment.  You can use exception.VolumeDriverException directly in assertRaises on line 526.","commit_id":"857b9eb1aa1f253758f75705b304e513a98888a2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ae4e54b6507a2d523b8abc6eda40331fbd1cb6e7","unresolved":false,"context_lines":[{"line_number":1402,"context_line":"        owner \u003d \u0027lab-host1\u0027"},{"line_number":1403,"context_line":""},{"line_number":1404,"context_line":"        def lookup(value):"},{"line_number":1405,"context_line":"            return str(value) + \u0027.vmem.com\u0027"},{"line_number":1406,"context_line":"        conf \u003d {"},{"line_number":1407,"context_line":"            \u0027pool.get_storage_pools.return_value\u0027: STATS_STORAGE_POOL_RESPONSE,"},{"line_number":1408,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":12,"id":"1aa78d24_798d0a7b","line":1405,"updated":"2016-07-02 20:07:39.000000000","message":"str() -\u003e six.text_type()","commit_id":"6e438db22fbecd0b57b90677a382a8ebfd864a32"},{"author":{"_account_id":18026,"name":"huanan","email":"huanan@huawei.com","username":"huanan"},"change_message_id":"6afb65a142501b0d870fcdf6dbd4b72a78568c21","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Violin Memory, Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":18,"id":"1aa78d24_7fe525da","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"updated":"2016-07-13 03:55:30.000000000","message":"Same","commit_id":"7720fce5098fa25eec55dfde6a4eec46fbe4b030"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4f5e78a89b27647434111f3a3b817586e61e775c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Violin Memory, Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":18,"id":"1aa78d24_df8c19d9","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"in_reply_to":"1aa78d24_7fe525da","updated":"2016-07-13 04:01:26.000000000","message":"Same","commit_id":"7720fce5098fa25eec55dfde6a4eec46fbe4b030"}],"cinder/tests/unit/test_v7000_fcp.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f02351180d82c8b68926dab9285168c013cb1e68","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 Violin Memory, Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_d7cc88bd","line":1,"updated":"2016-06-10 14:31:22.000000000","message":"Same. It should stay as 2015 which was when the code was first published.","commit_id":"857b9eb1aa1f253758f75705b304e513a98888a2"}],"cinder/tests/unit/test_v7000_iscsi.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a2f3021ef59d97998fd394da550ca664435b6894","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Violin Memory, Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba63e191_cdf5b6cb","line":1,"updated":"2016-01-19 21:35:10.000000000","message":"2016?","commit_id":"5e82e302e861f5b86565bfafe81648612e6370bd"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a2f3021ef59d97998fd394da550ca664435b6894","unresolved":false,"context_lines":[{"line_number":203,"context_line":""},{"line_number":204,"context_line":"        self.driver.common._create_lun_from_lun.assert_called_with("},{"line_number":205,"context_line":"            SRC_VOL, VOLUME)"},{"line_number":206,"context_line":"        self.assertTrue(result is None)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def test_delete_volume(self):"},{"line_number":209,"context_line":"        \"\"\"Volume deleted successfully.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba63e191_ade882e3","line":206,"updated":"2016-01-19 21:35:10.000000000","message":"Probably better to use assertIsNone.","commit_id":"5e82e302e861f5b86565bfafe81648612e6370bd"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"66d0d59897ab77d351a710ffdf8e4aef569db0f1","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        \"\"\"No setup errors are found.\"\"\""},{"line_number":176,"context_line":"        result \u003d self.driver.check_for_setup_error()"},{"line_number":177,"context_line":"        m_setup_func.assert_called_with()"},{"line_number":178,"context_line":"        self.assertTrue(result is None)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def test_create_volume(self):"},{"line_number":181,"context_line":"        \"\"\"Volume created successfully.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_04f87f48","line":178,"range":{"start_line":178,"start_character":13,"end_line":178,"end_character":23},"updated":"2016-05-13 22:43:13.000000000","message":"assertIsNone()\n\nSeveral instances.","commit_id":"1bfa2c39174a69303027eb41856f64723d7f1723"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"66d0d59897ab77d351a710ffdf8e4aef569db0f1","unresolved":false,"context_lines":[{"line_number":280,"context_line":"        props \u003d self.driver.initialize_connection(VOLUME, CONNECTOR)"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"        self.driver._export_lun.assert_called_with(VOLUME, TARGET, CONNECTOR)"},{"line_number":283,"context_line":"        self.assertEqual(props[\u0027driver_volume_type\u0027], \"iscsi\")"},{"line_number":284,"context_line":"        self.assertEqual(props[\u0027data\u0027][\u0027target_discovered\u0027], False)"},{"line_number":285,"context_line":"        self.assertEqual(props[\u0027data\u0027][\u0027target_iqn\u0027], TARGET)"},{"line_number":286,"context_line":"        self.assertEqual(props[\u0027data\u0027][\u0027target_lun\u0027], lun_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_24ab031f","line":283,"updated":"2016-05-13 22:43:13.000000000","message":"Switch these to be in the order (expected_value, actual_value)","commit_id":"1bfa2c39174a69303027eb41856f64723d7f1723"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3bcf0c7d672af9c4bee6bed4d3cb60ee8f8c0537","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Violin Memory, Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_93cd7333","line":1,"updated":"2016-05-22 20:16:17.000000000","message":"Dates can be updated now if you do an update.","commit_id":"45e7401f0943ee683e826c6bd2e06ad794858ebd"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f02351180d82c8b68926dab9285168c013cb1e68","unresolved":false,"context_lines":[{"line_number":281,"context_line":""},{"line_number":282,"context_line":"        self.driver._export_lun.assert_called_with(VOLUME, TARGET, CONNECTOR)"},{"line_number":283,"context_line":"        self.assertEqual(\"iscsi\", props[\u0027driver_volume_type\u0027])"},{"line_number":284,"context_line":"        self.assertEqual(False, props[\u0027data\u0027][\u0027target_discovered\u0027])"},{"line_number":285,"context_line":"        self.assertEqual(TARGET, props[\u0027data\u0027][\u0027target_iqn\u0027])"},{"line_number":286,"context_line":"        self.assertEqual(lun_id, props[\u0027data\u0027][\u0027target_lun\u0027])"},{"line_number":287,"context_line":"        self.assertEqual(VOLUME[\u0027id\u0027], props[\u0027data\u0027][\u0027volume_id\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_97b840c9","line":284,"updated":"2016-06-10 14:31:22.000000000","message":"Use assertFalse.","commit_id":"857b9eb1aa1f253758f75705b304e513a98888a2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f02351180d82c8b68926dab9285168c013cb1e68","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        result \u003d self.driver.terminate_connection(VOLUME, CONNECTOR)"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"        self.driver._unexport_lun.assert_called_with(VOLUME, TARGET, CONNECTOR)"},{"line_number":298,"context_line":"        self.assertEqual(result, None)"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    def test_export_lun(self):"},{"line_number":301,"context_line":"        lun_id \u003d \u00271\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_d79be864","line":298,"updated":"2016-06-10 14:31:22.000000000","message":"Use assertIsNone.","commit_id":"857b9eb1aa1f253758f75705b304e513a98888a2"}],"cinder/volume/drivers/violin/v7000_common.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a2f3021ef59d97998fd394da550ca664435b6894","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                help\u003d\u0027Storage pools capable of dedup and other luns\u0027),"},{"line_number":83,"context_line":"    cfg.StrOpt(\u0027violin_pool_allocation_method\u0027,"},{"line_number":84,"context_line":"               default\u003d\u0027random\u0027,"},{"line_number":85,"context_line":"               help\u003d\u0027Method of choosing a storage pool for a lun\u0027),"},{"line_number":86,"context_line":"    cfg.ListOpt(\u0027violin_iscsi_target_ips\u0027,"},{"line_number":87,"context_line":"                default\u003d[],"},{"line_number":88,"context_line":"                help\u003d\u0027List of target iSCSI addresses to use.\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba63e191_adcba252","line":85,"updated":"2016-01-19 21:35:10.000000000","message":"May want to include a list of acceptable values in the help text here.","commit_id":"5e82e302e861f5b86565bfafe81648612e6370bd"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a2f3021ef59d97998fd394da550ca664435b6894","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"                LOG.warning(_LW(\"Storage pools not configured\"))"},{"line_number":125,"context_line":"                raise exception.InvalidInput("},{"line_number":126,"context_line":"                    reason\u003d_(\u0027Storage pool configuration is \\"},{"line_number":127,"context_line":"                        mandatory for external head\u0027))"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def check_for_setup_error(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba63e191_8d1c9ec2","line":126,"updated":"2016-01-19 21:35:10.000000000","message":"Don\u0027t use the \\ for multiple lines. You can end the string on this line with a closing \u0027 and just have the rest of the string on the next line. Python will combine the two together automatically.","commit_id":"5e82e302e861f5b86565bfafe81648612e6370bd"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a2f3021ef59d97998fd394da550ca664435b6894","unresolved":false,"context_lines":[{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        source_lun_info \u003d self.vmem_mg.lun.get_lun_info(snapshot[\u0027volume_id\u0027])"},{"line_number":349,"context_line":"        if source_lun_info[\u0027subType\u0027] !\u003d \u0027THICK\u0027:"},{"line_number":350,"context_line":"            msg \u003d _LW(\u0027Lun copy currently only supported for thick luns\u0027)"},{"line_number":351,"context_line":"            LOG.warning(msg)"},{"line_number":352,"context_line":"            raise exception.ViolinBackendErr(message\u003dmsg)"},{"line_number":353,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba63e191_08d41545","line":350,"updated":"2016-01-19 21:35:10.000000000","message":"Needs to be _() instead of _LW() since it\u0027s also used in the exception.","commit_id":"5e82e302e861f5b86565bfafe81648612e6370bd"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a2f3021ef59d97998fd394da550ca664435b6894","unresolved":false,"context_lines":[{"line_number":906,"context_line":"            msg \u003d _(\"Backend does not have a suitable storage pool.\")"},{"line_number":907,"context_line":"            raise exception.ViolinBackendErr(message\u003dmsg)"},{"line_number":908,"context_line":""},{"line_number":909,"context_line":"        LOG.debug(\"Storage pool returned is %s\" %"},{"line_number":910,"context_line":"                  selected_pool[\u0027storage_pool\u0027])"},{"line_number":911,"context_line":""},{"line_number":912,"context_line":"        return selected_pool"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba63e191_286319de","line":909,"updated":"2016-01-19 21:35:10.000000000","message":"Change % to ,","commit_id":"5e82e302e861f5b86565bfafe81648612e6370bd"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a2f3021ef59d97998fd394da550ca664435b6894","unresolved":false,"context_lines":[{"line_number":1021,"context_line":""},{"line_number":1022,"context_line":"        def _loop_func():"},{"line_number":1023,"context_line":"            LOG.debug(\"Entering _wait_run_delete_lun_snapshot loop: \""},{"line_number":1024,"context_line":"                      \"vol\u003d%(vol)s, snap_id\u003d%(snap_id)s, oid\u003d%(oid)s\" %"},{"line_number":1025,"context_line":"                      {\u0027vol\u0027: cinder_volume_id,"},{"line_number":1026,"context_line":"                       \u0027oid\u0027: oid,"},{"line_number":1027,"context_line":"                       \u0027snap_id\u0027: cinder_snapshot_id})"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba63e191_e882e151","line":1024,"updated":"2016-01-19 21:35:10.000000000","message":"% \u003d\u003e ,","commit_id":"5e82e302e861f5b86565bfafe81648612e6370bd"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a2f3021ef59d97998fd394da550ca664435b6894","unresolved":false,"context_lines":[{"line_number":1031,"context_line":""},{"line_number":1032,"context_line":"            if ans[\u0027success\u0027]:"},{"line_number":1033,"context_line":"                LOG.debug(\"Delete snapshot %(snap_id)s for %(vol)s: \""},{"line_number":1034,"context_line":"                          \"success\" % {\u0027vol\u0027: cinder_volume_id,"},{"line_number":1035,"context_line":"                                       \u0027snap_id\u0027: cinder_snapshot_id})"},{"line_number":1036,"context_line":"                raise loopingcall.LoopingCallDone(retvalue\u003dTrue)"},{"line_number":1037,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba63e191_a87ce972","line":1034,"updated":"2016-01-19 21:35:10.000000000","message":"% \u003d\u003e ,","commit_id":"5e82e302e861f5b86565bfafe81648612e6370bd"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a2f3021ef59d97998fd394da550ca664435b6894","unresolved":false,"context_lines":[{"line_number":1036,"context_line":"                raise loopingcall.LoopingCallDone(retvalue\u003dTrue)"},{"line_number":1037,"context_line":"            else:"},{"line_number":1038,"context_line":"                LOG.warning(_LW(\"Delete snapshot %(snap)s of %(vol)s \""},{"line_number":1039,"context_line":"                                \"encountered temporary error: %(msg)s\") %"},{"line_number":1040,"context_line":"                            {\u0027snap\u0027: cinder_snapshot_id,"},{"line_number":1041,"context_line":"                             \u0027vol\u0027: cinder_volume_id,"},{"line_number":1042,"context_line":"                             \u0027msg\u0027: ans[\u0027msg\u0027]})"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba63e191_6897d190","line":1039,"updated":"2016-01-19 21:35:10.000000000","message":"% \u003d\u003e ,","commit_id":"5e82e302e861f5b86565bfafe81648612e6370bd"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a2f3021ef59d97998fd394da550ca664435b6894","unresolved":false,"context_lines":[{"line_number":1046,"context_line":""},{"line_number":1047,"context_line":"        if not success:"},{"line_number":1048,"context_line":"                raise exception.ViolinBackendErr("},{"line_number":1049,"context_line":"                    (\"Failed to delete snapshot %(snap)s of volume %(vol)s\") %"},{"line_number":1050,"context_line":"                    {\u0027snap\u0027: cinder_snapshot_id, \u0027vol\u0027: cinder_volume_id})"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba63e191_a8f38909","line":1049,"updated":"2016-01-19 21:35:10.000000000","message":"Needs _() translation marker.","commit_id":"5e82e302e861f5b86565bfafe81648612e6370bd"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"009f654eff3142657700cf213dbe00f76ffce04e","unresolved":false,"context_lines":[{"line_number":124,"context_line":""},{"line_number":125,"context_line":"                LOG.warning(_LW(\"Storage pools not configured\"))"},{"line_number":126,"context_line":"                raise exception.InvalidInput("},{"line_number":127,"context_line":"                    reason\u003d_(\u0027Storage pool configuration is \\"},{"line_number":128,"context_line":"                        mandatory for external head\u0027))"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def check_for_setup_error(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a122d0e_1948502c","line":127,"range":{"start_line":127,"start_character":60,"end_line":127,"end_character":61},"updated":"2016-04-29 20:13:41.000000000","message":"Is this necessary? Since you have the \u0027()\u0027 around the string anyway?","commit_id":"fe7b5bb80fd1cc234affaacc8e5ace47757c25fd"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"66d0d59897ab77d351a710ffdf8e4aef569db0f1","unresolved":false,"context_lines":[{"line_number":317,"context_line":"            ViolinBackendErr: If backend reports an error during the"},{"line_number":318,"context_line":"                delete snapshot phase."},{"line_number":319,"context_line":"        \"\"\""},{"line_number":320,"context_line":"        LOG.debug(\"Deleting snapshot %(snap_id)s on volume \" +"},{"line_number":321,"context_line":"                  \"%(vol_id)s %(dpy_name)s\","},{"line_number":322,"context_line":"                  {\u0027snap_id\u0027: snapshot[\u0027id\u0027],"},{"line_number":323,"context_line":"                   \u0027vol_id\u0027: snapshot[\u0027volume_id\u0027],"}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_a709b52e","line":320,"range":{"start_line":320,"start_character":60,"end_line":320,"end_character":62},"updated":"2016-05-13 22:43:13.000000000","message":"Remove this, not needed.","commit_id":"1bfa2c39174a69303027eb41856f64723d7f1723"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"66d0d59897ab77d351a710ffdf8e4aef569db0f1","unresolved":false,"context_lines":[{"line_number":760,"context_line":"                raise loopingcall.LoopingCallDone(retvalue\u003dTrue)"},{"line_number":761,"context_line":"            elif mb_copied is not None:"},{"line_number":762,"context_line":"                # copy is in progress"},{"line_number":763,"context_line":"                LOG.debug(\"MB copied:%d, percent done: %d.\","},{"line_number":764,"context_line":"                          mb_copied, percent)"},{"line_number":765,"context_line":"                pass"},{"line_number":766,"context_line":"            elif percent \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_075ec111","line":763,"updated":"2016-05-13 22:43:13.000000000","message":"Need space after \"copied:\"\n\nFor more than one variable use named arguments:\n\n\"MB copied: %{copied}s, percent done: %{percent}d\", {\u0027cppied\u0027: mb_copied, \u0027percent\u0027: percent}","commit_id":"1bfa2c39174a69303027eb41856f64723d7f1723"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"66d0d59897ab77d351a710ffdf8e4aef569db0f1","unresolved":false,"context_lines":[{"line_number":774,"context_line":"            else:"},{"line_number":775,"context_line":"                # unexpected case"},{"line_number":776,"context_line":"                LOG.debug(\"unexpected case (%{id}s, %{bytes}s, %{percent}s)\","},{"line_number":777,"context_line":"                          {\u0027id\u0027: six.text_type(target_id),"},{"line_number":778,"context_line":"                           \u0027bytes\u0027: six.text_type(mb_copied),"},{"line_number":779,"context_line":"                           \u0027percent\u0027: six.text_type(percent)})"},{"line_number":780,"context_line":"                raise loopingcall.LoopingCallDone(retvalue\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_a7a53505","line":777,"range":{"start_line":777,"start_character":33,"end_line":777,"end_character":46},"updated":"2016-05-13 22:43:13.000000000","message":"Remove six.text_type as the logger will do that if and when needed.","commit_id":"1bfa2c39174a69303027eb41856f64723d7f1723"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3bcf0c7d672af9c4bee6bed4d3cb60ee8f8c0537","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    cfg.StrOpt(\u0027violin_pool_allocation_method\u0027,"},{"line_number":84,"context_line":"               default\u003d\u0027random\u0027,"},{"line_number":85,"context_line":"               help\u003d\u0027Method of choosing a storage pool for a lun. \u0027"},{"line_number":86,"context_line":"                    \u0027Accesptable values are random, largest and smallest\u0027),"},{"line_number":87,"context_line":"    cfg.ListOpt(\u0027violin_iscsi_target_ips\u0027,"},{"line_number":88,"context_line":"                default\u003d[],"},{"line_number":89,"context_line":"                help\u003d\u0027List of target iSCSI addresses to use.\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_33df67da","line":86,"range":{"start_line":86,"start_character":21,"end_line":86,"end_character":32},"updated":"2016-05-22 20:16:17.000000000","message":"/Accesptable/Acceptable/","commit_id":"45e7401f0943ee683e826c6bd2e06ad794858ebd"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8ebbe7ef8a2cdb3ab895bec58df4a9d48939c73f","unresolved":false,"context_lines":[{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        except exception.ViolinBackendErrExists:"},{"line_number":217,"context_line":"            LOG.exception(_LE(\"Lun %s has dependent snapshots, \""},{"line_number":218,"context_line":"                              \"skipping lun deletion.\"), volume[\u0027id\u0027])"},{"line_number":219,"context_line":"            raise exception.VolumeIsBusy(volume_name\u003dvolume[\u0027id\u0027])"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_4f13a9b8","line":218,"updated":"2016-05-25 21:57:48.000000000","message":"Is this necessary?  Cinder API will check if there are snapshots on the volume and prevent delete from happening if there are snapshots.  If cascade option is set to True, manager will delete all snapshots before deleting the volume.","commit_id":"45e7401f0943ee683e826c6bd2e06ad794858ebd"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"8b54f2d51589504baff2d2402cfc36af573529f9","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    cfg.StrOpt(\u0027violin_pool_allocation_method\u0027,"},{"line_number":84,"context_line":"               default\u003d\u0027random\u0027,"},{"line_number":85,"context_line":"               help\u003d\u0027Method of choosing a storage pool for a lun. \u0027"},{"line_number":86,"context_line":"                    \u0027Acceptable values are random, largest and smallest\u0027),"},{"line_number":87,"context_line":"    cfg.ListOpt(\u0027violin_iscsi_target_ips\u0027,"},{"line_number":88,"context_line":"                default\u003d[],"},{"line_number":89,"context_line":"                help\u003d\u0027List of target iSCSI addresses to use.\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_c0266367","line":86,"updated":"2016-06-03 17:55:48.000000000","message":"Set choices\u003d[\u0027random\u0027, \u0027largest\u0027, \u0027smallest\u0027] for this option.","commit_id":"857b9eb1aa1f253758f75705b304e513a98888a2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f02351180d82c8b68926dab9285168c013cb1e68","unresolved":false,"context_lines":[{"line_number":398,"context_line":""},{"line_number":399,"context_line":"        try:"},{"line_number":400,"context_line":"            source_lun_info \u003d self.vmem_mg.lun.get_lun_info(src_vol[\u0027id\u0027])"},{"line_number":401,"context_line":"            if source_lun_info[\u0027subType\u0027] !\u003d \u0027THICK\u0027:"},{"line_number":402,"context_line":"                msg \u003d _(\u0027Lun copy currently only supported for thick luns\u0027)"},{"line_number":403,"context_line":"                LOG.warning(msg)"},{"line_number":404,"context_line":"                raise exception.ViolinBackendErr(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_77fcb43e","line":401,"updated":"2016-06-10 14:31:22.000000000","message":"Can you use a constant for this?","commit_id":"857b9eb1aa1f253758f75705b304e513a98888a2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f02351180d82c8b68926dab9285168c013cb1e68","unresolved":false,"context_lines":[{"line_number":888,"context_line":"        # User-specified pool takes precedence over others"},{"line_number":889,"context_line":""},{"line_number":890,"context_line":"        pool \u003d None"},{"line_number":891,"context_line":"        typeid \u003d volume[\u0027volume_type_id\u0027]"},{"line_number":892,"context_line":"        if typeid:"},{"line_number":893,"context_line":"            # Extract the storage_pool name if one is specified"},{"line_number":894,"context_line":"            pool \u003d self._get_violin_extra_spec(volume, \"storage_pool\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_57537839","line":891,"updated":"2016-06-10 14:31:22.000000000","message":"It\u0027s safer to use volume.get(\u0027volume_type_id\u0027).  I\u0027ve run into rare cases when this key is not there.","commit_id":"857b9eb1aa1f253758f75705b304e513a98888a2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f02351180d82c8b68926dab9285168c013cb1e68","unresolved":false,"context_lines":[{"line_number":902,"context_line":"            self.config.violin_dedup_capable_pools,"},{"line_number":903,"context_line":"            self.config.violin_pool_allocation_method,"},{"line_number":904,"context_line":"            usage)"},{"line_number":905,"context_line":"        if (selected_pool is None):"},{"line_number":906,"context_line":"            # Backend has not provided a suitable storage pool"},{"line_number":907,"context_line":"            msg \u003d _(\"Backend does not have a suitable storage pool.\")"},{"line_number":908,"context_line":"            raise exception.ViolinBackendErr(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_77aaf41a","line":905,"updated":"2016-06-10 14:31:22.000000000","message":"Parenthesis is not needed.","commit_id":"857b9eb1aa1f253758f75705b304e513a98888a2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f02351180d82c8b68926dab9285168c013cb1e68","unresolved":false,"context_lines":[{"line_number":926,"context_line":"            # default here is 10%"},{"line_number":927,"context_line":"            size_mb \u003d int(size_mb / 10)"},{"line_number":928,"context_line":""},{"line_number":929,"context_line":"        typeid \u003d volume[\u0027volume_type_id\u0027]"},{"line_number":930,"context_line":"        if typeid:"},{"line_number":931,"context_line":"            # extra_specs with thin specified overrides san_thin_provision"},{"line_number":932,"context_line":"            spec_value \u003d self._get_volume_type_extra_spec(volume, \"thin\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_97332013","line":929,"updated":"2016-06-10 14:31:22.000000000","message":"Same.","commit_id":"857b9eb1aa1f253758f75705b304e513a98888a2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8644a74373be9b5b13b0fa070eb9c666a57e6c7a","unresolved":false,"context_lines":[{"line_number":996,"context_line":"            LOG.debug(\u0027pool %(pool)s: %(avail)s / %(total)s MB free%(mod)s\u0027,"},{"line_number":997,"context_line":"                      {\u0027pool\u0027: short_info[\u0027name\u0027], \u0027avail\u0027: pool_free_mb,"},{"line_number":998,"context_line":"                       \u0027total\u0027: pool_total_mb, \u0027mod\u0027: mod})"},{"line_number":999,"context_line":"            free_gb +\u003d int(pool_free_mb / 1024)"},{"line_number":1000,"context_line":"            total_gb +\u003d int(pool_total_mb / 1024)"},{"line_number":1001,"context_line":""},{"line_number":1002,"context_line":"        data \u003d {"}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_30bf04d2","line":999,"updated":"2016-06-22 04:23:51.000000000","message":"Use unit.Ki\n\nhttps://github.com/openstack/oslo.utils/blob/master/oslo_utils/units.py#L21","commit_id":"d33bc710a13bbdf3eb8112d2a741f71155e27e70"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8644a74373be9b5b13b0fa070eb9c666a57e6c7a","unresolved":false,"context_lines":[{"line_number":997,"context_line":"                      {\u0027pool\u0027: short_info[\u0027name\u0027], \u0027avail\u0027: pool_free_mb,"},{"line_number":998,"context_line":"                       \u0027total\u0027: pool_total_mb, \u0027mod\u0027: mod})"},{"line_number":999,"context_line":"            free_gb +\u003d int(pool_free_mb / 1024)"},{"line_number":1000,"context_line":"            total_gb +\u003d int(pool_total_mb / 1024)"},{"line_number":1001,"context_line":""},{"line_number":1002,"context_line":"        data \u003d {"},{"line_number":1003,"context_line":"            \u0027vendor_name\u0027: \u0027Violin Memory, Inc.\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_70b98ce9","line":1000,"updated":"2016-06-22 04:23:51.000000000","message":"Same","commit_id":"d33bc710a13bbdf3eb8112d2a741f71155e27e70"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8644a74373be9b5b13b0fa070eb9c666a57e6c7a","unresolved":false,"context_lines":[{"line_number":1004,"context_line":"            \u0027reserved_percentage\u0027: 0,"},{"line_number":1005,"context_line":"            \u0027QoS_support\u0027: False,"},{"line_number":1006,"context_line":"            \u0027free_capacity_gb\u0027: free_gb,"},{"line_number":1007,"context_line":"            \u0027total_capacity_gb\u0027: total_gb,"},{"line_number":1008,"context_line":"        }"},{"line_number":1009,"context_line":""},{"line_number":1010,"context_line":"        return data"}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_b0793432","line":1007,"updated":"2016-06-22 04:23:51.000000000","message":"You support thin provisioning. Do you have plan to support over subscription?\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/lvm.py#L254-L257","commit_id":"d33bc710a13bbdf3eb8112d2a741f71155e27e70"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"c832d80f2bab1b441723094ca9211c448644b0b6","unresolved":false,"context_lines":[{"line_number":77,"context_line":"               help\u003d\u0027Global backend request timeout, in seconds.\u0027),"},{"line_number":78,"context_line":"    cfg.ListOpt(\u0027violin_dedup_only_pools\u0027,"},{"line_number":79,"context_line":"                default\u003d[],"},{"line_number":80,"context_line":"                help\u003d\u0027Storage to be used to setup dedup luns only\u0027),"},{"line_number":81,"context_line":"    cfg.ListOpt(\u0027violin_dedup_capable_pools\u0027,"},{"line_number":82,"context_line":"                default\u003d[],"},{"line_number":83,"context_line":"                help\u003d\u0027Storage pools capable of dedup and other luns\u0027),"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_97da2777","line":80,"updated":"2016-06-22 09:48:22.000000000","message":"nit: Storage pools to be used..\nAlso, end the help message with period to be consistent with other help messages.","commit_id":"4712c74d2a97ae45c5140c4cdfc3053d9689fc59"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"c832d80f2bab1b441723094ca9211c448644b0b6","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        if self.vmem_mg.utility.is_external_head:"},{"line_number":122,"context_line":"            # With an external storage pool configuration is a must"},{"line_number":123,"context_line":"            if (self.config.violin_dedup_only_pools \u003d\u003d [] and"},{"line_number":124,"context_line":"                    self.config.violin_dedup_capable_pools \u003d\u003d []):"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"                LOG.warning(_LW(\"Storage pools not configured\"))"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_f7c8cb76","line":123,"range":{"start_line":123,"start_character":58,"end_line":123,"end_character":61},"updated":"2016-06-22 09:48:22.000000000","message":"Do we need to error out if at least one of these options is empty?","commit_id":"4712c74d2a97ae45c5140c4cdfc3053d9689fc59"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"c832d80f2bab1b441723094ca9211c448644b0b6","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                \"create_lun\")"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        except exception.ViolinResourceNotFound:"},{"line_number":168,"context_line":"            LOG.debug(\"Backend unable to find suitable storage pool\")"},{"line_number":169,"context_line":"            raise"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_f7772b00","line":168,"updated":"2016-06-22 09:48:22.000000000","message":"Do we need to add some more context here like the storage pool type? Otherwise, we can remove this line because the exception will be logged anyway.","commit_id":"4712c74d2a97ae45c5140c4cdfc3053d9689fc59"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"d1f004ca6243638889a4ec9bf814d93149909771","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                \"create_lun\")"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        except exception.ViolinResourceNotFound:"},{"line_number":168,"context_line":"            LOG.debug(\"Backend unable to find suitable storage pool\")"},{"line_number":169,"context_line":"            raise"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_f29c275f","line":168,"in_reply_to":"3aaa91ec_f7772b00","updated":"2016-07-05 11:39:59.000000000","message":"\u003e \u003cVT\u003eWe would prefer to leave the debug in\n\nOk, then it is always good to add some context (like the pool type) which would be useful for debugging instead of a static message.","commit_id":"4712c74d2a97ae45c5140c4cdfc3053d9689fc59"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"c832d80f2bab1b441723094ca9211c448644b0b6","unresolved":false,"context_lines":[{"line_number":187,"context_line":"                           storage_pool_id\u003dselected_pool[\u0027storage_pool_id\u0027])"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        except exception.ViolinBackendErrExists:"},{"line_number":190,"context_line":"            LOG.debug(\"Lun %s already exists, continuing.\", volume[\u0027id\u0027])"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        except Exception:"},{"line_number":193,"context_line":"            LOG.exception(_LE(\"Lun create for %s failed!\"), volume[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_77b69b8b","line":190,"updated":"2016-06-22 09:48:22.000000000","message":"How probable it is? Do we need to change the log level to get more attention?","commit_id":"4712c74d2a97ae45c5140c4cdfc3053d9689fc59"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"c832d80f2bab1b441723094ca9211c448644b0b6","unresolved":false,"context_lines":[{"line_number":348,"context_line":"                   \u0027dpy_name\u0027: snapshot[\u0027display_name\u0027]})"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"        source_lun_info \u003d self.vmem_mg.lun.get_lun_info(snapshot[\u0027volume_id\u0027])"},{"line_number":351,"context_line":"        if source_lun_info[\u0027subType\u0027] !\u003d \u0027THICK\u0027:"},{"line_number":352,"context_line":"            msg \u003d _(\u0027Lun copy currently only supported for thick luns\u0027)"},{"line_number":353,"context_line":"            LOG.warning(msg)"},{"line_number":354,"context_line":"            raise exception.ViolinBackendErr(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_37189384","line":351,"range":{"start_line":351,"start_character":41,"end_line":351,"end_character":48},"updated":"2016-06-22 09:48:22.000000000","message":"CONCERTO_LUN_SUBTYPE_THICK","commit_id":"4712c74d2a97ae45c5140c4cdfc3053d9689fc59"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"c832d80f2bab1b441723094ca9211c448644b0b6","unresolved":false,"context_lines":[{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        try:"},{"line_number":401,"context_line":"            source_lun_info \u003d self.vmem_mg.lun.get_lun_info(src_vol[\u0027id\u0027])"},{"line_number":402,"context_line":"            if source_lun_info[\u0027subType\u0027] !\u003d CONCERTO_LUN_SUBTYPE_THICK:"},{"line_number":403,"context_line":"                msg \u003d _(\u0027Lun copy currently only supported for thick luns\u0027)"},{"line_number":404,"context_line":"                LOG.warning(msg)"},{"line_number":405,"context_line":"                raise exception.ViolinBackendErr(message\u003dmsg)"},{"line_number":406,"context_line":""},{"line_number":407,"context_line":"            # in order to do a full clone the source lun must have a"},{"line_number":408,"context_line":"            # snapshot resource"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_dabb360d","line":405,"range":{"start_line":402,"start_character":11,"end_line":405,"end_character":61},"updated":"2016-06-22 09:48:22.000000000","message":"This validation is repeated. We can extract this to a utility function \u0027_validate_lun_subtype_for_copy\u0027.","commit_id":"4712c74d2a97ae45c5140c4cdfc3053d9689fc59"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"c832d80f2bab1b441723094ca9211c448644b0b6","unresolved":false,"context_lines":[{"line_number":422,"context_line":"                self._check_error_code(result)"},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"        except Exception:"},{"line_number":425,"context_line":"            LOG.exception(_LE(\"Create new lun from lun for source\""},{"line_number":426,"context_line":"                              \"%(src)s \u003d\u003e destination %(dest)s failed!\"),"},{"line_number":427,"context_line":"                          {\u0027src\u0027: src_vol[\u0027id\u0027], \u0027dest\u0027: dest_vol[\u0027id\u0027]})"},{"line_number":428,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_5a1466f4","line":425,"range":{"start_line":425,"start_character":59,"end_line":425,"end_character":65},"updated":"2016-06-22 09:48:22.000000000","message":"We need a space here.","commit_id":"4712c74d2a97ae45c5140c4cdfc3053d9689fc59"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"c832d80f2bab1b441723094ca9211c448644b0b6","unresolved":false,"context_lines":[{"line_number":597,"context_line":"                           \u0027lsmb\u0027: lun_size_mb,"},{"line_number":598,"context_line":"                           \u0027vol_id\u0027: volume_id})"},{"line_number":599,"context_line":""},{"line_number":600,"context_line":"            except exception.ViolinResourceNotFound:"},{"line_number":601,"context_line":"                LOG.debug(\"Backend unable to find suitable storage pool\")"},{"line_number":602,"context_line":"                raise"},{"line_number":603,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_fac8b276","line":600,"updated":"2016-06-22 09:48:22.000000000","message":"Why we are not catching this (and logging) in other places, for e.g. _create_volume_from_snapshot?","commit_id":"4712c74d2a97ae45c5140c4cdfc3053d9689fc59"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"c832d80f2bab1b441723094ca9211c448644b0b6","unresolved":false,"context_lines":[{"line_number":770,"context_line":"                pass"},{"line_number":771,"context_line":"            elif percent \u003d\u003d 100:"},{"line_number":772,"context_line":"                # copy is complete"},{"line_number":773,"context_line":"                LOG.debug(\"lun or snap copy complete.\")"},{"line_number":774,"context_line":"                raise loopingcall.LoopingCallDone(retvalue\u003dTrue)"},{"line_number":775,"context_line":"            else:"},{"line_number":776,"context_line":"                # unexpected case"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_7afe826c","line":773,"updated":"2016-06-22 09:48:22.000000000","message":"Do we need this else block? See line 758.","commit_id":"4712c74d2a97ae45c5140c4cdfc3053d9689fc59"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"d1f004ca6243638889a4ec9bf814d93149909771","unresolved":false,"context_lines":[{"line_number":770,"context_line":"                pass"},{"line_number":771,"context_line":"            elif percent \u003d\u003d 100:"},{"line_number":772,"context_line":"                # copy is complete"},{"line_number":773,"context_line":"                LOG.debug(\"lun or snap copy complete.\")"},{"line_number":774,"context_line":"                raise loopingcall.LoopingCallDone(retvalue\u003dTrue)"},{"line_number":775,"context_line":"            else:"},{"line_number":776,"context_line":"                # unexpected case"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_b2e0dfcd","line":773,"in_reply_to":"3aaa91ec_7afe826c","updated":"2016-07-05 11:39:59.000000000","message":"\u003e \u003cVT\u003eYes, we do. This is again to address a race condition, when mutliple of these operations happen in quick succession.\n\nIt\u0027s good to add a comment here.","commit_id":"4712c74d2a97ae45c5140c4cdfc3053d9689fc59"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"c832d80f2bab1b441723094ca9211c448644b0b6","unresolved":false,"context_lines":[{"line_number":905,"context_line":"            usage)"},{"line_number":906,"context_line":"        if selected_pool is None:"},{"line_number":907,"context_line":"            # Backend has not provided a suitable storage pool"},{"line_number":908,"context_line":"            msg \u003d _(\"Backend does not have a suitable storage pool.\")"},{"line_number":909,"context_line":"            raise exception.ViolinBackendErr(message\u003dmsg)"},{"line_number":910,"context_line":""},{"line_number":911,"context_line":"        LOG.debug(\"Storage pool returned is %s\","}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_5ad626c6","line":908,"updated":"2016-06-22 09:48:22.000000000","message":"Do we need to add the pool name or type here?","commit_id":"4712c74d2a97ae45c5140c4cdfc3053d9689fc59"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"d1f004ca6243638889a4ec9bf814d93149909771","unresolved":false,"context_lines":[{"line_number":905,"context_line":"            usage)"},{"line_number":906,"context_line":"        if selected_pool is None:"},{"line_number":907,"context_line":"            # Backend has not provided a suitable storage pool"},{"line_number":908,"context_line":"            msg \u003d _(\"Backend does not have a suitable storage pool.\")"},{"line_number":909,"context_line":"            raise exception.ViolinBackendErr(message\u003dmsg)"},{"line_number":910,"context_line":""},{"line_number":911,"context_line":"        LOG.debug(\"Storage pool returned is %s\","}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_12ff3368","line":908,"in_reply_to":"3aaa91ec_5ad626c6","updated":"2016-07-05 11:39:59.000000000","message":"\u003e \u003cVT\u003eThere is no storage pool identified for this purpose, hence the exception, So no pool name/type can be shown.\n\nI meant the 3rd argument in this function. I assume that this method retrieves a pool corresponding to the given type.","commit_id":"4712c74d2a97ae45c5140c4cdfc3053d9689fc59"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"c832d80f2bab1b441723094ca9211c448644b0b6","unresolved":false,"context_lines":[{"line_number":925,"context_line":"            thin_lun \u003d True"},{"line_number":926,"context_line":"            # Set the actual allocation size for thin lun"},{"line_number":927,"context_line":"            # default here is 10%"},{"line_number":928,"context_line":"            size_mb \u003d int(size_mb / 10)"},{"line_number":929,"context_line":""},{"line_number":930,"context_line":"        typeid \u003d volume.get(\u0027volume_type_id\u0027)"},{"line_number":931,"context_line":"        if typeid:"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_ed347edf","line":928,"range":{"start_line":928,"start_character":36,"end_line":928,"end_character":38},"updated":"2016-06-22 09:48:22.000000000","message":"I think we should define a constant for the default value.","commit_id":"4712c74d2a97ae45c5140c4cdfc3053d9689fc59"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"c832d80f2bab1b441723094ca9211c448644b0b6","unresolved":false,"context_lines":[{"line_number":925,"context_line":"            thin_lun \u003d True"},{"line_number":926,"context_line":"            # Set the actual allocation size for thin lun"},{"line_number":927,"context_line":"            # default here is 10%"},{"line_number":928,"context_line":"            size_mb \u003d int(size_mb / 10)"},{"line_number":929,"context_line":""},{"line_number":930,"context_line":"        typeid \u003d volume.get(\u0027volume_type_id\u0027)"},{"line_number":931,"context_line":"        if typeid:"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_309539e4","line":928,"range":{"start_line":928,"start_character":26,"end_line":928,"end_character":35},"updated":"2016-06-22 09:48:22.000000000","message":"In Python 2, this would do integer division. So it is better to write:\n\nceil(float(size_mb)/DEFAULT)","commit_id":"4712c74d2a97ae45c5140c4cdfc3053d9689fc59"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"c832d80f2bab1b441723094ca9211c448644b0b6","unresolved":false,"context_lines":[{"line_number":931,"context_line":"        if typeid:"},{"line_number":932,"context_line":"            # extra_specs with thin specified overrides san_thin_provision"},{"line_number":933,"context_line":"            spec_value \u003d self._get_volume_type_extra_spec(volume, \"thin\")"},{"line_number":934,"context_line":"            if spec_value and spec_value.lower() \u003d\u003d \"true\":"},{"line_number":935,"context_line":"                thin_lun \u003d True"},{"line_number":936,"context_line":"                # Set the actual allocation size for thin lun"},{"line_number":937,"context_line":"                # default here is 10%"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_8b9fa202","line":934,"range":{"start_line":934,"start_character":30,"end_line":934,"end_character":58},"updated":"2016-06-22 09:48:22.000000000","message":"strutils.bool_from_string(spec_value)?","commit_id":"4712c74d2a97ae45c5140c4cdfc3053d9689fc59"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"c832d80f2bab1b441723094ca9211c448644b0b6","unresolved":false,"context_lines":[{"line_number":932,"context_line":"            # extra_specs with thin specified overrides san_thin_provision"},{"line_number":933,"context_line":"            spec_value \u003d self._get_volume_type_extra_spec(volume, \"thin\")"},{"line_number":934,"context_line":"            if spec_value and spec_value.lower() \u003d\u003d \"true\":"},{"line_number":935,"context_line":"                thin_lun \u003d True"},{"line_number":936,"context_line":"                # Set the actual allocation size for thin lun"},{"line_number":937,"context_line":"                # default here is 10%"},{"line_number":938,"context_line":"                size_mb \u003d int(size_mb / 10)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_6b407657","line":935,"updated":"2016-06-22 09:48:22.000000000","message":"We don\u0027t need to enter the \u0027if\u0027 part if self.config.san_thin_provision is true.\n\nif not thin_lun and spec_value and spec_value.lower() \u003d\u003d \"true\":\n\n  thin_lun \u003d True","commit_id":"4712c74d2a97ae45c5140c4cdfc3053d9689fc59"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"c832d80f2bab1b441723094ca9211c448644b0b6","unresolved":false,"context_lines":[{"line_number":935,"context_line":"                thin_lun \u003d True"},{"line_number":936,"context_line":"                # Set the actual allocation size for thin lun"},{"line_number":937,"context_line":"                # default here is 10%"},{"line_number":938,"context_line":"                size_mb \u003d int(size_mb / 10)"},{"line_number":939,"context_line":""},{"line_number":940,"context_line":"            # Set thick lun before checking for dedup,"},{"line_number":941,"context_line":"            # since dedup is always thin"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_6bbb5673","line":938,"range":{"start_line":938,"start_character":40,"end_line":938,"end_character":42},"updated":"2016-06-22 09:48:22.000000000","message":"Please define a constant.","commit_id":"4712c74d2a97ae45c5140c4cdfc3053d9689fc59"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"c832d80f2bab1b441723094ca9211c448644b0b6","unresolved":false,"context_lines":[{"line_number":959,"context_line":"            spec_dict[\u0027pool_type\u0027] \u003d \"thin\""},{"line_number":960,"context_line":"        else:"},{"line_number":961,"context_line":"            spec_dict[\u0027pool_type\u0027] \u003d \"thick\""},{"line_number":962,"context_line":"            thick_lun \u003d True"},{"line_number":963,"context_line":""},{"line_number":964,"context_line":"        spec_dict[\u0027size_mb\u0027] \u003d size_mb"},{"line_number":965,"context_line":"        spec_dict[\u0027thick\u0027] \u003d thick_lun"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_e6177beb","line":962,"updated":"2016-06-22 09:48:22.000000000","message":"It is already set.","commit_id":"4712c74d2a97ae45c5140c4cdfc3053d9689fc59"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"d1f004ca6243638889a4ec9bf814d93149909771","unresolved":false,"context_lines":[{"line_number":959,"context_line":"            spec_dict[\u0027pool_type\u0027] \u003d \"thin\""},{"line_number":960,"context_line":"        else:"},{"line_number":961,"context_line":"            spec_dict[\u0027pool_type\u0027] \u003d \"thick\""},{"line_number":962,"context_line":"            thick_lun \u003d True"},{"line_number":963,"context_line":""},{"line_number":964,"context_line":"        spec_dict[\u0027size_mb\u0027] \u003d size_mb"},{"line_number":965,"context_line":"        spec_dict[\u0027thick\u0027] \u003d thick_lun"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_72e1579a","line":962,"in_reply_to":"3aaa91ec_e6177beb","updated":"2016-07-05 11:39:59.000000000","message":"\u003e \u003cVT\u003e If no type_id is set for the lun, this is is here it lands and it has to be thick.\n\nInstead of setting it in multiple place, we can remove it and set spec_dict[\u0027thick\u0027] \u003d not thin_lun.","commit_id":"4712c74d2a97ae45c5140c4cdfc3053d9689fc59"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"c832d80f2bab1b441723094ca9211c448644b0b6","unresolved":false,"context_lines":[{"line_number":993,"context_line":"                    pool_total_mb +\u003d dev[\u0027size_mb\u0027]"},{"line_number":994,"context_line":"                elif not mod:"},{"line_number":995,"context_line":"                    mod \u003d \u0027 *\u0027"},{"line_number":996,"context_line":"            LOG.debug(\u0027pool %(pool)s: %(avail)s / %(total)s MB free%(mod)s\u0027,"},{"line_number":997,"context_line":"                      {\u0027pool\u0027: short_info[\u0027name\u0027], \u0027avail\u0027: pool_free_mb,"},{"line_number":998,"context_line":"                       \u0027total\u0027: pool_total_mb, \u0027mod\u0027: mod})"},{"line_number":999,"context_line":"            free_gb +\u003d int(pool_free_mb / units.Ki)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_a6c73344","line":996,"range":{"start_line":996,"start_character":63,"end_line":996,"end_character":67},"updated":"2016-06-22 09:48:22.000000000","message":"Space after free.","commit_id":"4712c74d2a97ae45c5140c4cdfc3053d9689fc59"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"c832d80f2bab1b441723094ca9211c448644b0b6","unresolved":false,"context_lines":[{"line_number":996,"context_line":"            LOG.debug(\u0027pool %(pool)s: %(avail)s / %(total)s MB free%(mod)s\u0027,"},{"line_number":997,"context_line":"                      {\u0027pool\u0027: short_info[\u0027name\u0027], \u0027avail\u0027: pool_free_mb,"},{"line_number":998,"context_line":"                       \u0027total\u0027: pool_total_mb, \u0027mod\u0027: mod})"},{"line_number":999,"context_line":"            free_gb +\u003d int(pool_free_mb / units.Ki)"},{"line_number":1000,"context_line":"            total_gb +\u003d int(pool_total_mb / units.Ki)"},{"line_number":1001,"context_line":""},{"line_number":1002,"context_line":"        data \u003d {"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_46880f23","line":999,"range":{"start_line":999,"start_character":40,"end_line":999,"end_character":42},"updated":"2016-06-22 09:48:22.000000000","message":"See the comment about integer division.","commit_id":"4712c74d2a97ae45c5140c4cdfc3053d9689fc59"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"c832d80f2bab1b441723094ca9211c448644b0b6","unresolved":false,"context_lines":[{"line_number":1032,"context_line":"                snapshot_object_id\u003doid)"},{"line_number":1033,"context_line":""},{"line_number":1034,"context_line":"            if ans[\u0027success\u0027]:"},{"line_number":1035,"context_line":"                LOG.debug(\"Delete snapshot %(snap_id)s for %(vol)s: \""},{"line_number":1036,"context_line":"                          \"success\", {\u0027vol\u0027: cinder_volume_id,"},{"line_number":1037,"context_line":"                                      \u0027snap_id\u0027: cinder_snapshot_id})"},{"line_number":1038,"context_line":"                raise loopingcall.LoopingCallDone(retvalue\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_c63fdf23","line":1035,"range":{"start_line":1035,"start_character":55,"end_line":1035,"end_character":58},"updated":"2016-06-22 09:48:22.000000000","message":"nit: of","commit_id":"4712c74d2a97ae45c5140c4cdfc3053d9689fc59"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"c832d80f2bab1b441723094ca9211c448644b0b6","unresolved":false,"context_lines":[{"line_number":1046,"context_line":"        timer \u003d loopingcall.FixedIntervalLoopingCall(_loop_func)"},{"line_number":1047,"context_line":"        success \u003d timer.start(interval\u003d1).wait()"},{"line_number":1048,"context_line":""},{"line_number":1049,"context_line":"        if not success:"},{"line_number":1050,"context_line":"                msg \u003d (_(\"Failed to delete snapshot \""},{"line_number":1051,"context_line":"                         \"%(snap)s of volume %(vol)s\") %"},{"line_number":1052,"context_line":"                       {\u0027snap\u0027: cinder_snapshot_id, \u0027vol\u0027: cinder_volume_id})"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_66ed4b8b","line":1049,"updated":"2016-06-22 09:48:22.000000000","message":"Where do we raise LoopingCallDone(retvalue\u003dFalse)?","commit_id":"4712c74d2a97ae45c5140c4cdfc3053d9689fc59"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"d1f004ca6243638889a4ec9bf814d93149909771","unresolved":false,"context_lines":[{"line_number":1046,"context_line":"        timer \u003d loopingcall.FixedIntervalLoopingCall(_loop_func)"},{"line_number":1047,"context_line":"        success \u003d timer.start(interval\u003d1).wait()"},{"line_number":1048,"context_line":""},{"line_number":1049,"context_line":"        if not success:"},{"line_number":1050,"context_line":"                msg \u003d (_(\"Failed to delete snapshot \""},{"line_number":1051,"context_line":"                         \"%(snap)s of volume %(vol)s\") %"},{"line_number":1052,"context_line":"                       {\u0027snap\u0027: cinder_snapshot_id, \u0027vol\u0027: cinder_volume_id})"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_6d5e9a13","line":1049,"in_reply_to":"3aaa91ec_66ed4b8b","updated":"2016-07-05 11:39:59.000000000","message":"\u003e \u003cVT\u003e\nGiven that line #1021 has not raised an exception, there are only two possibilities at this point in the code:  1) success or 2) temporary failure (aka - busy, retry again).  Having a retvalue of False, a permanant failure, is not appropriate in this circumstance.\n\nI\u0027m not talking about the appropriateness of the return value \u0027False\u0027. How do we exit the looping call in all cases? Are you saying that we retry on temporary failures until success? Or we retry until a permanent failure (line 1031 raises an exception?). In the latter case, will the control reach here?","commit_id":"4712c74d2a97ae45c5140c4cdfc3053d9689fc59"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ae4e54b6507a2d523b8abc6eda40331fbd1cb6e7","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        if self.vmem_mg.utility.is_external_head:"},{"line_number":122,"context_line":"            # With an external storage pool configuration is a must"},{"line_number":123,"context_line":"            if (self.config.violin_dedup_only_pools \u003d\u003d [] and"},{"line_number":124,"context_line":"                    self.config.violin_dedup_capable_pools \u003d\u003d []):"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"                LOG.warning(_LW(\"Storage pools not configured\"))"},{"line_number":127,"context_line":"                raise exception.InvalidInput("}],"source_content_type":"text/x-python","patch_set":12,"id":"1aa78d24_39c1c281","line":124,"updated":"2016-07-02 20:07:39.000000000","message":"Wouldn\u0027t it be better to check like the following instead?  It includes [], None, etc.\n\n           if (not self.config.violin_dedup_only_pools and\n                    not self.config.violin_dedup_capable_pools):","commit_id":"6e438db22fbecd0b57b90677a382a8ebfd864a32"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"87c8de5569850e8f1c458288fb67d7f5b4cb5cdf","unresolved":false,"context_lines":[{"line_number":124,"context_line":"                    self.config.violin_dedup_capable_pools \u003d\u003d []):"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"                LOG.warning(_LW(\"Storage pools not configured\"))"},{"line_number":127,"context_line":"                raise exception.InvalidInput("},{"line_number":128,"context_line":"                    reason\u003d_(\u0027Storage pool configuration is \u0027"},{"line_number":129,"context_line":"                             \u0027mandatory for external head\u0027))"},{"line_number":130,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1aa78d24_88c9347b","line":127,"range":{"start_line":127,"start_character":32,"end_line":127,"end_character":44},"updated":"2016-07-05 12:22:48.000000000","message":"InvalidConfigurationValue is more appropriate.","commit_id":"6e438db22fbecd0b57b90677a382a8ebfd864a32"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"87c8de5569850e8f1c458288fb67d7f5b4cb5cdf","unresolved":false,"context_lines":[{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        except exception.ViolinResourceNotFound:"},{"line_number":168,"context_line":"            LOG.debug(\"Backend unable to find suitable storage pool\")"},{"line_number":169,"context_line":"            raise"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        try:"},{"line_number":172,"context_line":"            # Note: In the following create_lun command for setting up a dedup"}],"source_content_type":"text/x-python","patch_set":12,"id":"1aa78d24_c8b69cdb","line":169,"updated":"2016-07-05 12:22:48.000000000","message":"As Xing mentioned, please add a reason which may include the pool type.","commit_id":"6e438db22fbecd0b57b90677a382a8ebfd864a32"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ae4e54b6507a2d523b8abc6eda40331fbd1cb6e7","unresolved":false,"context_lines":[{"line_number":909,"context_line":"        if selected_pool is None:"},{"line_number":910,"context_line":"            # Backend has not provided a suitable storage pool"},{"line_number":911,"context_line":"            msg \u003d _(\"Backend does not have a suitable storage pool.\")"},{"line_number":912,"context_line":"            raise exception.ViolinBackendErr(message\u003dmsg)"},{"line_number":913,"context_line":""},{"line_number":914,"context_line":"        LOG.debug(\"Storage pool returned is %s\","},{"line_number":915,"context_line":"                  selected_pool[\u0027storage_pool\u0027])"}],"source_content_type":"text/x-python","patch_set":12,"id":"1aa78d24_b93012a0","line":912,"updated":"2016-07-02 20:07:39.000000000","message":"The callers of _get_storage_pool are catching ViolinResourceNotFound, but here you are throwing ViolinBackendErr?  It should be ViolinResourceNotFound here.","commit_id":"6e438db22fbecd0b57b90677a382a8ebfd864a32"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ae4e54b6507a2d523b8abc6eda40331fbd1cb6e7","unresolved":false,"context_lines":[{"line_number":1004,"context_line":""},{"line_number":1005,"context_line":"        data \u003d {"},{"line_number":1006,"context_line":"            \u0027vendor_name\u0027: \u0027Violin Memory, Inc.\u0027,"},{"line_number":1007,"context_line":"            \u0027reserved_percentage\u0027: 0,"},{"line_number":1008,"context_line":"            \u0027QoS_support\u0027: False,"},{"line_number":1009,"context_line":"            \u0027free_capacity_gb\u0027: free_gb,"},{"line_number":1010,"context_line":"            \u0027total_capacity_gb\u0027: total_gb,"}],"source_content_type":"text/x-python","patch_set":12,"id":"1aa78d24_59e76e12","line":1007,"updated":"2016-07-02 20:07:39.000000000","message":"This should use the one from cinder.conf instead of hardcoding to 0.\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/lvm.py#L251","commit_id":"6e438db22fbecd0b57b90677a382a8ebfd864a32"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"87c8de5569850e8f1c458288fb67d7f5b4cb5cdf","unresolved":false,"context_lines":[{"line_number":1049,"context_line":"        timer \u003d loopingcall.FixedIntervalLoopingCall(_loop_func)"},{"line_number":1050,"context_line":"        success \u003d timer.start(interval\u003d1).wait()"},{"line_number":1051,"context_line":""},{"line_number":1052,"context_line":"        if not success:"},{"line_number":1053,"context_line":"                msg \u003d (_(\"Failed to delete snapshot \""},{"line_number":1054,"context_line":"                         \"%(snap)s of volume %(vol)s\") %"},{"line_number":1055,"context_line":"                       {\u0027snap\u0027: cinder_snapshot_id, \u0027vol\u0027: cinder_volume_id})"}],"source_content_type":"text/x-python","patch_set":12,"id":"1aa78d24_63b50b30","line":1052,"updated":"2016-07-05 12:22:48.000000000","message":"There are two ways to exit the loop: line 1041 and an exception raised in line 1034.In either case, the control will not reach here.","commit_id":"6e438db22fbecd0b57b90677a382a8ebfd864a32"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"87c8de5569850e8f1c458288fb67d7f5b4cb5cdf","unresolved":false,"context_lines":[{"line_number":1060,"context_line":""},{"line_number":1061,"context_line":"        :param lun_type:  Cinder volume type"},{"line_number":1062,"context_line":""},{"line_number":1063,"context_line":"        Exceptions:"},{"line_number":1064,"context_line":"            VolumeBackendAPIException: if volume type is not thick,"},{"line_number":1065,"context_line":"               copying the lun is not possible."},{"line_number":1066,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"1aa78d24_23aca334","line":1063,"range":{"start_line":1063,"start_character":8,"end_line":1063,"end_character":18},"updated":"2016-07-05 12:22:48.000000000","message":":raises:","commit_id":"6e438db22fbecd0b57b90677a382a8ebfd864a32"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"87c8de5569850e8f1c458288fb67d7f5b4cb5cdf","unresolved":false,"context_lines":[{"line_number":1066,"context_line":"        \"\"\""},{"line_number":1067,"context_line":"        if lun_type !\u003d CONCERTO_LUN_TYPE_THICK:"},{"line_number":1068,"context_line":"                msg \u003d _(\u0027Lun copy currently only supported for thick luns\u0027)"},{"line_number":1069,"context_line":"                LOG.warning(msg)"},{"line_number":1070,"context_line":"                raise exception.ViolinBackendErr(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1aa78d24_e370dbde","line":1069,"range":{"start_line":1069,"start_character":20,"end_line":1069,"end_character":27},"updated":"2016-07-05 12:22:48.000000000","message":"this should be logged at error level","commit_id":"6e438db22fbecd0b57b90677a382a8ebfd864a32"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd323bc87068d3b54fd8fc21eddeaa7ad18c43be","unresolved":false,"context_lines":[{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        except Exception:"},{"line_number":168,"context_line":"            msg \u003d _(\u0027No suitable storage pool found\u0027)"},{"line_number":169,"context_line":"            raise exception.ViolinResourceNotFound(message\u003dmsg)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        try:"},{"line_number":172,"context_line":"            # Note: In the following create_lun command for setting up a dedup"}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_d69c4810","line":169,"updated":"2016-07-12 02:19:40.000000000","message":"In _get_storage_pool(), you now raise exception.ViolinResourceNotFound on line 912.  So here you should not create exception.ViolinResourceNotFound again.  Here is what I suggest:\n\nexcept exception.ViolinResourceNotFound:\n    raise\nexcept Exception:\n    msg \u003d _(\u0027No suitable storage pool found.\u0027)\n    LOG.exception(msg)\n    raise exception.ViolinBackendErr(message\u003dmsg)","commit_id":"ab032ad45e9b709911fdc4d9270bd238ef7d140f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd323bc87068d3b54fd8fc21eddeaa7ad18c43be","unresolved":false,"context_lines":[{"line_number":270,"context_line":""},{"line_number":271,"context_line":"        :param snapshot:  cinder snapshot object provided by the Manager"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"\t:raises:"},{"line_number":274,"context_line":"            VolumeBackendAPIException: If SRA could not be created, or"},{"line_number":275,"context_line":"                snapshot policy could not be created"},{"line_number":276,"context_line":"            RequestRetryTimeout: If backend could not complete the request"}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_166ff02b","line":273,"updated":"2016-07-12 02:19:40.000000000","message":"There\u0027s a tab in the beginning.  You\u0027ll get pep8 error on this.","commit_id":"ab032ad45e9b709911fdc4d9270bd238ef7d140f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd323bc87068d3b54fd8fc21eddeaa7ad18c43be","unresolved":false,"context_lines":[{"line_number":312,"context_line":""},{"line_number":313,"context_line":"        :param snapshot:  cinder snapshot object provided by the Manager"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"\t:raises:"},{"line_number":316,"context_line":"            RequestRetryTimeout: If backend could not complete the request"},{"line_number":317,"context_line":"                within the allotted timeout."},{"line_number":318,"context_line":"            ViolinBackendErr: If backend reports an error during the"}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_5675f8f7","line":315,"updated":"2016-07-12 02:19:40.000000000","message":"Same","commit_id":"ab032ad45e9b709911fdc4d9270bd238ef7d140f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd323bc87068d3b54fd8fc21eddeaa7ad18c43be","unresolved":false,"context_lines":[{"line_number":359,"context_line":""},{"line_number":360,"context_line":"        except Exception:"},{"line_number":361,"context_line":"            msg \u003d _(\u0027No suitable storage pool found\u0027)"},{"line_number":362,"context_line":"            raise exception.ViolinResourceNotFound(message\u003dmsg)"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"        try:"},{"line_number":365,"context_line":"            result \u003d self.vmem_mg.lun.copy_snapshot_to_new_lun("}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_567fb8aa","line":362,"updated":"2016-07-12 02:19:40.000000000","message":"Same","commit_id":"ab032ad45e9b709911fdc4d9270bd238ef7d140f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd323bc87068d3b54fd8fc21eddeaa7ad18c43be","unresolved":false,"context_lines":[{"line_number":553,"context_line":""},{"line_number":554,"context_line":"        :param volume_id:  Cinder volume ID corresponding to the backend LUN"},{"line_number":555,"context_line":""},{"line_number":556,"context_line":"\t:raises:"},{"line_number":557,"context_line":"            VolumeBackendAPIException: if cinder volume does not exist"},{"line_number":558,"context_line":"               on backnd, or SRA could not be created."},{"line_number":559,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_3672ec11","line":556,"updated":"2016-07-12 02:19:40.000000000","message":"Same","commit_id":"ab032ad45e9b709911fdc4d9270bd238ef7d140f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd323bc87068d3b54fd8fc21eddeaa7ad18c43be","unresolved":false,"context_lines":[{"line_number":602,"context_line":""},{"line_number":603,"context_line":"            except Exception:"},{"line_number":604,"context_line":"                msg \u003d _(\u0027No suitable storage pool found\u0027)"},{"line_number":605,"context_line":"                raise exception.ViolinResourceNotFound(message\u003dmsg)"},{"line_number":606,"context_line":""},{"line_number":607,"context_line":"            res \u003d self.vmem_mg.snapshot.create_snapshot_resource("},{"line_number":608,"context_line":"                lun\u003dvolume_id,"}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_56f05891","line":605,"updated":"2016-07-12 02:19:40.000000000","message":"Same","commit_id":"ab032ad45e9b709911fdc4d9270bd238ef7d140f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd323bc87068d3b54fd8fc21eddeaa7ad18c43be","unresolved":false,"context_lines":[{"line_number":629,"context_line":""},{"line_number":630,"context_line":"        :param volume_id:  Cinder volume ID corresponding to the backend LUN"},{"line_number":631,"context_line":""},{"line_number":632,"context_line":"\t:raises:"},{"line_number":633,"context_line":"            VolumeBackendAPIException: when snapshot policy cannot be created."},{"line_number":634,"context_line":"        \"\"\""},{"line_number":635,"context_line":"        if not self.vmem_mg.snapshot.lun_has_a_snapshot_policy("}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_361b0ccc","line":632,"updated":"2016-07-12 02:19:40.000000000","message":"Same","commit_id":"ab032ad45e9b709911fdc4d9270bd238ef7d140f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd323bc87068d3b54fd8fc21eddeaa7ad18c43be","unresolved":false,"context_lines":[{"line_number":653,"context_line":"    def _delete_lun_snapshot_bookkeeping(self, volume_id):"},{"line_number":654,"context_line":"        \"\"\"Clear residual snapshot support resources from LUN."},{"line_number":655,"context_line":""},{"line_number":656,"context_line":"\t:raises:"},{"line_number":657,"context_line":"            VolumeBackendAPIException: If snapshots still exist on the LUN."},{"line_number":658,"context_line":"        \"\"\""},{"line_number":659,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_76663452","line":656,"updated":"2016-07-12 02:19:40.000000000","message":"Same","commit_id":"ab032ad45e9b709911fdc4d9270bd238ef7d140f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd323bc87068d3b54fd8fc21eddeaa7ad18c43be","unresolved":false,"context_lines":[{"line_number":1060,"context_line":""},{"line_number":1061,"context_line":"        :param lun_type:  Cinder volume type"},{"line_number":1062,"context_line":""},{"line_number":1063,"context_line":"\t:raises:"},{"line_number":1064,"context_line":"            VolumeBackendAPIException: if volume type is not thick,"},{"line_number":1065,"context_line":"               copying the lun is not possible."},{"line_number":1066,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_96eac00d","line":1063,"updated":"2016-07-12 02:19:40.000000000","message":"Same. There\u0027s a tab in the beginning.","commit_id":"ab032ad45e9b709911fdc4d9270bd238ef7d140f"},{"author":{"_account_id":18026,"name":"huanan","email":"huanan@huawei.com","username":"huanan"},"change_message_id":"6afb65a142501b0d870fcdf6dbd4b72a78568c21","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Violin Memory, Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":18,"id":"1aa78d24_df989977","line":1,"range":{"start_line":1,"start_character":10,"end_line":1,"end_character":16},"updated":"2016-07-13 03:55:30.000000000","message":"Same","commit_id":"7720fce5098fa25eec55dfde6a4eec46fbe4b030"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4f5e78a89b27647434111f3a3b817586e61e775c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Violin Memory, Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":18,"id":"1aa78d24_1fc181e4","line":1,"range":{"start_line":1,"start_character":10,"end_line":1,"end_character":16},"in_reply_to":"1aa78d24_df989977","updated":"2016-07-13 04:01:26.000000000","message":"Same","commit_id":"7720fce5098fa25eec55dfde6a4eec46fbe4b030"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c5c93474474571512219ebb6547e9139ea924083","unresolved":false,"context_lines":[{"line_number":77,"context_line":"               help\u003d\u0027Global backend request timeout, in seconds.\u0027),"},{"line_number":78,"context_line":"    cfg.ListOpt(\u0027violin_dedup_only_pools\u0027,"},{"line_number":79,"context_line":"                default\u003d[],"},{"line_number":80,"context_line":"                help\u003d\u0027Storage pools to be used to setup dedup luns only.\u0027),"},{"line_number":81,"context_line":"    cfg.ListOpt(\u0027violin_dedup_capable_pools\u0027,"},{"line_number":82,"context_line":"                default\u003d[],"},{"line_number":83,"context_line":"                help\u003d\u0027Storage pools capable of dedup and other luns.\u0027),"}],"source_content_type":"text/x-python","patch_set":18,"id":"1aa78d24_0cd2e5d0","line":80,"range":{"start_line":80,"start_character":71,"end_line":80,"end_character":75},"updated":"2016-07-13 14:02:39.000000000","message":"It would be good if it documented the proper format for this list.  I am assuming comma separated?","commit_id":"7720fce5098fa25eec55dfde6a4eec46fbe4b030"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c5c93474474571512219ebb6547e9139ea924083","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                help\u003d\u0027Storage pools to be used to setup dedup luns only.\u0027),"},{"line_number":81,"context_line":"    cfg.ListOpt(\u0027violin_dedup_capable_pools\u0027,"},{"line_number":82,"context_line":"                default\u003d[],"},{"line_number":83,"context_line":"                help\u003d\u0027Storage pools capable of dedup and other luns.\u0027),"},{"line_number":84,"context_line":"    cfg.StrOpt(\u0027violin_pool_allocation_method\u0027,"},{"line_number":85,"context_line":"               default\u003d\u0027random\u0027,"},{"line_number":86,"context_line":"               choices\u003d[\u0027random\u0027, \u0027largest\u0027, \u0027smallest\u0027],"}],"source_content_type":"text/x-python","patch_set":18,"id":"1aa78d24_ace3d1a2","line":83,"range":{"start_line":83,"start_character":67,"end_line":83,"end_character":71},"updated":"2016-07-13 14:02:39.000000000","message":"Same here.","commit_id":"7720fce5098fa25eec55dfde6a4eec46fbe4b030"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c5c93474474571512219ebb6547e9139ea924083","unresolved":false,"context_lines":[{"line_number":87,"context_line":"               help\u003d\u0027Method of choosing a storage pool for a lun.\u0027),"},{"line_number":88,"context_line":"    cfg.ListOpt(\u0027violin_iscsi_target_ips\u0027,"},{"line_number":89,"context_line":"                default\u003d[],"},{"line_number":90,"context_line":"                help\u003d\u0027List of target iSCSI addresses to use.\u0027),"},{"line_number":91,"context_line":"]"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":18,"id":"1aa78d24_6c8ba9c3","line":90,"range":{"start_line":90,"start_character":59,"end_line":90,"end_character":63},"updated":"2016-07-13 14:02:39.000000000","message":"Same here.","commit_id":"7720fce5098fa25eec55dfde6a4eec46fbe4b030"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c5c93474474571512219ebb6547e9139ea924083","unresolved":false,"context_lines":[{"line_number":123,"context_line":"            if (self.config.violin_dedup_only_pools \u003d\u003d [] and"},{"line_number":124,"context_line":"                    self.config.violin_dedup_capable_pools \u003d\u003d []):"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"                LOG.warning(_LW(\"Storage pools not configured\"))"},{"line_number":127,"context_line":"                raise exception.InvalidInput("},{"line_number":128,"context_line":"                    reason\u003d_(\u0027Storage pool configuration is \u0027"},{"line_number":129,"context_line":"                             \u0027mandatory for external head\u0027))"}],"source_content_type":"text/x-python","patch_set":18,"id":"1aa78d24_ac7f51a9","line":126,"range":{"start_line":126,"start_character":61,"end_line":126,"end_character":63},"updated":"2016-07-13 14:02:39.000000000","message":"Would be nice to end this with a \u0027.\u0027.","commit_id":"7720fce5098fa25eec55dfde6a4eec46fbe4b030"}],"cinder/volume/drivers/violin/v7000_fcp.py":[{"author":{"_account_id":18026,"name":"huanan","email":"huanan@huawei.com","username":"huanan"},"change_message_id":"6afb65a142501b0d870fcdf6dbd4b72a78568c21","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Violin Memory, Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":18,"id":"1aa78d24_9f929155","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"updated":"2016-07-13 03:55:30.000000000","message":"Why here is \u00272015\u0027, but in v7000_iscsi.py is \u00272016\u0027","commit_id":"7720fce5098fa25eec55dfde6a4eec46fbe4b030"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4f5e78a89b27647434111f3a3b817586e61e775c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Violin Memory, Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":18,"id":"1aa78d24_9fad7133","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"in_reply_to":"1aa78d24_9f929155","updated":"2016-07-13 04:01:26.000000000","message":"This looks fine to me.  2015 was the year when this file was first published.  2016 is when the iscsi driver is first submitted.","commit_id":"7720fce5098fa25eec55dfde6a4eec46fbe4b030"}],"cinder/volume/drivers/violin/v7000_iscsi.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a2f3021ef59d97998fd394da550ca664435b6894","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Violin Memory, Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba63e191_a841490d","line":1,"updated":"2016-01-19 21:35:10.000000000","message":"2016","commit_id":"5e82e302e861f5b86565bfafe81648612e6370bd"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a2f3021ef59d97998fd394da550ca664435b6894","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        self.configuration.append_config_values(san.san_opts)"},{"line_number":60,"context_line":"        self.common \u003d v7000_common.V7000Common(self.configuration)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        LOG.info(_LI(\"Initialized driver %(name)s version: %(vers)s\") %"},{"line_number":63,"context_line":"                 {\u0027name\u0027: self.__class__.__name__, \u0027vers\u0027: self.VERSION})"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def do_setup(self, context):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba63e191_e85e61e8","line":62,"updated":"2016-01-19 21:35:10.000000000","message":"% \u003d\u003e ,","commit_id":"5e82e302e861f5b86565bfafe81648612e6370bd"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a2f3021ef59d97998fd394da550ca664435b6894","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        # so only do it once."},{"line_number":78,"context_line":"        if self.configuration.violin_iscsi_target_ips \u003d\u003d []:"},{"line_number":79,"context_line":"            LOG.warning(_LW(\"iSCSI target ip addresses not configured \"))"},{"line_number":80,"context_line":"            self.gateway_iscsi_ip_addresses \u003d \\"},{"line_number":81,"context_line":"                self.common.vmem_mg.utility.get_iscsi_interfaces()"},{"line_number":82,"context_line":"        else:"},{"line_number":83,"context_line":"            self.gateway_iscsi_ip_addresses \u003d \\"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba63e191_68735181","line":80,"updated":"2016-01-19 21:35:10.000000000","message":"Use () instead of \\ for line continuation.","commit_id":"5e82e302e861f5b86565bfafe81648612e6370bd"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a2f3021ef59d97998fd394da550ca664435b6894","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            self.gateway_iscsi_ip_addresses \u003d \\"},{"line_number":81,"context_line":"                self.common.vmem_mg.utility.get_iscsi_interfaces()"},{"line_number":82,"context_line":"        else:"},{"line_number":83,"context_line":"            self.gateway_iscsi_ip_addresses \u003d \\"},{"line_number":84,"context_line":"                self.configuration.violin_iscsi_target_ips"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def check_for_setup_error(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba63e191_286d5998","line":83,"updated":"2016-01-19 21:35:10.000000000","message":"Same.","commit_id":"5e82e302e861f5b86565bfafe81648612e6370bd"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a2f3021ef59d97998fd394da550ca664435b6894","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        resp \u003d {}"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        LOG.debug(\"Initialize_connection: initiator - %(initiator)s  host - \""},{"line_number":138,"context_line":"                  \"%(host)s ip - %(ip)s\" %"},{"line_number":139,"context_line":"                  {\u0027initiator\u0027: connector[\u0027initiator\u0027],"},{"line_number":140,"context_line":"                   \u0027host\u0027: connector[\u0027host\u0027],"},{"line_number":141,"context_line":"                   \u0027ip\u0027: connector[\u0027ip\u0027]})"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba63e191_c8127d09","line":138,"updated":"2016-01-19 21:35:10.000000000","message":"% \u003d\u003e ,","commit_id":"5e82e302e861f5b86565bfafe81648612e6370bd"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a2f3021ef59d97998fd394da550ca664435b6894","unresolved":false,"context_lines":[{"line_number":257,"context_line":"            volume -- volume object provided by the Manager"},{"line_number":258,"context_line":"        \"\"\""},{"line_number":259,"context_line":"        v \u003d self.common.vmem_mg"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"        LOG.info(_LI(\"Unexporting lun %(vol)s host is %(host)s\") %"},{"line_number":262,"context_line":"                 {\u0027vol\u0027: volume[\u0027id\u0027], \u0027host\u0027: connector[\u0027host\u0027]})"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba63e191_68e831e3","line":261,"range":{"start_line":260,"start_character":0,"end_line":261,"end_character":64},"updated":"2016-01-19 21:35:10.000000000","message":"% \u003d\u003e ,","commit_id":"5e82e302e861f5b86565bfafe81648612e6370bd"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8ebbe7ef8a2cdb3ab895bec58df4a9d48939c73f","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        # Getting iscsi IPs from the array is incredibly expensive,"},{"line_number":78,"context_line":"        # so only do it once."},{"line_number":79,"context_line":"        if self.configuration.violin_iscsi_target_ips \u003d\u003d []:"},{"line_number":80,"context_line":"            LOG.warning(_LW(\"iSCSI target ip addresses not configured \"))"},{"line_number":81,"context_line":"            self.gateway_iscsi_ip_addresses \u003d ("},{"line_number":82,"context_line":"                self.common.vmem_mg.utility.get_iscsi_interfaces())"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_6f594d35","line":79,"updated":"2016-05-25 21:57:48.000000000","message":"If you using the following, it will cover [] as well as None.\n\nif not self.configuration.violin_iscsi_target_ips:","commit_id":"45e7401f0943ee683e826c6bd2e06ad794858ebd"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8ebbe7ef8a2cdb3ab895bec58df4a9d48939c73f","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        self.common.check_for_setup_error()"},{"line_number":90,"context_line":"        if len(self.gateway_iscsi_ip_addresses) \u003d\u003d 0:"},{"line_number":91,"context_line":"            msg \u003d _(\u0027No iSCSI IPs configured on SAN gateway\u0027)"},{"line_number":92,"context_line":"            raise exception.InvalidBackendConfig(reason\u003dmsg)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def create_volume(self, volume):"},{"line_number":95,"context_line":"        \"\"\"Creates a volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_af705573","line":92,"updated":"2016-05-25 21:57:48.000000000","message":"Can you use ViolinInvalidBackendConfig instead?","commit_id":"45e7401f0943ee683e826c6bd2e06ad794858ebd"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8ebbe7ef8a2cdb3ab895bec58df4a9d48939c73f","unresolved":false,"context_lines":[{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        # raise if we failed for any reason other than a \u0027client"},{"line_number":156,"context_line":"        # already exists\u0027 error code"},{"line_number":157,"context_line":"        if not resp[\u0027success\u0027] and \u0027Error: 0x900100cd\u0027 not in resp[\u0027msg\u0027]:"},{"line_number":158,"context_line":"            msg \u003d _(\"Failed to create iscsi client\")"},{"line_number":159,"context_line":"            raise exception.ViolinBackendErr(message\u003dmsg)"},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_2f0bc5d7","line":157,"updated":"2016-05-25 21:57:48.000000000","message":"Suggest use constant for the error code.","commit_id":"45e7401f0943ee683e826c6bd2e06ad794858ebd"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8ebbe7ef8a2cdb3ab895bec58df4a9d48939c73f","unresolved":false,"context_lines":[{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        # same here, raise for any failure other than a \u0027target"},{"line_number":166,"context_line":"        # already exists\u0027 error code"},{"line_number":167,"context_line":"        if not resp[\u0027success\u0027] and \u0027Error: 0x09024309\u0027 not in resp[\u0027msg\u0027]:"},{"line_number":168,"context_line":"            msg \u003d _(\"Failed to create iscsi target\")"},{"line_number":169,"context_line":"            raise exception.ViolinBackendErr(message\u003dmsg)"},{"line_number":170,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_cffaf9bc","line":167,"updated":"2016-05-25 21:57:48.000000000","message":"Same comment as above.","commit_id":"45e7401f0943ee683e826c6bd2e06ad794858ebd"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8ebbe7ef8a2cdb3ab895bec58df4a9d48939c73f","unresolved":false,"context_lines":[{"line_number":239,"context_line":"            raise"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"        except Exception:"},{"line_number":242,"context_line":"            raise exception.ViolinInvalidBackendConfig("},{"line_number":243,"context_line":"                reason\u003d_(\u0027LUN export failed!\u0027))"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        lun_id \u003d self._get_lun_id(volume[\u0027id\u0027], connector[\u0027host\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_afe5f509","line":242,"updated":"2016-05-25 21:57:48.000000000","message":"This should be a ViolinBackendErr instead of ViolinInvalidBackendConfig.","commit_id":"45e7401f0943ee683e826c6bd2e06ad794858ebd"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8ebbe7ef8a2cdb3ab895bec58df4a9d48939c73f","unresolved":false,"context_lines":[{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        except Exception:"},{"line_number":275,"context_line":"            LOG.exception(_LE(\"LUN unexport failed!\"))"},{"line_number":276,"context_line":"            raise"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    def _is_lun_id_ready(self, volume_name, client_name):"},{"line_number":279,"context_line":"        \"\"\"Get the lun ID for an exported volume."}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_cfcf997d","line":276,"updated":"2016-05-25 21:57:48.000000000","message":"Please raise a ViolinBackendErr here.","commit_id":"45e7401f0943ee683e826c6bd2e06ad794858ebd"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"3bcf0c7d672af9c4bee6bed4d3cb60ee8f8c0537","unresolved":false,"context_lines":[{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        lun_id \u003d -1"},{"line_number":297,"context_line":"        lun_id \u003d self._get_lun_id(volume_name, client_name)"},{"line_number":298,"context_line":"        if lun_id !\u003d -1:"},{"line_number":299,"context_line":"            return True"},{"line_number":300,"context_line":"        else:"},{"line_number":301,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_13018338","line":298,"updated":"2016-05-22 20:16:17.000000000","message":"Could simplify this to just \"return lun_id !\u003d -1\"","commit_id":"45e7401f0943ee683e826c6bd2e06ad794858ebd"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f02351180d82c8b68926dab9285168c013cb1e68","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        properties[\u0027target_portal\u0027] \u003d \u0027%s:%s\u0027 % (tgt, \u00273260\u0027)"},{"line_number":177,"context_line":"        properties[\u0027target_lun\u0027] \u003d lun_id"},{"line_number":178,"context_line":"        properties[\u0027volume_id\u0027] \u003d volume[\u0027id\u0027]"},{"line_number":179,"context_line":"        properties[\u0027access_mode\u0027] \u003d \u0027rw\u0027"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        LOG.debug(\"Return ISCSI data: %(properties)s.\","},{"line_number":182,"context_line":"                  {\u0027properties\u0027: properties})"}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_5a5d5f14","line":179,"updated":"2016-06-10 14:31:22.000000000","message":"This should not be hard coded as it will prevent read-only volume from being working.  You can remove this.  It will be populated by the manager.","commit_id":"857b9eb1aa1f253758f75705b304e513a98888a2"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"8b54f2d51589504baff2d2402cfc36af573529f9","unresolved":false,"context_lines":[{"line_number":296,"context_line":""},{"line_number":297,"context_line":"        lun_id \u003d -1"},{"line_number":298,"context_line":"        lun_id \u003d self._get_lun_id(volume_name, client_name)"},{"line_number":299,"context_line":"        return lun_id !\u003d -1"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"    def _get_lun_id(self, volume_name, client_name):"},{"line_number":302,"context_line":"        \"\"\"Get the lun ID for an exported volume."}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_e091e79b","line":299,"updated":"2016-06-03 17:55:48.000000000","message":"Change to handle None instead of -1.  (See below.)","commit_id":"857b9eb1aa1f253758f75705b304e513a98888a2"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"8b54f2d51589504baff2d2402cfc36af573529f9","unresolved":false,"context_lines":[{"line_number":325,"context_line":"                lun_id \u003d x[\u0027lun\u0027]"},{"line_number":326,"context_line":"                break"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"        return int(lun_id)"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"    def _get_iqn(self, connector):"},{"line_number":331,"context_line":"        # The vmemclient connection properties list hostname field may"}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_80829b50","line":328,"updated":"2016-06-03 17:55:48.000000000","message":"This should return None if a LUN is not found.","commit_id":"857b9eb1aa1f253758f75705b304e513a98888a2"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f68650a7caf8d50af8e58d37c93516d1b96c011d","unresolved":false,"context_lines":[{"line_number":42,"context_line":"from cinder.volume.drivers.violin import v7000_common"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"@interface.volumedriver"},{"line_number":47,"context_line":"class V7000ISCSIDriver(driver.ISCSIDriver):"},{"line_number":48,"context_line":"    \"\"\"Executes commands relating to iscsi based Violin Memory arrays."}],"source_content_type":"text/x-python","patch_set":8,"id":"5a9d85d2_70bece00","line":45,"updated":"2016-06-18 19:19:51.000000000","message":"Need two blank lines between class definitions and other code.","commit_id":"a276bd5ef1ac94a66487d35a671f4c4cd00f1c47"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd323bc87068d3b54fd8fc21eddeaa7ad18c43be","unresolved":false,"context_lines":[{"line_number":26,"context_line":"Set the following in the cinder.conf file to enable the VMEM V7000"},{"line_number":27,"context_line":"ISCSI Driver along with the required flags:"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"volume_driver\u003dcinder.volume.drivers.violin.v7000_fcp.V7000ISCSIDriver"},{"line_number":30,"context_line":"\"\"\""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"import random"}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_d06a90ec","line":29,"updated":"2016-07-12 02:19:40.000000000","message":"s/v7000_fcp/v7000_iscsi","commit_id":"ab032ad45e9b709911fdc4d9270bd238ef7d140f"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c5c93474474571512219ebb6547e9139ea924083","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        # Getting iscsi IPs from the array is incredibly expensive,"},{"line_number":80,"context_line":"        # so only do it once."},{"line_number":81,"context_line":"        if not self.configuration.violin_iscsi_target_ips:"},{"line_number":82,"context_line":"            LOG.warning(_LW(\"iSCSI target ip addresses not configured \"))"},{"line_number":83,"context_line":"            self.gateway_iscsi_ip_addresses \u003d ("},{"line_number":84,"context_line":"                self.common.vmem_mg.utility.get_iscsi_interfaces())"},{"line_number":85,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":18,"id":"1aa78d24_2f0a3379","line":82,"range":{"start_line":82,"start_character":69,"end_line":82,"end_character":71},"updated":"2016-07-13 14:02:39.000000000","message":"Would be nice to have a \u0027.\u0027 .","commit_id":"7720fce5098fa25eec55dfde6a4eec46fbe4b030"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c5c93474474571512219ebb6547e9139ea924083","unresolved":false,"context_lines":[{"line_number":260,"context_line":"        \"\"\""},{"line_number":261,"context_line":"        v \u003d self.common.vmem_mg"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        LOG.info(_LI(\"Unexporting lun %(vol)s host is %(host)s\"),"},{"line_number":264,"context_line":"                 {\u0027vol\u0027: volume[\u0027id\u0027], \u0027host\u0027: connector[\u0027host\u0027]})"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":18,"id":"1aa78d24_8fa36742","line":263,"range":{"start_line":263,"start_character":61,"end_line":263,"end_character":64},"updated":"2016-07-13 14:02:39.000000000","message":"Suggest \u0027.\u0027 here.","commit_id":"7720fce5098fa25eec55dfde6a4eec46fbe4b030"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c5c93474474571512219ebb6547e9139ea924083","unresolved":false,"context_lines":[{"line_number":269,"context_line":"                                  volume[\u0027id\u0027], target, True)"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"        except exception.ViolinBackendErrNotFound:"},{"line_number":272,"context_line":"            LOG.info(_LI(\"Lun %s already unexported, continuing\"),"},{"line_number":273,"context_line":"                     volume[\u0027id\u0027])"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":18,"id":"1aa78d24_6f79dbc7","line":272,"range":{"start_line":272,"start_character":63,"end_line":272,"end_character":66},"updated":"2016-07-13 14:02:39.000000000","message":"Suggest \u0027...\u0027 here.","commit_id":"7720fce5098fa25eec55dfde6a4eec46fbe4b030"}]}
