)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"36e16d536d1abb430f2a0c32afae438443bc61d3","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     tpsilva \u003ctiago.pasqualini@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-08-24 09:52:35 -0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix IPv6 for Cinder NetApp ONTAP driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"NetApp ONTAP driver currently have some issues with IPv6:"},{"line_number":10,"context_line":" - The URL is not properly formatted when using in management path"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3f79a3b5_0c4f4f6b","line":7,"range":{"start_line":7,"start_character":33,"end_line":7,"end_character":39},"updated":"2018-08-24 14:05:52.000000000","message":"it is actually multiple drivers, so \"drivers\" should be used","commit_id":"32beca3e1833ca2e9e01fd6f85125bfa106cdeba"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"36e16d536d1abb430f2a0c32afae438443bc61d3","unresolved":false,"context_lines":[{"line_number":9,"context_line":"NetApp ONTAP driver currently have some issues with IPv6:"},{"line_number":10,"context_line":" - The URL is not properly formatted when using in management path"},{"line_number":11,"context_line":" - NFS driver breaks when handling IPv6 addresses"},{"line_number":12,"context_line":" - iSCSI driver creates a URL that is not properly formatted when using IPv6"},{"line_number":13,"context_line":" addresses"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This patch fixes all issues related to IPv6 on NetApp ONTAP drivers."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3f79a3b5_2c524b14","line":13,"range":{"start_line":12,"start_character":71,"end_line":13,"end_character":10},"updated":"2018-08-24 14:05:52.000000000","message":"if you upload another patch, breakline here at 70 columns","commit_id":"32beca3e1833ca2e9e01fd6f85125bfa106cdeba"}],"cinder/tests/unit/volume/drivers/netapp/dataontap/client/test_api.py":[{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"6ca85e28c9d33d169e21c430a3f7152f82db8584","unresolved":false,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":"        self.root.send_http_request(na_element)"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    @ddt.data(\u0027127.0.0.1\u0027, \u0027fe80::72a4:a152:aad9:30d9\u0027)"},{"line_number":241,"context_line":"    def test__get_url(self, host):"},{"line_number":242,"context_line":"        port \u003d \u002780\u0027"},{"line_number":243,"context_line":"        root \u003d netapp_api.NaServer(host, port\u003dport)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_263909d6","line":240,"range":{"start_line":240,"start_character":11,"end_line":240,"end_character":53},"updated":"2018-08-24 13:17:22.000000000","message":"You should play with a few more formats[1] just to strengthen your testing.\n\n[1]  https://tools.ietf.org/html/rfc5952","commit_id":"32beca3e1833ca2e9e01fd6f85125bfa106cdeba"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"cf7fec13161f25b5592f499f5b7679589e7ce099","unresolved":false,"context_lines":[{"line_number":251,"context_line":"        if netutils.is_valid_ipv6(host):"},{"line_number":252,"context_line":"            host \u003d netutils.escape_ipv6(host)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        result \u003d \u0027%s://%s:%s/%s\u0027 % (protocol, host, port, url)"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"        url \u003d root._get_url()"},{"line_number":257,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_a1592736","line":254,"updated":"2018-08-29 13:42:15.000000000","message":"This doesn\u0027t look right -- if given 2001::1 as \"host\", this will result in\n    protocol://2001::1:80/url\nwhich is not valid, it should be\n    protocol://[2001::1]:80/url","commit_id":"925376527e356ed14320716d0f72b48b13b8aecb"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"8b061f340313a269fa063fe332a16c0f442b3733","unresolved":false,"context_lines":[{"line_number":251,"context_line":"        if netutils.is_valid_ipv6(host):"},{"line_number":252,"context_line":"            host \u003d netutils.escape_ipv6(host)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        result \u003d \u0027%s://%s:%s/%s\u0027 % (protocol, host, port, url)"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"        url \u003d root._get_url()"},{"line_number":257,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_a1a7e70b","line":254,"in_reply_to":"3f79a3b5_a1592736","updated":"2018-08-29 13:44:18.000000000","message":"escape_ipv6 above does this -- just missed that part","commit_id":"925376527e356ed14320716d0f72b48b13b8aecb"}],"cinder/volume/drivers/netapp/dataontap/client/api.py":[{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"6ca85e28c9d33d169e21c430a3f7152f82db8584","unresolved":false,"context_lines":[{"line_number":282,"context_line":""},{"line_number":283,"context_line":"    def _get_url(self):"},{"line_number":284,"context_line":"        host \u003d self._host"},{"line_number":285,"context_line":"        if \u0027:\u0027 in host:"},{"line_number":286,"context_line":"            host \u003d \u0027[%s]\u0027 % host"},{"line_number":287,"context_line":"        return \u0027%s://%s:%s/%s\u0027 % (self._protocol, host, self._port,"},{"line_number":288,"context_line":"                                  self._url)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_cbef00af","line":285,"range":{"start_line":285,"start_character":8,"end_line":285,"end_character":23},"updated":"2018-08-24 13:17:22.000000000","message":"from oslo_utils import netutils\nnetutils.is_valid_ipv6(host)","commit_id":"32beca3e1833ca2e9e01fd6f85125bfa106cdeba"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"6ca85e28c9d33d169e21c430a3f7152f82db8584","unresolved":false,"context_lines":[{"line_number":283,"context_line":"    def _get_url(self):"},{"line_number":284,"context_line":"        host \u003d self._host"},{"line_number":285,"context_line":"        if \u0027:\u0027 in host:"},{"line_number":286,"context_line":"            host \u003d \u0027[%s]\u0027 % host"},{"line_number":287,"context_line":"        return \u0027%s://%s:%s/%s\u0027 % (self._protocol, host, self._port,"},{"line_number":288,"context_line":"                                  self._url)"},{"line_number":289,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_cb4b80ae","line":286,"range":{"start_line":286,"start_character":12,"end_line":286,"end_character":16},"updated":"2018-08-24 13:17:22.000000000","message":"host \u003d netutils.escape_ipv6(host)","commit_id":"32beca3e1833ca2e9e01fd6f85125bfa106cdeba"}],"cinder/volume/drivers/netapp/dataontap/nfs_base.py":[{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"6ca85e28c9d33d169e21c430a3f7152f82db8584","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        nfs_server_ip, export_path \u003d na_utils.get_export_host_junction_path("},{"line_number":284,"context_line":"            provider_location)"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"        if \u0027:\u0027 in nfs_server_ip:"},{"line_number":287,"context_line":"            nfs_server_ip \u003d \u0027[%s]\u0027 % nfs_server_ip"},{"line_number":288,"context_line":"        return nfs_server_ip + \u0027:\u0027 + export_path"},{"line_number":289,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_ab7e44e1","line":286,"range":{"start_line":286,"start_character":8,"end_line":286,"end_character":32},"updated":"2018-08-24 13:17:22.000000000","message":"same: netutils.is_valid_ipv6()","commit_id":"32beca3e1833ca2e9e01fd6f85125bfa106cdeba"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"36e16d536d1abb430f2a0c32afae438443bc61d3","unresolved":false,"context_lines":[{"line_number":745,"context_line":"                ip \u003d na_utils.resolve_hostname(host)"},{"line_number":746,"context_line":"                share_candidates \u003d []"},{"line_number":747,"context_line":"                for sh in self._mounted_shares:"},{"line_number":748,"context_line":"                    sh_exp \u003d sh.rsplit(\u0027:\u0027, 1)[1]"},{"line_number":749,"context_line":"                    if sh_exp \u003d\u003d dir:"},{"line_number":750,"context_line":"                        share_candidates.append(sh)"},{"line_number":751,"context_line":"                if share_candidates:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_06dbadec","line":748,"range":{"start_line":748,"start_character":29,"end_line":748,"end_character":49},"updated":"2018-08-24 14:05:52.000000000","message":"split(\u0027:\u0027)[-1] is more readable and easier to understand, I suggest changing to it.","commit_id":"32beca3e1833ca2e9e01fd6f85125bfa106cdeba"}],"cinder/volume/drivers/netapp/dataontap/nfs_cmode.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"55c9ad15030cb45336d3cc79b3e5f3a50e3c0e1a","unresolved":false,"context_lines":[{"line_number":187,"context_line":"            return"},{"line_number":188,"context_line":"        target_path \u003d \u0027%s\u0027 % (volume[\u0027name\u0027])"},{"line_number":189,"context_line":"        share \u003d volume_utils.extract_host(volume[\u0027host\u0027], level\u003d\u0027pool\u0027)"},{"line_number":190,"context_line":"        _, export_path \u003d na_utils.get_export_host_junction_path(share)"},{"line_number":191,"context_line":"        flex_vol_name \u003d self.zapi_client.get_vol_by_junc_vserver(self.vserver,"},{"line_number":192,"context_line":"                                                                 export_path)"},{"line_number":193,"context_line":"        self.zapi_client.file_assign_qos(flex_vol_name,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_018a8962","line":190,"range":{"start_line":190,"start_character":8,"end_line":190,"end_character":9},"updated":"2018-08-27 19:36:00.000000000","message":"This is normally good practice, but since we have the _() i18n call this hides that and could cause problems. Probably best to change it to __ (two underscores) instead.","commit_id":"ae964de1b5dcd3c70f81a534507eb7a30e173c88"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"2d9b0ba513609e3b0b287b7595e780f3bc7b260a","unresolved":false,"context_lines":[{"line_number":187,"context_line":"            return"},{"line_number":188,"context_line":"        target_path \u003d \u0027%s\u0027 % (volume[\u0027name\u0027])"},{"line_number":189,"context_line":"        share \u003d volume_utils.extract_host(volume[\u0027host\u0027], level\u003d\u0027pool\u0027)"},{"line_number":190,"context_line":"        _, export_path \u003d na_utils.get_export_host_junction_path(share)"},{"line_number":191,"context_line":"        flex_vol_name \u003d self.zapi_client.get_vol_by_junc_vserver(self.vserver,"},{"line_number":192,"context_line":"                                                                 export_path)"},{"line_number":193,"context_line":"        self.zapi_client.file_assign_qos(flex_vol_name,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_e1742d38","line":190,"range":{"start_line":190,"start_character":8,"end_line":190,"end_character":9},"in_reply_to":"3f79a3b5_018a8962","updated":"2018-08-27 19:50:05.000000000","message":"Oh, good catch, thanks!","commit_id":"ae964de1b5dcd3c70f81a534507eb7a30e173c88"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"55c9ad15030cb45336d3cc79b3e5f3a50e3c0e1a","unresolved":false,"context_lines":[{"line_number":364,"context_line":"        ip_vserver \u003d self._get_vserver_for_ip(ip)"},{"line_number":365,"context_line":"        if ip_vserver and shares:"},{"line_number":366,"context_line":"            for share in shares:"},{"line_number":367,"context_line":"                ip_sh, _ \u003d na_utils.get_export_host_junction_path(share)"},{"line_number":368,"context_line":"                sh_vserver \u003d self._get_vserver_for_ip(ip_sh)"},{"line_number":369,"context_line":"                if sh_vserver \u003d\u003d ip_vserver:"},{"line_number":370,"context_line":"                    LOG.debug(\u0027Share match found for ip %s\u0027, ip)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_c1ed7125","line":367,"range":{"start_line":367,"start_character":23,"end_line":367,"end_character":24},"updated":"2018-08-27 19:36:00.000000000","message":"Same.","commit_id":"ae964de1b5dcd3c70f81a534507eb7a30e173c88"}],"cinder/volume/drivers/netapp/utils.py":[{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"6ca85e28c9d33d169e21c430a3f7152f82db8584","unresolved":false,"context_lines":[{"line_number":175,"context_line":"def get_iscsi_connection_properties(lun_id, volume, iqn,"},{"line_number":176,"context_line":"                                    address, port):"},{"line_number":177,"context_line":"    # literal ipv6 address"},{"line_number":178,"context_line":"    if \u0027:\u0027 in address:"},{"line_number":179,"context_line":"        address \u003d \u0027[%s]\u0027 % address"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    properties \u003d {}"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_8b62683d","line":178,"range":{"start_line":178,"start_character":4,"end_line":178,"end_character":22},"updated":"2018-08-24 13:17:22.000000000","message":"same","commit_id":"32beca3e1833ca2e9e01fd6f85125bfa106cdeba"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"6ca85e28c9d33d169e21c430a3f7152f82db8584","unresolved":false,"context_lines":[{"line_number":367,"context_line":"def get_export_host_junction_path(share):"},{"line_number":368,"context_line":"    if \u0027[\u0027 in share and \u0027]\u0027 in share:"},{"line_number":369,"context_line":"        try:"},{"line_number":370,"context_line":"            # ipv6"},{"line_number":371,"context_line":"            host \u003d re.search(\u0027\\[(.*)\\]\u0027, share).group(1)"},{"line_number":372,"context_line":"            junction_path \u003d share.rsplit(\u0027:\u0027, 1)[1]"},{"line_number":373,"context_line":"        except AttributeError:"},{"line_number":374,"context_line":"            raise exception.NetAppDriverException(_(\"Share \u0027%s\u0027 is \""},{"line_number":375,"context_line":"                                                    \"not in a valid \""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_abf5e458","line":372,"range":{"start_line":370,"start_character":0,"end_line":372,"end_character":51},"updated":"2018-08-24 13:17:22.000000000","message":"Here you can split first and then check with netutils.is_valid_ipv6()","commit_id":"32beca3e1833ca2e9e01fd6f85125bfa106cdeba"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"36e16d536d1abb430f2a0c32afae438443bc61d3","unresolved":false,"context_lines":[{"line_number":369,"context_line":"        try:"},{"line_number":370,"context_line":"            # ipv6"},{"line_number":371,"context_line":"            host \u003d re.search(\u0027\\[(.*)\\]\u0027, share).group(1)"},{"line_number":372,"context_line":"            junction_path \u003d share.rsplit(\u0027:\u0027, 1)[1]"},{"line_number":373,"context_line":"        except AttributeError:"},{"line_number":374,"context_line":"            raise exception.NetAppDriverException(_(\"Share \u0027%s\u0027 is \""},{"line_number":375,"context_line":"                                                    \"not in a valid \""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_e61a31c4","line":372,"range":{"start_line":372,"start_character":34,"end_line":372,"end_character":51},"updated":"2018-08-24 14:05:52.000000000","message":"split(\u0027:\u0027)[-1] is easier to read and understand. I suggest changing to that if you happen to upload another patch.","commit_id":"32beca3e1833ca2e9e01fd6f85125bfa106cdeba"}],"releasenotes/notes/bugfix-netapp-driver-cinder-ipv6-c3c4d0d6a7d0de91.yaml":[{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"36e16d536d1abb430f2a0c32afae438443bc61d3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - NetApp ONTAP: Fixed support for IPv6 on management and data paths"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"3f79a3b5_6c2e038d","line":3,"updated":"2018-08-24 14:05:52.000000000","message":"I believe you should mention which drivers you are fixing. NFS, iSCSI and FCP.","commit_id":"32beca3e1833ca2e9e01fd6f85125bfa106cdeba"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"8365c9a882148b8c80a283ffe9c9f8d57a9442b0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - Fixed support for IPv6 on management and data paths for NFS, iSCSI"},{"line_number":4,"context_line":"    and FCP on NetApp ONTAP drivers."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3f79a3b5_1d01ac6a","line":4,"range":{"start_line":4,"start_character":12,"end_line":4,"end_character":14},"updated":"2018-08-24 22:59:13.000000000","message":"no need this \"on\", but that\u0027s ok if you don\u0027t have to upload another patch","commit_id":"ae964de1b5dcd3c70f81a534507eb7a30e173c88"}]}
