)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":24,"name":"Chuck Short","email":"charles.short@windriver.com","username":"zulcss"},"change_message_id":"3e1fe447fcc86b815dcf98d5ccc8b3495c38af60","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Alexey Khodos \u003calexey.khodos@nexenta.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-07-26 07:15:51 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Refactored NexentaStor5 driver introduces:"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"- Failover support for both NFS and iSCSI."},{"line_number":10,"context_line":"- Host groups for iSCSI."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"5f7c97a3_3acf1555","line":7,"updated":"2018-07-27 12:51:55.000000000","message":"probably just \"Refactored NexentaStor5 driver\" makes more sense","commit_id":"9daab43bb9618f0d12b040650663d194ec5ce093"}],"cinder/tests/unit/volume/drivers/nexenta/test_nexenta5_iscsi.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"7a0d21e54bed2e84a7831fae3f7e550272fd3994","unresolved":false,"context_lines":[{"line_number":17,"context_line":"\"\"\""},{"line_number":18,"context_line":"import uuid"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from mock import Mock"},{"line_number":21,"context_line":"from mock import patch"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from oslo_utils import units"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_52b4d2d4","line":20,"updated":"2019-03-01 21:01:42.000000000","message":"Do not import classes, only modules.","commit_id":"6d8e344a40fbf213b94f91c017b2059e1fc550b2"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"7a0d21e54bed2e84a7831fae3f7e550272fd3994","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from mock import Mock"},{"line_number":21,"context_line":"from mock import patch"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from oslo_utils import units"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from cinder import context"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_72b9d6c9","line":22,"updated":"2019-03-01 21:01:42.000000000","message":"This blank line should not be here.","commit_id":"6d8e344a40fbf213b94f91c017b2059e1fc550b2"}],"cinder/tests/unit/volume/drivers/nexenta/test_nexenta5_jsonrpc.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"7a0d21e54bed2e84a7831fae3f7e550272fd3994","unresolved":false,"context_lines":[{"line_number":21,"context_line":"import posixpath"},{"line_number":22,"context_line":"import uuid"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from mock import Mock"},{"line_number":25,"context_line":"from mock import patch"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"import requests"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_12fc0a71","line":24,"range":{"start_line":24,"start_character":17,"end_line":24,"end_character":21},"updated":"2019-03-01 21:01:42.000000000","message":"Do not import objects.","commit_id":"6d8e344a40fbf213b94f91c017b2059e1fc550b2"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"7a0d21e54bed2e84a7831fae3f7e550272fd3994","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from mock import Mock"},{"line_number":25,"context_line":"from mock import patch"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"import requests"},{"line_number":28,"context_line":"import six"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_92ef9ab0","line":26,"updated":"2019-03-01 21:01:42.000000000","message":"This blank line should not be here.","commit_id":"6d8e344a40fbf213b94f91c017b2059e1fc550b2"}],"cinder/tests/unit/volume/drivers/nexenta/test_nexenta5_nfs.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"7a0d21e54bed2e84a7831fae3f7e550272fd3994","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import hashlib"},{"line_number":19,"context_line":"import os"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from mock import Mock"},{"line_number":22,"context_line":"from mock import patch"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from oslo_utils import units"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_b21adec3","line":21,"updated":"2019-03-01 21:01:42.000000000","message":"Same comments as other test files.","commit_id":"6d8e344a40fbf213b94f91c017b2059e1fc550b2"}],"cinder/volume/drivers/nexenta/ns5/iscsi.py":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"2dc6cf5276386dbcd2793f50e5c0516233bcf952","unresolved":false,"context_lines":[{"line_number":280,"context_line":"    def revert_to_snapshot(self, context, volume, snapshot):"},{"line_number":281,"context_line":"        \"\"\"Revert volume to snapshot.\"\"\""},{"line_number":282,"context_line":"        LOG.debug(\u0027Revert volume %(volume)s to snapshot %(snapshot)s\u0027,"},{"line_number":283,"context_line":"                 {\u0027volume\u0027: volume[\u0027name\u0027],"},{"line_number":284,"context_line":"                  \u0027snapshot\u0027: snapshot[\u0027name\u0027]})"},{"line_number":285,"context_line":"        volume_path \u003d self._get_volume_path(volume)"},{"line_number":286,"context_line":"        url \u003d \u0027storage/volumes/%s/rollback\u0027 % urllib.parse.quote_plus("}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_9d998c1f","line":283,"updated":"2018-07-27 05:01:00.000000000","message":"an extra space will be required.\nFollow this to avoid pep8 failures\nhttps://www.python.org/dev/peps/pep-0008/#indentation","commit_id":"9daab43bb9618f0d12b040650663d194ec5ce093"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"2dc6cf5276386dbcd2793f50e5c0516233bcf952","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        :param snapshot: reference of source snapshot"},{"line_number":295,"context_line":"        \"\"\""},{"line_number":296,"context_line":"        LOG.debug(\u0027Create volume %(volume)s from snapshot: %(snapshot)s\u0027,"},{"line_number":297,"context_line":"                 {\u0027volume\u0027: volume[\u0027name\u0027],"},{"line_number":298,"context_line":"                  \u0027snapshot\u0027: snapshot[\u0027name\u0027]})"},{"line_number":299,"context_line":"        snapshot_vol \u003d self._get_snapshot_volume(snapshot)"},{"line_number":300,"context_line":"        path \u003d \u0027%2F\u0027.join(["}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_bd9c880d","line":297,"updated":"2018-07-27 05:01:00.000000000","message":"ditto","commit_id":"9daab43bb9618f0d12b040650663d194ec5ce093"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"7a0d21e54bed2e84a7831fae3f7e550272fd3994","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import ipaddress"},{"line_number":17,"context_line":"import posixpath"},{"line_number":18,"context_line":"import random"},{"line_number":19,"context_line":"import six"},{"line_number":20,"context_line":"import uuid"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from oslo_log import log as logging"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_3284aed3","line":19,"updated":"2019-03-01 21:01:42.000000000","message":"six is a third party lib, so this should be with the oslo import group below.","commit_id":"6d8e344a40fbf213b94f91c017b2059e1fc550b2"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"7a0d21e54bed2e84a7831fae3f7e550272fd3994","unresolved":false,"context_lines":[{"line_number":28,"context_line":"from cinder import interface"},{"line_number":29,"context_line":"from cinder import objects"},{"line_number":30,"context_line":"from cinder.volume import driver"},{"line_number":31,"context_line":"from cinder.volume.drivers.nexenta.ns5.jsonrpc import NefException"},{"line_number":32,"context_line":"from cinder.volume.drivers.nexenta.ns5.jsonrpc import NefProxy"},{"line_number":33,"context_line":"from cinder.volume.drivers.nexenta import options"},{"line_number":34,"context_line":"from cinder.volume import utils"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_d268c223","line":31,"updated":"2019-03-01 21:01:42.000000000","message":"Do not import classes.","commit_id":"6d8e344a40fbf213b94f91c017b2059e1fc550b2"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"7a0d21e54bed2e84a7831fae3f7e550272fd3994","unresolved":false,"context_lines":[{"line_number":138,"context_line":"            self.nef.volumegroups.get(self.root_path)"},{"line_number":139,"context_line":"        except NefException as error:"},{"line_number":140,"context_line":"            if error.code !\u003d \u0027ENOENT\u0027:"},{"line_number":141,"context_line":"                raise error"},{"line_number":142,"context_line":"            payload \u003d {\u0027path\u0027: self.root_path,"},{"line_number":143,"context_line":"                       \u0027volumeBlockSize\u0027: self.dataset_blocksize}"},{"line_number":144,"context_line":"            self.nef.volumegroups.create(payload)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_325d8e79","line":141,"updated":"2019-03-01 21:01:42.000000000","message":"This should just be \"raise\", not \"raise error\".","commit_id":"6d8e344a40fbf213b94f91c017b2059e1fc550b2"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"7a0d21e54bed2e84a7831fae3f7e550272fd3994","unresolved":false,"context_lines":[{"line_number":175,"context_line":"            self.nef.volumes.delete(volume_path, delete_payload)"},{"line_number":176,"context_line":"        except NefException as error:"},{"line_number":177,"context_line":"            if error.code !\u003d \u0027EEXIST\u0027:"},{"line_number":178,"context_line":"                raise error"},{"line_number":179,"context_line":"            snapshots_tree \u003d {}"},{"line_number":180,"context_line":"            snapshots_payload \u003d {\u0027parent\u0027: volume_path, \u0027fields\u0027: \u0027path\u0027}"},{"line_number":181,"context_line":"            snapshots \u003d self.nef.snapshots.list(snapshots_payload)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_52c37207","line":178,"updated":"2019-03-01 21:01:42.000000000","message":"s/raise error/raise/","commit_id":"6d8e344a40fbf213b94f91c017b2059e1fc550b2"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"7a0d21e54bed2e84a7831fae3f7e550272fd3994","unresolved":false,"context_lines":[{"line_number":267,"context_line":"                      {\u0027clone\u0027: volume[\u0027name\u0027],"},{"line_number":268,"context_line":"                       \u0027volume\u0027: src_vref[\u0027name\u0027],"},{"line_number":269,"context_line":"                       \u0027error\u0027: error})"},{"line_number":270,"context_line":"            raise error"},{"line_number":271,"context_line":"        finally:"},{"line_number":272,"context_line":"            try:"},{"line_number":273,"context_line":"                self.delete_snapshot(snapshot)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_72c8f620","line":270,"updated":"2019-03-01 21:01:42.000000000","message":"raise","commit_id":"6d8e344a40fbf213b94f91c017b2059e1fc550b2"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"7a0d21e54bed2e84a7831fae3f7e550272fd3994","unresolved":false,"context_lines":[{"line_number":829,"context_line":"        remove_volumes_update \u003d []"},{"line_number":830,"context_line":"        return group_model_update, add_volumes_update, remove_volumes_update"},{"line_number":831,"context_line":""},{"line_number":832,"context_line":"    def create_cgsnapshot(self, context, cgsnapshot, snapshots):"},{"line_number":833,"context_line":"        \"\"\"Creates a consistency group snapshot."},{"line_number":834,"context_line":""},{"line_number":835,"context_line":"        :param context: the context of the caller."}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_12b40a82","line":832,"updated":"2019-03-01 21:01:42.000000000","message":"Need to check if these CG calls are still right since we\u0027ve switched to generic volume groups.","commit_id":"6d8e344a40fbf213b94f91c017b2059e1fc550b2"}],"cinder/volume/drivers/nexenta/ns5/jsonrpc.py":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"2dc6cf5276386dbcd2793f50e5c0516233bcf952","unresolved":false,"context_lines":[{"line_number":35,"context_line":"requests.packages.urllib3.disable_warnings(exceptions.InsecureRequestWarning)"},{"line_number":36,"context_line":"requests.packages.urllib3.disable_warnings(exceptions.InsecurePlatformWarning)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"def check_error(response):"},{"line_number":39,"context_line":"    code \u003d response.status_code"},{"line_number":40,"context_line":"    if code not in (200, 201, 202):"},{"line_number":41,"context_line":"        reason \u003d response.reason"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_ddb86479","line":38,"updated":"2018-07-27 05:01:00.000000000","message":"always use 2 blank lines to differentiate between imports and a function or class definition","commit_id":"9daab43bb9618f0d12b040650663d194ec5ce093"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"2dc6cf5276386dbcd2793f50e5c0516233bcf952","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                  \u0027content\u0027: content})"},{"line_number":61,"context_line":"        raise exception.NexentaException(msg)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"class RESTCaller(object):"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    retry_exc_tuple \u003d ("},{"line_number":66,"context_line":"        requests.exceptions.ConnectionError,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_fdbbe070","line":63,"updated":"2018-07-27 05:01:00.000000000","message":"ditto","commit_id":"9daab43bb9618f0d12b040650663d194ec5ce093"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"2dc6cf5276386dbcd2793f50e5c0516233bcf952","unresolved":false,"context_lines":[{"line_number":119,"context_line":"                             \u0027message\u0027: six.text_type(err)})"},{"line_number":120,"context_line":"                if (err[\u0027source\u0027] \u003d\u003d \u0027hpr\u0027 and"},{"line_number":121,"context_line":"                        \u0027Destination pool\u0027 in err[\u0027message\u0027]):"},{"line_number":122,"context_line":"                    return content"},{"line_number":123,"context_line":"                self.handle_failover()"},{"line_number":124,"context_line":"                url \u003d self.get_full_url(args[0])"},{"line_number":125,"context_line":"                response \u003d getattr("}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_1da6dc55","line":122,"updated":"2018-07-27 05:01:00.000000000","message":"content undefined","commit_id":"9daab43bb9618f0d12b040650663d194ec5ce093"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"2dc6cf5276386dbcd2793f50e5c0516233bcf952","unresolved":false,"context_lines":[{"line_number":305,"context_line":"                  \u0027reason\u0027: response.reason})"},{"line_number":306,"context_line":"        raise exception.NexentaException(msg)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"class NexentaJSONProxy(object):"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"    def __init__(self, host, port, user, password, use_https, pool, verify):"},{"line_number":311,"context_line":"        self.session \u003d requests.Session()"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_dd5dc454","line":308,"updated":"2018-07-27 05:01:00.000000000","message":"ditto","commit_id":"9daab43bb9618f0d12b040650663d194ec5ce093"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a5b42c9aa4e0743b846af4978e67b7cf9e3210ec","unresolved":false,"context_lines":[{"line_number":19,"context_line":"import six"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from eventlet import greenthread"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"import requests"},{"line_number":24,"context_line":"from requests.adapters import HTTPAdapter"},{"line_number":25,"context_line":"from requests.packages.urllib3.util.retry import Retry"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_55759cff","line":22,"updated":"2019-03-01 21:55:35.000000000","message":"Remove extra blank line.","commit_id":"6d8e344a40fbf213b94f91c017b2059e1fc550b2"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a5b42c9aa4e0743b846af4978e67b7cf9e3210ec","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from requests.packages.urllib3.util.retry import Retry"},{"line_number":26,"context_line":"from requests.packages.urllib3.util.timeout import Timeout"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from oslo_log import log as logging"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from cinder.exception import VolumeDriverException"},{"line_number":31,"context_line":"from cinder.i18n import _"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_95722412","line":28,"updated":"2019-03-01 21:55:35.000000000","message":"Should be above with other third party lib imports.","commit_id":"6d8e344a40fbf213b94f91c017b2059e1fc550b2"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a5b42c9aa4e0743b846af4978e67b7cf9e3210ec","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from oslo_log import log as logging"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from cinder.exception import VolumeDriverException"},{"line_number":31,"context_line":"from cinder.i18n import _"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_d5518c65","line":30,"updated":"2019-03-01 21:55:35.000000000","message":"Don\u0027t import classes.","commit_id":"6d8e344a40fbf213b94f91c017b2059e1fc550b2"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a5b42c9aa4e0743b846af4978e67b7cf9e3210ec","unresolved":false,"context_lines":[{"line_number":33,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class NefException(VolumeDriverException):"},{"line_number":37,"context_line":"    def __init__(self, data\u003dNone, **kwargs):"},{"line_number":38,"context_line":"        defaults \u003d {"},{"line_number":39,"context_line":"            \u0027name\u0027: \u0027NexentaError\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_75c8e020","line":36,"updated":"2019-03-01 21:55:35.000000000","message":"We\u0027ve typically wanted all exceptions centralized in the cinder/exceptions.py file, but I personally don\u0027t feel too strongly about it.","commit_id":"6d8e344a40fbf213b94f91c017b2059e1fc550b2"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a5b42c9aa4e0743b846af4978e67b7cf9e3210ec","unresolved":false,"context_lines":[{"line_number":359,"context_line":"            return self.proxy.post(self.root, payload)"},{"line_number":360,"context_line":"        except NefException as error:"},{"line_number":361,"context_line":"            if error.code !\u003d \u0027EEXIST\u0027:"},{"line_number":362,"context_line":"                raise error"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"    def delete(self, name, payload\u003dNone):"},{"line_number":365,"context_line":"        LOG.debug(\u0027Delete %(subj)s %(name)s: %(payload)s\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_f58130a2","line":362,"updated":"2019-03-01 21:55:35.000000000","message":"raise","commit_id":"6d8e344a40fbf213b94f91c017b2059e1fc550b2"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a5b42c9aa4e0743b846af4978e67b7cf9e3210ec","unresolved":false,"context_lines":[{"line_number":369,"context_line":"            return self.proxy.delete(path, payload)"},{"line_number":370,"context_line":"        except NefException as error:"},{"line_number":371,"context_line":"            if error.code !\u003d \u0027ENOENT\u0027:"},{"line_number":372,"context_line":"                raise error"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"class NefSettings(NefCollections):"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_958ea4cf","line":372,"updated":"2019-03-01 21:55:35.000000000","message":"raise","commit_id":"6d8e344a40fbf213b94f91c017b2059e1fc550b2"}],"cinder/volume/drivers/nexenta/ns5/nfs.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a5b42c9aa4e0743b846af4978e67b7cf9e3210ec","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from cinder import interface"},{"line_number":30,"context_line":"from cinder import objects"},{"line_number":31,"context_line":"from cinder.privsep import fs"},{"line_number":32,"context_line":"from cinder.volume.drivers.nexenta.ns5.jsonrpc import NefException"},{"line_number":33,"context_line":"from cinder.volume.drivers.nexenta.ns5.jsonrpc import NefProxy"},{"line_number":34,"context_line":"from cinder.volume.drivers.nexenta import options"},{"line_number":35,"context_line":"from cinder.volume.drivers import nfs"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_555fdc4c","line":32,"updated":"2019-03-01 21:55:35.000000000","message":"Modules not classes.","commit_id":"6d8e344a40fbf213b94f91c017b2059e1fc550b2"}],"cinder/volume/drivers/nexenta/options.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a5b42c9aa4e0743b846af4978e67b7cf9e3210ec","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from cinder.volume import configuration as conf"},{"line_number":17,"context_line":"from oslo_config import cfg"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"DEFAULT_ISCSI_PORT \u003d 3260"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_98181977","line":16,"updated":"2019-03-01 21:55:35.000000000","message":"This should not have been moved. Local imports go after third party imports.","commit_id":"6d8e344a40fbf213b94f91c017b2059e1fc550b2"}],"releasenotes/notes/nexentastor5-consistency-group-support-772adb6aa1ccc939.yaml":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"362a44a1140ee33fa1cc50f8ab68d8ce8e57a37b","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added support for creating, deleting, and updating consistency groups"},{"line_number":4,"context_line":"    for NexentaStor5 iSCSI and NFS drivers."},{"line_number":5,"context_line":"  - Added support for taking, deleting, and restoring a consistency group"},{"line_number":6,"context_line":"        snapshots for NexentaStor5 iSCSI and NFS drivers."}],"source_content_type":"text/x-yaml","patch_set":13,"id":"5fc1f717_16e642ea","line":5,"range":{"start_line":5,"start_character":54,"end_line":5,"end_character":55},"updated":"2019-03-05 19:53:14.000000000","message":"\"a\" should not be here.","commit_id":"155a7ad17a82b1f357d0186b601c730140b70620"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"20aee16bbde702e17b07446e1b236f8207a8a17b","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added support for creating, deleting, and updating consistency groups"},{"line_number":4,"context_line":"    for NexentaStor5 iSCSI and NFS drivers."},{"line_number":5,"context_line":"  - Added support for taking, deleting, and restoring a consistency group"},{"line_number":6,"context_line":"        snapshots for NexentaStor5 iSCSI and NFS drivers."}],"source_content_type":"text/x-yaml","patch_set":13,"id":"5fc1f717_3cf79df8","line":5,"range":{"start_line":5,"start_character":54,"end_line":5,"end_character":55},"in_reply_to":"5fc1f717_16e642ea","updated":"2019-03-05 21:19:50.000000000","message":"Done","commit_id":"155a7ad17a82b1f357d0186b601c730140b70620"}],"releasenotes/notes/nexentastor5-revert-to-snapshot-support-10e7903e86e7ae42.yaml":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"362a44a1140ee33fa1cc50f8ab68d8ce8e57a37b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Add revert to snapshot support for NexentaStor5 iSCSI and NFS drivers."}],"source_content_type":"text/x-yaml","patch_set":13,"id":"5fc1f717_96f2329a","line":3,"range":{"start_line":3,"start_character":4,"end_line":3,"end_character":7},"updated":"2019-03-05 19:53:14.000000000","message":"Added","commit_id":"155a7ad17a82b1f357d0186b601c730140b70620"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"20aee16bbde702e17b07446e1b236f8207a8a17b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Add revert to snapshot support for NexentaStor5 iSCSI and NFS drivers."}],"source_content_type":"text/x-yaml","patch_set":13,"id":"5fc1f717_fcd83580","line":3,"range":{"start_line":3,"start_character":4,"end_line":3,"end_character":7},"in_reply_to":"5fc1f717_96f2329a","updated":"2019-03-05 21:19:50.000000000","message":"Done","commit_id":"155a7ad17a82b1f357d0186b601c730140b70620"}]}
