)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"73d157c217b1e5a8551c6ffeab10462c1e3f4e1f","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Pony Chou \u003cponychou@qnap.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-04-25 14:41:26 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add cinder volume driver for QNAP ES storage arrays. And it supports below features:"},{"line_number":8,"context_line":" - Volume Create/Delete"},{"line_number":9,"context_line":" - Volume Attach/Detach"},{"line_number":10,"context_line":" - Snapshot Create/Delete"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1a122d0e_87fc08b6","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":84},"updated":"2016-04-29 14:54:28.000000000","message":"Summary line should be limited to 50 chars. \n\nSuggest: \"Add QNAP ES Storage Driver\" ?\n\nThis link will help you with commit messages in the future:\nhttps://wiki.openstack.org/wiki/GitCommitMessages#Summary_of_Git_commit_message_structure","commit_id":"616b6244b88962d43bb0bd851b83a23fab3293f1"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"73d157c217b1e5a8551c6ffeab10462c1e3f4e1f","unresolved":false,"context_lines":[{"line_number":14,"context_line":" - Copy Volume to Image"},{"line_number":15,"context_line":" - Clone Volume"},{"line_number":16,"context_line":" - Extend Volume"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: Ia3e3dc677e1d17a8e3ffbab1f6c0ecb9bb154c9f"},{"line_number":19,"context_line":"Implements: blueprint qnap-cinder-driver"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1a122d0e_07275863","line":17,"updated":"2016-04-29 14:54:28.000000000","message":"This will need a DocImpact tag","commit_id":"616b6244b88962d43bb0bd851b83a23fab3293f1"}],"cinder/exception.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d888d2c41a4d11d03215a2a068936fd040e92e9","unresolved":false,"context_lines":[{"line_number":1271,"context_line":""},{"line_number":1272,"context_line":""},{"line_number":1273,"context_line":"class QnapAPIExpiredException(VolumeBackendAPIException):"},{"line_number":1274,"context_line":"    message \u003d _(\"Session ID expired for QNAP API\")"},{"line_number":1275,"context_line":""},{"line_number":1276,"context_line":""},{"line_number":1277,"context_line":"# Coho drivers"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_be71320e","line":1274,"updated":"2016-11-19 17:07:34.000000000","message":"I don\u0027t see the above exceptions being used in the code.  Please remove them if not used.","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"}],"cinder/tests/unit/test_qnap.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4bcd4ff4ed942500b8cf9863665f8bd1b6acf3fe","unresolved":false,"context_lines":[{"line_number":19,"context_line":"\r"},{"line_number":20,"context_line":"from cinder import test\r"},{"line_number":21,"context_line":"from cinder.volume.drivers import qnap\r"},{"line_number":22,"context_line":"from cinder.volume.drivers.qnap import QnapISCSIDriver\r"},{"line_number":23,"context_line":"from oslo_config import cfg\r"},{"line_number":24,"context_line":"from oslo_utils import units\r"},{"line_number":25,"context_line":"from six.moves import urllib\r"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a74a57a_4c1fe307","line":22,"updated":"2016-11-27 18:11:30.000000000","message":"Import module, not object.\n\nActually since you\u0027ve already imported qnap on line 21, line 22 should be removed.","commit_id":"095f3536c909a192ca187013da37a867232b686d"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"3b7542df0d31661ec3ba19b2d67f80b9b11ac5e0","unresolved":false,"context_lines":[{"line_number":19,"context_line":"\r"},{"line_number":20,"context_line":"from cinder import test\r"},{"line_number":21,"context_line":"from cinder.volume.drivers import qnap\r"},{"line_number":22,"context_line":"from cinder.volume.drivers.qnap import QnapISCSIDriver\r"},{"line_number":23,"context_line":"from oslo_config import cfg\r"},{"line_number":24,"context_line":"from oslo_utils import units\r"},{"line_number":25,"context_line":"from six.moves import urllib\r"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a74a57a_f5378f4a","line":22,"in_reply_to":"5a74a57a_4c1fe307","updated":"2016-11-28 07:01:46.000000000","message":"Done","commit_id":"095f3536c909a192ca187013da37a867232b686d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4bcd4ff4ed942500b8cf9863665f8bd1b6acf3fe","unresolved":false,"context_lines":[{"line_number":585,"context_line":"        \"\"\"Test do_setup with https://1.2.3.4:443.\"\"\"\r"},{"line_number":586,"context_line":"        fake_login_response \u003d FakeLoginResponse()\r"},{"line_number":587,"context_line":"        fake_get_basic_info_response \u003d FakeGetBasicInfoResponse()\r"},{"line_number":588,"context_line":"        mock_http_connection.return_value.getresponse.\\\r"},{"line_number":589,"context_line":"            side_effect \u003d [\r"},{"line_number":590,"context_line":"                fake_login_response,\r"},{"line_number":591,"context_line":"                fake_get_basic_info_response,\r"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a74a57a_6c181f1f","line":588,"updated":"2016-11-27 18:11:30.000000000","message":"Use () instead of \\ for a statement broken into multiple lines.\n\nPlease check all places.","commit_id":"095f3536c909a192ca187013da37a867232b686d"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"3b7542df0d31661ec3ba19b2d67f80b9b11ac5e0","unresolved":false,"context_lines":[{"line_number":585,"context_line":"        \"\"\"Test do_setup with https://1.2.3.4:443.\"\"\"\r"},{"line_number":586,"context_line":"        fake_login_response \u003d FakeLoginResponse()\r"},{"line_number":587,"context_line":"        fake_get_basic_info_response \u003d FakeGetBasicInfoResponse()\r"},{"line_number":588,"context_line":"        mock_http_connection.return_value.getresponse.\\\r"},{"line_number":589,"context_line":"            side_effect \u003d [\r"},{"line_number":590,"context_line":"                fake_login_response,\r"},{"line_number":591,"context_line":"                fake_get_basic_info_response,\r"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a74a57a_f5d30fd3","line":588,"in_reply_to":"5a74a57a_6c181f1f","updated":"2016-11-28 07:01:46.000000000","message":"Done","commit_id":"095f3536c909a192ca187013da37a867232b686d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4bcd4ff4ed942500b8cf9863665f8bd1b6acf3fe","unresolved":false,"context_lines":[{"line_number":606,"context_line":"        self.assertEqual(self.driver.api_executor.password, \u0027qnapadmin\u0027)\r"},{"line_number":607,"context_line":"        self.assertEqual(self.driver.api_executor.ip, \u00271.2.3.4\u0027)\r"},{"line_number":608,"context_line":"        self.assertEqual(self.driver.api_executor.port, \u0027443\u0027)\r"},{"line_number":609,"context_line":"        self.assertEqual(self.driver.api_executor.ssl, True)\r"},{"line_number":610,"context_line":"\r"},{"line_number":611,"context_line":"\r"},{"line_number":612,"context_line":"class QnapDriverVolumeTestCase(QnapDriverBaseTestCase):\r"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a74a57a_8c157be6","line":609,"updated":"2016-11-27 18:11:30.000000000","message":"Arguments should be in the order of expect, actual.  lines 603-608 have them reversed.\n\nFor example:\nself.assertEqual(True, self.driver.api_executor.ssl)","commit_id":"095f3536c909a192ca187013da37a867232b686d"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"3b7542df0d31661ec3ba19b2d67f80b9b11ac5e0","unresolved":false,"context_lines":[{"line_number":606,"context_line":"        self.assertEqual(self.driver.api_executor.password, \u0027qnapadmin\u0027)\r"},{"line_number":607,"context_line":"        self.assertEqual(self.driver.api_executor.ip, \u00271.2.3.4\u0027)\r"},{"line_number":608,"context_line":"        self.assertEqual(self.driver.api_executor.port, \u0027443\u0027)\r"},{"line_number":609,"context_line":"        self.assertEqual(self.driver.api_executor.ssl, True)\r"},{"line_number":610,"context_line":"\r"},{"line_number":611,"context_line":"\r"},{"line_number":612,"context_line":"class QnapDriverVolumeTestCase(QnapDriverBaseTestCase):\r"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a74a57a_15b24b94","line":609,"in_reply_to":"5a74a57a_8c157be6","updated":"2016-11-28 07:01:46.000000000","message":"Done","commit_id":"095f3536c909a192ca187013da37a867232b686d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4bcd4ff4ed942500b8cf9863665f8bd1b6acf3fe","unresolved":false,"context_lines":[{"line_number":1183,"context_line":"#         expected_res \u003d True, {}\r"},{"line_number":1184,"context_line":"#         self.assertEqual(\r"},{"line_number":1185,"context_line":"#             expected_res,\r"},{"line_number":1186,"context_line":"#             self.driver.migrate_volume(\u0027context\u0027, fake_volume, fake_host))\r"},{"line_number":1187,"context_line":"\r"},{"line_number":1188,"context_line":"\r"},{"line_number":1189,"context_line":"class QnapAPIExecutorTestCase(QnapDriverBaseTestCase):\r"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a74a57a_ccd93359","line":1186,"updated":"2016-11-27 18:11:30.000000000","message":"Remove the commented out lines.","commit_id":"095f3536c909a192ca187013da37a867232b686d"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"3b7542df0d31661ec3ba19b2d67f80b9b11ac5e0","unresolved":false,"context_lines":[{"line_number":1183,"context_line":"#         expected_res \u003d True, {}\r"},{"line_number":1184,"context_line":"#         self.assertEqual(\r"},{"line_number":1185,"context_line":"#             expected_res,\r"},{"line_number":1186,"context_line":"#             self.driver.migrate_volume(\u0027context\u0027, fake_volume, fake_host))\r"},{"line_number":1187,"context_line":"\r"},{"line_number":1188,"context_line":"\r"},{"line_number":1189,"context_line":"class QnapAPIExecutorTestCase(QnapDriverBaseTestCase):\r"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a74a57a_55a84320","line":1186,"in_reply_to":"5a74a57a_ccd93359","updated":"2016-11-28 07:01:46.000000000","message":"Done","commit_id":"095f3536c909a192ca187013da37a867232b686d"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"971a096077d68e9e99555297d1cc79777fe2491b","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations\r"},{"line_number":14,"context_line":"#    under the License.\r"},{"line_number":15,"context_line":"\r"},{"line_number":16,"context_line":"import base64\r"},{"line_number":17,"context_line":"import mock\r"},{"line_number":18,"context_line":"import six\r"},{"line_number":19,"context_line":"\r"},{"line_number":20,"context_line":"from cinder import test\r"},{"line_number":21,"context_line":"from cinder.volume.drivers import qnap\r"},{"line_number":22,"context_line":"from oslo_config import cfg\r"},{"line_number":23,"context_line":"from oslo_utils import units\r"},{"line_number":24,"context_line":"from six.moves import urllib\r"},{"line_number":25,"context_line":"try:\r"},{"line_number":26,"context_line":"    import xml.etree.cElementTree as ET\r"},{"line_number":27,"context_line":"except ImportError:\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"5a74a57a_2801f86a","line":24,"range":{"start_line":16,"start_character":0,"end_line":24,"end_character":28},"updated":"2016-12-01 07:46:08.000000000","message":"Imports need to be organized into three groups of standard libs, third party libs, and local imports.","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"2992a193a13d93ae33d3002a1fdc5205b082f810","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations\r"},{"line_number":14,"context_line":"#    under the License.\r"},{"line_number":15,"context_line":"\r"},{"line_number":16,"context_line":"import base64\r"},{"line_number":17,"context_line":"import mock\r"},{"line_number":18,"context_line":"import six\r"},{"line_number":19,"context_line":"\r"},{"line_number":20,"context_line":"from cinder import test\r"},{"line_number":21,"context_line":"from cinder.volume.drivers import qnap\r"},{"line_number":22,"context_line":"from oslo_config import cfg\r"},{"line_number":23,"context_line":"from oslo_utils import units\r"},{"line_number":24,"context_line":"from six.moves import urllib\r"},{"line_number":25,"context_line":"try:\r"},{"line_number":26,"context_line":"    import xml.etree.cElementTree as ET\r"},{"line_number":27,"context_line":"except ImportError:\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a71b18c_d7f23e06","line":24,"range":{"start_line":16,"start_character":0,"end_line":24,"end_character":28},"in_reply_to":"5a74a57a_2801f86a","updated":"2016-12-01 08:13:58.000000000","message":"Done","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"971a096077d68e9e99555297d1cc79777fe2491b","unresolved":false,"context_lines":[{"line_number":29,"context_line":"\r"},{"line_number":30,"context_line":"CONF \u003d cfg.CONF\r"},{"line_number":31,"context_line":"\r"},{"line_number":32,"context_line":"DRIVER_VERSION \u003d \u00271.0.0\u0027\r"},{"line_number":33,"context_line":"\r"},{"line_number":34,"context_line":"FAKE_LUNNAA \u003d {\u0027LUNNAA\u0027: \u0027fakeLunNaa\u0027}\r"},{"line_number":35,"context_line":"FAKE_SNAPSHOT \u003d {\u0027snapshot_id\u0027: \u0027fakeSnapshotId\u0027}\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"5a74a57a_48263417","line":32,"updated":"2016-12-01 07:46:08.000000000","message":"Not sure this is the best approach. Would be better to reference the constant defined in the driver itself. Like this, someone could modify the driver and bump the version and not realize that value is being duplicated and checked in the unit test.\n\nOr just remove, as I don\u0027t think asserting on driver version adds much value.","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"2992a193a13d93ae33d3002a1fdc5205b082f810","unresolved":false,"context_lines":[{"line_number":29,"context_line":"\r"},{"line_number":30,"context_line":"CONF \u003d cfg.CONF\r"},{"line_number":31,"context_line":"\r"},{"line_number":32,"context_line":"DRIVER_VERSION \u003d \u00271.0.0\u0027\r"},{"line_number":33,"context_line":"\r"},{"line_number":34,"context_line":"FAKE_LUNNAA \u003d {\u0027LUNNAA\u0027: \u0027fakeLunNaa\u0027}\r"},{"line_number":35,"context_line":"FAKE_SNAPSHOT \u003d {\u0027snapshot_id\u0027: \u0027fakeSnapshotId\u0027}\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a71b18c_57e70e40","line":32,"in_reply_to":"5a74a57a_48263417","updated":"2016-12-01 08:13:58.000000000","message":"Done","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"971a096077d68e9e99555297d1cc79777fe2491b","unresolved":false,"context_lines":[{"line_number":44,"context_line":"for key in FAKE_PARMS:\r"},{"line_number":45,"context_line":"    value \u003d FAKE_PARMS[key]\r"},{"line_number":46,"context_line":"    if value is not None:\r"},{"line_number":47,"context_line":"        sanitized_params[key] \u003d six.text_type(value)\r"},{"line_number":48,"context_line":"global_sanitized_params \u003d urllib.parse.urlencode(sanitized_params)\r"},{"line_number":49,"context_line":"header \u003d {\r"},{"line_number":50,"context_line":"    \u0027charset\u0027: \u0027utf-8\u0027, \u0027Content-Type\u0027: \u0027application/x-www-form-urlencoded\u0027}\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"5a74a57a_08835ccd","line":47,"updated":"2016-12-01 07:46:08.000000000","message":"Were you seeing a failure that required this? It doesn\u0027t look like you should need to do this.","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"2992a193a13d93ae33d3002a1fdc5205b082f810","unresolved":false,"context_lines":[{"line_number":44,"context_line":"for key in FAKE_PARMS:\r"},{"line_number":45,"context_line":"    value \u003d FAKE_PARMS[key]\r"},{"line_number":46,"context_line":"    if value is not None:\r"},{"line_number":47,"context_line":"        sanitized_params[key] \u003d six.text_type(value)\r"},{"line_number":48,"context_line":"global_sanitized_params \u003d urllib.parse.urlencode(sanitized_params)\r"},{"line_number":49,"context_line":"header \u003d {\r"},{"line_number":50,"context_line":"    \u0027charset\u0027: \u0027utf-8\u0027, \u0027Content-Type\u0027: \u0027application/x-www-form-urlencoded\u0027}\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a71b18c_d7b5de7e","line":47,"in_reply_to":"5a74a57a_08835ccd","updated":"2016-12-01 08:13:58.000000000","message":"Yes, the result of sanitied_parms[key]\u003dsix.text_type(value) is different from py 27 to py34. We use the method to avoid the failure between py27 and py34","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"971a096077d68e9e99555297d1cc79777fe2491b","unresolved":false,"context_lines":[{"line_number":48,"context_line":"global_sanitized_params \u003d urllib.parse.urlencode(sanitized_params)\r"},{"line_number":49,"context_line":"header \u003d {\r"},{"line_number":50,"context_line":"    \u0027charset\u0027: \u0027utf-8\u0027, \u0027Content-Type\u0027: \u0027application/x-www-form-urlencoded\u0027}\r"},{"line_number":51,"context_line":"# login_url \u003d (\u0027/cgi-bin/authLogin.cgi?\u0027, sanitized_params, header)\r"},{"line_number":52,"context_line":"login_url \u003d (\u0027/cgi-bin/authLogin.cgi?\u0027)\r"},{"line_number":53,"context_line":"\r"},{"line_number":54,"context_line":"get_basic_info_url \u003d (\u0027/cgi-bin/authLogin.cgi\u0027)\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"5a74a57a_a872680f","line":51,"updated":"2016-12-01 07:46:08.000000000","message":"Remove commented out code.","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"2992a193a13d93ae33d3002a1fdc5205b082f810","unresolved":false,"context_lines":[{"line_number":48,"context_line":"global_sanitized_params \u003d urllib.parse.urlencode(sanitized_params)\r"},{"line_number":49,"context_line":"header \u003d {\r"},{"line_number":50,"context_line":"    \u0027charset\u0027: \u0027utf-8\u0027, \u0027Content-Type\u0027: \u0027application/x-www-form-urlencoded\u0027}\r"},{"line_number":51,"context_line":"# login_url \u003d (\u0027/cgi-bin/authLogin.cgi?\u0027, sanitized_params, header)\r"},{"line_number":52,"context_line":"login_url \u003d (\u0027/cgi-bin/authLogin.cgi?\u0027)\r"},{"line_number":53,"context_line":"\r"},{"line_number":54,"context_line":"get_basic_info_url \u003d (\u0027/cgi-bin/authLogin.cgi\u0027)\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a71b18c_17e75613","line":51,"in_reply_to":"5a74a57a_a872680f","updated":"2016-12-01 08:13:58.000000000","message":"Done","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"971a096077d68e9e99555297d1cc79777fe2491b","unresolved":false,"context_lines":[{"line_number":577,"context_line":"        self.assertEqual(\u0027qnapadmin\u0027, self.driver.api_executor.password)\r"},{"line_number":578,"context_line":"        self.assertEqual(\u00271.2.3.4\u0027, self.driver.api_executor.ip)\r"},{"line_number":579,"context_line":"        self.assertEqual(\u00278080\u0027, self.driver.api_executor.port)\r"},{"line_number":580,"context_line":"        self.assertEqual(False, self.driver.api_executor.ssl)\r"},{"line_number":581,"context_line":"\r"},{"line_number":582,"context_line":"    @mock.patch(\u0027six.moves.http_client.HTTPSConnection\u0027)\r"},{"line_number":583,"context_line":"    def test_do_setup_positive_with_ssl(\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"5a74a57a_28ebb879","line":580,"range":{"start_line":580,"start_character":13,"end_line":580,"end_character":24},"updated":"2016-12-01 07:46:08.000000000","message":"Change to assertFalse().","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"2992a193a13d93ae33d3002a1fdc5205b082f810","unresolved":false,"context_lines":[{"line_number":577,"context_line":"        self.assertEqual(\u0027qnapadmin\u0027, self.driver.api_executor.password)\r"},{"line_number":578,"context_line":"        self.assertEqual(\u00271.2.3.4\u0027, self.driver.api_executor.ip)\r"},{"line_number":579,"context_line":"        self.assertEqual(\u00278080\u0027, self.driver.api_executor.port)\r"},{"line_number":580,"context_line":"        self.assertEqual(False, self.driver.api_executor.ssl)\r"},{"line_number":581,"context_line":"\r"},{"line_number":582,"context_line":"    @mock.patch(\u0027six.moves.http_client.HTTPSConnection\u0027)\r"},{"line_number":583,"context_line":"    def test_do_setup_positive_with_ssl(\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a71b18c_1795963f","line":580,"range":{"start_line":580,"start_character":13,"end_line":580,"end_character":24},"in_reply_to":"5a74a57a_28ebb879","updated":"2016-12-01 08:13:58.000000000","message":"Done","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"8c813d69aa46aa5e6055175ba1065778a87b4b90","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2016 QNAP Systems, Inc.\r"},{"line_number":2,"context_line":"# All Rights Reserved.\r"},{"line_number":3,"context_line":"#\r"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_cdb81f2d","line":1,"updated":"2016-12-06 15:37:16.000000000","message":"Uses dos endlines, please fix to use unix endlines.","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"6770f614629312be03acfdfcd33fa7b16d6a45cb","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2016 QNAP Systems, Inc.\r"},{"line_number":2,"context_line":"# All Rights Reserved.\r"},{"line_number":3,"context_line":"#\r"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_7ccfa255","line":1,"in_reply_to":"3a71b18c_cdb81f2d","updated":"2016-12-07 04:08:55.000000000","message":"Done","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7471f8c31558863470a1d5cf474ccfee0b6ef08b","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License.\r"},{"line_number":15,"context_line":"\r"},{"line_number":16,"context_line":"import base64\r"},{"line_number":17,"context_line":"import mock\r"},{"line_number":18,"context_line":"import six\r"},{"line_number":19,"context_line":"try:\r"},{"line_number":20,"context_line":"    import xml.etree.cElementTree as ET\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_94cc67bc","line":17,"updated":"2016-12-06 18:36:59.000000000","message":"mock is 3rd party lib.  Should be moved down to the 2nd import group with oslo libs.","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"6770f614629312be03acfdfcd33fa7b16d6a45cb","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License.\r"},{"line_number":15,"context_line":"\r"},{"line_number":16,"context_line":"import base64\r"},{"line_number":17,"context_line":"import mock\r"},{"line_number":18,"context_line":"import six\r"},{"line_number":19,"context_line":"try:\r"},{"line_number":20,"context_line":"    import xml.etree.cElementTree as ET\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_7cf6c28f","line":17,"in_reply_to":"3a71b18c_94cc67bc","updated":"2016-12-07 04:08:55.000000000","message":"Done","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7471f8c31558863470a1d5cf474ccfee0b6ef08b","unresolved":false,"context_lines":[{"line_number":15,"context_line":"\r"},{"line_number":16,"context_line":"import base64\r"},{"line_number":17,"context_line":"import mock\r"},{"line_number":18,"context_line":"import six\r"},{"line_number":19,"context_line":"try:\r"},{"line_number":20,"context_line":"    import xml.etree.cElementTree as ET\r"},{"line_number":21,"context_line":"except ImportError:\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_d4c25f84","line":18,"updated":"2016-12-06 18:36:59.000000000","message":"six is also 3rd party lib.","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"6770f614629312be03acfdfcd33fa7b16d6a45cb","unresolved":false,"context_lines":[{"line_number":15,"context_line":"\r"},{"line_number":16,"context_line":"import base64\r"},{"line_number":17,"context_line":"import mock\r"},{"line_number":18,"context_line":"import six\r"},{"line_number":19,"context_line":"try:\r"},{"line_number":20,"context_line":"    import xml.etree.cElementTree as ET\r"},{"line_number":21,"context_line":"except ImportError:\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_9cf1de97","line":18,"in_reply_to":"3a71b18c_d4c25f84","updated":"2016-12-07 04:08:55.000000000","message":"Done","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"}],"cinder/volume/drivers/qnap.py":[{"author":{"_account_id":17405,"name":"Jacob Gregor","email":"jgregor@us.ibm.com","username":"jgregor"},"change_message_id":"812687929f63705933097f7c2f1685dbca298964","unresolved":false,"context_lines":[{"line_number":143,"context_line":"                                             self.configuration.qnap_poolname,\r"},{"line_number":144,"context_line":"                                             reserve)\r"},{"line_number":145,"context_line":"\r"},{"line_number":146,"context_line":"        createdLun \u003d self.APIExecutor.\\\r"},{"line_number":147,"context_line":"            getLunInfo(LUNName \u003d volume[\u0027display_name\u0027])\r"},{"line_number":148,"context_line":"        LUNNAA \u003d createdLun.find(\u0027LUNNAA\u0027).text\r"},{"line_number":149,"context_line":"        LOG.info(_LI(\u0027LUNNAA: %s\u0027), LUNNAA)\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_109359a4","line":146,"range":{"start_line":146,"start_character":38,"end_line":146,"end_character":39},"updated":"2016-05-05 14:58:02.000000000","message":"We should avoid using \u0027\\\u0027 for line continuation. If possible, try to use \u0027()\u0027 instead.","commit_id":"616b6244b88962d43bb0bd851b83a23fab3293f1"},{"author":{"_account_id":17405,"name":"Jacob Gregor","email":"jgregor@us.ibm.com","username":"jgregor"},"change_message_id":"812687929f63705933097f7c2f1685dbca298964","unresolved":false,"context_lines":[{"line_number":171,"context_line":"            LOG.info(_LI(\u0027LUNNAA: %s\u0027), lun_naa)\r"},{"line_number":172,"context_line":"        else:\r"},{"line_number":173,"context_line":"            try:\r"},{"line_number":174,"context_line":"                createdLun \u003d self.APIExecutor.\\\r"},{"line_number":175,"context_line":"                    getLunInfo(LUNName \u003d volume[\u0027display_name\u0027])\r"},{"line_number":176,"context_line":"                lun_naa \u003d createdLun.find(\u0027LUNNAA\u0027).text\r"},{"line_number":177,"context_line":"                LOG.info(_LI(\u0027LUNNAA: %s\u0027), lun_naa)\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_d00f21de","line":174,"range":{"start_line":174,"start_character":46,"end_line":174,"end_character":47},"updated":"2016-05-05 14:58:02.000000000","message":"Same here.","commit_id":"616b6244b88962d43bb0bd851b83a23fab3293f1"},{"author":{"_account_id":17405,"name":"Jacob Gregor","email":"jgregor@us.ibm.com","username":"jgregor"},"change_message_id":"812687929f63705933097f7c2f1685dbca298964","unresolved":false,"context_lines":[{"line_number":221,"context_line":"            self.APIExecutor.editLun(LUNName, volume[\u0027size\u0027], LUNIndex)\r"},{"line_number":222,"context_line":"        \u0027\u0027\u0027\r"},{"line_number":223,"context_line":"        # Below is to clone a volume from a snapshot in the snapshot manager\r"},{"line_number":224,"context_line":"        srcLun \u003d self.APIExecutor.\\\r"},{"line_number":225,"context_line":"            getLunInfo(LUNName \u003d src_vref[\u0027display_name\u0027])\r"},{"line_number":226,"context_line":"        LUNIndex \u003d srcLun.find(\u0027LUNIndex\u0027).text\r"},{"line_number":227,"context_line":"        LOG.info(_LI(\u0027LUNIndex: %s\u0027), LUNIndex)\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_30f935c9","line":224,"range":{"start_line":224,"start_character":34,"end_line":224,"end_character":35},"updated":"2016-05-05 14:58:02.000000000","message":"Same here.","commit_id":"616b6244b88962d43bb0bd851b83a23fab3293f1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a55fe4cad38000410275a7a158b515bf01967aa0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2015 QNAP Systems, Inc.\r"},{"line_number":2,"context_line":"# All Rights Reserved.\r"},{"line_number":3,"context_line":"#\r"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may\r"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_b334f7fb","line":1,"updated":"2016-05-22 20:42:07.000000000","message":"2016","commit_id":"5f4a1f8c14cc9e2f6bc3796712449689b9cf6f8e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a55fe4cad38000410275a7a158b515bf01967aa0","unresolved":false,"context_lines":[{"line_number":16,"context_line":"Volume driver for QNAP Storage.\r"},{"line_number":17,"context_line":"This driver supports QNAP Storage for iSCSI.\r"},{"line_number":18,"context_line":"\"\"\"\r"},{"line_number":19,"context_line":"# import sys\r"},{"line_number":20,"context_line":"import base64\r"},{"line_number":21,"context_line":"import functools\r"},{"line_number":22,"context_line":"# import random\r"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_933733fe","line":19,"updated":"2016-05-22 20:42:07.000000000","message":"Remove commented out code.","commit_id":"5f4a1f8c14cc9e2f6bc3796712449689b9cf6f8e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a55fe4cad38000410275a7a158b515bf01967aa0","unresolved":false,"context_lines":[{"line_number":35,"context_line":"from oslo_config import cfg\r"},{"line_number":36,"context_line":"try:\r"},{"line_number":37,"context_line":"    from oslo_log import log as logging\r"},{"line_number":38,"context_line":"except ImportError:\r"},{"line_number":39,"context_line":"    from cinder.openstack.common import log as logging\r"},{"line_number":40,"context_line":"# from oslo.utils import units\r"},{"line_number":41,"context_line":"# from oslo.utils import timeutils\r"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_1324e3c2","line":38,"updated":"2016-05-22 20:42:07.000000000","message":"No need for a try/except here. Import logging from oslo_log.","commit_id":"5f4a1f8c14cc9e2f6bc3796712449689b9cf6f8e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"be6014510f4100132b074d4539fbb88cf020d30d","unresolved":false,"context_lines":[{"line_number":52,"context_line":"# from datetime import datetime\r"},{"line_number":53,"context_line":"\r"},{"line_number":54,"context_line":"DRIVER_VERSION \u003d \u00271.0.0\u0027\r"},{"line_number":55,"context_line":"GB \u003d 1024 * 1024 * 1024\r"},{"line_number":56,"context_line":"\r"},{"line_number":57,"context_line":"LOG \u003d logging.getLogger(__name__)\r"},{"line_number":58,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":3,"id":"9abb7d3a_c009432e","line":55,"updated":"2016-06-03 17:47:32.000000000","message":"Use units.Gi.","commit_id":"5f4a1f8c14cc9e2f6bc3796712449689b9cf6f8e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"be6014510f4100132b074d4539fbb88cf020d30d","unresolved":false,"context_lines":[{"line_number":65,"context_line":"               help\u003d\u0027Management Port for QNAP storage\u0027),\r"},{"line_number":66,"context_line":"    cfg.StrOpt(\u0027qnap_storage_protocol\u0027,\r"},{"line_number":67,"context_line":"               default\u003d\u0027iscsi\u0027,\r"},{"line_number":68,"context_line":"               help\u003d\u0027Communication protocol to access QNAP storage\u0027),\r"},{"line_number":69,"context_line":"    cfg.StrOpt(\u0027iscsi_ip\u0027,\r"},{"line_number":70,"context_line":"               default\u003d\u002710.77.201.66\u0027,\r"},{"line_number":71,"context_line":"               help\u003d\u0027iSCSI data port IP for QNAP storage\u0027),\r"}],"source_content_type":"text/x-python","patch_set":3,"id":"9abb7d3a_2507811d","line":68,"updated":"2016-06-03 17:47:32.000000000","message":"What are the other options?\n\nSet choices\u003d[\u0027iscsi\u0027, \u0027other_protocol\u0027] in the StrOpt.","commit_id":"5f4a1f8c14cc9e2f6bc3796712449689b9cf6f8e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"be6014510f4100132b074d4539fbb88cf020d30d","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    cfg.StrOpt(\u0027qnap_storage_protocol\u0027,\r"},{"line_number":67,"context_line":"               default\u003d\u0027iscsi\u0027,\r"},{"line_number":68,"context_line":"               help\u003d\u0027Communication protocol to access QNAP storage\u0027),\r"},{"line_number":69,"context_line":"    cfg.StrOpt(\u0027iscsi_ip\u0027,\r"},{"line_number":70,"context_line":"               default\u003d\u002710.77.201.66\u0027,\r"},{"line_number":71,"context_line":"               help\u003d\u0027iSCSI data port IP for QNAP storage\u0027),\r"},{"line_number":72,"context_line":"    # cfg.StrOpt(\u0027san_login\u0027,\r"}],"source_content_type":"text/x-python","patch_set":3,"id":"9abb7d3a_850f4d87","line":69,"updated":"2016-06-03 17:47:32.000000000","message":"Should use already existing iscsi_ip_address option.","commit_id":"5f4a1f8c14cc9e2f6bc3796712449689b9cf6f8e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a55fe4cad38000410275a7a158b515bf01967aa0","unresolved":false,"context_lines":[{"line_number":84,"context_line":"CONF.register_opts(qnap_opts)\r"},{"line_number":85,"context_line":"\r"},{"line_number":86,"context_line":"\r"},{"line_number":87,"context_line":"class QnapDriverException(exception.VolumeDriverException):\r"},{"line_number":88,"context_line":"    message \u003d _(\"QNAP Cinder Driver exception\")\r"},{"line_number":89,"context_line":"\r"},{"line_number":90,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_532aeb90","line":87,"updated":"2016-05-22 20:42:07.000000000","message":"Put exceptions in cinder/exceptions.py","commit_id":"5f4a1f8c14cc9e2f6bc3796712449689b9cf6f8e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a55fe4cad38000410275a7a158b515bf01967aa0","unresolved":false,"context_lines":[{"line_number":130,"context_line":"                ip\u003dself.configuration.san_ip,\r"},{"line_number":131,"context_line":"                port\u003dself.configuration.qnap_server_port)\r"},{"line_number":132,"context_line":"        except Exception:\r"},{"line_number":133,"context_line":"            LOG.error(_LE(\u0027Failed to create HTTP client.\u0027\r"},{"line_number":134,"context_line":"                          \u0027Check ip, port, username, password\u0027\r"},{"line_number":135,"context_line":"                          \u0027 and make sure the array version is compatible\u0027))\r"},{"line_number":136,"context_line":"            raise\r"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_b31b5780","line":133,"updated":"2016-05-22 20:42:07.000000000","message":"Needs trailing space.","commit_id":"5f4a1f8c14cc9e2f6bc3796712449689b9cf6f8e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a55fe4cad38000410275a7a158b515bf01967aa0","unresolved":false,"context_lines":[{"line_number":137,"context_line":"\r"},{"line_number":138,"context_line":"    def create_volume(self, volume):\r"},{"line_number":139,"context_line":"        \"\"\"Create a new volume.\"\"\"\r"},{"line_number":140,"context_line":"        LOG.info(_LI(\u0027in create_volume\u0027))\r"},{"line_number":141,"context_line":"        reserve \u003d not self.configuration.san_thin_provision\r"},{"line_number":142,"context_line":"\r"},{"line_number":143,"context_line":"        if not volume[\u0027display_name\u0027]:\r"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_931e136e","line":140,"updated":"2016-05-22 20:42:07.000000000","message":"Change this to LOG.debug()","commit_id":"5f4a1f8c14cc9e2f6bc3796712449689b9cf6f8e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a55fe4cad38000410275a7a158b515bf01967aa0","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        reserve \u003d not self.configuration.san_thin_provision\r"},{"line_number":142,"context_line":"\r"},{"line_number":143,"context_line":"        if not volume[\u0027display_name\u0027]:\r"},{"line_number":144,"context_line":"            LOG.info(_LI(\u0027volume[display_name] is None...\u0027))\r"},{"line_number":145,"context_line":"            volume[\u0027display_name\u0027] \u003d (\u0027QCD-\u0027 + volume[\u0027name\u0027][7:].replace(\r"},{"line_number":146,"context_line":"                \u0027-\u0027, \u0027\u0027))[0:31]\r"},{"line_number":147,"context_line":"        self.APIExecutor._execute_create_vol(volume,\r"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_f3115f5e","line":144,"updated":"2016-05-22 20:42:07.000000000","message":"This seems like it should be a debug as well.","commit_id":"5f4a1f8c14cc9e2f6bc3796712449689b9cf6f8e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"cda6c1c05512e08153294d8834beb0278d5d3258","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        if not volume[\u0027display_name\u0027]:\r"},{"line_number":144,"context_line":"            LOG.info(_LI(\u0027volume[display_name] is None...\u0027))\r"},{"line_number":145,"context_line":"            volume[\u0027display_name\u0027] \u003d (\u0027QCD-\u0027 + volume[\u0027name\u0027][7:].replace(\r"},{"line_number":146,"context_line":"                \u0027-\u0027, \u0027\u0027))[0:31]\r"},{"line_number":147,"context_line":"        self.APIExecutor._execute_create_vol(volume,\r"},{"line_number":148,"context_line":"                                             self.configuration.qnap_poolname,\r"},{"line_number":149,"context_line":"                                             reserve)\r"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_c5a043a8","line":146,"updated":"2016-06-10 18:16:23.000000000","message":"Are you relying on display_name to identify the volume on the array?  Because display_name can be changed easily without the knowledge of the driver, it is not recommended to use it to save important data.  You should use \u0027provider_id\u0027 or \u0027provider_location\u0027 field instead.","commit_id":"5f4a1f8c14cc9e2f6bc3796712449689b9cf6f8e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"cda6c1c05512e08153294d8834beb0278d5d3258","unresolved":false,"context_lines":[{"line_number":149,"context_line":"                                             reserve)\r"},{"line_number":150,"context_line":"\r"},{"line_number":151,"context_line":"        createdLun \u003d self.APIExecutor.getLunInfo(\r"},{"line_number":152,"context_line":"            LUNName \u003d volume[\u0027display_name\u0027])\r"},{"line_number":153,"context_line":"        LUNNAA \u003d createdLun.find(\u0027LUNNAA\u0027).text\r"},{"line_number":154,"context_line":"        LOG.info(_LI(\u0027LUNNAA: %s\u0027), LUNNAA)\r"},{"line_number":155,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_259e6754","line":152,"updated":"2016-06-10 18:16:23.000000000","message":"Looks like you are relying on display_name to get lun info.  Please use provider_id or provider_location.","commit_id":"5f4a1f8c14cc9e2f6bc3796712449689b9cf6f8e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a55fe4cad38000410275a7a158b515bf01967aa0","unresolved":false,"context_lines":[{"line_number":163,"context_line":"        \"\"\"Delete the specified volume.\"\"\"\r"},{"line_number":164,"context_line":"        \u0027\u0027\u0027\r"},{"line_number":165,"context_line":"        if volume[\u0027display_name\u0027] is not None:\r"},{"line_number":166,"context_line":"            self.APIExecutor.delete_vol(volume[\u0027display_name\u0027])\r"},{"line_number":167,"context_line":"        else:\r"},{"line_number":168,"context_line":"            display_name \u003d (\u0027QCD-\u0027 + volume[\u0027name\u0027][7:].replace(\u0027-\u0027, \u0027\u0027))[0:31]\r"},{"line_number":169,"context_line":"            self.APIExecutor.delete_vol(display_name)\r"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_d3141b4e","line":166,"updated":"2016-05-22 20:42:07.000000000","message":"Remove commented out code.","commit_id":"5f4a1f8c14cc9e2f6bc3796712449689b9cf6f8e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"be6014510f4100132b074d4539fbb88cf020d30d","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        LOG.info(_LI(\u0027len(vol_metadata): %d\u0027), len(vol_metadata))\r"},{"line_number":174,"context_line":"        if len(vol_metadata) !\u003d 0:\r"},{"line_number":175,"context_line":"            lun_naa \u003d vol_metadata[\u0027LUNNAA\u0027]\r"},{"line_number":176,"context_line":"            LOG.info(_LI(\u0027LUNNAA: %s\u0027), lun_naa)\r"},{"line_number":177,"context_line":"        else:\r"},{"line_number":178,"context_line":"            try:\r"},{"line_number":179,"context_line":"                createdLun \u003d self.APIExecutor.getLunInfo(\r"}],"source_content_type":"text/x-python","patch_set":3,"id":"9abb7d3a_654a2985","line":176,"updated":"2016-06-03 17:47:32.000000000","message":"Info-level messages need to be something understandable by the admin.","commit_id":"5f4a1f8c14cc9e2f6bc3796712449689b9cf6f8e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a55fe4cad38000410275a7a158b515bf01967aa0","unresolved":false,"context_lines":[{"line_number":183,"context_line":"                _metadata \u003d {\u0027LUNNAA\u0027: lun_naa}\r"},{"line_number":184,"context_line":"                db.volume_metadata_update(self.ctxt,\r"},{"line_number":185,"context_line":"                                          volume[\u0027id\u0027],\r"},{"line_number":186,"context_line":"                                          _metadata,\r"},{"line_number":187,"context_line":"                                          False)\r"},{"line_number":188,"context_line":"            except Exception:\r"},{"line_number":189,"context_line":"                LOG.info(_LI(\u0027Volume is invalid\u0027))\r"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_ae02d007","line":186,"updated":"2016-05-22 20:42:07.000000000","message":"If the volume is not found on a delete request, just return success.","commit_id":"5f4a1f8c14cc9e2f6bc3796712449689b9cf6f8e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a55fe4cad38000410275a7a158b515bf01967aa0","unresolved":false,"context_lines":[{"line_number":203,"context_line":"\r"},{"line_number":204,"context_line":"    def create_cloned_volume(self, volume, src_vref):\r"},{"line_number":205,"context_line":"        \"\"\"Create a clone of the specified volume.\"\"\"\r"},{"line_number":206,"context_line":"        LOG.info(_LI(\u0027Entering create_cloned_volume...\u0027))\r"},{"line_number":207,"context_line":"        \u0027\u0027\u0027\r"},{"line_number":208,"context_line":"        # Below is to clone a volume by vss snapshot lun\r"},{"line_number":209,"context_line":"        srcLun \u003d self.APIExecutor.\\\r"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_8e054c12","line":206,"updated":"2016-05-22 20:42:07.000000000","message":"Debug level or remove.","commit_id":"5f4a1f8c14cc9e2f6bc3796712449689b9cf6f8e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"cda6c1c05512e08153294d8834beb0278d5d3258","unresolved":false,"context_lines":[{"line_number":223,"context_line":"            LUNName \u003d selectedLun.find(\u0027LUNName\u0027).text\r"},{"line_number":224,"context_line":"            LOG.info(\u0027LUNName: %s \u0027, LUNName)\r"},{"line_number":225,"context_line":"\r"},{"line_number":226,"context_line":"            self.APIExecutor.editLun(LUNName, volume[\u0027size\u0027], LUNIndex)\r"},{"line_number":227,"context_line":"        \u0027\u0027\u0027\r"},{"line_number":228,"context_line":"        # Below is to clone a volume from a snapshot in the snapshot manager\r"},{"line_number":229,"context_line":"        srcLun \u003d self.APIExecutor.getLunInfo(\r"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_c5c68315","line":226,"updated":"2016-06-10 18:16:23.000000000","message":"Please remove commented out code.","commit_id":"5f4a1f8c14cc9e2f6bc3796712449689b9cf6f8e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a55fe4cad38000410275a7a158b515bf01967aa0","unresolved":false,"context_lines":[{"line_number":265,"context_line":"\r"},{"line_number":266,"context_line":"    def ensure_export(self, context, volume):\r"},{"line_number":267,"context_line":"        \"\"\"Driver entry point to get the export info for an existing volume.\"\"\"\r"},{"line_number":268,"context_line":"        LOG.info(_LI(\u0027In ensure_export\u0027))\r"},{"line_number":269,"context_line":"\r"},{"line_number":270,"context_line":"    def create_snapshot(self, snapshot):\r"},{"line_number":271,"context_line":"        \"\"\"Create a snapshot.\"\"\"\r"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_ee08582a","line":268,"updated":"2016-05-22 20:42:07.000000000","message":"Remove.","commit_id":"5f4a1f8c14cc9e2f6bc3796712449689b9cf6f8e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a55fe4cad38000410275a7a158b515bf01967aa0","unresolved":false,"context_lines":[{"line_number":269,"context_line":"\r"},{"line_number":270,"context_line":"    def create_snapshot(self, snapshot):\r"},{"line_number":271,"context_line":"        \"\"\"Create a snapshot.\"\"\"\r"},{"line_number":272,"context_line":"        LOG.info(_LI(\u0027Entering create_snapshot snapshot\u003d%(snap)s\u0027),\r"},{"line_number":273,"context_line":"                 {\u0027snap\u0027: snapshot.volume.display_name})\r"},{"line_number":274,"context_line":"        \u0027\u0027\u0027\r"},{"line_number":275,"context_line":"        # Below is to create vss snapshot lun\r"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_ce0bd422","line":272,"updated":"2016-05-22 20:42:07.000000000","message":"LOG.debug or remove.","commit_id":"5f4a1f8c14cc9e2f6bc3796712449689b9cf6f8e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a55fe4cad38000410275a7a158b515bf01967aa0","unresolved":false,"context_lines":[{"line_number":323,"context_line":"                                        snapshot[\u0027id\u0027],\r"},{"line_number":324,"context_line":"                                        _metadata,\r"},{"line_number":325,"context_line":"                                        False)\r"},{"line_number":326,"context_line":"        except Exception:\r"},{"line_number":327,"context_line":"            LOG.info(_LI(\u0027Volume is invalid\u0027))\r"},{"line_number":328,"context_line":"        \u0027\u0027\u0027\r"},{"line_number":329,"context_line":"        if snapshot.volume.display_name is not None:\r"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_0e12fc56","line":326,"updated":"2016-05-22 20:42:07.000000000","message":"Can a more specific exception be caught?","commit_id":"5f4a1f8c14cc9e2f6bc3796712449689b9cf6f8e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a55fe4cad38000410275a7a158b515bf01967aa0","unresolved":false,"context_lines":[{"line_number":324,"context_line":"                                        _metadata,\r"},{"line_number":325,"context_line":"                                        False)\r"},{"line_number":326,"context_line":"        except Exception:\r"},{"line_number":327,"context_line":"            LOG.info(_LI(\u0027Volume is invalid\u0027))\r"},{"line_number":328,"context_line":"        \u0027\u0027\u0027\r"},{"line_number":329,"context_line":"        if snapshot.volume.display_name is not None:\r"},{"line_number":330,"context_line":"            srcLun \u003d self.APIExecutor.\\\r"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_6e1d8865","line":327,"updated":"2016-05-22 20:42:07.000000000","message":"Probably want to raise a backend exception.","commit_id":"5f4a1f8c14cc9e2f6bc3796712449689b9cf6f8e"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"48f792e7e7556fb38b4256366662d977e9f491f2","unresolved":false,"context_lines":[{"line_number":447,"context_line":"                                  False)\r"},{"line_number":448,"context_line":"\r"},{"line_number":449,"context_line":"        if (volume[\u0027size\u0027] \u003e snapshot[\u0027volume_size\u0027]):\r"},{"line_number":450,"context_line":"            selectedLun \u003d self.APIExecutor.getLunInfo(\r"},{"line_number":451,"context_line":"                LUNName \u003d volume[\u0027display_name\u0027])\r"},{"line_number":452,"context_line":"            LUNIndex \u003d selectedLun.find(\u0027LUNIndex\u0027).text\r"},{"line_number":453,"context_line":"            LOG.info(_LI(\u0027LUNIndex: %s\u0027), LUNIndex)\r"},{"line_number":454,"context_line":"            LUNName \u003d selectedLun.find(\u0027LUNName\u0027).text\r"},{"line_number":455,"context_line":"            LOG.info(_LI(\u0027LUNName: %s\u0027), LUNName)\r"},{"line_number":456,"context_line":"            # self.APIExecutor.editLun(LUNName, volume[\u0027size\u0027], LUNIndex)\r"},{"line_number":457,"context_line":"            LUNThinAllocate \u003d selectedLun.find(\u0027LUNThinAllocate\u0027).text\r"},{"line_number":458,"context_line":"            LOG.info(_LI(\u0027LUNThinAllocate: %s\u0027), LUNThinAllocate)\r"},{"line_number":459,"context_line":"            self.APIExecutor.editLun(LUNName,\r"},{"line_number":460,"context_line":"                                     volume[\u0027size\u0027],\r"},{"line_number":461,"context_line":"                                     LUNIndex,\r"},{"line_number":462,"context_line":"                                     LUNThinAllocate)\r"},{"line_number":463,"context_line":"\r"},{"line_number":464,"context_line":"    def get_volume_stats(self, refresh\u003dFalse):\r"},{"line_number":465,"context_line":"        \"\"\"Get volume stats. This is more of getting group stats.\"\"\"\r"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_590c783b","line":462,"range":{"start_line":450,"start_character":12,"end_line":462,"end_character":53},"updated":"2016-06-15 19:23:11.000000000","message":"This chunk of code to extend the volumes is duplicated here, in extend_volume, and create from snapshot. You probably will want to move that into a helper method or centralize in one place.","commit_id":"5f4a1f8c14cc9e2f6bc3796712449689b9cf6f8e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a55fe4cad38000410275a7a158b515bf01967aa0","unresolved":false,"context_lines":[{"line_number":469,"context_line":"        # LOG.info(\u0027IPList: %s\u0027, IPList)\r"},{"line_number":470,"context_line":"\r"},{"line_number":471,"context_line":"        if refresh:\r"},{"line_number":472,"context_line":"            backend_name \u003d self.configuration.safe_get(\u0027volume_backend_name\u0027)\\\r"},{"line_number":473,"context_line":"                or self.__class__.__name__\r"},{"line_number":474,"context_line":"            LOG.info(_LI(\u0027backend_name\u003d%(backend_name)s\u0027),\r"},{"line_number":475,"context_line":"                     {\u0027backend_name\u0027: backend_name})\r"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_ae29308c","line":472,"updated":"2016-05-22 20:42:07.000000000","message":"Wrap in () to get rid of \\ for line continuation.","commit_id":"5f4a1f8c14cc9e2f6bc3796712449689b9cf6f8e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"cda6c1c05512e08153294d8834beb0278d5d3258","unresolved":false,"context_lines":[{"line_number":478,"context_line":"                                                                configuration.\r"},{"line_number":479,"context_line":"                                                                qnap_poolname)\r"},{"line_number":480,"context_line":"            capacity_bytes \u003d int(selectedPool.find(\u0027capacity_bytes\u0027).text)\r"},{"line_number":481,"context_line":"            LOG.info(_LI(\u0027capacity_bytes: %s GB\u0027), capacity_bytes / GB)\r"},{"line_number":482,"context_line":"            freesize_bytes \u003d int(selectedPool.find(\u0027freesize_bytes\u0027).text)\r"},{"line_number":483,"context_line":"            LOG.info(_LI(\u0027freesize_bytes: %s GB\u0027), freesize_bytes / GB)\r"},{"line_number":484,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_e53d7fde","line":481,"updated":"2016-06-10 18:16:23.000000000","message":"Use units.Gi instead of GB.","commit_id":"5f4a1f8c14cc9e2f6bc3796712449689b9cf6f8e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"213f7cabc0df06104ed7a8fa2054cc7c1cc2f992","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        for attr in required_config:\r"},{"line_number":81,"context_line":"            if not getattr(self.configuration, attr, None):\r"},{"line_number":82,"context_line":"                raise exception.InvalidInput(reason\u003d_(\u0027%s is not set.\u0027) %\r"},{"line_number":83,"context_line":"                                             attr)\r"},{"line_number":84,"context_line":"\r"},{"line_number":85,"context_line":"    def do_setup(self, context):\r"},{"line_number":86,"context_line":"        \"\"\"Setup the QNAP Cinder volume driver.\"\"\"\r"}],"source_content_type":"text/x-python","patch_set":16,"id":"1ac06dbe_ff467a4d","line":83,"updated":"2016-08-22 20:59:04.000000000","message":"Should use InvalidConfigurationValue.","commit_id":"187855c2e000ee11ed12dacc18091ff6be47d491"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"213f7cabc0df06104ed7a8fa2054cc7c1cc2f992","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        LOG.debug(_LI(\u0027volume[display_name]: %s\u0027), volume[\u0027display_name\u0027])\r"},{"line_number":109,"context_line":"\r"},{"line_number":110,"context_line":"        if volume[\u0027display_name\u0027]:\r"},{"line_number":111,"context_line":"            if len(volume[\u0027display_name\u0027]) \u003e 31:\r"},{"line_number":112,"context_line":"                LOG.debug(_LI(\u0027volume[display_name] is too long...\u0027))\r"},{"line_number":113,"context_line":"                LOG.debug(_LI(\u0027volume[:14]: %s\u0027), volume[\u0027display_name\u0027][:14])\r"},{"line_number":114,"context_line":"                LOG.debug(_LI(\u0027volume[-14:]: %s\u0027),\r"}],"source_content_type":"text/x-python","patch_set":16,"id":"1ac06dbe_9c3954f5","line":111,"updated":"2016-08-22 20:59:04.000000000","message":"Can you add a comment here showing why 31 and 14 are interesting, and what this code does?","commit_id":"187855c2e000ee11ed12dacc18091ff6be47d491"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"213f7cabc0df06104ed7a8fa2054cc7c1cc2f992","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        LOG.debug(_LI(\u0027LUNNAA: %s\u0027), LUNNAA)\r"},{"line_number":134,"context_line":"\r"},{"line_number":135,"context_line":"        _metadata \u003d {\u0027LUNNAA\u0027: LUNNAA}\r"},{"line_number":136,"context_line":"        db.volume_metadata_update(self.ctxt,\r"},{"line_number":137,"context_line":"                                  volume[\u0027id\u0027],\r"},{"line_number":138,"context_line":"                                  _metadata,\r"},{"line_number":139,"context_line":"                                  False)\r"}],"source_content_type":"text/x-python","patch_set":16,"id":"1ac06dbe_bf67e2e7","line":136,"updated":"2016-08-22 20:59:04.000000000","message":"db.volume_metadata_update should not be called from your driver.","commit_id":"187855c2e000ee11ed12dacc18091ff6be47d491"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"213f7cabc0df06104ed7a8fa2054cc7c1cc2f992","unresolved":false,"context_lines":[{"line_number":167,"context_line":"                lun_naa \u003d createdLun.find(\u0027LUNNAA\u0027).text\r"},{"line_number":168,"context_line":"                LOG.debug(_LI(\u0027LUNNAA: %s\u0027), lun_naa)\r"},{"line_number":169,"context_line":"                _metadata \u003d {\u0027LUNNAA\u0027: lun_naa}\r"},{"line_number":170,"context_line":"                db.volume_metadata_update(self.ctxt,\r"},{"line_number":171,"context_line":"                                          volume[\u0027id\u0027],\r"},{"line_number":172,"context_line":"                                          _metadata,\r"},{"line_number":173,"context_line":"                                          False)\r"}],"source_content_type":"text/x-python","patch_set":16,"id":"1ac06dbe_1f61d6d3","line":170,"updated":"2016-08-22 20:59:04.000000000","message":"db.volume_metadata_update should not be called from your driver.","commit_id":"187855c2e000ee11ed12dacc18091ff6be47d491"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"213f7cabc0df06104ed7a8fa2054cc7c1cc2f992","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        LUNIndex \u003d srcLun.find(\u0027LUNIndex\u0027).text\r"},{"line_number":213,"context_line":"        LOG.debug(_LI(\u0027LUNIndex: %s\u0027), LUNIndex)\r"},{"line_number":214,"context_line":"\r"},{"line_number":215,"context_line":"        if len(volume[\u0027display_name\u0027]) \u003e 31:\r"},{"line_number":216,"context_line":"            LOG.debug(_LI(\u0027volume[display_name] is too long...\u0027))\r"},{"line_number":217,"context_line":"            LOG.debug(_LI(\u0027volume[:14]: %s\u0027), volume[\u0027display_name\u0027][:14])\r"},{"line_number":218,"context_line":"            LOG.debug(_LI(\u0027volume[-14:]: %s\u0027), volume[\u0027display_name\u0027][-14:])\r"}],"source_content_type":"text/x-python","patch_set":16,"id":"1ac06dbe_5c1a3c7e","line":215,"updated":"2016-08-22 20:59:04.000000000","message":"This should be refactored into a common method (also used in create_volume).","commit_id":"187855c2e000ee11ed12dacc18091ff6be47d491"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"213f7cabc0df06104ed7a8fa2054cc7c1cc2f992","unresolved":false,"context_lines":[{"line_number":248,"context_line":"    def create_snapshot(self, snapshot):\r"},{"line_number":249,"context_line":"        \"\"\"Create a snapshot.\"\"\"\r"},{"line_number":250,"context_line":"        LOG.debug(_LI(\u0027Entering create_snapshot snapshot\u003d%(snap)s\u0027),\r"},{"line_number":251,"context_line":"                  {\u0027snap\u0027: snapshot.volume.display_name})\r"},{"line_number":252,"context_line":"\r"},{"line_number":253,"context_line":"        # Below is to create snapshot in the snapshot manager\r"},{"line_number":254,"context_line":"        vol_metadata \u003d self.get_volume_metadata(snapshot.volume.id)\r"}],"source_content_type":"text/x-python","patch_set":16,"id":"1ac06dbe_bc0b7029","line":251,"updated":"2016-08-22 20:59:04.000000000","message":"This won\u0027t be useful for debugging if many snapshots are given the same display_name, should show the id too.","commit_id":"187855c2e000ee11ed12dacc18091ff6be47d491"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"213f7cabc0df06104ed7a8fa2054cc7c1cc2f992","unresolved":false,"context_lines":[{"line_number":256,"context_line":"            lun_naa \u003d vol_metadata[\u0027LUNNAA\u0027]\r"},{"line_number":257,"context_line":"            LOG.debug(_LI(\u0027LUNNAA: %s\u0027), lun_naa)\r"},{"line_number":258,"context_line":"        else:\r"},{"line_number":259,"context_line":"            if len(snapshot.volume.display_name) \u003e 31:\r"},{"line_number":260,"context_line":"                LOG.debug(_LI(\u0027volume[display_name] is too long...\u0027))\r"},{"line_number":261,"context_line":"                LOG.debug(_LI(\u0027volume[:14]: %s\u0027),\r"},{"line_number":262,"context_line":"                          snapshot.volume.display_name[:14])\r"}],"source_content_type":"text/x-python","patch_set":16,"id":"1ac06dbe_9c10345b","line":259,"updated":"2016-08-22 20:59:04.000000000","message":"Ditto","commit_id":"187855c2e000ee11ed12dacc18091ff6be47d491"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"213f7cabc0df06104ed7a8fa2054cc7c1cc2f992","unresolved":false,"context_lines":[{"line_number":332,"context_line":"\r"},{"line_number":333,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):\r"},{"line_number":334,"context_line":"        \"\"\"Create a volume from a snapshot.\"\"\"\r"},{"line_number":335,"context_line":"        LOG.debug(_LI(\u0027in create_volume_from_snapshot\u0027))\r"},{"line_number":336,"context_line":"        LOG.debug(_LI(\u0027volume[display_name]: %s\u0027), volume[\u0027display_name\u0027])\r"},{"line_number":337,"context_line":"        LOG.debug(_LI(\u0027snapshot[id]: %s\u0027), snapshot[\u0027id\u0027])\r"},{"line_number":338,"context_line":"        LOG.debug(_LI(\u0027volume: %s\u0027), volume)\r"}],"source_content_type":"text/x-python","patch_set":16,"id":"1ac06dbe_5f018e04","line":335,"updated":"2016-08-22 20:59:04.000000000","message":"Debug-level messages should not be translated w/ _LI (info level).","commit_id":"187855c2e000ee11ed12dacc18091ff6be47d491"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"213f7cabc0df06104ed7a8fa2054cc7c1cc2f992","unresolved":false,"context_lines":[{"line_number":546,"context_line":"                    target_iqn \u003d targetiqn[0]\r"},{"line_number":547,"context_line":"\r"},{"line_number":548,"context_line":"        self.APIExecutor.mapLun(LUNIndex, targetIndex)\r"},{"line_number":549,"context_line":"        time.sleep(3)\r"},{"line_number":550,"context_line":"        LOG.debug(_LI(\u0027bbb\u0027))\r"},{"line_number":551,"context_line":"\r"},{"line_number":552,"context_line":"        properties \u003d {}\r"}],"source_content_type":"text/x-python","patch_set":16,"id":"1ac06dbe_7f7f2a66","line":549,"updated":"2016-08-22 20:59:04.000000000","message":"What if this takes longer than 3 seconds?  Does it fail?","commit_id":"187855c2e000ee11ed12dacc18091ff6be47d491"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"213f7cabc0df06104ed7a8fa2054cc7c1cc2f992","unresolved":false,"context_lines":[{"line_number":547,"context_line":"\r"},{"line_number":548,"context_line":"        self.APIExecutor.mapLun(LUNIndex, targetIndex)\r"},{"line_number":549,"context_line":"        time.sleep(3)\r"},{"line_number":550,"context_line":"        LOG.debug(_LI(\u0027bbb\u0027))\r"},{"line_number":551,"context_line":"\r"},{"line_number":552,"context_line":"        properties \u003d {}\r"},{"line_number":553,"context_line":"        properties[\u0027target_discovered\u0027] \u003d True\r"}],"source_content_type":"text/x-python","patch_set":16,"id":"1ac06dbe_3ff012fe","line":550,"updated":"2016-08-22 20:59:04.000000000","message":"Not a useful debug message.","commit_id":"187855c2e000ee11ed12dacc18091ff6be47d491"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"c2e0c9fdd03714515c8bc88b2f0a1ffbb2978251","unresolved":false,"context_lines":[{"line_number":47,"context_line":"qnap_opts \u003d [\r"},{"line_number":48,"context_line":"    cfg.StrOpt(\u0027qnap_management_url\u0027,\r"},{"line_number":49,"context_line":"               help\u003d\u0027The URL to management QNAP Storage\u0027),\r"},{"line_number":50,"context_line":"    cfg.StrOpt(\u0027iscsi_ip\u0027,\r"},{"line_number":51,"context_line":"               help\u003d\u0027San iSCSI IP for QNAP storage\u0027),\r"},{"line_number":52,"context_line":"    cfg.StrOpt(\u0027san_iscsi_ip\u0027,\r"},{"line_number":53,"context_line":"               help\u003d\u0027San iSCSI IP for QNAP storage\u0027),\r"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a8ec9b2_e01048ae","line":50,"updated":"2016-09-19 17:14:20.000000000","message":"This should reuse the option \"iscsi_ip_address\" that already exists rather than defining a new option.","commit_id":"cb866c1ea3f69ab2e863d416bdb4ae89327d0213"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"c2e0c9fdd03714515c8bc88b2f0a1ffbb2978251","unresolved":false,"context_lines":[{"line_number":120,"context_line":"\r"},{"line_number":121,"context_line":"            # use the two config and nas_ssl to set qnap_management_url\r"},{"line_number":122,"context_line":"            management_url \u003d \"\"\r"},{"line_number":123,"context_line":"            LOG.debug(_LI(\u0027ifssl: %s\u0027), ifssl)\r"},{"line_number":124,"context_line":"            if ifssl:\r"},{"line_number":125,"context_line":"                management_url \u003d \"https://\" + san_ip + \":\" + qnap_server_port\r"},{"line_number":126,"context_line":"            else:\r"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a8ec9b2_200b107f","line":123,"updated":"2016-09-19 17:14:20.000000000","message":"LOG.debug() calls should not use _LI().","commit_id":"cb866c1ea3f69ab2e863d416bdb4ae89327d0213"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"c2e0c9fdd03714515c8bc88b2f0a1ffbb2978251","unresolved":false,"context_lines":[{"line_number":125,"context_line":"                management_url \u003d \"https://\" + san_ip + \":\" + qnap_server_port\r"},{"line_number":126,"context_line":"            else:\r"},{"line_number":127,"context_line":"                management_url \u003d \"http://\" + san_ip + \":\" + qnap_server_port\r"},{"line_number":128,"context_line":"            LOG.debug(_LI(\u0027management_url: %s\u0027), management_url)\r"},{"line_number":129,"context_line":"            self.configuration.qnap_management_url \u003d management_url\r"},{"line_number":130,"context_line":"\r"},{"line_number":131,"context_line":"            # add qnap_management_url to cinder.conf\r"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a8ec9b2_a01f20b6","line":128,"updated":"2016-09-19 17:14:20.000000000","message":"LOG.debug() calls should not use _LI().  (Many more below.)","commit_id":"cb866c1ea3f69ab2e863d416bdb4ae89327d0213"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"57f780d71ae9a63f1714e02e3b3cab8d3560096c","unresolved":false,"context_lines":[{"line_number":833,"context_line":"\r"},{"line_number":834,"context_line":"        sanitized_params \u003d urllib.parse.urlencode(sanitized_params)\r"},{"line_number":835,"context_line":"        url \u003d (\u0027/cgi-bin/authLogin.cgi?%s\u0027 % sanitized_params)\r"},{"line_number":836,"context_line":"        LOG.debug(\u0027url: %s\u0027, url)\r"},{"line_number":837,"context_line":"\r"},{"line_number":838,"context_line":"        res_details \u003d self._execute_and_get_response_details(self.ip, url)\r"},{"line_number":839,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa6399be_0a5ff941","line":836,"updated":"2016-10-11 18:34:01.000000000","message":"This will log a plaintext (base64) password, the password should not appear in the logs.","commit_id":"9f5683ba48c3a8a1580f312649556df2a8d86930"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"e9a2c65ed01d68490f48b06bd18d30500158fff4","unresolved":false,"context_lines":[{"line_number":926,"context_line":"                sanitized_params[key] \u003d six.text_type(value)\r"},{"line_number":927,"context_line":"\r"},{"line_number":928,"context_line":"        sanitized_params \u003d urllib.parse.urlencode(sanitized_params)\r"},{"line_number":929,"context_line":"        url \u003d (\u0027/cgi-bin/authLogin.cgi?%s\u0027 % sanitized_params)\r"},{"line_number":930,"context_line":"\r"},{"line_number":931,"context_line":"        res_details \u003d self._execute_and_get_response_details(self.ip, url)\r"},{"line_number":932,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"}],"source_content_type":"text/x-python","patch_set":20,"id":"9a629dbe_55dd2d41","line":929,"updated":"2016-11-07 16:58:28.000000000","message":"This doesn\u0027t appear to be secure, since it will pass a plaintext (base64) password in the URL itself over HTTP (not guaranteed to be HTTPS).","commit_id":"373e965e3b71cc5f415a53b8f5ae49e9c0b761df"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"d86bb03ee9484051d21a10aaf7b5a788e093dbbd","unresolved":false,"context_lines":[{"line_number":926,"context_line":"                sanitized_params[key] \u003d six.text_type(value)\r"},{"line_number":927,"context_line":"\r"},{"line_number":928,"context_line":"        sanitized_params \u003d urllib.parse.urlencode(sanitized_params)\r"},{"line_number":929,"context_line":"        url \u003d (\u0027/cgi-bin/authLogin.cgi?%s\u0027 % sanitized_params)\r"},{"line_number":930,"context_line":"\r"},{"line_number":931,"context_line":"        res_details \u003d self._execute_and_get_response_details(self.ip, url)\r"},{"line_number":932,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"}],"source_content_type":"text/x-python","patch_set":20,"id":"5a74a57a_fd09f695","line":929,"in_reply_to":"5a74a57a_35539a18","updated":"2016-11-29 09:16:41.000000000","message":"We will modify to auth through a POST and put the password in the post parm to send request.","commit_id":"373e965e3b71cc5f415a53b8f5ae49e9c0b761df"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"d86bb03ee9484051d21a10aaf7b5a788e093dbbd","unresolved":false,"context_lines":[{"line_number":926,"context_line":"                sanitized_params[key] \u003d six.text_type(value)\r"},{"line_number":927,"context_line":"\r"},{"line_number":928,"context_line":"        sanitized_params \u003d urllib.parse.urlencode(sanitized_params)\r"},{"line_number":929,"context_line":"        url \u003d (\u0027/cgi-bin/authLogin.cgi?%s\u0027 % sanitized_params)\r"},{"line_number":930,"context_line":"\r"},{"line_number":931,"context_line":"        res_details \u003d self._execute_and_get_response_details(self.ip, url)\r"},{"line_number":932,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"}],"source_content_type":"text/x-python","patch_set":20,"id":"9a629dbe_1f5e62e9","line":929,"in_reply_to":"9a629dbe_55dd2d41","updated":"2016-11-29 09:16:41.000000000","message":"User could determine whether use HTTP or HTTPS by set management_url on cinder.conf. Please refer to the method \"_parse_management_url\", we parse management_url with the method and record the config that user set up.","commit_id":"373e965e3b71cc5f415a53b8f5ae49e9c0b761df"},{"author":{"_account_id":20361,"name":"Pony Chou","email":"ponychou@qnap.com","username":"ponychou"},"change_message_id":"23ce900191f7f0012faf3baa34ccaf52fff1a2b4","unresolved":false,"context_lines":[{"line_number":926,"context_line":"                sanitized_params[key] \u003d six.text_type(value)\r"},{"line_number":927,"context_line":"\r"},{"line_number":928,"context_line":"        sanitized_params \u003d urllib.parse.urlencode(sanitized_params)\r"},{"line_number":929,"context_line":"        url \u003d (\u0027/cgi-bin/authLogin.cgi?%s\u0027 % sanitized_params)\r"},{"line_number":930,"context_line":"\r"},{"line_number":931,"context_line":"        res_details \u003d self._execute_and_get_response_details(self.ip, url)\r"},{"line_number":932,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"}],"source_content_type":"text/x-python","patch_set":20,"id":"9a629dbe_e19d5e5a","line":929,"in_reply_to":"9a629dbe_55dd2d41","updated":"2016-11-09 02:45:03.000000000","message":"User could determine whether use HTTP or HTTPS by set management_url on cinder.conf. Please refer to the method \"_parse_management_url\", we parse management_url with the method and record the config that user set up.","commit_id":"373e965e3b71cc5f415a53b8f5ae49e9c0b761df"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"3d1d8d0b4018e470d5a7a3b67a541ecee16a99b3","unresolved":false,"context_lines":[{"line_number":926,"context_line":"                sanitized_params[key] \u003d six.text_type(value)\r"},{"line_number":927,"context_line":"\r"},{"line_number":928,"context_line":"        sanitized_params \u003d urllib.parse.urlencode(sanitized_params)\r"},{"line_number":929,"context_line":"        url \u003d (\u0027/cgi-bin/authLogin.cgi?%s\u0027 % sanitized_params)\r"},{"line_number":930,"context_line":"\r"},{"line_number":931,"context_line":"        res_details \u003d self._execute_and_get_response_details(self.ip, url)\r"},{"line_number":932,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"}],"source_content_type":"text/x-python","patch_set":20,"id":"5a74a57a_35539a18","line":929,"in_reply_to":"9a629dbe_e19d5e5a","updated":"2016-11-28 21:40:47.000000000","message":"You should not support HTTP if auth is passed through a GET, though.  This is not secure.","commit_id":"373e965e3b71cc5f415a53b8f5ae49e9c0b761df"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d888d2c41a4d11d03215a2a068936fd040e92e9","unresolved":false,"context_lines":[{"line_number":61,"context_line":"CONF \u003d cfg.CONF\r"},{"line_number":62,"context_line":"CONF.register_opts(qnap_opts)\r"},{"line_number":63,"context_line":"\r"},{"line_number":64,"context_line":"\r"},{"line_number":65,"context_line":"class QnapISCSIDriver(san.SanISCSIDriver):\r"},{"line_number":66,"context_line":"    \"\"\"OpenStack driver to enable QNAP Storage.\r"},{"line_number":67,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_ded50e1c","line":64,"updated":"2016-11-19 17:07:34.000000000","message":"Need to add @interface.volumedriver","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"12d09210122001546bc9d7b8ca5e0c3576b752f4","unresolved":false,"context_lines":[{"line_number":61,"context_line":"CONF \u003d cfg.CONF\r"},{"line_number":62,"context_line":"CONF.register_opts(qnap_opts)\r"},{"line_number":63,"context_line":"\r"},{"line_number":64,"context_line":"\r"},{"line_number":65,"context_line":"class QnapISCSIDriver(san.SanISCSIDriver):\r"},{"line_number":66,"context_line":"    \"\"\"OpenStack driver to enable QNAP Storage.\r"},{"line_number":67,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_31927058","line":64,"in_reply_to":"7a77a97e_ded50e1c","updated":"2016-11-22 09:38:59.000000000","message":"Done","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d888d2c41a4d11d03215a2a068936fd040e92e9","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    Version history:\r"},{"line_number":69,"context_line":"        1.0.0 - Initial driver (Only iSCSI)\r"},{"line_number":70,"context_line":"    \"\"\"\r"},{"line_number":71,"context_line":"\r"},{"line_number":72,"context_line":"    def __init__(self, *args, **kwargs):\r"},{"line_number":73,"context_line":"        \"\"\"Initialize QnapISCSIDriver.\"\"\"\r"},{"line_number":74,"context_line":"        super(QnapISCSIDriver, self).__init__(*args, **kwargs)\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_3edfe23a","line":71,"updated":"2016-11-19 17:07:34.000000000","message":"Need an entry for your CI wiki like this:\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/lvm.py#L90","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"12d09210122001546bc9d7b8ca5e0c3576b752f4","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    Version history:\r"},{"line_number":69,"context_line":"        1.0.0 - Initial driver (Only iSCSI)\r"},{"line_number":70,"context_line":"    \"\"\"\r"},{"line_number":71,"context_line":"\r"},{"line_number":72,"context_line":"    def __init__(self, *args, **kwargs):\r"},{"line_number":73,"context_line":"        \"\"\"Initialize QnapISCSIDriver.\"\"\"\r"},{"line_number":74,"context_line":"        super(QnapISCSIDriver, self).__init__(*args, **kwargs)\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_313c302f","line":71,"in_reply_to":"7a77a97e_3edfe23a","updated":"2016-11-22 09:38:59.000000000","message":"Done","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d888d2c41a4d11d03215a2a068936fd040e92e9","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            LOG.error(_LE(\u0027Failed to create HTTP client. \u0027\r"},{"line_number":115,"context_line":"                          \u0027Check ip, port, username, password\u0027\r"},{"line_number":116,"context_line":"                          \u0027 and make sure the array version is compatible\u0027))\r"},{"line_number":117,"context_line":"            raise\r"},{"line_number":118,"context_line":"\r"},{"line_number":119,"context_line":"    def check_for_setup_error(self):\r"},{"line_number":120,"context_line":"        \"\"\"Check the status of setup.\"\"\"\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_5ed1fe21","line":117,"updated":"2016-11-19 17:07:34.000000000","message":"Raise a more specific exception, i.e., VolumeBackendAPIException","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"6d10c8313ea2e614b5b2896acf9bbd89f4b6e2a3","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            LOG.error(_LE(\u0027Failed to create HTTP client. \u0027\r"},{"line_number":115,"context_line":"                          \u0027Check ip, port, username, password\u0027\r"},{"line_number":116,"context_line":"                          \u0027 and make sure the array version is compatible\u0027))\r"},{"line_number":117,"context_line":"            raise\r"},{"line_number":118,"context_line":"\r"},{"line_number":119,"context_line":"    def check_for_setup_error(self):\r"},{"line_number":120,"context_line":"        \"\"\"Check the status of setup.\"\"\"\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_3e46b4bf","line":117,"in_reply_to":"7a77a97e_5ed1fe21","updated":"2016-11-22 09:44:38.000000000","message":"Done","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d888d2c41a4d11d03215a2a068936fd040e92e9","unresolved":false,"context_lines":[{"line_number":250,"context_line":"                lun_naa \u003d created_lun.find(\u0027LUNNAA\u0027).text\r"},{"line_number":251,"context_line":"\r"},{"line_number":252,"context_line":"            try_times \u003d try_times + 3\r"},{"line_number":253,"context_line":"            time.sleep(time_interval)\r"},{"line_number":254,"context_line":"            if(try_times \u003e max_wait_sec or lun_naa is not None):\r"},{"line_number":255,"context_line":"                break\r"},{"line_number":256,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_dea34eb0","line":253,"updated":"2016-11-19 17:07:34.000000000","message":"Suggest using eventlet.sleep.","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"12d09210122001546bc9d7b8ca5e0c3576b752f4","unresolved":false,"context_lines":[{"line_number":250,"context_line":"                lun_naa \u003d created_lun.find(\u0027LUNNAA\u0027).text\r"},{"line_number":251,"context_line":"\r"},{"line_number":252,"context_line":"            try_times \u003d try_times + 3\r"},{"line_number":253,"context_line":"            time.sleep(time_interval)\r"},{"line_number":254,"context_line":"            if(try_times \u003e max_wait_sec or lun_naa is not None):\r"},{"line_number":255,"context_line":"                break\r"},{"line_number":256,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_7c9affc6","line":253,"in_reply_to":"7a77a97e_dea34eb0","updated":"2016-11-22 09:38:59.000000000","message":"Done","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d888d2c41a4d11d03215a2a068936fd040e92e9","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        LOG.debug(\u0027volume: %s\u0027, volume.__dict__)\r"},{"line_number":271,"context_line":"        lun_naa \u003d self._get_lun_naa_from_volume_metadata(volume)\r"},{"line_number":272,"context_line":"        if lun_naa \u003d\u003d \u0027\u0027:\r"},{"line_number":273,"context_line":"            LOG.debug(\u0027Volume is not exist\u0027)\r"},{"line_number":274,"context_line":"            return\r"},{"line_number":275,"context_line":"\r"},{"line_number":276,"context_line":"        del_lun \u003d self.api_executor.get_lun_info(LUNNAA\u003dlun_naa)\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_be99327b","line":273,"updated":"2016-11-19 17:07:34.000000000","message":"Volume does not exist.","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"12d09210122001546bc9d7b8ca5e0c3576b752f4","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        LOG.debug(\u0027volume: %s\u0027, volume.__dict__)\r"},{"line_number":271,"context_line":"        lun_naa \u003d self._get_lun_naa_from_volume_metadata(volume)\r"},{"line_number":272,"context_line":"        if lun_naa \u003d\u003d \u0027\u0027:\r"},{"line_number":273,"context_line":"            LOG.debug(\u0027Volume is not exist\u0027)\r"},{"line_number":274,"context_line":"            return\r"},{"line_number":275,"context_line":"\r"},{"line_number":276,"context_line":"        del_lun \u003d self.api_executor.get_lun_info(LUNNAA\u003dlun_naa)\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_3cbec7ff","line":273,"in_reply_to":"7a77a97e_be99327b","updated":"2016-11-22 09:38:59.000000000","message":"Done","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d888d2c41a4d11d03215a2a068936fd040e92e9","unresolved":false,"context_lines":[{"line_number":275,"context_line":"\r"},{"line_number":276,"context_line":"        del_lun \u003d self.api_executor.get_lun_info(LUNNAA\u003dlun_naa)\r"},{"line_number":277,"context_line":"        if del_lun is None:\r"},{"line_number":278,"context_line":"            LOG.debug(\u0027Volume is not exist\u0027)\r"},{"line_number":279,"context_line":"            return\r"},{"line_number":280,"context_line":"\r"},{"line_number":281,"context_line":"        lun_index \u003d del_lun.find(\u0027LUNIndex\u0027).text\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_de8a6e1a","line":278,"updated":"2016-11-19 17:07:34.000000000","message":"Same","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"12d09210122001546bc9d7b8ca5e0c3576b752f4","unresolved":false,"context_lines":[{"line_number":275,"context_line":"\r"},{"line_number":276,"context_line":"        del_lun \u003d self.api_executor.get_lun_info(LUNNAA\u003dlun_naa)\r"},{"line_number":277,"context_line":"        if del_lun is None:\r"},{"line_number":278,"context_line":"            LOG.debug(\u0027Volume is not exist\u0027)\r"},{"line_number":279,"context_line":"            return\r"},{"line_number":280,"context_line":"\r"},{"line_number":281,"context_line":"        lun_index \u003d del_lun.find(\u0027LUNIndex\u0027).text\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_5cbb830e","line":278,"in_reply_to":"7a77a97e_de8a6e1a","updated":"2016-11-22 09:38:59.000000000","message":"Done","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d888d2c41a4d11d03215a2a068936fd040e92e9","unresolved":false,"context_lines":[{"line_number":347,"context_line":"        # User could create two snapshot with the same name on horizon.\r"},{"line_number":348,"context_line":"        # Therefore, we should not use displayname to create snapshot on nas.\r"},{"line_number":349,"context_line":"        while True:\r"},{"line_number":350,"context_line":"            # if snapshot exist, need to change another\r"},{"line_number":351,"context_line":"            create_snapshot_name \u003d self._gen_random_name()\r"},{"line_number":352,"context_line":"            snapshot \u003d self.api_executor.get_snapshot_info(\r"},{"line_number":353,"context_line":"                lun_index\u003dlun_index, snapshot_name\u003dcreate_snapshot_name)\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_9e755633","line":350,"updated":"2016-11-19 17:07:34.000000000","message":"If snapshot with the name exists, need to change to a different name","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"12d09210122001546bc9d7b8ca5e0c3576b752f4","unresolved":false,"context_lines":[{"line_number":347,"context_line":"        # User could create two snapshot with the same name on horizon.\r"},{"line_number":348,"context_line":"        # Therefore, we should not use displayname to create snapshot on nas.\r"},{"line_number":349,"context_line":"        while True:\r"},{"line_number":350,"context_line":"            # if snapshot exist, need to change another\r"},{"line_number":351,"context_line":"            create_snapshot_name \u003d self._gen_random_name()\r"},{"line_number":352,"context_line":"            snapshot \u003d self.api_executor.get_snapshot_info(\r"},{"line_number":353,"context_line":"                lun_index\u003dlun_index, snapshot_name\u003dcreate_snapshot_name)\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_bc5737c9","line":350,"in_reply_to":"7a77a97e_9e755633","updated":"2016-11-22 09:38:59.000000000","message":"Done","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d888d2c41a4d11d03215a2a068936fd040e92e9","unresolved":false,"context_lines":[{"line_number":364,"context_line":"        # Therefore, We should not use displayname to create lun on nas.\r"},{"line_number":365,"context_line":"        while True:\r"},{"line_number":366,"context_line":"            cloned_lun_name \u003d self._gen_random_name()\r"},{"line_number":367,"context_line":"            # if lunname exist, need to change another\r"},{"line_number":368,"context_line":"            cloned_lun \u003d self.api_executor.get_lun_info(\r"},{"line_number":369,"context_line":"                LUNName\u003dcloned_lun_name)\r"},{"line_number":370,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_fe948a37","line":367,"updated":"2016-11-19 17:07:34.000000000","message":"same","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"12d09210122001546bc9d7b8ca5e0c3576b752f4","unresolved":false,"context_lines":[{"line_number":364,"context_line":"        # Therefore, We should not use displayname to create lun on nas.\r"},{"line_number":365,"context_line":"        while True:\r"},{"line_number":366,"context_line":"            cloned_lun_name \u003d self._gen_random_name()\r"},{"line_number":367,"context_line":"            # if lunname exist, need to change another\r"},{"line_number":368,"context_line":"            cloned_lun \u003d self.api_executor.get_lun_info(\r"},{"line_number":369,"context_line":"                LUNName\u003dcloned_lun_name)\r"},{"line_number":370,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_5c69c38a","line":367,"in_reply_to":"7a77a97e_fe948a37","updated":"2016-11-22 09:38:59.000000000","message":"Done","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d888d2c41a4d11d03215a2a068936fd040e92e9","unresolved":false,"context_lines":[{"line_number":371,"context_line":"            if cloned_lun is None:\r"},{"line_number":372,"context_line":"                break\r"},{"line_number":373,"context_line":"\r"},{"line_number":374,"context_line":"        self.api_executor.clone_snapshot(snapshot_id, cloned_lun_name)\r"},{"line_number":375,"context_line":"\r"},{"line_number":376,"context_line":"        time_interval \u003d 3\r"},{"line_number":377,"context_line":"        max_wait_sec \u003d 600\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_9ec39637","line":374,"updated":"2016-11-19 17:07:34.000000000","message":"So snapshot is created temporarily so that you can create a volume from the snapshot?  Shouldn\u0027t this temp snapshot be deleted after the volume is created?","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"12d09210122001546bc9d7b8ca5e0c3576b752f4","unresolved":false,"context_lines":[{"line_number":371,"context_line":"            if cloned_lun is None:\r"},{"line_number":372,"context_line":"                break\r"},{"line_number":373,"context_line":"\r"},{"line_number":374,"context_line":"        self.api_executor.clone_snapshot(snapshot_id, cloned_lun_name)\r"},{"line_number":375,"context_line":"\r"},{"line_number":376,"context_line":"        time_interval \u003d 3\r"},{"line_number":377,"context_line":"        max_wait_sec \u003d 600\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_171d640f","line":374,"in_reply_to":"7a77a97e_9ec39637","updated":"2016-11-22 09:38:59.000000000","message":"The cloned lun has dependency on the temp snapshot on our storage array so that the temp snapshot could not be deleted.","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d888d2c41a4d11d03215a2a068936fd040e92e9","unresolved":false,"context_lines":[{"line_number":384,"context_line":"                lun_naa \u003d created_lun.find(\u0027LUNNAA\u0027).text\r"},{"line_number":385,"context_line":"\r"},{"line_number":386,"context_line":"            try_times \u003d try_times + 3\r"},{"line_number":387,"context_line":"            time.sleep(time_interval)\r"},{"line_number":388,"context_line":"            if(try_times \u003e max_wait_sec or lun_naa is not None):\r"},{"line_number":389,"context_line":"                break\r"},{"line_number":390,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_7ea15a93","line":387,"updated":"2016-11-19 17:07:34.000000000","message":"Use eventlet.sleep","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"12d09210122001546bc9d7b8ca5e0c3576b752f4","unresolved":false,"context_lines":[{"line_number":384,"context_line":"                lun_naa \u003d created_lun.find(\u0027LUNNAA\u0027).text\r"},{"line_number":385,"context_line":"\r"},{"line_number":386,"context_line":"            try_times \u003d try_times + 3\r"},{"line_number":387,"context_line":"            time.sleep(time_interval)\r"},{"line_number":388,"context_line":"            if(try_times \u003e max_wait_sec or lun_naa is not None):\r"},{"line_number":389,"context_line":"                break\r"},{"line_number":390,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_5717dcec","line":387,"in_reply_to":"7a77a97e_7ea15a93","updated":"2016-11-22 09:38:59.000000000","message":"Done","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d888d2c41a4d11d03215a2a068936fd040e92e9","unresolved":false,"context_lines":[{"line_number":403,"context_line":"\r"},{"line_number":404,"context_line":"    def ensure_export(self, context, volume):\r"},{"line_number":405,"context_line":"        \"\"\"Driver entry point to get the export info for an existing volume.\"\"\"\r"},{"line_number":406,"context_line":"        pass\r"},{"line_number":407,"context_line":"\r"},{"line_number":408,"context_line":"    def create_snapshot(self, snapshot):\r"},{"line_number":409,"context_line":"        \"\"\"Create a snapshot.\"\"\"\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_5ea65eae","line":406,"updated":"2016-11-19 17:07:34.000000000","message":"create_export and ensure_export can be removed as you are not implementing them.","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"12d09210122001546bc9d7b8ca5e0c3576b752f4","unresolved":false,"context_lines":[{"line_number":403,"context_line":"\r"},{"line_number":404,"context_line":"    def ensure_export(self, context, volume):\r"},{"line_number":405,"context_line":"        \"\"\"Driver entry point to get the export info for an existing volume.\"\"\"\r"},{"line_number":406,"context_line":"        pass\r"},{"line_number":407,"context_line":"\r"},{"line_number":408,"context_line":"    def create_snapshot(self, snapshot):\r"},{"line_number":409,"context_line":"        \"\"\"Create a snapshot.\"\"\"\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_77b938ec","line":406,"in_reply_to":"7a77a97e_5ea65eae","updated":"2016-11-22 09:38:59.000000000","message":"Done","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d888d2c41a4d11d03215a2a068936fd040e92e9","unresolved":false,"context_lines":[{"line_number":422,"context_line":"        # User could create two snapshot with the same name on horizon.\r"},{"line_number":423,"context_line":"        # Therefore, We should not use displayname to create snapshot on nas.\r"},{"line_number":424,"context_line":"        while True:\r"},{"line_number":425,"context_line":"            # if snapshot exist, need to change another\r"},{"line_number":426,"context_line":"            create_snapshot_name \u003d self._gen_random_name()\r"},{"line_number":427,"context_line":"            check_snapshot \u003d self.api_executor.get_snapshot_info(\r"},{"line_number":428,"context_line":"                lun_index\u003dlun_index, snapshot_name\u003dcreate_snapshot_name)\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_9eac768d","line":425,"updated":"2016-11-19 17:07:34.000000000","message":"same as before","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"12d09210122001546bc9d7b8ca5e0c3576b752f4","unresolved":false,"context_lines":[{"line_number":422,"context_line":"        # User could create two snapshot with the same name on horizon.\r"},{"line_number":423,"context_line":"        # Therefore, We should not use displayname to create snapshot on nas.\r"},{"line_number":424,"context_line":"        while True:\r"},{"line_number":425,"context_line":"            # if snapshot exist, need to change another\r"},{"line_number":426,"context_line":"            create_snapshot_name \u003d self._gen_random_name()\r"},{"line_number":427,"context_line":"            check_snapshot \u003d self.api_executor.get_snapshot_info(\r"},{"line_number":428,"context_line":"                lun_index\u003dlun_index, snapshot_name\u003dcreate_snapshot_name)\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_579c3c69","line":425,"in_reply_to":"7a77a97e_9eac768d","updated":"2016-11-22 09:38:59.000000000","message":"Done","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d888d2c41a4d11d03215a2a068936fd040e92e9","unresolved":false,"context_lines":[{"line_number":442,"context_line":"                snapshot_id \u003d created_snapshot.find(\u0027snapshot_id\u0027).text\r"},{"line_number":443,"context_line":"\r"},{"line_number":444,"context_line":"            try_times \u003d try_times + 3\r"},{"line_number":445,"context_line":"            time.sleep(time_interval)\r"},{"line_number":446,"context_line":"            if(try_times \u003e max_wait_sec or created_snapshot is not None):\r"},{"line_number":447,"context_line":"                break\r"},{"line_number":448,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_deb8aeca","line":445,"updated":"2016-11-19 17:07:34.000000000","message":"eventlet.sleep","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"12d09210122001546bc9d7b8ca5e0c3576b752f4","unresolved":false,"context_lines":[{"line_number":442,"context_line":"                snapshot_id \u003d created_snapshot.find(\u0027snapshot_id\u0027).text\r"},{"line_number":443,"context_line":"\r"},{"line_number":444,"context_line":"            try_times \u003d try_times + 3\r"},{"line_number":445,"context_line":"            time.sleep(time_interval)\r"},{"line_number":446,"context_line":"            if(try_times \u003e max_wait_sec or created_snapshot is not None):\r"},{"line_number":447,"context_line":"                break\r"},{"line_number":448,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_77877812","line":445,"in_reply_to":"7a77a97e_deb8aeca","updated":"2016-11-22 09:38:59.000000000","message":"Done","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d888d2c41a4d11d03215a2a068936fd040e92e9","unresolved":false,"context_lines":[{"line_number":505,"context_line":"                lun_naa \u003d created_lun.find(\u0027LUNNAA\u0027).text\r"},{"line_number":506,"context_line":"\r"},{"line_number":507,"context_line":"            try_times \u003d try_times + 3\r"},{"line_number":508,"context_line":"            time.sleep(time_interval)\r"},{"line_number":509,"context_line":"            if(try_times \u003e max_wait_sec or lun_naa is not None):\r"},{"line_number":510,"context_line":"                break\r"},{"line_number":511,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_1eaf867d","line":508,"updated":"2016-11-19 17:07:34.000000000","message":"eventlet.sleep","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"12d09210122001546bc9d7b8ca5e0c3576b752f4","unresolved":false,"context_lines":[{"line_number":505,"context_line":"                lun_naa \u003d created_lun.find(\u0027LUNNAA\u0027).text\r"},{"line_number":506,"context_line":"\r"},{"line_number":507,"context_line":"            try_times \u003d try_times + 3\r"},{"line_number":508,"context_line":"            time.sleep(time_interval)\r"},{"line_number":509,"context_line":"            if(try_times \u003e max_wait_sec or lun_naa is not None):\r"},{"line_number":510,"context_line":"                break\r"},{"line_number":511,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_978c1437","line":508,"in_reply_to":"7a77a97e_1eaf867d","updated":"2016-11-22 09:38:59.000000000","message":"Done","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d888d2c41a4d11d03215a2a068936fd040e92e9","unresolved":false,"context_lines":[{"line_number":549,"context_line":"                provisioned_capacity_gb\u003dprovisioned_bytes / units.Gi,\r"},{"line_number":550,"context_line":"                allocated_capacity_gb\u003dself._get_allocated_capacity_gb(\r"},{"line_number":551,"context_line":"                    backend_name),\r"},{"line_number":552,"context_line":"                reserved_percentage\u003d0,\r"},{"line_number":553,"context_line":"                QoS_support\u003dFalse)\r"},{"line_number":554,"context_line":"            self.group_stats[\u0027pools\u0027] \u003d [single_pool]\r"},{"line_number":555,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_1ee6a6e7","line":552,"updated":"2016-11-19 17:07:34.000000000","message":"Should read this from cinder.conf rather than hard code it to 0:\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/lvm.py#L264","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"12d09210122001546bc9d7b8ca5e0c3576b752f4","unresolved":false,"context_lines":[{"line_number":549,"context_line":"                provisioned_capacity_gb\u003dprovisioned_bytes / units.Gi,\r"},{"line_number":550,"context_line":"                allocated_capacity_gb\u003dself._get_allocated_capacity_gb(\r"},{"line_number":551,"context_line":"                    backend_name),\r"},{"line_number":552,"context_line":"                reserved_percentage\u003d0,\r"},{"line_number":553,"context_line":"                QoS_support\u003dFalse)\r"},{"line_number":554,"context_line":"            self.group_stats[\u0027pools\u0027] \u003d [single_pool]\r"},{"line_number":555,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_0268c0b9","line":552,"in_reply_to":"7a77a97e_1ee6a6e7","updated":"2016-11-22 09:38:59.000000000","message":"Done","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d888d2c41a4d11d03215a2a068936fd040e92e9","unresolved":false,"context_lines":[{"line_number":608,"context_line":"\r"},{"line_number":609,"context_line":"        lun_naa \u003d self._get_lun_naa_from_volume_metadata(volume)\r"},{"line_number":610,"context_line":"        if lun_naa \u003d\u003d \u0027\u0027:\r"},{"line_number":611,"context_line":"            LOG.debug(_LI(\u0027Volume is not exist\u0027))\r"},{"line_number":612,"context_line":"            msg \u003d \u0027Volume is not exist\u0027\r"},{"line_number":613,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)\r"},{"line_number":614,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_de06ee84","line":611,"updated":"2016-11-19 17:07:34.000000000","message":"You are throwing an exception here, so this should be an error message.","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"12d09210122001546bc9d7b8ca5e0c3576b752f4","unresolved":false,"context_lines":[{"line_number":608,"context_line":"\r"},{"line_number":609,"context_line":"        lun_naa \u003d self._get_lun_naa_from_volume_metadata(volume)\r"},{"line_number":610,"context_line":"        if lun_naa \u003d\u003d \u0027\u0027:\r"},{"line_number":611,"context_line":"            LOG.debug(_LI(\u0027Volume is not exist\u0027))\r"},{"line_number":612,"context_line":"            msg \u003d \u0027Volume is not exist\u0027\r"},{"line_number":613,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)\r"},{"line_number":614,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_22da1c79","line":611,"in_reply_to":"7a77a97e_de06ee84","updated":"2016-11-22 09:38:59.000000000","message":"Done","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d888d2c41a4d11d03215a2a068936fd040e92e9","unresolved":false,"context_lines":[{"line_number":609,"context_line":"        lun_naa \u003d self._get_lun_naa_from_volume_metadata(volume)\r"},{"line_number":610,"context_line":"        if lun_naa \u003d\u003d \u0027\u0027:\r"},{"line_number":611,"context_line":"            LOG.debug(_LI(\u0027Volume is not exist\u0027))\r"},{"line_number":612,"context_line":"            msg \u003d \u0027Volume is not exist\u0027\r"},{"line_number":613,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)\r"},{"line_number":614,"context_line":"\r"},{"line_number":615,"context_line":"        LOG.debug(\u0027volume[name]: %s\u0027, volume[\u0027name\u0027])\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_bed5b2e5","line":612,"updated":"2016-11-19 17:07:34.000000000","message":"does not exist","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"12d09210122001546bc9d7b8ca5e0c3576b752f4","unresolved":false,"context_lines":[{"line_number":609,"context_line":"        lun_naa \u003d self._get_lun_naa_from_volume_metadata(volume)\r"},{"line_number":610,"context_line":"        if lun_naa \u003d\u003d \u0027\u0027:\r"},{"line_number":611,"context_line":"            LOG.debug(_LI(\u0027Volume is not exist\u0027))\r"},{"line_number":612,"context_line":"            msg \u003d \u0027Volume is not exist\u0027\r"},{"line_number":613,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)\r"},{"line_number":614,"context_line":"\r"},{"line_number":615,"context_line":"        LOG.debug(\u0027volume[name]: %s\u0027, volume[\u0027name\u0027])\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_82cf70b2","line":612,"in_reply_to":"7a77a97e_bed5b2e5","updated":"2016-11-22 09:38:59.000000000","message":"Done","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d888d2c41a4d11d03215a2a068936fd040e92e9","unresolved":false,"context_lines":[{"line_number":709,"context_line":"        LOG.debug(\u0027target_lun_id: %s\u0027, target_lun_id)\r"},{"line_number":710,"context_line":"        properties[\u0027target_lun\u0027] \u003d target_lun_id\r"},{"line_number":711,"context_line":"        properties[\u0027volume_id\u0027] \u003d volume[\u0027id\u0027]  # used by xen currently\r"},{"line_number":712,"context_line":"        properties[\u0027access_mode\u0027] \u003d \u0027rw\u0027\r"},{"line_number":713,"context_line":"\r"},{"line_number":714,"context_line":"        \"\"\"Below are settings for multipath\"\"\"\r"},{"line_number":715,"context_line":"        target_iqns \u003d []\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_fe09ea95","line":712,"updated":"2016-11-19 17:07:34.000000000","message":"Remove the above line.  \u0027access_mode\u0027 is set in the manager and should not be hard-coded by the driver.","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"12d09210122001546bc9d7b8ca5e0c3576b752f4","unresolved":false,"context_lines":[{"line_number":709,"context_line":"        LOG.debug(\u0027target_lun_id: %s\u0027, target_lun_id)\r"},{"line_number":710,"context_line":"        properties[\u0027target_lun\u0027] \u003d target_lun_id\r"},{"line_number":711,"context_line":"        properties[\u0027volume_id\u0027] \u003d volume[\u0027id\u0027]  # used by xen currently\r"},{"line_number":712,"context_line":"        properties[\u0027access_mode\u0027] \u003d \u0027rw\u0027\r"},{"line_number":713,"context_line":"\r"},{"line_number":714,"context_line":"        \"\"\"Below are settings for multipath\"\"\"\r"},{"line_number":715,"context_line":"        target_iqns \u003d []\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_a23b8c9b","line":712,"in_reply_to":"7a77a97e_fe09ea95","updated":"2016-11-22 09:38:59.000000000","message":"Done","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d888d2c41a4d11d03215a2a068936fd040e92e9","unresolved":false,"context_lines":[{"line_number":730,"context_line":"\r"},{"line_number":731,"context_line":"        elapsed_time \u003d time.time() - start_time\r"},{"line_number":732,"context_line":"        LOG.debug(\u0027initialize_connection elapsed_time: %s\u0027, elapsed_time)\r"},{"line_number":733,"context_line":"        \"\"\"\"\"\"\r"},{"line_number":734,"context_line":"        return {\r"},{"line_number":735,"context_line":"            \u0027driver_volume_type\u0027: \u0027iscsi\u0027,\r"},{"line_number":736,"context_line":"            \u0027data\u0027: properties,\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_5efbbe78","line":733,"updated":"2016-11-19 17:07:34.000000000","message":"Remove above","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"12d09210122001546bc9d7b8ca5e0c3576b752f4","unresolved":false,"context_lines":[{"line_number":730,"context_line":"\r"},{"line_number":731,"context_line":"        elapsed_time \u003d time.time() - start_time\r"},{"line_number":732,"context_line":"        LOG.debug(\u0027initialize_connection elapsed_time: %s\u0027, elapsed_time)\r"},{"line_number":733,"context_line":"        \"\"\"\"\"\"\r"},{"line_number":734,"context_line":"        return {\r"},{"line_number":735,"context_line":"            \u0027driver_volume_type\u0027: \u0027iscsi\u0027,\r"},{"line_number":736,"context_line":"            \u0027data\u0027: properties,\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_e2458417","line":733,"in_reply_to":"7a77a97e_5efbbe78","updated":"2016-11-22 09:38:59.000000000","message":"Done","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d888d2c41a4d11d03215a2a068936fd040e92e9","unresolved":false,"context_lines":[{"line_number":780,"context_line":"        LOG.debug(\u0027volume: %s\u0027, volume.__dict__)\r"},{"line_number":781,"context_line":"        LOG.debug(\u0027host: %s\u0027, host.__dict__)\r"},{"line_number":782,"context_line":"\r"},{"line_number":783,"context_line":"        return True, {}\r"},{"line_number":784,"context_line":"\r"},{"line_number":785,"context_line":"    def update_migrated_volume(\r"},{"line_number":786,"context_line":"            self, context, volume, new_volume, original_volume_status):\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_5e42deae","line":783,"updated":"2016-11-19 17:07:34.000000000","message":"Does migrate_volume work just by returning True, {}?  This is storage assisted migration.  I just wonder how it works without any storage specific calls.","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"12d09210122001546bc9d7b8ca5e0c3576b752f4","unresolved":false,"context_lines":[{"line_number":780,"context_line":"        LOG.debug(\u0027volume: %s\u0027, volume.__dict__)\r"},{"line_number":781,"context_line":"        LOG.debug(\u0027host: %s\u0027, host.__dict__)\r"},{"line_number":782,"context_line":"\r"},{"line_number":783,"context_line":"        return True, {}\r"},{"line_number":784,"context_line":"\r"},{"line_number":785,"context_line":"    def update_migrated_volume(\r"},{"line_number":786,"context_line":"            self, context, volume, new_volume, original_volume_status):\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_281afa17","line":783,"in_reply_to":"7a77a97e_5e42deae","updated":"2016-11-22 09:38:59.000000000","message":"We do not implement the function. I will remove it.","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d888d2c41a4d11d03215a2a068936fd040e92e9","unresolved":false,"context_lines":[{"line_number":791,"context_line":"\r"},{"line_number":792,"context_line":"        _metadata \u003d self._get_volume_metadata(new_volume)\r"},{"line_number":793,"context_line":"\r"},{"line_number":794,"context_line":"        # metadata will not be swap after migration wiht liberty version\r"},{"line_number":795,"context_line":"        # , and the metadata of new volume is diifferent with the metadata\r"},{"line_number":796,"context_line":"        #  of original volume. Therefore, we need to update the migrated volume\r"},{"line_number":797,"context_line":"        if not hasattr(new_volume, \u0027_orig_metadata\u0027):\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_fe300a58","line":794,"updated":"2016-11-19 17:07:34.000000000","message":"liberty?","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"12d09210122001546bc9d7b8ca5e0c3576b752f4","unresolved":false,"context_lines":[{"line_number":791,"context_line":"\r"},{"line_number":792,"context_line":"        _metadata \u003d self._get_volume_metadata(new_volume)\r"},{"line_number":793,"context_line":"\r"},{"line_number":794,"context_line":"        # metadata will not be swap after migration wiht liberty version\r"},{"line_number":795,"context_line":"        # , and the metadata of new volume is diifferent with the metadata\r"},{"line_number":796,"context_line":"        #  of original volume. Therefore, we need to update the migrated volume\r"},{"line_number":797,"context_line":"        if not hasattr(new_volume, \u0027_orig_metadata\u0027):\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_8f2a387d","line":794,"in_reply_to":"7a77a97e_fe300a58","updated":"2016-11-22 09:38:59.000000000","message":"We found that the metadata will not be swapped after migrating volume on devstack with liberty version(cinder version is 1.5.0)","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d888d2c41a4d11d03215a2a068936fd040e92e9","unresolved":false,"context_lines":[{"line_number":973,"context_line":"            raise exception.VolumeBackendAPIException(\u0027Session id expired\u0027)\r"},{"line_number":974,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":975,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":976,"context_line":"                message\u003d(\u0027Create volume %s failed\u0027) % volume[\u0027display_name\u0027])\r"},{"line_number":977,"context_line":"\r"},{"line_number":978,"context_line":"        return root.find(\u0027result\u0027).text\r"},{"line_number":979,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_9e48f6cd","line":976,"updated":"2016-11-19 17:07:34.000000000","message":"VolumeBackendAPIException(data\u003dxxxx)","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"12d09210122001546bc9d7b8ca5e0c3576b752f4","unresolved":false,"context_lines":[{"line_number":973,"context_line":"            raise exception.VolumeBackendAPIException(\u0027Session id expired\u0027)\r"},{"line_number":974,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":975,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":976,"context_line":"                message\u003d(\u0027Create volume %s failed\u0027) % volume[\u0027display_name\u0027])\r"},{"line_number":977,"context_line":"\r"},{"line_number":978,"context_line":"        return root.find(\u0027result\u0027).text\r"},{"line_number":979,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_12100f4e","line":976,"in_reply_to":"7a77a97e_9e48f6cd","updated":"2016-11-22 09:38:59.000000000","message":"Done","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d888d2c41a4d11d03215a2a068936fd040e92e9","unresolved":false,"context_lines":[{"line_number":1000,"context_line":"        res_details \u003d self._execute_and_get_response_details(self.ip, url)\r"},{"line_number":1001,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1002,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":1003,"context_line":"            raise exception.VolumeBackendAPIException(\u0027Session id expired\u0027)\r"},{"line_number":1004,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1005,"context_line":"            msg \u003d \u0027Volume delete failed\u0027\r"},{"line_number":1006,"context_line":"            raise exception.VolumeBackendAPIException(message\u003dmsg)\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_be43f2ad","line":1003,"updated":"2016-11-19 17:07:34.000000000","message":"data\u003dxxxx","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"12d09210122001546bc9d7b8ca5e0c3576b752f4","unresolved":false,"context_lines":[{"line_number":1000,"context_line":"        res_details \u003d self._execute_and_get_response_details(self.ip, url)\r"},{"line_number":1001,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1002,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":1003,"context_line":"            raise exception.VolumeBackendAPIException(\u0027Session id expired\u0027)\r"},{"line_number":1004,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1005,"context_line":"            msg \u003d \u0027Volume delete failed\u0027\r"},{"line_number":1006,"context_line":"            raise exception.VolumeBackendAPIException(message\u003dmsg)\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_52bb670e","line":1003,"in_reply_to":"7a77a97e_be43f2ad","updated":"2016-11-22 09:38:59.000000000","message":"Done","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d888d2c41a4d11d03215a2a068936fd040e92e9","unresolved":false,"context_lines":[{"line_number":1003,"context_line":"            raise exception.VolumeBackendAPIException(\u0027Session id expired\u0027)\r"},{"line_number":1004,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1005,"context_line":"            msg \u003d \u0027Volume delete failed\u0027\r"},{"line_number":1006,"context_line":"            raise exception.VolumeBackendAPIException(message\u003dmsg)\r"},{"line_number":1007,"context_line":"\r"},{"line_number":1008,"context_line":"    @_connection_checker\r"},{"line_number":1009,"context_line":"    def get_specific_poolinfo(self, pool_id):\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_de142ea1","line":1006,"updated":"2016-11-19 17:07:34.000000000","message":"data\u003dmsg","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"12d09210122001546bc9d7b8ca5e0c3576b752f4","unresolved":false,"context_lines":[{"line_number":1003,"context_line":"            raise exception.VolumeBackendAPIException(\u0027Session id expired\u0027)\r"},{"line_number":1004,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1005,"context_line":"            msg \u003d \u0027Volume delete failed\u0027\r"},{"line_number":1006,"context_line":"            raise exception.VolumeBackendAPIException(message\u003dmsg)\r"},{"line_number":1007,"context_line":"\r"},{"line_number":1008,"context_line":"    @_connection_checker\r"},{"line_number":1009,"context_line":"    def get_specific_poolinfo(self, pool_id):\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_b2fd9b70","line":1006,"in_reply_to":"7a77a97e_de142ea1","updated":"2016-11-22 09:38:59.000000000","message":"Done","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d888d2c41a4d11d03215a2a068936fd040e92e9","unresolved":false,"context_lines":[{"line_number":1032,"context_line":"            raise exception.VolumeBackendAPIException(\u0027Session id expired\u0027)\r"},{"line_number":1033,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1034,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1035,"context_line":"                message\u003d(\u0027get_specific_poolinfo failed\u0027))\r"},{"line_number":1036,"context_line":"\r"},{"line_number":1037,"context_line":"        pool_list \u003d root.find(\u0027Pool_Index\u0027)\r"},{"line_number":1038,"context_line":"        pool_info_tree \u003d pool_list.findall(\u0027row\u0027)\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_fe172aa0","line":1035,"updated":"2016-11-19 17:07:34.000000000","message":"data","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"12d09210122001546bc9d7b8ca5e0c3576b752f4","unresolved":false,"context_lines":[{"line_number":1032,"context_line":"            raise exception.VolumeBackendAPIException(\u0027Session id expired\u0027)\r"},{"line_number":1033,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1034,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1035,"context_line":"                message\u003d(\u0027get_specific_poolinfo failed\u0027))\r"},{"line_number":1036,"context_line":"\r"},{"line_number":1037,"context_line":"        pool_list \u003d root.find(\u0027Pool_Index\u0027)\r"},{"line_number":1038,"context_line":"        pool_info_tree \u003d pool_list.findall(\u0027row\u0027)\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_52efe7af","line":1035,"in_reply_to":"7a77a97e_fe172aa0","updated":"2016-11-22 09:38:59.000000000","message":"Done","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d888d2c41a4d11d03215a2a068936fd040e92e9","unresolved":false,"context_lines":[{"line_number":1067,"context_line":"        res_details \u003d self._execute_and_get_response_details(self.ip, url)\r"},{"line_number":1068,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1069,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":1070,"context_line":"            raise exception.VolumeBackendAPIException(\u0027Session id expired\u0027)\r"},{"line_number":1071,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1072,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1073,"context_line":"                message\u003d(\u0027Create target failed\u0027))\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_3e0e028c","line":1070,"updated":"2016-11-19 17:07:34.000000000","message":"same","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"12d09210122001546bc9d7b8ca5e0c3576b752f4","unresolved":false,"context_lines":[{"line_number":1067,"context_line":"        res_details \u003d self._execute_and_get_response_details(self.ip, url)\r"},{"line_number":1068,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1069,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":1070,"context_line":"            raise exception.VolumeBackendAPIException(\u0027Session id expired\u0027)\r"},{"line_number":1071,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1072,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1073,"context_line":"                message\u003d(\u0027Create target failed\u0027))\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_b234bb4a","line":1070,"in_reply_to":"7a77a97e_3e0e028c","updated":"2016-11-22 09:38:59.000000000","message":"Done","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d888d2c41a4d11d03215a2a068936fd040e92e9","unresolved":false,"context_lines":[{"line_number":1070,"context_line":"            raise exception.VolumeBackendAPIException(\u0027Session id expired\u0027)\r"},{"line_number":1071,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1072,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1073,"context_line":"                message\u003d(\u0027Create target failed\u0027))\r"},{"line_number":1074,"context_line":"\r"},{"line_number":1075,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1076,"context_line":"        target_index \u003d root.find(\u0027result\u0027).text\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_5e29fee4","line":1073,"updated":"2016-11-19 17:07:34.000000000","message":"same","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"12d09210122001546bc9d7b8ca5e0c3576b752f4","unresolved":false,"context_lines":[{"line_number":1070,"context_line":"            raise exception.VolumeBackendAPIException(\u0027Session id expired\u0027)\r"},{"line_number":1071,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1072,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1073,"context_line":"                message\u003d(\u0027Create target failed\u0027))\r"},{"line_number":1074,"context_line":"\r"},{"line_number":1075,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1076,"context_line":"        target_index \u003d root.find(\u0027result\u0027).text\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_f23e3328","line":1073,"in_reply_to":"7a77a97e_5e29fee4","updated":"2016-11-22 09:38:59.000000000","message":"Done","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d888d2c41a4d11d03215a2a068936fd040e92e9","unresolved":false,"context_lines":[{"line_number":1109,"context_line":"        res_details \u003d self._execute_and_get_response_details(self.ip, url)\r"},{"line_number":1110,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1111,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":1112,"context_line":"            raise exception.VolumeBackendAPIException(\u0027Session id expired\u0027)\r"},{"line_number":1113,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1114,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1115,"context_line":"                message\u003d(\u0027Add target acl failed\u0027))\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_7e24fa0b","line":1112,"updated":"2016-11-19 17:07:34.000000000","message":"same","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"12d09210122001546bc9d7b8ca5e0c3576b752f4","unresolved":false,"context_lines":[{"line_number":1109,"context_line":"        res_details \u003d self._execute_and_get_response_details(self.ip, url)\r"},{"line_number":1110,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1111,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":1112,"context_line":"            raise exception.VolumeBackendAPIException(\u0027Session id expired\u0027)\r"},{"line_number":1113,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1114,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1115,"context_line":"                message\u003d(\u0027Add target acl failed\u0027))\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_32498bd1","line":1112,"in_reply_to":"7a77a97e_7e24fa0b","updated":"2016-11-22 09:38:59.000000000","message":"Done","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d888d2c41a4d11d03215a2a068936fd040e92e9","unresolved":false,"context_lines":[{"line_number":1112,"context_line":"            raise exception.VolumeBackendAPIException(\u0027Session id expired\u0027)\r"},{"line_number":1113,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1114,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1115,"context_line":"                message\u003d(\u0027Add target acl failed\u0027))\r"},{"line_number":1116,"context_line":"\r"},{"line_number":1117,"context_line":"    def remove_target_init(self, target_iqn, init_iqn):\r"},{"line_number":1118,"context_line":"        \"\"\"Remote target acl.\"\"\"\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_de7b4ef3","line":1115,"updated":"2016-11-19 17:07:34.000000000","message":"same","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"12d09210122001546bc9d7b8ca5e0c3576b752f4","unresolved":false,"context_lines":[{"line_number":1112,"context_line":"            raise exception.VolumeBackendAPIException(\u0027Session id expired\u0027)\r"},{"line_number":1113,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1114,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1115,"context_line":"                message\u003d(\u0027Add target acl failed\u0027))\r"},{"line_number":1116,"context_line":"\r"},{"line_number":1117,"context_line":"    def remove_target_init(self, target_iqn, init_iqn):\r"},{"line_number":1118,"context_line":"        \"\"\"Remote target acl.\"\"\"\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_524607c0","line":1115,"in_reply_to":"7a77a97e_de7b4ef3","updated":"2016-11-22 09:38:59.000000000","message":"Done","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d888d2c41a4d11d03215a2a068936fd040e92e9","unresolved":false,"context_lines":[{"line_number":1141,"context_line":"        res_details \u003d self._execute_and_get_response_details(self.ip, url)\r"},{"line_number":1142,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1143,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":1144,"context_line":"            raise exception.VolumeBackendAPIException(\u0027Session id expired\u0027)\r"},{"line_number":1145,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1146,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1147,"context_line":"                message\u003d(\u0027Map lun to target failed\u0027))\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_be1a12c4","line":1144,"updated":"2016-11-19 17:07:34.000000000","message":"same","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"12d09210122001546bc9d7b8ca5e0c3576b752f4","unresolved":false,"context_lines":[{"line_number":1141,"context_line":"        res_details \u003d self._execute_and_get_response_details(self.ip, url)\r"},{"line_number":1142,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1143,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":1144,"context_line":"            raise exception.VolumeBackendAPIException(\u0027Session id expired\u0027)\r"},{"line_number":1145,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1146,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1147,"context_line":"                message\u003d(\u0027Map lun to target failed\u0027))\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_721143af","line":1144,"in_reply_to":"7a77a97e_be1a12c4","updated":"2016-11-22 09:38:59.000000000","message":"Done","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d888d2c41a4d11d03215a2a068936fd040e92e9","unresolved":false,"context_lines":[{"line_number":1144,"context_line":"            raise exception.VolumeBackendAPIException(\u0027Session id expired\u0027)\r"},{"line_number":1145,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1146,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1147,"context_line":"                message\u003d(\u0027Map lun to target failed\u0027))\r"},{"line_number":1148,"context_line":"\r"},{"line_number":1149,"context_line":"    @_connection_checker\r"},{"line_number":1150,"context_line":"    def disable_lun(self, lun_index, target_index):\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_9e1f16b6","line":1147,"updated":"2016-11-19 17:07:34.000000000","message":"same","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"12d09210122001546bc9d7b8ca5e0c3576b752f4","unresolved":false,"context_lines":[{"line_number":1144,"context_line":"            raise exception.VolumeBackendAPIException(\u0027Session id expired\u0027)\r"},{"line_number":1145,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1146,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1147,"context_line":"                message\u003d(\u0027Map lun to target failed\u0027))\r"},{"line_number":1148,"context_line":"\r"},{"line_number":1149,"context_line":"    @_connection_checker\r"},{"line_number":1150,"context_line":"    def disable_lun(self, lun_index, target_index):\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_f225530a","line":1147,"in_reply_to":"7a77a97e_9e1f16b6","updated":"2016-11-22 09:38:59.000000000","message":"Done","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d888d2c41a4d11d03215a2a068936fd040e92e9","unresolved":false,"context_lines":[{"line_number":1169,"context_line":"        res_details \u003d self._execute_and_get_response_details(self.ip, url)\r"},{"line_number":1170,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1171,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":1172,"context_line":"            raise exception.VolumeBackendAPIException(\u0027Session id expired\u0027)\r"},{"line_number":1173,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1174,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1175,"context_line":"                message\u003d(\u0027Disable lun from target failed\u0027))\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_fe7e4ae2","line":1172,"updated":"2016-11-19 17:07:34.000000000","message":"same","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"12d09210122001546bc9d7b8ca5e0c3576b752f4","unresolved":false,"context_lines":[{"line_number":1169,"context_line":"        res_details \u003d self._execute_and_get_response_details(self.ip, url)\r"},{"line_number":1170,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1171,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":1172,"context_line":"            raise exception.VolumeBackendAPIException(\u0027Session id expired\u0027)\r"},{"line_number":1173,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1174,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1175,"context_line":"                message\u003d(\u0027Disable lun from target failed\u0027))\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_521d27bc","line":1172,"in_reply_to":"7a77a97e_fe7e4ae2","updated":"2016-11-22 09:38:59.000000000","message":"Done","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d888d2c41a4d11d03215a2a068936fd040e92e9","unresolved":false,"context_lines":[{"line_number":1172,"context_line":"            raise exception.VolumeBackendAPIException(\u0027Session id expired\u0027)\r"},{"line_number":1173,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1174,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1175,"context_line":"                message\u003d(\u0027Disable lun from target failed\u0027))\r"},{"line_number":1176,"context_line":"\r"},{"line_number":1177,"context_line":"    @_connection_checker\r"},{"line_number":1178,"context_line":"    def unmap_lun(self, lun_index, target_index):\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_5e701e0b","line":1175,"updated":"2016-11-19 17:07:34.000000000","message":"same","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"12d09210122001546bc9d7b8ca5e0c3576b752f4","unresolved":false,"context_lines":[{"line_number":1172,"context_line":"            raise exception.VolumeBackendAPIException(\u0027Session id expired\u0027)\r"},{"line_number":1173,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1174,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1175,"context_line":"                message\u003d(\u0027Disable lun from target failed\u0027))\r"},{"line_number":1176,"context_line":"\r"},{"line_number":1177,"context_line":"    @_connection_checker\r"},{"line_number":1178,"context_line":"    def unmap_lun(self, lun_index, target_index):\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_f26c7338","line":1175,"in_reply_to":"7a77a97e_5e701e0b","updated":"2016-11-22 09:38:59.000000000","message":"Done","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d888d2c41a4d11d03215a2a068936fd040e92e9","unresolved":false,"context_lines":[{"line_number":1196,"context_line":"        res_details \u003d self._execute_and_get_response_details(self.ip, url)\r"},{"line_number":1197,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1198,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":1199,"context_line":"            raise exception.VolumeBackendAPIException(\u0027Session id expired\u0027)\r"},{"line_number":1200,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1201,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1202,"context_line":"                message\u003d(\u0027Unmap lun from target failed\u0027))\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_3e8522ce","line":1199,"updated":"2016-11-19 17:07:34.000000000","message":"same","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"12d09210122001546bc9d7b8ca5e0c3576b752f4","unresolved":false,"context_lines":[{"line_number":1196,"context_line":"        res_details \u003d self._execute_and_get_response_details(self.ip, url)\r"},{"line_number":1197,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1198,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":1199,"context_line":"            raise exception.VolumeBackendAPIException(\u0027Session id expired\u0027)\r"},{"line_number":1200,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1201,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1202,"context_line":"                message\u003d(\u0027Unmap lun from target failed\u0027))\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_3277cb03","line":1199,"in_reply_to":"7a77a97e_3e8522ce","updated":"2016-11-22 09:38:59.000000000","message":"Done","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d888d2c41a4d11d03215a2a068936fd040e92e9","unresolved":false,"context_lines":[{"line_number":1199,"context_line":"            raise exception.VolumeBackendAPIException(\u0027Session id expired\u0027)\r"},{"line_number":1200,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1201,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1202,"context_line":"                message\u003d(\u0027Unmap lun from target failed\u0027))\r"},{"line_number":1203,"context_line":"\r"},{"line_number":1204,"context_line":"    @_connection_checker\r"},{"line_number":1205,"context_line":"    def get_iscsi_portal_info(self):\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_1e8226c8","line":1202,"updated":"2016-11-19 17:07:34.000000000","message":"same","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"12d09210122001546bc9d7b8ca5e0c3576b752f4","unresolved":false,"context_lines":[{"line_number":1199,"context_line":"            raise exception.VolumeBackendAPIException(\u0027Session id expired\u0027)\r"},{"line_number":1200,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1201,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1202,"context_line":"                message\u003d(\u0027Unmap lun from target failed\u0027))\r"},{"line_number":1203,"context_line":"\r"},{"line_number":1204,"context_line":"    @_connection_checker\r"},{"line_number":1205,"context_line":"    def get_iscsi_portal_info(self):\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_92641f4a","line":1202,"in_reply_to":"7a77a97e_1e8226c8","updated":"2016-11-22 09:38:59.000000000","message":"Done","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9d888d2c41a4d11d03215a2a068936fd040e92e9","unresolved":false,"context_lines":[{"line_number":1222,"context_line":"        res_details \u003d self._execute_and_get_response_details(self.ip, url)\r"},{"line_number":1223,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1224,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":1225,"context_line":"            raise exception.VolumeBackendAPIException(\u0027Session id expired\u0027)\r"},{"line_number":1226,"context_line":"        else:\r"},{"line_number":1227,"context_line":"            return res_details\r"},{"line_number":1228,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_7e6b1a1e","line":1225,"updated":"2016-11-19 17:07:34.000000000","message":"data\u003d\n\nPlease fix all places.","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"12d09210122001546bc9d7b8ca5e0c3576b752f4","unresolved":false,"context_lines":[{"line_number":1222,"context_line":"        res_details \u003d self._execute_and_get_response_details(self.ip, url)\r"},{"line_number":1223,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1224,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":1225,"context_line":"            raise exception.VolumeBackendAPIException(\u0027Session id expired\u0027)\r"},{"line_number":1226,"context_line":"        else:\r"},{"line_number":1227,"context_line":"            return res_details\r"},{"line_number":1228,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a77a97e_324eebc1","line":1225,"in_reply_to":"7a77a97e_7e6b1a1e","updated":"2016-11-22 09:38:59.000000000","message":"Done","commit_id":"0c8e3ad54f4ab292da3ded0cafefda7720cc5d77"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4bcd4ff4ed942500b8cf9863665f8bd1b6acf3fe","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    cfg.StrOpt(\u0027qnap_management_url\u0027,\r"},{"line_number":50,"context_line":"               help\u003d\u0027The URL to management QNAP Storage\u0027),\r"},{"line_number":51,"context_line":"    cfg.StrOpt(\u0027iscsi_ip\u0027,\r"},{"line_number":52,"context_line":"               help\u003d\u0027San iSCSI IP for QNAP storage\u0027),\r"},{"line_number":53,"context_line":"    cfg.StrOpt(\u0027qnap_server_port\u0027,\r"},{"line_number":54,"context_line":"               help\u003d\u0027Management Port for QNAP storage\u0027),\r"},{"line_number":55,"context_line":"    cfg.StrOpt(\u0027qnap_poolname\u0027,\r"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a74a57a_6c601fd0","line":52,"updated":"2016-11-27 18:11:30.000000000","message":"Why do you have to add a iscsi_ip option here in the driver?  Can you use the existing iscsi_ip_address?","commit_id":"095f3536c909a192ca187013da37a867232b686d"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"4e531d1fe4656acd4013c872a80592e6b3860ebd","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    cfg.StrOpt(\u0027qnap_management_url\u0027,\r"},{"line_number":50,"context_line":"               help\u003d\u0027The URL to management QNAP Storage\u0027),\r"},{"line_number":51,"context_line":"    cfg.StrOpt(\u0027iscsi_ip\u0027,\r"},{"line_number":52,"context_line":"               help\u003d\u0027San iSCSI IP for QNAP storage\u0027),\r"},{"line_number":53,"context_line":"    cfg.StrOpt(\u0027qnap_server_port\u0027,\r"},{"line_number":54,"context_line":"               help\u003d\u0027Management Port for QNAP storage\u0027),\r"},{"line_number":55,"context_line":"    cfg.StrOpt(\u0027qnap_poolname\u0027,\r"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a74a57a_7501bf05","line":52,"in_reply_to":"5a74a57a_6c601fd0","updated":"2016-11-28 07:42:34.000000000","message":"We use \"iscsi_ip\" as data port on our NAS which is different with \"iscsi_ip_address\"","commit_id":"095f3536c909a192ca187013da37a867232b686d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4bcd4ff4ed942500b8cf9863665f8bd1b6acf3fe","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    cfg.StrOpt(\u0027qnap_poolname\u0027,\r"},{"line_number":56,"context_line":"               help\u003d\u0027The pool name in the QNAP Storage\u0027),\r"},{"line_number":57,"context_line":"    cfg.StrOpt(\u0027qnap_storage_protocol\u0027,\r"},{"line_number":58,"context_line":"               choices\u003d[\u0027iscsi\u0027, \u0027nfs\u0027],\r"},{"line_number":59,"context_line":"               default\u003d\u0027iscsi\u0027,\r"},{"line_number":60,"context_line":"               help\u003d\u0027Communication protocol to access QNAP storage\u0027),\r"},{"line_number":61,"context_line":"]\r"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a74a57a_2c3c67c7","line":58,"updated":"2016-11-27 18:11:30.000000000","message":"I only see an iSCSI driver.  \u0027nfs\u0027 should not be a supported protocol here.","commit_id":"095f3536c909a192ca187013da37a867232b686d"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"4e531d1fe4656acd4013c872a80592e6b3860ebd","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    cfg.StrOpt(\u0027qnap_poolname\u0027,\r"},{"line_number":56,"context_line":"               help\u003d\u0027The pool name in the QNAP Storage\u0027),\r"},{"line_number":57,"context_line":"    cfg.StrOpt(\u0027qnap_storage_protocol\u0027,\r"},{"line_number":58,"context_line":"               choices\u003d[\u0027iscsi\u0027, \u0027nfs\u0027],\r"},{"line_number":59,"context_line":"               default\u003d\u0027iscsi\u0027,\r"},{"line_number":60,"context_line":"               help\u003d\u0027Communication protocol to access QNAP storage\u0027),\r"},{"line_number":61,"context_line":"]\r"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a74a57a_0815ce3e","line":58,"in_reply_to":"5a74a57a_2c3c67c7","updated":"2016-11-28 07:42:34.000000000","message":"Done","commit_id":"095f3536c909a192ca187013da37a867232b686d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4bcd4ff4ed942500b8cf9863665f8bd1b6acf3fe","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        LOG.debug(\u0027iscsi_ip: %s\u0027,\r"},{"line_number":95,"context_line":"                  getattr(self.configuration, \u0027iscsi_ip\u0027, None))\r"},{"line_number":96,"context_line":"        # User would set iscsi_ip_address with older verion of QNAP cinder\r"},{"line_number":97,"context_line":"        # driver. Therefore, set the value of iscsi_ip_address to iscsi_ip\r"},{"line_number":98,"context_line":"        if not getattr(self.configuration, \u0027iscsi_ip\u0027, None):\r"},{"line_number":99,"context_line":"            if getattr(self.configuration, \u0027iscsi_ip_address\u0027, None):\r"},{"line_number":100,"context_line":"                self.configuration.iscsi_ip \u003d (\r"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a74a57a_ac9cf7c0","line":97,"updated":"2016-11-27 18:11:30.000000000","message":"Why do you need to add a new option iscsi_ip instead of using the existing iscsi_ip_address?","commit_id":"095f3536c909a192ca187013da37a867232b686d"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"4e531d1fe4656acd4013c872a80592e6b3860ebd","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        LOG.debug(\u0027iscsi_ip: %s\u0027,\r"},{"line_number":95,"context_line":"                  getattr(self.configuration, \u0027iscsi_ip\u0027, None))\r"},{"line_number":96,"context_line":"        # User would set iscsi_ip_address with older verion of QNAP cinder\r"},{"line_number":97,"context_line":"        # driver. Therefore, set the value of iscsi_ip_address to iscsi_ip\r"},{"line_number":98,"context_line":"        if not getattr(self.configuration, \u0027iscsi_ip\u0027, None):\r"},{"line_number":99,"context_line":"            if getattr(self.configuration, \u0027iscsi_ip_address\u0027, None):\r"},{"line_number":100,"context_line":"                self.configuration.iscsi_ip \u003d (\r"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a74a57a_488ee679","line":97,"in_reply_to":"5a74a57a_ac9cf7c0","updated":"2016-11-28 07:42:34.000000000","message":"Originally, we do use iscsi_ip_address. The iscsi_ip_address do not the same as our data port on our nas. And it will cause some issue.","commit_id":"095f3536c909a192ca187013da37a867232b686d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4bcd4ff4ed942500b8cf9863665f8bd1b6acf3fe","unresolved":false,"context_lines":[{"line_number":552,"context_line":"                free_capacity_gb\u003dfreesize_bytes / units.Gi,\r"},{"line_number":553,"context_line":"                provisioned_capacity_gb\u003dprovisioned_bytes / units.Gi,\r"},{"line_number":554,"context_line":"                allocated_capacity_gb\u003dself._get_allocated_capacity_gb(\r"},{"line_number":555,"context_line":"                    backend_name),\r"},{"line_number":556,"context_line":"                reserved_percentage\u003dself.configuration.reserved_percentage,\r"},{"line_number":557,"context_line":"                QoS_support\u003dFalse)\r"},{"line_number":558,"context_line":"            self.group_stats[\u0027pools\u0027] \u003d [single_pool]\r"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a74a57a_8c8bbb67","line":555,"updated":"2016-11-27 18:11:30.000000000","message":"allocated_capacity_gb should not be reported by the driver.  Scheduler is updating this field.","commit_id":"095f3536c909a192ca187013da37a867232b686d"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"4e531d1fe4656acd4013c872a80592e6b3860ebd","unresolved":false,"context_lines":[{"line_number":552,"context_line":"                free_capacity_gb\u003dfreesize_bytes / units.Gi,\r"},{"line_number":553,"context_line":"                provisioned_capacity_gb\u003dprovisioned_bytes / units.Gi,\r"},{"line_number":554,"context_line":"                allocated_capacity_gb\u003dself._get_allocated_capacity_gb(\r"},{"line_number":555,"context_line":"                    backend_name),\r"},{"line_number":556,"context_line":"                reserved_percentage\u003dself.configuration.reserved_percentage,\r"},{"line_number":557,"context_line":"                QoS_support\u003dFalse)\r"},{"line_number":558,"context_line":"            self.group_stats[\u0027pools\u0027] \u003d [single_pool]\r"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a74a57a_2871aa76","line":555,"in_reply_to":"5a74a57a_8c8bbb67","updated":"2016-11-28 07:42:34.000000000","message":"Done","commit_id":"095f3536c909a192ca187013da37a867232b686d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4bcd4ff4ed942500b8cf9863665f8bd1b6acf3fe","unresolved":false,"context_lines":[{"line_number":612,"context_line":"\r"},{"line_number":613,"context_line":"        lun_naa \u003d self._get_lun_naa_from_volume_metadata(volume)\r"},{"line_number":614,"context_line":"        if lun_naa \u003d\u003d \u0027\u0027:\r"},{"line_number":615,"context_line":"            msg \u003d \u0027Volume does not exist\u0027\r"},{"line_number":616,"context_line":"            LOG.error(msg)\r"},{"line_number":617,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)\r"},{"line_number":618,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a74a57a_0cf6cbf8","line":615,"updated":"2016-11-27 18:11:30.000000000","message":"Please add volume uuid in the message.","commit_id":"095f3536c909a192ca187013da37a867232b686d"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"4e531d1fe4656acd4013c872a80592e6b3860ebd","unresolved":false,"context_lines":[{"line_number":612,"context_line":"\r"},{"line_number":613,"context_line":"        lun_naa \u003d self._get_lun_naa_from_volume_metadata(volume)\r"},{"line_number":614,"context_line":"        if lun_naa \u003d\u003d \u0027\u0027:\r"},{"line_number":615,"context_line":"            msg \u003d \u0027Volume does not exist\u0027\r"},{"line_number":616,"context_line":"            LOG.error(msg)\r"},{"line_number":617,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)\r"},{"line_number":618,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a74a57a_a8bcdabb","line":615,"in_reply_to":"5a74a57a_0cf6cbf8","updated":"2016-11-28 07:42:34.000000000","message":"Done","commit_id":"095f3536c909a192ca187013da37a867232b686d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4bcd4ff4ed942500b8cf9863665f8bd1b6acf3fe","unresolved":false,"context_lines":[{"line_number":613,"context_line":"        lun_naa \u003d self._get_lun_naa_from_volume_metadata(volume)\r"},{"line_number":614,"context_line":"        if lun_naa \u003d\u003d \u0027\u0027:\r"},{"line_number":615,"context_line":"            msg \u003d \u0027Volume does not exist\u0027\r"},{"line_number":616,"context_line":"            LOG.error(msg)\r"},{"line_number":617,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)\r"},{"line_number":618,"context_line":"\r"},{"line_number":619,"context_line":"        LOG.debug(\u0027volume[name]: %s\u0027, volume[\u0027name\u0027])\r"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a74a57a_ecf0afff","line":616,"updated":"2016-11-27 18:11:30.000000000","message":"This needs a _LE","commit_id":"095f3536c909a192ca187013da37a867232b686d"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"4e531d1fe4656acd4013c872a80592e6b3860ebd","unresolved":false,"context_lines":[{"line_number":613,"context_line":"        lun_naa \u003d self._get_lun_naa_from_volume_metadata(volume)\r"},{"line_number":614,"context_line":"        if lun_naa \u003d\u003d \u0027\u0027:\r"},{"line_number":615,"context_line":"            msg \u003d \u0027Volume does not exist\u0027\r"},{"line_number":616,"context_line":"            LOG.error(msg)\r"},{"line_number":617,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)\r"},{"line_number":618,"context_line":"\r"},{"line_number":619,"context_line":"        LOG.debug(\u0027volume[name]: %s\u0027, volume[\u0027name\u0027])\r"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a74a57a_c8ad9685","line":616,"in_reply_to":"5a74a57a_ecf0afff","updated":"2016-11-28 07:42:34.000000000","message":"Done","commit_id":"095f3536c909a192ca187013da37a867232b686d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4bcd4ff4ed942500b8cf9863665f8bd1b6acf3fe","unresolved":false,"context_lines":[{"line_number":999,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1000,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1001,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1002,"context_line":"            msg \u003d \u0027Volume delete failed\u0027\r"},{"line_number":1003,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)\r"},{"line_number":1004,"context_line":"\r"},{"line_number":1005,"context_line":"    @_connection_checker\r"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a74a57a_0ccdebb6","line":1002,"updated":"2016-11-27 18:11:30.000000000","message":"Please add volume uuid in the message.","commit_id":"095f3536c909a192ca187013da37a867232b686d"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"4e531d1fe4656acd4013c872a80592e6b3860ebd","unresolved":false,"context_lines":[{"line_number":999,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1000,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1001,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1002,"context_line":"            msg \u003d \u0027Volume delete failed\u0027\r"},{"line_number":1003,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)\r"},{"line_number":1004,"context_line":"\r"},{"line_number":1005,"context_line":"    @_connection_checker\r"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a74a57a_c823d656","line":1002,"in_reply_to":"5a74a57a_0ccdebb6","updated":"2016-11-28 07:42:34.000000000","message":"Done","commit_id":"095f3536c909a192ca187013da37a867232b686d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4bcd4ff4ed942500b8cf9863665f8bd1b6acf3fe","unresolved":false,"context_lines":[{"line_number":1145,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1146,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1147,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1148,"context_line":"                data\u003d(\u0027Map lun to target failed\u0027))\r"},{"line_number":1149,"context_line":"\r"},{"line_number":1150,"context_line":"    @_connection_checker\r"},{"line_number":1151,"context_line":"    def disable_lun(self, lun_index, target_index):\r"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a74a57a_4cc36389","line":1148,"updated":"2016-11-27 18:11:30.000000000","message":"Please add more details to the message.   What lun, which target?","commit_id":"095f3536c909a192ca187013da37a867232b686d"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"4e531d1fe4656acd4013c872a80592e6b3860ebd","unresolved":false,"context_lines":[{"line_number":1145,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1146,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1147,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1148,"context_line":"                data\u003d(\u0027Map lun to target failed\u0027))\r"},{"line_number":1149,"context_line":"\r"},{"line_number":1150,"context_line":"    @_connection_checker\r"},{"line_number":1151,"context_line":"    def disable_lun(self, lun_index, target_index):\r"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a74a57a_08414ea9","line":1148,"in_reply_to":"5a74a57a_4cc36389","updated":"2016-11-28 07:42:34.000000000","message":"Done","commit_id":"095f3536c909a192ca187013da37a867232b686d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4bcd4ff4ed942500b8cf9863665f8bd1b6acf3fe","unresolved":false,"context_lines":[{"line_number":1174,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1175,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1176,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1177,"context_line":"                data\u003d(\u0027Disable lun from target failed\u0027))\r"},{"line_number":1178,"context_line":"\r"},{"line_number":1179,"context_line":"    @_connection_checker\r"},{"line_number":1180,"context_line":"    def unmap_lun(self, lun_index, target_index):\r"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a74a57a_8cb9fb17","line":1177,"updated":"2016-11-27 18:11:30.000000000","message":"same","commit_id":"095f3536c909a192ca187013da37a867232b686d"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"4e531d1fe4656acd4013c872a80592e6b3860ebd","unresolved":false,"context_lines":[{"line_number":1174,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1175,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1176,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1177,"context_line":"                data\u003d(\u0027Disable lun from target failed\u0027))\r"},{"line_number":1178,"context_line":"\r"},{"line_number":1179,"context_line":"    @_connection_checker\r"},{"line_number":1180,"context_line":"    def unmap_lun(self, lun_index, target_index):\r"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a74a57a_887abeef","line":1177,"in_reply_to":"5a74a57a_8cb9fb17","updated":"2016-11-28 07:42:34.000000000","message":"Done","commit_id":"095f3536c909a192ca187013da37a867232b686d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4bcd4ff4ed942500b8cf9863665f8bd1b6acf3fe","unresolved":false,"context_lines":[{"line_number":1202,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1203,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1204,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1205,"context_line":"                data\u003d(\u0027Unmap lun from target failed\u0027))\r"},{"line_number":1206,"context_line":"\r"},{"line_number":1207,"context_line":"    @_connection_checker\r"},{"line_number":1208,"context_line":"    def get_iscsi_portal_info(self):\r"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a74a57a_ac3877a1","line":1205,"updated":"2016-11-27 18:11:30.000000000","message":"same","commit_id":"095f3536c909a192ca187013da37a867232b686d"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"4e531d1fe4656acd4013c872a80592e6b3860ebd","unresolved":false,"context_lines":[{"line_number":1202,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1203,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1204,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1205,"context_line":"                data\u003d(\u0027Unmap lun from target failed\u0027))\r"},{"line_number":1206,"context_line":"\r"},{"line_number":1207,"context_line":"    @_connection_checker\r"},{"line_number":1208,"context_line":"    def get_iscsi_portal_info(self):\r"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a74a57a_a8669a4e","line":1205,"in_reply_to":"5a74a57a_ac3877a1","updated":"2016-11-28 07:42:34.000000000","message":"Done","commit_id":"095f3536c909a192ca187013da37a867232b686d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4bcd4ff4ed942500b8cf9863665f8bd1b6acf3fe","unresolved":false,"context_lines":[{"line_number":1384,"context_line":"            return\r"},{"line_number":1385,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1386,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1387,"context_line":"                data\u003d(\u0027delete snapshot failed\u0027))\r"},{"line_number":1388,"context_line":"\r"},{"line_number":1389,"context_line":"    @_connection_checker\r"},{"line_number":1390,"context_line":"    def clone_snapshot(self, snapshot_id, new_lunname):\r"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a74a57a_cc3db390","line":1387,"updated":"2016-11-27 18:11:30.000000000","message":"snapshot id","commit_id":"095f3536c909a192ca187013da37a867232b686d"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"4e531d1fe4656acd4013c872a80592e6b3860ebd","unresolved":false,"context_lines":[{"line_number":1384,"context_line":"            return\r"},{"line_number":1385,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1386,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1387,"context_line":"                data\u003d(\u0027delete snapshot failed\u0027))\r"},{"line_number":1388,"context_line":"\r"},{"line_number":1389,"context_line":"    @_connection_checker\r"},{"line_number":1390,"context_line":"    def clone_snapshot(self, snapshot_id, new_lunname):\r"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a74a57a_484c26c8","line":1387,"in_reply_to":"5a74a57a_cc3db390","updated":"2016-11-28 07:42:34.000000000","message":"Done","commit_id":"095f3536c909a192ca187013da37a867232b686d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4bcd4ff4ed942500b8cf9863665f8bd1b6acf3fe","unresolved":false,"context_lines":[{"line_number":1412,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1413,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1414,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1415,"context_line":"                data\u003d(\u0027Clone snapshot failed\u0027))\r"},{"line_number":1416,"context_line":"\r"},{"line_number":1417,"context_line":"    @_connection_checker\r"},{"line_number":1418,"context_line":"    def edit_lun(self, lun):\r"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a74a57a_6c53bfe2","line":1415,"updated":"2016-11-27 18:11:30.000000000","message":"please print snapshot_id and new_lunname.","commit_id":"095f3536c909a192ca187013da37a867232b686d"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"4e531d1fe4656acd4013c872a80592e6b3860ebd","unresolved":false,"context_lines":[{"line_number":1412,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1413,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1414,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1415,"context_line":"                data\u003d(\u0027Clone snapshot failed\u0027))\r"},{"line_number":1416,"context_line":"\r"},{"line_number":1417,"context_line":"    @_connection_checker\r"},{"line_number":1418,"context_line":"    def edit_lun(self, lun):\r"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a74a57a_e8a17247","line":1415,"in_reply_to":"5a74a57a_6c53bfe2","updated":"2016-11-28 07:42:34.000000000","message":"Done","commit_id":"095f3536c909a192ca187013da37a867232b686d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"4bcd4ff4ed942500b8cf9863665f8bd1b6acf3fe","unresolved":false,"context_lines":[{"line_number":1449,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1450,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1451,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1452,"context_line":"                data\u003d(\u0027Extend lun failed\u0027))\r"},{"line_number":1453,"context_line":"\r"},{"line_number":1454,"context_line":"    @_connection_checker\r"},{"line_number":1455,"context_line":"    def get_all_iscsi_portal_setting(self):\r"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a74a57a_8c501bd6","line":1452,"updated":"2016-11-27 18:11:30.000000000","message":"volume uuid","commit_id":"095f3536c909a192ca187013da37a867232b686d"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"4e531d1fe4656acd4013c872a80592e6b3860ebd","unresolved":false,"context_lines":[{"line_number":1449,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1450,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1451,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1452,"context_line":"                data\u003d(\u0027Extend lun failed\u0027))\r"},{"line_number":1453,"context_line":"\r"},{"line_number":1454,"context_line":"    @_connection_checker\r"},{"line_number":1455,"context_line":"    def get_all_iscsi_portal_setting(self):\r"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a74a57a_487fc6aa","line":1452,"in_reply_to":"5a74a57a_8c501bd6","updated":"2016-11-28 07:42:34.000000000","message":"Done","commit_id":"095f3536c909a192ca187013da37a867232b686d"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"328cc4875d4ffe006a8f940bac3aac9547334247","unresolved":false,"context_lines":[{"line_number":902,"context_line":"                sanitized_params[key] \u003d six.text_type(value)\r"},{"line_number":903,"context_line":"\r"},{"line_number":904,"context_line":"        sanitized_params \u003d urllib.parse.urlencode(sanitized_params)\r"},{"line_number":905,"context_line":"        url \u003d (\u0027/cgi-bin/authLogin.cgi?%s\u0027 % sanitized_params)\r"},{"line_number":906,"context_line":"\r"},{"line_number":907,"context_line":"        res_details \u003d self._execute_and_get_response_details(self.ip, url)\r"},{"line_number":908,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"}],"source_content_type":"text/x-python","patch_set":35,"id":"5a74a57a_f55cc21a","line":905,"updated":"2016-11-28 21:45:25.000000000","message":"Passing a password via the URL over HTTP is a security hazard.  If the backend requires logging in this way, this should at least be required to be done over HTTPS.\n\nIf there\u0027s some reason that HTTP is more useful here than HTTPS, we should throw warnings etc at driver startup time indicating that this is not a secure configuration when using only HTTP.\n\n(It\u0027s a security hazard to do auth this way over HTTPS too, but at least not as bad.  It can still result in auth params showing up in logs.)","commit_id":"e5e63a0b57b6adcc8de778648ddd7d3b2e07a9ad"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"9d91b72de1fc23dd6a65005f974bc5be3739d53e","unresolved":false,"context_lines":[{"line_number":902,"context_line":"                sanitized_params[key] \u003d six.text_type(value)\r"},{"line_number":903,"context_line":"\r"},{"line_number":904,"context_line":"        sanitized_params \u003d urllib.parse.urlencode(sanitized_params)\r"},{"line_number":905,"context_line":"        url \u003d (\u0027/cgi-bin/authLogin.cgi?%s\u0027 % sanitized_params)\r"},{"line_number":906,"context_line":"\r"},{"line_number":907,"context_line":"        res_details \u003d self._execute_and_get_response_details(self.ip, url)\r"},{"line_number":908,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"}],"source_content_type":"text/x-python","patch_set":35,"id":"5a74a57a_70cc2d89","line":905,"in_reply_to":"5a74a57a_f55cc21a","updated":"2016-11-29 09:28:30.000000000","message":"We modify not to put password in URL and put it in the POST parm. We will also warning user that use HTTP to auth NAS might have security issue in the user guide.","commit_id":"e5e63a0b57b6adcc8de778648ddd7d3b2e07a9ad"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"971a096077d68e9e99555297d1cc79777fe2491b","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    import xml.etree.cElementTree as ET\r"},{"line_number":29,"context_line":"except ImportError:\r"},{"line_number":30,"context_line":"    import xml.etree.ElementTree as ET\r"},{"line_number":31,"context_line":"\r"},{"line_number":32,"context_line":"from cinder import exception\r"},{"line_number":33,"context_line":"from cinder.i18n import _, _LE, _LI\r"},{"line_number":34,"context_line":"from cinder import interface\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a71b18c_d4987c6d","line":31,"updated":"2016-12-01 07:46:08.000000000","message":"Imports need to be reorganized.","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"4b147d23a8baebfd81a1e629f1f349fd775c947e","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    import xml.etree.cElementTree as ET\r"},{"line_number":29,"context_line":"except ImportError:\r"},{"line_number":30,"context_line":"    import xml.etree.ElementTree as ET\r"},{"line_number":31,"context_line":"\r"},{"line_number":32,"context_line":"from cinder import exception\r"},{"line_number":33,"context_line":"from cinder.i18n import _, _LE, _LI\r"},{"line_number":34,"context_line":"from cinder import interface\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a71b18c_3aac39ed","line":31,"in_reply_to":"3a71b18c_d4987c6d","updated":"2016-12-01 13:09:20.000000000","message":"Done","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"971a096077d68e9e99555297d1cc79777fe2491b","unresolved":false,"context_lines":[{"line_number":40,"context_line":"from six.moves import http_client\r"},{"line_number":41,"context_line":"from six.moves import urllib\r"},{"line_number":42,"context_line":"\r"},{"line_number":43,"context_line":"DRIVER_VERSION \u003d \u00271.0.0\u0027\r"},{"line_number":44,"context_line":"\r"},{"line_number":45,"context_line":"LOG \u003d logging.getLogger(__name__)\r"},{"line_number":46,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"5a74a57a_08443c72","line":43,"range":{"start_line":43,"start_character":0,"end_line":43,"end_character":14},"updated":"2016-12-01 07:46:08.000000000","message":"Should be VERSION inside the driver class.","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"4b147d23a8baebfd81a1e629f1f349fd775c947e","unresolved":false,"context_lines":[{"line_number":40,"context_line":"from six.moves import http_client\r"},{"line_number":41,"context_line":"from six.moves import urllib\r"},{"line_number":42,"context_line":"\r"},{"line_number":43,"context_line":"DRIVER_VERSION \u003d \u00271.0.0\u0027\r"},{"line_number":44,"context_line":"\r"},{"line_number":45,"context_line":"LOG \u003d logging.getLogger(__name__)\r"},{"line_number":46,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a71b18c_9aa0eda7","line":43,"range":{"start_line":43,"start_character":0,"end_line":43,"end_character":14},"in_reply_to":"5a74a57a_08443c72","updated":"2016-12-01 13:09:20.000000000","message":"Done","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"971a096077d68e9e99555297d1cc79777fe2491b","unresolved":false,"context_lines":[{"line_number":49,"context_line":"               help\u003d\u0027The URL to management QNAP Storage\u0027),\r"},{"line_number":50,"context_line":"    cfg.StrOpt(\u0027iscsi_ip\u0027,\r"},{"line_number":51,"context_line":"               help\u003d\u0027San iSCSI IP for QNAP storage\u0027),\r"},{"line_number":52,"context_line":"    cfg.StrOpt(\u0027qnap_server_port\u0027,\r"},{"line_number":53,"context_line":"               help\u003d\u0027Management Port for QNAP storage\u0027),\r"},{"line_number":54,"context_line":"    cfg.StrOpt(\u0027qnap_poolname\u0027,\r"},{"line_number":55,"context_line":"               help\u003d\u0027The pool name in the QNAP Storage\u0027),\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"5a74a57a_68abf01e","line":52,"range":{"start_line":52,"start_character":8,"end_line":52,"end_character":14},"updated":"2016-12-01 07:46:08.000000000","message":"Shouldn\u0027t this just be IntOpt?","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"4b147d23a8baebfd81a1e629f1f349fd775c947e","unresolved":false,"context_lines":[{"line_number":49,"context_line":"               help\u003d\u0027The URL to management QNAP Storage\u0027),\r"},{"line_number":50,"context_line":"    cfg.StrOpt(\u0027iscsi_ip\u0027,\r"},{"line_number":51,"context_line":"               help\u003d\u0027San iSCSI IP for QNAP storage\u0027),\r"},{"line_number":52,"context_line":"    cfg.StrOpt(\u0027qnap_server_port\u0027,\r"},{"line_number":53,"context_line":"               help\u003d\u0027Management Port for QNAP storage\u0027),\r"},{"line_number":54,"context_line":"    cfg.StrOpt(\u0027qnap_poolname\u0027,\r"},{"line_number":55,"context_line":"               help\u003d\u0027The pool name in the QNAP Storage\u0027),\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a71b18c_fa02c16e","line":52,"range":{"start_line":52,"start_character":8,"end_line":52,"end_character":14},"in_reply_to":"5a74a57a_68abf01e","updated":"2016-12-01 13:09:20.000000000","message":"Done","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"971a096077d68e9e99555297d1cc79777fe2491b","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        if model_type in ts_model_types:\r"},{"line_number":157,"context_line":"            if (fw_version.startswith(\"4.2\") or fw_version.startswith(\"4.3\")):\r"},{"line_number":158,"context_line":"                LOG.debug(\u0027Create TS API Executor\u0027)\r"},{"line_number":159,"context_line":"                # modify the pool name to poole index\r"},{"line_number":160,"context_line":"                self.configuration.qnap_poolname \u003d (\r"},{"line_number":161,"context_line":"                    self._get_ts_model_pool_id(\r"},{"line_number":162,"context_line":"                        self.configuration.qnap_poolname))\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"5a74a57a_c817a452","line":159,"range":{"start_line":159,"start_character":42,"end_line":159,"end_character":47},"updated":"2016-12-01 07:46:08.000000000","message":"pool","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"4b147d23a8baebfd81a1e629f1f349fd775c947e","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        if model_type in ts_model_types:\r"},{"line_number":157,"context_line":"            if (fw_version.startswith(\"4.2\") or fw_version.startswith(\"4.3\")):\r"},{"line_number":158,"context_line":"                LOG.debug(\u0027Create TS API Executor\u0027)\r"},{"line_number":159,"context_line":"                # modify the pool name to poole index\r"},{"line_number":160,"context_line":"                self.configuration.qnap_poolname \u003d (\r"},{"line_number":161,"context_line":"                    self._get_ts_model_pool_id(\r"},{"line_number":162,"context_line":"                        self.configuration.qnap_poolname))\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a71b18c_da6c250b","line":159,"range":{"start_line":159,"start_character":42,"end_line":159,"end_character":47},"in_reply_to":"5a74a57a_c817a452","updated":"2016-12-01 13:09:20.000000000","message":"Done","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"971a096077d68e9e99555297d1cc79777fe2491b","unresolved":false,"context_lines":[{"line_number":195,"context_line":"                    password\u003dself.configuration.san_password,\r"},{"line_number":196,"context_line":"                    management_url\u003dself.configuration.qnap_management_url))\r"},{"line_number":197,"context_line":"\r"},{"line_number":198,"context_line":"        msg \u003d \u0027Model not support\u0027\r"},{"line_number":199,"context_line":"        raise exception.VolumeDriverException(message\u003dmsg)\r"},{"line_number":200,"context_line":"\r"},{"line_number":201,"context_line":"    def _get_ts_model_pool_id(self, pool_name):\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"5a74a57a_480c7442","line":198,"updated":"2016-12-01 07:46:08.000000000","message":"Needs _()","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"4b147d23a8baebfd81a1e629f1f349fd775c947e","unresolved":false,"context_lines":[{"line_number":195,"context_line":"                    password\u003dself.configuration.san_password,\r"},{"line_number":196,"context_line":"                    management_url\u003dself.configuration.qnap_management_url))\r"},{"line_number":197,"context_line":"\r"},{"line_number":198,"context_line":"        msg \u003d \u0027Model not support\u0027\r"},{"line_number":199,"context_line":"        raise exception.VolumeDriverException(message\u003dmsg)\r"},{"line_number":200,"context_line":"\r"},{"line_number":201,"context_line":"    def _get_ts_model_pool_id(self, pool_name):\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a71b18c_3d10b34e","line":198,"in_reply_to":"5a74a57a_480c7442","updated":"2016-12-01 13:09:20.000000000","message":"Done","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"971a096077d68e9e99555297d1cc79777fe2491b","unresolved":false,"context_lines":[{"line_number":276,"context_line":"        LOG.debug(\u0027volume: %s\u0027, volume.__dict__)\r"},{"line_number":277,"context_line":"        lun_naa \u003d self._get_lun_naa_from_volume_metadata(volume)\r"},{"line_number":278,"context_line":"        if lun_naa \u003d\u003d \u0027\u0027:\r"},{"line_number":279,"context_line":"            LOG.debug(\u0027Volume \u0027 + volume.id + \u0027does not exist.\u0027)\r"},{"line_number":280,"context_line":"            return\r"},{"line_number":281,"context_line":"\r"},{"line_number":282,"context_line":"        del_lun \u003d self.api_executor.get_lun_info(LUNNAA\u003dlun_naa)\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"5a74a57a_4341b738","line":279,"updated":"2016-12-01 07:46:08.000000000","message":"Change to (\"Volume %s does not exist\", volume.id) so no string formatting is performed unless needed.","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"4b147d23a8baebfd81a1e629f1f349fd775c947e","unresolved":false,"context_lines":[{"line_number":276,"context_line":"        LOG.debug(\u0027volume: %s\u0027, volume.__dict__)\r"},{"line_number":277,"context_line":"        lun_naa \u003d self._get_lun_naa_from_volume_metadata(volume)\r"},{"line_number":278,"context_line":"        if lun_naa \u003d\u003d \u0027\u0027:\r"},{"line_number":279,"context_line":"            LOG.debug(\u0027Volume \u0027 + volume.id + \u0027does not exist.\u0027)\r"},{"line_number":280,"context_line":"            return\r"},{"line_number":281,"context_line":"\r"},{"line_number":282,"context_line":"        del_lun \u003d self.api_executor.get_lun_info(LUNNAA\u003dlun_naa)\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a71b18c_dd7b3f7a","line":279,"in_reply_to":"5a74a57a_4341b738","updated":"2016-12-01 13:09:20.000000000","message":"Done","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"971a096077d68e9e99555297d1cc79777fe2491b","unresolved":false,"context_lines":[{"line_number":281,"context_line":"\r"},{"line_number":282,"context_line":"        del_lun \u003d self.api_executor.get_lun_info(LUNNAA\u003dlun_naa)\r"},{"line_number":283,"context_line":"        if del_lun is None:\r"},{"line_number":284,"context_line":"            LOG.debug(\u0027Volume\u0027 + lun_naa + \u0027 does not exist.\u0027)\r"},{"line_number":285,"context_line":"            return\r"},{"line_number":286,"context_line":"\r"},{"line_number":287,"context_line":"        lun_index \u003d del_lun.find(\u0027LUNIndex\u0027).text\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"5a74a57a_c37307b3","line":284,"updated":"2016-12-01 07:46:08.000000000","message":"Same.","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"4b147d23a8baebfd81a1e629f1f349fd775c947e","unresolved":false,"context_lines":[{"line_number":281,"context_line":"\r"},{"line_number":282,"context_line":"        del_lun \u003d self.api_executor.get_lun_info(LUNNAA\u003dlun_naa)\r"},{"line_number":283,"context_line":"        if del_lun is None:\r"},{"line_number":284,"context_line":"            LOG.debug(\u0027Volume\u0027 + lun_naa + \u0027 does not exist.\u0027)\r"},{"line_number":285,"context_line":"            return\r"},{"line_number":286,"context_line":"\r"},{"line_number":287,"context_line":"        lun_index \u003d del_lun.find(\u0027LUNIndex\u0027).text\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a71b18c_7de4eb3a","line":284,"in_reply_to":"5a74a57a_c37307b3","updated":"2016-12-01 13:09:20.000000000","message":"Done","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"971a096077d68e9e99555297d1cc79777fe2491b","unresolved":false,"context_lines":[{"line_number":296,"context_line":"            self.api_executor.unmap_lun(lun_index, target_index)\r"},{"line_number":297,"context_line":"\r"},{"line_number":298,"context_line":"        is_lun_busy \u003d False\r"},{"line_number":299,"context_line":"        while(True):\r"},{"line_number":300,"context_line":"            is_lun_busy \u003d self.api_executor.delete_lun(lun_index)\r"},{"line_number":301,"context_line":"            if not is_lun_busy:\r"},{"line_number":302,"context_line":"                break\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"5a74a57a_43aff7e2","line":299,"range":{"start_line":299,"start_character":8,"end_line":299,"end_character":19},"updated":"2016-12-01 07:46:08.000000000","message":"while True:","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"4b147d23a8baebfd81a1e629f1f349fd775c947e","unresolved":false,"context_lines":[{"line_number":296,"context_line":"            self.api_executor.unmap_lun(lun_index, target_index)\r"},{"line_number":297,"context_line":"\r"},{"line_number":298,"context_line":"        is_lun_busy \u003d False\r"},{"line_number":299,"context_line":"        while(True):\r"},{"line_number":300,"context_line":"            is_lun_busy \u003d self.api_executor.delete_lun(lun_index)\r"},{"line_number":301,"context_line":"            if not is_lun_busy:\r"},{"line_number":302,"context_line":"                break\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a71b18c_3dc19381","line":299,"range":{"start_line":299,"start_character":8,"end_line":299,"end_character":19},"in_reply_to":"5a74a57a_43aff7e2","updated":"2016-12-01 13:09:20.000000000","message":"Done","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"971a096077d68e9e99555297d1cc79777fe2491b","unresolved":false,"context_lines":[{"line_number":488,"context_line":"\r"},{"line_number":489,"context_line":"        # User could create two volume with the same name on horizon.\r"},{"line_number":490,"context_line":"        # Therefore, We should not use displayname to create lun on nas.\r"},{"line_number":491,"context_line":"        while True:\r"},{"line_number":492,"context_line":"            create_lun_name \u003d self._gen_random_name()\r"},{"line_number":493,"context_line":"            # If lunname with the name exists, need to change to\r"},{"line_number":494,"context_line":"            # a different name\r"},{"line_number":495,"context_line":"            created_lun \u003d self.api_executor.get_lun_info(\r"},{"line_number":496,"context_line":"                LUNName\u003dcreate_lun_name)\r"},{"line_number":497,"context_line":"            if created_lun is None:\r"},{"line_number":498,"context_line":"                break\r"},{"line_number":499,"context_line":"\r"},{"line_number":500,"context_line":"        self.api_executor.clone_snapshot(\r"},{"line_number":501,"context_line":"            snapshot_id, create_lun_name)\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"5a74a57a_c304e7c7","line":498,"range":{"start_line":491,"start_character":8,"end_line":498,"end_character":21},"updated":"2016-12-01 07:46:08.000000000","message":"This same block is repeated. Should move into a helper method that just returns unique created_lun_name.","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"4b147d23a8baebfd81a1e629f1f349fd775c947e","unresolved":false,"context_lines":[{"line_number":488,"context_line":"\r"},{"line_number":489,"context_line":"        # User could create two volume with the same name on horizon.\r"},{"line_number":490,"context_line":"        # Therefore, We should not use displayname to create lun on nas.\r"},{"line_number":491,"context_line":"        while True:\r"},{"line_number":492,"context_line":"            create_lun_name \u003d self._gen_random_name()\r"},{"line_number":493,"context_line":"            # If lunname with the name exists, need to change to\r"},{"line_number":494,"context_line":"            # a different name\r"},{"line_number":495,"context_line":"            created_lun \u003d self.api_executor.get_lun_info(\r"},{"line_number":496,"context_line":"                LUNName\u003dcreate_lun_name)\r"},{"line_number":497,"context_line":"            if created_lun is None:\r"},{"line_number":498,"context_line":"                break\r"},{"line_number":499,"context_line":"\r"},{"line_number":500,"context_line":"        self.api_executor.clone_snapshot(\r"},{"line_number":501,"context_line":"            snapshot_id, create_lun_name)\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a71b18c_69db4d1c","line":498,"range":{"start_line":491,"start_character":8,"end_line":498,"end_character":21},"in_reply_to":"5a74a57a_c304e7c7","updated":"2016-12-01 13:09:20.000000000","message":"Done","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"971a096077d68e9e99555297d1cc79777fe2491b","unresolved":false,"context_lines":[{"line_number":776,"context_line":"    \"\"\"Decorator to check session has expired or not.\"\"\"\r"},{"line_number":777,"context_line":"    @functools.wraps(func)\r"},{"line_number":778,"context_line":"    def inner_connection_checker(self, *args, **kwargs):\r"},{"line_number":779,"context_line":"        LOG.debug(_LI(\u0027in _connection_checker\u0027))\r"},{"line_number":780,"context_line":"        for attempts in range(5):\r"},{"line_number":781,"context_line":"            try:\r"},{"line_number":782,"context_line":"                return func(self, *args, **kwargs)\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"5a74a57a_c3b947ee","line":779,"range":{"start_line":779,"start_character":18,"end_line":779,"end_character":21},"updated":"2016-12-01 07:46:08.000000000","message":"Debug logs should not be translated.","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"4b147d23a8baebfd81a1e629f1f349fd775c947e","unresolved":false,"context_lines":[{"line_number":776,"context_line":"    \"\"\"Decorator to check session has expired or not.\"\"\"\r"},{"line_number":777,"context_line":"    @functools.wraps(func)\r"},{"line_number":778,"context_line":"    def inner_connection_checker(self, *args, **kwargs):\r"},{"line_number":779,"context_line":"        LOG.debug(_LI(\u0027in _connection_checker\u0027))\r"},{"line_number":780,"context_line":"        for attempts in range(5):\r"},{"line_number":781,"context_line":"            try:\r"},{"line_number":782,"context_line":"                return func(self, *args, **kwargs)\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a71b18c_9d2b8733","line":779,"range":{"start_line":779,"start_character":18,"end_line":779,"end_character":21},"in_reply_to":"5a74a57a_c3b947ee","updated":"2016-12-01 13:09:20.000000000","message":"Done","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"971a096077d68e9e99555297d1cc79777fe2491b","unresolved":false,"context_lines":[{"line_number":818,"context_line":"\r"},{"line_number":819,"context_line":"    def get_basic_info(self, management_url):\r"},{"line_number":820,"context_line":"        \"\"\"Get the basic information of NAS.\"\"\"\r"},{"line_number":821,"context_line":"        LOG.debug(_LI(\u0027in get_basic_info\u0027))\r"},{"line_number":822,"context_line":"        management_ip, management_port, management_ssl \u003d (\r"},{"line_number":823,"context_line":"            self._parse_management_url(management_url))\r"},{"line_number":824,"context_line":"        connection \u003d None\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a71b18c_14af54e4","line":821,"range":{"start_line":821,"start_character":18,"end_line":821,"end_character":21},"updated":"2016-12-01 07:46:08.000000000","message":"Remove translation marker.","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"4b147d23a8baebfd81a1e629f1f349fd775c947e","unresolved":false,"context_lines":[{"line_number":818,"context_line":"\r"},{"line_number":819,"context_line":"    def get_basic_info(self, management_url):\r"},{"line_number":820,"context_line":"        \"\"\"Get the basic information of NAS.\"\"\"\r"},{"line_number":821,"context_line":"        LOG.debug(_LI(\u0027in get_basic_info\u0027))\r"},{"line_number":822,"context_line":"        management_ip, management_port, management_ssl \u003d (\r"},{"line_number":823,"context_line":"            self._parse_management_url(management_url))\r"},{"line_number":824,"context_line":"        connection \u003d None\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a71b18c_7d4b0bb1","line":821,"range":{"start_line":821,"start_character":18,"end_line":821,"end_character":21},"in_reply_to":"3a71b18c_14af54e4","updated":"2016-12-01 13:09:20.000000000","message":"Done","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"971a096077d68e9e99555297d1cc79777fe2491b","unresolved":false,"context_lines":[{"line_number":955,"context_line":"\r"},{"line_number":956,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":957,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":958,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":959,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":960,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":961,"context_line":"                data\u003d(\u0027Create volume %s failed\u0027) % volume[\u0027display_name\u0027])\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a71b18c_14f914c9","line":958,"updated":"2016-12-01 07:46:08.000000000","message":"Needs _()","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"4b147d23a8baebfd81a1e629f1f349fd775c947e","unresolved":false,"context_lines":[{"line_number":955,"context_line":"\r"},{"line_number":956,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":957,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":958,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":959,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":960,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":961,"context_line":"                data\u003d(\u0027Create volume %s failed\u0027) % volume[\u0027display_name\u0027])\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a71b18c_5dfc8f3e","line":958,"in_reply_to":"3a71b18c_14f914c9","updated":"2016-12-01 13:09:20.000000000","message":"Done","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"971a096077d68e9e99555297d1cc79777fe2491b","unresolved":false,"context_lines":[{"line_number":958,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":959,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":960,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":961,"context_line":"                data\u003d(\u0027Create volume %s failed\u0027) % volume[\u0027display_name\u0027])\r"},{"line_number":962,"context_line":"\r"},{"line_number":963,"context_line":"        return root.find(\u0027result\u0027).text\r"},{"line_number":964,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a71b18c_34f610d8","line":961,"updated":"2016-12-01 07:46:08.000000000","message":"Same.","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"4b147d23a8baebfd81a1e629f1f349fd775c947e","unresolved":false,"context_lines":[{"line_number":958,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":959,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":960,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":961,"context_line":"                data\u003d(\u0027Create volume %s failed\u0027) % volume[\u0027display_name\u0027])\r"},{"line_number":962,"context_line":"\r"},{"line_number":963,"context_line":"        return root.find(\u0027result\u0027).text\r"},{"line_number":964,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a71b18c_9d9467e9","line":961,"in_reply_to":"3a71b18c_34f610d8","updated":"2016-12-01 13:09:20.000000000","message":"Done","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"971a096077d68e9e99555297d1cc79777fe2491b","unresolved":false,"context_lines":[{"line_number":965,"context_line":"    @_connection_checker\r"},{"line_number":966,"context_line":"    def delete_lun(self, vol_id, *args, **kwargs):\r"},{"line_number":967,"context_line":"        \"\"\"Execute delete lun API.\"\"\"\r"},{"line_number":968,"context_line":"        LOG.debug(\u0027Deleting volume id %s \u0027, vol_id)\r"},{"line_number":969,"context_line":"        params \u003d {}\r"},{"line_number":970,"context_line":"        params[\u0027func\u0027] \u003d \u0027remove_lun\u0027\r"},{"line_number":971,"context_line":"        params[\u0027run_background\u0027] \u003d \u00271\u0027\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a71b18c_740088ab","line":968,"range":{"start_line":968,"start_character":40,"end_line":968,"end_character":41},"updated":"2016-12-01 07:46:08.000000000","message":"Extra space at end of string.","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"4b147d23a8baebfd81a1e629f1f349fd775c947e","unresolved":false,"context_lines":[{"line_number":965,"context_line":"    @_connection_checker\r"},{"line_number":966,"context_line":"    def delete_lun(self, vol_id, *args, **kwargs):\r"},{"line_number":967,"context_line":"        \"\"\"Execute delete lun API.\"\"\"\r"},{"line_number":968,"context_line":"        LOG.debug(\u0027Deleting volume id %s \u0027, vol_id)\r"},{"line_number":969,"context_line":"        params \u003d {}\r"},{"line_number":970,"context_line":"        params[\u0027func\u0027] \u003d \u0027remove_lun\u0027\r"},{"line_number":971,"context_line":"        params[\u0027run_background\u0027] \u003d \u00271\u0027\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a71b18c_7d7eabaf","line":968,"range":{"start_line":968,"start_character":40,"end_line":968,"end_character":41},"in_reply_to":"3a71b18c_740088ab","updated":"2016-12-01 13:09:20.000000000","message":"Done","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"971a096077d68e9e99555297d1cc79777fe2491b","unresolved":false,"context_lines":[{"line_number":992,"context_line":"        if root.find(\u0027result\u0027).text \u003d\u003d data_set_is_busy:\r"},{"line_number":993,"context_line":"            return True\r"},{"line_number":994,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":995,"context_line":"            msg \u003d \u0027Volume\u0027 + vol_id + \u0027 delete failed\u0027\r"},{"line_number":996,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)\r"},{"line_number":997,"context_line":"\r"},{"line_number":998,"context_line":"        return False\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a71b18c_94d28433","line":995,"updated":"2016-12-01 07:46:08.000000000","message":"Needs _() around static string, change to perform string formatting rather than concatenation.","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"4b147d23a8baebfd81a1e629f1f349fd775c947e","unresolved":false,"context_lines":[{"line_number":992,"context_line":"        if root.find(\u0027result\u0027).text \u003d\u003d data_set_is_busy:\r"},{"line_number":993,"context_line":"            return True\r"},{"line_number":994,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":995,"context_line":"            msg \u003d \u0027Volume\u0027 + vol_id + \u0027 delete failed\u0027\r"},{"line_number":996,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)\r"},{"line_number":997,"context_line":"\r"},{"line_number":998,"context_line":"        return False\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a71b18c_c82a9f7e","line":995,"in_reply_to":"3a71b18c_94d28433","updated":"2016-12-01 13:09:20.000000000","message":"Done","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"971a096077d68e9e99555297d1cc79777fe2491b","unresolved":false,"context_lines":[{"line_number":1022,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1023,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":1024,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1025,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1026,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1027,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1028,"context_line":"                data\u003d(\u0027get_specific_poolinfo failed\u0027))\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a71b18c_d4dcfc48","line":1025,"updated":"2016-12-01 07:46:08.000000000","message":"_()","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"4b147d23a8baebfd81a1e629f1f349fd775c947e","unresolved":false,"context_lines":[{"line_number":1022,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1023,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":1024,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1025,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1026,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1027,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1028,"context_line":"                data\u003d(\u0027get_specific_poolinfo failed\u0027))\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a71b18c_68626bda","line":1025,"in_reply_to":"3a71b18c_d4dcfc48","updated":"2016-12-01 13:09:20.000000000","message":"Done","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"971a096077d68e9e99555297d1cc79777fe2491b","unresolved":false,"context_lines":[{"line_number":1025,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1026,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1027,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1028,"context_line":"                data\u003d(\u0027get_specific_poolinfo failed\u0027))\r"},{"line_number":1029,"context_line":"\r"},{"line_number":1030,"context_line":"        pool_list \u003d root.find(\u0027Pool_Index\u0027)\r"},{"line_number":1031,"context_line":"        pool_info_tree \u003d pool_list.findall(\u0027row\u0027)\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a71b18c_14e75413","line":1028,"updated":"2016-12-01 07:46:08.000000000","message":"_()","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"4b147d23a8baebfd81a1e629f1f349fd775c947e","unresolved":false,"context_lines":[{"line_number":1025,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1026,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1027,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1028,"context_line":"                data\u003d(\u0027get_specific_poolinfo failed\u0027))\r"},{"line_number":1029,"context_line":"\r"},{"line_number":1030,"context_line":"        pool_list \u003d root.find(\u0027Pool_Index\u0027)\r"},{"line_number":1031,"context_line":"        pool_info_tree \u003d pool_list.findall(\u0027row\u0027)\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a71b18c_48accfed","line":1028,"in_reply_to":"3a71b18c_14e75413","updated":"2016-12-01 13:09:20.000000000","message":"Done","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"971a096077d68e9e99555297d1cc79777fe2491b","unresolved":false,"context_lines":[{"line_number":1061,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1062,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":1063,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1064,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1065,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1066,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1067,"context_line":"                data\u003d(\u0027Create target failed\u0027))\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a71b18c_d4b31c09","line":1064,"updated":"2016-12-01 07:46:08.000000000","message":"_()","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"4b147d23a8baebfd81a1e629f1f349fd775c947e","unresolved":false,"context_lines":[{"line_number":1061,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1062,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":1063,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1064,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1065,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1066,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1067,"context_line":"                data\u003d(\u0027Create target failed\u0027))\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a71b18c_4893efa3","line":1064,"in_reply_to":"3a71b18c_d4b31c09","updated":"2016-12-01 13:09:20.000000000","message":"Done","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"971a096077d68e9e99555297d1cc79777fe2491b","unresolved":false,"context_lines":[{"line_number":1065,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1066,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1067,"context_line":"                data\u003d(\u0027Create target failed\u0027))\r"},{"line_number":1068,"context_line":"\r"},{"line_number":1069,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1070,"context_line":"        target_index \u003d root.find(\u0027result\u0027).text\r"},{"line_number":1071,"context_line":"        return target_index\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a71b18c_f4b818e8","line":1068,"updated":"2016-12-01 07:46:08.000000000","message":"_()","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"4b147d23a8baebfd81a1e629f1f349fd775c947e","unresolved":false,"context_lines":[{"line_number":1065,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1066,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1067,"context_line":"                data\u003d(\u0027Create target failed\u0027))\r"},{"line_number":1068,"context_line":"\r"},{"line_number":1069,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1070,"context_line":"        target_index \u003d root.find(\u0027result\u0027).text\r"},{"line_number":1071,"context_line":"        return target_index\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a71b18c_c8ed3f27","line":1068,"in_reply_to":"3a71b18c_f4b818e8","updated":"2016-12-01 13:09:20.000000000","message":"Done","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"971a096077d68e9e99555297d1cc79777fe2491b","unresolved":false,"context_lines":[{"line_number":1099,"context_line":"\r"},{"line_number":1100,"context_line":"        sanitized_params \u003d urllib.parse.urlencode(sanitized_params)\r"},{"line_number":1101,"context_line":"        url \u003d (\u0027/cgi-bin/disk/iscsi_target_setting.cgi?%s\u0027 % sanitized_params)\r"},{"line_number":1102,"context_line":"\r"},{"line_number":1103,"context_line":"        res_details \u003d self._execute_and_get_response_details(self.ip, url)\r"},{"line_number":1104,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1105,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a71b18c_147cb41f","line":1102,"updated":"2016-12-01 07:46:08.000000000","message":"A lot of these appear to be the same with just the params and the url changing. Refactor into a common method that takes just these differences.","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"4b147d23a8baebfd81a1e629f1f349fd775c947e","unresolved":false,"context_lines":[{"line_number":1099,"context_line":"\r"},{"line_number":1100,"context_line":"        sanitized_params \u003d urllib.parse.urlencode(sanitized_params)\r"},{"line_number":1101,"context_line":"        url \u003d (\u0027/cgi-bin/disk/iscsi_target_setting.cgi?%s\u0027 % sanitized_params)\r"},{"line_number":1102,"context_line":"\r"},{"line_number":1103,"context_line":"        res_details \u003d self._execute_and_get_response_details(self.ip, url)\r"},{"line_number":1104,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1105,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a71b18c_89c7bf44","line":1102,"in_reply_to":"3a71b18c_147cb41f","updated":"2016-12-01 13:09:20.000000000","message":"Done","commit_id":"388b098ddef94ac92f92c20b37dc23b25a5d1346"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"20988d85e0188d12150c5a254cb57a026020ef29","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2016 QNAP Systems, Inc.\r"},{"line_number":2,"context_line":"# All Rights Reserved.\r"},{"line_number":3,"context_line":"#\r"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_32500e32","line":1,"updated":"2016-12-06 15:36:42.000000000","message":"This file is formatted with dos endlines, please fix it to use unix-style endlines.","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"6bccadfc6fff0ad39f16d5f44794c89cceaecedd","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2016 QNAP Systems, Inc.\r"},{"line_number":2,"context_line":"# All Rights Reserved.\r"},{"line_number":3,"context_line":"#\r"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_2ba40606","line":1,"in_reply_to":"3a71b18c_32500e32","updated":"2016-12-07 03:28:50.000000000","message":"Done","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7471f8c31558863470a1d5cf474ccfee0b6ef08b","unresolved":false,"context_lines":[{"line_number":20,"context_line":"import eventlet\r"},{"line_number":21,"context_line":"import functools\r"},{"line_number":22,"context_line":"import re\r"},{"line_number":23,"context_line":"import six\r"},{"line_number":24,"context_line":"import ssl\r"},{"line_number":25,"context_line":"import time\r"},{"line_number":26,"context_line":"try:\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_4f2cfc98","line":23,"updated":"2016-12-06 18:36:59.000000000","message":"six is 3rd party lib.  should be moved down to the same import group with oslo libs.","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"6bccadfc6fff0ad39f16d5f44794c89cceaecedd","unresolved":false,"context_lines":[{"line_number":20,"context_line":"import eventlet\r"},{"line_number":21,"context_line":"import functools\r"},{"line_number":22,"context_line":"import re\r"},{"line_number":23,"context_line":"import six\r"},{"line_number":24,"context_line":"import ssl\r"},{"line_number":25,"context_line":"import time\r"},{"line_number":26,"context_line":"try:\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_0ba10af8","line":23,"in_reply_to":"3a71b18c_4f2cfc98","updated":"2016-12-07 03:28:50.000000000","message":"Done","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"20988d85e0188d12150c5a254cb57a026020ef29","unresolved":false,"context_lines":[{"line_number":43,"context_line":"LOG \u003d logging.getLogger(__name__)\r"},{"line_number":44,"context_line":"\r"},{"line_number":45,"context_line":"qnap_opts \u003d [\r"},{"line_number":46,"context_line":"    cfg.StrOpt(\u0027qnap_management_url\u0027,\r"},{"line_number":47,"context_line":"               help\u003d\u0027The URL to management QNAP Storage\u0027),\r"},{"line_number":48,"context_line":"    cfg.StrOpt(\u0027iscsi_ip\u0027,\r"},{"line_number":49,"context_line":"               help\u003d\u0027San iSCSI IP for QNAP storage\u0027),\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_7214464c","line":46,"updated":"2016-12-06 15:36:42.000000000","message":"This should be a URIOpt instead of StrOpt.","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"6bccadfc6fff0ad39f16d5f44794c89cceaecedd","unresolved":false,"context_lines":[{"line_number":43,"context_line":"LOG \u003d logging.getLogger(__name__)\r"},{"line_number":44,"context_line":"\r"},{"line_number":45,"context_line":"qnap_opts \u003d [\r"},{"line_number":46,"context_line":"    cfg.StrOpt(\u0027qnap_management_url\u0027,\r"},{"line_number":47,"context_line":"               help\u003d\u0027The URL to management QNAP Storage\u0027),\r"},{"line_number":48,"context_line":"    cfg.StrOpt(\u0027iscsi_ip\u0027,\r"},{"line_number":49,"context_line":"               help\u003d\u0027San iSCSI IP for QNAP storage\u0027),\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_2bb3260b","line":46,"in_reply_to":"3a71b18c_7214464c","updated":"2016-12-07 03:28:50.000000000","message":"Done","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"20988d85e0188d12150c5a254cb57a026020ef29","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    cfg.StrOpt(\u0027qnap_management_url\u0027,\r"},{"line_number":47,"context_line":"               help\u003d\u0027The URL to management QNAP Storage\u0027),\r"},{"line_number":48,"context_line":"    cfg.StrOpt(\u0027iscsi_ip\u0027,\r"},{"line_number":49,"context_line":"               help\u003d\u0027San iSCSI IP for QNAP storage\u0027),\r"},{"line_number":50,"context_line":"    cfg.IntOpt(\u0027qnap_server_port\u0027,\r"},{"line_number":51,"context_line":"               help\u003d\u0027Management Port for QNAP storage\u0027),\r"},{"line_number":52,"context_line":"    cfg.StrOpt(\u0027qnap_poolname\u0027,\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_f2a4d64b","line":49,"updated":"2016-12-06 15:36:42.000000000","message":"This should reuse the existing iscsi_ip_address option, no need to introduce another one.","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"6bccadfc6fff0ad39f16d5f44794c89cceaecedd","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    cfg.StrOpt(\u0027qnap_management_url\u0027,\r"},{"line_number":47,"context_line":"               help\u003d\u0027The URL to management QNAP Storage\u0027),\r"},{"line_number":48,"context_line":"    cfg.StrOpt(\u0027iscsi_ip\u0027,\r"},{"line_number":49,"context_line":"               help\u003d\u0027San iSCSI IP for QNAP storage\u0027),\r"},{"line_number":50,"context_line":"    cfg.IntOpt(\u0027qnap_server_port\u0027,\r"},{"line_number":51,"context_line":"               help\u003d\u0027Management Port for QNAP storage\u0027),\r"},{"line_number":52,"context_line":"    cfg.StrOpt(\u0027qnap_poolname\u0027,\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_816b391d","line":49,"in_reply_to":"3a71b18c_ef6148d4","updated":"2016-12-07 03:28:50.000000000","message":"Done","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7471f8c31558863470a1d5cf474ccfee0b6ef08b","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    cfg.StrOpt(\u0027qnap_management_url\u0027,\r"},{"line_number":47,"context_line":"               help\u003d\u0027The URL to management QNAP Storage\u0027),\r"},{"line_number":48,"context_line":"    cfg.StrOpt(\u0027iscsi_ip\u0027,\r"},{"line_number":49,"context_line":"               help\u003d\u0027San iSCSI IP for QNAP storage\u0027),\r"},{"line_number":50,"context_line":"    cfg.IntOpt(\u0027qnap_server_port\u0027,\r"},{"line_number":51,"context_line":"               help\u003d\u0027Management Port for QNAP storage\u0027),\r"},{"line_number":52,"context_line":"    cfg.StrOpt(\u0027qnap_poolname\u0027,\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_ef6148d4","line":49,"in_reply_to":"3a71b18c_f2a4d64b","updated":"2016-12-06 18:36:59.000000000","message":"+1","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"20988d85e0188d12150c5a254cb57a026020ef29","unresolved":false,"context_lines":[{"line_number":51,"context_line":"               help\u003d\u0027Management Port for QNAP storage\u0027),\r"},{"line_number":52,"context_line":"    cfg.StrOpt(\u0027qnap_poolname\u0027,\r"},{"line_number":53,"context_line":"               help\u003d\u0027The pool name in the QNAP Storage\u0027),\r"},{"line_number":54,"context_line":"    cfg.StrOpt(\u0027qnap_storage_protocol\u0027,\r"},{"line_number":55,"context_line":"               default\u003d\u0027iscsi\u0027,\r"},{"line_number":56,"context_line":"               help\u003d\u0027Communication protocol to access QNAP storage\u0027),\r"},{"line_number":57,"context_line":"]\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_d257da23","line":54,"updated":"2016-12-06 15:36:42.000000000","message":"This option is not used anywhere, it should be removed.","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"6bccadfc6fff0ad39f16d5f44794c89cceaecedd","unresolved":false,"context_lines":[{"line_number":51,"context_line":"               help\u003d\u0027Management Port for QNAP storage\u0027),\r"},{"line_number":52,"context_line":"    cfg.StrOpt(\u0027qnap_poolname\u0027,\r"},{"line_number":53,"context_line":"               help\u003d\u0027The pool name in the QNAP Storage\u0027),\r"},{"line_number":54,"context_line":"    cfg.StrOpt(\u0027qnap_storage_protocol\u0027,\r"},{"line_number":55,"context_line":"               default\u003d\u0027iscsi\u0027,\r"},{"line_number":56,"context_line":"               help\u003d\u0027Communication protocol to access QNAP storage\u0027),\r"},{"line_number":57,"context_line":"]\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_c6170743","line":54,"in_reply_to":"3a71b18c_d257da23","updated":"2016-12-07 03:28:50.000000000","message":"We use the option in get_volume_stats. I hot code the protocol with \u0027iscsi\u0027 in the method. I have modified it. Thanks!","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"08b5bfd8196cb0ca81522889027e4121a782a374","unresolved":false,"context_lines":[{"line_number":117,"context_line":"            LOG.error(_LE(\u0027Failed to create HTTP client. \u0027\r"},{"line_number":118,"context_line":"                          \u0027Check ip, port, username, password\u0027\r"},{"line_number":119,"context_line":"                          \u0027 and make sure the array version is compatible\u0027))\r"},{"line_number":120,"context_line":"            msg \u003d \u0027Failed to create HTTP client.\u0027\r"},{"line_number":121,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)\r"},{"line_number":122,"context_line":"\r"},{"line_number":123,"context_line":"    def check_for_setup_error(self):\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_2f2fc03f","line":120,"updated":"2016-12-06 18:49:17.000000000","message":"Need _(\u0027xxxx\u0027).","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"6bccadfc6fff0ad39f16d5f44794c89cceaecedd","unresolved":false,"context_lines":[{"line_number":117,"context_line":"            LOG.error(_LE(\u0027Failed to create HTTP client. \u0027\r"},{"line_number":118,"context_line":"                          \u0027Check ip, port, username, password\u0027\r"},{"line_number":119,"context_line":"                          \u0027 and make sure the array version is compatible\u0027))\r"},{"line_number":120,"context_line":"            msg \u003d \u0027Failed to create HTTP client.\u0027\r"},{"line_number":121,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)\r"},{"line_number":122,"context_line":"\r"},{"line_number":123,"context_line":"    def check_for_setup_error(self):\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_06c01f4f","line":120,"in_reply_to":"3a71b18c_2f2fc03f","updated":"2016-12-07 03:28:50.000000000","message":"Done","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"08b5bfd8196cb0ca81522889027e4121a782a374","unresolved":false,"context_lines":[{"line_number":483,"context_line":"        snap_metadata \u003d snapshot[\u0027metadata\u0027]\r"},{"line_number":484,"context_line":"        if \u0027snapshot_id\u0027 not in snap_metadata:\r"},{"line_number":485,"context_line":"            LOG.debug(\u0027Metadata of the snapshot is invalid\u0027)\r"},{"line_number":486,"context_line":"            msg \u003d \u0027Metadata of the snapshot is invalid\u0027\r"},{"line_number":487,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)\r"},{"line_number":488,"context_line":"        LOG.debug(\u0027snapshot_id: %s\u0027, snap_metadata[\u0027snapshot_id\u0027])\r"},{"line_number":489,"context_line":"        snapshot_id \u003d snap_metadata[\u0027snapshot_id\u0027]\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_4fa79cbc","line":486,"updated":"2016-12-06 18:49:17.000000000","message":"Need _","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"6bccadfc6fff0ad39f16d5f44794c89cceaecedd","unresolved":false,"context_lines":[{"line_number":483,"context_line":"        snap_metadata \u003d snapshot[\u0027metadata\u0027]\r"},{"line_number":484,"context_line":"        if \u0027snapshot_id\u0027 not in snap_metadata:\r"},{"line_number":485,"context_line":"            LOG.debug(\u0027Metadata of the snapshot is invalid\u0027)\r"},{"line_number":486,"context_line":"            msg \u003d \u0027Metadata of the snapshot is invalid\u0027\r"},{"line_number":487,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)\r"},{"line_number":488,"context_line":"        LOG.debug(\u0027snapshot_id: %s\u0027, snap_metadata[\u0027snapshot_id\u0027])\r"},{"line_number":489,"context_line":"        snapshot_id \u003d snap_metadata[\u0027snapshot_id\u0027]\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_46b697f9","line":486,"in_reply_to":"3a71b18c_4fa79cbc","updated":"2016-12-07 03:28:50.000000000","message":"Done","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"08b5bfd8196cb0ca81522889027e4121a782a374","unresolved":false,"context_lines":[{"line_number":737,"context_line":"        LOG.debug(\u0027LUNStatus: %s\u0027, selected_lun.find(\u0027LUNStatus\u0027).text)\r"},{"line_number":738,"context_line":"        LOG.debug(\u0027lun_status.mapped: %s\u0027, str(lun_status.mapped))\r"},{"line_number":739,"context_line":"        # lun does not map to any target\r"},{"line_number":740,"context_line":"        if selected_lun.find(\u0027LUNStatus\u0027).text !\u003d str(lun_status.mapped):\r"},{"line_number":741,"context_line":"            return\r"},{"line_number":742,"context_line":"\r"},{"line_number":743,"context_line":"        target_index \u003d (selected_lun.find(\u0027LUNTargetList\u0027)\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_2f8b4020","line":740,"updated":"2016-12-06 18:49:17.000000000","message":"str -\u003e six.text_type","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"6bccadfc6fff0ad39f16d5f44794c89cceaecedd","unresolved":false,"context_lines":[{"line_number":737,"context_line":"        LOG.debug(\u0027LUNStatus: %s\u0027, selected_lun.find(\u0027LUNStatus\u0027).text)\r"},{"line_number":738,"context_line":"        LOG.debug(\u0027lun_status.mapped: %s\u0027, str(lun_status.mapped))\r"},{"line_number":739,"context_line":"        # lun does not map to any target\r"},{"line_number":740,"context_line":"        if selected_lun.find(\u0027LUNStatus\u0027).text !\u003d str(lun_status.mapped):\r"},{"line_number":741,"context_line":"            return\r"},{"line_number":742,"context_line":"\r"},{"line_number":743,"context_line":"        target_index \u003d (selected_lun.find(\u0027LUNTargetList\u0027)\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_e68a431a","line":740,"in_reply_to":"3a71b18c_2f8b4020","updated":"2016-12-07 03:28:50.000000000","message":"Done","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"08b5bfd8196cb0ca81522889027e4121a782a374","unresolved":false,"context_lines":[{"line_number":984,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":985,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":986,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":987,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":988,"context_line":"        # dataset is busy, retry to delete\r"},{"line_number":989,"context_line":"        if root.find(\u0027result\u0027).text \u003d\u003d data_set_is_busy:\r"},{"line_number":990,"context_line":"            return True\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_6f98d86a","line":987,"updated":"2016-12-06 18:49:17.000000000","message":"Need _","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"6bccadfc6fff0ad39f16d5f44794c89cceaecedd","unresolved":false,"context_lines":[{"line_number":984,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":985,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":986,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":987,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":988,"context_line":"        # dataset is busy, retry to delete\r"},{"line_number":989,"context_line":"        if root.find(\u0027result\u0027).text \u003d\u003d data_set_is_busy:\r"},{"line_number":990,"context_line":"            return True\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_463db7db","line":987,"in_reply_to":"3a71b18c_6f98d86a","updated":"2016-12-07 03:28:50.000000000","message":"Done","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"08b5bfd8196cb0ca81522889027e4121a782a374","unresolved":false,"context_lines":[{"line_number":1069,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1070,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":1071,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1072,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1073,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1074,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1075,"context_line":"                data\u003d(\u0027Add target acl failed\u0027))\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_8fb294e3","line":1072,"updated":"2016-12-06 18:49:17.000000000","message":"Need _","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"6bccadfc6fff0ad39f16d5f44794c89cceaecedd","unresolved":false,"context_lines":[{"line_number":1069,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1070,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":1071,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1072,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1073,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1074,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1075,"context_line":"                data\u003d(\u0027Add target acl failed\u0027))\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_2108a527","line":1072,"in_reply_to":"3a71b18c_8fb294e3","updated":"2016-12-07 03:28:50.000000000","message":"Done","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"08b5bfd8196cb0ca81522889027e4121a782a374","unresolved":false,"context_lines":[{"line_number":1072,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1073,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1074,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1075,"context_line":"                data\u003d(\u0027Add target acl failed\u0027))\r"},{"line_number":1076,"context_line":"\r"},{"line_number":1077,"context_line":"    def remove_target_init(self, target_iqn, init_iqn):\r"},{"line_number":1078,"context_line":"        \"\"\"Remote target acl.\"\"\"\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_afcd9067","line":1075,"updated":"2016-12-06 18:49:17.000000000","message":"Need _","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"6bccadfc6fff0ad39f16d5f44794c89cceaecedd","unresolved":false,"context_lines":[{"line_number":1072,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1073,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1074,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1075,"context_line":"                data\u003d(\u0027Add target acl failed\u0027))\r"},{"line_number":1076,"context_line":"\r"},{"line_number":1077,"context_line":"    def remove_target_init(self, target_iqn, init_iqn):\r"},{"line_number":1078,"context_line":"        \"\"\"Remote target acl.\"\"\"\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_61161d4d","line":1075,"in_reply_to":"3a71b18c_afcd9067","updated":"2016-12-07 03:28:50.000000000","message":"Done","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"08b5bfd8196cb0ca81522889027e4121a782a374","unresolved":false,"context_lines":[{"line_number":1093,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1094,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":1095,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1096,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1097,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1098,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1099,"context_line":"                data\u003d(\u0027Map lun \u0027 + lun_index +\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_0fbf64aa","line":1096,"updated":"2016-12-06 18:49:17.000000000","message":"Need _","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"6bccadfc6fff0ad39f16d5f44794c89cceaecedd","unresolved":false,"context_lines":[{"line_number":1093,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1094,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":1095,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1096,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1097,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1098,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1099,"context_line":"                data\u003d(\u0027Map lun \u0027 + lun_index +\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_a11cb56a","line":1096,"in_reply_to":"3a71b18c_0fbf64aa","updated":"2016-12-07 03:28:50.000000000","message":"Done","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"08b5bfd8196cb0ca81522889027e4121a782a374","unresolved":false,"context_lines":[{"line_number":1096,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1097,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1098,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1099,"context_line":"                data\u003d(\u0027Map lun \u0027 + lun_index +\r"},{"line_number":1100,"context_line":"                      \u0027 to target \u0027 + target_index +\r"},{"line_number":1101,"context_line":"                      \u0027 failed\u0027))\r"},{"line_number":1102,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_8fe9b4b9","line":1099,"updated":"2016-12-06 18:49:17.000000000","message":"Need _\n\nPlease don\u0027t use \"+\".  Use string substitution instead.","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"6bccadfc6fff0ad39f16d5f44794c89cceaecedd","unresolved":false,"context_lines":[{"line_number":1096,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1097,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1098,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1099,"context_line":"                data\u003d(\u0027Map lun \u0027 + lun_index +\r"},{"line_number":1100,"context_line":"                      \u0027 to target \u0027 + target_index +\r"},{"line_number":1101,"context_line":"                      \u0027 failed\u0027))\r"},{"line_number":1102,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_c117f142","line":1099,"in_reply_to":"3a71b18c_8fe9b4b9","updated":"2016-12-07 03:28:50.000000000","message":"Done","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"08b5bfd8196cb0ca81522889027e4121a782a374","unresolved":false,"context_lines":[{"line_number":1114,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1115,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":1116,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1117,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1118,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1119,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1120,"context_line":"                data\u003d(\u0027Disable lun \u0027 + lun_index +\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_2f07c082","line":1117,"updated":"2016-12-06 18:49:17.000000000","message":"Need _","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"6bccadfc6fff0ad39f16d5f44794c89cceaecedd","unresolved":false,"context_lines":[{"line_number":1114,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1115,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":1116,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1117,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1118,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1119,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1120,"context_line":"                data\u003d(\u0027Disable lun \u0027 + lun_index +\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_e1286d88","line":1117,"in_reply_to":"3a71b18c_2f07c082","updated":"2016-12-07 03:28:50.000000000","message":"Done","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"08b5bfd8196cb0ca81522889027e4121a782a374","unresolved":false,"context_lines":[{"line_number":1118,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1119,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1120,"context_line":"                data\u003d(\u0027Disable lun \u0027 + lun_index +\r"},{"line_number":1121,"context_line":"                      \u0027 from target \u0027 + target_index + \u0027 failed\u0027))\r"},{"line_number":1122,"context_line":"\r"},{"line_number":1123,"context_line":"    @_connection_checker\r"},{"line_number":1124,"context_line":"    def unmap_lun(self, lun_index, target_index):\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_efda2816","line":1121,"updated":"2016-12-06 18:49:17.000000000","message":"Need _\n\nPlease don\u0027t use \"+\".  Use string substitution instead.","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"6bccadfc6fff0ad39f16d5f44794c89cceaecedd","unresolved":false,"context_lines":[{"line_number":1118,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1119,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1120,"context_line":"                data\u003d(\u0027Disable lun \u0027 + lun_index +\r"},{"line_number":1121,"context_line":"                      \u0027 from target \u0027 + target_index + \u0027 failed\u0027))\r"},{"line_number":1122,"context_line":"\r"},{"line_number":1123,"context_line":"    @_connection_checker\r"},{"line_number":1124,"context_line":"    def unmap_lun(self, lun_index, target_index):\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_012c8997","line":1121,"in_reply_to":"3a71b18c_efda2816","updated":"2016-12-07 03:28:50.000000000","message":"Done","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"08b5bfd8196cb0ca81522889027e4121a782a374","unresolved":false,"context_lines":[{"line_number":1133,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1134,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":1135,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1136,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1137,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1138,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1139,"context_line":"                data\u003d(\u0027Unmap lun \u0027 + lun_index +\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_4f0a3c8b","line":1136,"updated":"2016-12-06 18:49:17.000000000","message":"Need _","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"6bccadfc6fff0ad39f16d5f44794c89cceaecedd","unresolved":false,"context_lines":[{"line_number":1133,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1134,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":1135,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1136,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1137,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1138,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1139,"context_line":"                data\u003d(\u0027Unmap lun \u0027 + lun_index +\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_e14f8d68","line":1136,"in_reply_to":"3a71b18c_4f0a3c8b","updated":"2016-12-07 03:28:50.000000000","message":"Done","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"08b5bfd8196cb0ca81522889027e4121a782a374","unresolved":false,"context_lines":[{"line_number":1137,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1138,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1139,"context_line":"                data\u003d(\u0027Unmap lun \u0027 + lun_index +\r"},{"line_number":1140,"context_line":"                      \u0027 from target \u0027 + target_index + \u0027 failed\u0027))\r"},{"line_number":1141,"context_line":"\r"},{"line_number":1142,"context_line":"    @_connection_checker\r"},{"line_number":1143,"context_line":"    def get_iscsi_portal_info(self):\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_8f00d467","line":1140,"updated":"2016-12-06 18:49:17.000000000","message":"Need _\n\nPlease don\u0027t use \"+\".  Use string substitution instead.","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"6bccadfc6fff0ad39f16d5f44794c89cceaecedd","unresolved":false,"context_lines":[{"line_number":1137,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1138,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1139,"context_line":"                data\u003d(\u0027Unmap lun \u0027 + lun_index +\r"},{"line_number":1140,"context_line":"                      \u0027 from target \u0027 + target_index + \u0027 failed\u0027))\r"},{"line_number":1141,"context_line":"\r"},{"line_number":1142,"context_line":"    @_connection_checker\r"},{"line_number":1143,"context_line":"    def get_iscsi_portal_info(self):\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_0153a917","line":1140,"in_reply_to":"3a71b18c_8f00d467","updated":"2016-12-07 03:28:50.000000000","message":"Done","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"08b5bfd8196cb0ca81522889027e4121a782a374","unresolved":false,"context_lines":[{"line_number":1170,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1171,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":1172,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1173,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1174,"context_line":"\r"},{"line_number":1175,"context_line":"        if ((\u0027LUNIndex\u0027 in kwargs) or (\u0027LUNName\u0027 in kwargs) or\r"},{"line_number":1176,"context_line":"           (\u0027LUNNAA\u0027 in kwargs)):\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_eff14896","line":1173,"updated":"2016-12-06 18:49:17.000000000","message":"Need _","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"6bccadfc6fff0ad39f16d5f44794c89cceaecedd","unresolved":false,"context_lines":[{"line_number":1170,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1171,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":1172,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1173,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1174,"context_line":"\r"},{"line_number":1175,"context_line":"        if ((\u0027LUNIndex\u0027 in kwargs) or (\u0027LUNName\u0027 in kwargs) or\r"},{"line_number":1176,"context_line":"           (\u0027LUNNAA\u0027 in kwargs)):\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_c1453143","line":1173,"in_reply_to":"3a71b18c_eff14896","updated":"2016-12-07 03:28:50.000000000","message":"Done","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"08b5bfd8196cb0ca81522889027e4121a782a374","unresolved":false,"context_lines":[{"line_number":1212,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1213,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":1214,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1215,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1216,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1217,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1218,"context_line":"                data\u003d(\u0027Unexpected response from QNAP API\u0027))\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_2f2ee0fa","line":1215,"updated":"2016-12-06 18:49:17.000000000","message":"Need _","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"6bccadfc6fff0ad39f16d5f44794c89cceaecedd","unresolved":false,"context_lines":[{"line_number":1212,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1213,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":1214,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1215,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1216,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1217,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1218,"context_line":"                data\u003d(\u0027Unexpected response from QNAP API\u0027))\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_e176ada2","line":1215,"in_reply_to":"3a71b18c_2f2ee0fa","updated":"2016-12-07 03:28:50.000000000","message":"Done","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"08b5bfd8196cb0ca81522889027e4121a782a374","unresolved":false,"context_lines":[{"line_number":1215,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1216,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1217,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1218,"context_line":"                data\u003d(\u0027Unexpected response from QNAP API\u0027))\r"},{"line_number":1219,"context_line":"\r"},{"line_number":1220,"context_line":"        snapshot_list \u003d root.find(\u0027SnapshotList\u0027)\r"},{"line_number":1221,"context_line":"        if snapshot_list is None:\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_6f345849","line":1218,"updated":"2016-12-06 18:49:17.000000000","message":"Need _","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"6bccadfc6fff0ad39f16d5f44794c89cceaecedd","unresolved":false,"context_lines":[{"line_number":1215,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1216,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1217,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1218,"context_line":"                data\u003d(\u0027Unexpected response from QNAP API\u0027))\r"},{"line_number":1219,"context_line":"\r"},{"line_number":1220,"context_line":"        snapshot_list \u003d root.find(\u0027SnapshotList\u0027)\r"},{"line_number":1221,"context_line":"        if snapshot_list is None:\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_417041a4","line":1218,"in_reply_to":"3a71b18c_6f345849","updated":"2016-12-07 03:28:50.000000000","message":"Done","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"08b5bfd8196cb0ca81522889027e4121a782a374","unresolved":false,"context_lines":[{"line_number":1245,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1246,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":1247,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1248,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1249,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1250,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1251,"context_line":"                data\u003d(\u0027create snapshot failed\u0027))\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_cf3d6c2c","line":1248,"updated":"2016-12-06 18:49:17.000000000","message":"Need _","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"6bccadfc6fff0ad39f16d5f44794c89cceaecedd","unresolved":false,"context_lines":[{"line_number":1245,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1246,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":1247,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1248,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1249,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1250,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1251,"context_line":"                data\u003d(\u0027create snapshot failed\u0027))\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_616b7db7","line":1248,"in_reply_to":"3a71b18c_cf3d6c2c","updated":"2016-12-07 03:28:50.000000000","message":"Done","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"08b5bfd8196cb0ca81522889027e4121a782a374","unresolved":false,"context_lines":[{"line_number":1248,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1249,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1250,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1251,"context_line":"                data\u003d(\u0027create snapshot failed\u0027))\r"},{"line_number":1252,"context_line":"\r"},{"line_number":1253,"context_line":"    @_connection_checker\r"},{"line_number":1254,"context_line":"    def api_delete_snapshot(self, snapshot_id):\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_2f15009b","line":1251,"updated":"2016-12-06 18:49:17.000000000","message":"Need _","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"6bccadfc6fff0ad39f16d5f44794c89cceaecedd","unresolved":false,"context_lines":[{"line_number":1248,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1249,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1250,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1251,"context_line":"                data\u003d(\u0027create snapshot failed\u0027))\r"},{"line_number":1252,"context_line":"\r"},{"line_number":1253,"context_line":"    @_connection_checker\r"},{"line_number":1254,"context_line":"    def api_delete_snapshot(self, snapshot_id):\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_a16115d5","line":1251,"in_reply_to":"3a71b18c_2f15009b","updated":"2016-12-07 03:28:50.000000000","message":"Done","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"08b5bfd8196cb0ca81522889027e4121a782a374","unresolved":false,"context_lines":[{"line_number":1262,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1263,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":1264,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1265,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1266,"context_line":"        # snapshot not exist\r"},{"line_number":1267,"context_line":"        if root.find(\u0027result\u0027).text \u003d\u003d \u0027-206021\u0027:\r"},{"line_number":1268,"context_line":"            return\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_4f187cd3","line":1265,"updated":"2016-12-06 18:49:17.000000000","message":"Need _","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"6bccadfc6fff0ad39f16d5f44794c89cceaecedd","unresolved":false,"context_lines":[{"line_number":1262,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1263,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":1264,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1265,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1266,"context_line":"        # snapshot not exist\r"},{"line_number":1267,"context_line":"        if root.find(\u0027result\u0027).text \u003d\u003d \u0027-206021\u0027:\r"},{"line_number":1268,"context_line":"            return\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_c15c511b","line":1265,"in_reply_to":"3a71b18c_4f187cd3","updated":"2016-12-07 03:28:50.000000000","message":"Done","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"08b5bfd8196cb0ca81522889027e4121a782a374","unresolved":false,"context_lines":[{"line_number":1271,"context_line":"            return\r"},{"line_number":1272,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1273,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1274,"context_line":"                data\u003d(\u0027delete snapshot \u0027 + snapshot_id + \u0027 failed\u0027))\r"},{"line_number":1275,"context_line":"\r"},{"line_number":1276,"context_line":"    @_connection_checker\r"},{"line_number":1277,"context_line":"    def clone_snapshot(self, snapshot_id, new_lunname):\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_6f0b787d","line":1274,"updated":"2016-12-06 18:49:17.000000000","message":"Need _\n\nPlease don\u0027t use \"+\".  Use string substitution instead.","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"6bccadfc6fff0ad39f16d5f44794c89cceaecedd","unresolved":false,"context_lines":[{"line_number":1271,"context_line":"            return\r"},{"line_number":1272,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1273,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1274,"context_line":"                data\u003d(\u0027delete snapshot \u0027 + snapshot_id + \u0027 failed\u0027))\r"},{"line_number":1275,"context_line":"\r"},{"line_number":1276,"context_line":"    @_connection_checker\r"},{"line_number":1277,"context_line":"    def clone_snapshot(self, snapshot_id, new_lunname):\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_01a1e9f7","line":1274,"in_reply_to":"3a71b18c_6f0b787d","updated":"2016-12-07 03:28:50.000000000","message":"Done","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"08b5bfd8196cb0ca81522889027e4121a782a374","unresolved":false,"context_lines":[{"line_number":1287,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1288,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":1289,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1290,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1291,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1292,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1293,"context_line":"                data\u003d(\u0027Clone lun \u0027 + new_lunname +\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_6f8298c9","line":1290,"updated":"2016-12-06 18:49:17.000000000","message":"Need _","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"6bccadfc6fff0ad39f16d5f44794c89cceaecedd","unresolved":false,"context_lines":[{"line_number":1287,"context_line":"        root \u003d ET.fromstring(res_details[\u0027data\u0027])\r"},{"line_number":1288,"context_line":"        if root.find(\u0027authPassed\u0027).text \u003d\u003d \u00270\u0027:\r"},{"line_number":1289,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1290,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1291,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1292,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1293,"context_line":"                data\u003d(\u0027Clone lun \u0027 + new_lunname +\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_41a7610a","line":1290,"in_reply_to":"3a71b18c_6f8298c9","updated":"2016-12-07 03:28:50.000000000","message":"Done","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"08b5bfd8196cb0ca81522889027e4121a782a374","unresolved":false,"context_lines":[{"line_number":1291,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1292,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1293,"context_line":"                data\u003d(\u0027Clone lun \u0027 + new_lunname +\r"},{"line_number":1294,"context_line":"                      \u0027 from snapshot \u0027 + snapshot_id + \u0027 failed\u0027))\r"},{"line_number":1295,"context_line":"\r"},{"line_number":1296,"context_line":"    @_connection_checker\r"},{"line_number":1297,"context_line":"    def edit_lun(self, lun):\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_0f1be4ca","line":1294,"updated":"2016-12-06 18:49:17.000000000","message":"Need _\n\nPlease don\u0027t use \"+\".  Use string substitution instead.","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"6bccadfc6fff0ad39f16d5f44794c89cceaecedd","unresolved":false,"context_lines":[{"line_number":1291,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1292,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1293,"context_line":"                data\u003d(\u0027Clone lun \u0027 + new_lunname +\r"},{"line_number":1294,"context_line":"                      \u0027 from snapshot \u0027 + snapshot_id + \u0027 failed\u0027))\r"},{"line_number":1295,"context_line":"\r"},{"line_number":1296,"context_line":"    @_connection_checker\r"},{"line_number":1297,"context_line":"    def edit_lun(self, lun):\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_61b29d4d","line":1294,"in_reply_to":"3a71b18c_0f1be4ca","updated":"2016-12-07 03:28:50.000000000","message":"Done","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"08b5bfd8196cb0ca81522889027e4121a782a374","unresolved":false,"context_lines":[{"line_number":1318,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1319,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1320,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1321,"context_line":"                data\u003d(\u0027Extend lun \u0027 + lun[\u0027LUNIndex\u0027] + \u0027 failed\u0027))\r"},{"line_number":1322,"context_line":"\r"},{"line_number":1323,"context_line":"    @_connection_checker\r"},{"line_number":1324,"context_line":"    def get_all_iscsi_portal_setting(self):\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_cf6bac1c","line":1321,"updated":"2016-12-06 18:49:17.000000000","message":"Same","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"6bccadfc6fff0ad39f16d5f44794c89cceaecedd","unresolved":false,"context_lines":[{"line_number":1318,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1319,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1320,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1321,"context_line":"                data\u003d(\u0027Extend lun \u0027 + lun[\u0027LUNIndex\u0027] + \u0027 failed\u0027))\r"},{"line_number":1322,"context_line":"\r"},{"line_number":1323,"context_line":"    @_connection_checker\r"},{"line_number":1324,"context_line":"    def get_all_iscsi_portal_setting(self):\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_81adf9ea","line":1321,"in_reply_to":"3a71b18c_cf6bac1c","updated":"2016-12-07 03:28:50.000000000","message":"Done","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"08b5bfd8196cb0ca81522889027e4121a782a374","unresolved":false,"context_lines":[{"line_number":1387,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1388,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1389,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1390,"context_line":"                data\u003d(\u0027Get target info failed\u0027))\r"},{"line_number":1391,"context_line":"\r"},{"line_number":1392,"context_line":"        target_list \u003d root.find(\u0027targetInfo\u0027)\r"},{"line_number":1393,"context_line":"        target_tree \u003d target_list.findall(\u0027row\u0027)\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_0f720411","line":1390,"updated":"2016-12-06 18:49:17.000000000","message":"same","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"6bccadfc6fff0ad39f16d5f44794c89cceaecedd","unresolved":false,"context_lines":[{"line_number":1387,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1388,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1389,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1390,"context_line":"                data\u003d(\u0027Get target info failed\u0027))\r"},{"line_number":1391,"context_line":"\r"},{"line_number":1392,"context_line":"        target_list \u003d root.find(\u0027targetInfo\u0027)\r"},{"line_number":1393,"context_line":"        target_tree \u003d target_list.findall(\u0027row\u0027)\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_c1b3714b","line":1390,"in_reply_to":"3a71b18c_0f720411","updated":"2016-12-07 03:28:50.000000000","message":"Done","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"08b5bfd8196cb0ca81522889027e4121a782a374","unresolved":false,"context_lines":[{"line_number":1420,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1421,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1422,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1423,"context_line":"                data\u003d(\u0027Remove target acl failed\u0027))\r"},{"line_number":1424,"context_line":"\r"},{"line_number":1425,"context_line":"    @_connection_checker\r"},{"line_number":1426,"context_line":"    def get_target_info(self, target_index):\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_af575056","line":1423,"updated":"2016-12-06 18:49:17.000000000","message":"same.\n\nPlease do a search and fixes all places.","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":21829,"name":"sunkist0429","email":"sunkist0429@gmail.com","username":"sunkist0429"},"change_message_id":"6bccadfc6fff0ad39f16d5f44794c89cceaecedd","unresolved":false,"context_lines":[{"line_number":1420,"context_line":"                data\u003d(\u0027Session id expired\u0027))\r"},{"line_number":1421,"context_line":"        if root.find(\u0027result\u0027).text \u003c \u00270\u0027:\r"},{"line_number":1422,"context_line":"            raise exception.VolumeBackendAPIException(\r"},{"line_number":1423,"context_line":"                data\u003d(\u0027Remove target acl failed\u0027))\r"},{"line_number":1424,"context_line":"\r"},{"line_number":1425,"context_line":"    @_connection_checker\r"},{"line_number":1426,"context_line":"    def get_target_info(self, target_index):\r"}],"source_content_type":"text/x-python","patch_set":38,"id":"3a71b18c_417e816a","line":1423,"in_reply_to":"3a71b18c_af575056","updated":"2016-12-07 03:28:50.000000000","message":"Done","commit_id":"35d5952214f068644f169be9484a7eaa572345d2"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"9292b3faacb50bdfa9bd8ed456cb9ada2180d11d","unresolved":false,"context_lines":[{"line_number":391,"context_line":""},{"line_number":392,"context_line":"            try_times \u003d try_times + 3"},{"line_number":393,"context_line":"            eventlet.sleep(time_interval)"},{"line_number":394,"context_line":"            if(try_times \u003e max_wait_sec or lun_naa is not None):"},{"line_number":395,"context_line":"                break"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"        LOG.debug(\u0027LUNNAA: %s\u0027, lun_naa)"}],"source_content_type":"text/x-python","patch_set":42,"id":"3a71b18c_f0170052","line":394,"updated":"2016-12-08 16:31:59.000000000","message":"Add space after \"if\" if you do another update.","commit_id":"f6342d029ece2872c47857da68c20e141b17f464"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"9292b3faacb50bdfa9bd8ed456cb9ada2180d11d","unresolved":false,"context_lines":[{"line_number":435,"context_line":""},{"line_number":436,"context_line":"            try_times \u003d try_times + 3"},{"line_number":437,"context_line":"            eventlet.sleep(time_interval)"},{"line_number":438,"context_line":"            if(try_times \u003e max_wait_sec or created_snapshot is not None):"},{"line_number":439,"context_line":"                break"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"        LOG.debug(\u0027created_snapshot: %s\u0027, created_snapshot)"}],"source_content_type":"text/x-python","patch_set":42,"id":"3a71b18c_700cd042","line":438,"updated":"2016-12-08 16:31:59.000000000","message":"Same.","commit_id":"f6342d029ece2872c47857da68c20e141b17f464"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"9292b3faacb50bdfa9bd8ed456cb9ada2180d11d","unresolved":false,"context_lines":[{"line_number":492,"context_line":""},{"line_number":493,"context_line":"            try_times \u003d try_times + 3"},{"line_number":494,"context_line":"            eventlet.sleep(time_interval)"},{"line_number":495,"context_line":"            if(try_times \u003e max_wait_sec or lun_naa is not None):"},{"line_number":496,"context_line":"                break"},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"        if (volume[\u0027size\u0027] \u003e snapshot[\u0027volume_size\u0027]):"}],"source_content_type":"text/x-python","patch_set":42,"id":"3a71b18c_0b50d109","line":495,"updated":"2016-12-08 16:31:59.000000000","message":"Most of these could also get rid of the outer ()","commit_id":"f6342d029ece2872c47857da68c20e141b17f464"}]}
