)]}'
{"cinder/tests/unit/volume/drivers/inspur/as13000/test_as13000_driver.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6ba7939a1d6d42a5e461b123d9cd6d305c5dc798","unresolved":false,"context_lines":[{"line_number":20,"context_line":"import ddt"},{"line_number":21,"context_line":"import json"},{"line_number":22,"context_line":"import mock"},{"line_number":23,"context_line":"from oslo_config import cfg"},{"line_number":24,"context_line":"import random"},{"line_number":25,"context_line":"import requests"},{"line_number":26,"context_line":"import time"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_0f005934","line":23,"updated":"2018-05-03 08:28:19.000000000","message":"This group should be split between standard lib imports and third party imports.","commit_id":"68f7e9ed711723a07dd3fe02a431d284703c9fee"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f88a46f8db98ccd2797280925d2f7b371533986e","unresolved":false,"context_lines":[{"line_number":20,"context_line":"import ddt"},{"line_number":21,"context_line":"import eventlet"},{"line_number":22,"context_line":"import json"},{"line_number":23,"context_line":"import mock"},{"line_number":24,"context_line":"import random"},{"line_number":25,"context_line":"import requests"},{"line_number":26,"context_line":"import time"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_bee74fab","line":23,"updated":"2018-10-02 21:38:55.000000000","message":"ddt, eventlet, and requests should be grouped with oslo_config below for third party imports.","commit_id":"9d980823a2c7ccc9200aa96072d7860479faa783"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"1eff393c3432a2b74f4401277d761ee5c633b2e1","unresolved":false,"context_lines":[{"line_number":1221,"context_line":"        ret \u003d self.as13000_san._wait_volume_filled(\u0027fake_v1\u0027, \u0027fake_pool\u0027,"},{"line_number":1222,"context_line":"                                                   attempts, 1)"},{"line_number":1223,"context_line":"        if attempts \u003d\u003d 2:"},{"line_number":1224,"context_line":"            self.assertEqual(ret, False)"},{"line_number":1225,"context_line":"        else:"},{"line_number":1226,"context_line":"            self.assertEqual(ret, True)"},{"line_number":1227,"context_line":"        mock_gv.assert_called_with(\u0027fake_pool\u0027)"}],"source_content_type":"text/x-python","patch_set":19,"id":"ffd0ebdf_f48ef425","line":1224,"range":{"start_line":1224,"start_character":12,"end_line":1224,"end_character":40},"updated":"2019-01-04 15:05:16.000000000","message":"self.assertFalse(ret)","commit_id":"de89f6c370ea278386842b5a866c1ca48b1e9b12"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"1eff393c3432a2b74f4401277d761ee5c633b2e1","unresolved":false,"context_lines":[{"line_number":1223,"context_line":"        if attempts \u003d\u003d 2:"},{"line_number":1224,"context_line":"            self.assertEqual(ret, False)"},{"line_number":1225,"context_line":"        else:"},{"line_number":1226,"context_line":"            self.assertEqual(ret, True)"},{"line_number":1227,"context_line":"        mock_gv.assert_called_with(\u0027fake_pool\u0027)"},{"line_number":1228,"context_line":"        mock_el.assert_called_with(1)"},{"line_number":1229,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"ffd0ebdf_1494d836","line":1226,"range":{"start_line":1226,"start_character":12,"end_line":1226,"end_character":39},"updated":"2019-01-04 15:05:16.000000000","message":"self.assertTrue(ret)","commit_id":"de89f6c370ea278386842b5a866c1ca48b1e9b12"}],"cinder/volume/drivers/inspur/as13000/as13000_driver.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6ba7939a1d6d42a5e461b123d9cd6d305c5dc798","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from cinder import exception"},{"line_number":29,"context_line":"from cinder.volume.drivers.san import san"},{"line_number":30,"context_line":"from cinder.volume import utils as volume_utils"},{"line_number":31,"context_line":"from oslo_config import cfg"},{"line_number":32,"context_line":"from oslo_log import log as logging"},{"line_number":33,"context_line":"from oslo_utils import units"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_6fbd4d67","line":30,"updated":"2018-05-03 08:28:19.000000000","message":"Reorder imports.","commit_id":"68f7e9ed711723a07dd3fe02a431d284703c9fee"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6ba7939a1d6d42a5e461b123d9cd6d305c5dc798","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    cfg.ListOpt("},{"line_number":39,"context_line":"        \u0027inspur_as13000_ipsan_pool\u0027,"},{"line_number":40,"context_line":"        default\u003d[\u0027Pool0\u0027],"},{"line_number":41,"context_line":"        help\u003d\u0027The Storage Pool Cinder use.\u0027),"},{"line_number":42,"context_line":"    cfg.IntOpt("},{"line_number":43,"context_line":"        \u0027as13000_token_available_time\u0027,"},{"line_number":44,"context_line":"        default\u003d3600,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_efb07d8e","line":41,"range":{"start_line":41,"start_character":31,"end_line":41,"end_character":41},"updated":"2018-05-03 08:28:19.000000000","message":"\"for Cinder to use\" or \"to use\".","commit_id":"68f7e9ed711723a07dd3fe02a431d284703c9fee"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"20189745fd34bf5cdcabb729ca5575d9b65ce218","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    cfg.ListOpt("},{"line_number":39,"context_line":"        \u0027inspur_as13000_ipsan_pool\u0027,"},{"line_number":40,"context_line":"        default\u003d[\u0027Pool0\u0027],"},{"line_number":41,"context_line":"        help\u003d\u0027The Storage Pool Cinder use.\u0027),"},{"line_number":42,"context_line":"    cfg.IntOpt("},{"line_number":43,"context_line":"        \u0027as13000_token_available_time\u0027,"},{"line_number":44,"context_line":"        default\u003d3600,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_d988d720","line":41,"range":{"start_line":41,"start_character":31,"end_line":41,"end_character":41},"in_reply_to":"5f7c97a3_efb07d8e","updated":"2018-05-04 13:53:28.000000000","message":"Is it multiple pools or just one?  (ListOpt vs. \"The Storage Pool\" is not clear.)","commit_id":"68f7e9ed711723a07dd3fe02a431d284703c9fee"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6ba7939a1d6d42a5e461b123d9cd6d305c5dc798","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        \u0027as13000_token_available_time\u0027,"},{"line_number":44,"context_line":"        default\u003d3600,"},{"line_number":45,"context_line":"        help\u003d\u0027The valid period of token.\u0027),"},{"line_number":46,"context_line":"    cfg.IntOpt("},{"line_number":47,"context_line":"        \u0027as13000_api_port\u0027,"},{"line_number":48,"context_line":"        default\u003d8088,"},{"line_number":49,"context_line":"        help\u003d\u0027The port that Driver used to send request to the backend.\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_afaa8516","line":46,"updated":"2018-05-03 08:28:19.000000000","message":"PortOpt is probably a better option type.","commit_id":"68f7e9ed711723a07dd3fe02a431d284703c9fee"},{"author":{"_account_id":23729,"name":"焦浩霖","display_name":"jiaohaolin","email":"jiaohaolin01@inspur.com","username":"inspur-storage"},"change_message_id":"b3047135745bf95d01e61d4116f1b2b22e32455d","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        \u0027as13000_token_available_time\u0027,"},{"line_number":44,"context_line":"        default\u003d3600,"},{"line_number":45,"context_line":"        help\u003d\u0027The valid period of token.\u0027),"},{"line_number":46,"context_line":"    cfg.IntOpt("},{"line_number":47,"context_line":"        \u0027as13000_api_port\u0027,"},{"line_number":48,"context_line":"        default\u003d8088,"},{"line_number":49,"context_line":"        help\u003d\u0027The port that Driver used to send request to the backend.\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_deb45438","line":46,"in_reply_to":"5f7c97a3_afaa8516","updated":"2018-05-03 09:08:48.000000000","message":"Thanks for your review.I will fix all these problems.","commit_id":"68f7e9ed711723a07dd3fe02a431d284703c9fee"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6ba7939a1d6d42a5e461b123d9cd6d305c5dc798","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    cfg.IntOpt("},{"line_number":47,"context_line":"        \u0027as13000_api_port\u0027,"},{"line_number":48,"context_line":"        default\u003d8088,"},{"line_number":49,"context_line":"        help\u003d\u0027The port that Driver used to send request to the backend.\u0027),"},{"line_number":50,"context_line":"    cfg.BoolOpt("},{"line_number":51,"context_line":"        \u0027as13000_chap_enabled\u0027,"},{"line_number":52,"context_line":"        default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_cfa7c14f","line":49,"range":{"start_line":49,"start_character":35,"end_line":49,"end_character":39},"updated":"2018-05-03 08:28:19.000000000","message":"uses\n\ns/request/requests/","commit_id":"68f7e9ed711723a07dd3fe02a431d284703c9fee"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6ba7939a1d6d42a5e461b123d9cd6d305c5dc798","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    cfg.BoolOpt("},{"line_number":51,"context_line":"        \u0027as13000_chap_enabled\u0027,"},{"line_number":52,"context_line":"        default\u003dFalse,"},{"line_number":53,"context_line":"        help\u003d\u0027enable chap or not when initialize connection\u0027),"},{"line_number":54,"context_line":"    cfg.StrOpt("},{"line_number":55,"context_line":"        \u0027as13000_chap_username\u0027,"},{"line_number":56,"context_line":"        default\u003d\u0027admin\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_0f7379e9","line":53,"range":{"start_line":53,"start_character":14,"end_line":53,"end_character":15},"updated":"2018-05-03 08:28:19.000000000","message":"Please start all sentences upper case and end with a period.","commit_id":"68f7e9ed711723a07dd3fe02a431d284703c9fee"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6ba7939a1d6d42a5e461b123d9cd6d305c5dc798","unresolved":false,"context_lines":[{"line_number":73,"context_line":"CONF.register_opts(inspur_as13000_opts)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"def inspur_driver_debug_trace(f):"},{"line_number":77,"context_line":"    \"\"\"Log trace"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    Log the method entrance and exit including active backend name."}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_ef5e3d44","line":76,"updated":"2018-05-03 08:28:19.000000000","message":"Please use the existing trace decorator:\n\nhttps://github.com/openstack/cinder/blob/master/cinder/utils.py#L863","commit_id":"68f7e9ed711723a07dd3fe02a431d284703c9fee"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"44cac0db55638f0ca6e0c4ef3c5f29c4cb1da98c","unresolved":false,"context_lines":[{"line_number":115,"context_line":"            token \u003d self.login()"},{"line_number":116,"context_line":"            self._token_pool.append(token)"},{"line_number":117,"context_line":"            times \u003d times - 1"},{"line_number":118,"context_line":"        LOG.debug(\u0027Login the AS13000.\u0027)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def login(self):"},{"line_number":121,"context_line":"        \"\"\"login in the AS13000 and return the token\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_6723b157","line":118,"updated":"2018-05-10 14:47:29.000000000","message":"It would be good to add hostname to the log message too","commit_id":"68f7e9ed711723a07dd3fe02a431d284703c9fee"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"44cac0db55638f0ca6e0c4ef3c5f29c4cb1da98c","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        self.send_rest_api(method\u003dmethod, request_type\u003d\u0027delete\u0027)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def refresh_token(self, force\u003dFalse):"},{"line_number":133,"context_line":"        if force is True:"},{"line_number":134,"context_line":"            for i in range(self._token_size):"},{"line_number":135,"context_line":"                self._token_pool \u003d []"},{"line_number":136,"context_line":"                token \u003d self.login()"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_47eb15db","line":133,"updated":"2018-05-10 14:47:29.000000000","message":"nit: could be simplified to \u0027if force\u0027","commit_id":"68f7e9ed711723a07dd3fe02a431d284703c9fee"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"44cac0db55638f0ca6e0c4ef3c5f29c4cb1da98c","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def refresh_token(self, force\u003dFalse):"},{"line_number":133,"context_line":"        if force is True:"},{"line_number":134,"context_line":"            for i in range(self._token_size):"},{"line_number":135,"context_line":"                self._token_pool \u003d []"},{"line_number":136,"context_line":"                token \u003d self.login()"},{"line_number":137,"context_line":"                self._token_pool.append(token)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_279cd968","line":134,"updated":"2018-05-10 14:47:29.000000000","message":"Please, remove code duplication in if-else code blocks","commit_id":"68f7e9ed711723a07dd3fe02a431d284703c9fee"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6ba7939a1d6d42a5e461b123d9cd6d305c5dc798","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    def send_rest_api(self, method, params\u003dNone, request_type\u003d\u0027post\u0027):"},{"line_number":146,"context_line":"        attempts \u003d 3"},{"line_number":147,"context_line":"        msge \u003d \u0027\u0027"},{"line_number":148,"context_line":"        while attempts \u003e 0:"},{"line_number":149,"context_line":"            attempts -\u003d 1"},{"line_number":150,"context_line":"            try:"},{"line_number":151,"context_line":"                return self.send_api(method, params, request_type)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_cf55811f","line":148,"range":{"start_line":148,"start_character":14,"end_line":148,"end_character":22},"updated":"2018-05-03 08:28:19.000000000","message":"Please consider using the retry decorator:\n\nhttps://github.com/openstack/cinder/blob/master/cinder/utils.py#L780","commit_id":"68f7e9ed711723a07dd3fe02a431d284703c9fee"},{"author":{"_account_id":23729,"name":"焦浩霖","display_name":"jiaohaolin","email":"jiaohaolin01@inspur.com","username":"inspur-storage"},"change_message_id":"dd39ed37952ff271af2a671e297f7e8ec96f9e7d","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    def send_rest_api(self, method, params\u003dNone, request_type\u003d\u0027post\u0027):"},{"line_number":146,"context_line":"        attempts \u003d 3"},{"line_number":147,"context_line":"        msge \u003d \u0027\u0027"},{"line_number":148,"context_line":"        while attempts \u003e 0:"},{"line_number":149,"context_line":"            attempts -\u003d 1"},{"line_number":150,"context_line":"            try:"},{"line_number":151,"context_line":"                return self.send_api(method, params, request_type)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_2cd1f123","line":148,"range":{"start_line":148,"start_character":14,"end_line":148,"end_character":22},"in_reply_to":"5f7c97a3_cf55811f","updated":"2018-05-14 09:46:53.000000000","message":"It seems that we can not use this decorator.When the driver catch the \u0027VolumeDriverException\u0027,the driver will refresh the token forcedly.","commit_id":"68f7e9ed711723a07dd3fe02a431d284703c9fee"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6ba7939a1d6d42a5e461b123d9cd6d305c5dc798","unresolved":false,"context_lines":[{"line_number":153,"context_line":"                LOG.error(e)"},{"line_number":154,"context_line":"                msge \u003d str(six.text_type(e))"},{"line_number":155,"context_line":"                self.refresh_token(force\u003dTrue)"},{"line_number":156,"context_line":"                time.sleep(1)"},{"line_number":157,"context_line":"            except exception.VolumeBackendAPIException as e:"},{"line_number":158,"context_line":"                msge \u003d str(six.text_type(e))"},{"line_number":159,"context_line":"                break"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_2f13d568","line":156,"range":{"start_line":156,"start_character":16,"end_line":156,"end_character":20},"updated":"2018-05-03 08:28:19.000000000","message":"Should use eventlet.sleep and make sure any sleep statements are mocked or changed in unit tests to not cause any unnecessary test run delays.","commit_id":"68f7e9ed711723a07dd3fe02a431d284703c9fee"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"44cac0db55638f0ca6e0c4ef3c5f29c4cb1da98c","unresolved":false,"context_lines":[{"line_number":153,"context_line":"                LOG.error(e)"},{"line_number":154,"context_line":"                msge \u003d str(six.text_type(e))"},{"line_number":155,"context_line":"                self.refresh_token(force\u003dTrue)"},{"line_number":156,"context_line":"                time.sleep(1)"},{"line_number":157,"context_line":"            except exception.VolumeBackendAPIException as e:"},{"line_number":158,"context_line":"                msge \u003d str(six.text_type(e))"},{"line_number":159,"context_line":"                break"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_c7864514","line":156,"range":{"start_line":156,"start_character":16,"end_line":156,"end_character":20},"in_reply_to":"5f7c97a3_2f13d568","updated":"2018-05-10 14:47:29.000000000","message":"+1","commit_id":"68f7e9ed711723a07dd3fe02a431d284703c9fee"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"44cac0db55638f0ca6e0c4ef3c5f29c4cb1da98c","unresolved":false,"context_lines":[{"line_number":157,"context_line":"            except exception.VolumeBackendAPIException as e:"},{"line_number":158,"context_line":"                msge \u003d str(six.text_type(e))"},{"line_number":159,"context_line":"                break"},{"line_number":160,"context_line":"        msg \u003d r\u0027Error running RestAPI : /rest/%s ; Error Message: %s\u0027 % ("},{"line_number":161,"context_line":"            method, msge)"},{"line_number":162,"context_line":"        LOG.error(msg)"},{"line_number":163,"context_line":"        raise exception.VolumeDriverException(msg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_e7902146","line":160,"updated":"2018-05-10 14:47:29.000000000","message":"Do we really need raw string here?","commit_id":"68f7e9ed711723a07dd3fe02a431d284703c9fee"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"20189745fd34bf5cdcabb729ca5575d9b65ce218","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        if params is not None:"},{"line_number":167,"context_line":"            params \u003d json.dumps(params)"},{"line_number":168,"context_line":"        url \u003d \u0027http://%s:%s/%s/%s\u0027 % (self._hostname, self._port, \u0027rest\u0027,"},{"line_number":169,"context_line":"                                      method)"},{"line_number":170,"context_line":"        # header is not needed when the driver login the backend"},{"line_number":171,"context_line":"        if method \u003d\u003d \u0027security/token\u0027:"},{"line_number":172,"context_line":"            # token won\u0027t be return to the token_pool"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_59f04791","line":169,"updated":"2018-05-04 13:53:28.000000000","message":"This passes a security token over unencrypted HTTP?  This looks unsafe.","commit_id":"68f7e9ed711723a07dd3fe02a431d284703c9fee"},{"author":{"_account_id":23729,"name":"焦浩霖","display_name":"jiaohaolin","email":"jiaohaolin01@inspur.com","username":"inspur-storage"},"change_message_id":"dd39ed37952ff271af2a671e297f7e8ec96f9e7d","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        if params is not None:"},{"line_number":167,"context_line":"            params \u003d json.dumps(params)"},{"line_number":168,"context_line":"        url \u003d \u0027http://%s:%s/%s/%s\u0027 % (self._hostname, self._port, \u0027rest\u0027,"},{"line_number":169,"context_line":"                                      method)"},{"line_number":170,"context_line":"        # header is not needed when the driver login the backend"},{"line_number":171,"context_line":"        if method \u003d\u003d \u0027security/token\u0027:"},{"line_number":172,"context_line":"            # token won\u0027t be return to the token_pool"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_8d91a79c","line":169,"in_reply_to":"5f7c97a3_59f04791","updated":"2018-05-14 09:46:53.000000000","message":"Thanks for your review. Our storage device does not support HTTPS for now. It will be supported in the follow-up versions.","commit_id":"68f7e9ed711723a07dd3fe02a431d284703c9fee"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6ba7939a1d6d42a5e461b123d9cd6d305c5dc798","unresolved":false,"context_lines":[{"line_number":175,"context_line":"            else:"},{"line_number":176,"context_line":"                header \u003d None"},{"line_number":177,"context_line":"        else:"},{"line_number":178,"context_line":"            if len(self._token_pool) \u003d\u003d 0:"},{"line_number":179,"context_line":"                self.logins()"},{"line_number":180,"context_line":"            token \u003d self._token_pool.pop(0)"},{"line_number":181,"context_line":"            header \u003d {\u0027X-Auth-Token\u0027: token}"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_4a0ddf35","line":178,"range":{"start_line":178,"start_character":12,"end_line":178,"end_character":42},"updated":"2018-05-03 08:28:19.000000000","message":"This is fine, but could also just be \"if self._token_pool:\"","commit_id":"68f7e9ed711723a07dd3fe02a431d284703c9fee"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"44cac0db55638f0ca6e0c4ef3c5f29c4cb1da98c","unresolved":false,"context_lines":[{"line_number":175,"context_line":"            else:"},{"line_number":176,"context_line":"                header \u003d None"},{"line_number":177,"context_line":"        else:"},{"line_number":178,"context_line":"            if len(self._token_pool) \u003d\u003d 0:"},{"line_number":179,"context_line":"                self.logins()"},{"line_number":180,"context_line":"            token \u003d self._token_pool.pop(0)"},{"line_number":181,"context_line":"            header \u003d {\u0027X-Auth-Token\u0027: token}"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_07bf5db0","line":178,"range":{"start_line":178,"start_character":12,"end_line":178,"end_character":42},"in_reply_to":"5f7c97a3_4a0ddf35","updated":"2018-05-10 14:47:29.000000000","message":"if not self._token_pook","commit_id":"68f7e9ed711723a07dd3fe02a431d284703c9fee"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6ba7939a1d6d42a5e461b123d9cd6d305c5dc798","unresolved":false,"context_lines":[{"line_number":217,"context_line":"                        if hasattr(data, \u0027success\u0027):"},{"line_number":218,"context_line":"                            return"},{"line_number":219,"context_line":"            elif code \u003d\u003d 301:"},{"line_number":220,"context_line":"                msg \u003d \u0027Token is out time\u0027"},{"line_number":221,"context_line":"                LOG.error(msg)"},{"line_number":222,"context_line":"                raise exception.VolumeDriverException(msg)"},{"line_number":223,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_4a263fba","line":220,"range":{"start_line":220,"start_character":16,"end_line":220,"end_character":19},"updated":"2018-05-03 08:28:19.000000000","message":"String used for exceptions need the _() translation marker.","commit_id":"68f7e9ed711723a07dd3fe02a431d284703c9fee"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6ba7939a1d6d42a5e461b123d9cd6d305c5dc798","unresolved":false,"context_lines":[{"line_number":240,"context_line":"        return data"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"class AS13000Driver(san.SanISCSIDriver):"},{"line_number":244,"context_line":"    \"\"\"AS13000 Volume Driver"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"    Version history:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_ea3f0bb3","line":243,"updated":"2018-05-03 08:28:19.000000000","message":"Needs interface.volumedriver decorator.\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/lvm.py#L87","commit_id":"68f7e9ed711723a07dd3fe02a431d284703c9fee"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6ba7939a1d6d42a5e461b123d9cd6d305c5dc798","unresolved":false,"context_lines":[{"line_number":250,"context_line":"    VENDOR \u003d \u0027INSPUR\u0027"},{"line_number":251,"context_line":"    VERSION \u003d \u00271.0.0\u0027"},{"line_number":252,"context_line":"    PROTOCOL \u003d \u0027iSCSI\u0027"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":255,"context_line":"        super(AS13000Driver, self).__init__(*args, **kwargs)"},{"line_number":256,"context_line":"        self.configuration.append_config_values(inspur_as13000_opts)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_6a9a1bc6","line":253,"updated":"2018-05-03 08:28:19.000000000","message":"Need to also set CI_WIKI_NAME to refer to your third party CI wiki page.\n\nInspur_CI I believe.\n\nhttps://wiki.openstack.org/wiki/ThirdPartySystems/Inspur_CI","commit_id":"68f7e9ed711723a07dd3fe02a431d284703c9fee"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6ba7939a1d6d42a5e461b123d9cd6d305c5dc798","unresolved":false,"context_lines":[{"line_number":329,"context_line":"        \"\"\"create volume in backend \"\"\""},{"line_number":330,"context_line":"        pool \u003d volume_utils.extract_host(volume.host, level\u003d\u0027pool\u0027)"},{"line_number":331,"context_line":"        method \u003d \u0027block/lvm\u0027"},{"line_number":332,"context_line":"        size \u003d volume.size * 1024"},{"line_number":333,"context_line":"        name \u003d self._trans_name_down(volume.name)"},{"line_number":334,"context_line":"        request_type \u003d \"post\""},{"line_number":335,"context_line":"        params \u003d {"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_2a7d036e","line":332,"range":{"start_line":332,"start_character":29,"end_line":332,"end_character":33},"updated":"2018-05-03 08:28:19.000000000","message":"Please use constants from units.","commit_id":"68f7e9ed711723a07dd3fe02a431d284703c9fee"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"44cac0db55638f0ca6e0c4ef3c5f29c4cb1da98c","unresolved":false,"context_lines":[{"line_number":342,"context_line":"                                 request_type\u003drequest_type)"},{"line_number":343,"context_line":"        LOG.info(\u0027Create volume: volume name:%(vol)s, \u0027"},{"line_number":344,"context_line":"                 \u0027size: %(size)s, pool: %(pool)s\u0027,"},{"line_number":345,"context_line":"                 {\u0027vol\u0027: name, \u0027size\u0027: size, \u0027pool\u0027: pool})"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"    @inspur_driver_debug_trace"},{"line_number":348,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_67d2d102","line":345,"updated":"2018-05-10 14:47:29.000000000","message":"Please, use volume id in log messages","commit_id":"68f7e9ed711723a07dd3fe02a431d284703c9fee"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6ba7939a1d6d42a5e461b123d9cd6d305c5dc798","unresolved":false,"context_lines":[{"line_number":452,"context_line":"                                     request_type\u003drequest_type)"},{"line_number":453,"context_line":"            LOG.info(\u0027delete volume %(name)s\u0027, {\u0027name\u0027: name})"},{"line_number":454,"context_line":"        else:"},{"line_number":455,"context_line":"            # if volume is not exist in backend ,the driver will do"},{"line_number":456,"context_line":"            # nothing but log it"},{"line_number":457,"context_line":"            LOG.info(\u0027Tried to delete non-existent volume %(name)s.\u0027,"},{"line_number":458,"context_line":"                     {\u0027name\u0027: name})"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_6ae8db15","line":455,"range":{"start_line":455,"start_character":47,"end_line":455,"end_character":49},"updated":"2018-05-03 08:28:19.000000000","message":"nit: space on wrong side of ,","commit_id":"68f7e9ed711723a07dd3fe02a431d284703c9fee"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"20189745fd34bf5cdcabb729ca5575d9b65ce218","unresolved":false,"context_lines":[{"line_number":535,"context_line":""},{"line_number":536,"context_line":"        # Driver excute this method every minute, so we set this when the"},{"line_number":537,"context_line":"        # _update_volume_stats excute for times ,the driver will refresh"},{"line_number":538,"context_line":"        # the token"},{"line_number":539,"context_line":"        time_difference \u003d time.time() - self._token_time"},{"line_number":540,"context_line":"        if time_difference \u003e self.token_available_time:"},{"line_number":541,"context_line":"            self._rest.refresh_token()"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_79a2e39c","line":538,"updated":"2018-05-04 13:53:28.000000000","message":"Should this not be done before calling _get_pools_stats()?","commit_id":"68f7e9ed711723a07dd3fe02a431d284703c9fee"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"20189745fd34bf5cdcabb729ca5575d9b65ce218","unresolved":false,"context_lines":[{"line_number":571,"context_line":"                node_of_target \u003d [node[\u0027name\u0027]"},{"line_number":572,"context_line":"                                  for node in self.nodes]"},{"line_number":573,"context_line":"                nodes \u003d \u0027,\u0027.join(node_of_target)"},{"line_number":574,"context_line":"                target_name \u003d ("},{"line_number":575,"context_line":"                    \u0027target.inspur.%s-%s\u0027 %"},{"line_number":576,"context_line":"                    (connector[\u0027host\u0027], str("},{"line_number":577,"context_line":"                        random.randint("}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_f9b7d3d7","line":574,"updated":"2018-05-04 13:53:28.000000000","message":"Can generate this outside of the \"if multipath\" block to avoid duplication of code.","commit_id":"68f7e9ed711723a07dd3fe02a431d284703c9fee"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6ba7939a1d6d42a5e461b123d9cd6d305c5dc798","unresolved":false,"context_lines":[{"line_number":644,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":645,"context_line":"        \"\"\"Delete lun from target."},{"line_number":646,"context_line":""},{"line_number":647,"context_line":"           If target has no any lun, driver will delete the target"},{"line_number":648,"context_line":"        \"\"\""},{"line_number":649,"context_line":"        volume_name \u003d self._trans_name_down(volume.name)"},{"line_number":650,"context_line":"        target_name \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_4ad07f51","line":647,"range":{"start_line":647,"start_character":8,"end_line":647,"end_character":11},"updated":"2018-05-03 08:28:19.000000000","message":"Remove indentation.","commit_id":"68f7e9ed711723a07dd3fe02a431d284703c9fee"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6ba7939a1d6d42a5e461b123d9cd6d305c5dc798","unresolved":false,"context_lines":[{"line_number":801,"context_line":"                return self._rest.send_rest_api(method\u003dmethod,"},{"line_number":802,"context_line":"                                                params\u003dparams,"},{"line_number":803,"context_line":"                                                request_type\u003drequest_type)"},{"line_number":804,"context_line":"                LOG.debug((\u0027add lun:%(volume)s in pool \u0027"},{"line_number":805,"context_line":"                           \u0027%(pool)s to target:%(target)s\u0027),"},{"line_number":806,"context_line":"                          {\u0027volume\u0027: volume.name,"},{"line_number":807,"context_line":"                           \u0027pool\u0027: pool,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_2a5983fd","line":804,"range":{"start_line":804,"start_character":26,"end_line":804,"end_character":27},"updated":"2018-05-03 08:28:19.000000000","message":"Inner () not needed.","commit_id":"68f7e9ed711723a07dd3fe02a431d284703c9fee"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"eb8954366e04fd273d9fa1864fb7bd4c4888b5f1","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        default\u003d3600,"},{"line_number":50,"context_line":"        help\u003d\u0027The valid period of token.\u0027),"},{"line_number":51,"context_line":"    cfg.PortOpt("},{"line_number":52,"context_line":"        \u0027as13000_api_port\u0027,"},{"line_number":53,"context_line":"        default\u003d8088,"},{"line_number":54,"context_line":"        help\u003d\u0027The port that Driver uses to send requests to the backend.\u0027),"},{"line_number":55,"context_line":"    cfg.BoolOpt("}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_a387f961","line":52,"range":{"start_line":52,"start_character":9,"end_line":52,"end_character":25},"updated":"2018-05-17 10:50:23.000000000","message":"Please use existing \"san_api_port\" config option. Also, this option is not present in the documentation anyway.","commit_id":"351197d444d7b7382f3b6a3d13893d502174bad1"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"eb8954366e04fd273d9fa1864fb7bd4c4888b5f1","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        default\u003d8088,"},{"line_number":54,"context_line":"        help\u003d\u0027The port that Driver uses to send requests to the backend.\u0027),"},{"line_number":55,"context_line":"    cfg.BoolOpt("},{"line_number":56,"context_line":"        \u0027as13000_chap_enabled\u0027,"},{"line_number":57,"context_line":"        default\u003dFalse,"},{"line_number":58,"context_line":"        help\u003d\u0027Enable chap or not when initialize connection\u0027),"},{"line_number":59,"context_line":"    cfg.StrOpt("}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_28098630","line":56,"range":{"start_line":56,"start_character":9,"end_line":56,"end_character":29},"updated":"2018-05-17 10:50:23.000000000","message":"Please use existing config option \"use_chap_auth\" - as we already have config options for chap, it would be better to use these instead to avoid duplication.","commit_id":"351197d444d7b7382f3b6a3d13893d502174bad1"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"eb8954366e04fd273d9fa1864fb7bd4c4888b5f1","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        default\u003dFalse,"},{"line_number":58,"context_line":"        help\u003d\u0027Enable chap or not when initialize connection\u0027),"},{"line_number":59,"context_line":"    cfg.StrOpt("},{"line_number":60,"context_line":"        \u0027as13000_chap_username\u0027,"},{"line_number":61,"context_line":"        default\u003d\u0027admin\u0027,"},{"line_number":62,"context_line":"        help\u003d\u0027Chap username the target use\u0027),"},{"line_number":63,"context_line":"    cfg.StrOpt("}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_c33315f6","line":60,"range":{"start_line":60,"start_character":9,"end_line":60,"end_character":30},"updated":"2018-05-17 10:50:23.000000000","message":"Please use existing \"chap_username\" config option. Also, it doesn\u0027t look like this value is being used anyway.","commit_id":"351197d444d7b7382f3b6a3d13893d502174bad1"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"eb8954366e04fd273d9fa1864fb7bd4c4888b5f1","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        default\u003d\u0027admin\u0027,"},{"line_number":62,"context_line":"        help\u003d\u0027Chap username the target use\u0027),"},{"line_number":63,"context_line":"    cfg.StrOpt("},{"line_number":64,"context_line":"        \u0027as13000_chap_password\u0027,"},{"line_number":65,"context_line":"        default\u003d\u0027admin\u0027,"},{"line_number":66,"context_line":"        help\u003d\u0027Chap password the target use\u0027),"},{"line_number":67,"context_line":"    cfg.StrOpt("}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_4355c5f9","line":64,"range":{"start_line":64,"start_character":9,"end_line":64,"end_character":30},"updated":"2018-05-17 10:50:23.000000000","message":"Please use existing \"chap_password\" config option. Also, it doesn\u0027t look like this value is being used anyway.","commit_id":"351197d444d7b7382f3b6a3d13893d502174bad1"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"eb8954366e04fd273d9fa1864fb7bd4c4888b5f1","unresolved":false,"context_lines":[{"line_number":397,"context_line":"        if volume.size \u003e src_vref.size:"},{"line_number":398,"context_line":"            self.extend_volume(volume, volume.size)"},{"line_number":399,"context_line":"        LOG.info(\u0027Create clone volume: volume name:%(vol)s, size: %(size)s, \u0027"},{"line_number":400,"context_line":"                 \u0027pool: %(pool)s, source: %(source)sssssss\u0027,"},{"line_number":401,"context_line":"                 {\u0027vol\u0027: dest_vol_name,"},{"line_number":402,"context_line":"                  \u0027size\u0027: volume.size,"},{"line_number":403,"context_line":"                  \u0027pool\u0027: dest_pool,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_c3c79564","line":400,"range":{"start_line":400,"start_character":52,"end_line":400,"end_character":58},"updated":"2018-05-17 10:50:23.000000000","message":"Typo?","commit_id":"351197d444d7b7382f3b6a3d13893d502174bad1"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"9df870230f34bf4a7dd1ce9401fe6ff83dfdfb1e","unresolved":false,"context_lines":[{"line_number":590,"context_line":"            cluster \u003d self.nodes"},{"line_number":591,"context_line":"            for node_back in cluster:"},{"line_number":592,"context_line":"                if node_back[\u0027name\u0027] in node_of_target:"},{"line_number":593,"context_line":"                    portal.append(\u0027%s:%s\u0027 % (node_back.get(\u0027ip\u0027), \u00273260\u0027))"},{"line_number":594,"context_line":"            lun_id \u003d self._get_lun_id(volume, target_name)"},{"line_number":595,"context_line":"            connection_data \u003d {"},{"line_number":596,"context_line":"                \u0027target_discovered\u0027: True,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_e6c73e64","line":593,"updated":"2018-05-17 12:25:46.000000000","message":"Can \u0027ip\u0027 here ever be an IPv6 address?\n\nIf so, this will break.","commit_id":"351197d444d7b7382f3b6a3d13893d502174bad1"},{"author":{"_account_id":25648,"name":"wang yong","email":"yongwc@foxmail.com","username":"wangyong"},"change_message_id":"3868672a2c888b42e666657d0fa71a10a4f02352","unresolved":false,"context_lines":[{"line_number":590,"context_line":"            cluster \u003d self.nodes"},{"line_number":591,"context_line":"            for node_back in cluster:"},{"line_number":592,"context_line":"                if node_back[\u0027name\u0027] in node_of_target:"},{"line_number":593,"context_line":"                    portal.append(\u0027%s:%s\u0027 % (node_back.get(\u0027ip\u0027), \u00273260\u0027))"},{"line_number":594,"context_line":"            lun_id \u003d self._get_lun_id(volume, target_name)"},{"line_number":595,"context_line":"            connection_data \u003d {"},{"line_number":596,"context_line":"                \u0027target_discovered\u0027: True,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_6d5ae282","line":593,"in_reply_to":"5f7c97a3_e6c73e64","updated":"2018-07-14 10:01:05.000000000","message":"hi, thanks for your review work. we have deal with ipv6 with _build_target_portal in the patchset 5.","commit_id":"351197d444d7b7382f3b6a3d13893d502174bad1"},{"author":{"_account_id":23414,"name":"Ciara Stacke","email":"ciara.stacke@emc.com","username":"cstacke"},"change_message_id":"eb8954366e04fd273d9fa1864fb7bd4c4888b5f1","unresolved":false,"context_lines":[{"line_number":623,"context_line":"            \u0027driver_volume_type\u0027: \u0027iscsi\u0027,"},{"line_number":624,"context_line":"            \u0027data\u0027: connection_data"},{"line_number":625,"context_line":"        }"},{"line_number":626,"context_line":"        LOG.info(\u0027initialize_connection: %(datas)s\u0027, {\u0027datas\u0027: datas})"},{"line_number":627,"context_line":"        return datas"},{"line_number":628,"context_line":""},{"line_number":629,"context_line":"    @utils.trace"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_a3bb79c2","line":626,"range":{"start_line":626,"start_character":63,"end_line":626,"end_character":68},"updated":"2018-05-17 10:50:23.000000000","message":"As far as I can see, this will print the chap password, which is unsafe.","commit_id":"351197d444d7b7382f3b6a3d13893d502174bad1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f88a46f8db98ccd2797280925d2f7b371533986e","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    cfg.StrOpt("},{"line_number":51,"context_line":"        \u0027as13000_meta_pool\u0027,"},{"line_number":52,"context_line":"        help\u003d\u0027The pool which is used as a meta pool when creating a volume, \u0027"},{"line_number":53,"context_line":"             \u0027and it should be a replication pool at present.\u0027"},{"line_number":54,"context_line":"             \u0027If not set, the driver will choose a replication pool \u0027"},{"line_number":55,"context_line":"             \u0027from the value of as13000_ipsan_pools.\u0027),"},{"line_number":56,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_fede270e","line":53,"range":{"start_line":53,"start_character":61,"end_line":53,"end_character":62},"updated":"2018-10-02 21:38:55.000000000","message":"Missing space at end.","commit_id":"9d980823a2c7ccc9200aa96072d7860479faa783"},{"author":{"_account_id":25648,"name":"wang yong","email":"yongwc@foxmail.com","username":"wangyong"},"change_message_id":"754ee39c25baf8bcc09b657f0784bb29f22b2f44","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    cfg.StrOpt("},{"line_number":51,"context_line":"        \u0027as13000_meta_pool\u0027,"},{"line_number":52,"context_line":"        help\u003d\u0027The pool which is used as a meta pool when creating a volume, \u0027"},{"line_number":53,"context_line":"             \u0027and it should be a replication pool at present.\u0027"},{"line_number":54,"context_line":"             \u0027If not set, the driver will choose a replication pool \u0027"},{"line_number":55,"context_line":"             \u0027from the value of as13000_ipsan_pools.\u0027),"},{"line_number":56,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_f3defc3a","line":53,"range":{"start_line":53,"start_character":61,"end_line":53,"end_character":62},"in_reply_to":"3f79a3b5_fede270e","updated":"2018-10-08 07:29:23.000000000","message":"Hi Sean, thanks for the review work.\nAll the issues have been fixed in the commit https://review.openstack.org/#/c/602338/7. \nThis commit should be abandoned, but I don\u0027t know how to do that.\n\nINSPUR CI Cinder-AS13000 for https://review.openstack.org/#/c/602338 runs continuously and stably.","commit_id":"9d980823a2c7ccc9200aa96072d7860479faa783"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f88a46f8db98ccd2797280925d2f7b371533986e","unresolved":false,"context_lines":[{"line_number":106,"context_line":"            return self.send_api(method, params, request_type)"},{"line_number":107,"context_line":"        except exception.VolumeDriverException as e:"},{"line_number":108,"context_line":"            self.refresh_token(force\u003dTrue)"},{"line_number":109,"context_line":"            raise e"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    @staticmethod"},{"line_number":112,"context_line":"    def do_request(cmd, url, header, data):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_5ecf1b56","line":109,"range":{"start_line":109,"start_character":12,"end_line":109,"end_character":19},"updated":"2018-10-02 21:38:55.000000000","message":"Should just be raise, not raise e.","commit_id":"9d980823a2c7ccc9200aa96072d7860479faa783"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f88a46f8db98ccd2797280925d2f7b371533986e","unresolved":false,"context_lines":[{"line_number":277,"context_line":""},{"line_number":278,"context_line":"        # make sure at least one node can"},{"line_number":279,"context_line":"        if len(self.nodes) \u003d\u003d 0:"},{"line_number":280,"context_line":"            msg \u003d _(\u0027No healthy Node are available !\u0027)"},{"line_number":281,"context_line":"            LOG.error(msg)"},{"line_number":282,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":283,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_1eee83b4","line":280,"range":{"start_line":280,"start_character":32,"end_line":280,"end_character":36},"updated":"2018-10-02 21:38:55.000000000","message":"nodes\n\nAnd space should be removed before the !","commit_id":"9d980823a2c7ccc9200aa96072d7860479faa783"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f88a46f8db98ccd2797280925d2f7b371533986e","unresolved":false,"context_lines":[{"line_number":285,"context_line":"        \"\"\"Check the pool in conf exist in the AS13000\"\"\""},{"line_number":286,"context_line":"        for pool in self.pools:"},{"line_number":287,"context_line":"            if pool not in self.pools_info:"},{"line_number":288,"context_line":"                msg \u003d _(\u0027Pool %s is not exist.\u0027) % pool"},{"line_number":289,"context_line":"                LOG.error(msg)"},{"line_number":290,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":291,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_de29ebf1","line":288,"range":{"start_line":288,"start_character":33,"end_line":288,"end_character":35},"updated":"2018-10-02 21:38:55.000000000","message":"does","commit_id":"9d980823a2c7ccc9200aa96072d7860479faa783"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f88a46f8db98ccd2797280925d2f7b371533986e","unresolved":false,"context_lines":[{"line_number":292,"context_line":"    def _check_meta_pool(self):"},{"line_number":293,"context_line":"        \"\"\"Check whether the meta pool is valid\"\"\""},{"line_number":294,"context_line":"        if not self.meta_pool:"},{"line_number":295,"context_line":"            msg \u003d _(\u0027Meta pool does not set\u0027)"},{"line_number":296,"context_line":"            LOG.error(msg)"},{"line_number":297,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":298,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_9e2ff3f3","line":295,"range":{"start_line":295,"start_character":31,"end_line":295,"end_character":35},"updated":"2018-10-02 21:38:55.000000000","message":"is","commit_id":"9d980823a2c7ccc9200aa96072d7860479faa783"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f88a46f8db98ccd2797280925d2f7b371533986e","unresolved":false,"context_lines":[{"line_number":297,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        if self.meta_pool not in self.pools_info:"},{"line_number":300,"context_line":"            msg \u003d _(\u0027Meta pool %s is not exist\u0027) % self.meta_pool"},{"line_number":301,"context_line":"            LOG.error(msg)"},{"line_number":302,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":303,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_5e3ddb29","line":300,"range":{"start_line":300,"start_character":34,"end_line":300,"end_character":36},"updated":"2018-10-02 21:38:55.000000000","message":"does","commit_id":"9d980823a2c7ccc9200aa96072d7860479faa783"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f88a46f8db98ccd2797280925d2f7b371533986e","unresolved":false,"context_lines":[{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        if volume.size \u003e snapshot.volume_size:"},{"line_number":363,"context_line":"            self.extend_volume(volume, volume.size)"},{"line_number":364,"context_line":"        LOG.info(\u0027Create volume from snapshot: volume name:%(vol)s,\u0027"},{"line_number":365,"context_line":"                 \u0027size: %(size)s, pool: %(pool)s, snapshot: %(snap)s\u0027,"},{"line_number":366,"context_line":"                 {\u0027vol\u0027: dest_name,"},{"line_number":367,"context_line":"                  \u0027size\u0027: volume.size,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_5e263b18","line":364,"range":{"start_line":364,"start_character":67,"end_line":364,"end_character":68},"updated":"2018-10-02 21:38:55.000000000","message":"Missing space at end.","commit_id":"9d980823a2c7ccc9200aa96072d7860479faa783"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f88a46f8db98ccd2797280925d2f7b371533986e","unresolved":false,"context_lines":[{"line_number":492,"context_line":"                  % (snapshot_name, volume_name, pool))"},{"line_number":493,"context_line":"        request_type \u003d \u0027delete\u0027"},{"line_number":494,"context_line":"        self._rest.send_rest_api(method\u003dmethod, request_type\u003drequest_type)"},{"line_number":495,"context_line":"        LOG.info(\u0027delete snapshot %(snap)s of volume %(volume)s !\u0027,"},{"line_number":496,"context_line":"                 {\u0027snap\u0027: snapshot_name, \u0027volume\u0027: volume_name})"},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"    @utils.trace"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_7e669757","line":495,"range":{"start_line":495,"start_character":63,"end_line":495,"end_character":65},"updated":"2018-10-02 21:38:55.000000000","message":"An exclamation point seems overkill for a LOG.info message, but the space before it should at least be removed.","commit_id":"9d980823a2c7ccc9200aa96072d7860479faa783"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"e6f74a5b6f96123c4b366744420e5642a2e160b9","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        help\u003d\u0027The Storage Pools Cinder should use, a comma separated list.\u0027),"},{"line_number":46,"context_line":"    cfg.IntOpt("},{"line_number":47,"context_line":"        \u0027as13000_token_available_time\u0027,"},{"line_number":48,"context_line":"        default\u003d3600,"},{"line_number":49,"context_line":"        help\u003d\u0027The effective time of token validity in seconds.\u0027),"},{"line_number":50,"context_line":"    cfg.StrOpt("},{"line_number":51,"context_line":"        \u0027as13000_meta_pool\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_c80bc679","line":48,"updated":"2018-10-23 14:03:51.000000000","message":"You should add reasonable min/max values to this IntOpt to help prevent misconfiguration.","commit_id":"797aed90eaf0f14c9a1074086c0ef4fe2a384b81"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"e6f74a5b6f96123c4b366744420e5642a2e160b9","unresolved":false,"context_lines":[{"line_number":870,"context_line":"        \"\"\""},{"line_number":871,"context_line":"        capacity \u003d capacity.upper()"},{"line_number":872,"context_line":"        try:"},{"line_number":873,"context_line":"            unit \u003d re.findall(r\u0027[A-Z]\u0027, capacity)"},{"line_number":874,"context_line":"            unit \u003d \u0027\u0027.join(unit)"},{"line_number":875,"context_line":"        except BaseException:"},{"line_number":876,"context_line":"            unit \u003d \u0027\u0027"},{"line_number":877,"context_line":"        capacity \u003d float(capacity.replace(unit, \u0027\u0027))"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_4817b69e","line":874,"range":{"start_line":873,"start_character":12,"end_line":874,"end_character":32},"updated":"2018-10-23 14:03:51.000000000","message":"unit \u003d re.findall(r\u0027[A-Z]+\u0027, capacity)","commit_id":"797aed90eaf0f14c9a1074086c0ef4fe2a384b81"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"b8ec7f0df117e79d7829c4af78fd1c79c3282a74","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    @staticmethod"},{"line_number":113,"context_line":"    def do_request(cmd, url, header, data):"},{"line_number":114,"context_line":"        LOG.debug(\u0027CMD: %(cmd)s, URL: %(url)s, DATA: %(data)s.\u0027,"},{"line_number":115,"context_line":"                  {\u0027cmd\u0027: cmd, \u0027url\u0027: url, \u0027data\u0027: data})"},{"line_number":116,"context_line":"        if cmd \u003d\u003d \u0027post\u0027:"},{"line_number":117,"context_line":"            req \u003d requests.post(url,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_9ee2939b","line":114,"updated":"2018-10-26 15:14:53.000000000","message":"Please, use cinder.utils.trace_method decorator here to log all params","commit_id":"0be46c4e5ccf67477fb64c89cd8b84374bbc32b0"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"b8ec7f0df117e79d7829c4af78fd1c79c3282a74","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        if params:"},{"line_number":153,"context_line":"            params \u003d json.dumps(params)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        url \u003d (\u0027http://%(hostname)s:%(port)s/%(rest)s/%(method)s\u0027"},{"line_number":156,"context_line":"               % {\u0027hostname\u0027: self._hostname,"},{"line_number":157,"context_line":"                  \u0027port\u0027: self._port,"},{"line_number":158,"context_line":"                  \u0027rest\u0027: \u0027rest\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_be9aef0e","line":155,"updated":"2018-10-26 15:14:53.000000000","message":"Why not to use urllib.parse.urljoin here?","commit_id":"0be46c4e5ccf67477fb64c89cd8b84374bbc32b0"},{"author":{"_account_id":25648,"name":"wang yong","email":"yongwc@foxmail.com","username":"wangyong"},"change_message_id":"3935c78e38701010500e62f052d72e6c0c77e31f","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        if params:"},{"line_number":153,"context_line":"            params \u003d json.dumps(params)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        url \u003d (\u0027http://%(hostname)s:%(port)s/%(rest)s/%(method)s\u0027"},{"line_number":156,"context_line":"               % {\u0027hostname\u0027: self._hostname,"},{"line_number":157,"context_line":"                  \u0027port\u0027: self._port,"},{"line_number":158,"context_line":"                  \u0027rest\u0027: \u0027rest\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_b9767e91","line":155,"in_reply_to":"3f79a3b5_be9aef0e","updated":"2018-10-27 04:03:34.000000000","message":"Hi Ivan, urllib.parse.urljoin is only available in python3, it is urlparse.urljoin in python2.7. I don\u0027t know how to deal with it, but I have done some work to simplify the code.","commit_id":"0be46c4e5ccf67477fb64c89cd8b84374bbc32b0"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"12d65f5562712eec16a73fc97bf3f21817100b90","unresolved":false,"context_lines":[{"line_number":265,"context_line":"                          \u0027as13000_ipsan_pools\u0027]"},{"line_number":266,"context_line":"        for flag in required_flags:"},{"line_number":267,"context_line":"            if not self.configuration.safe_get(flag):"},{"line_number":268,"context_line":"                msg \u003d (_(\u0027%s is not set.\u0027) % flag)"},{"line_number":269,"context_line":"                LOG.error(msg)"},{"line_number":270,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":271,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_561d9e5e","line":268,"range":{"start_line":268,"start_character":26,"end_line":268,"end_character":40},"updated":"2018-10-29 20:18:23.000000000","message":"This would be clearer if it indicated the flag was required.  \u0027Required flag %s is not set.\u0027","commit_id":"c05fd794e9363a4bcf51ffbf3a38e125b654820a"},{"author":{"_account_id":25648,"name":"wang yong","email":"yongwc@foxmail.com","username":"wangyong"},"change_message_id":"bcabec24b715bb43144727a66b67722cc1b55eae","unresolved":false,"context_lines":[{"line_number":265,"context_line":"                          \u0027as13000_ipsan_pools\u0027]"},{"line_number":266,"context_line":"        for flag in required_flags:"},{"line_number":267,"context_line":"            if not self.configuration.safe_get(flag):"},{"line_number":268,"context_line":"                msg \u003d (_(\u0027%s is not set.\u0027) % flag)"},{"line_number":269,"context_line":"                LOG.error(msg)"},{"line_number":270,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":271,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_aeab72d1","line":268,"range":{"start_line":268,"start_character":26,"end_line":268,"end_character":40},"in_reply_to":"3f79a3b5_561d9e5e","updated":"2018-10-30 10:14:55.000000000","message":"Done","commit_id":"c05fd794e9363a4bcf51ffbf3a38e125b654820a"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"12d65f5562712eec16a73fc97bf3f21817100b90","unresolved":false,"context_lines":[{"line_number":267,"context_line":"            if not self.configuration.safe_get(flag):"},{"line_number":268,"context_line":"                msg \u003d (_(\u0027%s is not set.\u0027) % flag)"},{"line_number":269,"context_line":"                LOG.error(msg)"},{"line_number":270,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"        # make sure at least one node can"},{"line_number":273,"context_line":"        if not self.nodes:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_f63ceac0","line":270,"range":{"start_line":270,"start_character":22,"end_line":270,"end_character":44},"updated":"2018-10-29 20:18:23.000000000","message":"I think there might be a better exception for this?","commit_id":"c05fd794e9363a4bcf51ffbf3a38e125b654820a"},{"author":{"_account_id":25648,"name":"wang yong","email":"yongwc@foxmail.com","username":"wangyong"},"change_message_id":"bcabec24b715bb43144727a66b67722cc1b55eae","unresolved":false,"context_lines":[{"line_number":267,"context_line":"            if not self.configuration.safe_get(flag):"},{"line_number":268,"context_line":"                msg \u003d (_(\u0027%s is not set.\u0027) % flag)"},{"line_number":269,"context_line":"                LOG.error(msg)"},{"line_number":270,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"        # make sure at least one node can"},{"line_number":273,"context_line":"        if not self.nodes:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_6e831a56","line":270,"range":{"start_line":270,"start_character":22,"end_line":270,"end_character":44},"in_reply_to":"3f79a3b5_f63ceac0","updated":"2018-10-30 10:14:55.000000000","message":"Done","commit_id":"c05fd794e9363a4bcf51ffbf3a38e125b654820a"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"12d65f5562712eec16a73fc97bf3f21817100b90","unresolved":false,"context_lines":[{"line_number":318,"context_line":"        }"},{"line_number":319,"context_line":"        self._rest.send_rest_api(method\u003dmethod, params\u003dparams,"},{"line_number":320,"context_line":"                                 request_type\u003drequest_type)"},{"line_number":321,"context_line":"        LOG.info(\u0027Create volume: volume name:%(vol)s, \u0027"},{"line_number":322,"context_line":"                 \u0027size: %(size)s, pool: %(pool)s.\u0027,"},{"line_number":323,"context_line":"                 {\u0027vol\u0027: volume.id, \u0027size\u0027: size, \u0027pool\u0027: pool})"},{"line_number":324,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_b6b0b242","line":321,"range":{"start_line":321,"start_character":8,"end_line":321,"end_character":16},"updated":"2018-10-29 20:18:23.000000000","message":"This might be overkill.  I would make this debug so you aren\u0027t spamming the logs.","commit_id":"c05fd794e9363a4bcf51ffbf3a38e125b654820a"},{"author":{"_account_id":25648,"name":"wang yong","email":"yongwc@foxmail.com","username":"wangyong"},"change_message_id":"bcabec24b715bb43144727a66b67722cc1b55eae","unresolved":false,"context_lines":[{"line_number":318,"context_line":"        }"},{"line_number":319,"context_line":"        self._rest.send_rest_api(method\u003dmethod, params\u003dparams,"},{"line_number":320,"context_line":"                                 request_type\u003drequest_type)"},{"line_number":321,"context_line":"        LOG.info(\u0027Create volume: volume name:%(vol)s, \u0027"},{"line_number":322,"context_line":"                 \u0027size: %(size)s, pool: %(pool)s.\u0027,"},{"line_number":323,"context_line":"                 {\u0027vol\u0027: volume.id, \u0027size\u0027: size, \u0027pool\u0027: pool})"},{"line_number":324,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_0e762693","line":321,"range":{"start_line":321,"start_character":8,"end_line":321,"end_character":16},"in_reply_to":"3f79a3b5_b6b0b242","updated":"2018-10-30 10:14:55.000000000","message":"Done","commit_id":"c05fd794e9363a4bcf51ffbf3a38e125b654820a"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"12d65f5562712eec16a73fc97bf3f21817100b90","unresolved":false,"context_lines":[{"line_number":355,"context_line":""},{"line_number":356,"context_line":"        if volume.size \u003e snapshot.volume_size:"},{"line_number":357,"context_line":"            self.extend_volume(volume, volume.size)"},{"line_number":358,"context_line":"        LOG.info(\u0027Create volume from snapshot: volume name: %(vol)s, \u0027"},{"line_number":359,"context_line":"                 \u0027size: %(size)s, pool: %(pool)s, snapshot: %(snap)s.\u0027,"},{"line_number":360,"context_line":"                 {\u0027vol\u0027: dest_name,"},{"line_number":361,"context_line":"                  \u0027size\u0027: volume.size,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_168f2676","line":358,"range":{"start_line":358,"start_character":8,"end_line":358,"end_character":16},"updated":"2018-10-29 20:18:23.000000000","message":"Same comment here.","commit_id":"c05fd794e9363a4bcf51ffbf3a38e125b654820a"},{"author":{"_account_id":25648,"name":"wang yong","email":"yongwc@foxmail.com","username":"wangyong"},"change_message_id":"bcabec24b715bb43144727a66b67722cc1b55eae","unresolved":false,"context_lines":[{"line_number":355,"context_line":""},{"line_number":356,"context_line":"        if volume.size \u003e snapshot.volume_size:"},{"line_number":357,"context_line":"            self.extend_volume(volume, volume.size)"},{"line_number":358,"context_line":"        LOG.info(\u0027Create volume from snapshot: volume name: %(vol)s, \u0027"},{"line_number":359,"context_line":"                 \u0027size: %(size)s, pool: %(pool)s, snapshot: %(snap)s.\u0027,"},{"line_number":360,"context_line":"                 {\u0027vol\u0027: dest_name,"},{"line_number":361,"context_line":"                  \u0027size\u0027: volume.size,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_8e89d670","line":358,"range":{"start_line":358,"start_character":8,"end_line":358,"end_character":16},"in_reply_to":"3f79a3b5_168f2676","updated":"2018-10-30 10:14:55.000000000","message":"Done","commit_id":"c05fd794e9363a4bcf51ffbf3a38e125b654820a"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"12d65f5562712eec16a73fc97bf3f21817100b90","unresolved":false,"context_lines":[{"line_number":391,"context_line":""},{"line_number":392,"context_line":"        if volume.size \u003e src_vref.size:"},{"line_number":393,"context_line":"            self.extend_volume(volume, volume.size)"},{"line_number":394,"context_line":"        LOG.info(\u0027Create clone volume: volume name:%(vol)s, size: %(size)s, \u0027"},{"line_number":395,"context_line":"                 \u0027pool: %(pool)s, source: %(source)s.\u0027,"},{"line_number":396,"context_line":"                 {\u0027vol\u0027: dest_vol_name,"},{"line_number":397,"context_line":"                  \u0027size\u0027: volume.size,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_56eefe1f","line":394,"range":{"start_line":394,"start_character":8,"end_line":394,"end_character":16},"updated":"2018-10-29 20:18:23.000000000","message":"Same comment here.","commit_id":"c05fd794e9363a4bcf51ffbf3a38e125b654820a"},{"author":{"_account_id":25648,"name":"wang yong","email":"yongwc@foxmail.com","username":"wangyong"},"change_message_id":"bcabec24b715bb43144727a66b67722cc1b55eae","unresolved":false,"context_lines":[{"line_number":391,"context_line":""},{"line_number":392,"context_line":"        if volume.size \u003e src_vref.size:"},{"line_number":393,"context_line":"            self.extend_volume(volume, volume.size)"},{"line_number":394,"context_line":"        LOG.info(\u0027Create clone volume: volume name:%(vol)s, size: %(size)s, \u0027"},{"line_number":395,"context_line":"                 \u0027pool: %(pool)s, source: %(source)s.\u0027,"},{"line_number":396,"context_line":"                 {\u0027vol\u0027: dest_vol_name,"},{"line_number":397,"context_line":"                  \u0027size\u0027: volume.size,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_ae84d257","line":394,"range":{"start_line":394,"start_character":8,"end_line":394,"end_character":16},"in_reply_to":"3f79a3b5_56eefe1f","updated":"2018-10-30 10:14:55.000000000","message":"Done","commit_id":"c05fd794e9363a4bcf51ffbf3a38e125b654820a"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"12d65f5562712eec16a73fc97bf3f21817100b90","unresolved":false,"context_lines":[{"line_number":418,"context_line":"        self._rest.send_rest_api(method\u003dmethod,"},{"line_number":419,"context_line":"                                 params\u003dparams,"},{"line_number":420,"context_line":"                                 request_type\u003drequest_type)"},{"line_number":421,"context_line":"        LOG.info(\u0027Extend volume %(vol)s from %(old)sGB to %(new)sGB.\u0027,"},{"line_number":422,"context_line":"                 {\u0027vol\u0027: volume.name, \u0027old\u0027: volume.size, \u0027new\u0027: new_size})"},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"    @utils.trace"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_16d4064a","line":421,"range":{"start_line":421,"start_character":8,"end_line":421,"end_character":16},"updated":"2018-10-29 20:18:23.000000000","message":"Same comment here.","commit_id":"c05fd794e9363a4bcf51ffbf3a38e125b654820a"},{"author":{"_account_id":25648,"name":"wang yong","email":"yongwc@foxmail.com","username":"wangyong"},"change_message_id":"bcabec24b715bb43144727a66b67722cc1b55eae","unresolved":false,"context_lines":[{"line_number":418,"context_line":"        self._rest.send_rest_api(method\u003dmethod,"},{"line_number":419,"context_line":"                                 params\u003dparams,"},{"line_number":420,"context_line":"                                 request_type\u003drequest_type)"},{"line_number":421,"context_line":"        LOG.info(\u0027Extend volume %(vol)s from %(old)sGB to %(new)sGB.\u0027,"},{"line_number":422,"context_line":"                 {\u0027vol\u0027: volume.name, \u0027old\u0027: volume.size, \u0027new\u0027: new_size})"},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"    @utils.trace"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_4ee5fe3c","line":421,"range":{"start_line":421,"start_character":8,"end_line":421,"end_character":16},"in_reply_to":"3f79a3b5_16d4064a","updated":"2018-10-30 10:14:55.000000000","message":"Done","commit_id":"c05fd794e9363a4bcf51ffbf3a38e125b654820a"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"12d65f5562712eec16a73fc97bf3f21817100b90","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        method \u003d \u0027block/lvm?pool\u003d%s\u0026lvm\u003d%s\u0027 % (pool, name)"},{"line_number":438,"context_line":"        request_type \u003d \u0027delete\u0027"},{"line_number":439,"context_line":"        self._rest.send_rest_api(method\u003dmethod, request_type\u003drequest_type)"},{"line_number":440,"context_line":"        LOG.info(\u0027delete volume %(name)s success.\u0027, {\u0027name\u0027: name})"},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"    @utils.trace"},{"line_number":443,"context_line":"    def create_snapshot(self, snapshot):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_76ce9ab7","line":440,"range":{"start_line":440,"start_character":8,"end_line":440,"end_character":16},"updated":"2018-10-29 20:18:23.000000000","message":"Same comment here.","commit_id":"c05fd794e9363a4bcf51ffbf3a38e125b654820a"},{"author":{"_account_id":25648,"name":"wang yong","email":"yongwc@foxmail.com","username":"wangyong"},"change_message_id":"bcabec24b715bb43144727a66b67722cc1b55eae","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        method \u003d \u0027block/lvm?pool\u003d%s\u0026lvm\u003d%s\u0027 % (pool, name)"},{"line_number":438,"context_line":"        request_type \u003d \u0027delete\u0027"},{"line_number":439,"context_line":"        self._rest.send_rest_api(method\u003dmethod, request_type\u003drequest_type)"},{"line_number":440,"context_line":"        LOG.info(\u0027delete volume %(name)s success.\u0027, {\u0027name\u0027: name})"},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"    @utils.trace"},{"line_number":443,"context_line":"    def create_snapshot(self, snapshot):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_6ee8fa13","line":440,"range":{"start_line":440,"start_character":8,"end_line":440,"end_character":16},"in_reply_to":"3f79a3b5_76ce9ab7","updated":"2018-10-30 10:14:55.000000000","message":"Done","commit_id":"c05fd794e9363a4bcf51ffbf3a38e125b654820a"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"12d65f5562712eec16a73fc97bf3f21817100b90","unresolved":false,"context_lines":[{"line_number":464,"context_line":"                  \u0027snapType\u0027: \u0027r\u0027}"},{"line_number":465,"context_line":"        self._rest.send_rest_api(method\u003dmethod, params\u003dparams,"},{"line_number":466,"context_line":"                                 request_type\u003drequest_type)"},{"line_number":467,"context_line":"        LOG.info(\u0027create snapshot %(snap)s from volume %(volume)s.\u0027,"},{"line_number":468,"context_line":"                 {\u0027snap\u0027: snapshot_name,"},{"line_number":469,"context_line":"                  \u0027volume\u0027: volume_name})"},{"line_number":470,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_b6b75222","line":467,"range":{"start_line":467,"start_character":8,"end_line":467,"end_character":16},"updated":"2018-10-29 20:18:23.000000000","message":"Won\u0027t comment on all of these but you get the idea.","commit_id":"c05fd794e9363a4bcf51ffbf3a38e125b654820a"},{"author":{"_account_id":25648,"name":"wang yong","email":"yongwc@foxmail.com","username":"wangyong"},"change_message_id":"bcabec24b715bb43144727a66b67722cc1b55eae","unresolved":false,"context_lines":[{"line_number":464,"context_line":"                  \u0027snapType\u0027: \u0027r\u0027}"},{"line_number":465,"context_line":"        self._rest.send_rest_api(method\u003dmethod, params\u003dparams,"},{"line_number":466,"context_line":"                                 request_type\u003drequest_type)"},{"line_number":467,"context_line":"        LOG.info(\u0027create snapshot %(snap)s from volume %(volume)s.\u0027,"},{"line_number":468,"context_line":"                 {\u0027snap\u0027: snapshot_name,"},{"line_number":469,"context_line":"                  \u0027volume\u0027: volume_name})"},{"line_number":470,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_0eeb8610","line":467,"range":{"start_line":467,"start_character":8,"end_line":467,"end_character":16},"in_reply_to":"3f79a3b5_b6b75222","updated":"2018-10-30 10:14:55.000000000","message":"Done","commit_id":"c05fd794e9363a4bcf51ffbf3a38e125b654820a"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"12d65f5562712eec16a73fc97bf3f21817100b90","unresolved":false,"context_lines":[{"line_number":505,"context_line":"        \"\"\"update the backend stats including driver info and pools info\"\"\""},{"line_number":506,"context_line":""},{"line_number":507,"context_line":"        # Driver execute this method every minute, so we set this when the"},{"line_number":508,"context_line":"        # _update_volume_stats excute for times ,the driver will refresh"},{"line_number":509,"context_line":"        # the token"},{"line_number":510,"context_line":"        time_difference \u003d time.time() - self._token_time"},{"line_number":511,"context_line":"        if time_difference \u003e self.token_available_time:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_f6462a22","line":508,"range":{"start_line":508,"start_character":41,"end_line":508,"end_character":52},"updated":"2018-10-29 20:18:23.000000000","message":"times, the","commit_id":"c05fd794e9363a4bcf51ffbf3a38e125b654820a"},{"author":{"_account_id":25648,"name":"wang yong","email":"yongwc@foxmail.com","username":"wangyong"},"change_message_id":"bcabec24b715bb43144727a66b67722cc1b55eae","unresolved":false,"context_lines":[{"line_number":505,"context_line":"        \"\"\"update the backend stats including driver info and pools info\"\"\""},{"line_number":506,"context_line":""},{"line_number":507,"context_line":"        # Driver execute this method every minute, so we set this when the"},{"line_number":508,"context_line":"        # _update_volume_stats excute for times ,the driver will refresh"},{"line_number":509,"context_line":"        # the token"},{"line_number":510,"context_line":"        time_difference \u003d time.time() - self._token_time"},{"line_number":511,"context_line":"        if time_difference \u003e self.token_available_time:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_2eee821f","line":508,"range":{"start_line":508,"start_character":41,"end_line":508,"end_character":52},"in_reply_to":"3f79a3b5_f6462a22","updated":"2018-10-30 10:14:55.000000000","message":"Done","commit_id":"c05fd794e9363a4bcf51ffbf3a38e125b654820a"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"12d65f5562712eec16a73fc97bf3f21817100b90","unresolved":false,"context_lines":[{"line_number":615,"context_line":"            \u0027driver_volume_type\u0027: \u0027iscsi\u0027,"},{"line_number":616,"context_line":"            \u0027data\u0027: connection_data"},{"line_number":617,"context_line":"        }"},{"line_number":618,"context_line":"        LOG.info(\u0027initialize_connection complete.\u0027)"},{"line_number":619,"context_line":"        return datas"},{"line_number":620,"context_line":""},{"line_number":621,"context_line":"    @utils.trace"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_3607c2ca","line":618,"range":{"start_line":618,"start_character":8,"end_line":618,"end_character":16},"updated":"2018-10-29 20:18:23.000000000","message":"This is ok as LOG.info","commit_id":"c05fd794e9363a4bcf51ffbf3a38e125b654820a"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"12d65f5562712eec16a73fc97bf3f21817100b90","unresolved":false,"context_lines":[{"line_number":650,"context_line":"        luns \u003d self._get_lun_list(target_name)"},{"line_number":651,"context_line":"        if not luns:"},{"line_number":652,"context_line":"            self._delete_target(target_name)"},{"line_number":653,"context_line":"        LOG.info(\u0027terminate_connection: volume %(v)s with connector %(c)s.\u0027,"},{"line_number":654,"context_line":"                 {\u0027v\u0027: volume.id, \u0027c\u0027: connector})"},{"line_number":655,"context_line":""},{"line_number":656,"context_line":"    def _get_pools_info(self, pools):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_16f086d9","line":653,"range":{"start_line":653,"start_character":8,"end_line":653,"end_character":16},"updated":"2018-10-29 20:18:23.000000000","message":"This is ok too.","commit_id":"c05fd794e9363a4bcf51ffbf3a38e125b654820a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"1eec8034be9309727d3524395912a46d2efec7e7","unresolved":false,"context_lines":[{"line_number":202,"context_line":"    \"\"\"AS13000 Volume Driver"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    Version history:"},{"line_number":205,"context_line":"    1.0 - Initial driver"},{"line_number":206,"context_line":"    \"\"\""},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    VENDOR \u003d \u0027INSPUR\u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f79a3b5_e8f0d494","line":205,"updated":"2018-11-07 14:47:43.000000000","message":"This should be indented to get formatted properly in the output.","commit_id":"9e5c57cf756daf7ef5515e5ed9998fbbb8b0d2d7"},{"author":{"_account_id":25648,"name":"wang yong","email":"yongwc@foxmail.com","username":"wangyong"},"change_message_id":"be3b15ff7dd209ea5f47c43ee22122554d44a276","unresolved":false,"context_lines":[{"line_number":202,"context_line":"    \"\"\"AS13000 Volume Driver"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    Version history:"},{"line_number":205,"context_line":"    1.0 - Initial driver"},{"line_number":206,"context_line":"    \"\"\""},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    VENDOR \u003d \u0027INSPUR\u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f79a3b5_f0e7c00f","line":205,"in_reply_to":"3f79a3b5_e8f0d494","updated":"2018-12-03 11:53:34.000000000","message":"Done","commit_id":"9e5c57cf756daf7ef5515e5ed9998fbbb8b0d2d7"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"1eec8034be9309727d3524395912a46d2efec7e7","unresolved":false,"context_lines":[{"line_number":320,"context_line":"        }"},{"line_number":321,"context_line":"        self._rest.send_rest_api(method\u003dmethod, params\u003dparams,"},{"line_number":322,"context_line":"                                 request_type\u003drequest_type)"},{"line_number":323,"context_line":"        LOG.debug(\u0027Create volume: volume name:%(vol)s, \u0027"},{"line_number":324,"context_line":"                  \u0027size: %(size)s, pool: %(pool)s.\u0027,"},{"line_number":325,"context_line":"                  {\u0027vol\u0027: volume.id, \u0027size\u0027: size, \u0027pool\u0027: pool})"},{"line_number":326,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3f79a3b5_e81e94ba","line":323,"updated":"2018-11-07 14:47:43.000000000","message":"All of this and more gets logged as part of using @utils.trace, so this is a little redundant.","commit_id":"9e5c57cf756daf7ef5515e5ed9998fbbb8b0d2d7"},{"author":{"_account_id":25648,"name":"wang yong","email":"yongwc@foxmail.com","username":"wangyong"},"change_message_id":"be3b15ff7dd209ea5f47c43ee22122554d44a276","unresolved":false,"context_lines":[{"line_number":320,"context_line":"        }"},{"line_number":321,"context_line":"        self._rest.send_rest_api(method\u003dmethod, params\u003dparams,"},{"line_number":322,"context_line":"                                 request_type\u003drequest_type)"},{"line_number":323,"context_line":"        LOG.debug(\u0027Create volume: volume name:%(vol)s, \u0027"},{"line_number":324,"context_line":"                  \u0027size: %(size)s, pool: %(pool)s.\u0027,"},{"line_number":325,"context_line":"                  {\u0027vol\u0027: volume.id, \u0027size\u0027: size, \u0027pool\u0027: pool})"},{"line_number":326,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3f79a3b5_d0b644fc","line":323,"in_reply_to":"3f79a3b5_e81e94ba","updated":"2018-12-03 11:53:34.000000000","message":"Done","commit_id":"9e5c57cf756daf7ef5515e5ed9998fbbb8b0d2d7"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"3c0596b3a37be7ea1e8cedbe753e0c1ff9b8a928","unresolved":false,"context_lines":[{"line_number":96,"context_line":"            self._token_pool \u003d []"},{"line_number":97,"context_line":"        for i in range(self._token_size):"},{"line_number":98,"context_line":"            if not force:"},{"line_number":99,"context_line":"                self.logout()"},{"line_number":100,"context_line":"            token \u003d self.login()"},{"line_number":101,"context_line":"            self._token_pool.append(token)"},{"line_number":102,"context_line":"        LOG.debug(\u0027Tokens have been refreshed.\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f79a3b5_14095433","line":99,"range":{"start_line":99,"start_character":16,"end_line":99,"end_character":28},"updated":"2018-12-11 20:03:42.000000000","message":"Do we need to logout if force\u003dFalse?","commit_id":"3ba09541b54cade263dc5ca3b16d2f3fe0fe0937"},{"author":{"_account_id":25648,"name":"wang yong","email":"yongwc@foxmail.com","username":"wangyong"},"change_message_id":"795acdb2fe6ec3fed41f0633dd05ead4e55ae051","unresolved":false,"context_lines":[{"line_number":96,"context_line":"            self._token_pool \u003d []"},{"line_number":97,"context_line":"        for i in range(self._token_size):"},{"line_number":98,"context_line":"            if not force:"},{"line_number":99,"context_line":"                self.logout()"},{"line_number":100,"context_line":"            token \u003d self.login()"},{"line_number":101,"context_line":"            self._token_pool.append(token)"},{"line_number":102,"context_line":"        LOG.debug(\u0027Tokens have been refreshed.\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f79a3b5_9e4801b6","line":99,"range":{"start_line":99,"start_character":16,"end_line":99,"end_character":28},"in_reply_to":"3f79a3b5_14095433","updated":"2018-12-13 00:44:26.000000000","message":"Done","commit_id":"3ba09541b54cade263dc5ca3b16d2f3fe0fe0937"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"3c0596b3a37be7ea1e8cedbe753e0c1ff9b8a928","unresolved":false,"context_lines":[{"line_number":113,"context_line":"    @utils.trace_method"},{"line_number":114,"context_line":"    def do_request(cmd, url, header, data):"},{"line_number":115,"context_line":"        \"\"\"Send request to the storage and handle the response.\"\"\""},{"line_number":116,"context_line":"        if cmd \u003d\u003d \u0027post\u0027:"},{"line_number":117,"context_line":"            req \u003d requests.post(url,"},{"line_number":118,"context_line":"                                data\u003ddata,"},{"line_number":119,"context_line":"                                headers\u003dheader)"},{"line_number":120,"context_line":"        elif cmd \u003d\u003d \u0027get\u0027:"},{"line_number":121,"context_line":"            req \u003d requests.get(url,"},{"line_number":122,"context_line":"                               data\u003ddata,"},{"line_number":123,"context_line":"                               headers\u003dheader)"},{"line_number":124,"context_line":"        elif cmd \u003d\u003d \u0027put\u0027:"},{"line_number":125,"context_line":"            req \u003d requests.put(url,"},{"line_number":126,"context_line":"                               data\u003ddata,"},{"line_number":127,"context_line":"                               headers\u003dheader)"},{"line_number":128,"context_line":"        elif cmd \u003d\u003d \u0027delete\u0027:"},{"line_number":129,"context_line":"            req \u003d requests.delete(url,"},{"line_number":130,"context_line":"                                  data\u003ddata,"},{"line_number":131,"context_line":"                                  headers\u003dheader)"},{"line_number":132,"context_line":"        else:"},{"line_number":133,"context_line":"            msg \u003d (_(\u0027Unsupported cmd: %s.\u0027) % cmd)"},{"line_number":134,"context_line":"            raise exception.VolumeBackendAPIException(msg)"},{"line_number":135,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"3f79a3b5_9711e654","line":132,"range":{"start_line":116,"start_character":8,"end_line":132,"end_character":13},"updated":"2018-12-11 20:03:42.000000000","message":"nit: it could be simplified to:\nif cmd in [\u0027post\u0027, \u0027get\u0027, \u0027put\u0027, \u0027delete\u0027]:\n    req \u003d getattr(requests, cmd)(url, data\u003ddata, headers\u003dheader)","commit_id":"3ba09541b54cade263dc5ca3b16d2f3fe0fe0937"},{"author":{"_account_id":25648,"name":"wang yong","email":"yongwc@foxmail.com","username":"wangyong"},"change_message_id":"795acdb2fe6ec3fed41f0633dd05ead4e55ae051","unresolved":false,"context_lines":[{"line_number":113,"context_line":"    @utils.trace_method"},{"line_number":114,"context_line":"    def do_request(cmd, url, header, data):"},{"line_number":115,"context_line":"        \"\"\"Send request to the storage and handle the response.\"\"\""},{"line_number":116,"context_line":"        if cmd \u003d\u003d \u0027post\u0027:"},{"line_number":117,"context_line":"            req \u003d requests.post(url,"},{"line_number":118,"context_line":"                                data\u003ddata,"},{"line_number":119,"context_line":"                                headers\u003dheader)"},{"line_number":120,"context_line":"        elif cmd \u003d\u003d \u0027get\u0027:"},{"line_number":121,"context_line":"            req \u003d requests.get(url,"},{"line_number":122,"context_line":"                               data\u003ddata,"},{"line_number":123,"context_line":"                               headers\u003dheader)"},{"line_number":124,"context_line":"        elif cmd \u003d\u003d \u0027put\u0027:"},{"line_number":125,"context_line":"            req \u003d requests.put(url,"},{"line_number":126,"context_line":"                               data\u003ddata,"},{"line_number":127,"context_line":"                               headers\u003dheader)"},{"line_number":128,"context_line":"        elif cmd \u003d\u003d \u0027delete\u0027:"},{"line_number":129,"context_line":"            req \u003d requests.delete(url,"},{"line_number":130,"context_line":"                                  data\u003ddata,"},{"line_number":131,"context_line":"                                  headers\u003dheader)"},{"line_number":132,"context_line":"        else:"},{"line_number":133,"context_line":"            msg \u003d (_(\u0027Unsupported cmd: %s.\u0027) % cmd)"},{"line_number":134,"context_line":"            raise exception.VolumeBackendAPIException(msg)"},{"line_number":135,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"3f79a3b5_1e5dd17a","line":132,"range":{"start_line":116,"start_character":8,"end_line":132,"end_character":13},"in_reply_to":"3f79a3b5_9711e654","updated":"2018-12-13 00:44:26.000000000","message":"Done","commit_id":"3ba09541b54cade263dc5ca3b16d2f3fe0fe0937"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"1eff393c3432a2b74f4401277d761ee5c633b2e1","unresolved":false,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    Version history:"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    .. code-block:: none"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        1.0.0 - Initial driver"},{"line_number":175,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":19,"id":"ffd0ebdf_b4b14ce4","line":172,"range":{"start_line":172,"start_character":4,"end_line":172,"end_character":24},"updated":"2019-01-04 15:05:16.000000000","message":"This works too, but should be before line 170.","commit_id":"de89f6c370ea278386842b5a866c1ca48b1e9b12"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"5570169880ce54795d4546fb4cf407fb806bc503","unresolved":false,"context_lines":[{"line_number":774,"context_line":"    def _wait_volume_filled(self, name, pool, attempts, interval):"},{"line_number":775,"context_line":"        \"\"\"Wait until the volume is filled.\"\"\""},{"line_number":776,"context_line":"        try_num \u003d 0"},{"line_number":777,"context_line":"        while try_num \u003c attempts:"},{"line_number":778,"context_line":"            volumes \u003d self._get_volumes(pool)"},{"line_number":779,"context_line":"            for vol in volumes:"},{"line_number":780,"context_line":"                if name \u003d\u003d vol[\u0027name\u0027]:"},{"line_number":781,"context_line":"                    if vol[\u0027lvmType\u0027] \u003d\u003d 1:"},{"line_number":782,"context_line":"                        return True"},{"line_number":783,"context_line":"                    else:"},{"line_number":784,"context_line":"                        break"},{"line_number":785,"context_line":"            eventlet.sleep(interval)"},{"line_number":786,"context_line":"            try_num +\u003d 1"},{"line_number":787,"context_line":"        return False"},{"line_number":788,"context_line":""},{"line_number":789,"context_line":"    @utils.trace"},{"line_number":790,"context_line":"    def _check_volume(self, volume):"}],"source_content_type":"text/x-python","patch_set":19,"id":"ffd0ebdf_35ff93ab","line":787,"range":{"start_line":777,"start_character":0,"end_line":787,"end_character":20},"updated":"2019-01-04 18:37:58.000000000","message":"This really should be handled as a fixed interval looping call.","commit_id":"de89f6c370ea278386842b5a866c1ca48b1e9b12"}],"doc/source/configuration/block-storage/drivers/inspur-as13000-driver.rst":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"4614bf45693256e636086ef0f0f16c6e4773d1ed","unresolved":false,"context_lines":[{"line_number":24,"context_line":"Configure Inspur AS13000 iSCSI/FC backend"},{"line_number":25,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"This section details the steps required to configure the Inspur AS13000 "},{"line_number":28,"context_line":"Storage Cinder Driver"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"#. In the ``cinder.conf`` configuration file under the ``[DEFAULT]``"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_cc7b41f2","line":27,"range":{"start_line":27,"start_character":70,"end_line":27,"end_character":72},"updated":"2018-06-04 16:45:35.000000000","message":"Extra space at EOL.","commit_id":"1fde03d1afcfab41b7620ea595fad3655bd3f34f"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"4614bf45693256e636086ef0f0f16c6e4773d1ed","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"   -  For AS13000:"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"      .. code-block:: ini"},{"line_number":51,"context_line":"         [AS13000-1]"},{"line_number":52,"context_line":"         # The driver path"},{"line_number":53,"context_line":"         volume_driver \u003d cinder.volume.drivers.inspur.as13000.as13000_driver.AS13000Driver"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_2c6af51a","line":50,"range":{"start_line":50,"start_character":6,"end_line":50,"end_character":25},"updated":"2018-06-04 16:45:35.000000000","message":"This is causing your doc build to fail.","commit_id":"1fde03d1afcfab41b7620ea595fad3655bd3f34f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"1eec8034be9309727d3524395912a46d2efec7e7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"Inspur AS13000 series volume driver"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"3f79a3b5_e84c54ca","line":1,"range":{"start_line":1,"start_character":35,"end_line":1,"end_character":37},"updated":"2018-11-07 14:47:43.000000000","message":"Title lines too long.","commit_id":"9e5c57cf756daf7ef5515e5ed9998fbbb8b0d2d7"},{"author":{"_account_id":25648,"name":"wang yong","email":"yongwc@foxmail.com","username":"wangyong"},"change_message_id":"be3b15ff7dd209ea5f47c43ee22122554d44a276","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"Inspur AS13000 series volume driver"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"3f79a3b5_308c5839","line":1,"range":{"start_line":1,"start_character":35,"end_line":1,"end_character":37},"in_reply_to":"3f79a3b5_e84c54ca","updated":"2018-12-03 11:53:34.000000000","message":"Done","commit_id":"9e5c57cf756daf7ef5515e5ed9998fbbb8b0d2d7"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"1eec8034be9309727d3524395912a46d2efec7e7","unresolved":false,"context_lines":[{"line_number":9,"context_line":""},{"line_number":10,"context_line":"This documentation explains how to configure and connect the block storage"},{"line_number":11,"context_line":"nodes to Inspur AS13000 series storage."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Supported operations"},{"line_number":14,"context_line":"~~~~~~~~~~~~~~~~~~~~"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"3f79a3b5_88a1203e","line":12,"updated":"2018-11-07 14:47:43.000000000","message":"Would be useful to add a section at the end and use the config-table directive to have a table showing the driver specific configuration options.\n\n.. config-table::\n   :config-target: INSPUR AS13000\n\n   cinder/volume/drivers/inspur/as13000/as13000_driver","commit_id":"9e5c57cf756daf7ef5515e5ed9998fbbb8b0d2d7"},{"author":{"_account_id":25648,"name":"wang yong","email":"yongwc@foxmail.com","username":"wangyong"},"change_message_id":"be3b15ff7dd209ea5f47c43ee22122554d44a276","unresolved":false,"context_lines":[{"line_number":9,"context_line":""},{"line_number":10,"context_line":"This documentation explains how to configure and connect the block storage"},{"line_number":11,"context_line":"nodes to Inspur AS13000 series storage."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Supported operations"},{"line_number":14,"context_line":"~~~~~~~~~~~~~~~~~~~~"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"3f79a3b5_d0840410","line":12,"in_reply_to":"3f79a3b5_88a1203e","updated":"2018-12-03 11:53:34.000000000","message":"Done","commit_id":"9e5c57cf756daf7ef5515e5ed9998fbbb8b0d2d7"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"1eec8034be9309727d3524395912a46d2efec7e7","unresolved":false,"context_lines":[{"line_number":30,"context_line":"#. In the ``cinder.conf`` configuration file under the ``[DEFAULT]``"},{"line_number":31,"context_line":"   section, set the enabled_backends parameter."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"   -  For AS13000:"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"      .. code-block:: ini"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"3f79a3b5_28e56ca3","line":33,"range":{"start_line":33,"start_character":6,"end_line":33,"end_character":18},"updated":"2018-11-07 14:47:43.000000000","message":"Since this is for the AS13000, prefixing all of these with \"For AS13000\" is redundant.","commit_id":"9e5c57cf756daf7ef5515e5ed9998fbbb8b0d2d7"},{"author":{"_account_id":25648,"name":"wang yong","email":"yongwc@foxmail.com","username":"wangyong"},"change_message_id":"be3b15ff7dd209ea5f47c43ee22122554d44a276","unresolved":false,"context_lines":[{"line_number":30,"context_line":"#. In the ``cinder.conf`` configuration file under the ``[DEFAULT]``"},{"line_number":31,"context_line":"   section, set the enabled_backends parameter."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"   -  For AS13000:"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"      .. code-block:: ini"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"3f79a3b5_707bb02a","line":33,"range":{"start_line":33,"start_character":6,"end_line":33,"end_character":18},"in_reply_to":"3f79a3b5_28e56ca3","updated":"2018-12-03 11:53:34.000000000","message":"Done","commit_id":"9e5c57cf756daf7ef5515e5ed9998fbbb8b0d2d7"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"1eec8034be9309727d3524395912a46d2efec7e7","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"#. Add a backend group section for backend group specified"},{"line_number":42,"context_line":"   in the enabled_backends parameter"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"#. In the newly created backend group section, set the"},{"line_number":45,"context_line":"   following configuration options:"}],"source_content_type":"text/x-rst","patch_set":14,"id":"3f79a3b5_68628417","line":42,"updated":"2018-11-07 14:47:43.000000000","message":"Nit: end with a period.","commit_id":"9e5c57cf756daf7ef5515e5ed9998fbbb8b0d2d7"},{"author":{"_account_id":25648,"name":"wang yong","email":"yongwc@foxmail.com","username":"wangyong"},"change_message_id":"be3b15ff7dd209ea5f47c43ee22122554d44a276","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"#. Add a backend group section for backend group specified"},{"line_number":42,"context_line":"   in the enabled_backends parameter"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"#. In the newly created backend group section, set the"},{"line_number":45,"context_line":"   following configuration options:"}],"source_content_type":"text/x-rst","patch_set":14,"id":"3f79a3b5_907e8c18","line":42,"in_reply_to":"3f79a3b5_68628417","updated":"2018-12-03 11:53:34.000000000","message":"Done","commit_id":"9e5c57cf756daf7ef5515e5ed9998fbbb8b0d2d7"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"1eff393c3432a2b74f4401277d761ee5c633b2e1","unresolved":false,"context_lines":[{"line_number":41,"context_line":"#. In the ``cinder.conf`` configuration file under the ``[DEFAULT]``"},{"line_number":42,"context_line":"   section, set the enabled_backends parameter."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    .. code-block:: ini"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        [DEFAULT]"},{"line_number":47,"context_line":"        enabled_backends \u003d AS13000-1"}],"source_content_type":"text/x-rst","patch_set":19,"id":"ffd0ebdf_94f6888f","line":44,"range":{"start_line":44,"start_character":3,"end_line":44,"end_character":4},"updated":"2019-01-04 15:05:16.000000000","message":"This has one too many spaces causing the formatted output to be both a code block and block quoted. Dedent this block by a space to fix that.","commit_id":"de89f6c370ea278386842b5a866c1ca48b1e9b12"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"1eff393c3432a2b74f4401277d761ee5c633b2e1","unresolved":false,"context_lines":[{"line_number":53,"context_line":"#. In the newly created backend group section, set the"},{"line_number":54,"context_line":"   following configuration options:"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    .. code-block:: ini"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        [AS13000-1]"},{"line_number":59,"context_line":"        # The driver path"}],"source_content_type":"text/x-rst","patch_set":19,"id":"ffd0ebdf_34f31ca1","line":56,"range":{"start_line":56,"start_character":3,"end_line":56,"end_character":4},"updated":"2019-01-04 15:05:16.000000000","message":"Same.","commit_id":"de89f6c370ea278386842b5a866c1ca48b1e9b12"}]}
