)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     pengyun \u003copenstack-cinder@pengyunnetwork.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2019-10-22 15:22:47 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"fix pylint and rst doc issues."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Ifd2eb169a53573ef6b801174b0c0b84f4d9fbb5e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3fa7e38b_7a296899","line":7,"updated":"2019-10-22 12:26:46.000000000","message":"You lost all of your original commit text. You will want to switch that back.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"}],"cinder/tests/unit/volume/drivers/pengyun/test_pengyun_driver.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from cinder import test"},{"line_number":22,"context_line":"from cinder.volume import configuration as conf"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from cinder.volume.drivers.pengyun import connectors"},{"line_number":25,"context_line":"from cinder.volume.drivers.pengyun import constants"},{"line_number":26,"context_line":"from cinder.volume.drivers.pengyun import pengyun_driver"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_1a187482","line":23,"updated":"2019-10-22 12:26:46.000000000","message":"Extra blank line should be removed.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":414,"context_line":"    def tearDown(self):"},{"line_number":415,"context_line":"        super(PENGYUNISCSIDriverTestCase, self).tearDown()"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    # @mock.patch.object(rest_client.RestClient, \u0027get_volume_status\u0027,"},{"line_number":418,"context_line":"    #                    return_value\u003d{\u0027Stable\u0027})"},{"line_number":419,"context_line":"    # def test_create_volume_success(self, mock_get_volume_status):"},{"line_number":420,"context_line":"    @mock.patch.object(FakePENGYUNISCSIDriver, \u0027extend_volume\u0027)"},{"line_number":421,"context_line":"    @mock.patch.object(FakePENGYUNISCSIDriver, \u0027create_volume\u0027)"},{"line_number":422,"context_line":"    def test_create_volume_success(self, mock_create_volume,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_3a1d3073","line":419,"range":{"start_line":417,"start_character":4,"end_line":419,"end_character":67},"updated":"2019-10-22 12:26:46.000000000","message":"Remove commented out code.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":426,"context_line":"        retval \u003d self.driver.create_volume(self.volume)"},{"line_number":427,"context_line":"        self.assertIsNone(retval)"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"        mock_extend_volume.return_value \u003d None"},{"line_number":430,"context_line":"        retval \u003d self.driver.extend_volume(self.volume, 2)"},{"line_number":431,"context_line":"        self.assertIsNone(retval)"},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"    @mock.patch.object(FakePENGYUNISCSIDriver, \u0027delete_volume\u0027)"},{"line_number":434,"context_line":"    def test_delete_volume_success(self, mock_delete_volume):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_ba08402d","line":431,"range":{"start_line":429,"start_character":8,"end_line":431,"end_character":33},"updated":"2019-10-22 12:26:46.000000000","message":"Don\u0027t perform two different actions in one unit test. Test the create and test the extend separately.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":464,"context_line":"                         return_value\u003d(\u0027Stable\u0027, 1024))"},{"line_number":465,"context_line":"        expected_value \u003d self.driver.create_volume_from_snapshot("},{"line_number":466,"context_line":"            self.volume, self.snapshot)"},{"line_number":467,"context_line":"        self.assertEqual(expected_value[\u0027metadata\u0027][\u0027pyname\u0027], \u0027nj\u0027)"},{"line_number":468,"context_line":"        self.assertEqual(expected_value[\u0027provider_location\u0027], \u0027world\u0027)"},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"    def test_create_cloned_volume(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_d5062d1d","line":467,"range":{"start_line":467,"start_character":25,"end_line":467,"end_character":67},"updated":"2019-10-22 12:26:46.000000000","message":"assertEqual argument order should be (expected, actual) - variable naming of the actual result here is a little confusing or misleading by naming it expected_value.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":478,"context_line":"        expected_value \u003d self.driver.create_cloned_volume("},{"line_number":479,"context_line":"            self.volume, src_vref)"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"        self.assertIsNone(expected_value, None)"},{"line_number":482,"context_line":"        # self.assertEqual(expected_value[\u0027metadata\u0027][\u0027pyname\u0027], \u0027nj\u0027)"},{"line_number":483,"context_line":"        # self.assertEqual(expected_value[\u0027provider_location\u0027], \u0027world\u0027)"},{"line_number":484,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_551a3d6f","line":481,"range":{"start_line":481,"start_character":40,"end_line":481,"end_character":46},"updated":"2019-10-22 12:26:46.000000000","message":"Remove this.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":479,"context_line":"            self.volume, src_vref)"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"        self.assertIsNone(expected_value, None)"},{"line_number":482,"context_line":"        # self.assertEqual(expected_value[\u0027metadata\u0027][\u0027pyname\u0027], \u0027nj\u0027)"},{"line_number":483,"context_line":"        # self.assertEqual(expected_value[\u0027provider_location\u0027], \u0027world\u0027)"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"        # self.mock_object(rest_client.RestClient, \u0027volume_not_found\u0027,"},{"line_number":486,"context_line":"        #                  return_value\u003dTrue)"},{"line_number":487,"context_line":"        # expected_value \u003d self.driver.create_cloned_volume("},{"line_number":488,"context_line":"        #     self.volume, src_vref)"},{"line_number":489,"context_line":"        # self.assertRaises(exception.VolumeDriverException)"},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"    def test_create_export(self):"},{"line_number":492,"context_line":"        self.volume \u003d self._stub_volume()"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_b50db136","line":489,"range":{"start_line":482,"start_character":8,"end_line":489,"end_character":60},"updated":"2019-10-22 12:26:46.000000000","message":"Remove commented out code.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":494,"context_line":"                         return_value\u003dFalse)"},{"line_number":495,"context_line":"        self.mock_object(rest_client.RestClient, \u0027pull_driver_have_status\u0027,"},{"line_number":496,"context_line":"                         return_value\u003d\u0027LAUNCHED\u0027)"},{"line_number":497,"context_line":"        self.driver.create_export(\u0027\u0027, self.volume)"},{"line_number":498,"context_line":""},{"line_number":499,"context_line":"    def test_attach_volume(self):"},{"line_number":500,"context_line":"        self.volume \u003d self._stub_volume()"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_152605bc","line":497,"updated":"2019-10-22 12:26:46.000000000","message":"No assertions of expected calls or results in this unit test. This should be expanded to actually test for what was expected to happen.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":529,"context_line":"                         return_value\u003ddevice_info)"},{"line_number":530,"context_line":"        self.mock_object(connectors.ISCSIConnector, \u0027check_valid_device\u0027,"},{"line_number":531,"context_line":"                         return_value\u003dTrue)"},{"line_number":532,"context_line":"        # iscsi_properties \u003d"},{"line_number":533,"context_line":"        self.mock_object(pengyun_driver.PENGYUNISCSIDriver,"},{"line_number":534,"context_line":"                         \u0027_get_iscsi_properties\u0027, return_value\u003d\"\")"},{"line_number":535,"context_line":"        self.driver._attach_volume(\u0027\u0027, self.volume, \u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_b53611e7","line":532,"updated":"2019-10-22 12:26:46.000000000","message":"Remove","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":532,"context_line":"        # iscsi_properties \u003d"},{"line_number":533,"context_line":"        self.mock_object(pengyun_driver.PENGYUNISCSIDriver,"},{"line_number":534,"context_line":"                         \u0027_get_iscsi_properties\u0027, return_value\u003d\"\")"},{"line_number":535,"context_line":"        self.driver._attach_volume(\u0027\u0027, self.volume, \u0027\u0027)"},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"    def test_detach_volume(self):"},{"line_number":538,"context_line":"        self.volume \u003d self._stub_volume()"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_55331df7","line":535,"updated":"2019-10-22 12:26:46.000000000","message":"This should have need assertions and testing for expected actions.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"}],"cinder/volume/drivers/pengyun/__init__.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\"\"\"__init__ file.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_154b655f","line":1,"updated":"2019-10-22 12:26:46.000000000","message":"Remove this.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"}],"cinder/volume/drivers/pengyun/connectors.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        target_lun - LUN id of the volume"},{"line_number":79,"context_line":"        \"\"\""},{"line_number":80,"context_line":"        device_info \u003d {\u0027type\u0027: \u0027block\u0027}"},{"line_number":81,"context_line":"        self._connect_to_iscsi_portal(connection_properties)"},{"line_number":82,"context_line":"        host_device \u003d self._get_device_path(connection_properties)"},{"line_number":83,"context_line":"        tries \u003d 0"},{"line_number":84,"context_line":"        while not os.path.exists(host_device):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_3579c192","line":81,"updated":"2019-10-22 12:26:46.000000000","message":"Driver code should not be performing iSCSI session management. Connector information should be returned so nova or whatever consumer of the volume can use os-brick as needed to perform these operations. Most likely the driver is not even running on the same node where a volume is needed.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            self._run_iscsiadm(connection_properties, (\"--rescan\",))"},{"line_number":92,"context_line":"            tries \u003d tries + 1"},{"line_number":93,"context_line":"            if not os.path.exists(host_device):"},{"line_number":94,"context_line":"                time.sleep(tries ** 2)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        if tries !\u003d 0:"},{"line_number":97,"context_line":"            LOG.warning(\"Found iSCSI node %(host_device)s \""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_b53b71c6","line":94,"range":{"start_line":94,"start_character":16,"end_line":94,"end_character":38},"updated":"2019-10-22 12:26:46.000000000","message":"Better to use the retries decorator. And make sure sleep is mocked in unit tests so there are not unnecessary delays in test execution.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        for retry in range(0, RETRY_TIMES):"},{"line_number":119,"context_line":"            try:"},{"line_number":120,"context_line":"                self._rescan_iscsi()"},{"line_number":121,"context_line":"                break"},{"line_number":122,"context_line":"            except Exception as ex:"},{"line_number":123,"context_line":"                LOG.warning(\u0027Something wrong when rescan iscsi %(ex)s\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_5561ddd2","line":120,"updated":"2019-10-22 12:26:46.000000000","message":"Why are you attempting to do rescans before the volume has even been disconnected.\n\nBut again, this isn\u0027t the appropriate place to be doing this.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                            {\u0027ex\u0027: ex})"},{"line_number":137,"context_line":"                time.sleep(RETRY_INTERVAL_SEC)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def _run_iscsiadm(self, connection_properties, iscsi_command, **kwargs):"},{"line_number":140,"context_line":"        \"\"\"Run iscsiadm command to connect iscsi target.\"\"\""},{"line_number":141,"context_line":"        check_exit_code \u003d kwargs.pop(\u0027check_exit_code\u0027, [0])"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_159925cf","line":139,"updated":"2019-10-22 12:26:46.000000000","message":"Remove any interactions with iscsiadm completely.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":216,"context_line":"                   for p in out.splitlines() if p.startswith(\"tcp:\")]"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"        stripped_portal \u003d connection_properties[\u0027target_portal\u0027].split(\",\")[0]"},{"line_number":219,"context_line":"        if len(portals) \u003d\u003d 0 or \\"},{"line_number":220,"context_line":"                len([s for s in portals"},{"line_number":221,"context_line":"                     if stripped_portal \u003d\u003d s[\u0027portal\u0027].split(\",\")[0] and"},{"line_number":222,"context_line":"                    s[\u0027iqn\u0027] \u003d\u003d connection_properties[\u0027target_iqn\u0027]]) \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_359ea1b8","line":219,"range":{"start_line":219,"start_character":32,"end_line":219,"end_character":33},"updated":"2019-10-22 12:26:46.000000000","message":"Don\u0027t use \\ to span multiple lines. Wrap the conditional values in () if needed.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"}],"cinder/volume/drivers/pengyun/pengyun_driver.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from cinder import exception"},{"line_number":22,"context_line":"from cinder import interface"},{"line_number":23,"context_line":"from cinder import utils"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from cinder.db.sqlalchemy import api"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"from cinder.i18n import _"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from cinder.volume import configuration"},{"line_number":30,"context_line":"from cinder.volume import driver"},{"line_number":31,"context_line":"from cinder.volume import rpcapi as volume_rpcapi"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"from cinder.volume.drivers.pengyun import connectors"},{"line_number":34,"context_line":"from cinder.volume.drivers.pengyun import pengyun_utils"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_95ac35ef","line":31,"range":{"start_line":24,"start_character":0,"end_line":31,"end_character":49},"updated":"2019-10-22 12:26:46.000000000","message":"Remove extra blank lines between imports.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":34,"context_line":"from cinder.volume.drivers.pengyun import pengyun_utils"},{"line_number":35,"context_line":"from cinder.volume.drivers.pengyun import rest_client"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"from oslo_concurrency import processutils as putils"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"from oslo_config import cfg"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"from oslo_log import log as logging"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"from oslo_utils import units"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"import six"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_f5800949","line":43,"range":{"start_line":37,"start_character":0,"end_line":43,"end_character":28},"updated":"2019-10-22 12:26:46.000000000","message":"Remove blank lines and move this before the local \"cinder\" imports. Import grouping should be standard lib imports, blank line, third party imports, blank line, then local imports.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"from oslo_utils import units"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"import six"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_b592919e","line":45,"updated":"2019-10-22 12:26:46.000000000","message":"Remove use of six. Ussuri is Python 3 only, so no need to have py2 compatibility code.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":47,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"cinder_opts \u003d ["},{"line_number":50,"context_line":"    cfg.StrOpt(\u0027pengyun_user\u0027,"},{"line_number":51,"context_line":"               default\u003d\u0027user\u0027,"},{"line_number":52,"context_line":"               help\u003d\u0027Rest authentication user.\u0027),"},{"line_number":53,"context_line":"    cfg.StrOpt(\u0027pengyun_password\u0027,"},{"line_number":54,"context_line":"               default\u003d\u0027password\u0027,"},{"line_number":55,"context_line":"               help\u003d\u0027Rest authentication password.\u0027),"},{"line_number":56,"context_line":"    cfg.StrOpt(\u0027pengyun_rest_server\u0027,"},{"line_number":57,"context_line":"               default\u003d\u0027http://10.0.3.157:8081\u0027,"},{"line_number":58,"context_line":"               help\u003d\u0027Rest server uri.\u0027),"},{"line_number":59,"context_line":"    cfg.StrOpt(\u0027pengyun_pattern\u0027,"},{"line_number":60,"context_line":"               default\u003d\u0027ZCloud-eStor\u0027,"},{"line_number":61,"context_line":"               help\u003d\u0027First level pattern in rest url.\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_558f9d74","line":58,"range":{"start_line":50,"start_character":15,"end_line":58,"end_character":40},"updated":"2019-10-22 12:26:46.000000000","message":"Use existing options whenever they are available. These should all be dropped for san_ip, san_username, and san_password.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":60,"context_line":"               default\u003d\u0027ZCloud-eStor\u0027,"},{"line_number":61,"context_line":"               help\u003d\u0027First level pattern in rest url.\u0027),"},{"line_number":62,"context_line":"    cfg.StrOpt(\u0027pengyun_account_id\u0027,"},{"line_number":63,"context_line":"               default\u003d\u00271862755152385798543\u0027,"},{"line_number":64,"context_line":"               help\u003d\u0027Rest authentication account.\u0027),"},{"line_number":65,"context_line":"    cfg.StrOpt(\u0027iscsi_initator_names\u0027,"},{"line_number":66,"context_line":"               default\u003d\u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_d5f06d00","line":63,"range":{"start_line":63,"start_character":24,"end_line":63,"end_character":43},"updated":"2019-10-22 12:26:46.000000000","message":"Does this account exist on all Pengyun systems? Seems like an odd default.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    cfg.IntOpt(\u0027discover_iscsi_interval\u0027,"},{"line_number":81,"context_line":"               default\u003d2,"},{"line_number":82,"context_line":"               help\u003d\u0027the second for retry discover iscsi interval \u0027),"},{"line_number":83,"context_line":"    cfg.BoolOpt(\u0027py_use_chap\u0027,"},{"line_number":84,"context_line":"                default\u003dTrue,"},{"line_number":85,"context_line":"                help\u003d\u0027Option to enable/disable CHAP \u0027"},{"line_number":86,"context_line":"                     \u0027authentication for targets.\u0027),"},{"line_number":87,"context_line":"    cfg.StrOpt(\u0027py_chap_username\u0027,"},{"line_number":88,"context_line":"               default\u003d\u0027helloworld\u0027,"},{"line_number":89,"context_line":"               help\u003d\u0027CHAP user name.\u0027),"},{"line_number":90,"context_line":"    cfg.StrOpt(\u0027py_chap_password\u0027,"},{"line_number":91,"context_line":"               default\u003d\u0027helloworld\u0027,"},{"line_number":92,"context_line":"               help\u003d\u0027Password for specified CHAP account name.\u0027,"},{"line_number":93,"context_line":"               secret\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_15d04553","line":90,"range":{"start_line":83,"start_character":15,"end_line":90,"end_character":34},"updated":"2019-10-22 12:26:46.000000000","message":"Use the existing common options use_chap_auth, chap_username, chap_password.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"@interface.volumedriver"},{"line_number":101,"context_line":"class PENGYUNISCSIDriver(driver.ISCSIDriver):"},{"line_number":102,"context_line":"    \"\"\"ISCSI driver for Pengyun ZettaStor storage system."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    Version history:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_35d54144","line":101,"range":{"start_line":101,"start_character":6,"end_line":101,"end_character":13},"updated":"2019-10-22 12:26:46.000000000","message":"Casing should probably be \"Pengyun\".","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":113,"context_line":"    # ThirdPartySystems wiki page"},{"line_number":114,"context_line":"    CI_WIKI_NAME \u003d \u0027Pengyun_Cinder_CI\u0027"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    gigabytes \u003d 1073741824"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    pools \u003d []"},{"line_number":119,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_95c3d58a","line":116,"range":{"start_line":116,"start_character":4,"end_line":116,"end_character":26},"updated":"2019-10-22 12:26:46.000000000","message":"Use \"units\" instead of defining your own common size constants.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def do_setup(self, context):"},{"line_number":131,"context_line":"        \"\"\"Check that we have all configuration details from the storage.\"\"\""},{"line_number":132,"context_line":"        self.initiator_name \u003d \\"},{"line_number":133,"context_line":"            self.configuration.safe_get(\u0027iscsi_initator_names\u0027) or \u0027\u0027"},{"line_number":134,"context_line":"        rest_server \u003d \\"},{"line_number":135,"context_line":"            self.configuration.safe_get(\u0027pengyun_rest_server\u0027) or \u0027\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_1535a5a8","line":132,"range":{"start_line":132,"start_character":30,"end_line":132,"end_character":31},"updated":"2019-10-22 12:26:46.000000000","message":"Don\u0027t use \\ to span multiple lines.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        first_level_pattern \u003d \\"},{"line_number":140,"context_line":"            self.configuration.safe_get(\u0027pengyun_pattern\u0027) or \u0027ZCloud-eStor\u0027"},{"line_number":141,"context_line":"        account_id \u003d self.configuration.safe_get(\u0027pengyun_account_id\u0027) \\"},{"line_number":142,"context_line":"            or \u00271862755152385798543\u0027"},{"line_number":143,"context_line":"        volume_type \u003d \\"},{"line_number":144,"context_line":"            self.configuration.safe_get(\u0027pengyun_volume_type\u0027) or \u0027SMALL\u0027"},{"line_number":145,"context_line":"        clone_type \u003d \\"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_353a2198","line":142,"range":{"start_line":142,"start_character":16,"end_line":142,"end_character":35},"updated":"2019-10-22 12:26:46.000000000","message":"Again, seems like an odd default for all systems to have this.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        self.discover_iscsi_interval \u003d \\"},{"line_number":177,"context_line":"            self.configuration.safe_get(\u0027discover_iscsi_interval\u0027) or 2"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        if self.configuration.py_use_chap is True:"},{"line_number":180,"context_line":"            LOG.warning(\u0027Configuration options py_use_chap, \u0027"},{"line_number":181,"context_line":"                        \u0027py_chap_username and py_chap_password are \u0027"},{"line_number":182,"context_line":"                        \u0027deprecated. Use use_chap_auth, chap_username \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_9548b52e","line":179,"range":{"start_line":179,"start_character":41,"end_line":179,"end_character":49},"updated":"2019-10-22 12:26:46.000000000","message":"\"is True\" is redundant.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        if self.configuration.py_use_chap is True:"},{"line_number":180,"context_line":"            LOG.warning(\u0027Configuration options py_use_chap, \u0027"},{"line_number":181,"context_line":"                        \u0027py_chap_username and py_chap_password are \u0027"},{"line_number":182,"context_line":"                        \u0027deprecated. Use use_chap_auth, chap_username \u0027"},{"line_number":183,"context_line":"                        \u0027and chap_password respectively for the same.\u0027)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"            self.configuration.use_chap_auth \u003d \\"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_55523de0","line":182,"range":{"start_line":182,"start_character":25,"end_line":182,"end_character":35},"updated":"2019-10-22 12:26:46.000000000","message":"Adding new options that are immediately deprecated should not be done.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def check_for_setup_error(self):"},{"line_number":196,"context_line":"        \"\"\"Check for setup error.\"\"\""},{"line_number":197,"context_line":"        pass"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def clone_image(self,"},{"line_number":200,"context_line":"                    context,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_d5570dca","line":197,"updated":"2019-10-22 12:26:46.000000000","message":"Would be good to attempt to connect to the system and validate the setup is good.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":214,"context_line":"            model_update \u003d self.create_cloned_volume(volume, srcVolume)"},{"line_number":215,"context_line":"            result_size \u003d model_update[\u0027size\u0027]"},{"line_number":216,"context_line":"            if (result_size and result_size \u003e volume[\u0027size\u0027]):"},{"line_number":217,"context_line":"                result \u003d api.quota_usage_get(context,"},{"line_number":218,"context_line":"                                             volume[\u0027project_id\u0027],"},{"line_number":219,"context_line":"                                             \u0027gigabytes\u0027)"},{"line_number":220,"context_line":"                in_use \u003d result.in_use"},{"line_number":221,"context_line":"                in_use +\u003d (result_size - volume[\u0027size\u0027])"},{"line_number":222,"context_line":"                LOG.debug(\u0027quota_usage update from \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_b56e1194","line":219,"range":{"start_line":217,"start_character":16,"end_line":219,"end_character":57},"updated":"2019-10-22 12:26:46.000000000","message":"The driver should not need to do any of its own quota checking.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":224,"context_line":"                          \u0027to now in_use: %(used_now)s .\u0027,"},{"line_number":225,"context_line":"                          {\u0027used_before\u0027: result.in_use,"},{"line_number":226,"context_line":"                           \u0027used_now\u0027: in_use})"},{"line_number":227,"context_line":"                api.quota_usage_update(context,"},{"line_number":228,"context_line":"                                       volume[\u0027project_id\u0027],"},{"line_number":229,"context_line":"                                       \u0027gigabytes\u0027,"},{"line_number":230,"context_line":"                                       in_use\u003din_use)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_556b1d84","line":227,"range":{"start_line":227,"start_character":20,"end_line":227,"end_character":38},"updated":"2019-10-22 12:26:46.000000000","message":"And definitely not its own quota manipulation.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":229,"context_line":"                                       \u0027gigabytes\u0027,"},{"line_number":230,"context_line":"                                       in_use\u003din_use)"},{"line_number":231,"context_line":"        except Exception as err:"},{"line_number":232,"context_line":"            msg \u003d _(\u0027Create volume error. Because %s.\u0027) % six.text_type(err)"},{"line_number":233,"context_line":"            LOG.exception(msg)"},{"line_number":234,"context_line":"            return ({}, False)"},{"line_number":235,"context_line":"        if result_size is not None:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_95f675d8","line":232,"range":{"start_line":232,"start_character":57,"end_line":232,"end_character":76},"updated":"2019-10-22 12:26:46.000000000","message":"This is not needed since you are using LOG.exception for this. That call will automatically log whatever exception is in scope.\n\nLog messages should also not be translated with _().","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":246,"context_line":"            volume_name \u003d str(volume[\u0027id\u0027])"},{"line_number":247,"context_line":"        else:"},{"line_number":248,"context_line":"            volume_name \u003d volume[\u0027display_name\u0027]"},{"line_number":249,"context_line":"        volume_size \u003d volume[\u0027size\u0027] * self.gigabytes / (1024 * 1024)"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"        try:"},{"line_number":252,"context_line":"            LOG.debug(\"create volume \""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_b5f371e7","line":249,"range":{"start_line":249,"start_character":37,"end_line":249,"end_character":69},"updated":"2019-10-22 12:26:46.000000000","message":"Use units.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":260,"context_line":"            pool_id \u003d self.client.list_pools(domain_id)"},{"line_number":261,"context_line":"            self.client.create_volume(volume_id, volume_name,"},{"line_number":262,"context_line":"                                      volume_size, domain_id, pool_id)"},{"line_number":263,"context_line":"        except Exception as e:"},{"line_number":264,"context_line":"            raise exception.VolumeDriverException(message\u003de)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"        volume_status \u003d [\u0027Available\u0027, \u0027Deleting\u0027, \u0027Deleted\u0027, \u0027Stable\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_5500fdab","line":263,"updated":"2019-10-22 12:26:46.000000000","message":"Should catch a more specific exception.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":268,"context_line":"                                                             volume_status)"},{"line_number":269,"context_line":"        LOG.info(\"current_status: %(current_status)s\","},{"line_number":270,"context_line":"                 {\u0027current_status\u0027: current_status})"},{"line_number":271,"context_line":"        if current_status !\u003d \u0027Stable\u0027 and \\"},{"line_number":272,"context_line":"                current_status !\u003d \u0027Available\u0027:"},{"line_number":273,"context_line":"            msg \u003d _(\u0027Failed to create volume %s due to \u0027"},{"line_number":274,"context_line":"                    \u0027error volume status.\u0027) % volume_name"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_3531c1a3","line":271,"range":{"start_line":271,"start_character":42,"end_line":271,"end_character":43},"updated":"2019-10-22 12:26:46.000000000","message":"Use () to avoid using \\","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":303,"context_line":"        if current_status is not None:"},{"line_number":304,"context_line":"            LOG.debug(\"Succeed extended volume,volume: %s.\", volume_name)"},{"line_number":305,"context_line":"        else:"},{"line_number":306,"context_line":"            msg \u003d _(\u0027Extend volume error.\u0027)"},{"line_number":307,"context_line":"            LOG.error(msg)"},{"line_number":308,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":309,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_d525cd5d","line":306,"updated":"2019-10-22 12:26:46.000000000","message":"Would be better to include some actual information to help the user. Which volume and what was the nature of the error.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":318,"context_line":""},{"line_number":319,"context_line":"            LOG.debug(\"Try to delete volume: %s\", volume_name)"},{"line_number":320,"context_line":"            self.client.delete_volume(volume_id, volume_name)"},{"line_number":321,"context_line":"            if self.client.volume_not_found(volume_id):"},{"line_number":322,"context_line":"                return"},{"line_number":323,"context_line":"        except Exception as err:"},{"line_number":324,"context_line":"            msg \u003d _(\u0027Delete volume error. Because %s.\u0027) % six.text_type(err)"},{"line_number":325,"context_line":"            LOG.exception(msg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_951f5508","line":322,"range":{"start_line":321,"start_character":11,"end_line":322,"end_character":22},"updated":"2019-10-22 12:26:46.000000000","message":"This seems pointless since with the way the code is right now, whether it is found or not the method is just going to return.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":324,"context_line":"            msg \u003d _(\u0027Delete volume error. Because %s.\u0027) % six.text_type(err)"},{"line_number":325,"context_line":"            LOG.exception(msg)"},{"line_number":326,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":327,"context_line":"        # volume_status \u003d [\u0027Dead\u0027, \u0027Deleted\u0027]"},{"line_number":328,"context_line":"        # current_status \u003d self.client.poll_volume_have_status(volume_id,"},{"line_number":329,"context_line":"        #                                                      volume_status)"},{"line_number":330,"context_line":"        # if current_status not in volume_status:"},{"line_number":331,"context_line":"        #     msg \u003d _(\u0027Failed to delete volume %s.\u0027) % volume_name"},{"line_number":332,"context_line":"        #     LOG.error(msg)"},{"line_number":333,"context_line":"        #     raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":334,"context_line":"        # else:"},{"line_number":335,"context_line":"        #     LOG.debug(\"Succeed to delete volume: %s\", volume_name)"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"    def create_snapshot(self, snapshot):"},{"line_number":338,"context_line":"        \"\"\"Create snapshot.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_f52a492a","line":335,"range":{"start_line":327,"start_character":8,"end_line":335,"end_character":68},"updated":"2019-10-22 12:26:46.000000000","message":"Remove commented out code.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":360,"context_line":"            if not snapshot_id:"},{"line_number":361,"context_line":"                LOG.warning(\u0027Snapshot not found\u0027)"},{"line_number":362,"context_line":"                return"},{"line_number":363,"context_line":"            LOG.debug(\"Try to delete snapshot.\")"},{"line_number":364,"context_line":"            self.client.delete_snapshot(volume_id, snapshot_id)"},{"line_number":365,"context_line":"        except Exception as err:"},{"line_number":366,"context_line":"            msg \u003d _(\u0027Delete snapshot error. Because %s.\u0027) % six.text_type(err)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_d5daad49","line":363,"updated":"2019-10-22 12:26:46.000000000","message":"This debug statement doesn\u0027t add any value.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":408,"context_line":"        volume_status \u003d [\u0027Available\u0027, \u0027Deleting\u0027, \u0027Deleted\u0027, \u0027Stable\u0027]"},{"line_number":409,"context_line":"        current_status, size \u003d self.client.poll_volume_have_status_size("},{"line_number":410,"context_line":"            volume_id, volume_status)"},{"line_number":411,"context_line":"        LOG.debug(\u0027current_status: %(current_status)s\u0027,"},{"line_number":412,"context_line":"                  {\u0027current_status\u0027: current_status})"},{"line_number":413,"context_line":"        if current_status !\u003d \u0027Stable\u0027 and \\"},{"line_number":414,"context_line":"           current_status !\u003d \u0027Available\u0027:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_b58ff12c","line":411,"range":{"start_line":411,"start_character":19,"end_line":411,"end_character":55},"updated":"2019-10-22 12:26:46.000000000","message":"Add more context, at least the volume ID or name.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":410,"context_line":"            volume_id, volume_status)"},{"line_number":411,"context_line":"        LOG.debug(\u0027current_status: %(current_status)s\u0027,"},{"line_number":412,"context_line":"                  {\u0027current_status\u0027: current_status})"},{"line_number":413,"context_line":"        if current_status !\u003d \u0027Stable\u0027 and \\"},{"line_number":414,"context_line":"           current_status !\u003d \u0027Available\u0027:"},{"line_number":415,"context_line":"            msg \u003d _(\u0027Failed to create volume from snapshot %s.\u0027)\\"},{"line_number":416,"context_line":"                % volume[\u0027display_name\u0027]"},{"line_number":417,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_159fe565","line":414,"range":{"start_line":413,"start_character":8,"end_line":414,"end_character":41},"updated":"2019-10-22 12:26:46.000000000","message":"if current_status not in [\u0027Stable\u0027, \u0027Available\u0027]:","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":423,"context_line":"        model_update \u003d {\u0027metadata\u0027: metadata}"},{"line_number":424,"context_line":"        model_update[\u0027provider_location\u0027] \u003d \u0027world\u0027"},{"line_number":425,"context_line":"        model_update[\u0027size\u0027] \u003d size / 1024"},{"line_number":426,"context_line":"        if (dst_volume_size \u003e current_size):"},{"line_number":427,"context_line":"            new_size \u003d volume[\u0027size\u0027]"},{"line_number":428,"context_line":"            volume[\u0027size\u0027] \u003d size / 1024"},{"line_number":429,"context_line":"            self.extend_volume(volume, new_size)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_15884520","line":426,"range":{"start_line":426,"start_character":11,"end_line":426,"end_character":43},"updated":"2019-10-22 12:26:46.000000000","message":"Outer () not needed.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":489,"context_line":"                       \u0027new_size\u0027: new_size})"},{"line_number":490,"context_line":"            model_update[\u0027size\u0027] \u003d new_size"},{"line_number":491,"context_line":"            return model_update"},{"line_number":492,"context_line":"        elif (dst_volume_size \u003c current_size):"},{"line_number":493,"context_line":"            LOG.debug(\"volume size update to %(size)s\", {\u0027size\u0027: size / 1024})"},{"line_number":494,"context_line":"            volume_size_gb \u003d size / 1024"},{"line_number":495,"context_line":"            model_update[\u0027size\u0027] \u003d volume_size_gb"},{"line_number":496,"context_line":"            return model_update"},{"line_number":497,"context_line":"        else:"},{"line_number":498,"context_line":"            LOG.debug(\u0027lucky,volume size is already, size:\u0027"},{"line_number":499,"context_line":"                      \u0027 %(size)s\u0027, {\u0027size\u0027: size / 1024})"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_95a0b593","line":496,"range":{"start_line":492,"start_character":8,"end_line":496,"end_character":31},"updated":"2019-10-22 12:26:46.000000000","message":"Created volume size should not be larger than the requested size.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":494,"context_line":"            volume_size_gb \u003d size / 1024"},{"line_number":495,"context_line":"            model_update[\u0027size\u0027] \u003d volume_size_gb"},{"line_number":496,"context_line":"            return model_update"},{"line_number":497,"context_line":"        else:"},{"line_number":498,"context_line":"            LOG.debug(\u0027lucky,volume size is already, size:\u0027"},{"line_number":499,"context_line":"                      \u0027 %(size)s\u0027, {\u0027size\u0027: size / 1024})"},{"line_number":500,"context_line":"            return None"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    def _update_volume_stats(self):"},{"line_number":503,"context_line":"        \"\"\"Update volume stats.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_b59db158","line":500,"range":{"start_line":497,"start_character":7,"end_line":500,"end_character":23},"updated":"2019-10-22 12:26:46.000000000","message":"Remove this.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":560,"context_line":"                        volume_name)"},{"line_number":561,"context_line":""},{"line_number":562,"context_line":"        if self.client.volume_not_found(volume_id):"},{"line_number":563,"context_line":"            msg \u003d _(\"can not launch driver due to volume not found.\")"},{"line_number":564,"context_line":"            LOG.exception(msg)"},{"line_number":565,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":566,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_15b605de","line":563,"range":{"start_line":563,"start_character":21,"end_line":563,"end_character":42},"updated":"2019-10-22 12:26:46.000000000","message":"This call isn\u0027t launching the driver.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":569,"context_line":""},{"line_number":570,"context_line":"        if driver_status:"},{"line_number":571,"context_line":"            if driver_status \u003d\u003d \u0027LAUNCHED\u0027:"},{"line_number":572,"context_line":"                LOG.debug(\"Driver for volume: %(display_name)s \""},{"line_number":573,"context_line":"                          \"already exists.\","},{"line_number":574,"context_line":"                          {\u0027display_name\u0027: volume[\u0027display_name\u0027]})"},{"line_number":575,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_95c9955b","line":572,"range":{"start_line":572,"start_character":27,"end_line":572,"end_character":33},"updated":"2019-10-22 12:26:46.000000000","message":"Seem to be mixing words of different meeting. The driver is running as part of the cinder-volume service. That is something entirely different than whether a volume can be created or not.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":685,"context_line":"            \u0027data\u0027: iscsi_properties"},{"line_number":686,"context_line":"        }"},{"line_number":687,"context_line":""},{"line_number":688,"context_line":"    def apply_access_rule(self, volume, driver_from_remote):"},{"line_number":689,"context_line":"        \"\"\"Apply access rule.\"\"\""},{"line_number":690,"context_line":"        allowed_initiator_names \u003d re.split(r\u0027, *\u0027, self.initiator_name)"},{"line_number":691,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_b5cb7148","line":688,"range":{"start_line":688,"start_character":4,"end_line":688,"end_character":13},"updated":"2019-10-22 12:26:46.000000000","message":"Prepend as _apply... since this is an internal method.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":726,"context_line":""},{"line_number":727,"context_line":"        LOG.info(\"Succeed to apply acl.\")"},{"line_number":728,"context_line":""},{"line_number":729,"context_line":"    def _do_iscsi_discovery(self, volume_id, hostname, port):"},{"line_number":730,"context_line":"        \"\"\"Do iscsi discovery.\"\"\""},{"line_number":731,"context_line":"        iscsi_target_address \u003d hostname + \":\" + str(port)"},{"line_number":732,"context_line":"        LOG.debug(\"iscsi discovery target address: %(target)s\","}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_f502496f","line":729,"updated":"2019-10-22 12:26:46.000000000","message":"Driver should not be doing this call.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":728,"context_line":""},{"line_number":729,"context_line":"    def _do_iscsi_discovery(self, volume_id, hostname, port):"},{"line_number":730,"context_line":"        \"\"\"Do iscsi discovery.\"\"\""},{"line_number":731,"context_line":"        iscsi_target_address \u003d hostname + \":\" + str(port)"},{"line_number":732,"context_line":"        LOG.debug(\"iscsi discovery target address: %(target)s\","},{"line_number":733,"context_line":"                  {\u0027target\u0027: iscsi_target_address})"},{"line_number":734,"context_line":"        for retry in range(0, self.discover_iscsi_retries):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_d5fdcd6e","line":731,"range":{"start_line":731,"start_character":31,"end_line":731,"end_character":57},"updated":"2019-10-22 12:26:46.000000000","message":"Use string formatting instead of concatenation:\n\n\u0027%s:%s\u0027 % (hostname, port)","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":778,"context_line":"                    LOG.error(\"Something wrong when discovery iscsi driver\")"},{"line_number":779,"context_line":"                    raise exc"},{"line_number":780,"context_line":""},{"line_number":781,"context_line":"    def _do_iscsi_rescan(self, volume_id, hostname, port):"},{"line_number":782,"context_line":"        iscsi_target_address \u003d str(hostname) + \":\" + str(port)"},{"line_number":783,"context_line":"        iqn \u003d \"Zettastor.IQN:\" + str(volume_id)"},{"line_number":784,"context_line":"        LOG.debug(\"iscsi rescan target %(iqn)s on address: %(address)s\","}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_152925f1","line":781,"updated":"2019-10-22 12:26:46.000000000","message":"Nope","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":793,"context_line":"            LOG.warning(\u0027Something wrong on iscsi discovery: \u0027"},{"line_number":794,"context_line":"                        \u0027%(err)s\u0027, {\u0027err\u0027: _err})"},{"line_number":795,"context_line":""},{"line_number":796,"context_line":"    def _do_disconnect(self, volume_id, driver):"},{"line_number":797,"context_line":"        LOG.debug(\u0027disconnect iscsi conncet,volume_id:%s\u0027, volume_id)"},{"line_number":798,"context_line":"        iqn \u003d \"iqn.2017-08.zettastor.iqn:\" + str(volume_id) + \"-\" + str(0)"},{"line_number":799,"context_line":"        LOG.debug(\"iscsi disconnect target %s\", iqn)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_352ea1fa","line":796,"updated":"2019-10-22 12:26:46.000000000","message":"Remove","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":815,"context_line":"                  {\u0027hostname\u0027: hostname, \u0027port\u0027: port})"},{"line_number":816,"context_line":"        properties \u003d {}"},{"line_number":817,"context_line":"        volume_id \u003d pengyun_utils.gen_id_from(volume[\u0027id\u0027])"},{"line_number":818,"context_line":"        location \u003d self._do_iscsi_discovery(volume_id, hostname, port)"},{"line_number":819,"context_line":"        if not location:"},{"line_number":820,"context_line":"            msg \u003d _(\u0027iscsi export for volume %(display_name)s not found\u0027) \\"},{"line_number":821,"context_line":"                % volume[\u0027display_name\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_55f1dd94","line":818,"updated":"2019-10-22 12:26:46.000000000","message":"This should not be done in the driver.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":843,"context_line":"        LOG.info(\"Initialized properties: %s\", properties)"},{"line_number":844,"context_line":"        return properties"},{"line_number":845,"context_line":""},{"line_number":846,"context_line":"    def _attach_volume(self, context, volume, properties, remote\u003dFalse):"},{"line_number":847,"context_line":"        if remote:"},{"line_number":848,"context_line":"            rpcapi \u003d volume_rpcapi.VolumeAPI()"},{"line_number":849,"context_line":"            conn \u003d rpcapi.initialize_connection(context, volume, properties)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_d532ad5e","line":846,"updated":"2019-10-22 12:26:46.000000000","message":"Remove","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"}],"cinder/volume/drivers/pengyun/pengyun_utils.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from cinder import exception"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from oslo_log import log as logging"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_151285b5","line":23,"updated":"2019-10-22 12:26:46.000000000","message":"oslo_log import should be grouped between the standard lib imports and the local cinder imports.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"}],"cinder/volume/drivers/pengyun/rest_client.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from cinder import exception"},{"line_number":21,"context_line":"from cinder import utils"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from cinder.i18n import _"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from cinder.volume.drivers.pengyun import constants"},{"line_number":26,"context_line":"from cinder.volume.drivers.pengyun import pengyun_utils"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_751c19c1","line":23,"range":{"start_line":22,"start_character":0,"end_line":23,"end_character":25},"updated":"2019-10-22 12:26:46.000000000","message":"Remove extra blank lines.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from cinder.volume.drivers.pengyun import constants"},{"line_number":26,"context_line":"from cinder.volume.drivers.pengyun import pengyun_utils"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from oslo_log import log as logging"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"import requests"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"import six"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_357c61ea","line":30,"range":{"start_line":28,"start_character":11,"end_line":30,"end_character":15},"updated":"2019-10-22 12:26:46.000000000","message":"Remove blank lines and move prior to cinder imports.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"import requests"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"import six"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_d5806dc2","line":32,"range":{"start_line":32,"start_character":0,"end_line":32,"end_character":10},"updated":"2019-10-22 12:26:46.000000000","message":"Drop six usage.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                    url, params\u003ddata, json\u003dbody, auth\u003dself.auth)"},{"line_number":78,"context_line":"        except Exception as err:"},{"line_number":79,"context_line":"            LOG.exception(\u0027Bad response from server: %(url)s.\u0027"},{"line_number":80,"context_line":"                          \u0027 Error: %(err)s\u0027, {\u0027url\u0027: url, \u0027err\u0027: err})"},{"line_number":81,"context_line":"            return {\"error\": {\"code\": constants.ERROR_CONNECT_TO_SERVER,"},{"line_number":82,"context_line":"                              \"description\": \"Connect to server error.\"}}"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_35654146","line":80,"range":{"start_line":80,"start_character":58,"end_line":80,"end_character":68},"updated":"2019-10-22 12:26:46.000000000","message":"Don\u0027t format an exception into the text passed to LOG.exception.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        res_json \u003d res.json()"},{"line_number":91,"context_line":"        if not log_filter_flag:"},{"line_number":92,"context_line":"            LOG.info(\u0027\\n\\n\\n\\nRequest URL: %(url)s\\n\\n\u0027"},{"line_number":93,"context_line":"                     \u0027Call Method: %(method)s\\n\\n\u0027"},{"line_number":94,"context_line":"                     \u0027Request Data: %(data)s\\n\\n\u0027"},{"line_number":95,"context_line":"                     \u0027Response Data:%(res)s\\n\\n\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_d5594d8e","line":92,"range":{"start_line":92,"start_character":16,"end_line":92,"end_character":20},"updated":"2019-10-22 12:26:46.000000000","message":"Change this to debug level.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        LOG.info(\u0027data %(data)s\u0027, {\u0027data\u0027: data})"},{"line_number":145,"context_line":"        r \u003d self.do_call(url, None, \u0027POST\u0027, body)"},{"line_number":146,"context_line":"        if r[\u0027error\u0027][\u0027code\u0027] \u003d\u003d 279:"},{"line_number":147,"context_line":"            m \u003d \u0027Volume name has existed.\u0027"},{"line_number":148,"context_line":"            raise exception.VolumeBackendAPIException(message\u003dm)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        if r[\u0027error\u0027][\u0027code\u0027] \u003d\u003d 163:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_35ca211a","line":147,"range":{"start_line":147,"start_character":29,"end_line":147,"end_character":40},"updated":"2019-10-22 12:26:46.000000000","message":"already exists","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            raise exception.VolumeBackendAPIException(message\u003dm)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        if r[\u0027error\u0027][\u0027code\u0027] \u003d\u003d 163:"},{"line_number":151,"context_line":"            m \u003d \u0027No enough space to create volume.\u0027"},{"line_number":152,"context_line":"            raise exception.VolumeBackendAPIException(message\u003dm)"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        msg \u003d _(\u0027Create volume error.\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_d5ce2d2c","line":151,"range":{"start_line":151,"start_character":17,"end_line":151,"end_character":19},"updated":"2019-10-22 12:26:46.000000000","message":"Not","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":151,"context_line":"            m \u003d \u0027No enough space to create volume.\u0027"},{"line_number":152,"context_line":"            raise exception.VolumeBackendAPIException(message\u003dm)"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        msg \u003d _(\u0027Create volume error.\u0027)"},{"line_number":155,"context_line":"        self._assert_rest_result(r, msg)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def get_volume_status(self, volume_id):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_95d8b5f0","line":154,"range":{"start_line":154,"start_character":14,"end_line":154,"end_character":16},"updated":"2019-10-22 12:26:46.000000000","message":"This doesn\u0027t look like it should be translated.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        msg \u003d _(\u0027Delete volume error.\u0027)"},{"line_number":272,"context_line":"        self._assert_rest_result(r, msg)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    def pull_driver_status(self, volume_id, driver_name):"},{"line_number":275,"context_line":"        \"\"\"Pull driver status using rest api.\"\"\""},{"line_number":276,"context_line":"        url \u003d constants.VOLUME_DRIVER_LIST"},{"line_number":277,"context_line":"        data \u003d {\u0027accountId\u0027: self.account_id,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_9501953c","line":274,"range":{"start_line":274,"start_character":13,"end_line":274,"end_character":19},"updated":"2019-10-22 12:26:46.000000000","message":"driver doesn\u0027t seem to be the right word for this. The remote system will not know anything about this locally running service.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"}],"doc/source/configuration/block-storage/drivers/zettastor-volume-driver.rst":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"Zettastor is a distributed storage system that provides a"},{"line_number":6,"context_line":"virtual storage pool utilizing internal disk of commodity servers."},{"line_number":7,"context_line":"Zettastor scales to several hundred nodes, and has powerful virtual"},{"line_number":8,"context_line":"disk management features like snapshotting, cloning, rollback, and"},{"line_number":9,"context_line":"thin provisioning.This driver enables the use of Zettastor through"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3fa7e38b_55a9dd21","line":6,"range":{"start_line":6,"start_character":40,"end_line":6,"end_character":47},"updated":"2019-10-22 12:26:46.000000000","message":"\"disks in\"?","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":6,"context_line":"virtual storage pool utilizing internal disk of commodity servers."},{"line_number":7,"context_line":"Zettastor scales to several hundred nodes, and has powerful virtual"},{"line_number":8,"context_line":"disk management features like snapshotting, cloning, rollback, and"},{"line_number":9,"context_line":"thin provisioning.This driver enables the use of Zettastor through"},{"line_number":10,"context_line":"Qemu/KVM."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"To configure the use of a Zettastor storage, modify your"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3fa7e38b_15612512","line":9,"range":{"start_line":9,"start_character":17,"end_line":9,"end_character":19},"updated":"2019-10-22 12:26:46.000000000","message":"Missing whitespace.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Zettastor scales to several hundred nodes, and has powerful virtual"},{"line_number":8,"context_line":"disk management features like snapshotting, cloning, rollback, and"},{"line_number":9,"context_line":"thin provisioning.This driver enables the use of Zettastor through"},{"line_number":10,"context_line":"Qemu/KVM."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"To configure the use of a Zettastor storage, modify your"},{"line_number":13,"context_line":"``cinder.conf`` file as follows:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3fa7e38b_f56fa9f9","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":9},"updated":"2019-10-22 12:26:46.000000000","message":"Why does this care what type of virtualization (or really any virtualization) is used?","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"   volume_driver \u003d cinder.volume.drivers.pengyun.pengyun_driver.PENGYUNISCSIDriver"},{"line_number":18,"context_line":"   volume_backend_name \u003d zettastor"},{"line_number":19,"context_line":"   pengyun_user \u003d user"},{"line_number":20,"context_line":"   pengyun_password \u003d password"},{"line_number":21,"context_line":"   pengyun_rest_server \u003d http://10.0.3.157:8081 "},{"line_number":22,"context_line":"   pengyun_pattern \u003d ZCloud-eStor"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3fa7e38b_d5b5cd7f","line":19,"range":{"start_line":19,"start_character":3,"end_line":19,"end_character":15},"updated":"2019-10-22 12:26:46.000000000","message":"Use existing common options (san_ip, etc.)","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":18,"context_line":"   volume_backend_name \u003d zettastor"},{"line_number":19,"context_line":"   pengyun_user \u003d user"},{"line_number":20,"context_line":"   pengyun_password \u003d password"},{"line_number":21,"context_line":"   pengyun_rest_server \u003d http://10.0.3.157:8081 "},{"line_number":22,"context_line":"   pengyun_pattern \u003d ZCloud-eStor"},{"line_number":23,"context_line":"   pengyun_account_id \u003d 1862755152385798543"},{"line_number":24,"context_line":"   iscsi_initator_names \u003d iqn.1993-08.org.debian:01:5cfb20ba85f0,iqn.1993-08.org.debian:01:5cfb20ba85ff # List of iscsi initator names sperated by comma."}],"source_content_type":"text/x-rst","patch_set":2,"id":"3fa7e38b_5590fded","line":21,"range":{"start_line":21,"start_character":47,"end_line":21,"end_character":48},"updated":"2019-10-22 12:26:46.000000000","message":"Remove trailing whitespace throughout.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":".. warning::"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"   Current versions of the Zettastor driver is used for version release2.6 of zettastor."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":".. note::"},{"line_number":33,"context_line":"  "}],"source_content_type":"text/x-rst","patch_set":2,"id":"3fa7e38b_757bb9bd","line":30,"range":{"start_line":30,"start_character":70,"end_line":30,"end_character":72},"updated":"2019-10-22 12:26:46.000000000","message":"missing whitespace.\n\nLine too long.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":".. note::"},{"line_number":33,"context_line":"  "},{"line_number":34,"context_line":"   The configuration of Zettastor are fixed. Only iscsi_initator_names should be modified"},{"line_number":35,"context_line":"   based on real test environment."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"Supported operations"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3fa7e38b_154a8582","line":34,"updated":"2019-10-22 12:26:46.000000000","message":"Line too long.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"3fa7e38b_b55a914d","line":47,"updated":"2019-10-22 12:26:46.000000000","message":"Would be good to go into more detail about what the various configuration options are for the driver and what they mean.\n\nI think it would be good to at least use the configtable directive used in other driver docs to have the available configuration options from the driver pulled in to a table with their names and descriptions.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"}],"releasenotes/notes/pengyun_zettastor_volume_driver-e341668a153690b8.yaml":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f8a168e955bb1f2ef2c53873c9c58620756b02b8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":" - Added backend driver for pengyun zettastor storage."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"3fa7e38b_552c7dab","line":3,"range":{"start_line":3,"start_character":28,"end_line":3,"end_character":37},"updated":"2019-10-22 12:26:46.000000000","message":"Might be nice to capitalize the first letters of the proper names.","commit_id":"42b91cfd947a89912d4687b540aac585ea0d0af4"}]}
