Upgrade csi-lib-utils to 0.8.1
This commit is contained in:
4
go.mod
4
go.mod
@@ -8,14 +8,14 @@ require (
|
|||||||
github.com/golang/protobuf v1.4.2
|
github.com/golang/protobuf v1.4.2
|
||||||
github.com/google/gofuzz v1.1.0
|
github.com/google/gofuzz v1.1.0
|
||||||
github.com/imdario/mergo v0.3.9 // indirect
|
github.com/imdario/mergo v0.3.9 // indirect
|
||||||
github.com/kubernetes-csi/csi-lib-utils v0.7.0
|
github.com/kubernetes-csi/csi-lib-utils v0.8.1
|
||||||
github.com/kubernetes-csi/csi-test v2.0.0+incompatible
|
github.com/kubernetes-csi/csi-test v2.0.0+incompatible
|
||||||
github.com/kubernetes-csi/external-snapshotter/client/v3 v3.0.0
|
github.com/kubernetes-csi/external-snapshotter/client/v3 v3.0.0
|
||||||
github.com/prometheus/client_golang v1.7.1
|
github.com/prometheus/client_golang v1.7.1
|
||||||
github.com/prometheus/client_model v0.2.0
|
github.com/prometheus/client_model v0.2.0
|
||||||
github.com/prometheus/common v0.10.0
|
github.com/prometheus/common v0.10.0
|
||||||
github.com/spf13/cobra v1.0.0
|
github.com/spf13/cobra v1.0.0
|
||||||
google.golang.org/grpc v1.28.0
|
google.golang.org/grpc v1.29.0
|
||||||
k8s.io/api v0.19.0
|
k8s.io/api v0.19.0
|
||||||
k8s.io/apimachinery v0.19.0
|
k8s.io/apimachinery v0.19.0
|
||||||
k8s.io/client-go v0.19.0
|
k8s.io/client-go v0.19.0
|
||||||
|
16
go.sum
16
go.sum
@@ -88,7 +88,6 @@ github.com/clusterhq/flocker-go v0.0.0-20160920122132-2b8b7259d313/go.mod h1:P1w
|
|||||||
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
||||||
github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
|
github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
|
||||||
github.com/codegangsta/negroni v1.0.0/go.mod h1:v0y3T5G7Y1UlFfyxFn/QLRU4a2EuNau2iZY63YTKWo0=
|
github.com/codegangsta/negroni v1.0.0/go.mod h1:v0y3T5G7Y1UlFfyxFn/QLRU4a2EuNau2iZY63YTKWo0=
|
||||||
github.com/container-storage-interface/spec v1.1.0/go.mod h1:6URME8mwIBbpVyZV93Ce5St17xBiQJQY67NDsuohiy4=
|
|
||||||
github.com/container-storage-interface/spec v1.2.0 h1:bD9KIVgaVKKkQ/UbVUY9kCaH/CJbhNxe0eeB4JeJV2s=
|
github.com/container-storage-interface/spec v1.2.0 h1:bD9KIVgaVKKkQ/UbVUY9kCaH/CJbhNxe0eeB4JeJV2s=
|
||||||
github.com/container-storage-interface/spec v1.2.0/go.mod h1:6URME8mwIBbpVyZV93Ce5St17xBiQJQY67NDsuohiy4=
|
github.com/container-storage-interface/spec v1.2.0/go.mod h1:6URME8mwIBbpVyZV93Ce5St17xBiQJQY67NDsuohiy4=
|
||||||
github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM=
|
github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM=
|
||||||
@@ -146,7 +145,6 @@ github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.m
|
|||||||
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
|
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
|
||||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||||
github.com/euank/go-kmsg-parser v2.0.0+incompatible/go.mod h1:MhmAMZ8V4CYH4ybgdRwPr2TU5ThnS43puaKEMpja1uw=
|
github.com/euank/go-kmsg-parser v2.0.0+incompatible/go.mod h1:MhmAMZ8V4CYH4ybgdRwPr2TU5ThnS43puaKEMpja1uw=
|
||||||
github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
|
||||||
github.com/evanphx/json-patch v4.9.0+incompatible h1:kLcOMZeuLAJvL2BPWLMIj5oaZQobrkAqrL+WFZwQses=
|
github.com/evanphx/json-patch v4.9.0+incompatible h1:kLcOMZeuLAJvL2BPWLMIj5oaZQobrkAqrL+WFZwQses=
|
||||||
github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
||||||
github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4=
|
github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4=
|
||||||
@@ -271,7 +269,6 @@ github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
|
|||||||
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
|
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
|
||||||
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
|
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
|
||||||
github.com/googleapis/gnostic v0.2.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
|
|
||||||
github.com/googleapis/gnostic v0.4.1 h1:DLJCy1n/vrD4HPjOvYcT8aYQXpPIzoRZONaYwyycI+I=
|
github.com/googleapis/gnostic v0.4.1 h1:DLJCy1n/vrD4HPjOvYcT8aYQXpPIzoRZONaYwyycI+I=
|
||||||
github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg=
|
github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg=
|
||||||
github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8=
|
github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8=
|
||||||
@@ -332,8 +329,8 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
|||||||
github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA=
|
github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA=
|
||||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
||||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||||
github.com/kubernetes-csi/csi-lib-utils v0.7.0 h1:t1cS7HTD7z5D7h9iAdjWuHtMxJPb9s1fIv34rxytzqs=
|
github.com/kubernetes-csi/csi-lib-utils v0.8.1 h1:DHFs4MgzjSGF/FH95TEdLVa7R1CCi9UJ76jTUPO8iF0=
|
||||||
github.com/kubernetes-csi/csi-lib-utils v0.7.0/go.mod h1:bze+2G9+cmoHxN6+WyG1qT4MDxgZJMLGwc7V4acPNm0=
|
github.com/kubernetes-csi/csi-lib-utils v0.8.1/go.mod h1:FZflf0cCYlCquPQxVHa6Tyy0i/so6VAZTiEVK1do7CU=
|
||||||
github.com/kubernetes-csi/csi-test v2.0.0+incompatible h1:ia04uVFUM/J9n/v3LEMn3rEG6FmKV5BH9QLw7H68h44=
|
github.com/kubernetes-csi/csi-test v2.0.0+incompatible h1:ia04uVFUM/J9n/v3LEMn3rEG6FmKV5BH9QLw7H68h44=
|
||||||
github.com/kubernetes-csi/csi-test v2.0.0+incompatible/go.mod h1:YxJ4UiuPWIhMBkxUKY5c267DyA0uDZ/MtAimhx/2TA0=
|
github.com/kubernetes-csi/csi-test v2.0.0+incompatible/go.mod h1:YxJ4UiuPWIhMBkxUKY5c267DyA0uDZ/MtAimhx/2TA0=
|
||||||
github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k=
|
github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k=
|
||||||
@@ -393,7 +390,6 @@ github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:v
|
|||||||
github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||||
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||||
github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||||
github.com/onsi/ginkgo v1.10.2/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
|
||||||
github.com/onsi/ginkgo v1.11.0 h1:JAKSXpt1YjtLA7YpPiqO9ss6sNXEsPfSGdwN0UHqzrw=
|
github.com/onsi/ginkgo v1.11.0 h1:JAKSXpt1YjtLA7YpPiqO9ss6sNXEsPfSGdwN0UHqzrw=
|
||||||
github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||||
github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
|
github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
|
||||||
@@ -485,6 +481,8 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf
|
|||||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
|
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
|
||||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||||
|
github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=
|
||||||
|
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
|
||||||
github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
|
github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
|
||||||
github.com/thecodeteam/goscaleio v0.1.0/go.mod h1:68sdkZAsK8bvEwBlbQnlLS+xU+hvLYM/iQ8KXej1AwM=
|
github.com/thecodeteam/goscaleio v0.1.0/go.mod h1:68sdkZAsK8bvEwBlbQnlLS+xU+hvLYM/iQ8KXej1AwM=
|
||||||
github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
|
github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
|
||||||
@@ -624,7 +622,6 @@ golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||||||
golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20191220220014-0732a990476f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
@@ -710,7 +707,6 @@ google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRn
|
|||||||
google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
|
google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
|
||||||
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
|
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
|
||||||
google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
|
google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
|
||||||
google.golang.org/genproto v0.0.0-20191220175831-5c49e3ecc1c1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
|
|
||||||
google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
|
google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
|
||||||
google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
|
google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
|
||||||
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY=
|
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY=
|
||||||
@@ -724,8 +720,8 @@ google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyac
|
|||||||
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
|
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
|
||||||
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
||||||
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
||||||
google.golang.org/grpc v1.28.0 h1:bO/TA4OxCOummhSf10siHuG7vJOiwh7SpRpFZDkOgl4=
|
google.golang.org/grpc v1.29.0 h1:2pJjwYOdkZ9HlN4sWRYBg9ttH5bCOlsueaM+b/oYjwo=
|
||||||
google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
|
google.golang.org/grpc v1.29.0/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
|
||||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||||
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
||||||
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
||||||
|
25
vendor/github.com/kubernetes-csi/csi-lib-utils/connection/connection.go
generated
vendored
25
vendor/github.com/kubernetes-csi/csi-lib-utils/connection/connection.go
generated
vendored
@@ -109,7 +109,7 @@ func connect(
|
|||||||
grpc.WithBlock(), // Block until connection succeeds.
|
grpc.WithBlock(), // Block until connection succeeds.
|
||||||
grpc.WithChainUnaryInterceptor(
|
grpc.WithChainUnaryInterceptor(
|
||||||
LogGRPC, // Log all messages.
|
LogGRPC, // Log all messages.
|
||||||
extendedCSIMetricsManager{metricsManager}.recordMetricsInterceptor, // Record metrics for each gRPC call.
|
ExtendedCSIMetricsManager{metricsManager}.RecordMetricsClientInterceptor, // Record metrics for each gRPC call.
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
unixPrefix := "unix://"
|
unixPrefix := "unix://"
|
||||||
@@ -140,7 +140,7 @@ func connect(
|
|||||||
}
|
}
|
||||||
conn, err := net.DialTimeout("unix", address[len(unixPrefix):], timeout)
|
conn, err := net.DialTimeout("unix", address[len(unixPrefix):], timeout)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
// Connection restablished.
|
// Connection reestablished.
|
||||||
haveConnected = true
|
haveConnected = true
|
||||||
lostConnection = false
|
lostConnection = false
|
||||||
}
|
}
|
||||||
@@ -187,12 +187,13 @@ func LogGRPC(ctx context.Context, method string, req, reply interface{}, cc *grp
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
type extendedCSIMetricsManager struct {
|
type ExtendedCSIMetricsManager struct {
|
||||||
metrics.CSIMetricsManager
|
metrics.CSIMetricsManager
|
||||||
}
|
}
|
||||||
|
|
||||||
// recordMetricsInterceptor is a gPRC unary interceptor for recording metrics for CSI operations.
|
// RecordMetricsClientInterceptor is a gPRC unary interceptor for recording metrics for CSI operations
|
||||||
func (cmm extendedCSIMetricsManager) recordMetricsInterceptor(
|
// in a gRPC client.
|
||||||
|
func (cmm ExtendedCSIMetricsManager) RecordMetricsClientInterceptor(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
method string,
|
method string,
|
||||||
req, reply interface{},
|
req, reply interface{},
|
||||||
@@ -209,3 +210,17 @@ func (cmm extendedCSIMetricsManager) recordMetricsInterceptor(
|
|||||||
)
|
)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RecordMetricsServerInterceptor is a gPRC unary interceptor for recording metrics for CSI operations
|
||||||
|
// in a gRCP server.
|
||||||
|
func (cmm ExtendedCSIMetricsManager) RecordMetricsServerInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
|
||||||
|
start := time.Now()
|
||||||
|
resp, err := handler(ctx, req)
|
||||||
|
duration := time.Since(start)
|
||||||
|
cmm.RecordMetrics(
|
||||||
|
info.FullMethod, /* operationName */
|
||||||
|
err, /* operationErr */
|
||||||
|
duration, /* operationDuration */
|
||||||
|
)
|
||||||
|
return resp, err
|
||||||
|
}
|
||||||
|
13
vendor/github.com/kubernetes-csi/csi-lib-utils/leaderelection/leader_election.go
generated
vendored
13
vendor/github.com/kubernetes-csi/csi-lib-utils/leaderelection/leader_election.go
generated
vendored
@@ -60,6 +60,8 @@ type leaderElection struct {
|
|||||||
renewDeadline time.Duration
|
renewDeadline time.Duration
|
||||||
retryPeriod time.Duration
|
retryPeriod time.Duration
|
||||||
|
|
||||||
|
ctx context.Context
|
||||||
|
|
||||||
clientset kubernetes.Interface
|
clientset kubernetes.Interface
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -127,6 +129,11 @@ func (l *leaderElection) WithRetryPeriod(retryPeriod time.Duration) {
|
|||||||
l.retryPeriod = retryPeriod
|
l.retryPeriod = retryPeriod
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WithContext Add context
|
||||||
|
func (l *leaderElection) WithContext(ctx context.Context) {
|
||||||
|
l.ctx = ctx
|
||||||
|
}
|
||||||
|
|
||||||
func (l *leaderElection) Run() error {
|
func (l *leaderElection) Run() error {
|
||||||
if l.identity == "" {
|
if l.identity == "" {
|
||||||
id, err := defaultLeaderElectionIdentity()
|
id, err := defaultLeaderElectionIdentity()
|
||||||
@@ -174,7 +181,11 @@ func (l *leaderElection) Run() error {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
leaderelection.RunOrDie(context.TODO(), leaderConfig)
|
ctx := l.ctx
|
||||||
|
if ctx == nil {
|
||||||
|
ctx = context.Background()
|
||||||
|
}
|
||||||
|
leaderelection.RunOrDie(ctx, leaderConfig)
|
||||||
return nil // should never reach here
|
return nil // should never reach here
|
||||||
}
|
}
|
||||||
|
|
||||||
|
243
vendor/github.com/kubernetes-csi/csi-lib-utils/metrics/metrics.go
generated
vendored
243
vendor/github.com/kubernetes-csi/csi-lib-utils/metrics/metrics.go
generated
vendored
@@ -20,6 +20,7 @@ import (
|
|||||||
"bufio"
|
"bufio"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -30,8 +31,18 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
// SubsystemSidecar is the default subsystem name in a metrics
|
||||||
|
// (= the prefix in the final metrics name). It is to be used
|
||||||
|
// by CSI sidecars. Using the same subsystem in different CSI
|
||||||
|
// drivers makes it possible to reuse dashboards because
|
||||||
|
// the metrics names will be identical. Data from different
|
||||||
|
// drivers can be selected via the "driver_name" tag.
|
||||||
|
SubsystemSidecar = "csi_sidecar"
|
||||||
|
// SubsystemPlugin is what CSI driver's should use as
|
||||||
|
// subsystem name.
|
||||||
|
SubsystemPlugin = "csi_plugin"
|
||||||
|
|
||||||
// Common metric strings
|
// Common metric strings
|
||||||
subsystem = "csi_sidecar"
|
|
||||||
labelCSIDriverName = "driver_name"
|
labelCSIDriverName = "driver_name"
|
||||||
labelCSIOperationName = "method_name"
|
labelCSIOperationName = "method_name"
|
||||||
labelGrpcStatusCode = "grpc_status_code"
|
labelGrpcStatusCode = "grpc_status_code"
|
||||||
@@ -56,11 +67,23 @@ type CSIMetricsManager interface {
|
|||||||
// operationName - Name of the CSI operation.
|
// operationName - Name of the CSI operation.
|
||||||
// operationErr - Error, if any, that resulted from execution of operation.
|
// operationErr - Error, if any, that resulted from execution of operation.
|
||||||
// operationDuration - time it took for the operation to complete
|
// operationDuration - time it took for the operation to complete
|
||||||
|
//
|
||||||
|
// If WithLabelNames was used to define additional labels when constructing
|
||||||
|
// the manager, then WithLabelValues should be used to create a wrapper which
|
||||||
|
// holds the corresponding values before calling RecordMetrics of the wrapper.
|
||||||
|
// Labels with missing values are recorded as empty.
|
||||||
RecordMetrics(
|
RecordMetrics(
|
||||||
operationName string,
|
operationName string,
|
||||||
operationErr error,
|
operationErr error,
|
||||||
operationDuration time.Duration)
|
operationDuration time.Duration)
|
||||||
|
|
||||||
|
// WithLabelValues must be used to add the additional label
|
||||||
|
// values defined via WithLabelNames. When calling RecordMetrics
|
||||||
|
// without it or with too few values, the missing values are
|
||||||
|
// recorded as empty. WithLabelValues can be called multiple times
|
||||||
|
// and then accumulates values.
|
||||||
|
WithLabelValues(labels map[string]string) (CSIMetricsManager, error)
|
||||||
|
|
||||||
// SetDriverName is called to update the CSI driver name. This should be done
|
// SetDriverName is called to update the CSI driver name. This should be done
|
||||||
// as soon as possible, otherwise metrics recorded by this manager will be
|
// as soon as possible, otherwise metrics recorded by this manager will be
|
||||||
// recorded with an "unknown-driver" driver_name.
|
// recorded with an "unknown-driver" driver_name.
|
||||||
@@ -73,25 +96,114 @@ type CSIMetricsManager interface {
|
|||||||
StartMetricsEndpoint(metricsAddress, metricsPath string)
|
StartMetricsEndpoint(metricsAddress, metricsPath string)
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewCSIMetricsManager creates and registers metrics for for CSI Sidecars and
|
// MetricsManagerOption is used to pass optional configuration to a
|
||||||
// returns an object that can be used to trigger the metrics.
|
// new metrics manager.
|
||||||
|
type MetricsManagerOption func(*csiMetricsManager)
|
||||||
|
|
||||||
|
// WithSubsystem overrides the default subsystem name.
|
||||||
|
func WithSubsystem(subsystem string) MetricsManagerOption {
|
||||||
|
return func(cmm *csiMetricsManager) {
|
||||||
|
cmm.subsystem = subsystem
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithStabilityLevel overrides the default stability level. The recommended
|
||||||
|
// usage is to keep metrics at a lower level when csi-lib-utils switches
|
||||||
|
// to beta or GA. Overriding the alpha default with beta or GA is risky
|
||||||
|
// because the metrics can still change in the library.
|
||||||
|
func WithStabilityLevel(stabilityLevel metrics.StabilityLevel) MetricsManagerOption {
|
||||||
|
return func(cmm *csiMetricsManager) {
|
||||||
|
cmm.stabilityLevel = stabilityLevel
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithLabelNames defines labels for each sample that get added to the
|
||||||
|
// default labels (driver, method call, and gRPC result). This makes
|
||||||
|
// it possible to partition the histograms along additional
|
||||||
|
// dimensions.
|
||||||
|
//
|
||||||
|
// To record a metrics with additional values, use
|
||||||
|
// CSIMetricManager.WithLabelValues().RecordMetrics().
|
||||||
|
func WithLabelNames(labelNames ...string) MetricsManagerOption {
|
||||||
|
return func(cmm *csiMetricsManager) {
|
||||||
|
cmm.additionalLabelNames = labelNames
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithLabels defines some label name and value pairs that are added to all
|
||||||
|
// samples. They get recorded sorted by name.
|
||||||
|
func WithLabels(labels map[string]string) MetricsManagerOption {
|
||||||
|
return func(cmm *csiMetricsManager) {
|
||||||
|
var l []label
|
||||||
|
for name, value := range labels {
|
||||||
|
l = append(l, label{name, value})
|
||||||
|
}
|
||||||
|
sort.Slice(l, func(i, j int) bool {
|
||||||
|
return l[i].name < l[j].name
|
||||||
|
})
|
||||||
|
cmm.additionalLabels = l
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewCSIMetricsManagerForSidecar creates and registers metrics for CSI Sidecars and
|
||||||
|
// returns an object that can be used to trigger the metrics. It uses "csi_sidecar"
|
||||||
|
// as subsystem.
|
||||||
|
//
|
||||||
// driverName - Name of the CSI driver against which this operation was executed.
|
// driverName - Name of the CSI driver against which this operation was executed.
|
||||||
// If unknown, leave empty, and use SetDriverName method to update later.
|
// If unknown, leave empty, and use SetDriverName method to update later.
|
||||||
func NewCSIMetricsManager(driverName string) CSIMetricsManager {
|
func NewCSIMetricsManagerForSidecar(driverName string) CSIMetricsManager {
|
||||||
|
return NewCSIMetricsManagerWithOptions(driverName)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewCSIMetricsManager is provided for backwards-compatibility.
|
||||||
|
var NewCSIMetricsManager = NewCSIMetricsManagerForSidecar
|
||||||
|
|
||||||
|
// NewCSIMetricsManagerForPlugin creates and registers metrics for CSI drivers and
|
||||||
|
// returns an object that can be used to trigger the metrics. It uses "csi_plugin"
|
||||||
|
// as subsystem.
|
||||||
|
//
|
||||||
|
// driverName - Name of the CSI driver against which this operation was executed.
|
||||||
|
// If unknown, leave empty, and use SetDriverName method to update later.
|
||||||
|
func NewCSIMetricsManagerForPlugin(driverName string) CSIMetricsManager {
|
||||||
|
return NewCSIMetricsManagerWithOptions(driverName,
|
||||||
|
WithSubsystem(SubsystemPlugin),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewCSIMetricsManagerWithOptions is a customizable constructor, to be used only
|
||||||
|
// if there are special needs like changing the default subsystems.
|
||||||
|
//
|
||||||
|
// driverName - Name of the CSI driver against which this operation was executed.
|
||||||
|
// If unknown, leave empty, and use SetDriverName method to update later.
|
||||||
|
func NewCSIMetricsManagerWithOptions(driverName string, options ...MetricsManagerOption) CSIMetricsManager {
|
||||||
cmm := csiMetricsManager{
|
cmm := csiMetricsManager{
|
||||||
registry: metrics.NewKubeRegistry(),
|
registry: metrics.NewKubeRegistry(),
|
||||||
csiOperationsLatencyMetric: metrics.NewHistogramVec(
|
subsystem: SubsystemSidecar,
|
||||||
&metrics.HistogramOpts{
|
stabilityLevel: metrics.ALPHA,
|
||||||
Subsystem: subsystem,
|
|
||||||
Name: operationsLatencyMetricName,
|
|
||||||
Help: operationsLatencyHelp,
|
|
||||||
Buckets: operationsLatencyBuckets,
|
|
||||||
StabilityLevel: metrics.ALPHA,
|
|
||||||
},
|
|
||||||
[]string{labelCSIDriverName, labelCSIOperationName, labelGrpcStatusCode},
|
|
||||||
),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// https://github.com/open-telemetry/opentelemetry-collector/issues/969
|
||||||
|
// Add process_start_time_seconds into the metric to let the start time be parsed correctly
|
||||||
|
metrics.RegisterProcessStartTime(cmm.registry.Register)
|
||||||
|
|
||||||
|
for _, option := range options {
|
||||||
|
option(&cmm)
|
||||||
|
}
|
||||||
|
labels := []string{labelCSIDriverName, labelCSIOperationName, labelGrpcStatusCode}
|
||||||
|
labels = append(labels, cmm.additionalLabelNames...)
|
||||||
|
for _, label := range cmm.additionalLabels {
|
||||||
|
labels = append(labels, label.name)
|
||||||
|
}
|
||||||
|
cmm.csiOperationsLatencyMetric = metrics.NewHistogramVec(
|
||||||
|
&metrics.HistogramOpts{
|
||||||
|
Subsystem: cmm.subsystem,
|
||||||
|
Name: operationsLatencyMetricName,
|
||||||
|
Help: operationsLatencyHelp,
|
||||||
|
Buckets: operationsLatencyBuckets,
|
||||||
|
StabilityLevel: cmm.stabilityLevel,
|
||||||
|
},
|
||||||
|
labels,
|
||||||
|
)
|
||||||
cmm.SetDriverName(driverName)
|
cmm.SetDriverName(driverName)
|
||||||
cmm.registerMetrics()
|
cmm.registerMetrics()
|
||||||
return &cmm
|
return &cmm
|
||||||
@@ -101,26 +213,105 @@ var _ CSIMetricsManager = &csiMetricsManager{}
|
|||||||
|
|
||||||
type csiMetricsManager struct {
|
type csiMetricsManager struct {
|
||||||
registry metrics.KubeRegistry
|
registry metrics.KubeRegistry
|
||||||
|
subsystem string
|
||||||
|
stabilityLevel metrics.StabilityLevel
|
||||||
driverName string
|
driverName string
|
||||||
csiOperationsMetric *metrics.CounterVec
|
additionalLabelNames []string
|
||||||
|
additionalLabels []label
|
||||||
csiOperationsLatencyMetric *metrics.HistogramVec
|
csiOperationsLatencyMetric *metrics.HistogramVec
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type label struct {
|
||||||
|
name, value string
|
||||||
|
}
|
||||||
|
|
||||||
func (cmm *csiMetricsManager) GetRegistry() metrics.KubeRegistry {
|
func (cmm *csiMetricsManager) GetRegistry() metrics.KubeRegistry {
|
||||||
return cmm.registry
|
return cmm.registry
|
||||||
}
|
}
|
||||||
|
|
||||||
// RecordMetrics must be called upon CSI Operation completion to record
|
// RecordMetrics implements CSIMetricsManager.RecordMetrics.
|
||||||
// the operation's metric.
|
|
||||||
// operationName - Name of the CSI operation.
|
|
||||||
// operationErr - Error, if any, that resulted from execution of operation.
|
|
||||||
// operationDuration - time it took for the operation to complete
|
|
||||||
func (cmm *csiMetricsManager) RecordMetrics(
|
func (cmm *csiMetricsManager) RecordMetrics(
|
||||||
operationName string,
|
operationName string,
|
||||||
operationErr error,
|
operationErr error,
|
||||||
operationDuration time.Duration) {
|
operationDuration time.Duration) {
|
||||||
cmm.csiOperationsLatencyMetric.WithLabelValues(
|
cmm.recordMetricsWithLabels(operationName, operationErr, operationDuration, nil)
|
||||||
cmm.driverName, operationName, getErrorCode(operationErr)).Observe(operationDuration.Seconds())
|
}
|
||||||
|
|
||||||
|
// recordMetricsWithLabels is the internal implementation of RecordMetrics.
|
||||||
|
func (cmm *csiMetricsManager) recordMetricsWithLabels(
|
||||||
|
operationName string,
|
||||||
|
operationErr error,
|
||||||
|
operationDuration time.Duration,
|
||||||
|
labelValues map[string]string) {
|
||||||
|
values := []string{cmm.driverName, operationName, getErrorCode(operationErr)}
|
||||||
|
for _, name := range cmm.additionalLabelNames {
|
||||||
|
values = append(values, labelValues[name])
|
||||||
|
}
|
||||||
|
for _, label := range cmm.additionalLabels {
|
||||||
|
values = append(values, label.value)
|
||||||
|
}
|
||||||
|
cmm.csiOperationsLatencyMetric.WithLabelValues(values...).Observe(operationDuration.Seconds())
|
||||||
|
}
|
||||||
|
|
||||||
|
type csiMetricsManagerWithValues struct {
|
||||||
|
*csiMetricsManager
|
||||||
|
|
||||||
|
// additionalValues holds the values passed via WithLabelValues.
|
||||||
|
additionalValues map[string]string
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithLabelValues in the base metrics manager creates a fresh wrapper with no labels and let's
|
||||||
|
// that deal with adding the label values.
|
||||||
|
func (cmm *csiMetricsManager) WithLabelValues(labels map[string]string) (CSIMetricsManager, error) {
|
||||||
|
cmmv := &csiMetricsManagerWithValues{
|
||||||
|
csiMetricsManager: cmm,
|
||||||
|
additionalValues: map[string]string{},
|
||||||
|
}
|
||||||
|
return cmmv.WithLabelValues(labels)
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithLabelValues in the wrapper creates a wrapper which has all existing labels and
|
||||||
|
// adds the new ones, with error checking. Can be called multiple times. Each call then
|
||||||
|
// can add some new value(s). It is an error to overwrite an already set value.
|
||||||
|
// If RecordMetrics is called before setting all additional values, the missing ones will
|
||||||
|
// be empty.
|
||||||
|
func (cmmv *csiMetricsManagerWithValues) WithLabelValues(labels map[string]string) (CSIMetricsManager, error) {
|
||||||
|
extended := &csiMetricsManagerWithValues{
|
||||||
|
csiMetricsManager: cmmv.csiMetricsManager,
|
||||||
|
additionalValues: map[string]string{},
|
||||||
|
}
|
||||||
|
// We need to copy the old values to avoid modifying the map in cmmv.
|
||||||
|
for name, value := range cmmv.additionalValues {
|
||||||
|
extended.additionalValues[name] = value
|
||||||
|
}
|
||||||
|
// Now add all new values.
|
||||||
|
for name, value := range labels {
|
||||||
|
if !extended.haveAdditionalLabel(name) {
|
||||||
|
return nil, fmt.Errorf("label %q was not defined via WithLabelNames", name)
|
||||||
|
}
|
||||||
|
if v, ok := extended.additionalValues[name]; ok {
|
||||||
|
return nil, fmt.Errorf("label %q already has value %q", name, v)
|
||||||
|
}
|
||||||
|
extended.additionalValues[name] = value
|
||||||
|
}
|
||||||
|
return extended, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (cmm *csiMetricsManager) haveAdditionalLabel(name string) bool {
|
||||||
|
for _, n := range cmm.additionalLabelNames {
|
||||||
|
if n == name {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// RecordMetrics passes the stored values as to the implementation.
|
||||||
|
func (cmmv *csiMetricsManagerWithValues) RecordMetrics(
|
||||||
|
operationName string,
|
||||||
|
operationErr error,
|
||||||
|
operationDuration time.Duration) {
|
||||||
|
cmmv.recordMetricsWithLabels(operationName, operationErr, operationDuration, cmmv.additionalValues)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetDriverName is called to update the CSI driver name. This should be done
|
// SetDriverName is called to update the CSI driver name. This should be done
|
||||||
@@ -171,7 +362,11 @@ func VerifyMetricsMatch(expectedMetrics, actualMetrics string, metricToIgnore st
|
|||||||
wantScanner.Scan()
|
wantScanner.Scan()
|
||||||
wantLine := strings.TrimSpace(wantScanner.Text())
|
wantLine := strings.TrimSpace(wantScanner.Text())
|
||||||
gotLine := strings.TrimSpace(gotScanner.Text())
|
gotLine := strings.TrimSpace(gotScanner.Text())
|
||||||
if wantLine != gotLine && (metricToIgnore == "" || !strings.HasPrefix(gotLine, metricToIgnore)) {
|
if wantLine != gotLine &&
|
||||||
|
(metricToIgnore == "" || !strings.HasPrefix(gotLine, metricToIgnore)) &&
|
||||||
|
// We should ignore the comments from metricToIgnore, otherwise the verification will
|
||||||
|
// fail because of the comments.
|
||||||
|
!strings.HasPrefix(gotLine, "#") {
|
||||||
return fmt.Errorf("\r\nMetric Want: %q\r\nMetric Got: %q\r\n", wantLine, gotLine)
|
return fmt.Errorf("\r\nMetric Want: %q\r\nMetric Got: %q\r\n", wantLine, gotLine)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
4
vendor/google.golang.org/grpc/README.md
generated
vendored
4
vendor/google.golang.org/grpc/README.md
generated
vendored
@@ -130,6 +130,10 @@ possible reasons, including:
|
|||||||
1. mis-configured transport credentials, connection failed on handshaking
|
1. mis-configured transport credentials, connection failed on handshaking
|
||||||
1. bytes disrupted, possibly by a proxy in between
|
1. bytes disrupted, possibly by a proxy in between
|
||||||
1. server shutdown
|
1. server shutdown
|
||||||
|
1. Keepalive parameters caused connection shutdown, for example if you have configured
|
||||||
|
your server to terminate connections regularly to [trigger DNS lookups](https://github.com/grpc/grpc-go/issues/3170#issuecomment-552517779).
|
||||||
|
If this is the case, you may want to increase your [MaxConnectionAgeGrace](https://pkg.go.dev/google.golang.org/grpc/keepalive?tab=doc#ServerParameters),
|
||||||
|
to allow longer RPC calls to finish.
|
||||||
|
|
||||||
It can be tricky to debug this because the error happens on the client side but
|
It can be tricky to debug this because the error happens on the client side but
|
||||||
the root cause of the connection being closed is on the server side. Turn on
|
the root cause of the connection being closed is on the server side. Turn on
|
||||||
|
12
vendor/google.golang.org/grpc/balancer/base/balancer.go
generated
vendored
12
vendor/google.golang.org/grpc/balancer/base/balancer.go
generated
vendored
@@ -113,10 +113,6 @@ func (b *baseBalancer) UpdateClientConnState(s balancer.ClientConnState) error {
|
|||||||
if grpclog.V(2) {
|
if grpclog.V(2) {
|
||||||
grpclog.Infoln("base.baseBalancer: got new ClientConn state: ", s)
|
grpclog.Infoln("base.baseBalancer: got new ClientConn state: ", s)
|
||||||
}
|
}
|
||||||
if len(s.ResolverState.Addresses) == 0 {
|
|
||||||
b.ResolverError(errors.New("produced zero addresses"))
|
|
||||||
return balancer.ErrBadResolverState
|
|
||||||
}
|
|
||||||
// Successful resolution; clear resolver error and ensure we return nil.
|
// Successful resolution; clear resolver error and ensure we return nil.
|
||||||
b.resolverErr = nil
|
b.resolverErr = nil
|
||||||
// addrsSet is the set converted from addrs, it's used for quick lookup of an address.
|
// addrsSet is the set converted from addrs, it's used for quick lookup of an address.
|
||||||
@@ -144,6 +140,14 @@ func (b *baseBalancer) UpdateClientConnState(s balancer.ClientConnState) error {
|
|||||||
// The entry will be deleted in HandleSubConnStateChange.
|
// The entry will be deleted in HandleSubConnStateChange.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// If resolver state contains no addresses, return an error so ClientConn
|
||||||
|
// will trigger re-resolve. Also records this as an resolver error, so when
|
||||||
|
// the overall state turns transient failure, the error message will have
|
||||||
|
// the zero address information.
|
||||||
|
if len(s.ResolverState.Addresses) == 0 {
|
||||||
|
b.ResolverError(errors.New("produced zero addresses"))
|
||||||
|
return balancer.ErrBadResolverState
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
17
vendor/google.golang.org/grpc/clientconn.go
generated
vendored
17
vendor/google.golang.org/grpc/clientconn.go
generated
vendored
@@ -194,12 +194,13 @@ func DialContext(ctx context.Context, target string, opts ...DialOption) (conn *
|
|||||||
cc.mkp = cc.dopts.copts.KeepaliveParams
|
cc.mkp = cc.dopts.copts.KeepaliveParams
|
||||||
|
|
||||||
if cc.dopts.copts.Dialer == nil {
|
if cc.dopts.copts.Dialer == nil {
|
||||||
cc.dopts.copts.Dialer = newProxyDialer(
|
cc.dopts.copts.Dialer = func(ctx context.Context, addr string) (net.Conn, error) {
|
||||||
func(ctx context.Context, addr string) (net.Conn, error) {
|
network, addr := parseDialTarget(addr)
|
||||||
network, addr := parseDialTarget(addr)
|
return (&net.Dialer{}).DialContext(ctx, network, addr)
|
||||||
return (&net.Dialer{}).DialContext(ctx, network, addr)
|
}
|
||||||
},
|
if cc.dopts.withProxy {
|
||||||
)
|
cc.dopts.copts.Dialer = newProxyDialer(cc.dopts.copts.Dialer)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if cc.dopts.copts.UserAgent != "" {
|
if cc.dopts.copts.UserAgent != "" {
|
||||||
@@ -1525,9 +1526,9 @@ var ErrClientConnTimeout = errors.New("grpc: timed out when dialing")
|
|||||||
|
|
||||||
func (cc *ClientConn) getResolver(scheme string) resolver.Builder {
|
func (cc *ClientConn) getResolver(scheme string) resolver.Builder {
|
||||||
for _, rb := range cc.dopts.resolvers {
|
for _, rb := range cc.dopts.resolvers {
|
||||||
if cc.parsedTarget.Scheme == rb.Scheme() {
|
if scheme == rb.Scheme() {
|
||||||
return rb
|
return rb
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return resolver.Get(cc.parsedTarget.Scheme)
|
return resolver.Get(scheme)
|
||||||
}
|
}
|
||||||
|
18
vendor/google.golang.org/grpc/credentials/tls.go
generated
vendored
18
vendor/google.golang.org/grpc/credentials/tls.go
generated
vendored
@@ -135,16 +135,26 @@ func NewTLS(c *tls.Config) TransportCredentials {
|
|||||||
return tc
|
return tc
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewClientTLSFromCert constructs TLS credentials from the input certificate for client.
|
// NewClientTLSFromCert constructs TLS credentials from the provided root
|
||||||
|
// certificate authority certificate(s) to validate server connections. If
|
||||||
|
// certificates to establish the identity of the client need to be included in
|
||||||
|
// the credentials (eg: for mTLS), use NewTLS instead, where a complete
|
||||||
|
// tls.Config can be specified.
|
||||||
// serverNameOverride is for testing only. If set to a non empty string,
|
// serverNameOverride is for testing only. If set to a non empty string,
|
||||||
// it will override the virtual host name of authority (e.g. :authority header field) in requests.
|
// it will override the virtual host name of authority (e.g. :authority header
|
||||||
|
// field) in requests.
|
||||||
func NewClientTLSFromCert(cp *x509.CertPool, serverNameOverride string) TransportCredentials {
|
func NewClientTLSFromCert(cp *x509.CertPool, serverNameOverride string) TransportCredentials {
|
||||||
return NewTLS(&tls.Config{ServerName: serverNameOverride, RootCAs: cp})
|
return NewTLS(&tls.Config{ServerName: serverNameOverride, RootCAs: cp})
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewClientTLSFromFile constructs TLS credentials from the input certificate file for client.
|
// NewClientTLSFromFile constructs TLS credentials from the provided root
|
||||||
|
// certificate authority certificate file(s) to validate server connections. If
|
||||||
|
// certificates to establish the identity of the client need to be included in
|
||||||
|
// the credentials (eg: for mTLS), use NewTLS instead, where a complete
|
||||||
|
// tls.Config can be specified.
|
||||||
// serverNameOverride is for testing only. If set to a non empty string,
|
// serverNameOverride is for testing only. If set to a non empty string,
|
||||||
// it will override the virtual host name of authority (e.g. :authority header field) in requests.
|
// it will override the virtual host name of authority (e.g. :authority header
|
||||||
|
// field) in requests.
|
||||||
func NewClientTLSFromFile(certFile, serverNameOverride string) (TransportCredentials, error) {
|
func NewClientTLSFromFile(certFile, serverNameOverride string) (TransportCredentials, error) {
|
||||||
b, err := ioutil.ReadFile(certFile)
|
b, err := ioutil.ReadFile(certFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
12
vendor/google.golang.org/grpc/dialoptions.go
generated
vendored
12
vendor/google.golang.org/grpc/dialoptions.go
generated
vendored
@@ -72,6 +72,7 @@ type dialOptions struct {
|
|||||||
// we need to be able to configure this in tests.
|
// we need to be able to configure this in tests.
|
||||||
resolveNowBackoff func(int) time.Duration
|
resolveNowBackoff func(int) time.Duration
|
||||||
resolvers []resolver.Builder
|
resolvers []resolver.Builder
|
||||||
|
withProxy bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// DialOption configures how we set up the connection.
|
// DialOption configures how we set up the connection.
|
||||||
@@ -307,6 +308,16 @@ func WithInsecure() DialOption {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WithNoProxy returns a DialOption which disables the use of proxies for this
|
||||||
|
// ClientConn. This is ignored if WithDialer or WithContextDialer are used.
|
||||||
|
//
|
||||||
|
// This API is EXPERIMENTAL.
|
||||||
|
func WithNoProxy() DialOption {
|
||||||
|
return newFuncDialOption(func(o *dialOptions) {
|
||||||
|
o.withProxy = false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// WithTransportCredentials returns a DialOption which configures a connection
|
// WithTransportCredentials returns a DialOption which configures a connection
|
||||||
// level security credentials (e.g., TLS/SSL). This should not be used together
|
// level security credentials (e.g., TLS/SSL). This should not be used together
|
||||||
// with WithCredentialsBundle.
|
// with WithCredentialsBundle.
|
||||||
@@ -557,6 +568,7 @@ func defaultDialOptions() dialOptions {
|
|||||||
ReadBufferSize: defaultReadBufSize,
|
ReadBufferSize: defaultReadBufSize,
|
||||||
},
|
},
|
||||||
resolveNowBackoff: internalbackoff.DefaultExponential.Backoff,
|
resolveNowBackoff: internalbackoff.DefaultExponential.Backoff,
|
||||||
|
withProxy: true,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
2
vendor/google.golang.org/grpc/go.mod
generated
vendored
2
vendor/google.golang.org/grpc/go.mod
generated
vendored
@@ -3,8 +3,8 @@ module google.golang.org/grpc
|
|||||||
go 1.11
|
go 1.11
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f
|
||||||
github.com/envoyproxy/go-control-plane v0.9.4
|
github.com/envoyproxy/go-control-plane v0.9.4
|
||||||
github.com/envoyproxy/protoc-gen-validate v0.1.0
|
|
||||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b
|
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b
|
||||||
github.com/golang/mock v1.1.1
|
github.com/golang/mock v1.1.1
|
||||||
github.com/golang/protobuf v1.3.3
|
github.com/golang/protobuf v1.3.3
|
||||||
|
5
vendor/google.golang.org/grpc/internal/internal.go
generated
vendored
5
vendor/google.golang.org/grpc/internal/internal.go
generated
vendored
@@ -37,11 +37,6 @@ var (
|
|||||||
// KeepaliveMinPingTime is the minimum ping interval. This must be 10s by
|
// KeepaliveMinPingTime is the minimum ping interval. This must be 10s by
|
||||||
// default, but tests may wish to set it lower for convenience.
|
// default, but tests may wish to set it lower for convenience.
|
||||||
KeepaliveMinPingTime = 10 * time.Second
|
KeepaliveMinPingTime = 10 * time.Second
|
||||||
// StatusRawProto is exported by status/status.go. This func returns a
|
|
||||||
// pointer to the wrapped Status proto for a given status.Status without a
|
|
||||||
// call to proto.Clone(). The returned Status proto should not be mutated by
|
|
||||||
// the caller.
|
|
||||||
StatusRawProto interface{} // func (*status.Status) *spb.Status
|
|
||||||
// NewRequestInfoContext creates a new context based on the argument context attaching
|
// NewRequestInfoContext creates a new context based on the argument context attaching
|
||||||
// the passed in RequestInfo to the new context.
|
// the passed in RequestInfo to the new context.
|
||||||
NewRequestInfoContext interface{} // func(context.Context, credentials.RequestInfo) context.Context
|
NewRequestInfoContext interface{} // func(context.Context, credentials.RequestInfo) context.Context
|
||||||
|
166
vendor/google.golang.org/grpc/internal/status/status.go
generated
vendored
Normal file
166
vendor/google.golang.org/grpc/internal/status/status.go
generated
vendored
Normal file
@@ -0,0 +1,166 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright 2020 gRPC authors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Package status implements errors returned by gRPC. These errors are
|
||||||
|
// serialized and transmitted on the wire between server and client, and allow
|
||||||
|
// for additional data to be transmitted via the Details field in the status
|
||||||
|
// proto. gRPC service handlers should return an error created by this
|
||||||
|
// package, and gRPC clients should expect a corresponding error to be
|
||||||
|
// returned from the RPC call.
|
||||||
|
//
|
||||||
|
// This package upholds the invariants that a non-nil error may not
|
||||||
|
// contain an OK code, and an OK code must result in a nil error.
|
||||||
|
package status
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/golang/protobuf/proto"
|
||||||
|
"github.com/golang/protobuf/ptypes"
|
||||||
|
spb "google.golang.org/genproto/googleapis/rpc/status"
|
||||||
|
"google.golang.org/grpc/codes"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Status represents an RPC status code, message, and details. It is immutable
|
||||||
|
// and should be created with New, Newf, or FromProto.
|
||||||
|
type Status struct {
|
||||||
|
s *spb.Status
|
||||||
|
}
|
||||||
|
|
||||||
|
// New returns a Status representing c and msg.
|
||||||
|
func New(c codes.Code, msg string) *Status {
|
||||||
|
return &Status{s: &spb.Status{Code: int32(c), Message: msg}}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Newf returns New(c, fmt.Sprintf(format, a...)).
|
||||||
|
func Newf(c codes.Code, format string, a ...interface{}) *Status {
|
||||||
|
return New(c, fmt.Sprintf(format, a...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// FromProto returns a Status representing s.
|
||||||
|
func FromProto(s *spb.Status) *Status {
|
||||||
|
return &Status{s: proto.Clone(s).(*spb.Status)}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Err returns an error representing c and msg. If c is OK, returns nil.
|
||||||
|
func Err(c codes.Code, msg string) error {
|
||||||
|
return New(c, msg).Err()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Errorf returns Error(c, fmt.Sprintf(format, a...)).
|
||||||
|
func Errorf(c codes.Code, format string, a ...interface{}) error {
|
||||||
|
return Err(c, fmt.Sprintf(format, a...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Code returns the status code contained in s.
|
||||||
|
func (s *Status) Code() codes.Code {
|
||||||
|
if s == nil || s.s == nil {
|
||||||
|
return codes.OK
|
||||||
|
}
|
||||||
|
return codes.Code(s.s.Code)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Message returns the message contained in s.
|
||||||
|
func (s *Status) Message() string {
|
||||||
|
if s == nil || s.s == nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return s.s.Message
|
||||||
|
}
|
||||||
|
|
||||||
|
// Proto returns s's status as an spb.Status proto message.
|
||||||
|
func (s *Status) Proto() *spb.Status {
|
||||||
|
if s == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return proto.Clone(s.s).(*spb.Status)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Err returns an immutable error representing s; returns nil if s.Code() is OK.
|
||||||
|
func (s *Status) Err() error {
|
||||||
|
if s.Code() == codes.OK {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return (*Error)(s.Proto())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Status) Error() string {
|
||||||
|
p := s.Proto()
|
||||||
|
return fmt.Sprintf("rpc error: code = %s desc = %s", codes.Code(p.GetCode()), p.GetMessage())
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithDetails returns a new status with the provided details messages appended to the status.
|
||||||
|
// If any errors are encountered, it returns nil and the first error encountered.
|
||||||
|
func (s *Status) WithDetails(details ...proto.Message) (*Status, error) {
|
||||||
|
if s.Code() == codes.OK {
|
||||||
|
return nil, errors.New("no error details for status with code OK")
|
||||||
|
}
|
||||||
|
// s.Code() != OK implies that s.Proto() != nil.
|
||||||
|
p := s.Proto()
|
||||||
|
for _, detail := range details {
|
||||||
|
any, err := ptypes.MarshalAny(detail)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
p.Details = append(p.Details, any)
|
||||||
|
}
|
||||||
|
return &Status{s: p}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Details returns a slice of details messages attached to the status.
|
||||||
|
// If a detail cannot be decoded, the error is returned in place of the detail.
|
||||||
|
func (s *Status) Details() []interface{} {
|
||||||
|
if s == nil || s.s == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
details := make([]interface{}, 0, len(s.s.Details))
|
||||||
|
for _, any := range s.s.Details {
|
||||||
|
detail := &ptypes.DynamicAny{}
|
||||||
|
if err := ptypes.UnmarshalAny(any, detail); err != nil {
|
||||||
|
details = append(details, err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
details = append(details, detail.Message)
|
||||||
|
}
|
||||||
|
return details
|
||||||
|
}
|
||||||
|
|
||||||
|
// Error is an alias of a status proto. It implements error and Status,
|
||||||
|
// and a nil Error should never be returned by this package.
|
||||||
|
type Error spb.Status
|
||||||
|
|
||||||
|
func (se *Error) Error() string {
|
||||||
|
p := (*spb.Status)(se)
|
||||||
|
return fmt.Sprintf("rpc error: code = %s desc = %s", codes.Code(p.GetCode()), p.GetMessage())
|
||||||
|
}
|
||||||
|
|
||||||
|
// GRPCStatus returns the Status represented by se.
|
||||||
|
func (se *Error) GRPCStatus() *Status {
|
||||||
|
return FromProto((*spb.Status)(se))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Is implements future error.Is functionality.
|
||||||
|
// A Error is equivalent if the code and message are identical.
|
||||||
|
func (se *Error) Is(target error) bool {
|
||||||
|
tse, ok := target.(*Error)
|
||||||
|
if !ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return proto.Equal((*spb.Status)(se), (*spb.Status)(tse))
|
||||||
|
}
|
75
vendor/google.golang.org/grpc/internal/transport/handler_server.go
generated
vendored
75
vendor/google.golang.org/grpc/internal/transport/handler_server.go
generated
vendored
@@ -112,11 +112,10 @@ func NewServerHandlerTransport(w http.ResponseWriter, r *http.Request, stats sta
|
|||||||
// at this point to be speaking over HTTP/2, so it's able to speak valid
|
// at this point to be speaking over HTTP/2, so it's able to speak valid
|
||||||
// gRPC.
|
// gRPC.
|
||||||
type serverHandlerTransport struct {
|
type serverHandlerTransport struct {
|
||||||
rw http.ResponseWriter
|
rw http.ResponseWriter
|
||||||
req *http.Request
|
req *http.Request
|
||||||
timeoutSet bool
|
timeoutSet bool
|
||||||
timeout time.Duration
|
timeout time.Duration
|
||||||
didCommonHeaders bool
|
|
||||||
|
|
||||||
headerMD metadata.MD
|
headerMD metadata.MD
|
||||||
|
|
||||||
@@ -186,8 +185,11 @@ func (ht *serverHandlerTransport) WriteStatus(s *Stream, st *status.Status) erro
|
|||||||
ht.writeStatusMu.Lock()
|
ht.writeStatusMu.Lock()
|
||||||
defer ht.writeStatusMu.Unlock()
|
defer ht.writeStatusMu.Unlock()
|
||||||
|
|
||||||
|
headersWritten := s.updateHeaderSent()
|
||||||
err := ht.do(func() {
|
err := ht.do(func() {
|
||||||
ht.writeCommonHeaders(s)
|
if !headersWritten {
|
||||||
|
ht.writePendingHeaders(s)
|
||||||
|
}
|
||||||
|
|
||||||
// And flush, in case no header or body has been sent yet.
|
// And flush, in case no header or body has been sent yet.
|
||||||
// This forces a separation of headers and trailers if this is the
|
// This forces a separation of headers and trailers if this is the
|
||||||
@@ -227,6 +229,8 @@ func (ht *serverHandlerTransport) WriteStatus(s *Stream, st *status.Status) erro
|
|||||||
|
|
||||||
if err == nil { // transport has not been closed
|
if err == nil { // transport has not been closed
|
||||||
if ht.stats != nil {
|
if ht.stats != nil {
|
||||||
|
// Note: The trailer fields are compressed with hpack after this call returns.
|
||||||
|
// No WireLength field is set here.
|
||||||
ht.stats.HandleRPC(s.Context(), &stats.OutTrailer{
|
ht.stats.HandleRPC(s.Context(), &stats.OutTrailer{
|
||||||
Trailer: s.trailer.Copy(),
|
Trailer: s.trailer.Copy(),
|
||||||
})
|
})
|
||||||
@@ -236,14 +240,16 @@ func (ht *serverHandlerTransport) WriteStatus(s *Stream, st *status.Status) erro
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// writePendingHeaders sets common and custom headers on the first
|
||||||
|
// write call (Write, WriteHeader, or WriteStatus)
|
||||||
|
func (ht *serverHandlerTransport) writePendingHeaders(s *Stream) {
|
||||||
|
ht.writeCommonHeaders(s)
|
||||||
|
ht.writeCustomHeaders(s)
|
||||||
|
}
|
||||||
|
|
||||||
// writeCommonHeaders sets common headers on the first write
|
// writeCommonHeaders sets common headers on the first write
|
||||||
// call (Write, WriteHeader, or WriteStatus).
|
// call (Write, WriteHeader, or WriteStatus).
|
||||||
func (ht *serverHandlerTransport) writeCommonHeaders(s *Stream) {
|
func (ht *serverHandlerTransport) writeCommonHeaders(s *Stream) {
|
||||||
if ht.didCommonHeaders {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
ht.didCommonHeaders = true
|
|
||||||
|
|
||||||
h := ht.rw.Header()
|
h := ht.rw.Header()
|
||||||
h["Date"] = nil // suppress Date to make tests happy; TODO: restore
|
h["Date"] = nil // suppress Date to make tests happy; TODO: restore
|
||||||
h.Set("Content-Type", ht.contentType)
|
h.Set("Content-Type", ht.contentType)
|
||||||
@@ -262,9 +268,30 @@ func (ht *serverHandlerTransport) writeCommonHeaders(s *Stream) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// writeCustomHeaders sets custom headers set on the stream via SetHeader
|
||||||
|
// on the first write call (Write, WriteHeader, or WriteStatus).
|
||||||
|
func (ht *serverHandlerTransport) writeCustomHeaders(s *Stream) {
|
||||||
|
h := ht.rw.Header()
|
||||||
|
|
||||||
|
s.hdrMu.Lock()
|
||||||
|
for k, vv := range s.header {
|
||||||
|
if isReservedHeader(k) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
for _, v := range vv {
|
||||||
|
h.Add(k, encodeMetadataHeader(k, v))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
s.hdrMu.Unlock()
|
||||||
|
}
|
||||||
|
|
||||||
func (ht *serverHandlerTransport) Write(s *Stream, hdr []byte, data []byte, opts *Options) error {
|
func (ht *serverHandlerTransport) Write(s *Stream, hdr []byte, data []byte, opts *Options) error {
|
||||||
|
headersWritten := s.updateHeaderSent()
|
||||||
return ht.do(func() {
|
return ht.do(func() {
|
||||||
ht.writeCommonHeaders(s)
|
if !headersWritten {
|
||||||
|
ht.writePendingHeaders(s)
|
||||||
|
}
|
||||||
ht.rw.Write(hdr)
|
ht.rw.Write(hdr)
|
||||||
ht.rw.Write(data)
|
ht.rw.Write(data)
|
||||||
ht.rw.(http.Flusher).Flush()
|
ht.rw.(http.Flusher).Flush()
|
||||||
@@ -272,27 +299,27 @@ func (ht *serverHandlerTransport) Write(s *Stream, hdr []byte, data []byte, opts
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (ht *serverHandlerTransport) WriteHeader(s *Stream, md metadata.MD) error {
|
func (ht *serverHandlerTransport) WriteHeader(s *Stream, md metadata.MD) error {
|
||||||
|
if err := s.SetHeader(md); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
headersWritten := s.updateHeaderSent()
|
||||||
err := ht.do(func() {
|
err := ht.do(func() {
|
||||||
ht.writeCommonHeaders(s)
|
if !headersWritten {
|
||||||
h := ht.rw.Header()
|
ht.writePendingHeaders(s)
|
||||||
for k, vv := range md {
|
|
||||||
// Clients don't tolerate reading restricted headers after some non restricted ones were sent.
|
|
||||||
if isReservedHeader(k) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
for _, v := range vv {
|
|
||||||
v = encodeMetadataHeader(k, v)
|
|
||||||
h.Add(k, v)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ht.rw.WriteHeader(200)
|
ht.rw.WriteHeader(200)
|
||||||
ht.rw.(http.Flusher).Flush()
|
ht.rw.(http.Flusher).Flush()
|
||||||
})
|
})
|
||||||
|
|
||||||
if err == nil {
|
if err == nil {
|
||||||
if ht.stats != nil {
|
if ht.stats != nil {
|
||||||
|
// Note: The header fields are compressed with hpack after this call returns.
|
||||||
|
// No WireLength field is set here.
|
||||||
ht.stats.HandleRPC(s.Context(), &stats.OutHeader{
|
ht.stats.HandleRPC(s.Context(), &stats.OutHeader{
|
||||||
Header: md.Copy(),
|
Header: md.Copy(),
|
||||||
|
Compression: s.sendCompress,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
9
vendor/google.golang.org/grpc/internal/transport/http2_client.go
generated
vendored
9
vendor/google.golang.org/grpc/internal/transport/http2_client.go
generated
vendored
@@ -686,6 +686,8 @@ func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (_ *Strea
|
|||||||
} else {
|
} else {
|
||||||
header = metadata.Pairs("user-agent", t.userAgent)
|
header = metadata.Pairs("user-agent", t.userAgent)
|
||||||
}
|
}
|
||||||
|
// Note: The header fields are compressed with hpack after this call returns.
|
||||||
|
// No WireLength field is set here.
|
||||||
outHeader := &stats.OutHeader{
|
outHeader := &stats.OutHeader{
|
||||||
Client: true,
|
Client: true,
|
||||||
FullMethod: callHdr.Method,
|
FullMethod: callHdr.Method,
|
||||||
@@ -1193,9 +1195,10 @@ func (t *http2Client) operateHeaders(frame *http2.MetaHeadersFrame) {
|
|||||||
if t.statsHandler != nil {
|
if t.statsHandler != nil {
|
||||||
if isHeader {
|
if isHeader {
|
||||||
inHeader := &stats.InHeader{
|
inHeader := &stats.InHeader{
|
||||||
Client: true,
|
Client: true,
|
||||||
WireLength: int(frame.Header().Length),
|
WireLength: int(frame.Header().Length),
|
||||||
Header: s.header.Copy(),
|
Header: s.header.Copy(),
|
||||||
|
Compression: s.recvCompress,
|
||||||
}
|
}
|
||||||
t.statsHandler.HandleRPC(s.ctx, inHeader)
|
t.statsHandler.HandleRPC(s.ctx, inHeader)
|
||||||
} else {
|
} else {
|
||||||
|
16
vendor/google.golang.org/grpc/internal/transport/http2_server.go
generated
vendored
16
vendor/google.golang.org/grpc/internal/transport/http2_server.go
generated
vendored
@@ -35,11 +35,9 @@ import (
|
|||||||
"golang.org/x/net/http2"
|
"golang.org/x/net/http2"
|
||||||
"golang.org/x/net/http2/hpack"
|
"golang.org/x/net/http2/hpack"
|
||||||
|
|
||||||
spb "google.golang.org/genproto/googleapis/rpc/status"
|
|
||||||
"google.golang.org/grpc/codes"
|
"google.golang.org/grpc/codes"
|
||||||
"google.golang.org/grpc/credentials"
|
"google.golang.org/grpc/credentials"
|
||||||
"google.golang.org/grpc/grpclog"
|
"google.golang.org/grpc/grpclog"
|
||||||
"google.golang.org/grpc/internal"
|
|
||||||
"google.golang.org/grpc/internal/channelz"
|
"google.golang.org/grpc/internal/channelz"
|
||||||
"google.golang.org/grpc/internal/grpcrand"
|
"google.golang.org/grpc/internal/grpcrand"
|
||||||
"google.golang.org/grpc/keepalive"
|
"google.golang.org/grpc/keepalive"
|
||||||
@@ -57,9 +55,6 @@ var (
|
|||||||
// ErrHeaderListSizeLimitViolation indicates that the header list size is larger
|
// ErrHeaderListSizeLimitViolation indicates that the header list size is larger
|
||||||
// than the limit set by peer.
|
// than the limit set by peer.
|
||||||
ErrHeaderListSizeLimitViolation = errors.New("transport: trying to send header list size larger than the limit set by peer")
|
ErrHeaderListSizeLimitViolation = errors.New("transport: trying to send header list size larger than the limit set by peer")
|
||||||
// statusRawProto is a function to get to the raw status proto wrapped in a
|
|
||||||
// status.Status without a proto.Clone().
|
|
||||||
statusRawProto = internal.StatusRawProto.(func(*status.Status) *spb.Status)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// serverConnectionCounter counts the number of connections a server has seen
|
// serverConnectionCounter counts the number of connections a server has seen
|
||||||
@@ -813,10 +808,11 @@ func (t *http2Server) writeHeaderLocked(s *Stream) error {
|
|||||||
return ErrHeaderListSizeLimitViolation
|
return ErrHeaderListSizeLimitViolation
|
||||||
}
|
}
|
||||||
if t.stats != nil {
|
if t.stats != nil {
|
||||||
// Note: WireLength is not set in outHeader.
|
// Note: Headers are compressed with hpack after this call returns.
|
||||||
// TODO(mmukhi): Revisit this later, if needed.
|
// No WireLength field is set here.
|
||||||
outHeader := &stats.OutHeader{
|
outHeader := &stats.OutHeader{
|
||||||
Header: s.header.Copy(),
|
Header: s.header.Copy(),
|
||||||
|
Compression: s.sendCompress,
|
||||||
}
|
}
|
||||||
t.stats.HandleRPC(s.Context(), outHeader)
|
t.stats.HandleRPC(s.Context(), outHeader)
|
||||||
}
|
}
|
||||||
@@ -849,7 +845,7 @@ func (t *http2Server) WriteStatus(s *Stream, st *status.Status) error {
|
|||||||
headerFields = append(headerFields, hpack.HeaderField{Name: "grpc-status", Value: strconv.Itoa(int(st.Code()))})
|
headerFields = append(headerFields, hpack.HeaderField{Name: "grpc-status", Value: strconv.Itoa(int(st.Code()))})
|
||||||
headerFields = append(headerFields, hpack.HeaderField{Name: "grpc-message", Value: encodeGrpcMessage(st.Message())})
|
headerFields = append(headerFields, hpack.HeaderField{Name: "grpc-message", Value: encodeGrpcMessage(st.Message())})
|
||||||
|
|
||||||
if p := statusRawProto(st); p != nil && len(p.Details) > 0 {
|
if p := st.Proto(); p != nil && len(p.Details) > 0 {
|
||||||
stBytes, err := proto.Marshal(p)
|
stBytes, err := proto.Marshal(p)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// TODO: return error instead, when callers are able to handle it.
|
// TODO: return error instead, when callers are able to handle it.
|
||||||
@@ -880,6 +876,8 @@ func (t *http2Server) WriteStatus(s *Stream, st *status.Status) error {
|
|||||||
rst := s.getState() == streamActive
|
rst := s.getState() == streamActive
|
||||||
t.finishStream(s, rst, http2.ErrCodeNo, trailingHeader, true)
|
t.finishStream(s, rst, http2.ErrCodeNo, trailingHeader, true)
|
||||||
if t.stats != nil {
|
if t.stats != nil {
|
||||||
|
// Note: The trailer fields are compressed with hpack after this call returns.
|
||||||
|
// No WireLength field is set here.
|
||||||
t.stats.HandleRPC(s.Context(), &stats.OutTrailer{
|
t.stats.HandleRPC(s.Context(), &stats.OutTrailer{
|
||||||
Trailer: s.trailer.Copy(),
|
Trailer: s.trailer.Copy(),
|
||||||
})
|
})
|
||||||
|
19
vendor/google.golang.org/grpc/stats/stats.go
generated
vendored
19
vendor/google.golang.org/grpc/stats/stats.go
generated
vendored
@@ -81,6 +81,10 @@ type InHeader struct {
|
|||||||
Client bool
|
Client bool
|
||||||
// WireLength is the wire length of header.
|
// WireLength is the wire length of header.
|
||||||
WireLength int
|
WireLength int
|
||||||
|
// Compression is the compression algorithm used for the RPC.
|
||||||
|
Compression string
|
||||||
|
// Header contains the header metadata received.
|
||||||
|
Header metadata.MD
|
||||||
|
|
||||||
// The following fields are valid only if Client is false.
|
// The following fields are valid only if Client is false.
|
||||||
// FullMethod is the full RPC method string, i.e., /package.service/method.
|
// FullMethod is the full RPC method string, i.e., /package.service/method.
|
||||||
@@ -89,10 +93,6 @@ type InHeader struct {
|
|||||||
RemoteAddr net.Addr
|
RemoteAddr net.Addr
|
||||||
// LocalAddr is the local address of the corresponding connection.
|
// LocalAddr is the local address of the corresponding connection.
|
||||||
LocalAddr net.Addr
|
LocalAddr net.Addr
|
||||||
// Compression is the compression algorithm used for the RPC.
|
|
||||||
Compression string
|
|
||||||
// Header contains the header metadata received.
|
|
||||||
Header metadata.MD
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsClient indicates if the stats information is from client side.
|
// IsClient indicates if the stats information is from client side.
|
||||||
@@ -141,6 +141,10 @@ func (s *OutPayload) isRPCStats() {}
|
|||||||
type OutHeader struct {
|
type OutHeader struct {
|
||||||
// Client is true if this OutHeader is from client side.
|
// Client is true if this OutHeader is from client side.
|
||||||
Client bool
|
Client bool
|
||||||
|
// Compression is the compression algorithm used for the RPC.
|
||||||
|
Compression string
|
||||||
|
// Header contains the header metadata sent.
|
||||||
|
Header metadata.MD
|
||||||
|
|
||||||
// The following fields are valid only if Client is true.
|
// The following fields are valid only if Client is true.
|
||||||
// FullMethod is the full RPC method string, i.e., /package.service/method.
|
// FullMethod is the full RPC method string, i.e., /package.service/method.
|
||||||
@@ -149,10 +153,6 @@ type OutHeader struct {
|
|||||||
RemoteAddr net.Addr
|
RemoteAddr net.Addr
|
||||||
// LocalAddr is the local address of the corresponding connection.
|
// LocalAddr is the local address of the corresponding connection.
|
||||||
LocalAddr net.Addr
|
LocalAddr net.Addr
|
||||||
// Compression is the compression algorithm used for the RPC.
|
|
||||||
Compression string
|
|
||||||
// Header contains the header metadata sent.
|
|
||||||
Header metadata.MD
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsClient indicates if this stats information is from client side.
|
// IsClient indicates if this stats information is from client side.
|
||||||
@@ -165,6 +165,9 @@ type OutTrailer struct {
|
|||||||
// Client is true if this OutTrailer is from client side.
|
// Client is true if this OutTrailer is from client side.
|
||||||
Client bool
|
Client bool
|
||||||
// WireLength is the wire length of trailer.
|
// WireLength is the wire length of trailer.
|
||||||
|
//
|
||||||
|
// Deprecated: This field is never set. The length is not known when this message is
|
||||||
|
// emitted because the trailer fields are compressed with hpack after that.
|
||||||
WireLength int
|
WireLength int
|
||||||
// Trailer contains the trailer metadata sent to the client. This
|
// Trailer contains the trailer metadata sent to the client. This
|
||||||
// field is only valid if this OutTrailer is from the server side.
|
// field is only valid if this OutTrailer is from the server side.
|
||||||
|
119
vendor/google.golang.org/grpc/status/status.go
generated
vendored
119
vendor/google.golang.org/grpc/status/status.go
generated
vendored
@@ -29,88 +29,23 @@ package status
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/golang/protobuf/proto"
|
|
||||||
"github.com/golang/protobuf/ptypes"
|
|
||||||
spb "google.golang.org/genproto/googleapis/rpc/status"
|
spb "google.golang.org/genproto/googleapis/rpc/status"
|
||||||
|
|
||||||
"google.golang.org/grpc/codes"
|
"google.golang.org/grpc/codes"
|
||||||
"google.golang.org/grpc/internal"
|
"google.golang.org/grpc/internal/status"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
// Status references google.golang.org/grpc/internal/status. It represents an
|
||||||
internal.StatusRawProto = statusRawProto
|
// RPC status code, message, and details. It is immutable and should be
|
||||||
}
|
// created with New, Newf, or FromProto.
|
||||||
|
// https://godoc.org/google.golang.org/grpc/internal/status
|
||||||
func statusRawProto(s *Status) *spb.Status { return s.s }
|
type Status = status.Status
|
||||||
|
|
||||||
// statusError is an alias of a status proto. It implements error and Status,
|
|
||||||
// and a nil statusError should never be returned by this package.
|
|
||||||
type statusError spb.Status
|
|
||||||
|
|
||||||
func (se *statusError) Error() string {
|
|
||||||
p := (*spb.Status)(se)
|
|
||||||
return fmt.Sprintf("rpc error: code = %s desc = %s", codes.Code(p.GetCode()), p.GetMessage())
|
|
||||||
}
|
|
||||||
|
|
||||||
func (se *statusError) GRPCStatus() *Status {
|
|
||||||
return &Status{s: (*spb.Status)(se)}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Is implements future error.Is functionality.
|
|
||||||
// A statusError is equivalent if the code and message are identical.
|
|
||||||
func (se *statusError) Is(target error) bool {
|
|
||||||
tse, ok := target.(*statusError)
|
|
||||||
if !ok {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
return proto.Equal((*spb.Status)(se), (*spb.Status)(tse))
|
|
||||||
}
|
|
||||||
|
|
||||||
// Status represents an RPC status code, message, and details. It is immutable
|
|
||||||
// and should be created with New, Newf, or FromProto.
|
|
||||||
type Status struct {
|
|
||||||
s *spb.Status
|
|
||||||
}
|
|
||||||
|
|
||||||
// Code returns the status code contained in s.
|
|
||||||
func (s *Status) Code() codes.Code {
|
|
||||||
if s == nil || s.s == nil {
|
|
||||||
return codes.OK
|
|
||||||
}
|
|
||||||
return codes.Code(s.s.Code)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Message returns the message contained in s.
|
|
||||||
func (s *Status) Message() string {
|
|
||||||
if s == nil || s.s == nil {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
return s.s.Message
|
|
||||||
}
|
|
||||||
|
|
||||||
// Proto returns s's status as an spb.Status proto message.
|
|
||||||
func (s *Status) Proto() *spb.Status {
|
|
||||||
if s == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return proto.Clone(s.s).(*spb.Status)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Err returns an immutable error representing s; returns nil if s.Code() is
|
|
||||||
// OK.
|
|
||||||
func (s *Status) Err() error {
|
|
||||||
if s.Code() == codes.OK {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return (*statusError)(s.s)
|
|
||||||
}
|
|
||||||
|
|
||||||
// New returns a Status representing c and msg.
|
// New returns a Status representing c and msg.
|
||||||
func New(c codes.Code, msg string) *Status {
|
func New(c codes.Code, msg string) *Status {
|
||||||
return &Status{s: &spb.Status{Code: int32(c), Message: msg}}
|
return status.New(c, msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Newf returns New(c, fmt.Sprintf(format, a...)).
|
// Newf returns New(c, fmt.Sprintf(format, a...)).
|
||||||
@@ -135,7 +70,7 @@ func ErrorProto(s *spb.Status) error {
|
|||||||
|
|
||||||
// FromProto returns a Status representing s.
|
// FromProto returns a Status representing s.
|
||||||
func FromProto(s *spb.Status) *Status {
|
func FromProto(s *spb.Status) *Status {
|
||||||
return &Status{s: proto.Clone(s).(*spb.Status)}
|
return status.FromProto(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// FromError returns a Status representing err if it was produced from this
|
// FromError returns a Status representing err if it was produced from this
|
||||||
@@ -160,42 +95,6 @@ func Convert(err error) *Status {
|
|||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
// WithDetails returns a new status with the provided details messages appended to the status.
|
|
||||||
// If any errors are encountered, it returns nil and the first error encountered.
|
|
||||||
func (s *Status) WithDetails(details ...proto.Message) (*Status, error) {
|
|
||||||
if s.Code() == codes.OK {
|
|
||||||
return nil, errors.New("no error details for status with code OK")
|
|
||||||
}
|
|
||||||
// s.Code() != OK implies that s.Proto() != nil.
|
|
||||||
p := s.Proto()
|
|
||||||
for _, detail := range details {
|
|
||||||
any, err := ptypes.MarshalAny(detail)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
p.Details = append(p.Details, any)
|
|
||||||
}
|
|
||||||
return &Status{s: p}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Details returns a slice of details messages attached to the status.
|
|
||||||
// If a detail cannot be decoded, the error is returned in place of the detail.
|
|
||||||
func (s *Status) Details() []interface{} {
|
|
||||||
if s == nil || s.s == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
details := make([]interface{}, 0, len(s.s.Details))
|
|
||||||
for _, any := range s.s.Details {
|
|
||||||
detail := &ptypes.DynamicAny{}
|
|
||||||
if err := ptypes.UnmarshalAny(any, detail); err != nil {
|
|
||||||
details = append(details, err)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
details = append(details, detail.Message)
|
|
||||||
}
|
|
||||||
return details
|
|
||||||
}
|
|
||||||
|
|
||||||
// Code returns the Code of the error if it is a Status error, codes.OK if err
|
// Code returns the Code of the error if it is a Status error, codes.OK if err
|
||||||
// is nil, or codes.Unknown otherwise.
|
// is nil, or codes.Unknown otherwise.
|
||||||
func Code(err error) codes.Code {
|
func Code(err error) codes.Code {
|
||||||
|
2
vendor/google.golang.org/grpc/version.go
generated
vendored
2
vendor/google.golang.org/grpc/version.go
generated
vendored
@@ -19,4 +19,4 @@
|
|||||||
package grpc
|
package grpc
|
||||||
|
|
||||||
// Version is the current grpc version.
|
// Version is the current grpc version.
|
||||||
const Version = "1.28.0"
|
const Version = "1.29.0"
|
||||||
|
39
vendor/google.golang.org/grpc/vet.sh
generated
vendored
39
vendor/google.golang.org/grpc/vet.sh
generated
vendored
@@ -1,20 +1,22 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
if [[ `uname -a` = *"Darwin"* ]]; then
|
|
||||||
echo "It seems you are running on Mac. This script does not work on Mac. See https://github.com/grpc/grpc-go/issues/2047"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
set -ex # Exit on error; debugging enabled.
|
set -ex # Exit on error; debugging enabled.
|
||||||
set -o pipefail # Fail a pipe if any sub-command fails.
|
set -o pipefail # Fail a pipe if any sub-command fails.
|
||||||
|
|
||||||
|
# not makes sure the command passed to it does not exit with a return code of 0.
|
||||||
|
not() {
|
||||||
|
# This is required instead of the earlier (! $COMMAND) because subshells and
|
||||||
|
# pipefail don't work the same on Darwin as in Linux.
|
||||||
|
! "$@"
|
||||||
|
}
|
||||||
|
|
||||||
die() {
|
die() {
|
||||||
echo "$@" >&2
|
echo "$@" >&2
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
fail_on_output() {
|
fail_on_output() {
|
||||||
tee /dev/stderr | (! read)
|
tee /dev/stderr | not read
|
||||||
}
|
}
|
||||||
|
|
||||||
# Check to make sure it's safe to modify the user's git repo.
|
# Check to make sure it's safe to modify the user's git repo.
|
||||||
@@ -60,7 +62,7 @@ if [[ "$1" = "-install" ]]; then
|
|||||||
unzip ${PROTOC_FILENAME}
|
unzip ${PROTOC_FILENAME}
|
||||||
bin/protoc --version
|
bin/protoc --version
|
||||||
popd
|
popd
|
||||||
elif ! which protoc > /dev/null; then
|
elif not which protoc > /dev/null; then
|
||||||
die "Please install protoc into your path"
|
die "Please install protoc into your path"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@@ -70,21 +72,21 @@ elif [[ "$#" -ne 0 ]]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# - Ensure all source files contain a copyright message.
|
# - Ensure all source files contain a copyright message.
|
||||||
(! git grep -L "\(Copyright [0-9]\{4,\} gRPC authors\)\|DO NOT EDIT" -- '*.go')
|
not git grep -L "\(Copyright [0-9]\{4,\} gRPC authors\)\|DO NOT EDIT" -- '*.go'
|
||||||
|
|
||||||
# - Make sure all tests in grpc and grpc/test use leakcheck via Teardown.
|
# - Make sure all tests in grpc and grpc/test use leakcheck via Teardown.
|
||||||
(! grep 'func Test[^(]' *_test.go)
|
not grep 'func Test[^(]' *_test.go
|
||||||
(! grep 'func Test[^(]' test/*.go)
|
not grep 'func Test[^(]' test/*.go
|
||||||
|
|
||||||
# - Do not import x/net/context.
|
# - Do not import x/net/context.
|
||||||
(! git grep -l 'x/net/context' -- "*.go")
|
not git grep -l 'x/net/context' -- "*.go"
|
||||||
|
|
||||||
# - Do not import math/rand for real library code. Use internal/grpcrand for
|
# - Do not import math/rand for real library code. Use internal/grpcrand for
|
||||||
# thread safety.
|
# thread safety.
|
||||||
git grep -l '"math/rand"' -- "*.go" 2>&1 | (! grep -v '^examples\|^stress\|grpcrand\|^benchmark\|wrr_test')
|
git grep -l '"math/rand"' -- "*.go" 2>&1 | not grep -v '^examples\|^stress\|grpcrand\|^benchmark\|wrr_test'
|
||||||
|
|
||||||
# - Ensure all ptypes proto packages are renamed when importing.
|
# - Ensure all ptypes proto packages are renamed when importing.
|
||||||
(! git grep "\(import \|^\s*\)\"github.com/golang/protobuf/ptypes/" -- "*.go")
|
not git grep "\(import \|^\s*\)\"github.com/golang/protobuf/ptypes/" -- "*.go"
|
||||||
|
|
||||||
# - Check imports that are illegal in appengine (until Go 1.11).
|
# - Check imports that are illegal in appengine (until Go 1.11).
|
||||||
# TODO: Remove when we drop Go 1.10 support
|
# TODO: Remove when we drop Go 1.10 support
|
||||||
@@ -92,8 +94,8 @@ go list -f {{.Dir}} ./... | xargs go run test/go_vet/vet.go
|
|||||||
|
|
||||||
# - gofmt, goimports, golint (with exceptions for generated code), go vet.
|
# - gofmt, goimports, golint (with exceptions for generated code), go vet.
|
||||||
gofmt -s -d -l . 2>&1 | fail_on_output
|
gofmt -s -d -l . 2>&1 | fail_on_output
|
||||||
goimports -l . 2>&1 | (! grep -vE "(_mock|\.pb)\.go")
|
goimports -l . 2>&1 | not grep -vE "(_mock|\.pb)\.go"
|
||||||
golint ./... 2>&1 | (! grep -vE "(_mock|\.pb)\.go:")
|
golint ./... 2>&1 | not grep -vE "(_mock|\.pb)\.go:"
|
||||||
go vet -all ./...
|
go vet -all ./...
|
||||||
|
|
||||||
misspell -error .
|
misspell -error .
|
||||||
@@ -119,9 +121,9 @@ fi
|
|||||||
SC_OUT="$(mktemp)"
|
SC_OUT="$(mktemp)"
|
||||||
staticcheck -go 1.9 -checks 'inherit,-ST1015' ./... > "${SC_OUT}" || true
|
staticcheck -go 1.9 -checks 'inherit,-ST1015' ./... > "${SC_OUT}" || true
|
||||||
# Error if anything other than deprecation warnings are printed.
|
# Error if anything other than deprecation warnings are printed.
|
||||||
(! grep -v "is deprecated:.*SA1019" "${SC_OUT}")
|
not grep -v "is deprecated:.*SA1019" "${SC_OUT}"
|
||||||
# Only ignore the following deprecated types/fields/functions.
|
# Only ignore the following deprecated types/fields/functions.
|
||||||
(! grep -Fv '.HandleResolvedAddrs
|
not grep -Fv '.HandleResolvedAddrs
|
||||||
.HandleSubConnStateChange
|
.HandleSubConnStateChange
|
||||||
.HeaderMap
|
.HeaderMap
|
||||||
.NewAddress
|
.NewAddress
|
||||||
@@ -157,4 +159,5 @@ naming.Update
|
|||||||
naming.Watcher
|
naming.Watcher
|
||||||
resolver.Backend
|
resolver.Backend
|
||||||
resolver.GRPCLB' "${SC_OUT}"
|
resolver.GRPCLB' "${SC_OUT}"
|
||||||
)
|
|
||||||
|
echo SUCCESS
|
||||||
|
5
vendor/modules.txt
vendored
5
vendor/modules.txt
vendored
@@ -54,7 +54,7 @@ github.com/imdario/mergo
|
|||||||
github.com/inconshreveable/mousetrap
|
github.com/inconshreveable/mousetrap
|
||||||
# github.com/json-iterator/go v1.1.10
|
# github.com/json-iterator/go v1.1.10
|
||||||
github.com/json-iterator/go
|
github.com/json-iterator/go
|
||||||
# github.com/kubernetes-csi/csi-lib-utils v0.7.0
|
# github.com/kubernetes-csi/csi-lib-utils v0.8.1
|
||||||
## explicit
|
## explicit
|
||||||
github.com/kubernetes-csi/csi-lib-utils/connection
|
github.com/kubernetes-csi/csi-lib-utils/connection
|
||||||
github.com/kubernetes-csi/csi-lib-utils/leaderelection
|
github.com/kubernetes-csi/csi-lib-utils/leaderelection
|
||||||
@@ -143,7 +143,7 @@ google.golang.org/appengine/internal/urlfetch
|
|||||||
google.golang.org/appengine/urlfetch
|
google.golang.org/appengine/urlfetch
|
||||||
# google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013
|
# google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013
|
||||||
google.golang.org/genproto/googleapis/rpc/status
|
google.golang.org/genproto/googleapis/rpc/status
|
||||||
# google.golang.org/grpc v1.28.0
|
# google.golang.org/grpc v1.29.0
|
||||||
## explicit
|
## explicit
|
||||||
google.golang.org/grpc
|
google.golang.org/grpc
|
||||||
google.golang.org/grpc/attributes
|
google.golang.org/grpc/attributes
|
||||||
@@ -172,6 +172,7 @@ google.golang.org/grpc/internal/grpcsync
|
|||||||
google.golang.org/grpc/internal/grpcutil
|
google.golang.org/grpc/internal/grpcutil
|
||||||
google.golang.org/grpc/internal/resolver/dns
|
google.golang.org/grpc/internal/resolver/dns
|
||||||
google.golang.org/grpc/internal/resolver/passthrough
|
google.golang.org/grpc/internal/resolver/passthrough
|
||||||
|
google.golang.org/grpc/internal/status
|
||||||
google.golang.org/grpc/internal/syscall
|
google.golang.org/grpc/internal/syscall
|
||||||
google.golang.org/grpc/internal/transport
|
google.golang.org/grpc/internal/transport
|
||||||
google.golang.org/grpc/keepalive
|
google.golang.org/grpc/keepalive
|
||||||
|
Reference in New Issue
Block a user