)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"7426e85927001ceeca33ab5d7e44e789f0d860b9","unresolved":false,"context_lines":[{"line_number":17,"context_line":"Create a volume from a snapshot"},{"line_number":18,"context_line":"Manage an existing volume"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"fix pep8 error and add releasenote"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"ThirdPartySystems:INSPUR-CI"},{"line_number":23,"context_line":"Our CI system is finishing. There are few issue on slave  are being solved."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"ba2be162_de85da59","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":34},"updated":"2017-03-06 20:39:19.000000000","message":"This does not need to be in the commit message.","commit_id":"a795ca904d2f3d965024a63f623f72cb2f0fcead"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"b0c101e4cd695f70a1db0e583f5d67efd1e8266e","unresolved":false,"context_lines":[{"line_number":18,"context_line":"Manage an existing volume"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"ThirdPartySystems:INSPUR-CI"},{"line_number":21,"context_line":"Our CI system is finishing. There are few issue on slave are being solved."},{"line_number":22,"context_line":"But it will work very soon."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Blueprint inspur-instorage-driver"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9a30ddce_36e7efe5","line":22,"range":{"start_line":21,"start_character":0,"end_line":22,"end_character":26},"updated":"2017-03-07 13:09:18.000000000","message":"This shouldn\u0027t be in the commit message either.","commit_id":"271042703d30bfa4d7359c7da953f0e7d958dda5"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"65cc5e153e1a427509ad6ccf4880b88f9c8e1e50","unresolved":false,"context_lines":[{"line_number":20,"context_line":"ThirdPartySystems:INSPUR-CI"},{"line_number":21,"context_line":"Our CI system is finishing. There are few issue on slave are being solved."},{"line_number":22,"context_line":"But it will work very soon."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Blueprint inspur-instorage-driver"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Change-Id: Ie4f4f99169c1d13ba7c17a0b88f0189e131f559a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9a30ddce_d86ac7b2","line":24,"range":{"start_line":23,"start_character":0,"end_line":24,"end_character":33},"updated":"2017-03-09 19:40:26.000000000","message":"Implements: Blueprint inspur-instorage-driver","commit_id":"271042703d30bfa4d7359c7da953f0e7d958dda5"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"915bfc38cc75761cb1a7e61f817fb6ca86950113","unresolved":false,"context_lines":[{"line_number":16,"context_line":"Retype a volume"},{"line_number":17,"context_line":"Create a volume from a snapshot"},{"line_number":18,"context_line":"Manage an existing volume"},{"line_number":19,"context_line":"Consistency group create,update,delete"},{"line_number":20,"context_line":"Consistency group snapshot create,delete"},{"line_number":21,"context_line":"Group create,update,delete"},{"line_number":22,"context_line":"Group snapshot create,delete"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"5ff73747_74174953","line":20,"range":{"start_line":19,"start_character":0,"end_line":20,"end_character":40},"updated":"2017-04-25 15:28:46.000000000","message":"Remove these two lines.","commit_id":"bd3729a4162036f77835558f8284d8d709953092"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"441b6b4d933e3c38b17dc89b3c6495e9d079e0aa","unresolved":false,"context_lines":[{"line_number":24,"context_line":"ThirdPartySystems: INSPUR-CI"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Implements: Blueprint inspur-instorage-driver"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Change-Id: Ie4f4f99169c1d13ba7c17a0b88f0189e131f559a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"1f013ff3_861187af","line":27,"updated":"2017-05-16 20:14:25.000000000","message":"DocImpact tag?","commit_id":"bd3729a4162036f77835558f8284d8d709953092"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd667a0f6468f4c61c3c30eadf4a863ccd04973a","unresolved":false,"context_lines":[{"line_number":20,"context_line":"Consistency group snapshot create,delete"},{"line_number":21,"context_line":"Group create,update,delete"},{"line_number":22,"context_line":"Group snapshot create,delete"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"ThirdPartySystems: INSPUR-CI"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Implements: Blueprint inspur-instorage-driver"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"df140735_5f2aac2b","line":23,"updated":"2017-06-03 20:24:32.000000000","message":"Replication v2.1 is already supported by the driver.","commit_id":"1aab974a28a43deed986ec0da1265443f6972e15"}],"cinder/opts.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"226242fee0874a7e8416c8b5b8c326ddfac5a6f4","unresolved":false,"context_lines":[{"line_number":323,"context_line":"                instorage_mcs_fc_opts,"},{"line_number":324,"context_line":"                cinder_volume_drivers_inspur_instorageiscsi."},{"line_number":325,"context_line":"                instorage_mcs_iscsi_opts,"},{"line_number":326,"context_line":"                cinder_volume_drivers_kaminario_kaminariocommon."},{"line_number":327,"context_line":"                kaminario_opts,"},{"line_number":328,"context_line":"                cinder_volume_drivers_lenovo_lenovocommon.common_opts,"},{"line_number":329,"context_line":"                cinder_volume_drivers_lenovo_lenovocommon.iscsi_opts,"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba2be162_b2e77d45","line":326,"updated":"2017-03-06 19:04:54.000000000","message":"Good catch, but it isn\u0027t related to this change","commit_id":"a795ca904d2f3d965024a63f623f72cb2f0fcead"}],"cinder/tests/unit/volume/drivers/test_instorage.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"b0c101e4cd695f70a1db0e583f5d67efd1e8266e","unresolved":false,"context_lines":[{"line_number":62,"context_line":"\r"},{"line_number":63,"context_line":"\r"},{"line_number":64,"context_line":"class InStorageMCSManagementSimulator(object):\r"},{"line_number":65,"context_line":"\r"},{"line_number":66,"context_line":"    def __init__(self, pool_name):\r"},{"line_number":67,"context_line":"        self._flags \u003d {\u0027instorage_mcs_volpool_name\u0027: pool_name}\r"},{"line_number":68,"context_line":"        self._volumes_list \u003d {}\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a30ddce_b1be89fd","line":65,"updated":"2017-03-07 13:09:18.000000000","message":"There is way too much business logic implemented in here. You shouldn\u0027t need to reimplement your entire driver in the unit test code. Most of this looks like it should just be mocked in the actual tests to just return what is needed to validate the \"unit\" being tested.","commit_id":"271042703d30bfa4d7359c7da953f0e7d958dda5"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"65cc5e153e1a427509ad6ccf4880b88f9c8e1e50","unresolved":false,"context_lines":[{"line_number":62,"context_line":"\r"},{"line_number":63,"context_line":"\r"},{"line_number":64,"context_line":"class InStorageMCSManagementSimulator(object):\r"},{"line_number":65,"context_line":"\r"},{"line_number":66,"context_line":"    def __init__(self, pool_name):\r"},{"line_number":67,"context_line":"        self._flags \u003d {\u0027instorage_mcs_volpool_name\u0027: pool_name}\r"},{"line_number":68,"context_line":"        self._volumes_list \u003d {}\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a30ddce_b815134a","line":65,"in_reply_to":"9a30ddce_b1be89fd","updated":"2017-03-09 19:40:26.000000000","message":"Also you can save yourself a lot of setup throughout this whole file if you use some of the preconfigured objects in he /fakes directory.","commit_id":"271042703d30bfa4d7359c7da953f0e7d958dda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"b0c101e4cd695f70a1db0e583f5d67efd1e8266e","unresolved":false,"context_lines":[{"line_number":255,"context_line":"\r"},{"line_number":256,"context_line":"        try:\r"},{"line_number":257,"context_line":"            curr_state \u003d lc_consistgrp[\u0027status\u0027]\r"},{"line_number":258,"context_line":"            lc_consistgrp[\u0027status\u0027] \\\r"},{"line_number":259,"context_line":"                \u003d self._lc_cg_transitions[curr_state][function]\r"},{"line_number":260,"context_line":"            return (\u0027\u0027, \u0027\u0027)\r"},{"line_number":261,"context_line":"        except Exception:\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a30ddce_16174ba4","line":258,"range":{"start_line":258,"start_character":36,"end_line":258,"end_character":37},"updated":"2017-03-07 13:09:18.000000000","message":"Please do not use \\ from spanning multiple lines. Wrap asignment in () or use [].","commit_id":"271042703d30bfa4d7359c7da953f0e7d958dda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"112a4bb5a9ccbdefcece1c21c9e13be5df6cf30b","unresolved":false,"context_lines":[{"line_number":20,"context_line":"import ddt\r"},{"line_number":21,"context_line":"import json\r"},{"line_number":22,"context_line":"import mock\r"},{"line_number":23,"context_line":"import paramiko\r"},{"line_number":24,"context_line":"import random\r"},{"line_number":25,"context_line":"import re\r"},{"line_number":26,"context_line":"import time\r"}],"source_content_type":"text/x-python","patch_set":9,"id":"ffe62b97_380cbaea","line":23,"updated":"2017-03-28 15:00:41.000000000","message":"ddt, mock, and paramiko should be grouped below with oslo and six for third party libraries.","commit_id":"bcf172a0a81a6676dc0a86c43cd722de2b0648ec"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"112a4bb5a9ccbdefcece1c21c9e13be5df6cf30b","unresolved":false,"context_lines":[{"line_number":32,"context_line":"\r"},{"line_number":33,"context_line":"from cinder import context\r"},{"line_number":34,"context_line":"from cinder import exception\r"},{"line_number":35,"context_line":"from cinder.i18n import _\r"},{"line_number":36,"context_line":"from cinder import objects\r"},{"line_number":37,"context_line":"from cinder.objects import fields\r"},{"line_number":38,"context_line":"from cinder import ssh_utils\r"}],"source_content_type":"text/x-python","patch_set":9,"id":"ffe62b97_782fe23e","line":35,"updated":"2017-03-28 15:00:41.000000000","message":"Translations should not be needed in unit tests.","commit_id":"bcf172a0a81a6676dc0a86c43cd722de2b0648ec"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"33c94cd09640689d4da36a79439fab707993d4f1","unresolved":false,"context_lines":[{"line_number":55,"context_line":"\r"},{"line_number":56,"context_line":"\r"},{"line_number":57,"context_line":"def _get_test_pool(get_all\u003dFalse):\r"},{"line_number":58,"context_line":"    if get_all:\r"},{"line_number":59,"context_line":"        return MCS_POOLS\r"},{"line_number":60,"context_line":"    else:\r"},{"line_number":61,"context_line":"        return MCS_POOLS[0]\r"}],"source_content_type":"text/x-python","patch_set":9,"id":"ffe62b97_e7291fe6","line":58,"updated":"2017-03-28 09:36:18.000000000","message":"nit: could be simplified to:\nreturn MCS_POOLS if get_all else MCS_POOLS[0]","commit_id":"bcf172a0a81a6676dc0a86c43cd722de2b0648ec"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"33c94cd09640689d4da36a79439fab707993d4f1","unresolved":false,"context_lines":[{"line_number":63,"context_line":"\r"},{"line_number":64,"context_line":"class InStorageMCSISCSIDriverTestCase(test.TestCase):\r"},{"line_number":65,"context_line":"\r"},{"line_number":66,"context_line":"    @mock.patch.object(time, \u0027sleep\u0027)\r"},{"line_number":67,"context_line":"    def setUp(self, mock_sleep):\r"},{"line_number":68,"context_line":"        super(InStorageMCSISCSIDriverTestCase, self).setUp()\r"},{"line_number":69,"context_line":"        self.USESIM \u003d True\r"}],"source_content_type":"text/x-python","patch_set":9,"id":"ffe62b97_c754db55","line":66,"updated":"2017-03-28 09:36:18.000000000","message":"Please, do not mock time.sleep in tests. You should to  mock time interval in your driver","commit_id":"bcf172a0a81a6676dc0a86c43cd722de2b0648ec"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"33c94cd09640689d4da36a79439fab707993d4f1","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    def setUp(self, mock_sleep):\r"},{"line_number":68,"context_line":"        super(InStorageMCSISCSIDriverTestCase, self).setUp()\r"},{"line_number":69,"context_line":"        self.USESIM \u003d True\r"},{"line_number":70,"context_line":"        if self.USESIM:\r"},{"line_number":71,"context_line":"            self.iscsi_driver \u003d FakeInStorageMCSISCSIDriver(\r"},{"line_number":72,"context_line":"                configuration\u003dconf.Configuration(None))\r"},{"line_number":73,"context_line":"            self._def_flags \u003d {\u0027san_ip\u0027: \u0027hostname\u0027,\r"}],"source_content_type":"text/x-python","patch_set":9,"id":"ffe62b97_07d403bc","line":70,"updated":"2017-03-28 09:36:18.000000000","message":"This always be True","commit_id":"bcf172a0a81a6676dc0a86c43cd722de2b0648ec"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"33c94cd09640689d4da36a79439fab707993d4f1","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                               \u0027instorage_mcs_multipath_enabled\u0027: False,\r"},{"line_number":80,"context_line":"                               \u0027instorage_mcs_allow_tenant_qos\u0027: True}\r"},{"line_number":81,"context_line":"            wwpns \u003d [\r"},{"line_number":82,"context_line":"                six.text_type(random.randint(0, 9999999999999999)).zfill(16),\r"},{"line_number":83,"context_line":"                six.text_type(random.randint(0, 9999999999999999)).zfill(16)]\r"},{"line_number":84,"context_line":"            initiator \u003d \u0027test.initiator.%s\u0027 % six.text_type(\r"},{"line_number":85,"context_line":"                random.randint(10000, 99999))\r"}],"source_content_type":"text/x-python","patch_set":9,"id":"ffe62b97_279dc709","line":82,"updated":"2017-03-28 09:36:18.000000000","message":"Should we really use random for the tests? It will make debugging harder","commit_id":"bcf172a0a81a6676dc0a86c43cd722de2b0648ec"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"112a4bb5a9ccbdefcece1c21c9e13be5df6cf30b","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                               \u0027instorage_mcs_multipath_enabled\u0027: False,\r"},{"line_number":80,"context_line":"                               \u0027instorage_mcs_allow_tenant_qos\u0027: True}\r"},{"line_number":81,"context_line":"            wwpns \u003d [\r"},{"line_number":82,"context_line":"                six.text_type(random.randint(0, 9999999999999999)).zfill(16),\r"},{"line_number":83,"context_line":"                six.text_type(random.randint(0, 9999999999999999)).zfill(16)]\r"},{"line_number":84,"context_line":"            initiator \u003d \u0027test.initiator.%s\u0027 % six.text_type(\r"},{"line_number":85,"context_line":"                random.randint(10000, 99999))\r"}],"source_content_type":"text/x-python","patch_set":9,"id":"ffe62b97_38b39a0c","line":82,"in_reply_to":"ffe62b97_279dc709","updated":"2017-03-28 15:00:41.000000000","message":"+1 Just put some static test values.","commit_id":"bcf172a0a81a6676dc0a86c43cd722de2b0648ec"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"05b797791bf50739ea67054c6086d8db1dfec4f1","unresolved":false,"context_lines":[{"line_number":419,"context_line":"                case \u003d \u0027en\u0027 + six.text_type("},{"line_number":420,"context_line":"                    auth_enabled) + \u0027ex\u0027 + six.text_type(host_exists)"},{"line_number":421,"context_line":"                conn_na \u003d {\u0027initiator\u0027: \u0027test:init:%s\u0027 %"},{"line_number":422,"context_line":"                           random.randint(10000, 99999),"},{"line_number":423,"context_line":"                           \u0027ip\u0027: \u002711.11.11.11\u0027,"},{"line_number":424,"context_line":"                           \u0027host\u0027: \u0027host-%s\u0027 % case}"},{"line_number":425,"context_line":"                if host_exists.startswith(\u0027yes\u0027):"}],"source_content_type":"text/x-python","patch_set":20,"id":"7f231b9d_75a4a2a6","line":422,"range":{"start_line":422,"start_character":27,"end_line":422,"end_character":55},"updated":"2017-06-14 15:50:43.000000000","message":"Just hard-code a value here rather than randomly generating values on each test run.","commit_id":"bce9b037da6fc2730b780b4f3ea1684564a994b6"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"05b797791bf50739ea67054c6086d8db1dfec4f1","unresolved":false,"context_lines":[{"line_number":1881,"context_line":"        # We\u0027ll check with iSCSI only - nothing protocol-dependent here"},{"line_number":1882,"context_line":"        self.driver.do_setup(None)"},{"line_number":1883,"context_line":""},{"line_number":1884,"context_line":"        rand_id \u003d random.randint(10000, 99999)"},{"line_number":1885,"context_line":"        volume1 \u003d self._generate_vol_info(None, None)"},{"line_number":1886,"context_line":"        self.driver.create_volume(volume1)"},{"line_number":1887,"context_line":"        self._assert_vol_exists(volume1[\u0027name\u0027], True)"}],"source_content_type":"text/x-python","patch_set":20,"id":"7f231b9d_d595b634","line":1884,"range":{"start_line":1884,"start_character":18,"end_line":1884,"end_character":46},"updated":"2017-06-14 15:50:43.000000000","message":"Just hard-code a value here rather than randomly generating values on each test run.","commit_id":"bce9b037da6fc2730b780b4f3ea1684564a994b6"}],"cinder/volume/drivers/inspur/instorage_common.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"b0c101e4cd695f70a1db0e583f5d67efd1e8266e","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    cfg.BoolOpt(\u0027instorage_mcs_multihostmap_enabled\u0027,\r"},{"line_number":67,"context_line":"                default\u003dTrue,\r"},{"line_number":68,"context_line":"                help\u003d\u0027This option no longer has any affect. It is deprecated \u0027\r"},{"line_number":69,"context_line":"                     \u0027and will be removed in the next release.\u0027,\r"},{"line_number":70,"context_line":"                deprecated_for_removal\u003dTrue),\r"},{"line_number":71,"context_line":"    cfg.BoolOpt(\u0027instorage_mcs_allow_tenant_qos\u0027,\r"},{"line_number":72,"context_line":"                default\u003dFalse,\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a30ddce_91a0a592","line":69,"range":{"start_line":69,"start_character":26,"end_line":69,"end_character":61},"updated":"2017-03-07 13:09:18.000000000","message":"Why is this being added in the first place?","commit_id":"271042703d30bfa4d7359c7da953f0e7d958dda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"b0c101e4cd695f70a1db0e583f5d67efd1e8266e","unresolved":false,"context_lines":[{"line_number":100,"context_line":"               help\u003d\u0027Specifies the InStorage LocalCopy copy rate to be used \u0027\r"},{"line_number":101,"context_line":"               \u0027when creating a full volume copy. The default is rate \u0027\r"},{"line_number":102,"context_line":"               \u0027is 50, and the valid rates are 1-100.\u0027),\r"},{"line_number":103,"context_line":"    cfg.StrOpt(\u0027instorage_mcs_vol_iogrp\u0027,\r"},{"line_number":104,"context_line":"               default\u003d\u00270\u0027,\r"},{"line_number":105,"context_line":"               help\u003d\u0027The I/O group in which to allocate volumes. It can be a \u0027\r"},{"line_number":106,"context_line":"               \u0027comma-separated list in which case the driver will select an \u0027\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a30ddce_5172ade6","line":103,"range":{"start_line":103,"start_character":8,"end_line":103,"end_character":14},"updated":"2017-03-07 13:09:18.000000000","message":"Might be better to make this a ListOpt.","commit_id":"271042703d30bfa4d7359c7da953f0e7d958dda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"b0c101e4cd695f70a1db0e583f5d67efd1e8266e","unresolved":false,"context_lines":[{"line_number":212,"context_line":"\r"},{"line_number":213,"context_line":"        for volume in volumes:\r"},{"line_number":214,"context_line":"            metadata \u003d volume.admin_metadata\r"},{"line_number":215,"context_line":"            curr_ops \u003d metadata.get(\u0027vdiskcopyops\u0027, None)\r"},{"line_number":216,"context_line":"            if curr_ops:\r"},{"line_number":217,"context_line":"                ops \u003d [tuple(x.split(\u0027:\u0027)) for x in curr_ops.split(\u0027;\u0027)]\r"},{"line_number":218,"context_line":"                self._vdiskcopyops[volume[\u0027id\u0027]] \u003d ops\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a30ddce_313b79ed","line":215,"range":{"start_line":215,"start_character":50,"end_line":215,"end_character":56},"updated":"2017-03-07 13:09:18.000000000","message":"This is redundant as the default is None.","commit_id":"271042703d30bfa4d7359c7da953f0e7d958dda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"b0c101e4cd695f70a1db0e583f5d67efd1e8266e","unresolved":false,"context_lines":[{"line_number":470,"context_line":"        rep_type \u003d self._get_volume_replicated_type(ctxt, volume)\r"},{"line_number":471,"context_line":"\r"},{"line_number":472,"context_line":"        # The replication V2 has a higher priority than the replication V1.\r"},{"line_number":473,"context_line":"        # Check if V2 is available first, then check if V1 is available.\r"},{"line_number":474,"context_line":"        if rep_type:\r"},{"line_number":475,"context_line":"            replica_obj \u003d self._get_replica_obj(rep_type)\r"},{"line_number":476,"context_line":"            replica_obj.volume_replication_setup(ctxt, volume)\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a30ddce_2cf3200c","line":473,"range":{"start_line":473,"start_character":56,"end_line":473,"end_character":58},"updated":"2017-03-07 13:09:18.000000000","message":"Replication v1 was deprecated and has been removed.","commit_id":"271042703d30bfa4d7359c7da953f0e7d958dda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"b0c101e4cd695f70a1db0e583f5d67efd1e8266e","unresolved":false,"context_lines":[{"line_number":623,"context_line":"                msg \u003d (_(\u0027Failed to extend a volume with remote copy \u0027\r"},{"line_number":624,"context_line":"                         \u0027%(volume)s. Exception: \u0027\r"},{"line_number":625,"context_line":"                         \u0027%(err)s.\u0027) % {\u0027volume\u0027: volume[\u0027id\u0027],\r"},{"line_number":626,"context_line":"                                        \u0027err\u0027: e})\r"},{"line_number":627,"context_line":"                LOG.error(msg)\r"},{"line_number":628,"context_line":"                raise exception.VolumeDriverException(message\u003dmsg)\r"},{"line_number":629,"context_line":"        else:\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a30ddce_ac5550c7","line":626,"range":{"start_line":626,"start_character":47,"end_line":626,"end_character":48},"updated":"2017-03-07 13:09:18.000000000","message":"Since you are performing the string formatting directly here, please wrap e in six.text_type() to be safe.","commit_id":"271042703d30bfa4d7359c7da953f0e7d958dda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"b0c101e4cd695f70a1db0e583f5d67efd1e8266e","unresolved":false,"context_lines":[{"line_number":1140,"context_line":"\r"},{"line_number":1141,"context_line":"        return self._stats\r"},{"line_number":1142,"context_line":"\r"},{"line_number":1143,"context_line":"    def create_consistencygroup(self, context, group):\r"},{"line_number":1144,"context_line":"        \"\"\"Create a consistency group.\r"},{"line_number":1145,"context_line":"\r"},{"line_number":1146,"context_line":"        Inspur InStorage will create CG until cg-snapshot creation,\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a30ddce_ccc1a430","line":1143,"range":{"start_line":1143,"start_character":8,"end_line":1143,"end_character":31},"updated":"2017-03-07 13:09:18.000000000","message":"The consistency group functionality is being removed. All drivers should now implement support for generic volume groups with the \"consistent snapshots\" type.\n\nSee driver interface here:\nhttps://github.com/openstack/cinder/blob/master/cinder/interface/volume_group_driver.py","commit_id":"271042703d30bfa4d7359c7da953f0e7d958dda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"b0c101e4cd695f70a1db0e583f5d67efd1e8266e","unresolved":false,"context_lines":[{"line_number":2443,"context_line":"\r"},{"line_number":2444,"context_line":"            if int(time.time()) - start_time \u003e timeout:\r"},{"line_number":2445,"context_line":"                msg \u003d (\r"},{"line_number":2446,"context_line":"                    _(\u0027CommandLineAssistant._wait_for_condition: \\\r"},{"line_number":2447,"context_line":"                    %s timeout.\u0027) % testmethod.__name__)\r"},{"line_number":2448,"context_line":"                LOG.error(msg)\r"},{"line_number":2449,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a30ddce_6713735d","line":2446,"range":{"start_line":2446,"start_character":65,"end_line":2446,"end_character":66},"updated":"2017-03-07 13:09:18.000000000","message":"Just close the \u0027 here and start the next part with \u0027 on the next line.","commit_id":"271042703d30bfa4d7359c7da953f0e7d958dda5"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"33c94cd09640689d4da36a79439fab707993d4f1","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#\r"},{"line_number":16,"context_line":"\r"},{"line_number":17,"context_line":"import math\r"},{"line_number":18,"context_line":"import paramiko\r"},{"line_number":19,"context_line":"import random\r"},{"line_number":20,"context_line":"import re\r"},{"line_number":21,"context_line":"import time\r"}],"source_content_type":"text/x-python","patch_set":9,"id":"ffe62b97_2744a773","line":18,"updated":"2017-03-28 09:36:18.000000000","message":"It should be moved to 3rd-party libs section","commit_id":"bcf172a0a81a6676dc0a86c43cd722de2b0648ec"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"45d79a149e3f11a099fd67d7dd3223345eb9beef","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        self._backend_name \u003d self.configuration.safe_get(\u0027volume_backend_name\u0027)\r"},{"line_number":148,"context_line":"        self.active_ip \u003d self.configuration.san_ip\r"},{"line_number":149,"context_line":"        self.inactive_ip \u003d self.configuration.instorage_san_secondary_ip\r"},{"line_number":150,"context_line":"        self._local_backend_assistant \u003d InStorageAssistant(self._run_ssh)\r"},{"line_number":151,"context_line":"        self._aux_backend_assistant \u003d None\r"},{"line_number":152,"context_line":"        self._assistant \u003d self._local_backend_assistant\r"},{"line_number":153,"context_line":"        self._vdiskcopyops \u003d {}\r"}],"source_content_type":"text/x-python","patch_set":9,"id":"ffe62b97_741fa66b","line":150,"range":{"start_line":150,"start_character":40,"end_line":150,"end_character":73},"updated":"2017-03-29 21:28:39.000000000","message":"Loading this up is a pretty heavy operation.  This should be done in do_setup() rather than __init__().","commit_id":"bcf172a0a81a6676dc0a86c43cd722de2b0648ec"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"45d79a149e3f11a099fd67d7dd3223345eb9beef","unresolved":false,"context_lines":[{"line_number":184,"context_line":"\r"},{"line_number":185,"context_line":"        # InStorage has the limitation that can not burst more than 3 new ssh\r"},{"line_number":186,"context_line":"        # connections within 1 second. So slow down the initialization.\r"},{"line_number":187,"context_line":"        time.sleep(1)\r"},{"line_number":188,"context_line":"\r"},{"line_number":189,"context_line":"    def do_setup(self, ctxt):\r"},{"line_number":190,"context_line":"        \"\"\"Check that we have all configuration details from the storage.\"\"\"\r"}],"source_content_type":"text/x-python","patch_set":9,"id":"ffe62b97_14105a56","line":187,"updated":"2017-03-29 21:28:39.000000000","message":"This indicates you are doing something here that shouldn\u0027t be done in __init__.  If a sleep is required, move it to do_setup().","commit_id":"bcf172a0a81a6676dc0a86c43cd722de2b0648ec"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"112a4bb5a9ccbdefcece1c21c9e13be5df6cf30b","unresolved":false,"context_lines":[{"line_number":207,"context_line":"            admin_context \u003d context.get_admin_context()\r"},{"line_number":208,"context_line":"        else:\r"},{"line_number":209,"context_line":"            admin_context \u003d ctxt.elevated()\r"},{"line_number":210,"context_line":"        volumes \u003d objects.VolumeList.get_all_by_host(admin_context, self.host)\r"},{"line_number":211,"context_line":"\r"},{"line_number":212,"context_line":"        for volume in volumes:\r"},{"line_number":213,"context_line":"            metadata \u003d volume.admin_metadata\r"}],"source_content_type":"text/x-python","patch_set":9,"id":"ffe62b97_787a42f1","line":210,"updated":"2017-03-28 15:00:41.000000000","message":"Why is this needed on start up? Drivers shouldn\u0027t be querying for objects.","commit_id":"bcf172a0a81a6676dc0a86c43cd722de2b0648ec"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"112a4bb5a9ccbdefcece1c21c9e13be5df6cf30b","unresolved":false,"context_lines":[{"line_number":327,"context_line":"            try:\r"},{"line_number":328,"context_line":"                self.sshpool \u003d self._set_up_sshpool(self.active_ip)\r"},{"line_number":329,"context_line":"            except paramiko.SSHException:\r"},{"line_number":330,"context_line":"                LOG.warning(_LW(\u0027Unable to use san_ip to create SSHPool. Now \u0027\r"},{"line_number":331,"context_line":"                                \u0027attempting to use instorage_san_secondary_ip \u0027\r"},{"line_number":332,"context_line":"                                \u0027to create SSHPool.\u0027))\r"},{"line_number":333,"context_line":"                if self._switch_ip():\r"}],"source_content_type":"text/x-python","patch_set":9,"id":"ffe62b97_58cd3e2f","line":330,"range":{"start_line":330,"start_character":28,"end_line":330,"end_character":32},"updated":"2017-03-28 15:00:41.000000000","message":"All translation markers other than _() for exception messages should now be removed.","commit_id":"bcf172a0a81a6676dc0a86c43cd722de2b0648ec"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"33c94cd09640689d4da36a79439fab707993d4f1","unresolved":false,"context_lines":[{"line_number":342,"context_line":"            return self._ssh_execute(self.sshpool, command,\r"},{"line_number":343,"context_line":"                                     check_exit_code, attempts)\r"},{"line_number":344,"context_line":"\r"},{"line_number":345,"context_line":"        except Exception:\r"},{"line_number":346,"context_line":"            # Need to check if creating an SSHPool instorage_san_secondary_ip\r"},{"line_number":347,"context_line":"            # before raising an error.\r"},{"line_number":348,"context_line":"            try:\r"}],"source_content_type":"text/x-python","patch_set":9,"id":"ffe62b97_4a5452ff","line":345,"updated":"2017-03-28 09:36:18.000000000","message":"Can we catch more specific exception here?","commit_id":"bcf172a0a81a6676dc0a86c43cd722de2b0648ec"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"33c94cd09640689d4da36a79439fab707993d4f1","unresolved":false,"context_lines":[{"line_number":393,"context_line":"                            ssh,\r"},{"line_number":394,"context_line":"                            command,\r"},{"line_number":395,"context_line":"                            check_exit_code\u003dcheck_exit_code)\r"},{"line_number":396,"context_line":"                    except Exception as e:\r"},{"line_number":397,"context_line":"                        LOG.error(_LE(\u0027Error has occurred: %s\u0027),\r"},{"line_number":398,"context_line":"                                  six.text_type(e))\r"},{"line_number":399,"context_line":"                        last_exception \u003d e\r"}],"source_content_type":"text/x-python","patch_set":9,"id":"ffe62b97_ea42063e","line":396,"updated":"2017-03-28 09:36:18.000000000","message":"The same","commit_id":"bcf172a0a81a6676dc0a86c43cd722de2b0648ec"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"33c94cd09640689d4da36a79439fab707993d4f1","unresolved":false,"context_lines":[{"line_number":394,"context_line":"                            command,\r"},{"line_number":395,"context_line":"                            check_exit_code\u003dcheck_exit_code)\r"},{"line_number":396,"context_line":"                    except Exception as e:\r"},{"line_number":397,"context_line":"                        LOG.error(_LE(\u0027Error has occurred: %s\u0027),\r"},{"line_number":398,"context_line":"                                  six.text_type(e))\r"},{"line_number":399,"context_line":"                        last_exception \u003d e\r"},{"line_number":400,"context_line":"                        greenthread.sleep(self.DEFAULT_GR_SLEEP)\r"}],"source_content_type":"text/x-python","patch_set":9,"id":"ffe62b97_8a45ba45","line":397,"updated":"2017-03-28 09:36:18.000000000","message":"LOG.error \u003d\u003e LOG.exception","commit_id":"bcf172a0a81a6676dc0a86c43cd722de2b0648ec"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"33c94cd09640689d4da36a79439fab707993d4f1","unresolved":false,"context_lines":[{"line_number":437,"context_line":"                      volume[\u0027name\u0027])\r"},{"line_number":438,"context_line":"\r"},{"line_number":439,"context_line":"    def create_export(self, ctxt, volume, connector):\r"},{"line_number":440,"context_line":"        model_update \u003d None\r"},{"line_number":441,"context_line":"        return model_update\r"},{"line_number":442,"context_line":"\r"},{"line_number":443,"context_line":"    def remove_export(self, ctxt, volume):\r"}],"source_content_type":"text/x-python","patch_set":9,"id":"ffe62b97_4aa212ff","line":440,"updated":"2017-03-28 09:36:18.000000000","message":"It should be:\ndef create_export(self, ctxt, volume, connector):\n    pass","commit_id":"bcf172a0a81a6676dc0a86c43cd722de2b0648ec"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"33c94cd09640689d4da36a79439fab707993d4f1","unresolved":false,"context_lines":[{"line_number":764,"context_line":"        for vol_id, copy_ops in copy_items:\r"},{"line_number":765,"context_line":"            try:\r"},{"line_number":766,"context_line":"                volume \u003d self.db.volume_get(ctxt, vol_id)\r"},{"line_number":767,"context_line":"            except Exception:\r"},{"line_number":768,"context_line":"                LOG.warning(_LW(\u0027Volume %s does not exist.\u0027), vol_id)\r"},{"line_number":769,"context_line":"                del self._vdiskcopyops[vol_id]\r"},{"line_number":770,"context_line":"                if not len(self._vdiskcopyops):\r"}],"source_content_type":"text/x-python","patch_set":9,"id":"ffe62b97_ca498231","line":767,"updated":"2017-03-28 09:36:18.000000000","message":"The same here","commit_id":"bcf172a0a81a6676dc0a86c43cd722de2b0648ec"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"33c94cd09640689d4da36a79439fab707993d4f1","unresolved":false,"context_lines":[{"line_number":1134,"context_line":"\r"},{"line_number":1135,"context_line":"        return self._stats\r"},{"line_number":1136,"context_line":"\r"},{"line_number":1137,"context_line":"    def create_consistencygroup(self, context, group):\r"},{"line_number":1138,"context_line":"        \"\"\"Create a consistency group.\r"},{"line_number":1139,"context_line":"\r"},{"line_number":1140,"context_line":"        Inspur InStorage will create CG until cg-snapshot creation,\r"}],"source_content_type":"text/x-python","patch_set":9,"id":"ffe62b97_4a35728e","line":1137,"updated":"2017-03-28 09:36:18.000000000","message":"CGs feature is deprecated and will be removed. Please, implement generic group feature","commit_id":"bcf172a0a81a6676dc0a86c43cd722de2b0648ec"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"33c94cd09640689d4da36a79439fab707993d4f1","unresolved":false,"context_lines":[{"line_number":1366,"context_line":"\r"},{"line_number":1367,"context_line":"        if attr is None:\r"},{"line_number":1368,"context_line":"            msg \u003d (_(\u0027get_pool: Failed to get attributes for volume \u0027\r"},{"line_number":1369,"context_line":"                     \u0027%s\u0027) % volume[\u0027name\u0027])\r"},{"line_number":1370,"context_line":"            LOG.error(msg)\r"},{"line_number":1371,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)\r"},{"line_number":1372,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":9,"id":"ffe62b97_aa199e22","line":1369,"updated":"2017-03-28 09:36:18.000000000","message":"Please, use volume id here. Volume name is not unique.","commit_id":"bcf172a0a81a6676dc0a86c43cd722de2b0648ec"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"33c94cd09640689d4da36a79439fab707993d4f1","unresolved":false,"context_lines":[{"line_number":3211,"context_line":"            if rel_info:\r"},{"line_number":3212,"context_line":"                self.delete_relationship(vol_name)\r"},{"line_number":3213,"context_line":"            self.delete_vdisk(vol_name, False)\r"},{"line_number":3214,"context_line":"        except Exception as e:\r"},{"line_number":3215,"context_line":"            msg \u003d (_(\u0027Unable to delete the volume for \u0027\r"},{"line_number":3216,"context_line":"                     \u0027volume %(vol)s. Exception: %(err)s.\u0027),\r"},{"line_number":3217,"context_line":"                   {\u0027vol\u0027: vol_name, \u0027err\u0027: six.text_type(e)})\r"}],"source_content_type":"text/x-python","patch_set":9,"id":"ffe62b97_ead1e624","line":3214,"updated":"2017-03-28 09:36:18.000000000","message":"The same","commit_id":"bcf172a0a81a6676dc0a86c43cd722de2b0648ec"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"50185a61e9302b8a8c4e956867bd52f1c834bbeb","unresolved":false,"context_lines":[{"line_number":1133,"context_line":""},{"line_number":1134,"context_line":"        return self._stats"},{"line_number":1135,"context_line":""},{"line_number":1136,"context_line":"    def create_consistencygroup(self, context, group):"},{"line_number":1137,"context_line":"        \"\"\"Create a consistency group."},{"line_number":1138,"context_line":""},{"line_number":1139,"context_line":"        Inspur InStorage will create CG until cg-snapshot creation,"}],"source_content_type":"text/x-python","patch_set":12,"id":"bff0334d_71f4db86","line":1136,"range":{"start_line":1136,"start_character":8,"end_line":1136,"end_character":31},"updated":"2017-04-07 15:29:43.000000000","message":"Please delete create_consistencygroup function.  This won\u0027t be called any more in Pike and beyond.  Instead create_group will be called.","commit_id":"18c13385711658b6b1e220714f344e081117cbbc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"50185a61e9302b8a8c4e956867bd52f1c834bbeb","unresolved":false,"context_lines":[{"line_number":1143,"context_line":"        model_update \u003d {\u0027status\u0027: fields.ConsistencyGroupStatus.AVAILABLE}"},{"line_number":1144,"context_line":"        return model_update"},{"line_number":1145,"context_line":""},{"line_number":1146,"context_line":"    def create_consistencygroup_from_src(self, context, group, volumes,"},{"line_number":1147,"context_line":"                                         cgsnapshot\u003dNone, snapshots\u003dNone,"},{"line_number":1148,"context_line":"                                         source_cg\u003dNone, source_vols\u003dNone):"},{"line_number":1149,"context_line":"        \"\"\"Creates a consistencygroup from source."}],"source_content_type":"text/x-python","patch_set":12,"id":"bff0334d_913abf31","line":1146,"range":{"start_line":1146,"start_character":8,"end_line":1146,"end_character":40},"updated":"2017-04-07 15:29:43.000000000","message":"Remove this.","commit_id":"18c13385711658b6b1e220714f344e081117cbbc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"50185a61e9302b8a8c4e956867bd52f1c834bbeb","unresolved":false,"context_lines":[{"line_number":1186,"context_line":"        LOG.debug(\"Leave: create_consistencygroup_from_src.\")"},{"line_number":1187,"context_line":"        return model_update, snapshots_model"},{"line_number":1188,"context_line":""},{"line_number":1189,"context_line":"    def delete_consistencygroup(self, context, group, volumes):"},{"line_number":1190,"context_line":"        \"\"\"Deletes a consistency group."},{"line_number":1191,"context_line":""},{"line_number":1192,"context_line":"        Inspur InStorage will delete the volumes of the CG."}],"source_content_type":"text/x-python","patch_set":12,"id":"bff0334d_71505b5e","line":1189,"updated":"2017-04-07 15:29:43.000000000","message":"Remove","commit_id":"18c13385711658b6b1e220714f344e081117cbbc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"50185a61e9302b8a8c4e956867bd52f1c834bbeb","unresolved":false,"context_lines":[{"line_number":1211,"context_line":""},{"line_number":1212,"context_line":"        return model_update, volumes_model_update"},{"line_number":1213,"context_line":""},{"line_number":1214,"context_line":"    def update_consistencygroup(self, ctxt, group, add_volumes,"},{"line_number":1215,"context_line":"                                remove_volumes):"},{"line_number":1216,"context_line":"        \"\"\"Adds or removes volume(s) to/from an existing consistency group.\"\"\""},{"line_number":1217,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"bff0334d_9123df05","line":1214,"updated":"2017-04-07 15:29:43.000000000","message":"Remove this.","commit_id":"18c13385711658b6b1e220714f344e081117cbbc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"50185a61e9302b8a8c4e956867bd52f1c834bbeb","unresolved":false,"context_lines":[{"line_number":1218,"context_line":"        LOG.debug(\"Updating consistency group.\")"},{"line_number":1219,"context_line":"        return None, None, None"},{"line_number":1220,"context_line":""},{"line_number":1221,"context_line":"    def create_cgsnapshot(self, ctxt, cgsnapshot, snapshots):"},{"line_number":1222,"context_line":"        \"\"\"Creates a cgsnapshot.\"\"\""},{"line_number":1223,"context_line":"        # Use cgsnapshot id as cg name"},{"line_number":1224,"context_line":"        cg_name \u003d \u0027cg_snap-\u0027 + cgsnapshot.id"}],"source_content_type":"text/x-python","patch_set":12,"id":"bff0334d_3115339d","line":1221,"range":{"start_line":1221,"start_character":8,"end_line":1221,"end_character":25},"updated":"2017-04-07 15:29:43.000000000","message":"Remove this.","commit_id":"18c13385711658b6b1e220714f344e081117cbbc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"50185a61e9302b8a8c4e956867bd52f1c834bbeb","unresolved":false,"context_lines":[{"line_number":1236,"context_line":""},{"line_number":1237,"context_line":"        return model_update, snapshots_model"},{"line_number":1238,"context_line":""},{"line_number":1239,"context_line":"    def delete_cgsnapshot(self, context, cgsnapshot, snapshots):"},{"line_number":1240,"context_line":"        \"\"\"Deletes a cgsnapshot.\"\"\""},{"line_number":1241,"context_line":"        cgsnapshot_id \u003d cgsnapshot[\u0027id\u0027]"},{"line_number":1242,"context_line":"        cg_name \u003d \u0027cg_snap-\u0027 + cgsnapshot_id"}],"source_content_type":"text/x-python","patch_set":12,"id":"bff0334d_71229b02","line":1239,"updated":"2017-04-07 15:29:43.000000000","message":"Remove","commit_id":"18c13385711658b6b1e220714f344e081117cbbc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"50185a61e9302b8a8c4e956867bd52f1c834bbeb","unresolved":false,"context_lines":[{"line_number":1431,"context_line":"                    \u0027reserved_percentage\u0027:"},{"line_number":1432,"context_line":"                        self.configuration.reserved_percentage,"},{"line_number":1433,"context_line":"                    \u0027QoS_support\u0027: QoS_support,"},{"line_number":1434,"context_line":"                    \u0027consistencygroup_support\u0027: True,"},{"line_number":1435,"context_line":"                    \u0027location_info\u0027: location_info,"},{"line_number":1436,"context_line":"                    \u0027intier_support\u0027: in_tier,"},{"line_number":1437,"context_line":"                    \u0027multiattach\u0027: multiattach,"}],"source_content_type":"text/x-python","patch_set":12,"id":"bff0334d_11f46f5a","line":1434,"range":{"start_line":1434,"start_character":20,"end_line":1434,"end_character":45},"updated":"2017-04-07 15:29:43.000000000","message":"Change this to consistent_group_snapshot_enabled.","commit_id":"18c13385711658b6b1e220714f344e081117cbbc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"915bfc38cc75761cb1a7e61f817fb6ca86950113","unresolved":false,"context_lines":[{"line_number":124,"context_line":"CONF.register_opts(instorage_mcs_opts)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"# class InStorageMCSCommonDriver(san.SanDriver,"},{"line_number":128,"context_line":"#                                driver.ManageableVD,"},{"line_number":129,"context_line":"#                                driver.MigrateVD,"},{"line_number":130,"context_line":"#                                driver.CloneableImageVD"},{"line_number":131,"context_line":"#                                ):"},{"line_number":132,"context_line":"class InStorageMCSCommonDriver(driver.VolumeDriver, san.SanDriver):"},{"line_number":133,"context_line":"    \"\"\"Inspur InStorage MCS abstract base class for iSCSI/FC volume drivers."},{"line_number":134,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"5ff73747_b4ecb129","line":131,"range":{"start_line":127,"start_character":0,"end_line":131,"end_character":35},"updated":"2017-04-25 15:28:46.000000000","message":"Remove the commented out code.","commit_id":"bd3729a4162036f77835558f8284d8d709953092"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"915bfc38cc75761cb1a7e61f817fb6ca86950113","unresolved":false,"context_lines":[{"line_number":1226,"context_line":"        # Use cgsnapshot id as cg name"},{"line_number":1227,"context_line":"        group_name \u003d \u0027group_snap-\u0027 + group_snapshot.id"},{"line_number":1228,"context_line":"        # Create new cg as cg_snapshot"},{"line_number":1229,"context_line":"        self._assistant.create_lc_consistgrp(group_name)"},{"line_number":1230,"context_line":""},{"line_number":1231,"context_line":"        timeout \u003d self.configuration.instorage_mcs_localcopy_timeout"},{"line_number":1232,"context_line":"        model_update, snapshots_model \u003d ("}],"source_content_type":"text/x-python","patch_set":14,"id":"5ff73747_b434b1fc","line":1229,"updated":"2017-04-25 15:28:46.000000000","message":"Please check group type and only create consistent group snapshot when the type is right.\n\nSee example here:\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/dell_emc/scaleio/driver.py#L1324","commit_id":"bd3729a4162036f77835558f8284d8d709953092"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd7c1d25facda7240db298b5c0a5254e6db35c35","unresolved":false,"context_lines":[{"line_number":1221,"context_line":"        # Use cgsnapshot id as cg name"},{"line_number":1222,"context_line":"        group_name \u003d \u0027group_snap-\u0027 + group_snapshot.id"},{"line_number":1223,"context_line":"        # Create new cg as cg_snapshot"},{"line_number":1224,"context_line":"        self._assistant.create_lc_consistgrp(group_name)"},{"line_number":1225,"context_line":""},{"line_number":1226,"context_line":"        timeout \u003d self.configuration.instorage_mcs_localcopy_timeout"},{"line_number":1227,"context_line":"        model_update, snapshots_model \u003d ("}],"source_content_type":"text/x-python","patch_set":15,"id":"df140735_2981674b","line":1224,"updated":"2017-05-31 14:52:10.000000000","message":"My comments in the previous patch set is not addressed.\n\nPlease check group type and only create consistent group snapshot when the type is right.  This comment also applies to delete_group_snapshot, create_group, delete_group, update_group, create_group_from_src.\n\nSee example here:\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/dell_emc/scaleio/driver.py#L1324","commit_id":"fc5b3c26821f7daace7a74e1cddb3af1c26d494b"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"4546be2fa0326e30070027080c92f1e577a1f342","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        # InStorage has the limitation that can not burst more than 3 new ssh"},{"line_number":183,"context_line":"        # connections within 1 second. So slow down the initialization."},{"line_number":184,"context_line":"        time.sleep(1)"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def do_setup(self, ctxt):"},{"line_number":187,"context_line":"        \"\"\"Check that we have all configuration details from the storage.\"\"\""}],"source_content_type":"text/x-python","patch_set":16,"id":"df140735_549ce60c","line":184,"updated":"2017-06-02 16:25:03.000000000","message":"This should be done in do_setup() or check_for_setup_error() if necessary, not in __init__.","commit_id":"7af1951b3773d01af44fd0199ba20963889558aa"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd667a0f6468f4c61c3c30eadf4a863ccd04973a","unresolved":false,"context_lines":[{"line_number":325,"context_line":"            try:"},{"line_number":326,"context_line":"                self.sshpool \u003d self._set_up_sshpool(self.active_ip)"},{"line_number":327,"context_line":"            except paramiko.SSHException:"},{"line_number":328,"context_line":"                LOG.warning(_(\u0027Unable to use san_ip to create SSHPool. Now \u0027"},{"line_number":329,"context_line":"                              \u0027attempting to use instorage_san_secondary_ip \u0027"},{"line_number":330,"context_line":"                              \u0027to create SSHPool.\u0027))"},{"line_number":331,"context_line":"                if self._switch_ip():"},{"line_number":332,"context_line":"                    self.sshpool \u003d self._set_up_sshpool(self.active_ip)"},{"line_number":333,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":17,"id":"df140735_dfb91c15","line":330,"range":{"start_line":328,"start_character":28,"end_line":330,"end_character":51},"updated":"2017-06-03 20:24:32.000000000","message":"This message only goes to the logs, so it does not need _().  Should be LOG.warning(\"xxxx.\").  Only user messages such as a raised exception needs _() which means they will be translated.","commit_id":"1aab974a28a43deed986ec0da1265443f6972e15"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd667a0f6468f4c61c3c30eadf4a863ccd04973a","unresolved":false,"context_lines":[{"line_number":331,"context_line":"                if self._switch_ip():"},{"line_number":332,"context_line":"                    self.sshpool \u003d self._set_up_sshpool(self.active_ip)"},{"line_number":333,"context_line":"                else:"},{"line_number":334,"context_line":"                    LOG.error(_(\u0027Unable to create SSHPool using san_ip \u0027"},{"line_number":335,"context_line":"                                \u0027and not able to use \u0027"},{"line_number":336,"context_line":"                                \u0027instorage_san_secondary_ip since it is \u0027"},{"line_number":337,"context_line":"                                \u0027not configured.\u0027))"},{"line_number":338,"context_line":"                    raise"},{"line_number":339,"context_line":"        try:"},{"line_number":340,"context_line":"            return self._ssh_execute(self.sshpool, command,"}],"source_content_type":"text/x-python","patch_set":17,"id":"df140735_bf38a89f","line":337,"range":{"start_line":334,"start_character":30,"end_line":337,"end_character":50},"updated":"2017-06-03 20:24:32.000000000","message":"Same here.  This message only goes to the logs so it does not need _()","commit_id":"1aab974a28a43deed986ec0da1265443f6972e15"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd667a0f6468f4c61c3c30eadf4a863ccd04973a","unresolved":false,"context_lines":[{"line_number":345,"context_line":"            # before raising an error."},{"line_number":346,"context_line":"            try:"},{"line_number":347,"context_line":"                if self._switch_ip():"},{"line_number":348,"context_line":"                    LOG.warning(_(\"Unable to execute SSH command with \""},{"line_number":349,"context_line":"                                  \"%(inactive)s. Attempting to execute SSH \""},{"line_number":350,"context_line":"                                  \"command with %(active)s.\"),"},{"line_number":351,"context_line":"                                {\u0027inactive\u0027: self.inactive_ip,"}],"source_content_type":"text/x-python","patch_set":17,"id":"df140735_9f3de490","line":348,"range":{"start_line":348,"start_character":32,"end_line":348,"end_character":33},"updated":"2017-06-03 20:24:32.000000000","message":"Remove _().","commit_id":"1aab974a28a43deed986ec0da1265443f6972e15"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd667a0f6468f4c61c3c30eadf4a863ccd04973a","unresolved":false,"context_lines":[{"line_number":354,"context_line":"                    return self._ssh_execute(self.sshpool, command,"},{"line_number":355,"context_line":"                                             check_exit_code, attempts)"},{"line_number":356,"context_line":"                else:"},{"line_number":357,"context_line":"                    LOG.warning(_(\u0027Not able to use \u0027"},{"line_number":358,"context_line":"                                  \u0027instorage_san_secondary_ip since it is \u0027"},{"line_number":359,"context_line":"                                  \u0027not configured.\u0027))"},{"line_number":360,"context_line":"                    raise"}],"source_content_type":"text/x-python","patch_set":17,"id":"df140735_7f3e908b","line":357,"range":{"start_line":357,"start_character":32,"end_line":357,"end_character":33},"updated":"2017-06-03 20:24:32.000000000","message":"Remove _()","commit_id":"1aab974a28a43deed986ec0da1265443f6972e15"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd667a0f6468f4c61c3c30eadf4a863ccd04973a","unresolved":false,"context_lines":[{"line_number":360,"context_line":"                    raise"},{"line_number":361,"context_line":"            except Exception:"},{"line_number":362,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":363,"context_line":"                    LOG.error(_(\"Error running SSH command: %s\"),"},{"line_number":364,"context_line":"                              command)"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"    def _set_up_sshpool(self, ip):"}],"source_content_type":"text/x-python","patch_set":17,"id":"df140735_3f4c9840","line":363,"range":{"start_line":363,"start_character":30,"end_line":363,"end_character":31},"updated":"2017-06-03 20:24:32.000000000","message":"Remove _()","commit_id":"1aab974a28a43deed986ec0da1265443f6972e15"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd667a0f6468f4c61c3c30eadf4a863ccd04973a","unresolved":false,"context_lines":[{"line_number":392,"context_line":"                            command,"},{"line_number":393,"context_line":"                            check_exit_code\u003dcheck_exit_code)"},{"line_number":394,"context_line":"                    except Exception as e:"},{"line_number":395,"context_line":"                        LOG.exception(_(\u0027Error has occurred: %s\u0027),"},{"line_number":396,"context_line":"                                      six.text_type(e))"},{"line_number":397,"context_line":"                        last_exception \u003d e"},{"line_number":398,"context_line":"                        greenthread.sleep(self.DEFAULT_GR_SLEEP)"}],"source_content_type":"text/x-python","patch_set":17,"id":"df140735_bf61c8ab","line":395,"range":{"start_line":395,"start_character":38,"end_line":395,"end_character":40},"updated":"2017-06-03 20:24:32.000000000","message":"Remove _()","commit_id":"1aab974a28a43deed986ec0da1265443f6972e15"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd667a0f6468f4c61c3c30eadf4a863ccd04973a","unresolved":false,"context_lines":[{"line_number":393,"context_line":"                            check_exit_code\u003dcheck_exit_code)"},{"line_number":394,"context_line":"                    except Exception as e:"},{"line_number":395,"context_line":"                        LOG.exception(_(\u0027Error has occurred: %s\u0027),"},{"line_number":396,"context_line":"                                      six.text_type(e))"},{"line_number":397,"context_line":"                        last_exception \u003d e"},{"line_number":398,"context_line":"                        greenthread.sleep(self.DEFAULT_GR_SLEEP)"},{"line_number":399,"context_line":"                    try:"}],"source_content_type":"text/x-python","patch_set":17,"id":"df140735_9f6604c1","line":396,"range":{"start_line":396,"start_character":38,"end_line":396,"end_character":51},"updated":"2017-06-03 20:24:32.000000000","message":"six.text_type is not needed here because the logger will apply six.text_type if needed.\n\nsix.text_type(e) is needed if the message is also raised in an exception.","commit_id":"1aab974a28a43deed986ec0da1265443f6972e15"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd667a0f6468f4c61c3c30eadf4a863ccd04973a","unresolved":false,"context_lines":[{"line_number":411,"context_line":""},{"line_number":412,"context_line":"        except Exception:"},{"line_number":413,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":414,"context_line":"                LOG.error(_(\"Error running SSH command: %s\"), command)"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"    def _switch_ip(self):"},{"line_number":417,"context_line":"        # Change active_ip if instorage_san_secondary_ip is set."}],"source_content_type":"text/x-python","patch_set":17,"id":"df140735_7f57b0cb","line":414,"range":{"start_line":414,"start_character":26,"end_line":414,"end_character":28},"updated":"2017-06-03 20:24:32.000000000","message":"Remove _()","commit_id":"1aab974a28a43deed986ec0da1265443f6972e15"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd667a0f6468f4c61c3c30eadf4a863ccd04973a","unresolved":false,"context_lines":[{"line_number":419,"context_line":"            return False"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"        self.inactive_ip, self.active_ip \u003d self.active_ip, self.inactive_ip"},{"line_number":422,"context_line":"        LOG.info(_(\u0027Switch active_ip from %(old)s to \u0027"},{"line_number":423,"context_line":"                   \u0027%(new)s.\u0027),"},{"line_number":424,"context_line":"                 {\u0027old\u0027: self.inactive_ip,"},{"line_number":425,"context_line":"                  \u0027new\u0027: self.active_ip})"}],"source_content_type":"text/x-python","patch_set":17,"id":"df140735_5f5ceceb","line":422,"range":{"start_line":422,"start_character":17,"end_line":422,"end_character":19},"updated":"2017-06-03 20:24:32.000000000","message":"Remove _()","commit_id":"1aab974a28a43deed986ec0da1265443f6972e15"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd667a0f6468f4c61c3c30eadf4a863ccd04973a","unresolved":false,"context_lines":[{"line_number":431,"context_line":"        volume_defined \u003d self._assistant.is_vdisk_defined(vol_name)"},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"        if not volume_defined:"},{"line_number":434,"context_line":"            LOG.error(_(\u0027ensure_export: Volume %s not found on storage.\u0027),"},{"line_number":435,"context_line":"                      volume[\u0027name\u0027])"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"    def create_export(self, ctxt, volume, connector):"}],"source_content_type":"text/x-python","patch_set":17,"id":"df140735_3f75b864","line":434,"range":{"start_line":434,"start_character":22,"end_line":434,"end_character":24},"updated":"2017-06-03 20:24:32.000000000","message":"Remove _()","commit_id":"1aab974a28a43deed986ec0da1265443f6972e15"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd667a0f6468f4c61c3c30eadf4a863ccd04973a","unresolved":false,"context_lines":[{"line_number":457,"context_line":"        pool \u003d utils.extract_host(volume[\u0027host\u0027], \u0027pool\u0027)"},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"        opts[\u0027iogrp\u0027] \u003d self._assistant.select_io_group(self._state, opts)"},{"line_number":460,"context_line":"        self._assistant.create_vdisk(volume[\u0027name\u0027], str(volume[\u0027size\u0027]),"},{"line_number":461,"context_line":"                                     \u0027gb\u0027, pool, opts)"},{"line_number":462,"context_line":"        if opts[\u0027qos\u0027]:"},{"line_number":463,"context_line":"            self._assistant.add_vdisk_qos(volume[\u0027name\u0027], opts[\u0027qos\u0027])"}],"source_content_type":"text/x-python","patch_set":17,"id":"df140735_1f72f47b","line":460,"range":{"start_line":460,"start_character":53,"end_line":460,"end_character":56},"updated":"2017-06-03 20:24:32.000000000","message":"Use six.text_type instead of str","commit_id":"1aab974a28a43deed986ec0da1265443f6972e15"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd667a0f6468f4c61c3c30eadf4a863ccd04973a","unresolved":false,"context_lines":[{"line_number":481,"context_line":""},{"line_number":482,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":483,"context_line":"        if snapshot[\u0027volume_size\u0027] \u003e volume[\u0027size\u0027]:"},{"line_number":484,"context_line":"            msg \u003d (_(\"create_volume_from_snapshot: snapshot %(snapshot_name)s \""},{"line_number":485,"context_line":"                     \"size is %(snapshot_size)dGB and doesn\u0027t fit in target \""},{"line_number":486,"context_line":"                     \"volume %(volume_name)s of size %(volume_size)dGB.\") %"},{"line_number":487,"context_line":"                   {\u0027snapshot_name\u0027: snapshot[\u0027name\u0027],"},{"line_number":488,"context_line":"                    \u0027snapshot_size\u0027: snapshot[\u0027volume_size\u0027],"},{"line_number":489,"context_line":"                    \u0027volume_name\u0027: volume[\u0027name\u0027],"},{"line_number":490,"context_line":"                    \u0027volume_size\u0027: volume[\u0027size\u0027]})"},{"line_number":491,"context_line":"            LOG.error(msg)"},{"line_number":492,"context_line":"            raise exception.InvalidInput(message\u003dmsg)"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"        opts \u003d self._get_vdisk_params("},{"line_number":495,"context_line":"            volume[\u0027volume_type_id\u0027],"}],"source_content_type":"text/x-python","patch_set":17,"id":"df140735_ff6aa07e","line":492,"range":{"start_line":484,"start_character":1,"end_line":492,"end_character":53},"updated":"2017-06-03 20:24:32.000000000","message":"In this case, _() is needed because it is raised in the exception.  This is the correct usage.","commit_id":"1aab974a28a43deed986ec0da1265443f6972e15"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd667a0f6468f4c61c3c30eadf4a863ccd04973a","unresolved":false,"context_lines":[{"line_number":505,"context_line":"        # with two different size. So InStorage will copy volume"},{"line_number":506,"context_line":"        # from snapshot first and then extend the volume to"},{"line_number":507,"context_line":"        # the target size."},{"line_number":508,"context_line":"        if volume[\u0027size\u0027] \u003e snapshot[\u0027volume_size\u0027]:"},{"line_number":509,"context_line":"            # extend the new created target volume to expected size."},{"line_number":510,"context_line":"            self._extend_volume_op(volume, volume[\u0027size\u0027],"},{"line_number":511,"context_line":"                                   snapshot[\u0027volume_size\u0027])"},{"line_number":512,"context_line":"        if opts[\u0027qos\u0027]:"},{"line_number":513,"context_line":"            self._assistant.add_vdisk_qos(volume[\u0027name\u0027], opts[\u0027qos\u0027])"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":516,"context_line":"        rep_type \u003d self._get_volume_replicated_type(ctxt, volume)"}],"source_content_type":"text/x-python","patch_set":17,"id":"df140735_df67dcb6","line":513,"range":{"start_line":508,"start_character":1,"end_line":513,"end_character":70},"updated":"2017-06-03 20:24:32.000000000","message":"Use volume.size, snapshot.volume_size, volume.name because volume and snapshot are objects.","commit_id":"1aab974a28a43deed986ec0da1265443f6972e15"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd667a0f6468f4c61c3c30eadf4a863ccd04973a","unresolved":false,"context_lines":[{"line_number":519,"context_line":"            self._validate_replication_enabled()"},{"line_number":520,"context_line":"            replica_obj \u003d self._get_replica_obj(rep_type)"},{"line_number":521,"context_line":"            replica_obj.volume_replication_setup(ctxt, volume)"},{"line_number":522,"context_line":"            return {\u0027replication_status\u0027: \u0027enabled\u0027}"},{"line_number":523,"context_line":"        elif opts.get(\u0027replication\u0027):"},{"line_number":524,"context_line":"            replica_status \u003d self.replication.create_replica(ctxt, volume)"},{"line_number":525,"context_line":"            if replica_status:"}],"source_content_type":"text/x-python","patch_set":17,"id":"df140735_5f118c03","line":522,"range":{"start_line":522,"start_character":43,"end_line":522,"end_character":50},"updated":"2017-06-03 20:24:32.000000000","message":"Use cinder.objects.fields.ReplicationStatus\n\nPlease check other places as well.","commit_id":"1aab974a28a43deed986ec0da1265443f6972e15"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bd667a0f6468f4c61c3c30eadf4a863ccd04973a","unresolved":false,"context_lines":[{"line_number":595,"context_line":""},{"line_number":596,"context_line":"        rel_info \u003d self._assistant.get_relationship_info(volume_name)"},{"line_number":597,"context_line":"        if rel_info:"},{"line_number":598,"context_line":"            LOG.warning(_(\u0027_extend_volume_op: Extending a volume with \u0027"},{"line_number":599,"context_line":"                          \u0027remote copy is not recommended.\u0027))"},{"line_number":600,"context_line":"            try:"},{"line_number":601,"context_line":"                tgt_vol \u003d (instorage_const.REPLICA_AUX_VOL_PREFIX +"}],"source_content_type":"text/x-python","patch_set":17,"id":"df140735_3ffa58bc","line":598,"range":{"start_line":598,"start_character":24,"end_line":598,"end_character":26},"updated":"2017-06-03 20:24:32.000000000","message":"Remove _() because this message is not raised in an exception.\n\nPlease check other places as well.","commit_id":"1aab974a28a43deed986ec0da1265443f6972e15"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8efdabb2d8c8e37b6fc1926daee3ca37a8f16e28","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        # InStorage has the limitation that can not burst more than 3 new ssh"},{"line_number":187,"context_line":"        # connections within 1 second. So slow down the initialization."},{"line_number":188,"context_line":"        # however, this maybe removed later."},{"line_number":189,"context_line":"        time.sleep(1)"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"        # Update the instorage state"},{"line_number":192,"context_line":"        self._update_instorage_state()"}],"source_content_type":"text/x-python","patch_set":18,"id":"df140735_eae5cfdd","line":189,"updated":"2017-06-07 15:26:35.000000000","message":"Please use greenthread.sleep","commit_id":"1c4e64ece6d596ddb1f2a54ca632e974d2158364"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8efdabb2d8c8e37b6fc1926daee3ca37a8f16e28","unresolved":false,"context_lines":[{"line_number":659,"context_line":"    def create_snapshot(self, snapshot):"},{"line_number":660,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":661,"context_line":"        try:"},{"line_number":662,"context_line":"            source_vol \u003d self.db.volume_get(ctxt, snapshot.volume_id)"},{"line_number":663,"context_line":"        except Exception:"},{"line_number":664,"context_line":"            msg \u003d (_(\u0027create_snapshot: get source volume failed.\u0027))"},{"line_number":665,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":18,"id":"df140735_4a8efbd0","line":662,"range":{"start_line":662,"start_character":12,"end_line":662,"end_character":69},"updated":"2017-06-07 15:26:35.000000000","message":"Should use snapshot.volume directly.","commit_id":"1c4e64ece6d596ddb1f2a54ca632e974d2158364"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8efdabb2d8c8e37b6fc1926daee3ca37a8f16e28","unresolved":false,"context_lines":[{"line_number":679,"context_line":"                                              self.configuration)"},{"line_number":680,"context_line":""},{"line_number":681,"context_line":"    def _add_vdisk_copy_op(self, ctxt, volume, new_op):"},{"line_number":682,"context_line":"        metadata \u003d self.db.volume_admin_metadata_get(ctxt.elevated(),"},{"line_number":683,"context_line":"                                                     volume.id)"},{"line_number":684,"context_line":"        curr_ops \u003d metadata.get(\u0027vdiskcopyops\u0027, None)"},{"line_number":685,"context_line":"        if curr_ops:"},{"line_number":686,"context_line":"            curr_ops_list \u003d [tuple(x.split(\u0027:\u0027)) for x in curr_ops.split(\u0027;\u0027)]"}],"source_content_type":"text/x-python","patch_set":18,"id":"df140735_8a5bf352","line":683,"range":{"start_line":682,"start_character":1,"end_line":683,"end_character":63},"updated":"2017-06-07 15:26:35.000000000","message":"Use volume.admin_metadata directly.  Don\u0027t directly call db from the driver.","commit_id":"1c4e64ece6d596ddb1f2a54ca632e974d2158364"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8efdabb2d8c8e37b6fc1926daee3ca37a8f16e28","unresolved":false,"context_lines":[{"line_number":688,"context_line":"        else:"},{"line_number":689,"context_line":"            new_ops_list \u003d [new_op]"},{"line_number":690,"context_line":"        new_ops_str \u003d \u0027;\u0027.join([\u0027:\u0027.join(x) for x in new_ops_list])"},{"line_number":691,"context_line":"        self.db.volume_admin_metadata_update(ctxt.elevated(), volume.id,"},{"line_number":692,"context_line":"                                             {\u0027vdiskcopyops\u0027: new_ops_str},"},{"line_number":693,"context_line":"                                             False)"},{"line_number":694,"context_line":"        if volume.id in self._vdiskcopyops:"},{"line_number":695,"context_line":"            self._vdiskcopyops[volume.id].append(new_op)"},{"line_number":696,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":18,"id":"df140735_be55dcfc","line":693,"range":{"start_line":691,"start_character":1,"end_line":693,"end_character":51},"updated":"2017-06-07 15:26:35.000000000","message":"Driver should not be directly write to the db.  You should return it via a dict when creating volume, etc.","commit_id":"1c4e64ece6d596ddb1f2a54ca632e974d2158364"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8efdabb2d8c8e37b6fc1926daee3ca37a8f16e28","unresolved":false,"context_lines":[{"line_number":756,"context_line":"        copy_items \u003d list(self._vdiskcopyops.items())"},{"line_number":757,"context_line":"        for vol_id, copy_ops in copy_items:"},{"line_number":758,"context_line":"            try:"},{"line_number":759,"context_line":"                volume \u003d self.db.volume_get(ctxt, vol_id)"},{"line_number":760,"context_line":"            except Exception:"},{"line_number":761,"context_line":"                LOG.warning(\u0027Volume %s does not exist.\u0027, vol_id)"},{"line_number":762,"context_line":"                del self._vdiskcopyops[vol_id]"}],"source_content_type":"text/x-python","patch_set":18,"id":"df140735_4a039b10","line":759,"range":{"start_line":759,"start_character":25,"end_line":759,"end_character":57},"updated":"2017-06-07 15:26:35.000000000","message":"It\u0027s not good to access db directly in the driver. Is it possible to save volume objects in _vdiskcopyops?","commit_id":"1c4e64ece6d596ddb1f2a54ca632e974d2158364"}],"cinder/volume/drivers/inspur/instorage_fc.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"112a4bb5a9ccbdefcece1c21c9e13be5df6cf30b","unresolved":false,"context_lines":[{"line_number":48,"context_line":"from cinder import exception\r"},{"line_number":49,"context_line":"from cinder import interface\r"},{"line_number":50,"context_line":"from cinder import utils\r"},{"line_number":51,"context_line":"from cinder.i18n import _, _LE, _LI, _LW\r"},{"line_number":52,"context_line":"from cinder.volume.drivers.inspur import (\r"},{"line_number":53,"context_line":"    instorage_common as instorage_common)\r"},{"line_number":54,"context_line":"from cinder.zonemanager import utils as fczm_utils\r"}],"source_content_type":"text/x-python","patch_set":9,"id":"ffe62b97_98f7465a","line":51,"range":{"start_line":51,"start_character":26,"end_line":51,"end_character":40},"updated":"2017-03-28 15:00:41.000000000","message":"Need to be removed now.","commit_id":"bcf172a0a81a6676dc0a86c43cd722de2b0648ec"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ccd85fefb0d53dbfaf978198cdce8d48d024593c","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    cfg.BoolOpt(\u0027instorage_mcs_multipath_enabled\u0027,"},{"line_number":60,"context_line":"                default\u003dFalse,"},{"line_number":61,"context_line":"                help\u003d\u0027Connect with multipath (FC only; iSCSI multipath is \u0027"},{"line_number":62,"context_line":"                     \u0027controlled by Nova)\u0027),"},{"line_number":63,"context_line":"]"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":12,"id":"bff0334d_e874876a","line":62,"updated":"2017-04-07 13:07:15.000000000","message":"multipath is enabled/disabled system wide in Nova and that settings is the same for both iSCSI and FC.      \n\nThe setting in Nova to enable multipath support is the libvirt setting named \u0027volume_use_multipath\u0027.   Either it\u0027s enabled on the entire host or it\u0027s not.\n\nWhen you get the connector info passed in to initialize_connection, you will get a system wide boolean that tells you if multipath is enabled and detected running on the system.  You will get this for both iSCSI and FC on the same host.\n\nAlso, I don\u0027t see where this option is even used in this file.","commit_id":"18c13385711658b6b1e220714f344e081117cbbc"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ccd85fefb0d53dbfaf978198cdce8d48d024593c","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"@interface.volumedriver"},{"line_number":70,"context_line":"class InStorageMCSFCDriver(instorage_common.InStorageMCSCommonDriver):"},{"line_number":71,"context_line":"    \"\"\"INSPUR InStorage MCS FC volume driver."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    Version history:"}],"source_content_type":"text/x-python","patch_set":12,"id":"bff0334d_48c01351","line":70,"updated":"2017-04-07 13:07:15.000000000","message":"you will want to extend the FC driver and get the validate_connector for free.\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/driver.py#L2920","commit_id":"18c13385711658b6b1e220714f344e081117cbbc"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ccd85fefb0d53dbfaf978198cdce8d48d024593c","unresolved":false,"context_lines":[{"line_number":96,"context_line":"            raise exception.InvalidConnectorException("},{"line_number":97,"context_line":"                missing\u003d\u0027wwpns\u0027)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    @fczm_utils.add_fc_zone"},{"line_number":100,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":101,"context_line":"        \"\"\"Perform necessary work to make a FC connection.\"\"\""},{"line_number":102,"context_line":"        @utils.synchronized(\u0027instorage-host\u0027 + self._state[\u0027system_id\u0027] +"}],"source_content_type":"text/x-python","patch_set":12,"id":"bff0334d_889a9b6b","line":99,"updated":"2017-04-07 13:07:15.000000000","message":"might want to add @utils.trace here for future debugging of what\u0027s passed in and is returned","commit_id":"18c13385711658b6b1e220714f344e081117cbbc"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ccd85fefb0d53dbfaf978198cdce8d48d024593c","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":101,"context_line":"        \"\"\"Perform necessary work to make a FC connection.\"\"\""},{"line_number":102,"context_line":"        @utils.synchronized(\u0027instorage-host\u0027 + self._state[\u0027system_id\u0027] +"},{"line_number":103,"context_line":"                            connector[\u0027host\u0027], external\u003dTrue)"},{"line_number":104,"context_line":"        def _do_initialize_connection_locked():"},{"line_number":105,"context_line":"            return self._do_initialize_connection(volume, connector)"},{"line_number":106,"context_line":"        return _do_initialize_connection_locked()"}],"source_content_type":"text/x-python","patch_set":12,"id":"bff0334d_c8cc2363","line":103,"updated":"2017-04-07 13:07:15.000000000","message":"if you have to add a locking mechanism because  your backend is broken, you need to use the new distributed locking mechanism, so that your driver might work in an active/active HA setup.   The lock you have in place here, is a local file system lock only.\n\nTake a look at the coordinator here:\nhttps://github.com/openstack/cinder/blob/master/cinder/coordination.py","commit_id":"18c13385711658b6b1e220714f344e081117cbbc"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ccd85fefb0d53dbfaf978198cdce8d48d024593c","unresolved":false,"context_lines":[{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        return i_t_map"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    @fczm_utils.remove_fc_zone"},{"line_number":220,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":221,"context_line":"        \"\"\"Cleanup after an FC connection has been terminated.\"\"\""},{"line_number":222,"context_line":"        # If a fake connector is generated by nova when the host"}],"source_content_type":"text/x-python","patch_set":12,"id":"bff0334d_2884afd3","line":219,"updated":"2017-04-07 13:07:15.000000000","message":"@utils.trace","commit_id":"18c13385711658b6b1e220714f344e081117cbbc"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a4bc1a8250b5f815043ef37d6c291a12c4d11d91","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        self.protocol \u003d \u0027FC\u0027"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    @fczm_utils.add_fc_zone"},{"line_number":84,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":85,"context_line":"        \"\"\"Perform necessary work to make a FC connection.\"\"\""},{"line_number":86,"context_line":"        @coordination.synchronized(\u0027instorage-host\u0027 +"},{"line_number":87,"context_line":"                                   self._state[\u0027system_id\u0027] +"},{"line_number":88,"context_line":"                                   connector[\u0027host\u0027])"},{"line_number":89,"context_line":"        def _do_initialize_connection_locked():"},{"line_number":90,"context_line":"            return self._do_initialize_connection(volume, connector)"},{"line_number":91,"context_line":"        return _do_initialize_connection_locked()"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def _do_initialize_connection(self, volume, connector):"},{"line_number":94,"context_line":"        \"\"\"Perform necessary work to make a FC connection."}],"source_content_type":"text/x-python","patch_set":15,"id":"df140735_34b9a4cb","line":91,"range":{"start_line":84,"start_character":0,"end_line":91,"end_character":49},"updated":"2017-06-01 11:38:13.000000000","message":"-1: Please use the formatting feature of our synchronized decorator to simplify the code.  You can remove this whole method and just rename the `_do_initialize_connection` to `initialize_connection` with the right decorator:\n\n @coordination.synchronized(\u0027instorage-host{self._state[system_id]}-{connector[host]}\u0027)\n @fczm_utils.add_fc_zone\n def initialize_connection(self, volume, connector):","commit_id":"fc5b3c26821f7daace7a74e1cddb3af1c26d494b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a4bc1a8250b5f815043ef37d6c291a12c4d11d91","unresolved":false,"context_lines":[{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        return i_t_map"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    @fczm_utils.remove_fc_zone"},{"line_number":205,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":206,"context_line":"        \"\"\"Cleanup after an FC connection has been terminated.\"\"\""},{"line_number":207,"context_line":"        # If a fake connector is generated by nova when the host"},{"line_number":208,"context_line":"        # is down, then the connector will not have a host property,"},{"line_number":209,"context_line":"        # In this case construct the lock without the host property"},{"line_number":210,"context_line":"        # so that all the fake connectors to an MCS are serialized"},{"line_number":211,"context_line":"        host \u003d connector[\u0027host\u0027] if \u0027host\u0027 in connector else \"\""},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        @coordination.synchronized(\u0027instorage-host\u0027 +"},{"line_number":214,"context_line":"                                   self._state[\u0027system_id\u0027] + host)"},{"line_number":215,"context_line":"        def _do_terminate_connection_locked():"},{"line_number":216,"context_line":"            return self._do_terminate_connection(volume, connector,"},{"line_number":217,"context_line":"                                                 **kwargs)"},{"line_number":218,"context_line":"        return _do_terminate_connection_locked()"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    def _do_terminate_connection(self, volume, connector, **kwargs):"},{"line_number":221,"context_line":"        \"\"\"Cleanup after an FC connection has been terminated."}],"source_content_type":"text/x-python","patch_set":15,"id":"df140735_14bc60b9","line":218,"range":{"start_line":204,"start_character":0,"end_line":218,"end_character":48},"updated":"2017-06-01 11:38:13.000000000","message":"-1: Same here","commit_id":"fc5b3c26821f7daace7a74e1cddb3af1c26d494b"}],"cinder/volume/drivers/inspur/instorage_iscsi.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"c8b61739ab6ba0d6d9ee271e985ffd8ae93611d5","unresolved":false,"context_lines":[{"line_number":227,"context_line":"            ipaddr \u003d preferred_node_entry[\u0027ipv4\u0027][0]\r"},{"line_number":228,"context_line":"        else:\r"},{"line_number":229,"context_line":"            ipaddr \u003d preferred_node_entry[\u0027ipv6\u0027][0]\r"},{"line_number":230,"context_line":"        properties[\u0027target_portal\u0027] \u003d \u0027%s:%s\u0027 % (ipaddr, \u00273260\u0027)\r"},{"line_number":231,"context_line":"        properties[\u0027target_iqn\u0027] \u003d preferred_node_entry[\u0027iscsi_name\u0027]\r"},{"line_number":232,"context_line":"        if chap_secret:\r"},{"line_number":233,"context_line":"            properties.update(auth_method\u003d\u0027CHAP\u0027,\r"}],"source_content_type":"text/x-python","patch_set":9,"id":"ffe62b97_37a6c010","line":230,"updated":"2017-03-29 21:36:49.000000000","message":"This will break if ipaddr is an IPv6 address that isn\u0027t surrounded with brackets.","commit_id":"bcf172a0a81a6676dc0a86c43cd722de2b0648ec"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"c8b61739ab6ba0d6d9ee271e985ffd8ae93611d5","unresolved":false,"context_lines":[{"line_number":254,"context_line":"        except Exception as ex:\r"},{"line_number":255,"context_line":"            msg \u003d (_(\u0027_get_multi_iscsi_data: Failed to \u0027\r"},{"line_number":256,"context_line":"                     \u0027get port ip because of exception: \u0027\r"},{"line_number":257,"context_line":"                     \u0027%s.\u0027) % ex)\r"},{"line_number":258,"context_line":"            LOG.error(msg)\r"},{"line_number":259,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)\r"},{"line_number":260,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":9,"id":"ffe62b97_777b288b","line":257,"updated":"2017-03-29 21:36:49.000000000","message":"Use LOG.exception instead of error here.  Remove ex from the message string.","commit_id":"bcf172a0a81a6676dc0a86c43cd722de2b0648ec"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"c8b61739ab6ba0d6d9ee271e985ffd8ae93611d5","unresolved":false,"context_lines":[{"line_number":320,"context_line":"                LOG.error(msg)\r"},{"line_number":321,"context_line":"                raise exception.VolumeDriverException(message\u003dmsg)\r"},{"line_number":322,"context_line":"        else:\r"},{"line_number":323,"context_line":"            # See bug #1244257\r"},{"line_number":324,"context_line":"            host_name \u003d None\r"},{"line_number":325,"context_line":"\r"},{"line_number":326,"context_line":"        # Unmap volumes, if hostname is None, need to get value from vdiskmap\r"}],"source_content_type":"text/x-python","patch_set":9,"id":"ffe62b97_377120a9","line":323,"updated":"2017-03-29 21:36:49.000000000","message":"Please write some information here instead of a bug number.","commit_id":"bcf172a0a81a6676dc0a86c43cd722de2b0648ec"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ccd85fefb0d53dbfaf978198cdce8d48d024593c","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        self.configuration.append_config_values("},{"line_number":91,"context_line":"            instorage_mcs_iscsi_opts)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def validate_connector(self, connector):"},{"line_number":94,"context_line":"        \"\"\"Check connector for at least one enabled iSCSI protocol.\"\"\""},{"line_number":95,"context_line":"        if \u0027initiator\u0027 not in connector:"},{"line_number":96,"context_line":"            LOG.error(_(\u0027The connector does not contain the required \u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"bff0334d_6329b888","line":93,"updated":"2017-04-07 13:07:15.000000000","message":"this exists in the base iSCSI class too","commit_id":"18c13385711658b6b1e220714f344e081117cbbc"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ccd85fefb0d53dbfaf978198cdce8d48d024593c","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":102,"context_line":"        \"\"\"Perform necessary work to make an iSCSI connection.\"\"\""},{"line_number":103,"context_line":"        @utils.synchronized(\u0027instorage-host\u0027 + self._state[\u0027system_id\u0027] +"},{"line_number":104,"context_line":"                            connector[\u0027host\u0027], external\u003dTrue)"},{"line_number":105,"context_line":"        def _do_initialize_connection_locked():"},{"line_number":106,"context_line":"            return self._do_initialize_connection(volume, connector)"},{"line_number":107,"context_line":"        return _do_initialize_connection_locked()"}],"source_content_type":"text/x-python","patch_set":12,"id":"bff0334d_432c7498","line":104,"updated":"2017-04-07 13:07:15.000000000","message":"use the distributed lock mechanism in the coordinator.","commit_id":"18c13385711658b6b1e220714f344e081117cbbc"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ccd85fefb0d53dbfaf978198cdce8d48d024593c","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        host \u003d connector[\u0027host\u0027] if \u0027host\u0027 in connector else \"\""},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        @utils.synchronized(\u0027instorage-host\u0027 + self._state[\u0027system_id\u0027] + host,"},{"line_number":118,"context_line":"                            external\u003dTrue)"},{"line_number":119,"context_line":"        def _do_terminate_connection_locked():"},{"line_number":120,"context_line":"            return self._do_terminate_connection(volume, connector,"},{"line_number":121,"context_line":"                                                 **kwargs)"}],"source_content_type":"text/x-python","patch_set":12,"id":"bff0334d_e33ca8c9","line":118,"updated":"2017-04-07 13:07:15.000000000","message":"same","commit_id":"18c13385711658b6b1e220714f344e081117cbbc"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a4bc1a8250b5f815043ef37d6c291a12c4d11d91","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        self.configuration.append_config_values("},{"line_number":94,"context_line":"            instorage_mcs_iscsi_opts)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":97,"context_line":"        \"\"\"Perform necessary work to make an iSCSI connection.\"\"\""},{"line_number":98,"context_line":"        @coordination.synchronized(\u0027instorage-host\u0027 +"},{"line_number":99,"context_line":"                                   self._state[\u0027system_id\u0027] +"},{"line_number":100,"context_line":"                                   connector[\u0027host\u0027])"},{"line_number":101,"context_line":"        def _do_initialize_connection_locked():"},{"line_number":102,"context_line":"            return self._do_initialize_connection(volume, connector)"},{"line_number":103,"context_line":"        return _do_initialize_connection_locked()"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":106,"context_line":"        \"\"\"Cleanup after an iSCSI connection has been terminated.\"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"df140735_d4aee896","line":103,"range":{"start_line":96,"start_character":0,"end_line":103,"end_character":49},"updated":"2017-06-01 11:38:13.000000000","message":"-1: Please use the formatting feature of our synchronized decorator to simplify the code.  You can remove this whole method and just rename the `_do_initialize_connection` to `initialize_connection` with the right decorator:\n\n @coordination.synchronized(\u0027instorage-host{self._state[system_id]}-{connector[host]}\u0027)\n def initialize_connection(self, volume, connector):","commit_id":"fc5b3c26821f7daace7a74e1cddb3af1c26d494b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a4bc1a8250b5f815043ef37d6c291a12c4d11d91","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            return self._do_initialize_connection(volume, connector)"},{"line_number":103,"context_line":"        return _do_initialize_connection_locked()"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":106,"context_line":"        \"\"\"Cleanup after an iSCSI connection has been terminated.\"\"\""},{"line_number":107,"context_line":"        # If a fake connector is generated by nova when the host"},{"line_number":108,"context_line":"        # is down, then the connector will not have a host property,"},{"line_number":109,"context_line":"        # In this case construct the lock without the host property"},{"line_number":110,"context_line":"        # so that all the fake connectors to an MCS are serialized"},{"line_number":111,"context_line":"        host \u003d connector[\u0027host\u0027] if \u0027host\u0027 in connector else \"\""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        @coordination.synchronized(\u0027instorage-host\u0027 + self._state[\u0027system_id\u0027]"},{"line_number":114,"context_line":"                                   + host)"},{"line_number":115,"context_line":"        def _do_terminate_connection_locked():"},{"line_number":116,"context_line":"            return self._do_terminate_connection(volume, connector,"},{"line_number":117,"context_line":"                                                 **kwargs)"},{"line_number":118,"context_line":"        return _do_terminate_connection_locked()"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def _do_initialize_connection(self, volume, connector):"},{"line_number":121,"context_line":"        \"\"\"Perform necessary work to make an iSCSI connection.\"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"df140735_749f1c5f","line":118,"range":{"start_line":105,"start_character":0,"end_line":118,"end_character":48},"updated":"2017-06-01 11:38:13.000000000","message":"-1: Same here","commit_id":"fc5b3c26821f7daace7a74e1cddb3af1c26d494b"}],"releasenotes/notes/bp-inspur-instorage-driver-40371862c9559238.yaml":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"226242fee0874a7e8416c8b5b8c326ddfac5a6f4","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    New Cinder driver for Inspur InStorage.Features that "},{"line_number":5,"context_line":"    Inspur Driver support"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    Create, list, delete, attach (map), and detach (unmap) volumes"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"ba2be162_f23f3585","line":4,"updated":"2017-03-06 19:04:54.000000000","message":"Please, remove trailing space here","commit_id":"a795ca904d2f3d965024a63f623f72cb2f0fcead"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"b0c101e4cd695f70a1db0e583f5d67efd1e8266e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    New Cinder driver for Inspur InStorage.Features that"},{"line_number":5,"context_line":"    Inspur Driver support"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    Create, list, delete, attach (map), and detach (unmap) volumes"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"9a30ddce_a7ad6b8a","line":4,"range":{"start_line":4,"start_character":42,"end_line":4,"end_character":44},"updated":"2017-03-07 13:09:18.000000000","message":"Missing space.","commit_id":"271042703d30bfa4d7359c7da953f0e7d958dda5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"b0c101e4cd695f70a1db0e583f5d67efd1e8266e","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    New Cinder driver for Inspur InStorage.Features that"},{"line_number":5,"context_line":"    Inspur Driver support"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    Create, list, delete, attach (map), and detach (unmap) volumes"},{"line_number":8,"context_line":"    Create, list, and delete volume snapshots"},{"line_number":9,"context_line":"    Copy an image to a volume"},{"line_number":10,"context_line":"    Copy a volume to an image"},{"line_number":11,"context_line":"    Clone a volume"},{"line_number":12,"context_line":"    Extend a volume"},{"line_number":13,"context_line":"    Retype a volume"},{"line_number":14,"context_line":"    Create a volume from a snapshot"},{"line_number":15,"context_line":"    Manage an existing volume"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"9a30ddce_47ecafc7","line":15,"range":{"start_line":5,"start_character":4,"end_line":15,"end_character":29},"updated":"2017-03-07 13:09:18.000000000","message":"This does not need to be in the release notes. Just have a one or two sentence statement that there is a new cinder volume driver for Inspur InStorage for FC and iSCSI.","commit_id":"271042703d30bfa4d7359c7da953f0e7d958dda5"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"33c94cd09640689d4da36a79439fab707993d4f1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    New Cinder volume driver for Inspur InStorage "},{"line_number":5,"context_line":"    The new driver supports both FC and iSCSI"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"ffe62b97_4ae452e1","line":4,"updated":"2017-03-28 09:36:18.000000000","message":"Please, remove trailing space","commit_id":"bcf172a0a81a6676dc0a86c43cd722de2b0648ec"}]}
