)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"70ee4875f7d2dc4cb956faed5595985c62b66641","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Cinder tempest tests are failed with concurrency\u003e1 due to"},{"line_number":10,"context_line":"possible race conditions between attach and detach volumes and"},{"line_number":11,"context_line":"due to limitaion from Kaminario K2 iSCSI and FC arrays on concurrent"},{"line_number":12,"context_line":"operations."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: Ia5c37ebf0333f962ee1a71f71337e6b9c133241b"},{"line_number":15,"context_line":"Closes-Bug: #1608913"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"9ad45d7e_fe26c5b8","line":12,"updated":"2016-08-09 11:24:46.000000000","message":"Please mention briefly what is the fix.","commit_id":"4a089ebc9b568a17d118b76f6892fc47e4071c81"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"7092f29c8715e12738acef10be28f0c1f4d50242","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Cinder tempest tests are failed with concurrency\u003e1 due to"},{"line_number":10,"context_line":"possible race conditions between attach and detach volumes and"},{"line_number":11,"context_line":"due to limitaion from Kaminario K2 iSCSI and FC arrays on concurrent"},{"line_number":12,"context_line":"operations."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: Ia5c37ebf0333f962ee1a71f71337e6b9c133241b"},{"line_number":15,"context_line":"Closes-Bug: #1608913"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"9ad45d7e_781ca813","line":12,"in_reply_to":"9ad45d7e_fe26c5b8","updated":"2016-08-09 12:37:05.000000000","message":"Done","commit_id":"4a089ebc9b568a17d118b76f6892fc47e4071c81"}],"cinder/exception.py":[{"author":{"_account_id":10213,"name":"Alon Marx","email":"alonma@il.ibm.com","username":"alonmarx"},"change_message_id":"c451874f51f817e22fa2e32c5bcce678f0cd846a","unresolved":false,"context_lines":[{"line_number":1195,"context_line":""},{"line_number":1196,"context_line":""},{"line_number":1197,"context_line":"# Kaminario K2"},{"line_number":1198,"context_line":"class KaminarioCinderDriverException(VolumeDriverException):"},{"line_number":1199,"context_line":"    message \u003d _(\"KaminarioCinderDriver failure: %(reason)s\")"},{"line_number":1200,"context_line":""},{"line_number":1201,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"9ad45d7e_6e53c717","line":1198,"range":{"start_line":1198,"start_character":6,"end_line":1198,"end_character":60},"updated":"2016-08-11 11:49:52.000000000","message":"Why do you need a special exception instead of the VolumeBackendAPIException?","commit_id":"cdf320f6c0172455638f1760cefad22e05abb9da"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"88b1612fab58876ffdf9e6fc8b9f1de0407f03db","unresolved":false,"context_lines":[{"line_number":1195,"context_line":""},{"line_number":1196,"context_line":""},{"line_number":1197,"context_line":"# Kaminario K2"},{"line_number":1198,"context_line":"class KaminarioCinderDriverException(VolumeDriverException):"},{"line_number":1199,"context_line":"    message \u003d _(\"KaminarioCinderDriver failure: %(reason)s\")"},{"line_number":1200,"context_line":""},{"line_number":1201,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"9ad45d7e_1e7b54c2","line":1198,"range":{"start_line":1198,"start_character":6,"end_line":1198,"end_character":60},"in_reply_to":"9ad45d7e_6e53c717","updated":"2016-08-11 13:04:50.000000000","message":"I am not adding this in this change. I followed other drivers","commit_id":"cdf320f6c0172455638f1760cefad22e05abb9da"},{"author":{"_account_id":10213,"name":"Alon Marx","email":"alonma@il.ibm.com","username":"alonmarx"},"change_message_id":"c451874f51f817e22fa2e32c5bcce678f0cd846a","unresolved":false,"context_lines":[{"line_number":1199,"context_line":"    message \u003d _(\"KaminarioCinderDriver failure: %(reason)s\")"},{"line_number":1200,"context_line":""},{"line_number":1201,"context_line":""},{"line_number":1202,"context_line":"class KaminarioRetryableException(VolumeDriverException):"},{"line_number":1203,"context_line":"    message \u003d _(\"Kaminario retryable exception: %(reason)s\")"},{"line_number":1204,"context_line":""},{"line_number":1205,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"9ad45d7e_2e8b8f69","line":1202,"range":{"start_line":1202,"start_character":6,"end_line":1202,"end_character":33},"updated":"2016-08-11 11:49:52.000000000","message":"Seems like this is the 3rd implementation of retry exception in this file","commit_id":"cdf320f6c0172455638f1760cefad22e05abb9da"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"88b1612fab58876ffdf9e6fc8b9f1de0407f03db","unresolved":false,"context_lines":[{"line_number":1199,"context_line":"    message \u003d _(\"KaminarioCinderDriver failure: %(reason)s\")"},{"line_number":1200,"context_line":""},{"line_number":1201,"context_line":""},{"line_number":1202,"context_line":"class KaminarioRetryableException(VolumeDriverException):"},{"line_number":1203,"context_line":"    message \u003d _(\"Kaminario retryable exception: %(reason)s\")"},{"line_number":1204,"context_line":""},{"line_number":1205,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"9ad45d7e_fe75a0ca","line":1202,"range":{"start_line":1202,"start_character":6,"end_line":1202,"end_character":33},"in_reply_to":"9ad45d7e_2e8b8f69","updated":"2016-08-11 13:04:50.000000000","message":"I followed other drivers.","commit_id":"cdf320f6c0172455638f1760cefad22e05abb9da"}],"cinder/volume/drivers/kaminario/kaminario_common.py":[{"author":{"_account_id":22025,"name":"James Conroy","email":"jayryanconroy@gmail.com","username":"jayconroy"},"change_message_id":"7934552773e08c0ef3e7855b872615788a313222","unresolved":false,"context_lines":[{"line_number":91,"context_line":"                self.krestlock.acquire()"},{"line_number":92,"context_line":"                return super(KrestWrap, self)._request(method, *args, **kwargs)"},{"line_number":93,"context_line":"            except HTTPError as err:"},{"line_number":94,"context_line":"                err_str \u003d str(err)"},{"line_number":95,"context_line":"                status_code \u003d err.response.status_code"},{"line_number":96,"context_line":"                if self._should_retry(status_code, err_str):"},{"line_number":97,"context_line":"                    i +\u003d 1"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_711171af","line":94,"range":{"start_line":94,"start_character":26,"end_line":94,"end_character":29},"updated":"2016-08-03 11:09:06.000000000","message":"str() cannot be used on an exception so use six.text_type() instead of str() here.","commit_id":"ef04d3f89af5fc82332a7760fbddcaf7a05edc9c"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c22177524f0b4a4da2f7125e88088c62208276fe","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        def __init__(self, *args, **kwargs):"},{"line_number":66,"context_line":"            self.krestlock \u003d threading.Lock()"},{"line_number":67,"context_line":"            if \"retries\" in kwargs:"},{"line_number":68,"context_line":"                self.retries \u003d kwargs[\"retries\"]"},{"line_number":69,"context_line":"                del kwargs[\"retries\"]"},{"line_number":70,"context_line":"            else:"},{"line_number":71,"context_line":"                self.retries \u003d 5"},{"line_number":72,"context_line":"            super(KrestWrap, self).__init__(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":4,"id":"bacf61ea_13cd96b7","line":69,"range":{"start_line":68,"start_character":16,"end_line":69,"end_character":37},"updated":"2016-08-03 12:39:20.000000000","message":"Change to:\n\nself.retries \u003d kwargs.pop(\"retries\")","commit_id":"e957d53352618eace28e54538cd94c34f04b6a37"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c22177524f0b4a4da2f7125e88088c62208276fe","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        def _should_retry(self, status_code, err_str):"},{"line_number":75,"context_line":"            LOG.debug(\"Retry ERROR: %d with status %s\", status_code, err_str)"},{"line_number":76,"context_line":"            if status_code \u003d\u003d 400 and (err_str \u003d\u003d \"MC_ERR_BUSY\" or"},{"line_number":77,"context_line":"                                       err_str \u003d\u003d \"MC_ERR_BUSY_SPECIFIC\" or"},{"line_number":78,"context_line":"                                       err_str \u003d\u003d \"MC_ERR_INPROGRESS\" or"},{"line_number":79,"context_line":"                                       err_str \u003d\u003d \"MC_ERR_START_TIMEOUT\"):"},{"line_number":80,"context_line":"                return True"},{"line_number":81,"context_line":"            else:"},{"line_number":82,"context_line":"                return False"}],"source_content_type":"text/x-python","patch_set":4,"id":"bacf61ea_b303eab7","line":79,"range":{"start_line":76,"start_character":39,"end_line":79,"end_character":72},"updated":"2016-08-03 12:39:20.000000000","message":"Change to:\n\nerr_str in [\"MC_ERR_BUSY\", \"MC_ERR_BUSY_SPECIFIC\", ...]","commit_id":"e957d53352618eace28e54538cd94c34f04b6a37"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"591e76f00cca833a3759044673fc0b6d48d11078","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        def _request(self, method, *args, **kwargs):"},{"line_number":86,"context_line":"            i \u003d 0"},{"line_number":87,"context_line":"            while i \u003c self.retries:"},{"line_number":88,"context_line":"                if i \u003e 0:"},{"line_number":89,"context_line":"                    eventlet.sleep(1)"},{"line_number":90,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":10,"id":"bacf61ea_638da430","line":87,"updated":"2016-08-05 14:08:21.000000000","message":"Please use utils.retry()","commit_id":"1b56e8e851da215806c84dbbd734bdbd2bf872bb"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"b0808fc6eefc0234993f4936afa5b4f699f1a7d1","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        def _request(self, method, *args, **kwargs):"},{"line_number":86,"context_line":"            i \u003d 0"},{"line_number":87,"context_line":"            while i \u003c self.retries:"},{"line_number":88,"context_line":"                if i \u003e 0:"},{"line_number":89,"context_line":"                    eventlet.sleep(1)"},{"line_number":90,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":11,"id":"9ad45d7e_d93511f8","line":87,"updated":"2016-08-08 13:44:18.000000000","message":"As mentioned in the previous patch set, we can use utils.retry to avoid code duplication. Any specific reason why it cannot be used here?","commit_id":"8686aaa3e6f65e6f9f72ab42bef9b5a8520df4aa"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"70ee4875f7d2dc4cb956faed5595985c62b66641","unresolved":false,"context_lines":[{"line_number":69,"context_line":"if krest:"},{"line_number":70,"context_line":"    class KrestWrap(krest.EndPoint):"},{"line_number":71,"context_line":"        def __init__(self, *args, **kwargs):"},{"line_number":72,"context_line":"            self.krestlock \u003d threading.Lock()"},{"line_number":73,"context_line":"            super(KrestWrap, self).__init__(*args, **kwargs)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        def _should_retry(self, err_code, err_msg):"}],"source_content_type":"text/x-python","patch_set":12,"id":"9ad45d7e_be1bad1a","line":72,"updated":"2016-08-09 11:24:46.000000000","message":"Qn: initialize connection and terminate connection are now synchronized. Why do we need this lock? Is it for other volume operations in the backend?","commit_id":"4a089ebc9b568a17d118b76f6892fc47e4071c81"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"7092f29c8715e12738acef10be28f0c1f4d50242","unresolved":false,"context_lines":[{"line_number":69,"context_line":"if krest:"},{"line_number":70,"context_line":"    class KrestWrap(krest.EndPoint):"},{"line_number":71,"context_line":"        def __init__(self, *args, **kwargs):"},{"line_number":72,"context_line":"            self.krestlock \u003d threading.Lock()"},{"line_number":73,"context_line":"            super(KrestWrap, self).__init__(*args, **kwargs)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        def _should_retry(self, err_code, err_msg):"}],"source_content_type":"text/x-python","patch_set":12,"id":"9ad45d7e_d86dd499","line":72,"in_reply_to":"9ad45d7e_be1bad1a","updated":"2016-08-09 12:37:05.000000000","message":"K2 array itself does not support concurrency. This lock is for avoiding concurrent requests to K2 array.","commit_id":"4a089ebc9b568a17d118b76f6892fc47e4071c81"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"70ee4875f7d2dc4cb956faed5595985c62b66641","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                    if er in err_msg:"},{"line_number":79,"context_line":"                        LOG.debug(\"Retry ERROR: %d with status %s\","},{"line_number":80,"context_line":"                                  err_code, err_msg)"},{"line_number":81,"context_line":"                        eventlet.sleep(1)"},{"line_number":82,"context_line":"                        raise exception.KaminarioRetryableException("},{"line_number":83,"context_line":"                            reason\u003dsix.text_type(err_msg))"},{"line_number":84,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":12,"id":"9ad45d7e_657c3373","line":81,"updated":"2016-08-09 11:24:46.000000000","message":"I think we can remove this because there is already a sleep between retries. See utils.retry for details.","commit_id":"4a089ebc9b568a17d118b76f6892fc47e4071c81"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"7092f29c8715e12738acef10be28f0c1f4d50242","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                    if er in err_msg:"},{"line_number":79,"context_line":"                        LOG.debug(\"Retry ERROR: %d with status %s\","},{"line_number":80,"context_line":"                                  err_code, err_msg)"},{"line_number":81,"context_line":"                        eventlet.sleep(1)"},{"line_number":82,"context_line":"                        raise exception.KaminarioRetryableException("},{"line_number":83,"context_line":"                            reason\u003dsix.text_type(err_msg))"},{"line_number":84,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":12,"id":"9ad45d7e_78f5c8c9","line":81,"in_reply_to":"9ad45d7e_657c3373","updated":"2016-08-09 12:37:05.000000000","message":"Done","commit_id":"4a089ebc9b568a17d118b76f6892fc47e4071c81"},{"author":{"_account_id":20191,"name":"Dinesh Bhor","email":"bhordinesh07@gmail.com","username":"dineshbhor"},"change_message_id":"17ba94d82eab8f7fccce5467c894afd851ce5f30","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from oslo_utils import versionutils"},{"line_number":25,"context_line":"import requests"},{"line_number":26,"context_line":"import six"},{"line_number":27,"context_line":"import threading"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"import cinder"},{"line_number":30,"context_line":"from cinder import exception"}],"source_content_type":"text/x-python","patch_set":13,"id":"9ad45d7e_11890727","line":27,"range":{"start_line":27,"start_character":7,"end_line":27,"end_character":16},"updated":"2016-08-09 13:15:23.000000000","message":"\u0027threading\u0027 is a python inbuilt module so IMO it should be shifted to after line #18","commit_id":"a19aa29528f28a1753946cd5d79a5b4d540721ac"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"42da19b9280fe5341a77e269301805d031941798","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                                  err_code, err_msg)"},{"line_number":81,"context_line":"                        raise exception.KaminarioRetryableException("},{"line_number":82,"context_line":"                            reason\u003dsix.text_type(err_msg))"},{"line_number":83,"context_line":"                raise"},{"line_number":84,"context_line":"            else:"},{"line_number":85,"context_line":"                raise"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        @utils.retry(exception.KaminarioRetryableException,"},{"line_number":88,"context_line":"                     retries\u003dMAX_K2_RETRY)"}],"source_content_type":"text/x-python","patch_set":20,"id":"9ad45d7e_dc13adb6","line":85,"range":{"start_line":83,"start_character":16,"end_line":85,"end_character":21},"updated":"2016-08-10 21:34:34.000000000","message":"to avoid double raise:\n\nif err_code \u003d\u003d 400:\n    for er in K2_RETRY_ERRORS:\n        if er in err_msg:\n            ...\nraise\n\nmoreover whole _should_retry code should be moved under \"except K2HTTPError as err:\" because raise without arguments can be used only in exception block (current syntax deprecated in python 3.5)","commit_id":"b719835ba99da760db7d73e528f088a8ebaa37b2"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"367337ce76907c664b63ebb273a4db5d8fc20204","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                                  err_code, err_msg)"},{"line_number":81,"context_line":"                        raise exception.KaminarioRetryableException("},{"line_number":82,"context_line":"                            reason\u003dsix.text_type(err_msg))"},{"line_number":83,"context_line":"                raise"},{"line_number":84,"context_line":"            else:"},{"line_number":85,"context_line":"                raise"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        @utils.retry(exception.KaminarioRetryableException,"},{"line_number":88,"context_line":"                     retries\u003dMAX_K2_RETRY)"}],"source_content_type":"text/x-python","patch_set":20,"id":"9ad45d7e_e82d01a9","line":85,"range":{"start_line":83,"start_character":16,"end_line":85,"end_character":21},"in_reply_to":"9ad45d7e_dc13adb6","updated":"2016-08-11 03:51:25.000000000","message":"Done","commit_id":"b719835ba99da760db7d73e528f088a8ebaa37b2"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"42da19b9280fe5341a77e269301805d031941798","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            except K2HTTPError as err:"},{"line_number":96,"context_line":"                self._should_retry(err.response.status_code,"},{"line_number":97,"context_line":"                                   err.response.text)"},{"line_number":98,"context_line":"            except exception:"},{"line_number":99,"context_line":"                raise"},{"line_number":100,"context_line":"            finally:"},{"line_number":101,"context_line":"                self.krestlock.release()"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"9ad45d7e_47888ac5","line":99,"range":{"start_line":98,"start_character":12,"end_line":99,"end_character":21},"updated":"2016-08-10 21:34:34.000000000","message":"It should be Exception, exception is module name, also what that suppose to do? IMO could be removed.","commit_id":"b719835ba99da760db7d73e528f088a8ebaa37b2"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"367337ce76907c664b63ebb273a4db5d8fc20204","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            except K2HTTPError as err:"},{"line_number":96,"context_line":"                self._should_retry(err.response.status_code,"},{"line_number":97,"context_line":"                                   err.response.text)"},{"line_number":98,"context_line":"            except exception:"},{"line_number":99,"context_line":"                raise"},{"line_number":100,"context_line":"            finally:"},{"line_number":101,"context_line":"                self.krestlock.release()"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"9ad45d7e_a80e6938","line":99,"range":{"start_line":98,"start_character":12,"end_line":99,"end_character":21},"in_reply_to":"9ad45d7e_47888ac5","updated":"2016-08-11 03:51:25.000000000","message":"Done","commit_id":"b719835ba99da760db7d73e528f088a8ebaa37b2"},{"author":{"_account_id":10213,"name":"Alon Marx","email":"alonma@il.ibm.com","username":"alonmarx"},"change_message_id":"c451874f51f817e22fa2e32c5bcce678f0cd846a","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from oslo_log import log as logging"},{"line_number":24,"context_line":"from oslo_utils import units"},{"line_number":25,"context_line":"from oslo_utils import versionutils"},{"line_number":26,"context_line":"import requests"},{"line_number":27,"context_line":"import six"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"import cinder"},{"line_number":30,"context_line":"from cinder import exception"}],"source_content_type":"text/x-python","patch_set":22,"id":"9ad45d7e_33a5b846","line":27,"range":{"start_line":26,"start_character":0,"end_line":27,"end_character":10},"updated":"2016-08-11 11:49:52.000000000","message":"general imports should come before the openstack imports","commit_id":"cdf320f6c0172455638f1760cefad22e05abb9da"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"88b1612fab58876ffdf9e6fc8b9f1de0407f03db","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from oslo_log import log as logging"},{"line_number":24,"context_line":"from oslo_utils import units"},{"line_number":25,"context_line":"from oslo_utils import versionutils"},{"line_number":26,"context_line":"import requests"},{"line_number":27,"context_line":"import six"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"import cinder"},{"line_number":30,"context_line":"from cinder import exception"}],"source_content_type":"text/x-python","patch_set":22,"id":"9ad45d7e_7e889071","line":27,"range":{"start_line":26,"start_character":0,"end_line":27,"end_character":10},"in_reply_to":"9ad45d7e_33a5b846","updated":"2016-08-11 13:04:50.000000000","message":"not sure on your this comment:\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/datera.py\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/tintri.py#L30","commit_id":"cdf320f6c0172455638f1760cefad22e05abb9da"},{"author":{"_account_id":20191,"name":"Dinesh Bhor","email":"bhordinesh07@gmail.com","username":"dineshbhor"},"change_message_id":"91aca67756add61911b7d30bd83e668407a684f6","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from oslo_log import log as logging"},{"line_number":24,"context_line":"from oslo_utils import units"},{"line_number":25,"context_line":"from oslo_utils import versionutils"},{"line_number":26,"context_line":"import requests"},{"line_number":27,"context_line":"import six"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"import cinder"},{"line_number":30,"context_line":"from cinder import exception"}],"source_content_type":"text/x-python","patch_set":22,"id":"9ad45d7e_41edf1b5","line":27,"range":{"start_line":26,"start_character":0,"end_line":27,"end_character":10},"in_reply_to":"9ad45d7e_7e889071","updated":"2016-08-11 13:14:11.000000000","message":"Agree with Nikesh IMO its not required, there are such several occurrences in other projects also.","commit_id":"cdf320f6c0172455638f1760cefad22e05abb9da"},{"author":{"_account_id":20191,"name":"Dinesh Bhor","email":"bhordinesh07@gmail.com","username":"dineshbhor"},"change_message_id":"14a7b072b395ca40f0fa59f90472189be7eed2c0","unresolved":false,"context_lines":[{"line_number":33,"context_line":"from cinder import utils"},{"line_number":34,"context_line":"from cinder.volume.drivers.san import san"},{"line_number":35,"context_line":"from cinder.volume import utils as vol_utils"},{"line_number":36,"context_line":"try:"},{"line_number":37,"context_line":"    import krest"},{"line_number":38,"context_line":"except ImportError:"},{"line_number":39,"context_line":"    krest \u003d None"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"K2_MIN_VERSION \u003d \u00272.2.0\u0027"},{"line_number":42,"context_line":"K2_LOCK_PREFIX \u003d \u0027Kaminario\u0027"}],"source_content_type":"text/x-python","patch_set":22,"id":"9ad45d7e_345d9e15","line":39,"range":{"start_line":36,"start_character":0,"end_line":39,"end_character":16},"updated":"2016-08-11 12:12:55.000000000","message":"Agree, \u0027try_import\u0027 will return default \u0027None\u0027 if it fails to import the module.\n\nhttp://docs.openstack.org/developer/oslo.utils/api/importutils.html","commit_id":"cdf320f6c0172455638f1760cefad22e05abb9da"},{"author":{"_account_id":10213,"name":"Alon Marx","email":"alonma@il.ibm.com","username":"alonmarx"},"change_message_id":"c451874f51f817e22fa2e32c5bcce678f0cd846a","unresolved":false,"context_lines":[{"line_number":33,"context_line":"from cinder import utils"},{"line_number":34,"context_line":"from cinder.volume.drivers.san import san"},{"line_number":35,"context_line":"from cinder.volume import utils as vol_utils"},{"line_number":36,"context_line":"try:"},{"line_number":37,"context_line":"    import krest"},{"line_number":38,"context_line":"except ImportError:"},{"line_number":39,"context_line":"    krest \u003d None"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"K2_MIN_VERSION \u003d \u00272.2.0\u0027"},{"line_number":42,"context_line":"K2_LOCK_PREFIX \u003d \u0027Kaminario\u0027"}],"source_content_type":"text/x-python","patch_set":22,"id":"9ad45d7e_ce98f36c","line":39,"range":{"start_line":36,"start_character":0,"end_line":39,"end_character":16},"updated":"2016-08-11 11:49:52.000000000","message":"why not use importutils.try_import?","commit_id":"cdf320f6c0172455638f1760cefad22e05abb9da"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"88b1612fab58876ffdf9e6fc8b9f1de0407f03db","unresolved":false,"context_lines":[{"line_number":33,"context_line":"from cinder import utils"},{"line_number":34,"context_line":"from cinder.volume.drivers.san import san"},{"line_number":35,"context_line":"from cinder.volume import utils as vol_utils"},{"line_number":36,"context_line":"try:"},{"line_number":37,"context_line":"    import krest"},{"line_number":38,"context_line":"except ImportError:"},{"line_number":39,"context_line":"    krest \u003d None"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"K2_MIN_VERSION \u003d \u00272.2.0\u0027"},{"line_number":42,"context_line":"K2_LOCK_PREFIX \u003d \u0027Kaminario\u0027"}],"source_content_type":"text/x-python","patch_set":22,"id":"9ad45d7e_9e8bc41e","line":39,"range":{"start_line":36,"start_character":0,"end_line":39,"end_character":16},"in_reply_to":"9ad45d7e_345d9e15","updated":"2016-08-11 13:04:50.000000000","message":"Done","commit_id":"cdf320f6c0172455638f1760cefad22e05abb9da"}],"releasenotes/notes/kaminario-concurrency-bug-e0b899a42383660c.yaml":[{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"65a393eb8fe501fb8d300b3876114cf1aad618ec","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - Fixed concurrency issue in K2 iSCSI and FC Cinder drivers"},{"line_number":4,"context_line":"    due to possible race conditions between attach and detach"},{"line_number":5,"context_line":"    volumes and due to limitaion from Kaminario K2 iSCSI and"},{"line_number":6,"context_line":"    FC arrays on concurrent operations."},{"line_number":7,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":22,"id":"9ad45d7e_799b8f18","line":5,"range":{"start_line":5,"start_character":23,"end_line":5,"end_character":32},"updated":"2016-08-11 12:08:00.000000000","message":"s/limitaion/limitation\nAnd here, you should describe what was done to fix it rather than only what is wrong.","commit_id":"cdf320f6c0172455638f1760cefad22e05abb9da"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"88b1612fab58876ffdf9e6fc8b9f1de0407f03db","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - Fixed concurrency issue in K2 iSCSI and FC Cinder drivers"},{"line_number":4,"context_line":"    due to possible race conditions between attach and detach"},{"line_number":5,"context_line":"    volumes and due to limitaion from Kaminario K2 iSCSI and"},{"line_number":6,"context_line":"    FC arrays on concurrent operations."},{"line_number":7,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":22,"id":"9ad45d7e_deaffc7a","line":5,"range":{"start_line":5,"start_character":23,"end_line":5,"end_character":32},"in_reply_to":"9ad45d7e_799b8f18","updated":"2016-08-11 13:04:50.000000000","message":"Done","commit_id":"cdf320f6c0172455638f1760cefad22e05abb9da"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c339f6032bffb9621d297e995ca8d233066c8a59","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    due to possible race conditions between attach and detach"},{"line_number":5,"context_line":"    volumes and due to limitation from Kaminario K2 iSCSI and"},{"line_number":6,"context_line":"    FC arrays on concurrent operations."},{"line_number":7,"context_line":"    To overcome array limitation, use locks and retry mechanism"},{"line_number":8,"context_line":"    on each K2 requests. To overcome race conditions, use locks"},{"line_number":9,"context_line":"    on initialize_connection and terminate_connection."}],"source_content_type":"text/x-yaml","patch_set":24,"id":"9ad45d7e_e157ae23","line":9,"range":{"start_line":7,"start_character":4,"end_line":9,"end_character":54},"updated":"2016-08-11 19:24:22.000000000","message":"If you do another update please remove this paragraph. That\u0027s an internal detail not interesting to end user, and with the way it\u0027s worded it actually makes it sound like the end user needs to do something.","commit_id":"79994d643c76a176550e8d3a11cadc51c767df59"}]}
