)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"aea4958aeb59741c8e80bd5ec8cf497db3f3277e","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Aleksey Ruban \u003caleksey.ruban@nexenta.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-06-20 08:08:12 -0600"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Nexenta: Add NDB driver for NexentaEdge."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"DocImpact"},{"line_number":10,"context_line":"Implements: blueprint nexentaedge-ndb-driver"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"3aaa91ec_24a68a10","line":7,"updated":"2016-06-22 14:37:06.000000000","message":"s/NDB/NBD","commit_id":"f96ef65eb2084733b67d4b3b42e9e6068d6ba129"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"aea4958aeb59741c8e80bd5ec8cf497db3f3277e","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Nexenta: Add NDB driver for NexentaEdge."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"DocImpact"},{"line_number":10,"context_line":"Implements: blueprint nexentaedge-ndb-driver"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Iead87f00d75bfa93a06c7d2c1c6ab708bc5d804b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"3aaa91ec_a4e8ba11","line":10,"updated":"2016-06-22 14:37:06.000000000","message":"Typo in blueprint as well.  Seems that it should be \"nbd\" instead of \"ndb\" based on the driver file name and the driver name.","commit_id":"f96ef65eb2084733b67d4b3b42e9e6068d6ba129"}],"cinder/tests/unit/test_nexenta_edge_nbd.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"2f27fad31f14bfe0e062cdbf3aaf9779faa33315","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from cinder import exception\r"},{"line_number":26,"context_line":"from cinder import test\r"},{"line_number":27,"context_line":"from cinder.volume import configuration as conf\r"},{"line_number":28,"context_line":"from cinder.volume.drivers.nexenta.nexentaedge.nbd import NexentaEdgeNBDDriver\r"},{"line_number":29,"context_line":"\r"},{"line_number":30,"context_line":"\r"},{"line_number":31,"context_line":"class FakeResponse(object):\r"}],"source_content_type":"text/x-python","patch_set":5,"id":"7aa08908_188bb81f","line":28,"updated":"2016-06-12 05:06:00.000000000","message":"Please import the module and do not import the class directly.\n\nfrom cinder.volume.drivers.nexenta.nexentaedge import nbd","commit_id":"7aec70c9f67f1863aa4e115e093d948d780e6fda"}],"cinder/volume/drivers/nexenta/nexentaedge/jsonrpc.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"262fffd21f987b1122172a8d339d22ab9b2375c7","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        elif self.method \u003d\u003d \u0027delete\u0027:"},{"line_number":94,"context_line":"            req \u003d requests.delete(self.url, data\u003ddata, headers\u003dheaders)"},{"line_number":95,"context_line":"        else:"},{"line_number":96,"context_line":"            raise Exception(\u0027Unsupported method: %s\u0027 % self.method)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        rsp \u003d req.json()"},{"line_number":99,"context_line":"        req.close()"}],"source_content_type":"text/x-python","patch_set":2,"id":"bab6814e_7bedda8d","line":96,"updated":"2016-05-24 17:21:52.000000000","message":"Please use a more specific exception.","commit_id":"4be2d850e8f57b9f5a5586fbfc5f52aa421d3282"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"92aff03a798195e3b355786e6f3a63273108288e","unresolved":false,"context_lines":[{"line_number":94,"context_line":"            req \u003d requests.delete(self.url, data\u003ddata, headers\u003dheaders)"},{"line_number":95,"context_line":"        else:"},{"line_number":96,"context_line":"            raise exception.VolumeDriverException("},{"line_number":97,"context_line":"                \u0027Unsupported method: %s\u0027 % self.method)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        rsp \u003d req.json()"},{"line_number":100,"context_line":"        req.close()"}],"source_content_type":"text/x-python","patch_set":5,"id":"7aa08908_3f9b0f74","line":97,"updated":"2016-06-10 21:23:57.000000000","message":"Needs _() translation marker.","commit_id":"7aec70c9f67f1863aa4e115e093d948d780e6fda"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d31ae853ecfde4fd298d0b03a828f8552bc3e378","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        if len(args) \u003e 1:"},{"line_number":75,"context_line":"            data \u003d json.dumps(args[1])"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        auth \u003d base64.b64encode("},{"line_number":78,"context_line":"            (\u0027%s:%s\u0027 % (self.user, self.password)).encode(\u0027utf-8\u0027))"},{"line_number":79,"context_line":"        headers \u003d {"},{"line_number":80,"context_line":"            \u0027Content-Type\u0027: \u0027application/json\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_1d048615","line":77,"updated":"2016-06-22 13:49:05.000000000","message":"Requests can actually handle this internally so you don\u0027t need to do the base64 encoding yourself. See my usage here:\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/dell/dell_storagecenter_api.py#L93","commit_id":"f96ef65eb2084733b67d4b3b42e9e6068d6ba129"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"aea4958aeb59741c8e80bd5ec8cf497db3f3277e","unresolved":false,"context_lines":[{"line_number":94,"context_line":"            req \u003d requests.delete(self.url, data\u003ddata, headers\u003dheaders)"},{"line_number":95,"context_line":"        else:"},{"line_number":96,"context_line":"            raise exception.VolumeDriverException("},{"line_number":97,"context_line":"                _(\u0027Unsupported method: %s\u0027) % self.method)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        rsp \u003d req.json()"},{"line_number":100,"context_line":"        req.close()"}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_8e031e73","line":97,"updated":"2016-06-22 14:37:06.000000000","message":"exception.VolumeDriverException(message\u003dxxxx)","commit_id":"f96ef65eb2084733b67d4b3b42e9e6068d6ba129"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1c733f85ce593743d6205f26761c3aa20d3fb109","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        LOG.debug(\u0027Got response: %s\u0027, rsp)"},{"line_number":103,"context_line":"        if rsp.get(\u0027response\u0027) is None:"},{"line_number":104,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":105,"context_line":"                _(\u0027Error response: %s\u0027) % rsp)"},{"line_number":106,"context_line":"        return rsp.get(\u0027response\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_9f4cdc43","line":105,"updated":"2016-06-22 18:00:00.000000000","message":"exception.VolumeBackendAPIException(data\u003dxxxx)","commit_id":"190ef94f80f81b44bed9b88e779221fc69ed11b8"}],"cinder/volume/drivers/nexenta/nexentaedge/nbd.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"262fffd21f987b1122172a8d339d22ab9b2375c7","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        try:"},{"line_number":88,"context_line":"            if not self.symlinks_dir:"},{"line_number":89,"context_line":"                raise exception.NexentaException("},{"line_number":90,"context_line":"                    \"nexenta_nbd_symlinks_dir option is not specified\")"},{"line_number":91,"context_line":"            if not os.path.exists(self.symlinks_dir):"},{"line_number":92,"context_line":"                raise exception.NexentaException("},{"line_number":93,"context_line":"                    \"NexentaEdge NBD symlinks directory doesn\u0027t exist\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"bab6814e_3bb9922f","line":90,"updated":"2016-05-24 17:21:52.000000000","message":"msg \u003d _(\"nexenta_nbd......\")\nraise exception.NexentaException(message\u003dmsg)","commit_id":"4be2d850e8f57b9f5a5586fbfc5f52aa421d3282"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"262fffd21f987b1122172a8d339d22ab9b2375c7","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                    \"nexenta_nbd_symlinks_dir option is not specified\")"},{"line_number":91,"context_line":"            if not os.path.exists(self.symlinks_dir):"},{"line_number":92,"context_line":"                raise exception.NexentaException("},{"line_number":93,"context_line":"                    \"NexentaEdge NBD symlinks directory doesn\u0027t exist\")"},{"line_number":94,"context_line":"            self.restapi.get(self.bucket_url + \u0027/objects/\u0027)"},{"line_number":95,"context_line":"        except exception.VolumeBackendAPIException:"},{"line_number":96,"context_line":"            with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":2,"id":"bab6814e_fb954a88","line":93,"updated":"2016-05-24 17:21:52.000000000","message":"Same as above.","commit_id":"4be2d850e8f57b9f5a5586fbfc5f52aa421d3282"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"262fffd21f987b1122172a8d339d22ab9b2375c7","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                    return servers[sid]"},{"line_number":124,"context_line":"        except exception.VolumeBackendAPIException:"},{"line_number":125,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":126,"context_line":"                LOG.exception(_LE(\u0027Error creating volume\u0027))"},{"line_number":127,"context_line":"        raise exception.VolumeBackendAPIException("},{"line_number":128,"context_line":"            \u0027No %s hostname in NEdge cluster\u0027 % host)"},{"line_number":129,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"bab6814e_fb6c2a38","line":126,"updated":"2016-05-24 17:21:52.000000000","message":"I believe this function is called not only for creating volume?  So this message should be changed.","commit_id":"4be2d850e8f57b9f5a5586fbfc5f52aa421d3282"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"262fffd21f987b1122172a8d339d22ab9b2375c7","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        number \u003d self._get_nbd_number(volume)"},{"line_number":138,"context_line":"        if number \u003d\u003d -1:"},{"line_number":139,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":140,"context_line":"                \u0027No NBD device for volume %s\u0027 % volume[\u0027name\u0027])"},{"line_number":141,"context_line":"        return self._get_symlink_path(number)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def create_volume(self, volume):"}],"source_content_type":"text/x-python","patch_set":2,"id":"bab6814e_7bdcba18","line":140,"updated":"2016-05-24 17:21:52.000000000","message":"msg \u003d _(\"No NBD device ......\")\nraise exception.VolumeBackendAPIException(data\u003dmsg)","commit_id":"4be2d850e8f57b9f5a5586fbfc5f52aa421d3282"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"262fffd21f987b1122172a8d339d22ab9b2375c7","unresolved":false,"context_lines":[{"line_number":305,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":306,"context_line":"                LOG.exception(_LE(\u0027Error retrieving cluster stats\u0027))"},{"line_number":307,"context_line":"        raise exception.VolumeBackendAPIException("},{"line_number":308,"context_line":"            \u0027No %s hostname in NEdge cluster\u0027 % connector[\u0027host\u0027])"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"    def initialize_connection(self, volume, connector, initiator_data\u003dNone):"},{"line_number":311,"context_line":"        LOG.debug(\u0027Initialize connection\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bab6814e_7b031a77","line":308,"updated":"2016-05-24 17:21:52.000000000","message":"Same comment as before.","commit_id":"4be2d850e8f57b9f5a5586fbfc5f52aa421d3282"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"92aff03a798195e3b355786e6f3a63273108288e","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":126,"context_line":"                LOG.exception(_LE(\u0027Error getting host info\u0027))"},{"line_number":127,"context_line":"        raise exception.VolumeBackendAPIException("},{"line_number":128,"context_line":"            \u0027No %s hostname in NEdge cluster\u0027 % host)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def _get_remote_url(self, host):"},{"line_number":131,"context_line":"        return \u0027?remote\u003d\u0027 + str(self._get_host_info(host)[\u0027ipv6addr\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"7aa08908_7f92b74c","line":128,"updated":"2016-06-10 21:23:57.000000000","message":"Needs _()","commit_id":"7aec70c9f67f1863aa4e115e093d948d780e6fda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"2f27fad31f14bfe0e062cdbf3aaf9779faa33315","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        return \u0027?remote\u003d\u0027 + str(self._get_host_info(host)[\u0027ipv6addr\u0027])"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    def _get_symlink_path(self, number):"},{"line_number":134,"context_line":"        return os.path.join(self.symlinks_dir, \u0027nbd\u0027 + str(number))"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def local_path(self, volume):"},{"line_number":137,"context_line":"        number \u003d self._get_nbd_number(volume)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7aa08908_78dd9c41","line":134,"updated":"2016-06-12 05:06:00.000000000","message":"str -\u003e six.text_type","commit_id":"7aec70c9f67f1863aa4e115e093d948d780e6fda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"2f27fad31f14bfe0e062cdbf3aaf9779faa33315","unresolved":false,"context_lines":[{"line_number":172,"context_line":"            })"},{"line_number":173,"context_line":"        except exception.VolumeBackendAPIException:"},{"line_number":174,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":175,"context_line":"                LOG.exception(_LE(\u0027Error deleting volume\u0027))"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    def extend_volume(self, volume, new_size):"},{"line_number":178,"context_line":"        LOG.debug(\u0027Extend volume\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7aa08908_38baf4e1","line":175,"updated":"2016-06-12 05:06:00.000000000","message":"Do you have a way to tell whether the exception is caused by volume not found?  If volume doesn\u0027t exist any more, delete_volume should log an info message and return success.  If the exception is caused by other reasons, raise it.","commit_id":"7aec70c9f67f1863aa4e115e093d948d780e6fda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"2f27fad31f14bfe0e062cdbf3aaf9779faa33315","unresolved":false,"context_lines":[{"line_number":206,"context_line":"            })"},{"line_number":207,"context_line":"        except exception.VolumeBackendAPIException:"},{"line_number":208,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":209,"context_line":"                LOG.exception(_LE(\u0027Error deleting snapshot\u0027))"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":212,"context_line":"        LOG.debug(\u0027Create volume from snapshot\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7aa08908_78b47cf1","line":209,"updated":"2016-06-12 05:06:00.000000000","message":"Same comment as in delete_volume.","commit_id":"7aec70c9f67f1863aa4e115e093d948d780e6fda"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"92aff03a798195e3b355786e6f3a63273108288e","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        host \u003d volutils.extract_host(volume[\u0027host\u0027], \u0027host\u0027)"},{"line_number":214,"context_line":"        remotehost \u003d self._get_remote_url(host)"},{"line_number":215,"context_line":"        try:"},{"line_number":216,"context_line":"            self.restapi.put(\u0027nbd/snapshot/clone\u0027 + remotehost, {"},{"line_number":217,"context_line":"                \u0027objectPath\u0027: self.bucket_path + \u0027/\u0027 + snapshot[\u0027volume_name\u0027],"},{"line_number":218,"context_line":"                \u0027snapName\u0027: snapshot[\u0027name\u0027],"},{"line_number":219,"context_line":"                \u0027clonePath\u0027: self.bucket_path + \u0027/\u0027 + volume[\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"7aa08908_1f40d3a4","line":216,"updated":"2016-06-10 21:23:57.000000000","message":"The volume created from the snapshot could actually be larger than the original snap. I don\u0027t see any handling for that here.","commit_id":"7aec70c9f67f1863aa4e115e093d948d780e6fda"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"92aff03a798195e3b355786e6f3a63273108288e","unresolved":false,"context_lines":[{"line_number":236,"context_line":"            self.restapi.post(vol_url, clone_body)"},{"line_number":237,"context_line":"            self.restapi.post(\u0027nbd\u0027 + self._get_remote_url(host), {"},{"line_number":238,"context_line":"                \u0027objectPath\u0027: self.bucket_path + \u0027/\u0027 + volume[\u0027name\u0027],"},{"line_number":239,"context_line":"                \u0027volSizeMB\u0027: int(src_vref[\u0027size\u0027]) * units.Ki,"},{"line_number":240,"context_line":"                \u0027blockSize\u0027: self.blocksize,"},{"line_number":241,"context_line":"                \u0027chunkSize\u0027: self.chunksize"},{"line_number":242,"context_line":"            })"}],"source_content_type":"text/x-python","patch_set":5,"id":"7aa08908_5f789bf2","line":239,"updated":"2016-06-10 21:23:57.000000000","message":"Same here. The new volume could be larger than the volume it is being cloned from.","commit_id":"7aec70c9f67f1863aa4e115e093d948d780e6fda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"2f27fad31f14bfe0e062cdbf3aaf9779faa33315","unresolved":false,"context_lines":[{"line_number":258,"context_line":"            \u0027vendor_name\u0027: \u0027Nexenta\u0027,"},{"line_number":259,"context_line":"            \u0027driver_version\u0027: self.VERSION,"},{"line_number":260,"context_line":"            \u0027storage_protocol\u0027: \u0027NBD\u0027,"},{"line_number":261,"context_line":"            \u0027reserved_percentage\u0027: 0,"},{"line_number":262,"context_line":"            \u0027total_capacity_gb\u0027: \u0027unknown\u0027,"},{"line_number":263,"context_line":"            \u0027free_capacity_gb\u0027: \u0027unknown\u0027,"},{"line_number":264,"context_line":"            \u0027QoS_support\u0027: False,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7aa08908_98c9687c","line":261,"updated":"2016-06-12 05:06:00.000000000","message":"This should read from the config option in cinder.conf.\n\nreserved_percentage\u003dself.configuration.reserved_percentage,","commit_id":"7aec70c9f67f1863aa4e115e093d948d780e6fda"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"92aff03a798195e3b355786e6f3a63273108288e","unresolved":false,"context_lines":[{"line_number":259,"context_line":"            \u0027driver_version\u0027: self.VERSION,"},{"line_number":260,"context_line":"            \u0027storage_protocol\u0027: \u0027NBD\u0027,"},{"line_number":261,"context_line":"            \u0027reserved_percentage\u0027: 0,"},{"line_number":262,"context_line":"            \u0027total_capacity_gb\u0027: \u0027unknown\u0027,"},{"line_number":263,"context_line":"            \u0027free_capacity_gb\u0027: \u0027unknown\u0027,"},{"line_number":264,"context_line":"            \u0027QoS_support\u0027: False,"},{"line_number":265,"context_line":"            \u0027volume_backend_name\u0027: self.backend_name,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7aa08908_fffd073c","line":262,"updated":"2016-06-10 21:23:57.000000000","message":"Would be better to have some number, even just an optimistic estimate of max capacity, than to return \u0027unknown\u0027.","commit_id":"7aec70c9f67f1863aa4e115e093d948d780e6fda"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"92aff03a798195e3b355786e6f3a63273108288e","unresolved":false,"context_lines":[{"line_number":305,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":306,"context_line":"                LOG.exception(_LE(\u0027Error retrieving cluster stats\u0027))"},{"line_number":307,"context_line":"        raise exception.VolumeBackendAPIException("},{"line_number":308,"context_line":"            \u0027No %s hostname in NEdge cluster\u0027 % connector[\u0027host\u0027])"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"    def initialize_connection(self, volume, connector, initiator_data\u003dNone):"},{"line_number":311,"context_line":"        LOG.debug(\u0027Initialize connection\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7aa08908_9fbcc36d","line":308,"updated":"2016-06-10 21:23:57.000000000","message":"Needs _()","commit_id":"7aec70c9f67f1863aa4e115e093d948d780e6fda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"aea4958aeb59741c8e80bd5ec8cf497db3f3277e","unresolved":false,"context_lines":[{"line_number":137,"context_line":"            _(\u0027No %s hostname in NEdge cluster\u0027) % host)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def _get_remote_url(self, host):"},{"line_number":140,"context_line":"        return \u0027?remote\u003d\u0027 + str(self._get_host_info(host)[\u0027ipv6addr\u0027])"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def _get_symlink_path(self, number):"},{"line_number":143,"context_line":"        return os.path.join(self.symlinks_dir, \u0027nbd\u0027 + six.text_type(number))"}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_b39f6102","line":140,"updated":"2016-06-22 14:37:06.000000000","message":"str() -\u003e six.text_type()","commit_id":"f96ef65eb2084733b67d4b3b42e9e6068d6ba129"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"aea4958aeb59741c8e80bd5ec8cf497db3f3277e","unresolved":false,"context_lines":[{"line_number":251,"context_line":"            \u0027object_name\u0027: volume[\u0027name\u0027]"},{"line_number":252,"context_line":"        }"},{"line_number":253,"context_line":"        host \u003d volutils.extract_host(volume[\u0027host\u0027], \u0027host\u0027)"},{"line_number":254,"context_line":"        size \u003d volume[\u0027size\u0027] if volume[\u0027size\u0027] \u003e src_vref[\u0027size\u0027] \\"},{"line_number":255,"context_line":"            else src_vref[\u0027size\u0027]"},{"line_number":256,"context_line":"        try:"},{"line_number":257,"context_line":"            self.restapi.post(vol_url, clone_body)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_4e8db630","line":254,"updated":"2016-06-22 14:37:06.000000000","message":"Use () instead \\","commit_id":"f96ef65eb2084733b67d4b3b42e9e6068d6ba129"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1c733f85ce593743d6205f26761c3aa20d3fb109","unresolved":false,"context_lines":[{"line_number":134,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":135,"context_line":"                LOG.exception(_LE(\u0027Error getting host info\u0027))"},{"line_number":136,"context_line":"        raise exception.VolumeBackendAPIException("},{"line_number":137,"context_line":"            _(\u0027No %s hostname in NEdge cluster\u0027) % host)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def _get_remote_url(self, host):"},{"line_number":140,"context_line":"        return \u0027?remote\u003d\u0027 + ("}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_7fabf0d6","line":137,"updated":"2016-06-22 18:00:00.000000000","message":"exception.VolumeBackendAPIException(data\u003dxxxx)","commit_id":"190ef94f80f81b44bed9b88e779221fc69ed11b8"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1c733f85ce593743d6205f26761c3aa20d3fb109","unresolved":false,"context_lines":[{"line_number":336,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":337,"context_line":"                LOG.exception(_LE(\u0027Error retrieving cluster stats\u0027))"},{"line_number":338,"context_line":"        raise exception.VolumeBackendAPIException("},{"line_number":339,"context_line":"            _(\u0027No %s hostname in NEdge cluster\u0027) % connector[\u0027host\u0027])"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"    def initialize_connection(self, volume, connector, initiator_data\u003dNone):"},{"line_number":342,"context_line":"        LOG.debug(\u0027Initialize connection\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_7fd93083","line":339,"updated":"2016-06-22 18:00:00.000000000","message":"exception.VolumeBackendAPIException(data\u003dxxxx)","commit_id":"190ef94f80f81b44bed9b88e779221fc69ed11b8"}],"cinder/volume/drivers/nexenta/options.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"92aff03a798195e3b355786e6f3a63273108288e","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":":mod:`nexenta.options` -- Contains configuration options for Nexenta drivers."},{"line_number":17,"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\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\u003d\u003d\u003d"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":".. automodule:: nexenta.options"}],"source_content_type":"text/x-python","patch_set":5,"id":"7aa08908_df448b75","line":16,"updated":"2016-06-10 21:23:57.000000000","message":"Please remove, I don\u0027t believe this is needed.","commit_id":"7aec70c9f67f1863aa4e115e093d948d780e6fda"}]}
