mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-11-09 16:00:22 +00:00
rebase: bump github.com/hashicorp/vault/api from 1.2.0 to 1.3.0
Bumps [github.com/hashicorp/vault/api](https://github.com/hashicorp/vault) from 1.2.0 to 1.3.0. - [Release notes](https://github.com/hashicorp/vault/releases) - [Changelog](https://github.com/hashicorp/vault/blob/main/CHANGELOG.md) - [Commits](https://github.com/hashicorp/vault/compare/v1.2.0...v1.3.0) --- updated-dependencies: - dependency-name: github.com/hashicorp/vault/api dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
This commit is contained in:
parent
9a3170bf77
commit
b344a9f463
6
go.mod
6
go.mod
@ -9,11 +9,11 @@ require (
|
|||||||
github.com/container-storage-interface/spec v1.5.0
|
github.com/container-storage-interface/spec v1.5.0
|
||||||
github.com/csi-addons/replication-lib-utils v0.2.0
|
github.com/csi-addons/replication-lib-utils v0.2.0
|
||||||
github.com/csi-addons/spec v0.1.1
|
github.com/csi-addons/spec v0.1.1
|
||||||
|
github.com/go-sql-driver/mysql v1.5.0 // indirect
|
||||||
github.com/golang/protobuf v1.5.2
|
github.com/golang/protobuf v1.5.2
|
||||||
github.com/grpc-ecosystem/go-grpc-middleware v1.3.0
|
github.com/grpc-ecosystem/go-grpc-middleware v1.3.0
|
||||||
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0
|
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0
|
||||||
github.com/hashicorp/golang-lru v0.5.4 // indirect
|
github.com/hashicorp/vault/api v1.3.0
|
||||||
github.com/hashicorp/vault/api v1.2.0
|
|
||||||
github.com/kubernetes-csi/csi-lib-utils v0.10.0
|
github.com/kubernetes-csi/csi-lib-utils v0.10.0
|
||||||
github.com/kubernetes-csi/external-snapshotter/client/v4 v4.2.0
|
github.com/kubernetes-csi/external-snapshotter/client/v4 v4.2.0
|
||||||
github.com/libopenstorage/secrets v0.0.0-20210908194121-a1d19aa9713a
|
github.com/libopenstorage/secrets v0.0.0-20210908194121-a1d19aa9713a
|
||||||
@ -22,7 +22,7 @@ require (
|
|||||||
github.com/pborman/uuid v1.2.1
|
github.com/pborman/uuid v1.2.1
|
||||||
github.com/prometheus/client_golang v1.11.0
|
github.com/prometheus/client_golang v1.11.0
|
||||||
github.com/stretchr/testify v1.7.0
|
github.com/stretchr/testify v1.7.0
|
||||||
golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e
|
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97
|
||||||
golang.org/x/sys v0.0.0-20210817190340-bfb29a6856f2
|
golang.org/x/sys v0.0.0-20210817190340-bfb29a6856f2
|
||||||
google.golang.org/grpc v1.41.0
|
google.golang.org/grpc v1.41.0
|
||||||
k8s.io/api v0.22.2
|
k8s.io/api v0.22.2
|
||||||
|
71
go.sum
71
go.sum
@ -1,4 +1,3 @@
|
|||||||
bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8=
|
|
||||||
bitbucket.org/bertimus9/systemstat v0.0.0-20180207000608-0eeff89b0690/go.mod h1:Ulb78X89vxKYgdL24HMTiXYHlyHEvruOj1ZPlqeNEZM=
|
bitbucket.org/bertimus9/systemstat v0.0.0-20180207000608-0eeff89b0690/go.mod h1:Ulb78X89vxKYgdL24HMTiXYHlyHEvruOj1ZPlqeNEZM=
|
||||||
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||||
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||||
@ -84,7 +83,6 @@ github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF0
|
|||||||
github.com/Microsoft/go-winio v0.4.13/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA=
|
github.com/Microsoft/go-winio v0.4.13/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA=
|
||||||
github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw=
|
github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw=
|
||||||
github.com/Microsoft/go-winio v0.4.15/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw=
|
github.com/Microsoft/go-winio v0.4.15/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw=
|
||||||
github.com/Microsoft/hcsshim v0.8.9/go.mod h1:5692vkUqntj1idxauYlpoINNKeqCiG6Sg38RRsjT5y8=
|
|
||||||
github.com/Microsoft/hcsshim v0.8.10-0.20200715222032-5eafd1556990/go.mod h1:ay/0dTb7NsG8QMDfsRfLHgZo/6xAJShLe1+ePPflihk=
|
github.com/Microsoft/hcsshim v0.8.10-0.20200715222032-5eafd1556990/go.mod h1:ay/0dTb7NsG8QMDfsRfLHgZo/6xAJShLe1+ePPflihk=
|
||||||
github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
|
github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
|
||||||
github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I=
|
github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I=
|
||||||
@ -118,8 +116,8 @@ github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmV
|
|||||||
github.com/armon/go-metrics v0.0.0-20190430140413-ec5e00d3c878/go.mod h1:3AMJUQhVx52RsWOnlkpikZr01T/yAVN2gn0861vByNg=
|
github.com/armon/go-metrics v0.0.0-20190430140413-ec5e00d3c878/go.mod h1:3AMJUQhVx52RsWOnlkpikZr01T/yAVN2gn0861vByNg=
|
||||||
github.com/armon/go-metrics v0.3.0/go.mod h1:zXjbSimjXTd7vOpY8B0/2LpvNvDoXBuplAD+gJD3GYs=
|
github.com/armon/go-metrics v0.3.0/go.mod h1:zXjbSimjXTd7vOpY8B0/2LpvNvDoXBuplAD+gJD3GYs=
|
||||||
github.com/armon/go-metrics v0.3.1/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc=
|
github.com/armon/go-metrics v0.3.1/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc=
|
||||||
github.com/armon/go-metrics v0.3.3 h1:a9F4rlj7EWWrbj7BYw8J8+x+ZZkJeqzNyRk8hdPF+ro=
|
github.com/armon/go-metrics v0.3.9 h1:O2sNqxBdvq8Eq5xmzljcYzAORli6RWCvEym4cJf9m18=
|
||||||
github.com/armon/go-metrics v0.3.3/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc=
|
github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc=
|
||||||
github.com/armon/go-proxyproto v0.0.0-20190211145416-68259f75880e h1:h0gP0hBU6DsA5IQduhLWGOEfIUKzJS5hhXQBSgHuF/g=
|
github.com/armon/go-proxyproto v0.0.0-20190211145416-68259f75880e h1:h0gP0hBU6DsA5IQduhLWGOEfIUKzJS5hhXQBSgHuF/g=
|
||||||
github.com/armon/go-proxyproto v0.0.0-20190211145416-68259f75880e/go.mod h1:QmP9hvJ91BbJmGVGSbutW19IC0Q9phDCLGaomwTJbgU=
|
github.com/armon/go-proxyproto v0.0.0-20190211145416-68259f75880e/go.mod h1:QmP9hvJ91BbJmGVGSbutW19IC0Q9phDCLGaomwTJbgU=
|
||||||
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
|
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
|
||||||
@ -130,7 +128,6 @@ github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:l
|
|||||||
github.com/auth0/go-jwt-middleware v1.0.1/go.mod h1:YSeUX3z6+TF2H+7padiEqNJ73Zy9vXW72U//IgN0BIM=
|
github.com/auth0/go-jwt-middleware v1.0.1/go.mod h1:YSeUX3z6+TF2H+7padiEqNJ73Zy9vXW72U//IgN0BIM=
|
||||||
github.com/aws/aws-sdk-go v1.25.37/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
|
github.com/aws/aws-sdk-go v1.25.37/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
|
||||||
github.com/aws/aws-sdk-go v1.25.41/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
|
github.com/aws/aws-sdk-go v1.25.41/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
|
||||||
github.com/aws/aws-sdk-go v1.30.27/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0=
|
|
||||||
github.com/aws/aws-sdk-go v1.35.24/go.mod h1:tlPOdRjfxPBpNIwqDj61rmsnA85v9jc0Ps9+muhnW+k=
|
github.com/aws/aws-sdk-go v1.35.24/go.mod h1:tlPOdRjfxPBpNIwqDj61rmsnA85v9jc0Ps9+muhnW+k=
|
||||||
github.com/aws/aws-sdk-go v1.38.49/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro=
|
github.com/aws/aws-sdk-go v1.38.49/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro=
|
||||||
github.com/aws/aws-sdk-go v1.41.10 h1:smSZe5mNOOWZQ+FL8scmS/t9Iple/CvlQfRAJ46i8vw=
|
github.com/aws/aws-sdk-go v1.41.10 h1:smSZe5mNOOWZQ+FL8scmS/t9Iple/CvlQfRAJ46i8vw=
|
||||||
@ -196,15 +193,12 @@ github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u9
|
|||||||
github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM=
|
github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM=
|
||||||
github.com/container-storage-interface/spec v1.5.0 h1:lvKxe3uLgqQeVQcrnL2CPQKISoKjTJxojEs9cBk+HXo=
|
github.com/container-storage-interface/spec v1.5.0 h1:lvKxe3uLgqQeVQcrnL2CPQKISoKjTJxojEs9cBk+HXo=
|
||||||
github.com/container-storage-interface/spec v1.5.0/go.mod h1:8K96oQNkJ7pFcC2R9Z1ynGGBB1I93kcS6PGg3SsOk8s=
|
github.com/container-storage-interface/spec v1.5.0/go.mod h1:8K96oQNkJ7pFcC2R9Z1ynGGBB1I93kcS6PGg3SsOk8s=
|
||||||
github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko=
|
|
||||||
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=
|
||||||
github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw=
|
github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw=
|
||||||
github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ=
|
github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ=
|
||||||
github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
|
github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
|
||||||
github.com/containerd/containerd v1.3.4/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
|
|
||||||
github.com/containerd/containerd v1.4.4/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
|
github.com/containerd/containerd v1.4.4/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
|
||||||
github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
|
github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
|
||||||
github.com/containerd/continuity v0.0.0-20200709052629-daa8e1ccc0bc/go.mod h1:cECdGN1O8G9bgKTlLhuPJimka6Xb/Gg7vYzCTNVxhvo=
|
|
||||||
github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI=
|
github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI=
|
||||||
github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0=
|
github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0=
|
||||||
github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o=
|
github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o=
|
||||||
@ -258,7 +252,6 @@ github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyG
|
|||||||
github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
||||||
github.com/docker/distribution v2.7.1+incompatible h1:a5mlkVzth6W5A4fOsS3D2EO5BUmsJpcB+cRlLU7cSug=
|
github.com/docker/distribution v2.7.1+incompatible h1:a5mlkVzth6W5A4fOsS3D2EO5BUmsJpcB+cRlLU7cSug=
|
||||||
github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
||||||
github.com/docker/docker v1.4.2-0.20200319182547-c7ad2b866182/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
|
||||||
github.com/docker/docker v20.10.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
github.com/docker/docker v20.10.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||||
github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
|
github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
|
||||||
github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
|
github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
|
||||||
@ -294,6 +287,8 @@ github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMi
|
|||||||
github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
||||||
github.com/evanphx/json-patch v4.11.0+incompatible h1:glyUF9yIYtMHzn8xaKw5rMhdWcwsYV8dZHIq5567/xs=
|
github.com/evanphx/json-patch v4.11.0+incompatible h1:glyUF9yIYtMHzn8xaKw5rMhdWcwsYV8dZHIq5567/xs=
|
||||||
github.com/evanphx/json-patch v4.11.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
github.com/evanphx/json-patch v4.11.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
||||||
|
github.com/evanphx/json-patch/v5 v5.5.0 h1:bAmFiUJ+o0o2B4OiTFeE3MqCOtyo+jjPP9iZ0VRxYUc=
|
||||||
|
github.com/evanphx/json-patch/v5 v5.5.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4=
|
||||||
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=
|
||||||
github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc=
|
github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc=
|
||||||
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
||||||
@ -366,7 +361,6 @@ github.com/go-test/deep v1.0.2 h1:onZX1rnHT3Wv6cqNgYyFOOlgVKJrksuCMCRvJStbMYw=
|
|||||||
github.com/go-test/deep v1.0.2/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
|
github.com/go-test/deep v1.0.2/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
|
||||||
github.com/go-yaml/yaml v2.1.0+incompatible/go.mod h1:w2MrLa16VYP0jy6N7M5kHaCkaLENm+P+Tv+MfurjSw0=
|
github.com/go-yaml/yaml v2.1.0+incompatible/go.mod h1:w2MrLa16VYP0jy6N7M5kHaCkaLENm+P+Tv+MfurjSw0=
|
||||||
github.com/gocql/gocql v0.0.0-20190402132108-0e1d5de854df/go.mod h1:4Fw1eo5iaEhDUs8XyuhSVCVy52Jq3L+/3GJgYkwc+/0=
|
github.com/gocql/gocql v0.0.0-20190402132108-0e1d5de854df/go.mod h1:4Fw1eo5iaEhDUs8XyuhSVCVy52Jq3L+/3GJgYkwc+/0=
|
||||||
github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4=
|
|
||||||
github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
||||||
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
||||||
github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
|
github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
|
||||||
@ -401,8 +395,9 @@ github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM
|
|||||||
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
|
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
|
||||||
github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||||
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||||
github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
|
|
||||||
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||||
|
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
|
||||||
|
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||||
github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA//k/eakGydO4jKRoRL2j92ZKSzTgj9tclaCrvXHk=
|
github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA//k/eakGydO4jKRoRL2j92ZKSzTgj9tclaCrvXHk=
|
||||||
github.com/gomodules/jsonpatch/v2 v2.2.0 h1:QBjDK/nX43P4z/Os3gnk8VeFdLDgBuMns1Wljyo607U=
|
github.com/gomodules/jsonpatch/v2 v2.2.0 h1:QBjDK/nX43P4z/Os3gnk8VeFdLDgBuMns1Wljyo607U=
|
||||||
github.com/gomodules/jsonpatch/v2 v2.2.0/go.mod h1:WXp+iVDkoLQqPudfQ9GBlwB2eZ5DKOnjQZCYdOS8GPY=
|
github.com/gomodules/jsonpatch/v2 v2.2.0/go.mod h1:WXp+iVDkoLQqPudfQ9GBlwB2eZ5DKOnjQZCYdOS8GPY=
|
||||||
@ -504,8 +499,9 @@ github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39
|
|||||||
github.com/hashicorp/go-hclog v0.16.2 h1:K4ev2ib4LdQETX5cSZBG0DVLk1jwGqSPXBjdah3veNs=
|
github.com/hashicorp/go-hclog v0.16.2 h1:K4ev2ib4LdQETX5cSZBG0DVLk1jwGqSPXBjdah3veNs=
|
||||||
github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ=
|
github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ=
|
||||||
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
|
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
|
||||||
github.com/hashicorp/go-immutable-radix v1.1.0 h1:vN9wG1D6KG6YHRTWr8512cxGOVgTMEfgEdSj/hr8MPc=
|
|
||||||
github.com/hashicorp/go-immutable-radix v1.1.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
|
github.com/hashicorp/go-immutable-radix v1.1.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
|
||||||
|
github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc=
|
||||||
|
github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
|
||||||
github.com/hashicorp/go-kms-wrapping v0.5.1 h1:Ed6Z5gV3LY3J9Ora4cwxVmV8Hyt6CPOTrQoGIPry2Ew=
|
github.com/hashicorp/go-kms-wrapping v0.5.1 h1:Ed6Z5gV3LY3J9Ora4cwxVmV8Hyt6CPOTrQoGIPry2Ew=
|
||||||
github.com/hashicorp/go-kms-wrapping v0.5.1/go.mod h1:cGIibZmMx9qlxS1pZTUrEgGqA+7u3zJyvVYMhjU2bDs=
|
github.com/hashicorp/go-kms-wrapping v0.5.1/go.mod h1:cGIibZmMx9qlxS1pZTUrEgGqA+7u3zJyvVYMhjU2bDs=
|
||||||
github.com/hashicorp/go-kms-wrapping/entropy v0.1.0 h1:xuTi5ZwjimfpvpL09jDE71smCBRpnF5xfo871BSX4gs=
|
github.com/hashicorp/go-kms-wrapping/entropy v0.1.0 h1:xuTi5ZwjimfpvpL09jDE71smCBRpnF5xfo871BSX4gs=
|
||||||
@ -520,8 +516,9 @@ github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+
|
|||||||
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
|
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
|
||||||
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
|
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
|
||||||
github.com/hashicorp/go-plugin v1.0.0/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY=
|
github.com/hashicorp/go-plugin v1.0.0/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY=
|
||||||
github.com/hashicorp/go-plugin v1.0.1 h1:4OtAfUGbnKC6yS48p0CtMX2oFYtzFZVv6rok3cRWgnE=
|
|
||||||
github.com/hashicorp/go-plugin v1.0.1/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY=
|
github.com/hashicorp/go-plugin v1.0.1/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY=
|
||||||
|
github.com/hashicorp/go-plugin v1.4.3 h1:DXmvivbWD5qdiBts9TpBC7BYL1Aia5sxbRgQB+v6UZM=
|
||||||
|
github.com/hashicorp/go-plugin v1.4.3/go.mod h1:5fGEH17QVwTTcR0zV7yhDPLLmFX9YSZ38b18Udy6vYQ=
|
||||||
github.com/hashicorp/go-raftchunking v0.6.3-0.20191002164813-7e9e8525653a h1:FmnBDwGwlTgugDGbVxwV8UavqSMACbGrUpfc98yFLR4=
|
github.com/hashicorp/go-raftchunking v0.6.3-0.20191002164813-7e9e8525653a h1:FmnBDwGwlTgugDGbVxwV8UavqSMACbGrUpfc98yFLR4=
|
||||||
github.com/hashicorp/go-raftchunking v0.6.3-0.20191002164813-7e9e8525653a/go.mod h1:xbXnmKqX9/+RhPkJ4zrEx4738HacP72aaUPlT2RZ4sU=
|
github.com/hashicorp/go-raftchunking v0.6.3-0.20191002164813-7e9e8525653a/go.mod h1:xbXnmKqX9/+RhPkJ4zrEx4738HacP72aaUPlT2RZ4sU=
|
||||||
github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
|
github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
|
||||||
@ -533,10 +530,18 @@ github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa
|
|||||||
github.com/hashicorp/go-rootcerts v1.0.1/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8=
|
github.com/hashicorp/go-rootcerts v1.0.1/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8=
|
||||||
github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc=
|
github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc=
|
||||||
github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8=
|
github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8=
|
||||||
|
github.com/hashicorp/go-secure-stdlib/base62 v0.1.1 h1:6KMBnfEv0/kLAz0O76sliN5mXbCDcLfs2kP7ssP7+DQ=
|
||||||
|
github.com/hashicorp/go-secure-stdlib/base62 v0.1.1/go.mod h1:EdWO6czbmthiwZ3/PUsDV+UD1D5IRU4ActiaWGwt0Yw=
|
||||||
|
github.com/hashicorp/go-secure-stdlib/mlock v0.1.1 h1:cCRo8gK7oq6A2L6LICkUZ+/a5rLiRXFMf1Qd4xSwxTc=
|
||||||
|
github.com/hashicorp/go-secure-stdlib/mlock v0.1.1/go.mod h1:zq93CJChV6L9QTfGKtfBxKqD7BqqXx5O04A/ns2p5+I=
|
||||||
github.com/hashicorp/go-secure-stdlib/parseutil v0.1.1 h1:78ki3QBevHwYrVxnyVeaEz+7WtifHhauYF23es/0KlI=
|
github.com/hashicorp/go-secure-stdlib/parseutil v0.1.1 h1:78ki3QBevHwYrVxnyVeaEz+7WtifHhauYF23es/0KlI=
|
||||||
github.com/hashicorp/go-secure-stdlib/parseutil v0.1.1/go.mod h1:QmrqtbKuxxSWTN3ETMPuB+VtEiBJ/A9XhoYGv8E1uD8=
|
github.com/hashicorp/go-secure-stdlib/parseutil v0.1.1/go.mod h1:QmrqtbKuxxSWTN3ETMPuB+VtEiBJ/A9XhoYGv8E1uD8=
|
||||||
|
github.com/hashicorp/go-secure-stdlib/password v0.1.1 h1:6JzmBqXprakgFEHwBgdchsjaA9x3GyjdI568bXKxa60=
|
||||||
|
github.com/hashicorp/go-secure-stdlib/password v0.1.1/go.mod h1:9hH302QllNwu1o2TGYtSk8I8kTAN0ca1EHpwhm5Mmzo=
|
||||||
github.com/hashicorp/go-secure-stdlib/strutil v0.1.1 h1:nd0HIW15E6FG1MsnArYaHfuw9C2zgzM8LxkG5Ty/788=
|
github.com/hashicorp/go-secure-stdlib/strutil v0.1.1 h1:nd0HIW15E6FG1MsnArYaHfuw9C2zgzM8LxkG5Ty/788=
|
||||||
github.com/hashicorp/go-secure-stdlib/strutil v0.1.1/go.mod h1:gKOamz3EwoIoJq7mlMIRBpVTAUn8qPCrEclOKKWhD3U=
|
github.com/hashicorp/go-secure-stdlib/strutil v0.1.1/go.mod h1:gKOamz3EwoIoJq7mlMIRBpVTAUn8qPCrEclOKKWhD3U=
|
||||||
|
github.com/hashicorp/go-secure-stdlib/tlsutil v0.1.1 h1:Yc026VyMyIpq1UWRnakHRG01U8fJm+nEfEmjoAb00n8=
|
||||||
|
github.com/hashicorp/go-secure-stdlib/tlsutil v0.1.1/go.mod h1:l8slYwnJA26yBz+ErHpp2IRCLr0vuOMGBORIz4rRiAs=
|
||||||
github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
|
github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
|
||||||
github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc=
|
github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc=
|
||||||
github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A=
|
github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A=
|
||||||
@ -598,10 +603,9 @@ github.com/hashicorp/vault/api v1.0.5-0.20190730042357-746c0b111519/go.mod h1:i9
|
|||||||
github.com/hashicorp/vault/api v1.0.5-0.20191122173911-80fcc7907c78/go.mod h1:Uf8LaHyrYsgVgHzO2tMZKhqRGlL3UJ6XaSwW2EA1Iqo=
|
github.com/hashicorp/vault/api v1.0.5-0.20191122173911-80fcc7907c78/go.mod h1:Uf8LaHyrYsgVgHzO2tMZKhqRGlL3UJ6XaSwW2EA1Iqo=
|
||||||
github.com/hashicorp/vault/api v1.0.5-0.20200215224050-f6547fa8e820/go.mod h1:3f12BMfgDGjTsTtIUj+ZKZwSobQpZtYGFIEehOv5z1o=
|
github.com/hashicorp/vault/api v1.0.5-0.20200215224050-f6547fa8e820/go.mod h1:3f12BMfgDGjTsTtIUj+ZKZwSobQpZtYGFIEehOv5z1o=
|
||||||
github.com/hashicorp/vault/api v1.0.5-0.20200317185738-82f498082f02/go.mod h1:3f12BMfgDGjTsTtIUj+ZKZwSobQpZtYGFIEehOv5z1o=
|
github.com/hashicorp/vault/api v1.0.5-0.20200317185738-82f498082f02/go.mod h1:3f12BMfgDGjTsTtIUj+ZKZwSobQpZtYGFIEehOv5z1o=
|
||||||
github.com/hashicorp/vault/api v1.0.5-0.20200519221902-385fac77e20f/go.mod h1:euTFbi2YJgwcju3imEt919lhJKF68nN1cQPq3aA+kBE=
|
|
||||||
github.com/hashicorp/vault/api v1.0.5-0.20200902155336-f9d5ce5a171a/go.mod h1:R3Umvhlxi2TN7Ex2hzOowyeNb+SfbVWI973N+ctaFMk=
|
github.com/hashicorp/vault/api v1.0.5-0.20200902155336-f9d5ce5a171a/go.mod h1:R3Umvhlxi2TN7Ex2hzOowyeNb+SfbVWI973N+ctaFMk=
|
||||||
github.com/hashicorp/vault/api v1.2.0 h1:ysGFc6XRGbv05NsWPzuO5VTv68Lj8jtwATxRLFOpP9s=
|
github.com/hashicorp/vault/api v1.3.0 h1:uDy39PLSvy6gtKyjOCRPizy2QdFiIYSWBR2pxCEzYL8=
|
||||||
github.com/hashicorp/vault/api v1.2.0/go.mod h1:dAjw0T5shMnrfH7Q/Mst+LrcTKvStZBVs1PICEDpUqY=
|
github.com/hashicorp/vault/api v1.3.0/go.mod h1:EabNQLI0VWbWoGlA+oBLC8PXmR9D60aUVgQGvangFWQ=
|
||||||
github.com/hashicorp/vault/sdk v0.1.8/go.mod h1:tHZfc6St71twLizWNHvnnbiGFo1aq0eD2jGPLtP8kAU=
|
github.com/hashicorp/vault/sdk v0.1.8/go.mod h1:tHZfc6St71twLizWNHvnnbiGFo1aq0eD2jGPLtP8kAU=
|
||||||
github.com/hashicorp/vault/sdk v0.1.14-0.20190730042320-0dc007d98cc8/go.mod h1:B+hVj7TpuQY1Y/GPbCpffmgd+tSEwvhkWnjtSYCaS2M=
|
github.com/hashicorp/vault/sdk v0.1.14-0.20190730042320-0dc007d98cc8/go.mod h1:B+hVj7TpuQY1Y/GPbCpffmgd+tSEwvhkWnjtSYCaS2M=
|
||||||
github.com/hashicorp/vault/sdk v0.1.14-0.20191108161836-82f2b5571044/go.mod h1:PcekaFGiPJyHnFy+NZhP6ll650zEw51Ag7g/YEa+EOU=
|
github.com/hashicorp/vault/sdk v0.1.14-0.20191108161836-82f2b5571044/go.mod h1:PcekaFGiPJyHnFy+NZhP6ll650zEw51Ag7g/YEa+EOU=
|
||||||
@ -610,10 +614,9 @@ github.com/hashicorp/vault/sdk v0.1.14-0.20200305172021-03a3749f220d/go.mod h1:P
|
|||||||
github.com/hashicorp/vault/sdk v0.1.14-0.20200317185738-82f498082f02/go.mod h1:WX57W2PwkrOPQ6rVQk+dy5/htHIaB4aBM70EwKThu10=
|
github.com/hashicorp/vault/sdk v0.1.14-0.20200317185738-82f498082f02/go.mod h1:WX57W2PwkrOPQ6rVQk+dy5/htHIaB4aBM70EwKThu10=
|
||||||
github.com/hashicorp/vault/sdk v0.1.14-0.20200427170607-03332aaf8d18/go.mod h1:WX57W2PwkrOPQ6rVQk+dy5/htHIaB4aBM70EwKThu10=
|
github.com/hashicorp/vault/sdk v0.1.14-0.20200427170607-03332aaf8d18/go.mod h1:WX57W2PwkrOPQ6rVQk+dy5/htHIaB4aBM70EwKThu10=
|
||||||
github.com/hashicorp/vault/sdk v0.1.14-0.20200429182704-29fce8f27ce4/go.mod h1:WX57W2PwkrOPQ6rVQk+dy5/htHIaB4aBM70EwKThu10=
|
github.com/hashicorp/vault/sdk v0.1.14-0.20200429182704-29fce8f27ce4/go.mod h1:WX57W2PwkrOPQ6rVQk+dy5/htHIaB4aBM70EwKThu10=
|
||||||
github.com/hashicorp/vault/sdk v0.1.14-0.20200519221530-14615acda45f/go.mod h1:WX57W2PwkrOPQ6rVQk+dy5/htHIaB4aBM70EwKThu10=
|
|
||||||
github.com/hashicorp/vault/sdk v0.1.14-0.20200519221838-e0cfd64bc267/go.mod h1:WX57W2PwkrOPQ6rVQk+dy5/htHIaB4aBM70EwKThu10=
|
github.com/hashicorp/vault/sdk v0.1.14-0.20200519221838-e0cfd64bc267/go.mod h1:WX57W2PwkrOPQ6rVQk+dy5/htHIaB4aBM70EwKThu10=
|
||||||
github.com/hashicorp/vault/sdk v0.2.1 h1:S4O6Iv/dyKlE9AUTXGa7VOvZmsCvg36toPKgV4f2P4M=
|
github.com/hashicorp/vault/sdk v0.3.0 h1:kR3dpxNkhh/wr6ycaJYqp6AFT/i2xaftbfnwZduTKEY=
|
||||||
github.com/hashicorp/vault/sdk v0.2.1/go.mod h1:WfUiO1vYzfBkz1TmoE4ZGU7HD0T0Cl/rZwaxjBkgN4U=
|
github.com/hashicorp/vault/sdk v0.3.0/go.mod h1:aZ3fNuL5VNydQk8GcLJ2TV8YCRVvyaakYkhZRoVuhj0=
|
||||||
github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM=
|
github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM=
|
||||||
github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d h1:kJCB4vdITiW1eC1vq2e6IsrXKrZit1bv/TDYFGMp4BQ=
|
github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d h1:kJCB4vdITiW1eC1vq2e6IsrXKrZit1bv/TDYFGMp4BQ=
|
||||||
github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM=
|
github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM=
|
||||||
@ -644,8 +647,9 @@ github.com/jefferai/isbadcipher v0.0.0-20190226160619-51d2077c035f/go.mod h1:3J2
|
|||||||
github.com/jefferai/jsonx v1.0.0 h1:Xoz0ZbmkpBvED5W9W1B5B/zc3Oiq7oXqiW7iRV3B6EI=
|
github.com/jefferai/jsonx v1.0.0 h1:Xoz0ZbmkpBvED5W9W1B5B/zc3Oiq7oXqiW7iRV3B6EI=
|
||||||
github.com/jefferai/jsonx v1.0.0/go.mod h1:OGmqmi2tTeI/PS+qQfBDToLHHJIy/RMp24fPo8vFvoQ=
|
github.com/jefferai/jsonx v1.0.0/go.mod h1:OGmqmi2tTeI/PS+qQfBDToLHHJIy/RMp24fPo8vFvoQ=
|
||||||
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
|
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
|
||||||
|
github.com/jhump/protoreflect v1.6.0 h1:h5jfMVslIg6l29nsMs0D8Wj17RDVdNYti0vDN/PZZoE=
|
||||||
|
github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyXYWUh7ymB74=
|
||||||
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
|
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
|
||||||
github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik=
|
|
||||||
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
|
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
|
||||||
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
|
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
|
||||||
github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
|
github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
|
||||||
@ -806,7 +810,6 @@ github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB
|
|||||||
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.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
github.com/onsi/ginkgo v1.7.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.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
|
||||||
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
|
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
|
||||||
github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
|
github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
|
||||||
github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
|
github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
|
||||||
@ -816,7 +819,6 @@ github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGV
|
|||||||
github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
||||||
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
||||||
github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
||||||
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
|
||||||
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
|
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
|
||||||
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
|
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
|
||||||
github.com/onsi/gomega v1.15.0/go.mod h1:cIuvLEne0aoVhAgh/O6ac0Op8WWw9H6eYCriF+tEHG0=
|
github.com/onsi/gomega v1.15.0/go.mod h1:cIuvLEne0aoVhAgh/O6ac0Op8WWw9H6eYCriF+tEHG0=
|
||||||
@ -832,7 +834,6 @@ github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59P
|
|||||||
github.com/opencontainers/runc v1.0.0-rc95/go.mod h1:z+bZxa/+Tz/FmYVWkhUajJdzFeOqjc5vrqskhVyHGUM=
|
github.com/opencontainers/runc v1.0.0-rc95/go.mod h1:z+bZxa/+Tz/FmYVWkhUajJdzFeOqjc5vrqskhVyHGUM=
|
||||||
github.com/opencontainers/runc v1.0.2 h1:opHZMaswlyxz1OuGpBE53Dwe4/xF7EZTY0A2L/FpCOg=
|
github.com/opencontainers/runc v1.0.2 h1:opHZMaswlyxz1OuGpBE53Dwe4/xF7EZTY0A2L/FpCOg=
|
||||||
github.com/opencontainers/runc v1.0.2/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0=
|
github.com/opencontainers/runc v1.0.2/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0=
|
||||||
github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
|
||||||
github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
||||||
github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
||||||
github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo=
|
github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo=
|
||||||
@ -869,7 +870,6 @@ github.com/pierrec/lz4 v2.2.6+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi
|
|||||||
github.com/pierrec/lz4 v2.5.2+incompatible h1:WCjObylUIOlKy/+7Abdn34TLIkXiA4UWUMhxq9m9ZXI=
|
github.com/pierrec/lz4 v2.5.2+incompatible h1:WCjObylUIOlKy/+7Abdn34TLIkXiA4UWUMhxq9m9ZXI=
|
||||||
github.com/pierrec/lz4 v2.5.2+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
|
github.com/pierrec/lz4 v2.5.2+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
|
||||||
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
github.com/pkg/errors v0.8.1-0.20171018195549-f15c970de5b7/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
|
||||||
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
@ -955,7 +955,6 @@ github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4 h1:udFKJ0aHUL60LboW/A+D
|
|||||||
github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc=
|
github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc=
|
||||||
github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4=
|
github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4=
|
||||||
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
||||||
github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
|
|
||||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
||||||
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
|
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
|
||||||
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
||||||
@ -975,14 +974,12 @@ github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B
|
|||||||
github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc=
|
github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc=
|
||||||
github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
|
github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
|
||||||
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
|
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
|
||||||
github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
|
|
||||||
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
|
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
|
||||||
github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE=
|
github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE=
|
||||||
github.com/spf13/cobra v1.1.3 h1:xghbfqPkxzxP3C/f3n5DdpAbdKLj4ZE4BWQI362l53M=
|
github.com/spf13/cobra v1.1.3 h1:xghbfqPkxzxP3C/f3n5DdpAbdKLj4ZE4BWQI362l53M=
|
||||||
github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo=
|
github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo=
|
||||||
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
|
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
|
||||||
github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
||||||
github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
|
||||||
github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
||||||
github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
||||||
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
||||||
@ -1013,7 +1010,6 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1
|
|||||||
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
|
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
|
||||||
github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
|
github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
|
||||||
github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8=
|
github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8=
|
||||||
github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
|
|
||||||
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
|
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
|
||||||
github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
|
github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
|
||||||
github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
|
github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
|
||||||
@ -1081,9 +1077,9 @@ go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqe
|
|||||||
go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5/go.mod h1:nmDLcffg48OtT/PSW0Hg7FvpRQsQh5OSqIylirxKC7o=
|
go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5/go.mod h1:nmDLcffg48OtT/PSW0Hg7FvpRQsQh5OSqIylirxKC7o=
|
||||||
go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
||||||
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
||||||
go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
|
|
||||||
go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw=
|
|
||||||
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
||||||
|
go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE=
|
||||||
|
go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
||||||
go.uber.org/goleak v1.1.10 h1:z+mqJhf6ss6BSfSM671tgKyZBFPTTJM+HLxnhPC3wu0=
|
go.uber.org/goleak v1.1.10 h1:z+mqJhf6ss6BSfSM671tgKyZBFPTTJM+HLxnhPC3wu0=
|
||||||
go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=
|
go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=
|
||||||
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
|
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
|
||||||
@ -1095,7 +1091,6 @@ go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo=
|
|||||||
go.uber.org/zap v1.19.0 h1:mZQZefskPPCMIBCSEH0v2/iUqqLrYtaeqwD6FUGUnFE=
|
go.uber.org/zap v1.19.0 h1:mZQZefskPPCMIBCSEH0v2/iUqqLrYtaeqwD6FUGUnFE=
|
||||||
go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI=
|
go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI=
|
||||||
golang.org/x/arch v0.0.0-20180920145803-b19384d3c130/go.mod h1:cYlCBUl1MsqxdiKgmc4uh7TxZfWSFLOGSRR090WDxt8=
|
golang.org/x/arch v0.0.0-20180920145803-b19384d3c130/go.mod h1:cYlCBUl1MsqxdiKgmc4uh7TxZfWSFLOGSRR090WDxt8=
|
||||||
golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
|
||||||
golang.org/x/crypto v0.0.0-20180820150726-614d502a4dac/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
golang.org/x/crypto v0.0.0-20180820150726-614d502a4dac/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||||
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||||
golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||||
@ -1109,13 +1104,12 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U
|
|||||||
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
golang.org/x/crypto v0.0.0-20200117160349-530e935923ad/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
golang.org/x/crypto v0.0.0-20200117160349-530e935923ad/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
|
||||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
|
golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
|
||||||
golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
|
golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
|
||||||
golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e h1:gsTQYXdTw2Gq7RBsWvlQ91b+aEQ6bXFUngBGuR8sPpI=
|
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 h1:/UOmuWzQfxxo9UtlXMwuQU8CMgg1eZXqTRwkSQJWKOI=
|
||||||
golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
@ -1161,6 +1155,7 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
|||||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
golang.org/x/mod v0.3.1-0.20200828183125-ce943fd02449/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.3.1-0.20200828183125-ce943fd02449/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
|
golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
@ -1253,7 +1248,6 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||||||
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190514135907-3a4b5fb9f71f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20190523142557-0e01d883c5c5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190523142557-0e01d883c5c5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
@ -1292,7 +1286,6 @@ golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||||||
golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
@ -1311,6 +1304,7 @@ golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||||||
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20210817190340-bfb29a6856f2 h1:c8PlLMqBbOHoqtjteWm5/kbe6rNY2pbRfbIMVnepueo=
|
golang.org/x/sys v0.0.0-20210817190340-bfb29a6856f2 h1:c8PlLMqBbOHoqtjteWm5/kbe6rNY2pbRfbIMVnepueo=
|
||||||
golang.org/x/sys v0.0.0-20210817190340-bfb29a6856f2/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210817190340-bfb29a6856f2/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
||||||
@ -1361,7 +1355,6 @@ golang.org/x/tools v0.0.0-20190718200317-82a3ea8a504c/go.mod h1:jcCCGcm9btYwXyDq
|
|||||||
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
|
||||||
golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
@ -1442,6 +1435,7 @@ google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCID
|
|||||||
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
|
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
|
||||||
google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
|
google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
|
||||||
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
|
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
|
||||||
|
google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
||||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
||||||
google.golang.org/genproto v0.0.0-20181219182458-5a97ab628bfb/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg=
|
google.golang.org/genproto v0.0.0-20181219182458-5a97ab628bfb/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg=
|
||||||
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
||||||
@ -1483,6 +1477,7 @@ google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6D
|
|||||||
google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||||
google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c h1:wtujag7C+4D6KMoulW9YauvK2lgdvCMS260jsqqBXr0=
|
google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c h1:wtujag7C+4D6KMoulW9YauvK2lgdvCMS260jsqqBXr0=
|
||||||
google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
|
google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
|
||||||
|
google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
||||||
google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
||||||
google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio=
|
google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio=
|
||||||
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
|
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
|
||||||
@ -1518,7 +1513,6 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba
|
|||||||
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
||||||
google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk=
|
google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk=
|
||||||
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||||
gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=
|
|
||||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
||||||
gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw=
|
gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
@ -1530,7 +1524,6 @@ gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qS
|
|||||||
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
|
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
|
||||||
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
||||||
gopkg.in/gcfg.v1 v1.2.0/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=
|
gopkg.in/gcfg.v1 v1.2.0/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=
|
||||||
gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo=
|
|
||||||
gopkg.in/h2non/gock.v1 v1.0.15/go.mod h1:sX4zAkdYX1TRGJ2JY156cFspQn4yRWn6p9EMdODlynE=
|
gopkg.in/h2non/gock.v1 v1.0.15/go.mod h1:sX4zAkdYX1TRGJ2JY156cFspQn4yRWn6p9EMdODlynE=
|
||||||
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
|
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
|
||||||
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
|
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
|
||||||
|
2
vendor/github.com/armon/go-metrics/.gitignore
generated
vendored
2
vendor/github.com/armon/go-metrics/.gitignore
generated
vendored
@ -22,3 +22,5 @@ _testmain.go
|
|||||||
*.exe
|
*.exe
|
||||||
|
|
||||||
/metrics.out
|
/metrics.out
|
||||||
|
|
||||||
|
.idea
|
||||||
|
44
vendor/github.com/armon/go-metrics/inmem.go
generated
vendored
44
vendor/github.com/armon/go-metrics/inmem.go
generated
vendored
@ -55,6 +55,10 @@ type IntervalMetrics struct {
|
|||||||
// Samples maps the key to an AggregateSample,
|
// Samples maps the key to an AggregateSample,
|
||||||
// which has the rolled up view of a sample
|
// which has the rolled up view of a sample
|
||||||
Samples map[string]SampledValue
|
Samples map[string]SampledValue
|
||||||
|
|
||||||
|
// done is closed when this interval has ended, and a new IntervalMetrics
|
||||||
|
// has been created to receive any future metrics.
|
||||||
|
done chan struct{}
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewIntervalMetrics creates a new IntervalMetrics for a given interval
|
// NewIntervalMetrics creates a new IntervalMetrics for a given interval
|
||||||
@ -65,6 +69,7 @@ func NewIntervalMetrics(intv time.Time) *IntervalMetrics {
|
|||||||
Points: make(map[string][]float32),
|
Points: make(map[string][]float32),
|
||||||
Counters: make(map[string]SampledValue),
|
Counters: make(map[string]SampledValue),
|
||||||
Samples: make(map[string]SampledValue),
|
Samples: make(map[string]SampledValue),
|
||||||
|
done: make(chan struct{}),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -245,6 +250,8 @@ func (i *InmemSink) Data() []*IntervalMetrics {
|
|||||||
copyCurrent := intervals[n-1]
|
copyCurrent := intervals[n-1]
|
||||||
current.RLock()
|
current.RLock()
|
||||||
*copyCurrent = *current
|
*copyCurrent = *current
|
||||||
|
// RWMutex is not safe to copy, so create a new instance on the copy
|
||||||
|
copyCurrent.RWMutex = sync.RWMutex{}
|
||||||
|
|
||||||
copyCurrent.Gauges = make(map[string]GaugeValue, len(current.Gauges))
|
copyCurrent.Gauges = make(map[string]GaugeValue, len(current.Gauges))
|
||||||
for k, v := range current.Gauges {
|
for k, v := range current.Gauges {
|
||||||
@ -268,33 +275,39 @@ func (i *InmemSink) Data() []*IntervalMetrics {
|
|||||||
return intervals
|
return intervals
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *InmemSink) getExistingInterval(intv time.Time) *IntervalMetrics {
|
// getInterval returns the current interval. A new interval is created if no
|
||||||
i.intervalLock.RLock()
|
// previous interval exists, or if the current time is beyond the window for the
|
||||||
defer i.intervalLock.RUnlock()
|
// current interval.
|
||||||
|
func (i *InmemSink) getInterval() *IntervalMetrics {
|
||||||
|
intv := time.Now().Truncate(i.interval)
|
||||||
|
|
||||||
|
// Attempt to return the existing interval first, because it only requires
|
||||||
|
// a read lock.
|
||||||
|
i.intervalLock.RLock()
|
||||||
n := len(i.intervals)
|
n := len(i.intervals)
|
||||||
if n > 0 && i.intervals[n-1].Interval == intv {
|
if n > 0 && i.intervals[n-1].Interval == intv {
|
||||||
|
defer i.intervalLock.RUnlock()
|
||||||
return i.intervals[n-1]
|
return i.intervals[n-1]
|
||||||
}
|
}
|
||||||
return nil
|
i.intervalLock.RUnlock()
|
||||||
}
|
|
||||||
|
|
||||||
func (i *InmemSink) createInterval(intv time.Time) *IntervalMetrics {
|
|
||||||
i.intervalLock.Lock()
|
i.intervalLock.Lock()
|
||||||
defer i.intervalLock.Unlock()
|
defer i.intervalLock.Unlock()
|
||||||
|
|
||||||
// Check for an existing interval
|
// Re-check for an existing interval now that the lock is re-acquired.
|
||||||
n := len(i.intervals)
|
n = len(i.intervals)
|
||||||
if n > 0 && i.intervals[n-1].Interval == intv {
|
if n > 0 && i.intervals[n-1].Interval == intv {
|
||||||
return i.intervals[n-1]
|
return i.intervals[n-1]
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add the current interval
|
|
||||||
current := NewIntervalMetrics(intv)
|
current := NewIntervalMetrics(intv)
|
||||||
i.intervals = append(i.intervals, current)
|
i.intervals = append(i.intervals, current)
|
||||||
n++
|
if n > 0 {
|
||||||
|
close(i.intervals[n-1].done)
|
||||||
|
}
|
||||||
|
|
||||||
// Truncate the intervals if they are too long
|
n++
|
||||||
|
// Prune old intervals if the count exceeds the max.
|
||||||
if n >= i.maxIntervals {
|
if n >= i.maxIntervals {
|
||||||
copy(i.intervals[0:], i.intervals[n-i.maxIntervals:])
|
copy(i.intervals[0:], i.intervals[n-i.maxIntervals:])
|
||||||
i.intervals = i.intervals[:i.maxIntervals]
|
i.intervals = i.intervals[:i.maxIntervals]
|
||||||
@ -302,15 +315,6 @@ func (i *InmemSink) createInterval(intv time.Time) *IntervalMetrics {
|
|||||||
return current
|
return current
|
||||||
}
|
}
|
||||||
|
|
||||||
// getInterval returns the current interval to write to
|
|
||||||
func (i *InmemSink) getInterval() *IntervalMetrics {
|
|
||||||
intv := time.Now().Truncate(i.interval)
|
|
||||||
if m := i.getExistingInterval(intv); m != nil {
|
|
||||||
return m
|
|
||||||
}
|
|
||||||
return i.createInterval(intv)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Flattens the key for formatting, removes spaces
|
// Flattens the key for formatting, removes spaces
|
||||||
func (i *InmemSink) flattenKey(parts []string) string {
|
func (i *InmemSink) flattenKey(parts []string) string {
|
||||||
buf := &bytes.Buffer{}
|
buf := &bytes.Buffer{}
|
||||||
|
33
vendor/github.com/armon/go-metrics/inmem_endpoint.go
generated
vendored
33
vendor/github.com/armon/go-metrics/inmem_endpoint.go
generated
vendored
@ -1,6 +1,7 @@
|
|||||||
package metrics
|
package metrics
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"sort"
|
"sort"
|
||||||
@ -68,6 +69,10 @@ func (i *InmemSink) DisplayMetrics(resp http.ResponseWriter, req *http.Request)
|
|||||||
interval = data[n-2]
|
interval = data[n-2]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return newMetricSummaryFromInterval(interval), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func newMetricSummaryFromInterval(interval *IntervalMetrics) MetricsSummary {
|
||||||
interval.RLock()
|
interval.RLock()
|
||||||
defer interval.RUnlock()
|
defer interval.RUnlock()
|
||||||
|
|
||||||
@ -103,7 +108,7 @@ func (i *InmemSink) DisplayMetrics(resp http.ResponseWriter, req *http.Request)
|
|||||||
summary.Counters = formatSamples(interval.Counters)
|
summary.Counters = formatSamples(interval.Counters)
|
||||||
summary.Samples = formatSamples(interval.Samples)
|
summary.Samples = formatSamples(interval.Samples)
|
||||||
|
|
||||||
return summary, nil
|
return summary
|
||||||
}
|
}
|
||||||
|
|
||||||
func formatSamples(source map[string]SampledValue) []SampledValue {
|
func formatSamples(source map[string]SampledValue) []SampledValue {
|
||||||
@ -129,3 +134,29 @@ func formatSamples(source map[string]SampledValue) []SampledValue {
|
|||||||
|
|
||||||
return output
|
return output
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Encoder interface {
|
||||||
|
Encode(interface{}) error
|
||||||
|
}
|
||||||
|
|
||||||
|
// Stream writes metrics using encoder.Encode each time an interval ends. Runs
|
||||||
|
// until the request context is cancelled, or the encoder returns an error.
|
||||||
|
// The caller is responsible for logging any errors from encoder.
|
||||||
|
func (i *InmemSink) Stream(ctx context.Context, encoder Encoder) {
|
||||||
|
interval := i.getInterval()
|
||||||
|
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case <-interval.done:
|
||||||
|
summary := newMetricSummaryFromInterval(interval)
|
||||||
|
if err := encoder.Encode(summary); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// update interval to the next one
|
||||||
|
interval = i.getInterval()
|
||||||
|
case <-ctx.Done():
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
4
vendor/github.com/armon/go-metrics/metrics.go
generated
vendored
4
vendor/github.com/armon/go-metrics/metrics.go
generated
vendored
@ -228,12 +228,12 @@ func (m *Metrics) allowMetric(key []string, labels []Label) (bool, []Label) {
|
|||||||
func (m *Metrics) collectStats() {
|
func (m *Metrics) collectStats() {
|
||||||
for {
|
for {
|
||||||
time.Sleep(m.ProfileInterval)
|
time.Sleep(m.ProfileInterval)
|
||||||
m.emitRuntimeStats()
|
m.EmitRuntimeStats()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Emits various runtime statsitics
|
// Emits various runtime statsitics
|
||||||
func (m *Metrics) emitRuntimeStats() {
|
func (m *Metrics) EmitRuntimeStats() {
|
||||||
// Export number of Goroutines
|
// Export number of Goroutines
|
||||||
numRoutines := runtime.NumGoroutine()
|
numRoutines := runtime.NumGoroutine()
|
||||||
m.SetGauge([]string{"runtime", "num_goroutines"}, float32(numRoutines))
|
m.SetGauge([]string{"runtime", "num_goroutines"}, float32(numRoutines))
|
||||||
|
7
vendor/github.com/armon/go-metrics/start.go
generated
vendored
7
vendor/github.com/armon/go-metrics/start.go
generated
vendored
@ -6,7 +6,7 @@ import (
|
|||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/hashicorp/go-immutable-radix"
|
iradix "github.com/hashicorp/go-immutable-radix"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Config is used to configure metrics settings
|
// Config is used to configure metrics settings
|
||||||
@ -48,6 +48,11 @@ func init() {
|
|||||||
globalMetrics.Store(&Metrics{sink: &BlackholeSink{}})
|
globalMetrics.Store(&Metrics{sink: &BlackholeSink{}})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Default returns the shared global metrics instance.
|
||||||
|
func Default() *Metrics {
|
||||||
|
return globalMetrics.Load().(*Metrics)
|
||||||
|
}
|
||||||
|
|
||||||
// DefaultConfig provides a sane default configuration
|
// DefaultConfig provides a sane default configuration
|
||||||
func DefaultConfig(serviceName string) *Config {
|
func DefaultConfig(serviceName string) *Config {
|
||||||
c := &Config{
|
c := &Config{
|
||||||
|
62
vendor/github.com/golang/protobuf/ptypes/empty/empty.pb.go
generated
vendored
Normal file
62
vendor/github.com/golang/protobuf/ptypes/empty/empty.pb.go
generated
vendored
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||||
|
// source: github.com/golang/protobuf/ptypes/empty/empty.proto
|
||||||
|
|
||||||
|
package empty
|
||||||
|
|
||||||
|
import (
|
||||||
|
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
||||||
|
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
||||||
|
emptypb "google.golang.org/protobuf/types/known/emptypb"
|
||||||
|
reflect "reflect"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Symbols defined in public import of google/protobuf/empty.proto.
|
||||||
|
|
||||||
|
type Empty = emptypb.Empty
|
||||||
|
|
||||||
|
var File_github_com_golang_protobuf_ptypes_empty_empty_proto protoreflect.FileDescriptor
|
||||||
|
|
||||||
|
var file_github_com_golang_protobuf_ptypes_empty_empty_proto_rawDesc = []byte{
|
||||||
|
0x0a, 0x33, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x6c,
|
||||||
|
0x61, 0x6e, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x70, 0x74, 0x79,
|
||||||
|
0x70, 0x65, 0x73, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e,
|
||||||
|
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72,
|
||||||
|
0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f,
|
||||||
|
0x74, 0x6f, 0x42, 0x2f, 0x5a, 0x2d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d,
|
||||||
|
0x2f, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
|
||||||
|
0x2f, 0x70, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x3b, 0x65, 0x6d,
|
||||||
|
0x70, 0x74, 0x79, 0x50, 0x00, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||||
|
}
|
||||||
|
|
||||||
|
var file_github_com_golang_protobuf_ptypes_empty_empty_proto_goTypes = []interface{}{}
|
||||||
|
var file_github_com_golang_protobuf_ptypes_empty_empty_proto_depIdxs = []int32{
|
||||||
|
0, // [0:0] is the sub-list for method output_type
|
||||||
|
0, // [0:0] is the sub-list for method input_type
|
||||||
|
0, // [0:0] is the sub-list for extension type_name
|
||||||
|
0, // [0:0] is the sub-list for extension extendee
|
||||||
|
0, // [0:0] is the sub-list for field type_name
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() { file_github_com_golang_protobuf_ptypes_empty_empty_proto_init() }
|
||||||
|
func file_github_com_golang_protobuf_ptypes_empty_empty_proto_init() {
|
||||||
|
if File_github_com_golang_protobuf_ptypes_empty_empty_proto != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
type x struct{}
|
||||||
|
out := protoimpl.TypeBuilder{
|
||||||
|
File: protoimpl.DescBuilder{
|
||||||
|
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||||
|
RawDescriptor: file_github_com_golang_protobuf_ptypes_empty_empty_proto_rawDesc,
|
||||||
|
NumEnums: 0,
|
||||||
|
NumMessages: 0,
|
||||||
|
NumExtensions: 0,
|
||||||
|
NumServices: 0,
|
||||||
|
},
|
||||||
|
GoTypes: file_github_com_golang_protobuf_ptypes_empty_empty_proto_goTypes,
|
||||||
|
DependencyIndexes: file_github_com_golang_protobuf_ptypes_empty_empty_proto_depIdxs,
|
||||||
|
}.Build()
|
||||||
|
File_github_com_golang_protobuf_ptypes_empty_empty_proto = out.File
|
||||||
|
file_github_com_golang_protobuf_ptypes_empty_empty_proto_rawDesc = nil
|
||||||
|
file_github_com_golang_protobuf_ptypes_empty_empty_proto_goTypes = nil
|
||||||
|
file_github_com_golang_protobuf_ptypes_empty_empty_proto_depIdxs = nil
|
||||||
|
}
|
3
vendor/github.com/golang/snappy/AUTHORS
generated
vendored
3
vendor/github.com/golang/snappy/AUTHORS
generated
vendored
@ -8,8 +8,11 @@
|
|||||||
|
|
||||||
# Please keep the list sorted.
|
# Please keep the list sorted.
|
||||||
|
|
||||||
|
Amazon.com, Inc
|
||||||
Damian Gryski <dgryski@gmail.com>
|
Damian Gryski <dgryski@gmail.com>
|
||||||
|
Eric Buth <eric@topos.com>
|
||||||
Google Inc.
|
Google Inc.
|
||||||
Jan Mercl <0xjnml@gmail.com>
|
Jan Mercl <0xjnml@gmail.com>
|
||||||
|
Klaus Post <klauspost@gmail.com>
|
||||||
Rodolfo Carvalho <rhcarvalho@gmail.com>
|
Rodolfo Carvalho <rhcarvalho@gmail.com>
|
||||||
Sebastien Binet <seb.binet@gmail.com>
|
Sebastien Binet <seb.binet@gmail.com>
|
||||||
|
4
vendor/github.com/golang/snappy/CONTRIBUTORS
generated
vendored
4
vendor/github.com/golang/snappy/CONTRIBUTORS
generated
vendored
@ -26,9 +26,13 @@
|
|||||||
|
|
||||||
# Please keep the list sorted.
|
# Please keep the list sorted.
|
||||||
|
|
||||||
|
Alex Legg <alexlegg@google.com>
|
||||||
Damian Gryski <dgryski@gmail.com>
|
Damian Gryski <dgryski@gmail.com>
|
||||||
|
Eric Buth <eric@topos.com>
|
||||||
Jan Mercl <0xjnml@gmail.com>
|
Jan Mercl <0xjnml@gmail.com>
|
||||||
|
Jonathan Swinney <jswinney@amazon.com>
|
||||||
Kai Backman <kaib@golang.org>
|
Kai Backman <kaib@golang.org>
|
||||||
|
Klaus Post <klauspost@gmail.com>
|
||||||
Marc-Antoine Ruel <maruel@chromium.org>
|
Marc-Antoine Ruel <maruel@chromium.org>
|
||||||
Nigel Tao <nigeltao@golang.org>
|
Nigel Tao <nigeltao@golang.org>
|
||||||
Rob Pike <r@golang.org>
|
Rob Pike <r@golang.org>
|
||||||
|
87
vendor/github.com/golang/snappy/decode.go
generated
vendored
87
vendor/github.com/golang/snappy/decode.go
generated
vendored
@ -52,6 +52,8 @@ const (
|
|||||||
// Otherwise, a newly allocated slice will be returned.
|
// Otherwise, a newly allocated slice will be returned.
|
||||||
//
|
//
|
||||||
// The dst and src must not overlap. It is valid to pass a nil dst.
|
// The dst and src must not overlap. It is valid to pass a nil dst.
|
||||||
|
//
|
||||||
|
// Decode handles the Snappy block format, not the Snappy stream format.
|
||||||
func Decode(dst, src []byte) ([]byte, error) {
|
func Decode(dst, src []byte) ([]byte, error) {
|
||||||
dLen, s, err := decodedLen(src)
|
dLen, s, err := decodedLen(src)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -83,6 +85,8 @@ func NewReader(r io.Reader) *Reader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Reader is an io.Reader that can read Snappy-compressed bytes.
|
// Reader is an io.Reader that can read Snappy-compressed bytes.
|
||||||
|
//
|
||||||
|
// Reader handles the Snappy stream format, not the Snappy block format.
|
||||||
type Reader struct {
|
type Reader struct {
|
||||||
r io.Reader
|
r io.Reader
|
||||||
err error
|
err error
|
||||||
@ -114,32 +118,23 @@ func (r *Reader) readFull(p []byte, allowEOF bool) (ok bool) {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read satisfies the io.Reader interface.
|
func (r *Reader) fill() error {
|
||||||
func (r *Reader) Read(p []byte) (int, error) {
|
for r.i >= r.j {
|
||||||
if r.err != nil {
|
|
||||||
return 0, r.err
|
|
||||||
}
|
|
||||||
for {
|
|
||||||
if r.i < r.j {
|
|
||||||
n := copy(p, r.decoded[r.i:r.j])
|
|
||||||
r.i += n
|
|
||||||
return n, nil
|
|
||||||
}
|
|
||||||
if !r.readFull(r.buf[:4], true) {
|
if !r.readFull(r.buf[:4], true) {
|
||||||
return 0, r.err
|
return r.err
|
||||||
}
|
}
|
||||||
chunkType := r.buf[0]
|
chunkType := r.buf[0]
|
||||||
if !r.readHeader {
|
if !r.readHeader {
|
||||||
if chunkType != chunkTypeStreamIdentifier {
|
if chunkType != chunkTypeStreamIdentifier {
|
||||||
r.err = ErrCorrupt
|
r.err = ErrCorrupt
|
||||||
return 0, r.err
|
return r.err
|
||||||
}
|
}
|
||||||
r.readHeader = true
|
r.readHeader = true
|
||||||
}
|
}
|
||||||
chunkLen := int(r.buf[1]) | int(r.buf[2])<<8 | int(r.buf[3])<<16
|
chunkLen := int(r.buf[1]) | int(r.buf[2])<<8 | int(r.buf[3])<<16
|
||||||
if chunkLen > len(r.buf) {
|
if chunkLen > len(r.buf) {
|
||||||
r.err = ErrUnsupported
|
r.err = ErrUnsupported
|
||||||
return 0, r.err
|
return r.err
|
||||||
}
|
}
|
||||||
|
|
||||||
// The chunk types are specified at
|
// The chunk types are specified at
|
||||||
@ -149,11 +144,11 @@ func (r *Reader) Read(p []byte) (int, error) {
|
|||||||
// Section 4.2. Compressed data (chunk type 0x00).
|
// Section 4.2. Compressed data (chunk type 0x00).
|
||||||
if chunkLen < checksumSize {
|
if chunkLen < checksumSize {
|
||||||
r.err = ErrCorrupt
|
r.err = ErrCorrupt
|
||||||
return 0, r.err
|
return r.err
|
||||||
}
|
}
|
||||||
buf := r.buf[:chunkLen]
|
buf := r.buf[:chunkLen]
|
||||||
if !r.readFull(buf, false) {
|
if !r.readFull(buf, false) {
|
||||||
return 0, r.err
|
return r.err
|
||||||
}
|
}
|
||||||
checksum := uint32(buf[0]) | uint32(buf[1])<<8 | uint32(buf[2])<<16 | uint32(buf[3])<<24
|
checksum := uint32(buf[0]) | uint32(buf[1])<<8 | uint32(buf[2])<<16 | uint32(buf[3])<<24
|
||||||
buf = buf[checksumSize:]
|
buf = buf[checksumSize:]
|
||||||
@ -161,19 +156,19 @@ func (r *Reader) Read(p []byte) (int, error) {
|
|||||||
n, err := DecodedLen(buf)
|
n, err := DecodedLen(buf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
r.err = err
|
r.err = err
|
||||||
return 0, r.err
|
return r.err
|
||||||
}
|
}
|
||||||
if n > len(r.decoded) {
|
if n > len(r.decoded) {
|
||||||
r.err = ErrCorrupt
|
r.err = ErrCorrupt
|
||||||
return 0, r.err
|
return r.err
|
||||||
}
|
}
|
||||||
if _, err := Decode(r.decoded, buf); err != nil {
|
if _, err := Decode(r.decoded, buf); err != nil {
|
||||||
r.err = err
|
r.err = err
|
||||||
return 0, r.err
|
return r.err
|
||||||
}
|
}
|
||||||
if crc(r.decoded[:n]) != checksum {
|
if crc(r.decoded[:n]) != checksum {
|
||||||
r.err = ErrCorrupt
|
r.err = ErrCorrupt
|
||||||
return 0, r.err
|
return r.err
|
||||||
}
|
}
|
||||||
r.i, r.j = 0, n
|
r.i, r.j = 0, n
|
||||||
continue
|
continue
|
||||||
@ -182,25 +177,25 @@ func (r *Reader) Read(p []byte) (int, error) {
|
|||||||
// Section 4.3. Uncompressed data (chunk type 0x01).
|
// Section 4.3. Uncompressed data (chunk type 0x01).
|
||||||
if chunkLen < checksumSize {
|
if chunkLen < checksumSize {
|
||||||
r.err = ErrCorrupt
|
r.err = ErrCorrupt
|
||||||
return 0, r.err
|
return r.err
|
||||||
}
|
}
|
||||||
buf := r.buf[:checksumSize]
|
buf := r.buf[:checksumSize]
|
||||||
if !r.readFull(buf, false) {
|
if !r.readFull(buf, false) {
|
||||||
return 0, r.err
|
return r.err
|
||||||
}
|
}
|
||||||
checksum := uint32(buf[0]) | uint32(buf[1])<<8 | uint32(buf[2])<<16 | uint32(buf[3])<<24
|
checksum := uint32(buf[0]) | uint32(buf[1])<<8 | uint32(buf[2])<<16 | uint32(buf[3])<<24
|
||||||
// Read directly into r.decoded instead of via r.buf.
|
// Read directly into r.decoded instead of via r.buf.
|
||||||
n := chunkLen - checksumSize
|
n := chunkLen - checksumSize
|
||||||
if n > len(r.decoded) {
|
if n > len(r.decoded) {
|
||||||
r.err = ErrCorrupt
|
r.err = ErrCorrupt
|
||||||
return 0, r.err
|
return r.err
|
||||||
}
|
}
|
||||||
if !r.readFull(r.decoded[:n], false) {
|
if !r.readFull(r.decoded[:n], false) {
|
||||||
return 0, r.err
|
return r.err
|
||||||
}
|
}
|
||||||
if crc(r.decoded[:n]) != checksum {
|
if crc(r.decoded[:n]) != checksum {
|
||||||
r.err = ErrCorrupt
|
r.err = ErrCorrupt
|
||||||
return 0, r.err
|
return r.err
|
||||||
}
|
}
|
||||||
r.i, r.j = 0, n
|
r.i, r.j = 0, n
|
||||||
continue
|
continue
|
||||||
@ -209,15 +204,15 @@ func (r *Reader) Read(p []byte) (int, error) {
|
|||||||
// Section 4.1. Stream identifier (chunk type 0xff).
|
// Section 4.1. Stream identifier (chunk type 0xff).
|
||||||
if chunkLen != len(magicBody) {
|
if chunkLen != len(magicBody) {
|
||||||
r.err = ErrCorrupt
|
r.err = ErrCorrupt
|
||||||
return 0, r.err
|
return r.err
|
||||||
}
|
}
|
||||||
if !r.readFull(r.buf[:len(magicBody)], false) {
|
if !r.readFull(r.buf[:len(magicBody)], false) {
|
||||||
return 0, r.err
|
return r.err
|
||||||
}
|
}
|
||||||
for i := 0; i < len(magicBody); i++ {
|
for i := 0; i < len(magicBody); i++ {
|
||||||
if r.buf[i] != magicBody[i] {
|
if r.buf[i] != magicBody[i] {
|
||||||
r.err = ErrCorrupt
|
r.err = ErrCorrupt
|
||||||
return 0, r.err
|
return r.err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
continue
|
continue
|
||||||
@ -226,12 +221,44 @@ func (r *Reader) Read(p []byte) (int, error) {
|
|||||||
if chunkType <= 0x7f {
|
if chunkType <= 0x7f {
|
||||||
// Section 4.5. Reserved unskippable chunks (chunk types 0x02-0x7f).
|
// Section 4.5. Reserved unskippable chunks (chunk types 0x02-0x7f).
|
||||||
r.err = ErrUnsupported
|
r.err = ErrUnsupported
|
||||||
return 0, r.err
|
return r.err
|
||||||
}
|
}
|
||||||
// Section 4.4 Padding (chunk type 0xfe).
|
// Section 4.4 Padding (chunk type 0xfe).
|
||||||
// Section 4.6. Reserved skippable chunks (chunk types 0x80-0xfd).
|
// Section 4.6. Reserved skippable chunks (chunk types 0x80-0xfd).
|
||||||
if !r.readFull(r.buf[:chunkLen], false) {
|
if !r.readFull(r.buf[:chunkLen], false) {
|
||||||
return 0, r.err
|
return r.err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read satisfies the io.Reader interface.
|
||||||
|
func (r *Reader) Read(p []byte) (int, error) {
|
||||||
|
if r.err != nil {
|
||||||
|
return 0, r.err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := r.fill(); err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
n := copy(p, r.decoded[r.i:r.j])
|
||||||
|
r.i += n
|
||||||
|
return n, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ReadByte satisfies the io.ByteReader interface.
|
||||||
|
func (r *Reader) ReadByte() (byte, error) {
|
||||||
|
if r.err != nil {
|
||||||
|
return 0, r.err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := r.fill(); err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
c := r.decoded[r.i]
|
||||||
|
r.i++
|
||||||
|
return c, nil
|
||||||
}
|
}
|
||||||
|
494
vendor/github.com/golang/snappy/decode_arm64.s
generated
vendored
Normal file
494
vendor/github.com/golang/snappy/decode_arm64.s
generated
vendored
Normal file
@ -0,0 +1,494 @@
|
|||||||
|
// Copyright 2020 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
// +build !appengine
|
||||||
|
// +build gc
|
||||||
|
// +build !noasm
|
||||||
|
|
||||||
|
#include "textflag.h"
|
||||||
|
|
||||||
|
// The asm code generally follows the pure Go code in decode_other.go, except
|
||||||
|
// where marked with a "!!!".
|
||||||
|
|
||||||
|
// func decode(dst, src []byte) int
|
||||||
|
//
|
||||||
|
// All local variables fit into registers. The non-zero stack size is only to
|
||||||
|
// spill registers and push args when issuing a CALL. The register allocation:
|
||||||
|
// - R2 scratch
|
||||||
|
// - R3 scratch
|
||||||
|
// - R4 length or x
|
||||||
|
// - R5 offset
|
||||||
|
// - R6 &src[s]
|
||||||
|
// - R7 &dst[d]
|
||||||
|
// + R8 dst_base
|
||||||
|
// + R9 dst_len
|
||||||
|
// + R10 dst_base + dst_len
|
||||||
|
// + R11 src_base
|
||||||
|
// + R12 src_len
|
||||||
|
// + R13 src_base + src_len
|
||||||
|
// - R14 used by doCopy
|
||||||
|
// - R15 used by doCopy
|
||||||
|
//
|
||||||
|
// The registers R8-R13 (marked with a "+") are set at the start of the
|
||||||
|
// function, and after a CALL returns, and are not otherwise modified.
|
||||||
|
//
|
||||||
|
// The d variable is implicitly R7 - R8, and len(dst)-d is R10 - R7.
|
||||||
|
// The s variable is implicitly R6 - R11, and len(src)-s is R13 - R6.
|
||||||
|
TEXT ·decode(SB), NOSPLIT, $56-56
|
||||||
|
// Initialize R6, R7 and R8-R13.
|
||||||
|
MOVD dst_base+0(FP), R8
|
||||||
|
MOVD dst_len+8(FP), R9
|
||||||
|
MOVD R8, R7
|
||||||
|
MOVD R8, R10
|
||||||
|
ADD R9, R10, R10
|
||||||
|
MOVD src_base+24(FP), R11
|
||||||
|
MOVD src_len+32(FP), R12
|
||||||
|
MOVD R11, R6
|
||||||
|
MOVD R11, R13
|
||||||
|
ADD R12, R13, R13
|
||||||
|
|
||||||
|
loop:
|
||||||
|
// for s < len(src)
|
||||||
|
CMP R13, R6
|
||||||
|
BEQ end
|
||||||
|
|
||||||
|
// R4 = uint32(src[s])
|
||||||
|
//
|
||||||
|
// switch src[s] & 0x03
|
||||||
|
MOVBU (R6), R4
|
||||||
|
MOVW R4, R3
|
||||||
|
ANDW $3, R3
|
||||||
|
MOVW $1, R1
|
||||||
|
CMPW R1, R3
|
||||||
|
BGE tagCopy
|
||||||
|
|
||||||
|
// ----------------------------------------
|
||||||
|
// The code below handles literal tags.
|
||||||
|
|
||||||
|
// case tagLiteral:
|
||||||
|
// x := uint32(src[s] >> 2)
|
||||||
|
// switch
|
||||||
|
MOVW $60, R1
|
||||||
|
LSRW $2, R4, R4
|
||||||
|
CMPW R4, R1
|
||||||
|
BLS tagLit60Plus
|
||||||
|
|
||||||
|
// case x < 60:
|
||||||
|
// s++
|
||||||
|
ADD $1, R6, R6
|
||||||
|
|
||||||
|
doLit:
|
||||||
|
// This is the end of the inner "switch", when we have a literal tag.
|
||||||
|
//
|
||||||
|
// We assume that R4 == x and x fits in a uint32, where x is the variable
|
||||||
|
// used in the pure Go decode_other.go code.
|
||||||
|
|
||||||
|
// length = int(x) + 1
|
||||||
|
//
|
||||||
|
// Unlike the pure Go code, we don't need to check if length <= 0 because
|
||||||
|
// R4 can hold 64 bits, so the increment cannot overflow.
|
||||||
|
ADD $1, R4, R4
|
||||||
|
|
||||||
|
// Prepare to check if copying length bytes will run past the end of dst or
|
||||||
|
// src.
|
||||||
|
//
|
||||||
|
// R2 = len(dst) - d
|
||||||
|
// R3 = len(src) - s
|
||||||
|
MOVD R10, R2
|
||||||
|
SUB R7, R2, R2
|
||||||
|
MOVD R13, R3
|
||||||
|
SUB R6, R3, R3
|
||||||
|
|
||||||
|
// !!! Try a faster technique for short (16 or fewer bytes) copies.
|
||||||
|
//
|
||||||
|
// if length > 16 || len(dst)-d < 16 || len(src)-s < 16 {
|
||||||
|
// goto callMemmove // Fall back on calling runtime·memmove.
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// The C++ snappy code calls this TryFastAppend. It also checks len(src)-s
|
||||||
|
// against 21 instead of 16, because it cannot assume that all of its input
|
||||||
|
// is contiguous in memory and so it needs to leave enough source bytes to
|
||||||
|
// read the next tag without refilling buffers, but Go's Decode assumes
|
||||||
|
// contiguousness (the src argument is a []byte).
|
||||||
|
CMP $16, R4
|
||||||
|
BGT callMemmove
|
||||||
|
CMP $16, R2
|
||||||
|
BLT callMemmove
|
||||||
|
CMP $16, R3
|
||||||
|
BLT callMemmove
|
||||||
|
|
||||||
|
// !!! Implement the copy from src to dst as a 16-byte load and store.
|
||||||
|
// (Decode's documentation says that dst and src must not overlap.)
|
||||||
|
//
|
||||||
|
// This always copies 16 bytes, instead of only length bytes, but that's
|
||||||
|
// OK. If the input is a valid Snappy encoding then subsequent iterations
|
||||||
|
// will fix up the overrun. Otherwise, Decode returns a nil []byte (and a
|
||||||
|
// non-nil error), so the overrun will be ignored.
|
||||||
|
//
|
||||||
|
// Note that on arm64, it is legal and cheap to issue unaligned 8-byte or
|
||||||
|
// 16-byte loads and stores. This technique probably wouldn't be as
|
||||||
|
// effective on architectures that are fussier about alignment.
|
||||||
|
LDP 0(R6), (R14, R15)
|
||||||
|
STP (R14, R15), 0(R7)
|
||||||
|
|
||||||
|
// d += length
|
||||||
|
// s += length
|
||||||
|
ADD R4, R7, R7
|
||||||
|
ADD R4, R6, R6
|
||||||
|
B loop
|
||||||
|
|
||||||
|
callMemmove:
|
||||||
|
// if length > len(dst)-d || length > len(src)-s { etc }
|
||||||
|
CMP R2, R4
|
||||||
|
BGT errCorrupt
|
||||||
|
CMP R3, R4
|
||||||
|
BGT errCorrupt
|
||||||
|
|
||||||
|
// copy(dst[d:], src[s:s+length])
|
||||||
|
//
|
||||||
|
// This means calling runtime·memmove(&dst[d], &src[s], length), so we push
|
||||||
|
// R7, R6 and R4 as arguments. Coincidentally, we also need to spill those
|
||||||
|
// three registers to the stack, to save local variables across the CALL.
|
||||||
|
MOVD R7, 8(RSP)
|
||||||
|
MOVD R6, 16(RSP)
|
||||||
|
MOVD R4, 24(RSP)
|
||||||
|
MOVD R7, 32(RSP)
|
||||||
|
MOVD R6, 40(RSP)
|
||||||
|
MOVD R4, 48(RSP)
|
||||||
|
CALL runtime·memmove(SB)
|
||||||
|
|
||||||
|
// Restore local variables: unspill registers from the stack and
|
||||||
|
// re-calculate R8-R13.
|
||||||
|
MOVD 32(RSP), R7
|
||||||
|
MOVD 40(RSP), R6
|
||||||
|
MOVD 48(RSP), R4
|
||||||
|
MOVD dst_base+0(FP), R8
|
||||||
|
MOVD dst_len+8(FP), R9
|
||||||
|
MOVD R8, R10
|
||||||
|
ADD R9, R10, R10
|
||||||
|
MOVD src_base+24(FP), R11
|
||||||
|
MOVD src_len+32(FP), R12
|
||||||
|
MOVD R11, R13
|
||||||
|
ADD R12, R13, R13
|
||||||
|
|
||||||
|
// d += length
|
||||||
|
// s += length
|
||||||
|
ADD R4, R7, R7
|
||||||
|
ADD R4, R6, R6
|
||||||
|
B loop
|
||||||
|
|
||||||
|
tagLit60Plus:
|
||||||
|
// !!! This fragment does the
|
||||||
|
//
|
||||||
|
// s += x - 58; if uint(s) > uint(len(src)) { etc }
|
||||||
|
//
|
||||||
|
// checks. In the asm version, we code it once instead of once per switch case.
|
||||||
|
ADD R4, R6, R6
|
||||||
|
SUB $58, R6, R6
|
||||||
|
MOVD R6, R3
|
||||||
|
SUB R11, R3, R3
|
||||||
|
CMP R12, R3
|
||||||
|
BGT errCorrupt
|
||||||
|
|
||||||
|
// case x == 60:
|
||||||
|
MOVW $61, R1
|
||||||
|
CMPW R1, R4
|
||||||
|
BEQ tagLit61
|
||||||
|
BGT tagLit62Plus
|
||||||
|
|
||||||
|
// x = uint32(src[s-1])
|
||||||
|
MOVBU -1(R6), R4
|
||||||
|
B doLit
|
||||||
|
|
||||||
|
tagLit61:
|
||||||
|
// case x == 61:
|
||||||
|
// x = uint32(src[s-2]) | uint32(src[s-1])<<8
|
||||||
|
MOVHU -2(R6), R4
|
||||||
|
B doLit
|
||||||
|
|
||||||
|
tagLit62Plus:
|
||||||
|
CMPW $62, R4
|
||||||
|
BHI tagLit63
|
||||||
|
|
||||||
|
// case x == 62:
|
||||||
|
// x = uint32(src[s-3]) | uint32(src[s-2])<<8 | uint32(src[s-1])<<16
|
||||||
|
MOVHU -3(R6), R4
|
||||||
|
MOVBU -1(R6), R3
|
||||||
|
ORR R3<<16, R4
|
||||||
|
B doLit
|
||||||
|
|
||||||
|
tagLit63:
|
||||||
|
// case x == 63:
|
||||||
|
// x = uint32(src[s-4]) | uint32(src[s-3])<<8 | uint32(src[s-2])<<16 | uint32(src[s-1])<<24
|
||||||
|
MOVWU -4(R6), R4
|
||||||
|
B doLit
|
||||||
|
|
||||||
|
// The code above handles literal tags.
|
||||||
|
// ----------------------------------------
|
||||||
|
// The code below handles copy tags.
|
||||||
|
|
||||||
|
tagCopy4:
|
||||||
|
// case tagCopy4:
|
||||||
|
// s += 5
|
||||||
|
ADD $5, R6, R6
|
||||||
|
|
||||||
|
// if uint(s) > uint(len(src)) { etc }
|
||||||
|
MOVD R6, R3
|
||||||
|
SUB R11, R3, R3
|
||||||
|
CMP R12, R3
|
||||||
|
BGT errCorrupt
|
||||||
|
|
||||||
|
// length = 1 + int(src[s-5])>>2
|
||||||
|
MOVD $1, R1
|
||||||
|
ADD R4>>2, R1, R4
|
||||||
|
|
||||||
|
// offset = int(uint32(src[s-4]) | uint32(src[s-3])<<8 | uint32(src[s-2])<<16 | uint32(src[s-1])<<24)
|
||||||
|
MOVWU -4(R6), R5
|
||||||
|
B doCopy
|
||||||
|
|
||||||
|
tagCopy2:
|
||||||
|
// case tagCopy2:
|
||||||
|
// s += 3
|
||||||
|
ADD $3, R6, R6
|
||||||
|
|
||||||
|
// if uint(s) > uint(len(src)) { etc }
|
||||||
|
MOVD R6, R3
|
||||||
|
SUB R11, R3, R3
|
||||||
|
CMP R12, R3
|
||||||
|
BGT errCorrupt
|
||||||
|
|
||||||
|
// length = 1 + int(src[s-3])>>2
|
||||||
|
MOVD $1, R1
|
||||||
|
ADD R4>>2, R1, R4
|
||||||
|
|
||||||
|
// offset = int(uint32(src[s-2]) | uint32(src[s-1])<<8)
|
||||||
|
MOVHU -2(R6), R5
|
||||||
|
B doCopy
|
||||||
|
|
||||||
|
tagCopy:
|
||||||
|
// We have a copy tag. We assume that:
|
||||||
|
// - R3 == src[s] & 0x03
|
||||||
|
// - R4 == src[s]
|
||||||
|
CMP $2, R3
|
||||||
|
BEQ tagCopy2
|
||||||
|
BGT tagCopy4
|
||||||
|
|
||||||
|
// case tagCopy1:
|
||||||
|
// s += 2
|
||||||
|
ADD $2, R6, R6
|
||||||
|
|
||||||
|
// if uint(s) > uint(len(src)) { etc }
|
||||||
|
MOVD R6, R3
|
||||||
|
SUB R11, R3, R3
|
||||||
|
CMP R12, R3
|
||||||
|
BGT errCorrupt
|
||||||
|
|
||||||
|
// offset = int(uint32(src[s-2])&0xe0<<3 | uint32(src[s-1]))
|
||||||
|
MOVD R4, R5
|
||||||
|
AND $0xe0, R5
|
||||||
|
MOVBU -1(R6), R3
|
||||||
|
ORR R5<<3, R3, R5
|
||||||
|
|
||||||
|
// length = 4 + int(src[s-2])>>2&0x7
|
||||||
|
MOVD $7, R1
|
||||||
|
AND R4>>2, R1, R4
|
||||||
|
ADD $4, R4, R4
|
||||||
|
|
||||||
|
doCopy:
|
||||||
|
// This is the end of the outer "switch", when we have a copy tag.
|
||||||
|
//
|
||||||
|
// We assume that:
|
||||||
|
// - R4 == length && R4 > 0
|
||||||
|
// - R5 == offset
|
||||||
|
|
||||||
|
// if offset <= 0 { etc }
|
||||||
|
MOVD $0, R1
|
||||||
|
CMP R1, R5
|
||||||
|
BLE errCorrupt
|
||||||
|
|
||||||
|
// if d < offset { etc }
|
||||||
|
MOVD R7, R3
|
||||||
|
SUB R8, R3, R3
|
||||||
|
CMP R5, R3
|
||||||
|
BLT errCorrupt
|
||||||
|
|
||||||
|
// if length > len(dst)-d { etc }
|
||||||
|
MOVD R10, R3
|
||||||
|
SUB R7, R3, R3
|
||||||
|
CMP R3, R4
|
||||||
|
BGT errCorrupt
|
||||||
|
|
||||||
|
// forwardCopy(dst[d:d+length], dst[d-offset:]); d += length
|
||||||
|
//
|
||||||
|
// Set:
|
||||||
|
// - R14 = len(dst)-d
|
||||||
|
// - R15 = &dst[d-offset]
|
||||||
|
MOVD R10, R14
|
||||||
|
SUB R7, R14, R14
|
||||||
|
MOVD R7, R15
|
||||||
|
SUB R5, R15, R15
|
||||||
|
|
||||||
|
// !!! Try a faster technique for short (16 or fewer bytes) forward copies.
|
||||||
|
//
|
||||||
|
// First, try using two 8-byte load/stores, similar to the doLit technique
|
||||||
|
// above. Even if dst[d:d+length] and dst[d-offset:] can overlap, this is
|
||||||
|
// still OK if offset >= 8. Note that this has to be two 8-byte load/stores
|
||||||
|
// and not one 16-byte load/store, and the first store has to be before the
|
||||||
|
// second load, due to the overlap if offset is in the range [8, 16).
|
||||||
|
//
|
||||||
|
// if length > 16 || offset < 8 || len(dst)-d < 16 {
|
||||||
|
// goto slowForwardCopy
|
||||||
|
// }
|
||||||
|
// copy 16 bytes
|
||||||
|
// d += length
|
||||||
|
CMP $16, R4
|
||||||
|
BGT slowForwardCopy
|
||||||
|
CMP $8, R5
|
||||||
|
BLT slowForwardCopy
|
||||||
|
CMP $16, R14
|
||||||
|
BLT slowForwardCopy
|
||||||
|
MOVD 0(R15), R2
|
||||||
|
MOVD R2, 0(R7)
|
||||||
|
MOVD 8(R15), R3
|
||||||
|
MOVD R3, 8(R7)
|
||||||
|
ADD R4, R7, R7
|
||||||
|
B loop
|
||||||
|
|
||||||
|
slowForwardCopy:
|
||||||
|
// !!! If the forward copy is longer than 16 bytes, or if offset < 8, we
|
||||||
|
// can still try 8-byte load stores, provided we can overrun up to 10 extra
|
||||||
|
// bytes. As above, the overrun will be fixed up by subsequent iterations
|
||||||
|
// of the outermost loop.
|
||||||
|
//
|
||||||
|
// The C++ snappy code calls this technique IncrementalCopyFastPath. Its
|
||||||
|
// commentary says:
|
||||||
|
//
|
||||||
|
// ----
|
||||||
|
//
|
||||||
|
// The main part of this loop is a simple copy of eight bytes at a time
|
||||||
|
// until we've copied (at least) the requested amount of bytes. However,
|
||||||
|
// if d and d-offset are less than eight bytes apart (indicating a
|
||||||
|
// repeating pattern of length < 8), we first need to expand the pattern in
|
||||||
|
// order to get the correct results. For instance, if the buffer looks like
|
||||||
|
// this, with the eight-byte <d-offset> and <d> patterns marked as
|
||||||
|
// intervals:
|
||||||
|
//
|
||||||
|
// abxxxxxxxxxxxx
|
||||||
|
// [------] d-offset
|
||||||
|
// [------] d
|
||||||
|
//
|
||||||
|
// a single eight-byte copy from <d-offset> to <d> will repeat the pattern
|
||||||
|
// once, after which we can move <d> two bytes without moving <d-offset>:
|
||||||
|
//
|
||||||
|
// ababxxxxxxxxxx
|
||||||
|
// [------] d-offset
|
||||||
|
// [------] d
|
||||||
|
//
|
||||||
|
// and repeat the exercise until the two no longer overlap.
|
||||||
|
//
|
||||||
|
// This allows us to do very well in the special case of one single byte
|
||||||
|
// repeated many times, without taking a big hit for more general cases.
|
||||||
|
//
|
||||||
|
// The worst case of extra writing past the end of the match occurs when
|
||||||
|
// offset == 1 and length == 1; the last copy will read from byte positions
|
||||||
|
// [0..7] and write to [4..11], whereas it was only supposed to write to
|
||||||
|
// position 1. Thus, ten excess bytes.
|
||||||
|
//
|
||||||
|
// ----
|
||||||
|
//
|
||||||
|
// That "10 byte overrun" worst case is confirmed by Go's
|
||||||
|
// TestSlowForwardCopyOverrun, which also tests the fixUpSlowForwardCopy
|
||||||
|
// and finishSlowForwardCopy algorithm.
|
||||||
|
//
|
||||||
|
// if length > len(dst)-d-10 {
|
||||||
|
// goto verySlowForwardCopy
|
||||||
|
// }
|
||||||
|
SUB $10, R14, R14
|
||||||
|
CMP R14, R4
|
||||||
|
BGT verySlowForwardCopy
|
||||||
|
|
||||||
|
makeOffsetAtLeast8:
|
||||||
|
// !!! As above, expand the pattern so that offset >= 8 and we can use
|
||||||
|
// 8-byte load/stores.
|
||||||
|
//
|
||||||
|
// for offset < 8 {
|
||||||
|
// copy 8 bytes from dst[d-offset:] to dst[d:]
|
||||||
|
// length -= offset
|
||||||
|
// d += offset
|
||||||
|
// offset += offset
|
||||||
|
// // The two previous lines together means that d-offset, and therefore
|
||||||
|
// // R15, is unchanged.
|
||||||
|
// }
|
||||||
|
CMP $8, R5
|
||||||
|
BGE fixUpSlowForwardCopy
|
||||||
|
MOVD (R15), R3
|
||||||
|
MOVD R3, (R7)
|
||||||
|
SUB R5, R4, R4
|
||||||
|
ADD R5, R7, R7
|
||||||
|
ADD R5, R5, R5
|
||||||
|
B makeOffsetAtLeast8
|
||||||
|
|
||||||
|
fixUpSlowForwardCopy:
|
||||||
|
// !!! Add length (which might be negative now) to d (implied by R7 being
|
||||||
|
// &dst[d]) so that d ends up at the right place when we jump back to the
|
||||||
|
// top of the loop. Before we do that, though, we save R7 to R2 so that, if
|
||||||
|
// length is positive, copying the remaining length bytes will write to the
|
||||||
|
// right place.
|
||||||
|
MOVD R7, R2
|
||||||
|
ADD R4, R7, R7
|
||||||
|
|
||||||
|
finishSlowForwardCopy:
|
||||||
|
// !!! Repeat 8-byte load/stores until length <= 0. Ending with a negative
|
||||||
|
// length means that we overrun, but as above, that will be fixed up by
|
||||||
|
// subsequent iterations of the outermost loop.
|
||||||
|
MOVD $0, R1
|
||||||
|
CMP R1, R4
|
||||||
|
BLE loop
|
||||||
|
MOVD (R15), R3
|
||||||
|
MOVD R3, (R2)
|
||||||
|
ADD $8, R15, R15
|
||||||
|
ADD $8, R2, R2
|
||||||
|
SUB $8, R4, R4
|
||||||
|
B finishSlowForwardCopy
|
||||||
|
|
||||||
|
verySlowForwardCopy:
|
||||||
|
// verySlowForwardCopy is a simple implementation of forward copy. In C
|
||||||
|
// parlance, this is a do/while loop instead of a while loop, since we know
|
||||||
|
// that length > 0. In Go syntax:
|
||||||
|
//
|
||||||
|
// for {
|
||||||
|
// dst[d] = dst[d - offset]
|
||||||
|
// d++
|
||||||
|
// length--
|
||||||
|
// if length == 0 {
|
||||||
|
// break
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
MOVB (R15), R3
|
||||||
|
MOVB R3, (R7)
|
||||||
|
ADD $1, R15, R15
|
||||||
|
ADD $1, R7, R7
|
||||||
|
SUB $1, R4, R4
|
||||||
|
CBNZ R4, verySlowForwardCopy
|
||||||
|
B loop
|
||||||
|
|
||||||
|
// The code above handles copy tags.
|
||||||
|
// ----------------------------------------
|
||||||
|
|
||||||
|
end:
|
||||||
|
// This is the end of the "for s < len(src)".
|
||||||
|
//
|
||||||
|
// if d != len(dst) { etc }
|
||||||
|
CMP R10, R7
|
||||||
|
BNE errCorrupt
|
||||||
|
|
||||||
|
// return 0
|
||||||
|
MOVD $0, ret+48(FP)
|
||||||
|
RET
|
||||||
|
|
||||||
|
errCorrupt:
|
||||||
|
// return decodeErrCodeCorrupt
|
||||||
|
MOVD $1, R2
|
||||||
|
MOVD R2, ret+48(FP)
|
||||||
|
RET
|
@ -5,6 +5,7 @@
|
|||||||
// +build !appengine
|
// +build !appengine
|
||||||
// +build gc
|
// +build gc
|
||||||
// +build !noasm
|
// +build !noasm
|
||||||
|
// +build amd64 arm64
|
||||||
|
|
||||||
package snappy
|
package snappy
|
||||||
|
|
24
vendor/github.com/golang/snappy/decode_other.go
generated
vendored
24
vendor/github.com/golang/snappy/decode_other.go
generated
vendored
@ -2,7 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// +build !amd64 appengine !gc noasm
|
// +build !amd64,!arm64 appengine !gc noasm
|
||||||
|
|
||||||
package snappy
|
package snappy
|
||||||
|
|
||||||
@ -85,14 +85,28 @@ func decode(dst, src []byte) int {
|
|||||||
if offset <= 0 || d < offset || length > len(dst)-d {
|
if offset <= 0 || d < offset || length > len(dst)-d {
|
||||||
return decodeErrCodeCorrupt
|
return decodeErrCodeCorrupt
|
||||||
}
|
}
|
||||||
// Copy from an earlier sub-slice of dst to a later sub-slice. Unlike
|
// Copy from an earlier sub-slice of dst to a later sub-slice.
|
||||||
// the built-in copy function, this byte-by-byte copy always runs
|
// If no overlap, use the built-in copy:
|
||||||
|
if offset >= length {
|
||||||
|
copy(dst[d:d+length], dst[d-offset:])
|
||||||
|
d += length
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unlike the built-in copy function, this byte-by-byte copy always runs
|
||||||
// forwards, even if the slices overlap. Conceptually, this is:
|
// forwards, even if the slices overlap. Conceptually, this is:
|
||||||
//
|
//
|
||||||
// d += forwardCopy(dst[d:d+length], dst[d-offset:])
|
// d += forwardCopy(dst[d:d+length], dst[d-offset:])
|
||||||
for end := d + length; d != end; d++ {
|
//
|
||||||
dst[d] = dst[d-offset]
|
// We align the slices into a and b and show the compiler they are the same size.
|
||||||
|
// This allows the loop to run without bounds checks.
|
||||||
|
a := dst[d : d+length]
|
||||||
|
b := dst[d-offset:]
|
||||||
|
b = b[:len(a)]
|
||||||
|
for i := range a {
|
||||||
|
a[i] = b[i]
|
||||||
}
|
}
|
||||||
|
d += length
|
||||||
}
|
}
|
||||||
if d != len(dst) {
|
if d != len(dst) {
|
||||||
return decodeErrCodeCorrupt
|
return decodeErrCodeCorrupt
|
||||||
|
4
vendor/github.com/golang/snappy/encode.go
generated
vendored
4
vendor/github.com/golang/snappy/encode.go
generated
vendored
@ -15,6 +15,8 @@ import (
|
|||||||
// Otherwise, a newly allocated slice will be returned.
|
// Otherwise, a newly allocated slice will be returned.
|
||||||
//
|
//
|
||||||
// The dst and src must not overlap. It is valid to pass a nil dst.
|
// The dst and src must not overlap. It is valid to pass a nil dst.
|
||||||
|
//
|
||||||
|
// Encode handles the Snappy block format, not the Snappy stream format.
|
||||||
func Encode(dst, src []byte) []byte {
|
func Encode(dst, src []byte) []byte {
|
||||||
if n := MaxEncodedLen(len(src)); n < 0 {
|
if n := MaxEncodedLen(len(src)); n < 0 {
|
||||||
panic(ErrTooLarge)
|
panic(ErrTooLarge)
|
||||||
@ -139,6 +141,8 @@ func NewBufferedWriter(w io.Writer) *Writer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Writer is an io.Writer that can write Snappy-compressed bytes.
|
// Writer is an io.Writer that can write Snappy-compressed bytes.
|
||||||
|
//
|
||||||
|
// Writer handles the Snappy stream format, not the Snappy block format.
|
||||||
type Writer struct {
|
type Writer struct {
|
||||||
w io.Writer
|
w io.Writer
|
||||||
err error
|
err error
|
||||||
|
722
vendor/github.com/golang/snappy/encode_arm64.s
generated
vendored
Normal file
722
vendor/github.com/golang/snappy/encode_arm64.s
generated
vendored
Normal file
@ -0,0 +1,722 @@
|
|||||||
|
// Copyright 2020 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
// +build !appengine
|
||||||
|
// +build gc
|
||||||
|
// +build !noasm
|
||||||
|
|
||||||
|
#include "textflag.h"
|
||||||
|
|
||||||
|
// The asm code generally follows the pure Go code in encode_other.go, except
|
||||||
|
// where marked with a "!!!".
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// func emitLiteral(dst, lit []byte) int
|
||||||
|
//
|
||||||
|
// All local variables fit into registers. The register allocation:
|
||||||
|
// - R3 len(lit)
|
||||||
|
// - R4 n
|
||||||
|
// - R6 return value
|
||||||
|
// - R8 &dst[i]
|
||||||
|
// - R10 &lit[0]
|
||||||
|
//
|
||||||
|
// The 32 bytes of stack space is to call runtime·memmove.
|
||||||
|
//
|
||||||
|
// The unusual register allocation of local variables, such as R10 for the
|
||||||
|
// source pointer, matches the allocation used at the call site in encodeBlock,
|
||||||
|
// which makes it easier to manually inline this function.
|
||||||
|
TEXT ·emitLiteral(SB), NOSPLIT, $32-56
|
||||||
|
MOVD dst_base+0(FP), R8
|
||||||
|
MOVD lit_base+24(FP), R10
|
||||||
|
MOVD lit_len+32(FP), R3
|
||||||
|
MOVD R3, R6
|
||||||
|
MOVW R3, R4
|
||||||
|
SUBW $1, R4, R4
|
||||||
|
|
||||||
|
CMPW $60, R4
|
||||||
|
BLT oneByte
|
||||||
|
CMPW $256, R4
|
||||||
|
BLT twoBytes
|
||||||
|
|
||||||
|
threeBytes:
|
||||||
|
MOVD $0xf4, R2
|
||||||
|
MOVB R2, 0(R8)
|
||||||
|
MOVW R4, 1(R8)
|
||||||
|
ADD $3, R8, R8
|
||||||
|
ADD $3, R6, R6
|
||||||
|
B memmove
|
||||||
|
|
||||||
|
twoBytes:
|
||||||
|
MOVD $0xf0, R2
|
||||||
|
MOVB R2, 0(R8)
|
||||||
|
MOVB R4, 1(R8)
|
||||||
|
ADD $2, R8, R8
|
||||||
|
ADD $2, R6, R6
|
||||||
|
B memmove
|
||||||
|
|
||||||
|
oneByte:
|
||||||
|
LSLW $2, R4, R4
|
||||||
|
MOVB R4, 0(R8)
|
||||||
|
ADD $1, R8, R8
|
||||||
|
ADD $1, R6, R6
|
||||||
|
|
||||||
|
memmove:
|
||||||
|
MOVD R6, ret+48(FP)
|
||||||
|
|
||||||
|
// copy(dst[i:], lit)
|
||||||
|
//
|
||||||
|
// This means calling runtime·memmove(&dst[i], &lit[0], len(lit)), so we push
|
||||||
|
// R8, R10 and R3 as arguments.
|
||||||
|
MOVD R8, 8(RSP)
|
||||||
|
MOVD R10, 16(RSP)
|
||||||
|
MOVD R3, 24(RSP)
|
||||||
|
CALL runtime·memmove(SB)
|
||||||
|
RET
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// func emitCopy(dst []byte, offset, length int) int
|
||||||
|
//
|
||||||
|
// All local variables fit into registers. The register allocation:
|
||||||
|
// - R3 length
|
||||||
|
// - R7 &dst[0]
|
||||||
|
// - R8 &dst[i]
|
||||||
|
// - R11 offset
|
||||||
|
//
|
||||||
|
// The unusual register allocation of local variables, such as R11 for the
|
||||||
|
// offset, matches the allocation used at the call site in encodeBlock, which
|
||||||
|
// makes it easier to manually inline this function.
|
||||||
|
TEXT ·emitCopy(SB), NOSPLIT, $0-48
|
||||||
|
MOVD dst_base+0(FP), R8
|
||||||
|
MOVD R8, R7
|
||||||
|
MOVD offset+24(FP), R11
|
||||||
|
MOVD length+32(FP), R3
|
||||||
|
|
||||||
|
loop0:
|
||||||
|
// for length >= 68 { etc }
|
||||||
|
CMPW $68, R3
|
||||||
|
BLT step1
|
||||||
|
|
||||||
|
// Emit a length 64 copy, encoded as 3 bytes.
|
||||||
|
MOVD $0xfe, R2
|
||||||
|
MOVB R2, 0(R8)
|
||||||
|
MOVW R11, 1(R8)
|
||||||
|
ADD $3, R8, R8
|
||||||
|
SUB $64, R3, R3
|
||||||
|
B loop0
|
||||||
|
|
||||||
|
step1:
|
||||||
|
// if length > 64 { etc }
|
||||||
|
CMP $64, R3
|
||||||
|
BLE step2
|
||||||
|
|
||||||
|
// Emit a length 60 copy, encoded as 3 bytes.
|
||||||
|
MOVD $0xee, R2
|
||||||
|
MOVB R2, 0(R8)
|
||||||
|
MOVW R11, 1(R8)
|
||||||
|
ADD $3, R8, R8
|
||||||
|
SUB $60, R3, R3
|
||||||
|
|
||||||
|
step2:
|
||||||
|
// if length >= 12 || offset >= 2048 { goto step3 }
|
||||||
|
CMP $12, R3
|
||||||
|
BGE step3
|
||||||
|
CMPW $2048, R11
|
||||||
|
BGE step3
|
||||||
|
|
||||||
|
// Emit the remaining copy, encoded as 2 bytes.
|
||||||
|
MOVB R11, 1(R8)
|
||||||
|
LSRW $3, R11, R11
|
||||||
|
AND $0xe0, R11, R11
|
||||||
|
SUB $4, R3, R3
|
||||||
|
LSLW $2, R3
|
||||||
|
AND $0xff, R3, R3
|
||||||
|
ORRW R3, R11, R11
|
||||||
|
ORRW $1, R11, R11
|
||||||
|
MOVB R11, 0(R8)
|
||||||
|
ADD $2, R8, R8
|
||||||
|
|
||||||
|
// Return the number of bytes written.
|
||||||
|
SUB R7, R8, R8
|
||||||
|
MOVD R8, ret+40(FP)
|
||||||
|
RET
|
||||||
|
|
||||||
|
step3:
|
||||||
|
// Emit the remaining copy, encoded as 3 bytes.
|
||||||
|
SUB $1, R3, R3
|
||||||
|
AND $0xff, R3, R3
|
||||||
|
LSLW $2, R3, R3
|
||||||
|
ORRW $2, R3, R3
|
||||||
|
MOVB R3, 0(R8)
|
||||||
|
MOVW R11, 1(R8)
|
||||||
|
ADD $3, R8, R8
|
||||||
|
|
||||||
|
// Return the number of bytes written.
|
||||||
|
SUB R7, R8, R8
|
||||||
|
MOVD R8, ret+40(FP)
|
||||||
|
RET
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// func extendMatch(src []byte, i, j int) int
|
||||||
|
//
|
||||||
|
// All local variables fit into registers. The register allocation:
|
||||||
|
// - R6 &src[0]
|
||||||
|
// - R7 &src[j]
|
||||||
|
// - R13 &src[len(src) - 8]
|
||||||
|
// - R14 &src[len(src)]
|
||||||
|
// - R15 &src[i]
|
||||||
|
//
|
||||||
|
// The unusual register allocation of local variables, such as R15 for a source
|
||||||
|
// pointer, matches the allocation used at the call site in encodeBlock, which
|
||||||
|
// makes it easier to manually inline this function.
|
||||||
|
TEXT ·extendMatch(SB), NOSPLIT, $0-48
|
||||||
|
MOVD src_base+0(FP), R6
|
||||||
|
MOVD src_len+8(FP), R14
|
||||||
|
MOVD i+24(FP), R15
|
||||||
|
MOVD j+32(FP), R7
|
||||||
|
ADD R6, R14, R14
|
||||||
|
ADD R6, R15, R15
|
||||||
|
ADD R6, R7, R7
|
||||||
|
MOVD R14, R13
|
||||||
|
SUB $8, R13, R13
|
||||||
|
|
||||||
|
cmp8:
|
||||||
|
// As long as we are 8 or more bytes before the end of src, we can load and
|
||||||
|
// compare 8 bytes at a time. If those 8 bytes are equal, repeat.
|
||||||
|
CMP R13, R7
|
||||||
|
BHI cmp1
|
||||||
|
MOVD (R15), R3
|
||||||
|
MOVD (R7), R4
|
||||||
|
CMP R4, R3
|
||||||
|
BNE bsf
|
||||||
|
ADD $8, R15, R15
|
||||||
|
ADD $8, R7, R7
|
||||||
|
B cmp8
|
||||||
|
|
||||||
|
bsf:
|
||||||
|
// If those 8 bytes were not equal, XOR the two 8 byte values, and return
|
||||||
|
// the index of the first byte that differs.
|
||||||
|
// RBIT reverses the bit order, then CLZ counts the leading zeros, the
|
||||||
|
// combination of which finds the least significant bit which is set.
|
||||||
|
// The arm64 architecture is little-endian, and the shift by 3 converts
|
||||||
|
// a bit index to a byte index.
|
||||||
|
EOR R3, R4, R4
|
||||||
|
RBIT R4, R4
|
||||||
|
CLZ R4, R4
|
||||||
|
ADD R4>>3, R7, R7
|
||||||
|
|
||||||
|
// Convert from &src[ret] to ret.
|
||||||
|
SUB R6, R7, R7
|
||||||
|
MOVD R7, ret+40(FP)
|
||||||
|
RET
|
||||||
|
|
||||||
|
cmp1:
|
||||||
|
// In src's tail, compare 1 byte at a time.
|
||||||
|
CMP R7, R14
|
||||||
|
BLS extendMatchEnd
|
||||||
|
MOVB (R15), R3
|
||||||
|
MOVB (R7), R4
|
||||||
|
CMP R4, R3
|
||||||
|
BNE extendMatchEnd
|
||||||
|
ADD $1, R15, R15
|
||||||
|
ADD $1, R7, R7
|
||||||
|
B cmp1
|
||||||
|
|
||||||
|
extendMatchEnd:
|
||||||
|
// Convert from &src[ret] to ret.
|
||||||
|
SUB R6, R7, R7
|
||||||
|
MOVD R7, ret+40(FP)
|
||||||
|
RET
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// func encodeBlock(dst, src []byte) (d int)
|
||||||
|
//
|
||||||
|
// All local variables fit into registers, other than "var table". The register
|
||||||
|
// allocation:
|
||||||
|
// - R3 . .
|
||||||
|
// - R4 . .
|
||||||
|
// - R5 64 shift
|
||||||
|
// - R6 72 &src[0], tableSize
|
||||||
|
// - R7 80 &src[s]
|
||||||
|
// - R8 88 &dst[d]
|
||||||
|
// - R9 96 sLimit
|
||||||
|
// - R10 . &src[nextEmit]
|
||||||
|
// - R11 104 prevHash, currHash, nextHash, offset
|
||||||
|
// - R12 112 &src[base], skip
|
||||||
|
// - R13 . &src[nextS], &src[len(src) - 8]
|
||||||
|
// - R14 . len(src), bytesBetweenHashLookups, &src[len(src)], x
|
||||||
|
// - R15 120 candidate
|
||||||
|
// - R16 . hash constant, 0x1e35a7bd
|
||||||
|
// - R17 . &table
|
||||||
|
// - . 128 table
|
||||||
|
//
|
||||||
|
// The second column (64, 72, etc) is the stack offset to spill the registers
|
||||||
|
// when calling other functions. We could pack this slightly tighter, but it's
|
||||||
|
// simpler to have a dedicated spill map independent of the function called.
|
||||||
|
//
|
||||||
|
// "var table [maxTableSize]uint16" takes up 32768 bytes of stack space. An
|
||||||
|
// extra 64 bytes, to call other functions, and an extra 64 bytes, to spill
|
||||||
|
// local variables (registers) during calls gives 32768 + 64 + 64 = 32896.
|
||||||
|
TEXT ·encodeBlock(SB), 0, $32896-56
|
||||||
|
MOVD dst_base+0(FP), R8
|
||||||
|
MOVD src_base+24(FP), R7
|
||||||
|
MOVD src_len+32(FP), R14
|
||||||
|
|
||||||
|
// shift, tableSize := uint32(32-8), 1<<8
|
||||||
|
MOVD $24, R5
|
||||||
|
MOVD $256, R6
|
||||||
|
MOVW $0xa7bd, R16
|
||||||
|
MOVKW $(0x1e35<<16), R16
|
||||||
|
|
||||||
|
calcShift:
|
||||||
|
// for ; tableSize < maxTableSize && tableSize < len(src); tableSize *= 2 {
|
||||||
|
// shift--
|
||||||
|
// }
|
||||||
|
MOVD $16384, R2
|
||||||
|
CMP R2, R6
|
||||||
|
BGE varTable
|
||||||
|
CMP R14, R6
|
||||||
|
BGE varTable
|
||||||
|
SUB $1, R5, R5
|
||||||
|
LSL $1, R6, R6
|
||||||
|
B calcShift
|
||||||
|
|
||||||
|
varTable:
|
||||||
|
// var table [maxTableSize]uint16
|
||||||
|
//
|
||||||
|
// In the asm code, unlike the Go code, we can zero-initialize only the
|
||||||
|
// first tableSize elements. Each uint16 element is 2 bytes and each
|
||||||
|
// iterations writes 64 bytes, so we can do only tableSize/32 writes
|
||||||
|
// instead of the 2048 writes that would zero-initialize all of table's
|
||||||
|
// 32768 bytes. This clear could overrun the first tableSize elements, but
|
||||||
|
// it won't overrun the allocated stack size.
|
||||||
|
ADD $128, RSP, R17
|
||||||
|
MOVD R17, R4
|
||||||
|
|
||||||
|
// !!! R6 = &src[tableSize]
|
||||||
|
ADD R6<<1, R17, R6
|
||||||
|
|
||||||
|
memclr:
|
||||||
|
STP.P (ZR, ZR), 64(R4)
|
||||||
|
STP (ZR, ZR), -48(R4)
|
||||||
|
STP (ZR, ZR), -32(R4)
|
||||||
|
STP (ZR, ZR), -16(R4)
|
||||||
|
CMP R4, R6
|
||||||
|
BHI memclr
|
||||||
|
|
||||||
|
// !!! R6 = &src[0]
|
||||||
|
MOVD R7, R6
|
||||||
|
|
||||||
|
// sLimit := len(src) - inputMargin
|
||||||
|
MOVD R14, R9
|
||||||
|
SUB $15, R9, R9
|
||||||
|
|
||||||
|
// !!! Pre-emptively spill R5, R6 and R9 to the stack. Their values don't
|
||||||
|
// change for the rest of the function.
|
||||||
|
MOVD R5, 64(RSP)
|
||||||
|
MOVD R6, 72(RSP)
|
||||||
|
MOVD R9, 96(RSP)
|
||||||
|
|
||||||
|
// nextEmit := 0
|
||||||
|
MOVD R6, R10
|
||||||
|
|
||||||
|
// s := 1
|
||||||
|
ADD $1, R7, R7
|
||||||
|
|
||||||
|
// nextHash := hash(load32(src, s), shift)
|
||||||
|
MOVW 0(R7), R11
|
||||||
|
MULW R16, R11, R11
|
||||||
|
LSRW R5, R11, R11
|
||||||
|
|
||||||
|
outer:
|
||||||
|
// for { etc }
|
||||||
|
|
||||||
|
// skip := 32
|
||||||
|
MOVD $32, R12
|
||||||
|
|
||||||
|
// nextS := s
|
||||||
|
MOVD R7, R13
|
||||||
|
|
||||||
|
// candidate := 0
|
||||||
|
MOVD $0, R15
|
||||||
|
|
||||||
|
inner0:
|
||||||
|
// for { etc }
|
||||||
|
|
||||||
|
// s := nextS
|
||||||
|
MOVD R13, R7
|
||||||
|
|
||||||
|
// bytesBetweenHashLookups := skip >> 5
|
||||||
|
MOVD R12, R14
|
||||||
|
LSR $5, R14, R14
|
||||||
|
|
||||||
|
// nextS = s + bytesBetweenHashLookups
|
||||||
|
ADD R14, R13, R13
|
||||||
|
|
||||||
|
// skip += bytesBetweenHashLookups
|
||||||
|
ADD R14, R12, R12
|
||||||
|
|
||||||
|
// if nextS > sLimit { goto emitRemainder }
|
||||||
|
MOVD R13, R3
|
||||||
|
SUB R6, R3, R3
|
||||||
|
CMP R9, R3
|
||||||
|
BHI emitRemainder
|
||||||
|
|
||||||
|
// candidate = int(table[nextHash])
|
||||||
|
MOVHU 0(R17)(R11<<1), R15
|
||||||
|
|
||||||
|
// table[nextHash] = uint16(s)
|
||||||
|
MOVD R7, R3
|
||||||
|
SUB R6, R3, R3
|
||||||
|
|
||||||
|
MOVH R3, 0(R17)(R11<<1)
|
||||||
|
|
||||||
|
// nextHash = hash(load32(src, nextS), shift)
|
||||||
|
MOVW 0(R13), R11
|
||||||
|
MULW R16, R11
|
||||||
|
LSRW R5, R11, R11
|
||||||
|
|
||||||
|
// if load32(src, s) != load32(src, candidate) { continue } break
|
||||||
|
MOVW 0(R7), R3
|
||||||
|
MOVW (R6)(R15), R4
|
||||||
|
CMPW R4, R3
|
||||||
|
BNE inner0
|
||||||
|
|
||||||
|
fourByteMatch:
|
||||||
|
// As per the encode_other.go code:
|
||||||
|
//
|
||||||
|
// A 4-byte match has been found. We'll later see etc.
|
||||||
|
|
||||||
|
// !!! Jump to a fast path for short (<= 16 byte) literals. See the comment
|
||||||
|
// on inputMargin in encode.go.
|
||||||
|
MOVD R7, R3
|
||||||
|
SUB R10, R3, R3
|
||||||
|
CMP $16, R3
|
||||||
|
BLE emitLiteralFastPath
|
||||||
|
|
||||||
|
// ----------------------------------------
|
||||||
|
// Begin inline of the emitLiteral call.
|
||||||
|
//
|
||||||
|
// d += emitLiteral(dst[d:], src[nextEmit:s])
|
||||||
|
|
||||||
|
MOVW R3, R4
|
||||||
|
SUBW $1, R4, R4
|
||||||
|
|
||||||
|
MOVW $60, R2
|
||||||
|
CMPW R2, R4
|
||||||
|
BLT inlineEmitLiteralOneByte
|
||||||
|
MOVW $256, R2
|
||||||
|
CMPW R2, R4
|
||||||
|
BLT inlineEmitLiteralTwoBytes
|
||||||
|
|
||||||
|
inlineEmitLiteralThreeBytes:
|
||||||
|
MOVD $0xf4, R1
|
||||||
|
MOVB R1, 0(R8)
|
||||||
|
MOVW R4, 1(R8)
|
||||||
|
ADD $3, R8, R8
|
||||||
|
B inlineEmitLiteralMemmove
|
||||||
|
|
||||||
|
inlineEmitLiteralTwoBytes:
|
||||||
|
MOVD $0xf0, R1
|
||||||
|
MOVB R1, 0(R8)
|
||||||
|
MOVB R4, 1(R8)
|
||||||
|
ADD $2, R8, R8
|
||||||
|
B inlineEmitLiteralMemmove
|
||||||
|
|
||||||
|
inlineEmitLiteralOneByte:
|
||||||
|
LSLW $2, R4, R4
|
||||||
|
MOVB R4, 0(R8)
|
||||||
|
ADD $1, R8, R8
|
||||||
|
|
||||||
|
inlineEmitLiteralMemmove:
|
||||||
|
// Spill local variables (registers) onto the stack; call; unspill.
|
||||||
|
//
|
||||||
|
// copy(dst[i:], lit)
|
||||||
|
//
|
||||||
|
// This means calling runtime·memmove(&dst[i], &lit[0], len(lit)), so we push
|
||||||
|
// R8, R10 and R3 as arguments.
|
||||||
|
MOVD R8, 8(RSP)
|
||||||
|
MOVD R10, 16(RSP)
|
||||||
|
MOVD R3, 24(RSP)
|
||||||
|
|
||||||
|
// Finish the "d +=" part of "d += emitLiteral(etc)".
|
||||||
|
ADD R3, R8, R8
|
||||||
|
MOVD R7, 80(RSP)
|
||||||
|
MOVD R8, 88(RSP)
|
||||||
|
MOVD R15, 120(RSP)
|
||||||
|
CALL runtime·memmove(SB)
|
||||||
|
MOVD 64(RSP), R5
|
||||||
|
MOVD 72(RSP), R6
|
||||||
|
MOVD 80(RSP), R7
|
||||||
|
MOVD 88(RSP), R8
|
||||||
|
MOVD 96(RSP), R9
|
||||||
|
MOVD 120(RSP), R15
|
||||||
|
ADD $128, RSP, R17
|
||||||
|
MOVW $0xa7bd, R16
|
||||||
|
MOVKW $(0x1e35<<16), R16
|
||||||
|
B inner1
|
||||||
|
|
||||||
|
inlineEmitLiteralEnd:
|
||||||
|
// End inline of the emitLiteral call.
|
||||||
|
// ----------------------------------------
|
||||||
|
|
||||||
|
emitLiteralFastPath:
|
||||||
|
// !!! Emit the 1-byte encoding "uint8(len(lit)-1)<<2".
|
||||||
|
MOVB R3, R4
|
||||||
|
SUBW $1, R4, R4
|
||||||
|
AND $0xff, R4, R4
|
||||||
|
LSLW $2, R4, R4
|
||||||
|
MOVB R4, (R8)
|
||||||
|
ADD $1, R8, R8
|
||||||
|
|
||||||
|
// !!! Implement the copy from lit to dst as a 16-byte load and store.
|
||||||
|
// (Encode's documentation says that dst and src must not overlap.)
|
||||||
|
//
|
||||||
|
// This always copies 16 bytes, instead of only len(lit) bytes, but that's
|
||||||
|
// OK. Subsequent iterations will fix up the overrun.
|
||||||
|
//
|
||||||
|
// Note that on arm64, it is legal and cheap to issue unaligned 8-byte or
|
||||||
|
// 16-byte loads and stores. This technique probably wouldn't be as
|
||||||
|
// effective on architectures that are fussier about alignment.
|
||||||
|
LDP 0(R10), (R0, R1)
|
||||||
|
STP (R0, R1), 0(R8)
|
||||||
|
ADD R3, R8, R8
|
||||||
|
|
||||||
|
inner1:
|
||||||
|
// for { etc }
|
||||||
|
|
||||||
|
// base := s
|
||||||
|
MOVD R7, R12
|
||||||
|
|
||||||
|
// !!! offset := base - candidate
|
||||||
|
MOVD R12, R11
|
||||||
|
SUB R15, R11, R11
|
||||||
|
SUB R6, R11, R11
|
||||||
|
|
||||||
|
// ----------------------------------------
|
||||||
|
// Begin inline of the extendMatch call.
|
||||||
|
//
|
||||||
|
// s = extendMatch(src, candidate+4, s+4)
|
||||||
|
|
||||||
|
// !!! R14 = &src[len(src)]
|
||||||
|
MOVD src_len+32(FP), R14
|
||||||
|
ADD R6, R14, R14
|
||||||
|
|
||||||
|
// !!! R13 = &src[len(src) - 8]
|
||||||
|
MOVD R14, R13
|
||||||
|
SUB $8, R13, R13
|
||||||
|
|
||||||
|
// !!! R15 = &src[candidate + 4]
|
||||||
|
ADD $4, R15, R15
|
||||||
|
ADD R6, R15, R15
|
||||||
|
|
||||||
|
// !!! s += 4
|
||||||
|
ADD $4, R7, R7
|
||||||
|
|
||||||
|
inlineExtendMatchCmp8:
|
||||||
|
// As long as we are 8 or more bytes before the end of src, we can load and
|
||||||
|
// compare 8 bytes at a time. If those 8 bytes are equal, repeat.
|
||||||
|
CMP R13, R7
|
||||||
|
BHI inlineExtendMatchCmp1
|
||||||
|
MOVD (R15), R3
|
||||||
|
MOVD (R7), R4
|
||||||
|
CMP R4, R3
|
||||||
|
BNE inlineExtendMatchBSF
|
||||||
|
ADD $8, R15, R15
|
||||||
|
ADD $8, R7, R7
|
||||||
|
B inlineExtendMatchCmp8
|
||||||
|
|
||||||
|
inlineExtendMatchBSF:
|
||||||
|
// If those 8 bytes were not equal, XOR the two 8 byte values, and return
|
||||||
|
// the index of the first byte that differs.
|
||||||
|
// RBIT reverses the bit order, then CLZ counts the leading zeros, the
|
||||||
|
// combination of which finds the least significant bit which is set.
|
||||||
|
// The arm64 architecture is little-endian, and the shift by 3 converts
|
||||||
|
// a bit index to a byte index.
|
||||||
|
EOR R3, R4, R4
|
||||||
|
RBIT R4, R4
|
||||||
|
CLZ R4, R4
|
||||||
|
ADD R4>>3, R7, R7
|
||||||
|
B inlineExtendMatchEnd
|
||||||
|
|
||||||
|
inlineExtendMatchCmp1:
|
||||||
|
// In src's tail, compare 1 byte at a time.
|
||||||
|
CMP R7, R14
|
||||||
|
BLS inlineExtendMatchEnd
|
||||||
|
MOVB (R15), R3
|
||||||
|
MOVB (R7), R4
|
||||||
|
CMP R4, R3
|
||||||
|
BNE inlineExtendMatchEnd
|
||||||
|
ADD $1, R15, R15
|
||||||
|
ADD $1, R7, R7
|
||||||
|
B inlineExtendMatchCmp1
|
||||||
|
|
||||||
|
inlineExtendMatchEnd:
|
||||||
|
// End inline of the extendMatch call.
|
||||||
|
// ----------------------------------------
|
||||||
|
|
||||||
|
// ----------------------------------------
|
||||||
|
// Begin inline of the emitCopy call.
|
||||||
|
//
|
||||||
|
// d += emitCopy(dst[d:], base-candidate, s-base)
|
||||||
|
|
||||||
|
// !!! length := s - base
|
||||||
|
MOVD R7, R3
|
||||||
|
SUB R12, R3, R3
|
||||||
|
|
||||||
|
inlineEmitCopyLoop0:
|
||||||
|
// for length >= 68 { etc }
|
||||||
|
MOVW $68, R2
|
||||||
|
CMPW R2, R3
|
||||||
|
BLT inlineEmitCopyStep1
|
||||||
|
|
||||||
|
// Emit a length 64 copy, encoded as 3 bytes.
|
||||||
|
MOVD $0xfe, R1
|
||||||
|
MOVB R1, 0(R8)
|
||||||
|
MOVW R11, 1(R8)
|
||||||
|
ADD $3, R8, R8
|
||||||
|
SUBW $64, R3, R3
|
||||||
|
B inlineEmitCopyLoop0
|
||||||
|
|
||||||
|
inlineEmitCopyStep1:
|
||||||
|
// if length > 64 { etc }
|
||||||
|
MOVW $64, R2
|
||||||
|
CMPW R2, R3
|
||||||
|
BLE inlineEmitCopyStep2
|
||||||
|
|
||||||
|
// Emit a length 60 copy, encoded as 3 bytes.
|
||||||
|
MOVD $0xee, R1
|
||||||
|
MOVB R1, 0(R8)
|
||||||
|
MOVW R11, 1(R8)
|
||||||
|
ADD $3, R8, R8
|
||||||
|
SUBW $60, R3, R3
|
||||||
|
|
||||||
|
inlineEmitCopyStep2:
|
||||||
|
// if length >= 12 || offset >= 2048 { goto inlineEmitCopyStep3 }
|
||||||
|
MOVW $12, R2
|
||||||
|
CMPW R2, R3
|
||||||
|
BGE inlineEmitCopyStep3
|
||||||
|
MOVW $2048, R2
|
||||||
|
CMPW R2, R11
|
||||||
|
BGE inlineEmitCopyStep3
|
||||||
|
|
||||||
|
// Emit the remaining copy, encoded as 2 bytes.
|
||||||
|
MOVB R11, 1(R8)
|
||||||
|
LSRW $8, R11, R11
|
||||||
|
LSLW $5, R11, R11
|
||||||
|
SUBW $4, R3, R3
|
||||||
|
AND $0xff, R3, R3
|
||||||
|
LSLW $2, R3, R3
|
||||||
|
ORRW R3, R11, R11
|
||||||
|
ORRW $1, R11, R11
|
||||||
|
MOVB R11, 0(R8)
|
||||||
|
ADD $2, R8, R8
|
||||||
|
B inlineEmitCopyEnd
|
||||||
|
|
||||||
|
inlineEmitCopyStep3:
|
||||||
|
// Emit the remaining copy, encoded as 3 bytes.
|
||||||
|
SUBW $1, R3, R3
|
||||||
|
LSLW $2, R3, R3
|
||||||
|
ORRW $2, R3, R3
|
||||||
|
MOVB R3, 0(R8)
|
||||||
|
MOVW R11, 1(R8)
|
||||||
|
ADD $3, R8, R8
|
||||||
|
|
||||||
|
inlineEmitCopyEnd:
|
||||||
|
// End inline of the emitCopy call.
|
||||||
|
// ----------------------------------------
|
||||||
|
|
||||||
|
// nextEmit = s
|
||||||
|
MOVD R7, R10
|
||||||
|
|
||||||
|
// if s >= sLimit { goto emitRemainder }
|
||||||
|
MOVD R7, R3
|
||||||
|
SUB R6, R3, R3
|
||||||
|
CMP R3, R9
|
||||||
|
BLS emitRemainder
|
||||||
|
|
||||||
|
// As per the encode_other.go code:
|
||||||
|
//
|
||||||
|
// We could immediately etc.
|
||||||
|
|
||||||
|
// x := load64(src, s-1)
|
||||||
|
MOVD -1(R7), R14
|
||||||
|
|
||||||
|
// prevHash := hash(uint32(x>>0), shift)
|
||||||
|
MOVW R14, R11
|
||||||
|
MULW R16, R11, R11
|
||||||
|
LSRW R5, R11, R11
|
||||||
|
|
||||||
|
// table[prevHash] = uint16(s-1)
|
||||||
|
MOVD R7, R3
|
||||||
|
SUB R6, R3, R3
|
||||||
|
SUB $1, R3, R3
|
||||||
|
|
||||||
|
MOVHU R3, 0(R17)(R11<<1)
|
||||||
|
|
||||||
|
// currHash := hash(uint32(x>>8), shift)
|
||||||
|
LSR $8, R14, R14
|
||||||
|
MOVW R14, R11
|
||||||
|
MULW R16, R11, R11
|
||||||
|
LSRW R5, R11, R11
|
||||||
|
|
||||||
|
// candidate = int(table[currHash])
|
||||||
|
MOVHU 0(R17)(R11<<1), R15
|
||||||
|
|
||||||
|
// table[currHash] = uint16(s)
|
||||||
|
ADD $1, R3, R3
|
||||||
|
MOVHU R3, 0(R17)(R11<<1)
|
||||||
|
|
||||||
|
// if uint32(x>>8) == load32(src, candidate) { continue }
|
||||||
|
MOVW (R6)(R15), R4
|
||||||
|
CMPW R4, R14
|
||||||
|
BEQ inner1
|
||||||
|
|
||||||
|
// nextHash = hash(uint32(x>>16), shift)
|
||||||
|
LSR $8, R14, R14
|
||||||
|
MOVW R14, R11
|
||||||
|
MULW R16, R11, R11
|
||||||
|
LSRW R5, R11, R11
|
||||||
|
|
||||||
|
// s++
|
||||||
|
ADD $1, R7, R7
|
||||||
|
|
||||||
|
// break out of the inner1 for loop, i.e. continue the outer loop.
|
||||||
|
B outer
|
||||||
|
|
||||||
|
emitRemainder:
|
||||||
|
// if nextEmit < len(src) { etc }
|
||||||
|
MOVD src_len+32(FP), R3
|
||||||
|
ADD R6, R3, R3
|
||||||
|
CMP R3, R10
|
||||||
|
BEQ encodeBlockEnd
|
||||||
|
|
||||||
|
// d += emitLiteral(dst[d:], src[nextEmit:])
|
||||||
|
//
|
||||||
|
// Push args.
|
||||||
|
MOVD R8, 8(RSP)
|
||||||
|
MOVD $0, 16(RSP) // Unnecessary, as the callee ignores it, but conservative.
|
||||||
|
MOVD $0, 24(RSP) // Unnecessary, as the callee ignores it, but conservative.
|
||||||
|
MOVD R10, 32(RSP)
|
||||||
|
SUB R10, R3, R3
|
||||||
|
MOVD R3, 40(RSP)
|
||||||
|
MOVD R3, 48(RSP) // Unnecessary, as the callee ignores it, but conservative.
|
||||||
|
|
||||||
|
// Spill local variables (registers) onto the stack; call; unspill.
|
||||||
|
MOVD R8, 88(RSP)
|
||||||
|
CALL ·emitLiteral(SB)
|
||||||
|
MOVD 88(RSP), R8
|
||||||
|
|
||||||
|
// Finish the "d +=" part of "d += emitLiteral(etc)".
|
||||||
|
MOVD 56(RSP), R1
|
||||||
|
ADD R1, R8, R8
|
||||||
|
|
||||||
|
encodeBlockEnd:
|
||||||
|
MOVD dst_base+0(FP), R3
|
||||||
|
SUB R3, R8, R8
|
||||||
|
MOVD R8, d+48(FP)
|
||||||
|
RET
|
@ -5,6 +5,7 @@
|
|||||||
// +build !appengine
|
// +build !appengine
|
||||||
// +build gc
|
// +build gc
|
||||||
// +build !noasm
|
// +build !noasm
|
||||||
|
// +build amd64 arm64
|
||||||
|
|
||||||
package snappy
|
package snappy
|
||||||
|
|
2
vendor/github.com/golang/snappy/encode_other.go
generated
vendored
2
vendor/github.com/golang/snappy/encode_other.go
generated
vendored
@ -2,7 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// +build !amd64 appengine !gc noasm
|
// +build !amd64,!arm64 appengine !gc noasm
|
||||||
|
|
||||||
package snappy
|
package snappy
|
||||||
|
|
||||||
|
3
vendor/github.com/hashicorp/go-immutable-radix/.travis.yml
generated
vendored
3
vendor/github.com/hashicorp/go-immutable-radix/.travis.yml
generated
vendored
@ -1,3 +0,0 @@
|
|||||||
language: go
|
|
||||||
go:
|
|
||||||
- tip
|
|
14
vendor/github.com/hashicorp/go-immutable-radix/CHANGELOG.md
generated
vendored
14
vendor/github.com/hashicorp/go-immutable-radix/CHANGELOG.md
generated
vendored
@ -1,3 +1,17 @@
|
|||||||
|
# UNRELEASED
|
||||||
|
|
||||||
|
# 1.3.0 (September 17th, 2020)
|
||||||
|
|
||||||
|
FEATURES
|
||||||
|
|
||||||
|
* Add reverse tree traversal [[GH-30](https://github.com/hashicorp/go-immutable-radix/pull/30)]
|
||||||
|
|
||||||
|
# 1.2.0 (March 18th, 2020)
|
||||||
|
|
||||||
|
FEATURES
|
||||||
|
|
||||||
|
* Adds a `Clone` method to `Txn` allowing transactions to be split either into two independently mutable trees. [[GH-26](https://github.com/hashicorp/go-immutable-radix/pull/26)]
|
||||||
|
|
||||||
# 1.1.0 (May 22nd, 2019)
|
# 1.1.0 (May 22nd, 2019)
|
||||||
|
|
||||||
FEATURES
|
FEATURES
|
||||||
|
2
vendor/github.com/hashicorp/go-immutable-radix/README.md
generated
vendored
2
vendor/github.com/hashicorp/go-immutable-radix/README.md
generated
vendored
@ -1,4 +1,4 @@
|
|||||||
go-immutable-radix [![Build Status](https://travis-ci.org/hashicorp/go-immutable-radix.png)](https://travis-ci.org/hashicorp/go-immutable-radix)
|
go-immutable-radix [![CircleCI](https://circleci.com/gh/hashicorp/go-immutable-radix/tree/master.svg?style=svg)](https://circleci.com/gh/hashicorp/go-immutable-radix/tree/master)
|
||||||
=========
|
=========
|
||||||
|
|
||||||
Provides the `iradix` package that implements an immutable [radix tree](http://en.wikipedia.org/wiki/Radix_tree).
|
Provides the `iradix` package that implements an immutable [radix tree](http://en.wikipedia.org/wiki/Radix_tree).
|
||||||
|
14
vendor/github.com/hashicorp/go-immutable-radix/iradix.go
generated
vendored
14
vendor/github.com/hashicorp/go-immutable-radix/iradix.go
generated
vendored
@ -86,6 +86,20 @@ func (t *Tree) Txn() *Txn {
|
|||||||
return txn
|
return txn
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Clone makes an independent copy of the transaction. The new transaction
|
||||||
|
// does not track any nodes and has TrackMutate turned off. The cloned transaction will contain any uncommitted writes in the original transaction but further mutations to either will be independent and result in different radix trees on Commit. A cloned transaction may be passed to another goroutine and mutated there independently however each transaction may only be mutated in a single thread.
|
||||||
|
func (t *Txn) Clone() *Txn {
|
||||||
|
// reset the writable node cache to avoid leaking future writes into the clone
|
||||||
|
t.writable = nil
|
||||||
|
|
||||||
|
txn := &Txn{
|
||||||
|
root: t.root,
|
||||||
|
snap: t.snap,
|
||||||
|
size: t.size,
|
||||||
|
}
|
||||||
|
return txn
|
||||||
|
}
|
||||||
|
|
||||||
// TrackMutate can be used to toggle if mutations are tracked. If this is enabled
|
// TrackMutate can be used to toggle if mutations are tracked. If this is enabled
|
||||||
// then notifications will be issued for affected internal nodes and leaves when
|
// then notifications will be issued for affected internal nodes and leaves when
|
||||||
// the transaction is committed.
|
// the transaction is committed.
|
||||||
|
61
vendor/github.com/hashicorp/go-immutable-radix/iter.go
generated
vendored
61
vendor/github.com/hashicorp/go-immutable-radix/iter.go
generated
vendored
@ -20,7 +20,7 @@ func (i *Iterator) SeekPrefixWatch(prefix []byte) (watch <-chan struct{}) {
|
|||||||
watch = n.mutateCh
|
watch = n.mutateCh
|
||||||
search := prefix
|
search := prefix
|
||||||
for {
|
for {
|
||||||
// Check for key exhaution
|
// Check for key exhaustion
|
||||||
if len(search) == 0 {
|
if len(search) == 0 {
|
||||||
i.node = n
|
i.node = n
|
||||||
return
|
return
|
||||||
@ -60,10 +60,13 @@ func (i *Iterator) recurseMin(n *Node) *Node {
|
|||||||
if n.leaf != nil {
|
if n.leaf != nil {
|
||||||
return n
|
return n
|
||||||
}
|
}
|
||||||
if len(n.edges) > 0 {
|
nEdges := len(n.edges)
|
||||||
|
if nEdges > 1 {
|
||||||
// Add all the other edges to the stack (the min node will be added as
|
// Add all the other edges to the stack (the min node will be added as
|
||||||
// we recurse)
|
// we recurse)
|
||||||
i.stack = append(i.stack, n.edges[1:])
|
i.stack = append(i.stack, n.edges[1:])
|
||||||
|
}
|
||||||
|
if nEdges > 0 {
|
||||||
return i.recurseMin(n.edges[0].node)
|
return i.recurseMin(n.edges[0].node)
|
||||||
}
|
}
|
||||||
// Shouldn't be possible
|
// Shouldn't be possible
|
||||||
@ -77,16 +80,32 @@ func (i *Iterator) recurseMin(n *Node) *Node {
|
|||||||
func (i *Iterator) SeekLowerBound(key []byte) {
|
func (i *Iterator) SeekLowerBound(key []byte) {
|
||||||
// Wipe the stack. Unlike Prefix iteration, we need to build the stack as we
|
// Wipe the stack. Unlike Prefix iteration, we need to build the stack as we
|
||||||
// go because we need only a subset of edges of many nodes in the path to the
|
// go because we need only a subset of edges of many nodes in the path to the
|
||||||
// leaf with the lower bound.
|
// leaf with the lower bound. Note that the iterator will still recurse into
|
||||||
|
// children that we don't traverse on the way to the reverse lower bound as it
|
||||||
|
// walks the stack.
|
||||||
i.stack = []edges{}
|
i.stack = []edges{}
|
||||||
|
// i.node starts off in the common case as pointing to the root node of the
|
||||||
|
// tree. By the time we return we have either found a lower bound and setup
|
||||||
|
// the stack to traverse all larger keys, or we have not and the stack and
|
||||||
|
// node should both be nil to prevent the iterator from assuming it is just
|
||||||
|
// iterating the whole tree from the root node. Either way this needs to end
|
||||||
|
// up as nil so just set it here.
|
||||||
n := i.node
|
n := i.node
|
||||||
|
i.node = nil
|
||||||
search := key
|
search := key
|
||||||
|
|
||||||
found := func(n *Node) {
|
found := func(n *Node) {
|
||||||
i.node = n
|
|
||||||
i.stack = append(i.stack, edges{edge{node: n}})
|
i.stack = append(i.stack, edges{edge{node: n}})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
findMin := func(n *Node) {
|
||||||
|
n = i.recurseMin(n)
|
||||||
|
if n != nil {
|
||||||
|
found(n)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for {
|
for {
|
||||||
// Compare current prefix with the search key's same-length prefix.
|
// Compare current prefix with the search key's same-length prefix.
|
||||||
var prefixCmp int
|
var prefixCmp int
|
||||||
@ -100,10 +119,7 @@ func (i *Iterator) SeekLowerBound(key []byte) {
|
|||||||
// Prefix is larger, that means the lower bound is greater than the search
|
// Prefix is larger, that means the lower bound is greater than the search
|
||||||
// and from now on we need to follow the minimum path to the smallest
|
// and from now on we need to follow the minimum path to the smallest
|
||||||
// leaf under this subtree.
|
// leaf under this subtree.
|
||||||
n = i.recurseMin(n)
|
findMin(n)
|
||||||
if n != nil {
|
|
||||||
found(n)
|
|
||||||
}
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -115,27 +131,29 @@ func (i *Iterator) SeekLowerBound(key []byte) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Prefix is equal, we are still heading for an exact match. If this is a
|
// Prefix is equal, we are still heading for an exact match. If this is a
|
||||||
// leaf we're done.
|
// leaf and an exact match we're done.
|
||||||
if n.leaf != nil {
|
if n.leaf != nil && bytes.Equal(n.leaf.key, key) {
|
||||||
if bytes.Compare(n.leaf.key, key) < 0 {
|
|
||||||
i.node = nil
|
|
||||||
return
|
|
||||||
}
|
|
||||||
found(n)
|
found(n)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Consume the search prefix
|
// Consume the search prefix if the current node has one. Note that this is
|
||||||
if len(n.prefix) > len(search) {
|
// safe because if n.prefix is longer than the search slice prefixCmp would
|
||||||
search = []byte{}
|
// have been > 0 above and the method would have already returned.
|
||||||
} else {
|
search = search[len(n.prefix):]
|
||||||
search = search[len(n.prefix):]
|
|
||||||
|
if len(search) == 0 {
|
||||||
|
// We've exhausted the search key, but the current node is not an exact
|
||||||
|
// match or not a leaf. That means that the leaf value if it exists, and
|
||||||
|
// all child nodes must be strictly greater, the smallest key in this
|
||||||
|
// subtree must be the lower bound.
|
||||||
|
findMin(n)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Otherwise, take the lower bound next edge.
|
// Otherwise, take the lower bound next edge.
|
||||||
idx, lbNode := n.getLowerBoundEdge(search[0])
|
idx, lbNode := n.getLowerBoundEdge(search[0])
|
||||||
if lbNode == nil {
|
if lbNode == nil {
|
||||||
i.node = nil
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -144,7 +162,6 @@ func (i *Iterator) SeekLowerBound(key []byte) {
|
|||||||
i.stack = append(i.stack, n.edges[idx+1:])
|
i.stack = append(i.stack, n.edges[idx+1:])
|
||||||
}
|
}
|
||||||
|
|
||||||
i.node = lbNode
|
|
||||||
// Recurse
|
// Recurse
|
||||||
n = lbNode
|
n = lbNode
|
||||||
}
|
}
|
||||||
@ -155,7 +172,7 @@ func (i *Iterator) Next() ([]byte, interface{}, bool) {
|
|||||||
// Initialize our stack if needed
|
// Initialize our stack if needed
|
||||||
if i.stack == nil && i.node != nil {
|
if i.stack == nil && i.node != nil {
|
||||||
i.stack = []edges{
|
i.stack = []edges{
|
||||||
edges{
|
{
|
||||||
edge{node: i.node},
|
edge{node: i.node},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
30
vendor/github.com/hashicorp/go-immutable-radix/node.go
generated
vendored
30
vendor/github.com/hashicorp/go-immutable-radix/node.go
generated
vendored
@ -211,6 +211,12 @@ func (n *Node) Iterator() *Iterator {
|
|||||||
return &Iterator{node: n}
|
return &Iterator{node: n}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ReverseIterator is used to return an iterator at
|
||||||
|
// the given node to walk the tree backwards
|
||||||
|
func (n *Node) ReverseIterator() *ReverseIterator {
|
||||||
|
return NewReverseIterator(n)
|
||||||
|
}
|
||||||
|
|
||||||
// rawIterator is used to return a raw iterator at the given node to walk the
|
// rawIterator is used to return a raw iterator at the given node to walk the
|
||||||
// tree.
|
// tree.
|
||||||
func (n *Node) rawIterator() *rawIterator {
|
func (n *Node) rawIterator() *rawIterator {
|
||||||
@ -224,6 +230,11 @@ func (n *Node) Walk(fn WalkFn) {
|
|||||||
recursiveWalk(n, fn)
|
recursiveWalk(n, fn)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WalkBackwards is used to walk the tree in reverse order
|
||||||
|
func (n *Node) WalkBackwards(fn WalkFn) {
|
||||||
|
reverseRecursiveWalk(n, fn)
|
||||||
|
}
|
||||||
|
|
||||||
// WalkPrefix is used to walk the tree under a prefix
|
// WalkPrefix is used to walk the tree under a prefix
|
||||||
func (n *Node) WalkPrefix(prefix []byte, fn WalkFn) {
|
func (n *Node) WalkPrefix(prefix []byte, fn WalkFn) {
|
||||||
search := prefix
|
search := prefix
|
||||||
@ -302,3 +313,22 @@ func recursiveWalk(n *Node, fn WalkFn) bool {
|
|||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// reverseRecursiveWalk is used to do a reverse pre-order
|
||||||
|
// walk of a node recursively. Returns true if the walk
|
||||||
|
// should be aborted
|
||||||
|
func reverseRecursiveWalk(n *Node, fn WalkFn) bool {
|
||||||
|
// Visit the leaf values if any
|
||||||
|
if n.leaf != nil && fn(n.leaf.key, n.leaf.val) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// Recurse on the children in reverse order
|
||||||
|
for i := len(n.edges) - 1; i >= 0; i-- {
|
||||||
|
e := n.edges[i]
|
||||||
|
if reverseRecursiveWalk(e.node, fn) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
2
vendor/github.com/hashicorp/go-immutable-radix/raw_iter.go
generated
vendored
2
vendor/github.com/hashicorp/go-immutable-radix/raw_iter.go
generated
vendored
@ -41,7 +41,7 @@ func (i *rawIterator) Next() {
|
|||||||
// Initialize our stack if needed.
|
// Initialize our stack if needed.
|
||||||
if i.stack == nil && i.node != nil {
|
if i.stack == nil && i.node != nil {
|
||||||
i.stack = []rawStackEntry{
|
i.stack = []rawStackEntry{
|
||||||
rawStackEntry{
|
{
|
||||||
edges: edges{
|
edges: edges{
|
||||||
edge{node: i.node},
|
edge{node: i.node},
|
||||||
},
|
},
|
||||||
|
239
vendor/github.com/hashicorp/go-immutable-radix/reverse_iter.go
generated
vendored
Normal file
239
vendor/github.com/hashicorp/go-immutable-radix/reverse_iter.go
generated
vendored
Normal file
@ -0,0 +1,239 @@
|
|||||||
|
package iradix
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ReverseIterator is used to iterate over a set of nodes
|
||||||
|
// in reverse in-order
|
||||||
|
type ReverseIterator struct {
|
||||||
|
i *Iterator
|
||||||
|
|
||||||
|
// expandedParents stores the set of parent nodes whose relevant children have
|
||||||
|
// already been pushed into the stack. This can happen during seek or during
|
||||||
|
// iteration.
|
||||||
|
//
|
||||||
|
// Unlike forward iteration we need to recurse into children before we can
|
||||||
|
// output the value stored in an internal leaf since all children are greater.
|
||||||
|
// We use this to track whether we have already ensured all the children are
|
||||||
|
// in the stack.
|
||||||
|
expandedParents map[*Node]struct{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewReverseIterator returns a new ReverseIterator at a node
|
||||||
|
func NewReverseIterator(n *Node) *ReverseIterator {
|
||||||
|
return &ReverseIterator{
|
||||||
|
i: &Iterator{node: n},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// SeekPrefixWatch is used to seek the iterator to a given prefix
|
||||||
|
// and returns the watch channel of the finest granularity
|
||||||
|
func (ri *ReverseIterator) SeekPrefixWatch(prefix []byte) (watch <-chan struct{}) {
|
||||||
|
return ri.i.SeekPrefixWatch(prefix)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SeekPrefix is used to seek the iterator to a given prefix
|
||||||
|
func (ri *ReverseIterator) SeekPrefix(prefix []byte) {
|
||||||
|
ri.i.SeekPrefixWatch(prefix)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SeekReverseLowerBound is used to seek the iterator to the largest key that is
|
||||||
|
// lower or equal to the given key. There is no watch variant as it's hard to
|
||||||
|
// predict based on the radix structure which node(s) changes might affect the
|
||||||
|
// result.
|
||||||
|
func (ri *ReverseIterator) SeekReverseLowerBound(key []byte) {
|
||||||
|
// Wipe the stack. Unlike Prefix iteration, we need to build the stack as we
|
||||||
|
// go because we need only a subset of edges of many nodes in the path to the
|
||||||
|
// leaf with the lower bound. Note that the iterator will still recurse into
|
||||||
|
// children that we don't traverse on the way to the reverse lower bound as it
|
||||||
|
// walks the stack.
|
||||||
|
ri.i.stack = []edges{}
|
||||||
|
// ri.i.node starts off in the common case as pointing to the root node of the
|
||||||
|
// tree. By the time we return we have either found a lower bound and setup
|
||||||
|
// the stack to traverse all larger keys, or we have not and the stack and
|
||||||
|
// node should both be nil to prevent the iterator from assuming it is just
|
||||||
|
// iterating the whole tree from the root node. Either way this needs to end
|
||||||
|
// up as nil so just set it here.
|
||||||
|
n := ri.i.node
|
||||||
|
ri.i.node = nil
|
||||||
|
search := key
|
||||||
|
|
||||||
|
if ri.expandedParents == nil {
|
||||||
|
ri.expandedParents = make(map[*Node]struct{})
|
||||||
|
}
|
||||||
|
|
||||||
|
found := func(n *Node) {
|
||||||
|
ri.i.stack = append(ri.i.stack, edges{edge{node: n}})
|
||||||
|
// We need to mark this node as expanded in advance too otherwise the
|
||||||
|
// iterator will attempt to walk all of its children even though they are
|
||||||
|
// greater than the lower bound we have found. We've expanded it in the
|
||||||
|
// sense that all of its children that we want to walk are already in the
|
||||||
|
// stack (i.e. none of them).
|
||||||
|
ri.expandedParents[n] = struct{}{}
|
||||||
|
}
|
||||||
|
|
||||||
|
for {
|
||||||
|
// Compare current prefix with the search key's same-length prefix.
|
||||||
|
var prefixCmp int
|
||||||
|
if len(n.prefix) < len(search) {
|
||||||
|
prefixCmp = bytes.Compare(n.prefix, search[0:len(n.prefix)])
|
||||||
|
} else {
|
||||||
|
prefixCmp = bytes.Compare(n.prefix, search)
|
||||||
|
}
|
||||||
|
|
||||||
|
if prefixCmp < 0 {
|
||||||
|
// Prefix is smaller than search prefix, that means there is no exact
|
||||||
|
// match for the search key. But we are looking in reverse, so the reverse
|
||||||
|
// lower bound will be the largest leaf under this subtree, since it is
|
||||||
|
// the value that would come right before the current search key if it
|
||||||
|
// were in the tree. So we need to follow the maximum path in this subtree
|
||||||
|
// to find it. Note that this is exactly what the iterator will already do
|
||||||
|
// if it finds a node in the stack that has _not_ been marked as expanded
|
||||||
|
// so in this one case we don't call `found` and instead let the iterator
|
||||||
|
// do the expansion and recursion through all the children.
|
||||||
|
ri.i.stack = append(ri.i.stack, edges{edge{node: n}})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if prefixCmp > 0 {
|
||||||
|
// Prefix is larger than search prefix, or there is no prefix but we've
|
||||||
|
// also exhausted the search key. Either way, that means there is no
|
||||||
|
// reverse lower bound since nothing comes before our current search
|
||||||
|
// prefix.
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// If this is a leaf, something needs to happen! Note that if it's a leaf
|
||||||
|
// and prefixCmp was zero (which it must be to get here) then the leaf value
|
||||||
|
// is either an exact match for the search, or it's lower. It can't be
|
||||||
|
// greater.
|
||||||
|
if n.isLeaf() {
|
||||||
|
|
||||||
|
// Firstly, if it's an exact match, we're done!
|
||||||
|
if bytes.Equal(n.leaf.key, key) {
|
||||||
|
found(n)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// It's not so this node's leaf value must be lower and could still be a
|
||||||
|
// valid contender for reverse lower bound.
|
||||||
|
|
||||||
|
// If it has no children then we are also done.
|
||||||
|
if len(n.edges) == 0 {
|
||||||
|
// This leaf is the lower bound.
|
||||||
|
found(n)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Finally, this leaf is internal (has children) so we'll keep searching,
|
||||||
|
// but we need to add it to the iterator's stack since it has a leaf value
|
||||||
|
// that needs to be iterated over. It needs to be added to the stack
|
||||||
|
// before its children below as it comes first.
|
||||||
|
ri.i.stack = append(ri.i.stack, edges{edge{node: n}})
|
||||||
|
// We also need to mark it as expanded since we'll be adding any of its
|
||||||
|
// relevant children below and so don't want the iterator to re-add them
|
||||||
|
// on its way back up the stack.
|
||||||
|
ri.expandedParents[n] = struct{}{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Consume the search prefix. Note that this is safe because if n.prefix is
|
||||||
|
// longer than the search slice prefixCmp would have been > 0 above and the
|
||||||
|
// method would have already returned.
|
||||||
|
search = search[len(n.prefix):]
|
||||||
|
|
||||||
|
if len(search) == 0 {
|
||||||
|
// We've exhausted the search key but we are not at a leaf. That means all
|
||||||
|
// children are greater than the search key so a reverse lower bound
|
||||||
|
// doesn't exist in this subtree. Note that there might still be one in
|
||||||
|
// the whole radix tree by following a different path somewhere further
|
||||||
|
// up. If that's the case then the iterator's stack will contain all the
|
||||||
|
// smaller nodes already and Previous will walk through them correctly.
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Otherwise, take the lower bound next edge.
|
||||||
|
idx, lbNode := n.getLowerBoundEdge(search[0])
|
||||||
|
|
||||||
|
// From here, we need to update the stack with all values lower than
|
||||||
|
// the lower bound edge. Since getLowerBoundEdge() returns -1 when the
|
||||||
|
// search prefix is larger than all edges, we need to place idx at the
|
||||||
|
// last edge index so they can all be place in the stack, since they
|
||||||
|
// come before our search prefix.
|
||||||
|
if idx == -1 {
|
||||||
|
idx = len(n.edges)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create stack edges for the all strictly lower edges in this node.
|
||||||
|
if len(n.edges[:idx]) > 0 {
|
||||||
|
ri.i.stack = append(ri.i.stack, n.edges[:idx])
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exit if there's no lower bound edge. The stack will have the previous
|
||||||
|
// nodes already.
|
||||||
|
if lbNode == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Recurse
|
||||||
|
n = lbNode
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Previous returns the previous node in reverse order
|
||||||
|
func (ri *ReverseIterator) Previous() ([]byte, interface{}, bool) {
|
||||||
|
// Initialize our stack if needed
|
||||||
|
if ri.i.stack == nil && ri.i.node != nil {
|
||||||
|
ri.i.stack = []edges{
|
||||||
|
{
|
||||||
|
edge{node: ri.i.node},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ri.expandedParents == nil {
|
||||||
|
ri.expandedParents = make(map[*Node]struct{})
|
||||||
|
}
|
||||||
|
|
||||||
|
for len(ri.i.stack) > 0 {
|
||||||
|
// Inspect the last element of the stack
|
||||||
|
n := len(ri.i.stack)
|
||||||
|
last := ri.i.stack[n-1]
|
||||||
|
m := len(last)
|
||||||
|
elem := last[m-1].node
|
||||||
|
|
||||||
|
_, alreadyExpanded := ri.expandedParents[elem]
|
||||||
|
|
||||||
|
// If this is an internal node and we've not seen it already, we need to
|
||||||
|
// leave it in the stack so we can return its possible leaf value _after_
|
||||||
|
// we've recursed through all its children.
|
||||||
|
if len(elem.edges) > 0 && !alreadyExpanded {
|
||||||
|
// record that we've seen this node!
|
||||||
|
ri.expandedParents[elem] = struct{}{}
|
||||||
|
// push child edges onto stack and skip the rest of the loop to recurse
|
||||||
|
// into the largest one.
|
||||||
|
ri.i.stack = append(ri.i.stack, elem.edges)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove the node from the stack
|
||||||
|
if m > 1 {
|
||||||
|
ri.i.stack[n-1] = last[:m-1]
|
||||||
|
} else {
|
||||||
|
ri.i.stack = ri.i.stack[:n-1]
|
||||||
|
}
|
||||||
|
// We don't need this state any more as it's no longer in the stack so we
|
||||||
|
// won't visit it again
|
||||||
|
if alreadyExpanded {
|
||||||
|
delete(ri.expandedParents, elem)
|
||||||
|
}
|
||||||
|
|
||||||
|
// If this is a leaf, return it
|
||||||
|
if elem.leaf != nil {
|
||||||
|
return elem.leaf.key, elem.leaf.val, true
|
||||||
|
}
|
||||||
|
|
||||||
|
// it's not a leaf so keep walking the stack to find the previous leaf
|
||||||
|
}
|
||||||
|
return nil, nil, false
|
||||||
|
}
|
5
vendor/github.com/hashicorp/go-plugin/README.md
generated
vendored
5
vendor/github.com/hashicorp/go-plugin/README.md
generated
vendored
@ -141,11 +141,6 @@ This plugin system will give host processes a system for constraining
|
|||||||
versions. This is in addition to the protocol versioning already present
|
versions. This is in addition to the protocol versioning already present
|
||||||
which is more for larger underlying changes.
|
which is more for larger underlying changes.
|
||||||
|
|
||||||
**Plugin fetching.** We will integrate with [go-getter](https://github.com/hashicorp/go-getter)
|
|
||||||
to support automatic download + install of plugins. Paired with cryptographically
|
|
||||||
secure plugins (above), we can make this a safe operation for an amazing
|
|
||||||
user experience.
|
|
||||||
|
|
||||||
## What About Shared Libraries?
|
## What About Shared Libraries?
|
||||||
|
|
||||||
When we started using plugins (late 2012, early 2013), plugins over RPC
|
When we started using plugins (late 2012, early 2013), plugins over RPC
|
||||||
|
53
vendor/github.com/hashicorp/go-plugin/client.go
generated
vendored
53
vendor/github.com/hashicorp/go-plugin/client.go
generated
vendored
@ -22,7 +22,8 @@ import (
|
|||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
hclog "github.com/hashicorp/go-hclog"
|
"github.com/hashicorp/go-hclog"
|
||||||
|
"google.golang.org/grpc"
|
||||||
)
|
)
|
||||||
|
|
||||||
// If this is 1, then we've called CleanupClients. This can be used
|
// If this is 1, then we've called CleanupClients. This can be used
|
||||||
@ -159,11 +160,8 @@ type ClientConfig struct {
|
|||||||
|
|
||||||
// SyncStdout, SyncStderr can be set to override the
|
// SyncStdout, SyncStderr can be set to override the
|
||||||
// respective os.Std* values in the plugin. Care should be taken to
|
// respective os.Std* values in the plugin. Care should be taken to
|
||||||
// avoid races here. If these are nil, then this will automatically be
|
// avoid races here. If these are nil, then this will be set to
|
||||||
// hooked up to os.Stdin, Stdout, and Stderr, respectively.
|
// ioutil.Discard.
|
||||||
//
|
|
||||||
// If the default values (nil) are used, then this package will not
|
|
||||||
// sync any of these streams.
|
|
||||||
SyncStdout io.Writer
|
SyncStdout io.Writer
|
||||||
SyncStderr io.Writer
|
SyncStderr io.Writer
|
||||||
|
|
||||||
@ -206,15 +204,27 @@ type ClientConfig struct {
|
|||||||
//
|
//
|
||||||
// You cannot Reattach to a server with this option enabled.
|
// You cannot Reattach to a server with this option enabled.
|
||||||
AutoMTLS bool
|
AutoMTLS bool
|
||||||
|
|
||||||
|
// GRPCDialOptions allows plugin users to pass custom grpc.DialOption
|
||||||
|
// to create gRPC connections. This only affects plugins using the gRPC
|
||||||
|
// protocol.
|
||||||
|
GRPCDialOptions []grpc.DialOption
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReattachConfig is used to configure a client to reattach to an
|
// ReattachConfig is used to configure a client to reattach to an
|
||||||
// already-running plugin process. You can retrieve this information by
|
// already-running plugin process. You can retrieve this information by
|
||||||
// calling ReattachConfig on Client.
|
// calling ReattachConfig on Client.
|
||||||
type ReattachConfig struct {
|
type ReattachConfig struct {
|
||||||
Protocol Protocol
|
Protocol Protocol
|
||||||
Addr net.Addr
|
ProtocolVersion int
|
||||||
Pid int
|
Addr net.Addr
|
||||||
|
Pid int
|
||||||
|
|
||||||
|
// Test is set to true if this is reattaching to to a plugin in "test mode"
|
||||||
|
// (see ServeConfig.Test). In this mode, client.Kill will NOT kill the
|
||||||
|
// process and instead will rely on the plugin to terminate itself. This
|
||||||
|
// should not be used in non-test environments.
|
||||||
|
Test bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// SecureConfig is used to configure a client to verify the integrity of an
|
// SecureConfig is used to configure a client to verify the integrity of an
|
||||||
@ -690,14 +700,14 @@ func (c *Client) Start() (addr net.Addr, err error) {
|
|||||||
|
|
||||||
// Check the core protocol. Wrapped in a {} for scoping.
|
// Check the core protocol. Wrapped in a {} for scoping.
|
||||||
{
|
{
|
||||||
var coreProtocol int64
|
var coreProtocol int
|
||||||
coreProtocol, err = strconv.ParseInt(parts[0], 10, 0)
|
coreProtocol, err = strconv.Atoi(parts[0])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = fmt.Errorf("Error parsing core protocol version: %s", err)
|
err = fmt.Errorf("Error parsing core protocol version: %s", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if int(coreProtocol) != CoreProtocolVersion {
|
if coreProtocol != CoreProtocolVersion {
|
||||||
err = fmt.Errorf("Incompatible core API version with plugin. "+
|
err = fmt.Errorf("Incompatible core API version with plugin. "+
|
||||||
"Plugin version: %s, Core version: %d\n\n"+
|
"Plugin version: %s, Core version: %d\n\n"+
|
||||||
"To fix this, the plugin usually only needs to be recompiled.\n"+
|
"To fix this, the plugin usually only needs to be recompiled.\n"+
|
||||||
@ -788,7 +798,10 @@ func (c *Client) reattach() (net.Addr, error) {
|
|||||||
// Verify the process still exists. If not, then it is an error
|
// Verify the process still exists. If not, then it is an error
|
||||||
p, err := os.FindProcess(c.config.Reattach.Pid)
|
p, err := os.FindProcess(c.config.Reattach.Pid)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
// On Unix systems, FindProcess never returns an error.
|
||||||
|
// On Windows, for non-existent pids it returns:
|
||||||
|
// os.SyscallError - 'OpenProcess: the paremter is incorrect'
|
||||||
|
return nil, ErrProcessNotFound
|
||||||
}
|
}
|
||||||
|
|
||||||
// Attempt to connect to the addr since on Unix systems FindProcess
|
// Attempt to connect to the addr since on Unix systems FindProcess
|
||||||
@ -825,15 +838,25 @@ func (c *Client) reattach() (net.Addr, error) {
|
|||||||
c.exited = true
|
c.exited = true
|
||||||
}(p.Pid)
|
}(p.Pid)
|
||||||
|
|
||||||
// Set the address and process
|
// Set the address and protocol
|
||||||
c.address = c.config.Reattach.Addr
|
c.address = c.config.Reattach.Addr
|
||||||
c.process = p
|
|
||||||
c.protocol = c.config.Reattach.Protocol
|
c.protocol = c.config.Reattach.Protocol
|
||||||
if c.protocol == "" {
|
if c.protocol == "" {
|
||||||
// Default the protocol to net/rpc for backwards compatibility
|
// Default the protocol to net/rpc for backwards compatibility
|
||||||
c.protocol = ProtocolNetRPC
|
c.protocol = ProtocolNetRPC
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if c.config.Reattach.Test {
|
||||||
|
c.negotiatedVersion = c.config.Reattach.ProtocolVersion
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we're in test mode, we do NOT set the process. This avoids the
|
||||||
|
// process being killed (the only purpose we have for c.process), since
|
||||||
|
// in test mode the process is responsible for exiting on its own.
|
||||||
|
if !c.config.Reattach.Test {
|
||||||
|
c.process = p
|
||||||
|
}
|
||||||
|
|
||||||
return c.address, nil
|
return c.address, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
16
vendor/github.com/hashicorp/go-plugin/go.mod
generated
vendored
16
vendor/github.com/hashicorp/go-plugin/go.mod
generated
vendored
@ -1,17 +1,15 @@
|
|||||||
module github.com/hashicorp/go-plugin
|
module github.com/hashicorp/go-plugin
|
||||||
|
|
||||||
|
go 1.13
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b // indirect
|
github.com/golang/protobuf v1.3.4
|
||||||
github.com/golang/protobuf v1.2.0
|
github.com/hashicorp/go-hclog v0.14.1
|
||||||
github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd
|
|
||||||
github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb
|
github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb
|
||||||
|
github.com/jhump/protoreflect v1.6.0
|
||||||
github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77
|
github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77
|
||||||
github.com/oklog/run v1.0.0
|
github.com/oklog/run v1.0.0
|
||||||
github.com/stretchr/testify v1.3.0 // indirect
|
github.com/stretchr/testify v1.3.0 // indirect
|
||||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d
|
golang.org/x/net v0.0.0-20190311183353-d8887717615a
|
||||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 // indirect
|
google.golang.org/grpc v1.27.1
|
||||||
golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc // indirect
|
|
||||||
golang.org/x/text v0.3.0 // indirect
|
|
||||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8 // indirect
|
|
||||||
google.golang.org/grpc v1.14.0
|
|
||||||
)
|
)
|
||||||
|
72
vendor/github.com/hashicorp/go-plugin/go.sum
generated
vendored
72
vendor/github.com/hashicorp/go-plugin/go.sum
generated
vendored
@ -1,31 +1,87 @@
|
|||||||
|
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||||
|
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||||
|
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||||
|
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||||
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
|
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||||
|
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||||
|
github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys=
|
||||||
|
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
||||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
|
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
|
||||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||||
|
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
||||||
github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
|
github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
|
||||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd h1:rNuUHR+CvK1IS89MMtcF0EpcVMZtjKfPRp4MEmt/aTs=
|
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI=
|
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
|
github.com/golang/protobuf v1.3.4 h1:87PNWwrRvUSnqS4dlcBU/ftvOIBep4sYuBLlh6rX2wk=
|
||||||
|
github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
|
||||||
|
github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ=
|
||||||
|
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
||||||
|
github.com/hashicorp/go-hclog v0.14.1 h1:nQcJDQwIAGnmoUWp8ubocEX40cCml/17YkF6csQLReU=
|
||||||
|
github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ=
|
||||||
github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb h1:b5rjCoWHc7eqmAS4/qyk21ZsHyb6Mxv/jykxvNTkU4M=
|
github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb h1:b5rjCoWHc7eqmAS4/qyk21ZsHyb6Mxv/jykxvNTkU4M=
|
||||||
github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM=
|
github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM=
|
||||||
|
github.com/jhump/protoreflect v1.6.0 h1:h5jfMVslIg6l29nsMs0D8Wj17RDVdNYti0vDN/PZZoE=
|
||||||
|
github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyXYWUh7ymB74=
|
||||||
|
github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA=
|
||||||
|
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
|
||||||
|
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
|
||||||
|
github.com/mattn/go-isatty v0.0.10 h1:qxFzApOv4WsAL965uUPIsXzAKCZxN2p9UqdhFS4ZW10=
|
||||||
|
github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84=
|
||||||
github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77 h1:7GoSOOW2jpsfkntVKaS2rAr1TJqfcxotyaUcuxoZSzg=
|
github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77 h1:7GoSOOW2jpsfkntVKaS2rAr1TJqfcxotyaUcuxoZSzg=
|
||||||
github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
|
github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
|
||||||
github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw=
|
github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw=
|
||||||
github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
|
github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
|
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
|
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||||
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
|
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
|
||||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
|
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
|
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||||
|
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
||||||
|
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||||
|
golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
|
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d h1:g9qWBGx4puODJTMVyoPrpoxPFgVGd+z1DZwjfRu4d0I=
|
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d h1:g9qWBGx4puODJTMVyoPrpoxPFgVGd+z1DZwjfRu4d0I=
|
||||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 h1:YUO/7uOKsKeq9UokNS62b8FYywz3ker1l1vDZRCRefw=
|
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/net v0.0.0-20190311183353-d8887717615a h1:oWX7TPOiFAMXLq8o0ikBYfCJVlRHBcsciT5bXOrH628=
|
||||||
golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc h1:WiYx1rIFmx8c0mXAFtv5D/mHyKe1+jmuP7PViuwqwuQ=
|
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
|
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU=
|
||||||
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
|
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
|
golang.org/x/sys v0.0.0-20191008105621-543471e840be h1:QAcqgptGM8IQBC9K/RC4o+O9YmqEm0diQn9QmZw/0mU=
|
||||||
|
golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
|
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
|
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
||||||
|
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||||
|
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
||||||
|
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||||
|
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||||
|
google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
||||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8 h1:Nw54tB0rB7hY/N0NQvRW8DG4Yk3Q6T9cu9RcFQDu1tc=
|
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8 h1:Nw54tB0rB7hY/N0NQvRW8DG4Yk3Q6T9cu9RcFQDu1tc=
|
||||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
||||||
google.golang.org/grpc v1.14.0 h1:ArxJuB1NWfPY6r9Gp9gqwplT0Ge7nqv9msgu03lHLmo=
|
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55 h1:gSJIx1SDwno+2ElGhA4+qG2zF97qiUzTM+rQ0klBOcE=
|
||||||
google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
|
||||||
|
google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
||||||
|
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||||
|
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
|
||||||
|
google.golang.org/grpc v1.27.1 h1:zvIju4sqAGvwKspUQOhwnpcqSbzi7/H6QomNNjTL4sk=
|
||||||
|
google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
||||||
|
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
|
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
|
15
vendor/github.com/hashicorp/go-plugin/grpc_client.go
generated
vendored
15
vendor/github.com/hashicorp/go-plugin/grpc_client.go
generated
vendored
@ -14,9 +14,9 @@ import (
|
|||||||
"google.golang.org/grpc/health/grpc_health_v1"
|
"google.golang.org/grpc/health/grpc_health_v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
func dialGRPCConn(tls *tls.Config, dialer func(string, time.Duration) (net.Conn, error)) (*grpc.ClientConn, error) {
|
func dialGRPCConn(tls *tls.Config, dialer func(string, time.Duration) (net.Conn, error), dialOpts ...grpc.DialOption) (*grpc.ClientConn, error) {
|
||||||
// Build dialing options.
|
// Build dialing options.
|
||||||
opts := make([]grpc.DialOption, 0, 5)
|
opts := make([]grpc.DialOption, 0)
|
||||||
|
|
||||||
// We use a custom dialer so that we can connect over unix domain sockets.
|
// We use a custom dialer so that we can connect over unix domain sockets.
|
||||||
opts = append(opts, grpc.WithDialer(dialer))
|
opts = append(opts, grpc.WithDialer(dialer))
|
||||||
@ -37,6 +37,8 @@ func dialGRPCConn(tls *tls.Config, dialer func(string, time.Duration) (net.Conn,
|
|||||||
grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(math.MaxInt32)),
|
grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(math.MaxInt32)),
|
||||||
grpc.WithDefaultCallOptions(grpc.MaxCallSendMsgSize(math.MaxInt32)))
|
grpc.WithDefaultCallOptions(grpc.MaxCallSendMsgSize(math.MaxInt32)))
|
||||||
|
|
||||||
|
// Add our custom options if we have any
|
||||||
|
opts = append(opts, dialOpts...)
|
||||||
|
|
||||||
// Connect. Note the first parameter is unused because we use a custom
|
// Connect. Note the first parameter is unused because we use a custom
|
||||||
// dialer that has the state to see the address.
|
// dialer that has the state to see the address.
|
||||||
@ -51,7 +53,7 @@ func dialGRPCConn(tls *tls.Config, dialer func(string, time.Duration) (net.Conn,
|
|||||||
// newGRPCClient creates a new GRPCClient. The Client argument is expected
|
// newGRPCClient creates a new GRPCClient. The Client argument is expected
|
||||||
// to be successfully started already with a lock held.
|
// to be successfully started already with a lock held.
|
||||||
func newGRPCClient(doneCtx context.Context, c *Client) (*GRPCClient, error) {
|
func newGRPCClient(doneCtx context.Context, c *Client) (*GRPCClient, error) {
|
||||||
conn, err := dialGRPCConn(c.config.TLSConfig, c.dialer)
|
conn, err := dialGRPCConn(c.config.TLSConfig, c.dialer, c.config.GRPCDialOptions...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -62,6 +64,13 @@ func newGRPCClient(doneCtx context.Context, c *Client) (*GRPCClient, error) {
|
|||||||
go broker.Run()
|
go broker.Run()
|
||||||
go brokerGRPCClient.StartStream()
|
go brokerGRPCClient.StartStream()
|
||||||
|
|
||||||
|
// Start the stdio client
|
||||||
|
stdioClient, err := newGRPCStdioClient(doneCtx, c.logger.Named("stdio"), conn)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
go stdioClient.Run(c.config.SyncStdout, c.config.SyncStderr)
|
||||||
|
|
||||||
cl := &GRPCClient{
|
cl := &GRPCClient{
|
||||||
Conn: conn,
|
Conn: conn,
|
||||||
Plugins: c.config.Plugins,
|
Plugins: c.config.Plugins,
|
||||||
|
19
vendor/github.com/hashicorp/go-plugin/grpc_server.go
generated
vendored
19
vendor/github.com/hashicorp/go-plugin/grpc_server.go
generated
vendored
@ -14,6 +14,7 @@ import (
|
|||||||
"google.golang.org/grpc/credentials"
|
"google.golang.org/grpc/credentials"
|
||||||
"google.golang.org/grpc/health"
|
"google.golang.org/grpc/health"
|
||||||
"google.golang.org/grpc/health/grpc_health_v1"
|
"google.golang.org/grpc/health/grpc_health_v1"
|
||||||
|
"google.golang.org/grpc/reflection"
|
||||||
)
|
)
|
||||||
|
|
||||||
// GRPCServiceName is the name of the service that the health check should
|
// GRPCServiceName is the name of the service that the health check should
|
||||||
@ -51,9 +52,10 @@ type GRPCServer struct {
|
|||||||
Stdout io.Reader
|
Stdout io.Reader
|
||||||
Stderr io.Reader
|
Stderr io.Reader
|
||||||
|
|
||||||
config GRPCServerConfig
|
config GRPCServerConfig
|
||||||
server *grpc.Server
|
server *grpc.Server
|
||||||
broker *GRPCBroker
|
broker *GRPCBroker
|
||||||
|
stdioServer *grpcStdioServer
|
||||||
|
|
||||||
logger hclog.Logger
|
logger hclog.Logger
|
||||||
}
|
}
|
||||||
@ -73,6 +75,9 @@ func (s *GRPCServer) Init() error {
|
|||||||
GRPCServiceName, grpc_health_v1.HealthCheckResponse_SERVING)
|
GRPCServiceName, grpc_health_v1.HealthCheckResponse_SERVING)
|
||||||
grpc_health_v1.RegisterHealthServer(s.server, healthCheck)
|
grpc_health_v1.RegisterHealthServer(s.server, healthCheck)
|
||||||
|
|
||||||
|
// Register the reflection service
|
||||||
|
reflection.Register(s.server)
|
||||||
|
|
||||||
// Register the broker service
|
// Register the broker service
|
||||||
brokerServer := newGRPCBrokerServer()
|
brokerServer := newGRPCBrokerServer()
|
||||||
plugin.RegisterGRPCBrokerServer(s.server, brokerServer)
|
plugin.RegisterGRPCBrokerServer(s.server, brokerServer)
|
||||||
@ -80,11 +85,13 @@ func (s *GRPCServer) Init() error {
|
|||||||
go s.broker.Run()
|
go s.broker.Run()
|
||||||
|
|
||||||
// Register the controller
|
// Register the controller
|
||||||
controllerServer := &grpcControllerServer{
|
controllerServer := &grpcControllerServer{server: s}
|
||||||
server: s,
|
|
||||||
}
|
|
||||||
plugin.RegisterGRPCControllerServer(s.server, controllerServer)
|
plugin.RegisterGRPCControllerServer(s.server, controllerServer)
|
||||||
|
|
||||||
|
// Register the stdio service
|
||||||
|
s.stdioServer = newGRPCStdioServer(s.logger, s.Stdout, s.Stderr)
|
||||||
|
plugin.RegisterGRPCStdioServer(s.server, s.stdioServer)
|
||||||
|
|
||||||
// Register all our plugins onto the gRPC server.
|
// Register all our plugins onto the gRPC server.
|
||||||
for k, raw := range s.Plugins {
|
for k, raw := range s.Plugins {
|
||||||
p, ok := raw.(GRPCPlugin)
|
p, ok := raw.(GRPCPlugin)
|
||||||
|
207
vendor/github.com/hashicorp/go-plugin/grpc_stdio.go
generated
vendored
Normal file
207
vendor/github.com/hashicorp/go-plugin/grpc_stdio.go
generated
vendored
Normal file
@ -0,0 +1,207 @@
|
|||||||
|
package plugin
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"bytes"
|
||||||
|
"context"
|
||||||
|
"io"
|
||||||
|
|
||||||
|
empty "github.com/golang/protobuf/ptypes/empty"
|
||||||
|
hclog "github.com/hashicorp/go-hclog"
|
||||||
|
"github.com/hashicorp/go-plugin/internal/plugin"
|
||||||
|
"google.golang.org/grpc"
|
||||||
|
"google.golang.org/grpc/codes"
|
||||||
|
"google.golang.org/grpc/status"
|
||||||
|
)
|
||||||
|
|
||||||
|
// grpcStdioBuffer is the buffer size we try to fill when sending a chunk of
|
||||||
|
// stdio data. This is currently 1 KB for no reason other than that seems like
|
||||||
|
// enough (stdio data isn't that common) and is fairly low.
|
||||||
|
const grpcStdioBuffer = 1 * 1024
|
||||||
|
|
||||||
|
// grpcStdioServer implements the Stdio service and streams stdiout/stderr.
|
||||||
|
type grpcStdioServer struct {
|
||||||
|
stdoutCh <-chan []byte
|
||||||
|
stderrCh <-chan []byte
|
||||||
|
}
|
||||||
|
|
||||||
|
// newGRPCStdioServer creates a new grpcStdioServer and starts the stream
|
||||||
|
// copying for the given out and err readers.
|
||||||
|
//
|
||||||
|
// This must only be called ONCE per srcOut, srcErr.
|
||||||
|
func newGRPCStdioServer(log hclog.Logger, srcOut, srcErr io.Reader) *grpcStdioServer {
|
||||||
|
stdoutCh := make(chan []byte)
|
||||||
|
stderrCh := make(chan []byte)
|
||||||
|
|
||||||
|
// Begin copying the streams
|
||||||
|
go copyChan(log, stdoutCh, srcOut)
|
||||||
|
go copyChan(log, stderrCh, srcErr)
|
||||||
|
|
||||||
|
// Construct our server
|
||||||
|
return &grpcStdioServer{
|
||||||
|
stdoutCh: stdoutCh,
|
||||||
|
stderrCh: stderrCh,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// StreamStdio streams our stdout/err as the response.
|
||||||
|
func (s *grpcStdioServer) StreamStdio(
|
||||||
|
_ *empty.Empty,
|
||||||
|
srv plugin.GRPCStdio_StreamStdioServer,
|
||||||
|
) error {
|
||||||
|
// Share the same data value between runs. Sending this over the wire
|
||||||
|
// marshals it so we can reuse this.
|
||||||
|
var data plugin.StdioData
|
||||||
|
|
||||||
|
for {
|
||||||
|
// Read our data
|
||||||
|
select {
|
||||||
|
case data.Data = <-s.stdoutCh:
|
||||||
|
data.Channel = plugin.StdioData_STDOUT
|
||||||
|
|
||||||
|
case data.Data = <-s.stderrCh:
|
||||||
|
data.Channel = plugin.StdioData_STDERR
|
||||||
|
|
||||||
|
case <-srv.Context().Done():
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Not sure if this is possible, but if we somehow got here and
|
||||||
|
// we didn't populate any data at all, then just continue.
|
||||||
|
if len(data.Data) == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// Send our data to the client.
|
||||||
|
if err := srv.Send(&data); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// grpcStdioClient wraps the stdio service as a client to copy
|
||||||
|
// the stdio data to output writers.
|
||||||
|
type grpcStdioClient struct {
|
||||||
|
log hclog.Logger
|
||||||
|
stdioClient plugin.GRPCStdio_StreamStdioClient
|
||||||
|
}
|
||||||
|
|
||||||
|
// newGRPCStdioClient creates a grpcStdioClient. This will perform the
|
||||||
|
// initial connection to the stdio service. If the stdio service is unavailable
|
||||||
|
// then this will be a no-op. This allows this to work without error for
|
||||||
|
// plugins that don't support this.
|
||||||
|
func newGRPCStdioClient(
|
||||||
|
ctx context.Context,
|
||||||
|
log hclog.Logger,
|
||||||
|
conn *grpc.ClientConn,
|
||||||
|
) (*grpcStdioClient, error) {
|
||||||
|
client := plugin.NewGRPCStdioClient(conn)
|
||||||
|
|
||||||
|
// Connect immediately to the endpoint
|
||||||
|
stdioClient, err := client.StreamStdio(ctx, &empty.Empty{})
|
||||||
|
|
||||||
|
// If we get an Unavailable or Unimplemented error, this means that the plugin isn't
|
||||||
|
// updated and linking to the latest version of go-plugin that supports
|
||||||
|
// this. We fall back to the previous behavior of just not syncing anything.
|
||||||
|
if status.Code(err) == codes.Unavailable || status.Code(err) == codes.Unimplemented {
|
||||||
|
log.Warn("stdio service not available, stdout/stderr syncing unavailable")
|
||||||
|
stdioClient = nil
|
||||||
|
err = nil
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &grpcStdioClient{
|
||||||
|
log: log,
|
||||||
|
stdioClient: stdioClient,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Run starts the loop that receives stdio data and writes it to the given
|
||||||
|
// writers. This blocks and should be run in a goroutine.
|
||||||
|
func (c *grpcStdioClient) Run(stdout, stderr io.Writer) {
|
||||||
|
// This will be nil if stdio is not supported by the plugin
|
||||||
|
if c.stdioClient == nil {
|
||||||
|
c.log.Warn("stdio service unavailable, run will do nothing")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
for {
|
||||||
|
c.log.Trace("waiting for stdio data")
|
||||||
|
data, err := c.stdioClient.Recv()
|
||||||
|
if err != nil {
|
||||||
|
if err == io.EOF ||
|
||||||
|
status.Code(err) == codes.Unavailable ||
|
||||||
|
status.Code(err) == codes.Canceled ||
|
||||||
|
status.Code(err) == codes.Unimplemented ||
|
||||||
|
err == context.Canceled {
|
||||||
|
c.log.Debug("received EOF, stopping recv loop", "err", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
c.log.Error("error receiving data", "err", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Determine our output writer based on channel
|
||||||
|
var w io.Writer
|
||||||
|
switch data.Channel {
|
||||||
|
case plugin.StdioData_STDOUT:
|
||||||
|
w = stdout
|
||||||
|
|
||||||
|
case plugin.StdioData_STDERR:
|
||||||
|
w = stderr
|
||||||
|
|
||||||
|
default:
|
||||||
|
c.log.Warn("unknown channel, dropping", "channel", data.Channel)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write! In the event of an error we just continue.
|
||||||
|
if c.log.IsTrace() {
|
||||||
|
c.log.Trace("received data", "channel", data.Channel.String(), "len", len(data.Data))
|
||||||
|
}
|
||||||
|
if _, err := io.Copy(w, bytes.NewReader(data.Data)); err != nil {
|
||||||
|
c.log.Error("failed to copy all bytes", "err", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// copyChan copies an io.Reader into a channel.
|
||||||
|
func copyChan(log hclog.Logger, dst chan<- []byte, src io.Reader) {
|
||||||
|
bufsrc := bufio.NewReader(src)
|
||||||
|
|
||||||
|
for {
|
||||||
|
// Make our data buffer. We allocate a new one per loop iteration
|
||||||
|
// so that we can send it over the channel.
|
||||||
|
var data [1024]byte
|
||||||
|
|
||||||
|
// Read the data, this will block until data is available
|
||||||
|
n, err := bufsrc.Read(data[:])
|
||||||
|
|
||||||
|
// We have to check if we have data BEFORE err != nil. The bufio
|
||||||
|
// docs guarantee n == 0 on EOF but its better to be safe here.
|
||||||
|
if n > 0 {
|
||||||
|
// We have data! Send it on the channel. This will block if there
|
||||||
|
// is no reader on the other side. We expect that go-plugin will
|
||||||
|
// connect immediately to the stdio server to drain this so we want
|
||||||
|
// this block to happen for backpressure.
|
||||||
|
dst <- data[:n]
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we hit EOF we're done copying
|
||||||
|
if err == io.EOF {
|
||||||
|
log.Debug("stdio EOF, exiting copy loop")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Any other error we just exit the loop. We don't expect there to
|
||||||
|
// be errors since our use case for this is reading/writing from
|
||||||
|
// a in-process pipe (os.Pipe).
|
||||||
|
if err != nil {
|
||||||
|
log.Warn("error copying stdio data, stopping copy", "err", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
2
vendor/github.com/hashicorp/go-plugin/internal/plugin/gen.go
generated
vendored
2
vendor/github.com/hashicorp/go-plugin/internal/plugin/gen.go
generated
vendored
@ -1,3 +1,3 @@
|
|||||||
//go:generate protoc -I ./ ./grpc_broker.proto ./grpc_controller.proto --go_out=plugins=grpc:.
|
//go:generate protoc -I ./ ./grpc_broker.proto ./grpc_controller.proto ./grpc_stdio.proto --go_out=plugins=grpc:.
|
||||||
|
|
||||||
package plugin
|
package plugin
|
||||||
|
48
vendor/github.com/hashicorp/go-plugin/internal/plugin/grpc_broker.pb.go
generated
vendored
48
vendor/github.com/hashicorp/go-plugin/internal/plugin/grpc_broker.pb.go
generated
vendored
@ -3,12 +3,13 @@
|
|||||||
|
|
||||||
package plugin
|
package plugin
|
||||||
|
|
||||||
|
import proto "github.com/golang/protobuf/proto"
|
||||||
|
import fmt "fmt"
|
||||||
|
import math "math"
|
||||||
|
|
||||||
import (
|
import (
|
||||||
fmt "fmt"
|
|
||||||
proto "github.com/golang/protobuf/proto"
|
|
||||||
context "golang.org/x/net/context"
|
context "golang.org/x/net/context"
|
||||||
grpc "google.golang.org/grpc"
|
grpc "google.golang.org/grpc"
|
||||||
math "math"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// Reference imports to suppress errors if they are not otherwise used.
|
// Reference imports to suppress errors if they are not otherwise used.
|
||||||
@ -35,17 +36,16 @@ func (m *ConnInfo) Reset() { *m = ConnInfo{} }
|
|||||||
func (m *ConnInfo) String() string { return proto.CompactTextString(m) }
|
func (m *ConnInfo) String() string { return proto.CompactTextString(m) }
|
||||||
func (*ConnInfo) ProtoMessage() {}
|
func (*ConnInfo) ProtoMessage() {}
|
||||||
func (*ConnInfo) Descriptor() ([]byte, []int) {
|
func (*ConnInfo) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_802e9beed3ec3b28, []int{0}
|
return fileDescriptor_grpc_broker_3322b07398605250, []int{0}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *ConnInfo) XXX_Unmarshal(b []byte) error {
|
func (m *ConnInfo) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_ConnInfo.Unmarshal(m, b)
|
return xxx_messageInfo_ConnInfo.Unmarshal(m, b)
|
||||||
}
|
}
|
||||||
func (m *ConnInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
func (m *ConnInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||||
return xxx_messageInfo_ConnInfo.Marshal(b, m, deterministic)
|
return xxx_messageInfo_ConnInfo.Marshal(b, m, deterministic)
|
||||||
}
|
}
|
||||||
func (m *ConnInfo) XXX_Merge(src proto.Message) {
|
func (dst *ConnInfo) XXX_Merge(src proto.Message) {
|
||||||
xxx_messageInfo_ConnInfo.Merge(m, src)
|
xxx_messageInfo_ConnInfo.Merge(dst, src)
|
||||||
}
|
}
|
||||||
func (m *ConnInfo) XXX_Size() int {
|
func (m *ConnInfo) XXX_Size() int {
|
||||||
return xxx_messageInfo_ConnInfo.Size(m)
|
return xxx_messageInfo_ConnInfo.Size(m)
|
||||||
@ -81,23 +81,6 @@ func init() {
|
|||||||
proto.RegisterType((*ConnInfo)(nil), "plugin.ConnInfo")
|
proto.RegisterType((*ConnInfo)(nil), "plugin.ConnInfo")
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() { proto.RegisterFile("grpc_broker.proto", fileDescriptor_802e9beed3ec3b28) }
|
|
||||||
|
|
||||||
var fileDescriptor_802e9beed3ec3b28 = []byte{
|
|
||||||
// 175 bytes of a gzipped FileDescriptorProto
|
|
||||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x4c, 0x2f, 0x2a, 0x48,
|
|
||||||
0x8e, 0x4f, 0x2a, 0xca, 0xcf, 0x4e, 0x2d, 0xd2, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x2b,
|
|
||||||
0xc8, 0x29, 0x4d, 0xcf, 0xcc, 0x53, 0x8a, 0xe5, 0xe2, 0x70, 0xce, 0xcf, 0xcb, 0xf3, 0xcc, 0x4b,
|
|
||||||
0xcb, 0x17, 0x92, 0xe5, 0xe2, 0x2a, 0x4e, 0x2d, 0x2a, 0xcb, 0x4c, 0x4e, 0x8d, 0xcf, 0x4c, 0x91,
|
|
||||||
0x60, 0x54, 0x60, 0xd4, 0xe0, 0x0d, 0xe2, 0x84, 0x8a, 0x78, 0xa6, 0x08, 0x49, 0x70, 0xb1, 0xe7,
|
|
||||||
0xa5, 0x96, 0x94, 0xe7, 0x17, 0x65, 0x4b, 0x30, 0x29, 0x30, 0x6a, 0x70, 0x06, 0xc1, 0xb8, 0x20,
|
|
||||||
0x99, 0xc4, 0x94, 0x94, 0xa2, 0xd4, 0xe2, 0x62, 0x09, 0x66, 0x88, 0x0c, 0x94, 0x6b, 0xe4, 0xcc,
|
|
||||||
0xc5, 0xe5, 0x1e, 0x14, 0xe0, 0xec, 0x04, 0xb6, 0x5a, 0xc8, 0x94, 0x8b, 0x3b, 0xb8, 0x24, 0xb1,
|
|
||||||
0xa8, 0x24, 0xb8, 0xa4, 0x28, 0x35, 0x31, 0x57, 0x48, 0x40, 0x0f, 0xe2, 0x08, 0x3d, 0x98, 0x0b,
|
|
||||||
0xa4, 0x30, 0x44, 0x34, 0x18, 0x0d, 0x18, 0x9d, 0x38, 0xa2, 0xa0, 0xae, 0x4d, 0x62, 0x03, 0x3b,
|
|
||||||
0xde, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0x10, 0x15, 0x39, 0x47, 0xd1, 0x00, 0x00, 0x00,
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reference imports to suppress errors if they are not otherwise used.
|
// Reference imports to suppress errors if they are not otherwise used.
|
||||||
var _ context.Context
|
var _ context.Context
|
||||||
var _ grpc.ClientConn
|
var _ grpc.ClientConn
|
||||||
@ -201,3 +184,20 @@ var _GRPCBroker_serviceDesc = grpc.ServiceDesc{
|
|||||||
},
|
},
|
||||||
Metadata: "grpc_broker.proto",
|
Metadata: "grpc_broker.proto",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func init() { proto.RegisterFile("grpc_broker.proto", fileDescriptor_grpc_broker_3322b07398605250) }
|
||||||
|
|
||||||
|
var fileDescriptor_grpc_broker_3322b07398605250 = []byte{
|
||||||
|
// 175 bytes of a gzipped FileDescriptorProto
|
||||||
|
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x4c, 0x2f, 0x2a, 0x48,
|
||||||
|
0x8e, 0x4f, 0x2a, 0xca, 0xcf, 0x4e, 0x2d, 0xd2, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x2b,
|
||||||
|
0xc8, 0x29, 0x4d, 0xcf, 0xcc, 0x53, 0x8a, 0xe5, 0xe2, 0x70, 0xce, 0xcf, 0xcb, 0xf3, 0xcc, 0x4b,
|
||||||
|
0xcb, 0x17, 0x92, 0xe5, 0xe2, 0x2a, 0x4e, 0x2d, 0x2a, 0xcb, 0x4c, 0x4e, 0x8d, 0xcf, 0x4c, 0x91,
|
||||||
|
0x60, 0x54, 0x60, 0xd4, 0xe0, 0x0d, 0xe2, 0x84, 0x8a, 0x78, 0xa6, 0x08, 0x49, 0x70, 0xb1, 0xe7,
|
||||||
|
0xa5, 0x96, 0x94, 0xe7, 0x17, 0x65, 0x4b, 0x30, 0x29, 0x30, 0x6a, 0x70, 0x06, 0xc1, 0xb8, 0x20,
|
||||||
|
0x99, 0xc4, 0x94, 0x94, 0xa2, 0xd4, 0xe2, 0x62, 0x09, 0x66, 0x88, 0x0c, 0x94, 0x6b, 0xe4, 0xcc,
|
||||||
|
0xc5, 0xe5, 0x1e, 0x14, 0xe0, 0xec, 0x04, 0xb6, 0x5a, 0xc8, 0x94, 0x8b, 0x3b, 0xb8, 0x24, 0xb1,
|
||||||
|
0xa8, 0x24, 0xb8, 0xa4, 0x28, 0x35, 0x31, 0x57, 0x48, 0x40, 0x0f, 0xe2, 0x08, 0x3d, 0x98, 0x0b,
|
||||||
|
0xa4, 0x30, 0x44, 0x34, 0x18, 0x0d, 0x18, 0x9d, 0x38, 0xa2, 0xa0, 0xae, 0x4d, 0x62, 0x03, 0x3b,
|
||||||
|
0xde, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0x10, 0x15, 0x39, 0x47, 0xd1, 0x00, 0x00, 0x00,
|
||||||
|
}
|
||||||
|
2
vendor/github.com/hashicorp/go-plugin/internal/plugin/grpc_broker.proto
generated
vendored
2
vendor/github.com/hashicorp/go-plugin/internal/plugin/grpc_broker.proto
generated
vendored
@ -11,5 +11,3 @@ message ConnInfo {
|
|||||||
service GRPCBroker {
|
service GRPCBroker {
|
||||||
rpc StartStream(stream ConnInfo) returns (stream ConnInfo);
|
rpc StartStream(stream ConnInfo) returns (stream ConnInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
42
vendor/github.com/hashicorp/go-plugin/internal/plugin/grpc_controller.pb.go
generated
vendored
42
vendor/github.com/hashicorp/go-plugin/internal/plugin/grpc_controller.pb.go
generated
vendored
@ -3,12 +3,13 @@
|
|||||||
|
|
||||||
package plugin
|
package plugin
|
||||||
|
|
||||||
|
import proto "github.com/golang/protobuf/proto"
|
||||||
|
import fmt "fmt"
|
||||||
|
import math "math"
|
||||||
|
|
||||||
import (
|
import (
|
||||||
fmt "fmt"
|
|
||||||
proto "github.com/golang/protobuf/proto"
|
|
||||||
context "golang.org/x/net/context"
|
context "golang.org/x/net/context"
|
||||||
grpc "google.golang.org/grpc"
|
grpc "google.golang.org/grpc"
|
||||||
math "math"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// Reference imports to suppress errors if they are not otherwise used.
|
// Reference imports to suppress errors if they are not otherwise used.
|
||||||
@ -32,17 +33,16 @@ func (m *Empty) Reset() { *m = Empty{} }
|
|||||||
func (m *Empty) String() string { return proto.CompactTextString(m) }
|
func (m *Empty) String() string { return proto.CompactTextString(m) }
|
||||||
func (*Empty) ProtoMessage() {}
|
func (*Empty) ProtoMessage() {}
|
||||||
func (*Empty) Descriptor() ([]byte, []int) {
|
func (*Empty) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_23c2c7e42feab570, []int{0}
|
return fileDescriptor_grpc_controller_08f8296ef6d80436, []int{0}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Empty) XXX_Unmarshal(b []byte) error {
|
func (m *Empty) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_Empty.Unmarshal(m, b)
|
return xxx_messageInfo_Empty.Unmarshal(m, b)
|
||||||
}
|
}
|
||||||
func (m *Empty) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
func (m *Empty) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||||
return xxx_messageInfo_Empty.Marshal(b, m, deterministic)
|
return xxx_messageInfo_Empty.Marshal(b, m, deterministic)
|
||||||
}
|
}
|
||||||
func (m *Empty) XXX_Merge(src proto.Message) {
|
func (dst *Empty) XXX_Merge(src proto.Message) {
|
||||||
xxx_messageInfo_Empty.Merge(m, src)
|
xxx_messageInfo_Empty.Merge(dst, src)
|
||||||
}
|
}
|
||||||
func (m *Empty) XXX_Size() int {
|
func (m *Empty) XXX_Size() int {
|
||||||
return xxx_messageInfo_Empty.Size(m)
|
return xxx_messageInfo_Empty.Size(m)
|
||||||
@ -57,19 +57,6 @@ func init() {
|
|||||||
proto.RegisterType((*Empty)(nil), "plugin.Empty")
|
proto.RegisterType((*Empty)(nil), "plugin.Empty")
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() { proto.RegisterFile("grpc_controller.proto", fileDescriptor_23c2c7e42feab570) }
|
|
||||||
|
|
||||||
var fileDescriptor_23c2c7e42feab570 = []byte{
|
|
||||||
// 108 bytes of a gzipped FileDescriptorProto
|
|
||||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x4d, 0x2f, 0x2a, 0x48,
|
|
||||||
0x8e, 0x4f, 0xce, 0xcf, 0x2b, 0x29, 0xca, 0xcf, 0xc9, 0x49, 0x2d, 0xd2, 0x2b, 0x28, 0xca, 0x2f,
|
|
||||||
0xc9, 0x17, 0x62, 0x2b, 0xc8, 0x29, 0x4d, 0xcf, 0xcc, 0x53, 0x62, 0xe7, 0x62, 0x75, 0xcd, 0x2d,
|
|
||||||
0x28, 0xa9, 0x34, 0xb2, 0xe2, 0xe2, 0x73, 0x0f, 0x0a, 0x70, 0x76, 0x86, 0x2b, 0x14, 0xd2, 0xe0,
|
|
||||||
0xe2, 0x08, 0xce, 0x28, 0x2d, 0x49, 0xc9, 0x2f, 0xcf, 0x13, 0xe2, 0xd5, 0x83, 0xa8, 0xd7, 0x03,
|
|
||||||
0x2b, 0x96, 0x42, 0xe5, 0x3a, 0x71, 0x44, 0x41, 0x8d, 0x4b, 0x62, 0x03, 0x9b, 0x6e, 0x0c, 0x08,
|
|
||||||
0x00, 0x00, 0xff, 0xff, 0xab, 0x7c, 0x27, 0xe5, 0x76, 0x00, 0x00, 0x00,
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reference imports to suppress errors if they are not otherwise used.
|
// Reference imports to suppress errors if they are not otherwise used.
|
||||||
var _ context.Context
|
var _ context.Context
|
||||||
var _ grpc.ClientConn
|
var _ grpc.ClientConn
|
||||||
@ -141,3 +128,18 @@ var _GRPCController_serviceDesc = grpc.ServiceDesc{
|
|||||||
Streams: []grpc.StreamDesc{},
|
Streams: []grpc.StreamDesc{},
|
||||||
Metadata: "grpc_controller.proto",
|
Metadata: "grpc_controller.proto",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
proto.RegisterFile("grpc_controller.proto", fileDescriptor_grpc_controller_08f8296ef6d80436)
|
||||||
|
}
|
||||||
|
|
||||||
|
var fileDescriptor_grpc_controller_08f8296ef6d80436 = []byte{
|
||||||
|
// 108 bytes of a gzipped FileDescriptorProto
|
||||||
|
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x4d, 0x2f, 0x2a, 0x48,
|
||||||
|
0x8e, 0x4f, 0xce, 0xcf, 0x2b, 0x29, 0xca, 0xcf, 0xc9, 0x49, 0x2d, 0xd2, 0x2b, 0x28, 0xca, 0x2f,
|
||||||
|
0xc9, 0x17, 0x62, 0x2b, 0xc8, 0x29, 0x4d, 0xcf, 0xcc, 0x53, 0x62, 0xe7, 0x62, 0x75, 0xcd, 0x2d,
|
||||||
|
0x28, 0xa9, 0x34, 0xb2, 0xe2, 0xe2, 0x73, 0x0f, 0x0a, 0x70, 0x76, 0x86, 0x2b, 0x14, 0xd2, 0xe0,
|
||||||
|
0xe2, 0x08, 0xce, 0x28, 0x2d, 0x49, 0xc9, 0x2f, 0xcf, 0x13, 0xe2, 0xd5, 0x83, 0xa8, 0xd7, 0x03,
|
||||||
|
0x2b, 0x96, 0x42, 0xe5, 0x3a, 0x71, 0x44, 0x41, 0x8d, 0x4b, 0x62, 0x03, 0x9b, 0x6e, 0x0c, 0x08,
|
||||||
|
0x00, 0x00, 0xff, 0xff, 0xab, 0x7c, 0x27, 0xe5, 0x76, 0x00, 0x00, 0x00,
|
||||||
|
}
|
||||||
|
233
vendor/github.com/hashicorp/go-plugin/internal/plugin/grpc_stdio.pb.go
generated
vendored
Normal file
233
vendor/github.com/hashicorp/go-plugin/internal/plugin/grpc_stdio.pb.go
generated
vendored
Normal file
@ -0,0 +1,233 @@
|
|||||||
|
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||||
|
// source: grpc_stdio.proto
|
||||||
|
|
||||||
|
package plugin
|
||||||
|
|
||||||
|
import proto "github.com/golang/protobuf/proto"
|
||||||
|
import fmt "fmt"
|
||||||
|
import math "math"
|
||||||
|
import empty "github.com/golang/protobuf/ptypes/empty"
|
||||||
|
|
||||||
|
import (
|
||||||
|
context "golang.org/x/net/context"
|
||||||
|
grpc "google.golang.org/grpc"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Reference imports to suppress errors if they are not otherwise used.
|
||||||
|
var _ = proto.Marshal
|
||||||
|
var _ = fmt.Errorf
|
||||||
|
var _ = math.Inf
|
||||||
|
|
||||||
|
// This is a compile-time assertion to ensure that this generated file
|
||||||
|
// is compatible with the proto package it is being compiled against.
|
||||||
|
// A compilation error at this line likely means your copy of the
|
||||||
|
// proto package needs to be updated.
|
||||||
|
const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
|
||||||
|
|
||||||
|
type StdioData_Channel int32
|
||||||
|
|
||||||
|
const (
|
||||||
|
StdioData_INVALID StdioData_Channel = 0
|
||||||
|
StdioData_STDOUT StdioData_Channel = 1
|
||||||
|
StdioData_STDERR StdioData_Channel = 2
|
||||||
|
)
|
||||||
|
|
||||||
|
var StdioData_Channel_name = map[int32]string{
|
||||||
|
0: "INVALID",
|
||||||
|
1: "STDOUT",
|
||||||
|
2: "STDERR",
|
||||||
|
}
|
||||||
|
var StdioData_Channel_value = map[string]int32{
|
||||||
|
"INVALID": 0,
|
||||||
|
"STDOUT": 1,
|
||||||
|
"STDERR": 2,
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x StdioData_Channel) String() string {
|
||||||
|
return proto.EnumName(StdioData_Channel_name, int32(x))
|
||||||
|
}
|
||||||
|
func (StdioData_Channel) EnumDescriptor() ([]byte, []int) {
|
||||||
|
return fileDescriptor_grpc_stdio_db2934322ca63bd5, []int{0, 0}
|
||||||
|
}
|
||||||
|
|
||||||
|
// StdioData is a single chunk of stdout or stderr data that is streamed
|
||||||
|
// from GRPCStdio.
|
||||||
|
type StdioData struct {
|
||||||
|
Channel StdioData_Channel `protobuf:"varint,1,opt,name=channel,proto3,enum=plugin.StdioData_Channel" json:"channel,omitempty"`
|
||||||
|
Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
|
||||||
|
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||||
|
XXX_unrecognized []byte `json:"-"`
|
||||||
|
XXX_sizecache int32 `json:"-"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *StdioData) Reset() { *m = StdioData{} }
|
||||||
|
func (m *StdioData) String() string { return proto.CompactTextString(m) }
|
||||||
|
func (*StdioData) ProtoMessage() {}
|
||||||
|
func (*StdioData) Descriptor() ([]byte, []int) {
|
||||||
|
return fileDescriptor_grpc_stdio_db2934322ca63bd5, []int{0}
|
||||||
|
}
|
||||||
|
func (m *StdioData) XXX_Unmarshal(b []byte) error {
|
||||||
|
return xxx_messageInfo_StdioData.Unmarshal(m, b)
|
||||||
|
}
|
||||||
|
func (m *StdioData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||||
|
return xxx_messageInfo_StdioData.Marshal(b, m, deterministic)
|
||||||
|
}
|
||||||
|
func (dst *StdioData) XXX_Merge(src proto.Message) {
|
||||||
|
xxx_messageInfo_StdioData.Merge(dst, src)
|
||||||
|
}
|
||||||
|
func (m *StdioData) XXX_Size() int {
|
||||||
|
return xxx_messageInfo_StdioData.Size(m)
|
||||||
|
}
|
||||||
|
func (m *StdioData) XXX_DiscardUnknown() {
|
||||||
|
xxx_messageInfo_StdioData.DiscardUnknown(m)
|
||||||
|
}
|
||||||
|
|
||||||
|
var xxx_messageInfo_StdioData proto.InternalMessageInfo
|
||||||
|
|
||||||
|
func (m *StdioData) GetChannel() StdioData_Channel {
|
||||||
|
if m != nil {
|
||||||
|
return m.Channel
|
||||||
|
}
|
||||||
|
return StdioData_INVALID
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *StdioData) GetData() []byte {
|
||||||
|
if m != nil {
|
||||||
|
return m.Data
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
proto.RegisterType((*StdioData)(nil), "plugin.StdioData")
|
||||||
|
proto.RegisterEnum("plugin.StdioData_Channel", StdioData_Channel_name, StdioData_Channel_value)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reference imports to suppress errors if they are not otherwise used.
|
||||||
|
var _ context.Context
|
||||||
|
var _ grpc.ClientConn
|
||||||
|
|
||||||
|
// This is a compile-time assertion to ensure that this generated file
|
||||||
|
// is compatible with the grpc package it is being compiled against.
|
||||||
|
const _ = grpc.SupportPackageIsVersion4
|
||||||
|
|
||||||
|
// GRPCStdioClient is the client API for GRPCStdio service.
|
||||||
|
//
|
||||||
|
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
|
||||||
|
type GRPCStdioClient interface {
|
||||||
|
// StreamStdio returns a stream that contains all the stdout/stderr.
|
||||||
|
// This RPC endpoint must only be called ONCE. Once stdio data is consumed
|
||||||
|
// it is not sent again.
|
||||||
|
//
|
||||||
|
// Callers should connect early to prevent blocking on the plugin process.
|
||||||
|
StreamStdio(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (GRPCStdio_StreamStdioClient, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
type gRPCStdioClient struct {
|
||||||
|
cc *grpc.ClientConn
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewGRPCStdioClient(cc *grpc.ClientConn) GRPCStdioClient {
|
||||||
|
return &gRPCStdioClient{cc}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *gRPCStdioClient) StreamStdio(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (GRPCStdio_StreamStdioClient, error) {
|
||||||
|
stream, err := c.cc.NewStream(ctx, &_GRPCStdio_serviceDesc.Streams[0], "/plugin.GRPCStdio/StreamStdio", opts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
x := &gRPCStdioStreamStdioClient{stream}
|
||||||
|
if err := x.ClientStream.SendMsg(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if err := x.ClientStream.CloseSend(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return x, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type GRPCStdio_StreamStdioClient interface {
|
||||||
|
Recv() (*StdioData, error)
|
||||||
|
grpc.ClientStream
|
||||||
|
}
|
||||||
|
|
||||||
|
type gRPCStdioStreamStdioClient struct {
|
||||||
|
grpc.ClientStream
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *gRPCStdioStreamStdioClient) Recv() (*StdioData, error) {
|
||||||
|
m := new(StdioData)
|
||||||
|
if err := x.ClientStream.RecvMsg(m); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return m, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GRPCStdioServer is the server API for GRPCStdio service.
|
||||||
|
type GRPCStdioServer interface {
|
||||||
|
// StreamStdio returns a stream that contains all the stdout/stderr.
|
||||||
|
// This RPC endpoint must only be called ONCE. Once stdio data is consumed
|
||||||
|
// it is not sent again.
|
||||||
|
//
|
||||||
|
// Callers should connect early to prevent blocking on the plugin process.
|
||||||
|
StreamStdio(*empty.Empty, GRPCStdio_StreamStdioServer) error
|
||||||
|
}
|
||||||
|
|
||||||
|
func RegisterGRPCStdioServer(s *grpc.Server, srv GRPCStdioServer) {
|
||||||
|
s.RegisterService(&_GRPCStdio_serviceDesc, srv)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _GRPCStdio_StreamStdio_Handler(srv interface{}, stream grpc.ServerStream) error {
|
||||||
|
m := new(empty.Empty)
|
||||||
|
if err := stream.RecvMsg(m); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return srv.(GRPCStdioServer).StreamStdio(m, &gRPCStdioStreamStdioServer{stream})
|
||||||
|
}
|
||||||
|
|
||||||
|
type GRPCStdio_StreamStdioServer interface {
|
||||||
|
Send(*StdioData) error
|
||||||
|
grpc.ServerStream
|
||||||
|
}
|
||||||
|
|
||||||
|
type gRPCStdioStreamStdioServer struct {
|
||||||
|
grpc.ServerStream
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *gRPCStdioStreamStdioServer) Send(m *StdioData) error {
|
||||||
|
return x.ServerStream.SendMsg(m)
|
||||||
|
}
|
||||||
|
|
||||||
|
var _GRPCStdio_serviceDesc = grpc.ServiceDesc{
|
||||||
|
ServiceName: "plugin.GRPCStdio",
|
||||||
|
HandlerType: (*GRPCStdioServer)(nil),
|
||||||
|
Methods: []grpc.MethodDesc{},
|
||||||
|
Streams: []grpc.StreamDesc{
|
||||||
|
{
|
||||||
|
StreamName: "StreamStdio",
|
||||||
|
Handler: _GRPCStdio_StreamStdio_Handler,
|
||||||
|
ServerStreams: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Metadata: "grpc_stdio.proto",
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() { proto.RegisterFile("grpc_stdio.proto", fileDescriptor_grpc_stdio_db2934322ca63bd5) }
|
||||||
|
|
||||||
|
var fileDescriptor_grpc_stdio_db2934322ca63bd5 = []byte{
|
||||||
|
// 221 bytes of a gzipped FileDescriptorProto
|
||||||
|
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x48, 0x2f, 0x2a, 0x48,
|
||||||
|
0x8e, 0x2f, 0x2e, 0x49, 0xc9, 0xcc, 0xd7, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x2b, 0xc8,
|
||||||
|
0x29, 0x4d, 0xcf, 0xcc, 0x93, 0x92, 0x4e, 0xcf, 0xcf, 0x4f, 0xcf, 0x49, 0xd5, 0x07, 0x8b, 0x26,
|
||||||
|
0x95, 0xa6, 0xe9, 0xa7, 0xe6, 0x16, 0x94, 0x54, 0x42, 0x14, 0x29, 0xb5, 0x30, 0x72, 0x71, 0x06,
|
||||||
|
0x83, 0x34, 0xb9, 0x24, 0x96, 0x24, 0x0a, 0x19, 0x73, 0xb1, 0x27, 0x67, 0x24, 0xe6, 0xe5, 0xa5,
|
||||||
|
0xe6, 0x48, 0x30, 0x2a, 0x30, 0x6a, 0xf0, 0x19, 0x49, 0xea, 0x41, 0x0c, 0xd1, 0x83, 0xab, 0xd1,
|
||||||
|
0x73, 0x86, 0x28, 0x08, 0x82, 0xa9, 0x14, 0x12, 0xe2, 0x62, 0x49, 0x49, 0x2c, 0x49, 0x94, 0x60,
|
||||||
|
0x52, 0x60, 0xd4, 0xe0, 0x09, 0x02, 0xb3, 0x95, 0xf4, 0xb8, 0xd8, 0xa1, 0xea, 0x84, 0xb8, 0xb9,
|
||||||
|
0xd8, 0x3d, 0xfd, 0xc2, 0x1c, 0x7d, 0x3c, 0x5d, 0x04, 0x18, 0x84, 0xb8, 0xb8, 0xd8, 0x82, 0x43,
|
||||||
|
0x5c, 0xfc, 0x43, 0x43, 0x04, 0x18, 0xa1, 0x6c, 0xd7, 0xa0, 0x20, 0x01, 0x26, 0x23, 0x77, 0x2e,
|
||||||
|
0x4e, 0xf7, 0xa0, 0x00, 0x67, 0xb0, 0x2d, 0x42, 0x56, 0x5c, 0xdc, 0xc1, 0x25, 0x45, 0xa9, 0x89,
|
||||||
|
0xb9, 0x10, 0xae, 0x98, 0x1e, 0xc4, 0x03, 0x7a, 0x30, 0x0f, 0xe8, 0xb9, 0x82, 0x3c, 0x20, 0x25,
|
||||||
|
0x88, 0xe1, 0x36, 0x03, 0x46, 0x27, 0x8e, 0x28, 0xa8, 0xb7, 0x93, 0xd8, 0xc0, 0xca, 0x8d, 0x01,
|
||||||
|
0x01, 0x00, 0x00, 0xff, 0xff, 0x5d, 0xbb, 0xe0, 0x69, 0x19, 0x01, 0x00, 0x00,
|
||||||
|
}
|
30
vendor/github.com/hashicorp/go-plugin/internal/plugin/grpc_stdio.proto
generated
vendored
Normal file
30
vendor/github.com/hashicorp/go-plugin/internal/plugin/grpc_stdio.proto
generated
vendored
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
package plugin;
|
||||||
|
option go_package = "plugin";
|
||||||
|
|
||||||
|
import "google/protobuf/empty.proto";
|
||||||
|
|
||||||
|
// GRPCStdio is a service that is automatically run by the plugin process
|
||||||
|
// to stream any stdout/err data so that it can be mirrored on the plugin
|
||||||
|
// host side.
|
||||||
|
service GRPCStdio {
|
||||||
|
// StreamStdio returns a stream that contains all the stdout/stderr.
|
||||||
|
// This RPC endpoint must only be called ONCE. Once stdio data is consumed
|
||||||
|
// it is not sent again.
|
||||||
|
//
|
||||||
|
// Callers should connect early to prevent blocking on the plugin process.
|
||||||
|
rpc StreamStdio(google.protobuf.Empty) returns (stream StdioData);
|
||||||
|
}
|
||||||
|
|
||||||
|
// StdioData is a single chunk of stdout or stderr data that is streamed
|
||||||
|
// from GRPCStdio.
|
||||||
|
message StdioData {
|
||||||
|
enum Channel {
|
||||||
|
INVALID = 0;
|
||||||
|
STDOUT = 1;
|
||||||
|
STDERR = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
Channel channel = 1;
|
||||||
|
bytes data = 2;
|
||||||
|
}
|
1
vendor/github.com/hashicorp/go-plugin/process_windows.go
generated
vendored
1
vendor/github.com/hashicorp/go-plugin/process_windows.go
generated
vendored
@ -19,6 +19,7 @@ func _pidAlive(pid int) bool {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
defer syscall.CloseHandle(h)
|
||||||
|
|
||||||
var ec uint32
|
var ec uint32
|
||||||
if e := syscall.GetExitCodeProcess(h, &ec); e != nil {
|
if e := syscall.GetExitCodeProcess(h, &ec); e != nil {
|
||||||
|
259
vendor/github.com/hashicorp/go-plugin/server.go
generated
vendored
259
vendor/github.com/hashicorp/go-plugin/server.go
generated
vendored
@ -1,13 +1,14 @@
|
|||||||
package plugin
|
package plugin
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
"crypto/x509"
|
"crypto/x509"
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
|
||||||
"net"
|
"net"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
@ -15,10 +16,8 @@ import (
|
|||||||
"sort"
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"sync/atomic"
|
|
||||||
|
|
||||||
"github.com/hashicorp/go-hclog"
|
|
||||||
|
|
||||||
|
hclog "github.com/hashicorp/go-hclog"
|
||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -85,6 +84,51 @@ type ServeConfig struct {
|
|||||||
// Logger is used to pass a logger into the server. If none is provided the
|
// Logger is used to pass a logger into the server. If none is provided the
|
||||||
// server will create a default logger.
|
// server will create a default logger.
|
||||||
Logger hclog.Logger
|
Logger hclog.Logger
|
||||||
|
|
||||||
|
// Test, if non-nil, will put plugin serving into "test mode". This is
|
||||||
|
// meant to be used as part of `go test` within a plugin's codebase to
|
||||||
|
// launch the plugin in-process and output a ReattachConfig.
|
||||||
|
//
|
||||||
|
// This changes the behavior of the server in a number of ways to
|
||||||
|
// accomodate the expectation of running in-process:
|
||||||
|
//
|
||||||
|
// * The handshake cookie is not validated.
|
||||||
|
// * Stdout/stderr will receive plugin reads and writes
|
||||||
|
// * Connection information will not be sent to stdout
|
||||||
|
//
|
||||||
|
Test *ServeTestConfig
|
||||||
|
}
|
||||||
|
|
||||||
|
// ServeTestConfig configures plugin serving for test mode. See ServeConfig.Test.
|
||||||
|
type ServeTestConfig struct {
|
||||||
|
// Context, if set, will force the plugin serving to end when cancelled.
|
||||||
|
// This is only a test configuration because the non-test configuration
|
||||||
|
// expects to take over the process and therefore end on an interrupt or
|
||||||
|
// kill signal. For tests, we need to kill the plugin serving routinely
|
||||||
|
// and this provides a way to do so.
|
||||||
|
//
|
||||||
|
// If you want to wait for the plugin process to close before moving on,
|
||||||
|
// you can wait on CloseCh.
|
||||||
|
Context context.Context
|
||||||
|
|
||||||
|
// If this channel is non-nil, we will send the ReattachConfig via
|
||||||
|
// this channel. This can be encoded (via JSON recommended) to the
|
||||||
|
// plugin client to attach to this plugin.
|
||||||
|
ReattachConfigCh chan<- *ReattachConfig
|
||||||
|
|
||||||
|
// CloseCh, if non-nil, will be closed when serving exits. This can be
|
||||||
|
// used along with Context to determine when the server is fully shut down.
|
||||||
|
// If this is not set, you can still use Context on its own, but note there
|
||||||
|
// may be a period of time between canceling the context and the plugin
|
||||||
|
// server being shut down.
|
||||||
|
CloseCh chan<- struct{}
|
||||||
|
|
||||||
|
// SyncStdio, if true, will enable the client side "SyncStdout/Stderr"
|
||||||
|
// functionality to work. This defaults to false because the implementation
|
||||||
|
// of making this work within test environments is particularly messy
|
||||||
|
// and SyncStdio functionality is fairly rare, so we default to the simple
|
||||||
|
// scenario.
|
||||||
|
SyncStdio bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// protocolVersion determines the protocol version and plugin set to be used by
|
// protocolVersion determines the protocol version and plugin set to be used by
|
||||||
@ -169,35 +213,52 @@ func protocolVersion(opts *ServeConfig) (int, Protocol, PluginSet) {
|
|||||||
// Serve serves the plugins given by ServeConfig.
|
// Serve serves the plugins given by ServeConfig.
|
||||||
//
|
//
|
||||||
// Serve doesn't return until the plugin is done being executed. Any
|
// Serve doesn't return until the plugin is done being executed. Any
|
||||||
// errors will be outputted to os.Stderr.
|
// fixable errors will be output to os.Stderr and the process will
|
||||||
|
// exit with a status code of 1. Serve will panic for unexpected
|
||||||
|
// conditions where a user's fix is unknown.
|
||||||
//
|
//
|
||||||
// This is the method that plugins should call in their main() functions.
|
// This is the method that plugins should call in their main() functions.
|
||||||
func Serve(opts *ServeConfig) {
|
func Serve(opts *ServeConfig) {
|
||||||
// Validate the handshake config
|
exitCode := -1
|
||||||
if opts.MagicCookieKey == "" || opts.MagicCookieValue == "" {
|
// We use this to trigger an `os.Exit` so that we can execute our other
|
||||||
fmt.Fprintf(os.Stderr,
|
// deferred functions. In test mode, we just output the err to stderr
|
||||||
"Misconfigured ServeConfig given to serve this plugin: no magic cookie\n"+
|
// and return.
|
||||||
"key or value was set. Please notify the plugin author and report\n"+
|
defer func() {
|
||||||
"this as a bug.\n")
|
if opts.Test == nil && exitCode >= 0 {
|
||||||
os.Exit(1)
|
os.Exit(exitCode)
|
||||||
}
|
}
|
||||||
|
|
||||||
// First check the cookie
|
if opts.Test != nil && opts.Test.CloseCh != nil {
|
||||||
if os.Getenv(opts.MagicCookieKey) != opts.MagicCookieValue {
|
close(opts.Test.CloseCh)
|
||||||
fmt.Fprintf(os.Stderr,
|
}
|
||||||
"This binary is a plugin. These are not meant to be executed directly.\n"+
|
}()
|
||||||
"Please execute the program that consumes these plugins, which will\n"+
|
|
||||||
"load any plugins automatically\n")
|
if opts.Test == nil {
|
||||||
os.Exit(1)
|
// Validate the handshake config
|
||||||
|
if opts.MagicCookieKey == "" || opts.MagicCookieValue == "" {
|
||||||
|
fmt.Fprintf(os.Stderr,
|
||||||
|
"Misconfigured ServeConfig given to serve this plugin: no magic cookie\n"+
|
||||||
|
"key or value was set. Please notify the plugin author and report\n"+
|
||||||
|
"this as a bug.\n")
|
||||||
|
exitCode = 1
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// First check the cookie
|
||||||
|
if os.Getenv(opts.MagicCookieKey) != opts.MagicCookieValue {
|
||||||
|
fmt.Fprintf(os.Stderr,
|
||||||
|
"This binary is a plugin. These are not meant to be executed directly.\n"+
|
||||||
|
"Please execute the program that consumes these plugins, which will\n"+
|
||||||
|
"load any plugins automatically\n")
|
||||||
|
exitCode = 1
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// negotiate the version and plugins
|
// negotiate the version and plugins
|
||||||
// start with default version in the handshake config
|
// start with default version in the handshake config
|
||||||
protoVersion, protoType, pluginSet := protocolVersion(opts)
|
protoVersion, protoType, pluginSet := protocolVersion(opts)
|
||||||
|
|
||||||
// Logging goes to the original stderr
|
|
||||||
log.SetOutput(os.Stderr)
|
|
||||||
|
|
||||||
logger := opts.Logger
|
logger := opts.Logger
|
||||||
if logger == nil {
|
if logger == nil {
|
||||||
// internal logger to os.Stderr
|
// internal logger to os.Stderr
|
||||||
@ -208,19 +269,6 @@ func Serve(opts *ServeConfig) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create our new stdout, stderr files. These will override our built-in
|
|
||||||
// stdout/stderr so that it works across the stream boundary.
|
|
||||||
stdout_r, stdout_w, err := os.Pipe()
|
|
||||||
if err != nil {
|
|
||||||
fmt.Fprintf(os.Stderr, "Error preparing plugin: %s\n", err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
stderr_r, stderr_w, err := os.Pipe()
|
|
||||||
if err != nil {
|
|
||||||
fmt.Fprintf(os.Stderr, "Error preparing plugin: %s\n", err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Register a listener so we can accept a connection
|
// Register a listener so we can accept a connection
|
||||||
listener, err := serverListener()
|
listener, err := serverListener()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -281,6 +329,33 @@ func Serve(opts *ServeConfig) {
|
|||||||
// Create the channel to tell us when we're done
|
// Create the channel to tell us when we're done
|
||||||
doneCh := make(chan struct{})
|
doneCh := make(chan struct{})
|
||||||
|
|
||||||
|
// Create our new stdout, stderr files. These will override our built-in
|
||||||
|
// stdout/stderr so that it works across the stream boundary.
|
||||||
|
var stdout_r, stderr_r io.Reader
|
||||||
|
stdout_r, stdout_w, err := os.Pipe()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Fprintf(os.Stderr, "Error preparing plugin: %s\n", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
stderr_r, stderr_w, err := os.Pipe()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Fprintf(os.Stderr, "Error preparing plugin: %s\n", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we're in test mode, we tee off the reader and write the data
|
||||||
|
// as-is to our normal Stdout and Stderr so that they continue working
|
||||||
|
// while stdio works. This is because in test mode, we assume we're running
|
||||||
|
// in `go test` or some equivalent and we want output to go to standard
|
||||||
|
// locations.
|
||||||
|
if opts.Test != nil {
|
||||||
|
// TODO(mitchellh): This isn't super ideal because a TeeReader
|
||||||
|
// only works if the reader side is actively read. If we never
|
||||||
|
// connect via a plugin client, the output still gets swallowed.
|
||||||
|
stdout_r = io.TeeReader(stdout_r, os.Stdout)
|
||||||
|
stderr_r = io.TeeReader(stderr_r, os.Stderr)
|
||||||
|
}
|
||||||
|
|
||||||
// Build the server type
|
// Build the server type
|
||||||
var server ServerProtocol
|
var server ServerProtocol
|
||||||
switch protoType {
|
switch protoType {
|
||||||
@ -323,35 +398,97 @@ func Serve(opts *ServeConfig) {
|
|||||||
|
|
||||||
logger.Debug("plugin address", "network", listener.Addr().Network(), "address", listener.Addr().String())
|
logger.Debug("plugin address", "network", listener.Addr().Network(), "address", listener.Addr().String())
|
||||||
|
|
||||||
// Output the address and service name to stdout so that the client can bring it up.
|
// Output the address and service name to stdout so that the client can
|
||||||
fmt.Printf("%d|%d|%s|%s|%s|%s\n",
|
// bring it up. In test mode, we don't do this because clients will
|
||||||
CoreProtocolVersion,
|
// attach via a reattach config.
|
||||||
protoVersion,
|
if opts.Test == nil {
|
||||||
listener.Addr().Network(),
|
fmt.Printf("%d|%d|%s|%s|%s|%s\n",
|
||||||
listener.Addr().String(),
|
CoreProtocolVersion,
|
||||||
protoType,
|
protoVersion,
|
||||||
serverCert)
|
listener.Addr().Network(),
|
||||||
os.Stdout.Sync()
|
listener.Addr().String(),
|
||||||
|
protoType,
|
||||||
// Eat the interrupts
|
serverCert)
|
||||||
ch := make(chan os.Signal, 1)
|
os.Stdout.Sync()
|
||||||
signal.Notify(ch, os.Interrupt)
|
} else if ch := opts.Test.ReattachConfigCh; ch != nil {
|
||||||
go func() {
|
// Send back the reattach config that can be used. This isn't
|
||||||
var count int32 = 0
|
// quite ready if they connect immediately but the client should
|
||||||
for {
|
// retry a few times.
|
||||||
<-ch
|
ch <- &ReattachConfig{
|
||||||
newCount := atomic.AddInt32(&count, 1)
|
Protocol: protoType,
|
||||||
logger.Debug("plugin received interrupt signal, ignoring", "count", newCount)
|
ProtocolVersion: protoVersion,
|
||||||
|
Addr: listener.Addr(),
|
||||||
|
Pid: os.Getpid(),
|
||||||
|
Test: true,
|
||||||
}
|
}
|
||||||
}()
|
}
|
||||||
|
|
||||||
// Set our new out, err
|
// Eat the interrupts. In test mode we disable this so that go test
|
||||||
os.Stdout = stdout_w
|
// can be cancelled properly.
|
||||||
os.Stderr = stderr_w
|
if opts.Test == nil {
|
||||||
|
ch := make(chan os.Signal, 1)
|
||||||
|
signal.Notify(ch, os.Interrupt)
|
||||||
|
go func() {
|
||||||
|
count := 0
|
||||||
|
for {
|
||||||
|
<-ch
|
||||||
|
count++
|
||||||
|
logger.Trace("plugin received interrupt signal, ignoring", "count", count)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set our stdout, stderr to the stdio stream that clients can retrieve
|
||||||
|
// using ClientConfig.SyncStdout/err. We only do this for non-test mode
|
||||||
|
// or if the test mode explicitly requests it.
|
||||||
|
//
|
||||||
|
// In test mode, we use a multiwriter so that the data continues going
|
||||||
|
// to the normal stdout/stderr so output can show up in test logs. We
|
||||||
|
// also send to the stdio stream so that clients can continue working
|
||||||
|
// if they depend on that.
|
||||||
|
if opts.Test == nil || opts.Test.SyncStdio {
|
||||||
|
if opts.Test != nil {
|
||||||
|
// In test mode we need to maintain the original values so we can
|
||||||
|
// reset it.
|
||||||
|
defer func(out, err *os.File) {
|
||||||
|
os.Stdout = out
|
||||||
|
os.Stderr = err
|
||||||
|
}(os.Stdout, os.Stderr)
|
||||||
|
}
|
||||||
|
os.Stdout = stdout_w
|
||||||
|
os.Stderr = stderr_w
|
||||||
|
}
|
||||||
|
|
||||||
// Accept connections and wait for completion
|
// Accept connections and wait for completion
|
||||||
go server.Serve(listener)
|
go server.Serve(listener)
|
||||||
<-doneCh
|
|
||||||
|
ctx := context.Background()
|
||||||
|
if opts.Test != nil && opts.Test.Context != nil {
|
||||||
|
ctx = opts.Test.Context
|
||||||
|
}
|
||||||
|
select {
|
||||||
|
case <-ctx.Done():
|
||||||
|
// Cancellation. We can stop the server by closing the listener.
|
||||||
|
// This isn't graceful at all but this is currently only used by
|
||||||
|
// tests and its our only way to stop.
|
||||||
|
listener.Close()
|
||||||
|
|
||||||
|
// If this is a grpc server, then we also ask the server itself to
|
||||||
|
// end which will kill all connections. There isn't an easy way to do
|
||||||
|
// this for net/rpc currently but net/rpc is more and more unused.
|
||||||
|
if s, ok := server.(*GRPCServer); ok {
|
||||||
|
s.Stop()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Wait for the server itself to shut down
|
||||||
|
<-doneCh
|
||||||
|
|
||||||
|
case <-doneCh:
|
||||||
|
// Note that given the documentation of Serve we should probably be
|
||||||
|
// setting exitCode = 0 and using os.Exit here. That's how it used to
|
||||||
|
// work before extracting this library. However, for years we've done
|
||||||
|
// this so we'll keep this functionality.
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func serverListener() (net.Listener, error) {
|
func serverListener() (net.Listener, error) {
|
||||||
@ -390,7 +527,7 @@ func serverListener_tcp() (net.Listener, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if minPort > maxPort {
|
if minPort > maxPort {
|
||||||
return nil, fmt.Errorf("ENV_MIN_PORT value of %d is greater than PLUGIN_MAX_PORT value of %d", minPort, maxPort)
|
return nil, fmt.Errorf("PLUGIN_MIN_PORT value of %d is greater than PLUGIN_MAX_PORT value of %d", minPort, maxPort)
|
||||||
}
|
}
|
||||||
|
|
||||||
for port := minPort; port <= maxPort; port++ {
|
for port := minPort; port <= maxPort; port++ {
|
||||||
|
2
vendor/github.com/hashicorp/go-plugin/testing.go
generated
vendored
2
vendor/github.com/hashicorp/go-plugin/testing.go
generated
vendored
@ -7,9 +7,9 @@ import (
|
|||||||
"net"
|
"net"
|
||||||
"net/rpc"
|
"net/rpc"
|
||||||
|
|
||||||
"github.com/mitchellh/go-testing-interface"
|
|
||||||
hclog "github.com/hashicorp/go-hclog"
|
hclog "github.com/hashicorp/go-hclog"
|
||||||
"github.com/hashicorp/go-plugin/internal/plugin"
|
"github.com/hashicorp/go-plugin/internal/plugin"
|
||||||
|
"github.com/mitchellh/go-testing-interface"
|
||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
363
vendor/github.com/hashicorp/go-secure-stdlib/mlock/LICENSE
generated
vendored
Normal file
363
vendor/github.com/hashicorp/go-secure-stdlib/mlock/LICENSE
generated
vendored
Normal file
@ -0,0 +1,363 @@
|
|||||||
|
Mozilla Public License, version 2.0
|
||||||
|
|
||||||
|
1. Definitions
|
||||||
|
|
||||||
|
1.1. "Contributor"
|
||||||
|
|
||||||
|
means each individual or legal entity that creates, contributes to the
|
||||||
|
creation of, or owns Covered Software.
|
||||||
|
|
||||||
|
1.2. "Contributor Version"
|
||||||
|
|
||||||
|
means the combination of the Contributions of others (if any) used by a
|
||||||
|
Contributor and that particular Contributor's Contribution.
|
||||||
|
|
||||||
|
1.3. "Contribution"
|
||||||
|
|
||||||
|
means Covered Software of a particular Contributor.
|
||||||
|
|
||||||
|
1.4. "Covered Software"
|
||||||
|
|
||||||
|
means Source Code Form to which the initial Contributor has attached the
|
||||||
|
notice in Exhibit A, the Executable Form of such Source Code Form, and
|
||||||
|
Modifications of such Source Code Form, in each case including portions
|
||||||
|
thereof.
|
||||||
|
|
||||||
|
1.5. "Incompatible With Secondary Licenses"
|
||||||
|
means
|
||||||
|
|
||||||
|
a. that the initial Contributor has attached the notice described in
|
||||||
|
Exhibit B to the Covered Software; or
|
||||||
|
|
||||||
|
b. that the Covered Software was made available under the terms of
|
||||||
|
version 1.1 or earlier of the License, but not also under the terms of
|
||||||
|
a Secondary License.
|
||||||
|
|
||||||
|
1.6. "Executable Form"
|
||||||
|
|
||||||
|
means any form of the work other than Source Code Form.
|
||||||
|
|
||||||
|
1.7. "Larger Work"
|
||||||
|
|
||||||
|
means a work that combines Covered Software with other material, in a
|
||||||
|
separate file or files, that is not Covered Software.
|
||||||
|
|
||||||
|
1.8. "License"
|
||||||
|
|
||||||
|
means this document.
|
||||||
|
|
||||||
|
1.9. "Licensable"
|
||||||
|
|
||||||
|
means having the right to grant, to the maximum extent possible, whether
|
||||||
|
at the time of the initial grant or subsequently, any and all of the
|
||||||
|
rights conveyed by this License.
|
||||||
|
|
||||||
|
1.10. "Modifications"
|
||||||
|
|
||||||
|
means any of the following:
|
||||||
|
|
||||||
|
a. any file in Source Code Form that results from an addition to,
|
||||||
|
deletion from, or modification of the contents of Covered Software; or
|
||||||
|
|
||||||
|
b. any new file in Source Code Form that contains any Covered Software.
|
||||||
|
|
||||||
|
1.11. "Patent Claims" of a Contributor
|
||||||
|
|
||||||
|
means any patent claim(s), including without limitation, method,
|
||||||
|
process, and apparatus claims, in any patent Licensable by such
|
||||||
|
Contributor that would be infringed, but for the grant of the License,
|
||||||
|
by the making, using, selling, offering for sale, having made, import,
|
||||||
|
or transfer of either its Contributions or its Contributor Version.
|
||||||
|
|
||||||
|
1.12. "Secondary License"
|
||||||
|
|
||||||
|
means either the GNU General Public License, Version 2.0, the GNU Lesser
|
||||||
|
General Public License, Version 2.1, the GNU Affero General Public
|
||||||
|
License, Version 3.0, or any later versions of those licenses.
|
||||||
|
|
||||||
|
1.13. "Source Code Form"
|
||||||
|
|
||||||
|
means the form of the work preferred for making modifications.
|
||||||
|
|
||||||
|
1.14. "You" (or "Your")
|
||||||
|
|
||||||
|
means an individual or a legal entity exercising rights under this
|
||||||
|
License. For legal entities, "You" includes any entity that controls, is
|
||||||
|
controlled by, or is under common control with You. For purposes of this
|
||||||
|
definition, "control" means (a) the power, direct or indirect, to cause
|
||||||
|
the direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (b) ownership of more than fifty percent (50%) of the
|
||||||
|
outstanding shares or beneficial ownership of such entity.
|
||||||
|
|
||||||
|
|
||||||
|
2. License Grants and Conditions
|
||||||
|
|
||||||
|
2.1. Grants
|
||||||
|
|
||||||
|
Each Contributor hereby grants You a world-wide, royalty-free,
|
||||||
|
non-exclusive license:
|
||||||
|
|
||||||
|
a. under intellectual property rights (other than patent or trademark)
|
||||||
|
Licensable by such Contributor to use, reproduce, make available,
|
||||||
|
modify, display, perform, distribute, and otherwise exploit its
|
||||||
|
Contributions, either on an unmodified basis, with Modifications, or
|
||||||
|
as part of a Larger Work; and
|
||||||
|
|
||||||
|
b. under Patent Claims of such Contributor to make, use, sell, offer for
|
||||||
|
sale, have made, import, and otherwise transfer either its
|
||||||
|
Contributions or its Contributor Version.
|
||||||
|
|
||||||
|
2.2. Effective Date
|
||||||
|
|
||||||
|
The licenses granted in Section 2.1 with respect to any Contribution
|
||||||
|
become effective for each Contribution on the date the Contributor first
|
||||||
|
distributes such Contribution.
|
||||||
|
|
||||||
|
2.3. Limitations on Grant Scope
|
||||||
|
|
||||||
|
The licenses granted in this Section 2 are the only rights granted under
|
||||||
|
this License. No additional rights or licenses will be implied from the
|
||||||
|
distribution or licensing of Covered Software under this License.
|
||||||
|
Notwithstanding Section 2.1(b) above, no patent license is granted by a
|
||||||
|
Contributor:
|
||||||
|
|
||||||
|
a. for any code that a Contributor has removed from Covered Software; or
|
||||||
|
|
||||||
|
b. for infringements caused by: (i) Your and any other third party's
|
||||||
|
modifications of Covered Software, or (ii) the combination of its
|
||||||
|
Contributions with other software (except as part of its Contributor
|
||||||
|
Version); or
|
||||||
|
|
||||||
|
c. under Patent Claims infringed by Covered Software in the absence of
|
||||||
|
its Contributions.
|
||||||
|
|
||||||
|
This License does not grant any rights in the trademarks, service marks,
|
||||||
|
or logos of any Contributor (except as may be necessary to comply with
|
||||||
|
the notice requirements in Section 3.4).
|
||||||
|
|
||||||
|
2.4. Subsequent Licenses
|
||||||
|
|
||||||
|
No Contributor makes additional grants as a result of Your choice to
|
||||||
|
distribute the Covered Software under a subsequent version of this
|
||||||
|
License (see Section 10.2) or under the terms of a Secondary License (if
|
||||||
|
permitted under the terms of Section 3.3).
|
||||||
|
|
||||||
|
2.5. Representation
|
||||||
|
|
||||||
|
Each Contributor represents that the Contributor believes its
|
||||||
|
Contributions are its original creation(s) or it has sufficient rights to
|
||||||
|
grant the rights to its Contributions conveyed by this License.
|
||||||
|
|
||||||
|
2.6. Fair Use
|
||||||
|
|
||||||
|
This License is not intended to limit any rights You have under
|
||||||
|
applicable copyright doctrines of fair use, fair dealing, or other
|
||||||
|
equivalents.
|
||||||
|
|
||||||
|
2.7. Conditions
|
||||||
|
|
||||||
|
Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in
|
||||||
|
Section 2.1.
|
||||||
|
|
||||||
|
|
||||||
|
3. Responsibilities
|
||||||
|
|
||||||
|
3.1. Distribution of Source Form
|
||||||
|
|
||||||
|
All distribution of Covered Software in Source Code Form, including any
|
||||||
|
Modifications that You create or to which You contribute, must be under
|
||||||
|
the terms of this License. You must inform recipients that the Source
|
||||||
|
Code Form of the Covered Software is governed by the terms of this
|
||||||
|
License, and how they can obtain a copy of this License. You may not
|
||||||
|
attempt to alter or restrict the recipients' rights in the Source Code
|
||||||
|
Form.
|
||||||
|
|
||||||
|
3.2. Distribution of Executable Form
|
||||||
|
|
||||||
|
If You distribute Covered Software in Executable Form then:
|
||||||
|
|
||||||
|
a. such Covered Software must also be made available in Source Code Form,
|
||||||
|
as described in Section 3.1, and You must inform recipients of the
|
||||||
|
Executable Form how they can obtain a copy of such Source Code Form by
|
||||||
|
reasonable means in a timely manner, at a charge no more than the cost
|
||||||
|
of distribution to the recipient; and
|
||||||
|
|
||||||
|
b. You may distribute such Executable Form under the terms of this
|
||||||
|
License, or sublicense it under different terms, provided that the
|
||||||
|
license for the Executable Form does not attempt to limit or alter the
|
||||||
|
recipients' rights in the Source Code Form under this License.
|
||||||
|
|
||||||
|
3.3. Distribution of a Larger Work
|
||||||
|
|
||||||
|
You may create and distribute a Larger Work under terms of Your choice,
|
||||||
|
provided that You also comply with the requirements of this License for
|
||||||
|
the Covered Software. If the Larger Work is a combination of Covered
|
||||||
|
Software with a work governed by one or more Secondary Licenses, and the
|
||||||
|
Covered Software is not Incompatible With Secondary Licenses, this
|
||||||
|
License permits You to additionally distribute such Covered Software
|
||||||
|
under the terms of such Secondary License(s), so that the recipient of
|
||||||
|
the Larger Work may, at their option, further distribute the Covered
|
||||||
|
Software under the terms of either this License or such Secondary
|
||||||
|
License(s).
|
||||||
|
|
||||||
|
3.4. Notices
|
||||||
|
|
||||||
|
You may not remove or alter the substance of any license notices
|
||||||
|
(including copyright notices, patent notices, disclaimers of warranty, or
|
||||||
|
limitations of liability) contained within the Source Code Form of the
|
||||||
|
Covered Software, except that You may alter any license notices to the
|
||||||
|
extent required to remedy known factual inaccuracies.
|
||||||
|
|
||||||
|
3.5. Application of Additional Terms
|
||||||
|
|
||||||
|
You may choose to offer, and to charge a fee for, warranty, support,
|
||||||
|
indemnity or liability obligations to one or more recipients of Covered
|
||||||
|
Software. However, You may do so only on Your own behalf, and not on
|
||||||
|
behalf of any Contributor. You must make it absolutely clear that any
|
||||||
|
such warranty, support, indemnity, or liability obligation is offered by
|
||||||
|
You alone, and You hereby agree to indemnify every Contributor for any
|
||||||
|
liability incurred by such Contributor as a result of warranty, support,
|
||||||
|
indemnity or liability terms You offer. You may include additional
|
||||||
|
disclaimers of warranty and limitations of liability specific to any
|
||||||
|
jurisdiction.
|
||||||
|
|
||||||
|
4. Inability to Comply Due to Statute or Regulation
|
||||||
|
|
||||||
|
If it is impossible for You to comply with any of the terms of this License
|
||||||
|
with respect to some or all of the Covered Software due to statute,
|
||||||
|
judicial order, or regulation then You must: (a) comply with the terms of
|
||||||
|
this License to the maximum extent possible; and (b) describe the
|
||||||
|
limitations and the code they affect. Such description must be placed in a
|
||||||
|
text file included with all distributions of the Covered Software under
|
||||||
|
this License. Except to the extent prohibited by statute or regulation,
|
||||||
|
such description must be sufficiently detailed for a recipient of ordinary
|
||||||
|
skill to be able to understand it.
|
||||||
|
|
||||||
|
5. Termination
|
||||||
|
|
||||||
|
5.1. The rights granted under this License will terminate automatically if You
|
||||||
|
fail to comply with any of its terms. However, if You become compliant,
|
||||||
|
then the rights granted under this License from a particular Contributor
|
||||||
|
are reinstated (a) provisionally, unless and until such Contributor
|
||||||
|
explicitly and finally terminates Your grants, and (b) on an ongoing
|
||||||
|
basis, if such Contributor fails to notify You of the non-compliance by
|
||||||
|
some reasonable means prior to 60 days after You have come back into
|
||||||
|
compliance. Moreover, Your grants from a particular Contributor are
|
||||||
|
reinstated on an ongoing basis if such Contributor notifies You of the
|
||||||
|
non-compliance by some reasonable means, this is the first time You have
|
||||||
|
received notice of non-compliance with this License from such
|
||||||
|
Contributor, and You become compliant prior to 30 days after Your receipt
|
||||||
|
of the notice.
|
||||||
|
|
||||||
|
5.2. If You initiate litigation against any entity by asserting a patent
|
||||||
|
infringement claim (excluding declaratory judgment actions,
|
||||||
|
counter-claims, and cross-claims) alleging that a Contributor Version
|
||||||
|
directly or indirectly infringes any patent, then the rights granted to
|
||||||
|
You by any and all Contributors for the Covered Software under Section
|
||||||
|
2.1 of this License shall terminate.
|
||||||
|
|
||||||
|
5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user
|
||||||
|
license agreements (excluding distributors and resellers) which have been
|
||||||
|
validly granted by You or Your distributors under this License prior to
|
||||||
|
termination shall survive termination.
|
||||||
|
|
||||||
|
6. Disclaimer of Warranty
|
||||||
|
|
||||||
|
Covered Software is provided under this License on an "as is" basis,
|
||||||
|
without warranty of any kind, either expressed, implied, or statutory,
|
||||||
|
including, without limitation, warranties that the Covered Software is free
|
||||||
|
of defects, merchantable, fit for a particular purpose or non-infringing.
|
||||||
|
The entire risk as to the quality and performance of the Covered Software
|
||||||
|
is with You. Should any Covered Software prove defective in any respect,
|
||||||
|
You (not any Contributor) assume the cost of any necessary servicing,
|
||||||
|
repair, or correction. This disclaimer of warranty constitutes an essential
|
||||||
|
part of this License. No use of any Covered Software is authorized under
|
||||||
|
this License except under this disclaimer.
|
||||||
|
|
||||||
|
7. Limitation of Liability
|
||||||
|
|
||||||
|
Under no circumstances and under no legal theory, whether tort (including
|
||||||
|
negligence), contract, or otherwise, shall any Contributor, or anyone who
|
||||||
|
distributes Covered Software as permitted above, be liable to You for any
|
||||||
|
direct, indirect, special, incidental, or consequential damages of any
|
||||||
|
character including, without limitation, damages for lost profits, loss of
|
||||||
|
goodwill, work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses, even if such party shall have been
|
||||||
|
informed of the possibility of such damages. This limitation of liability
|
||||||
|
shall not apply to liability for death or personal injury resulting from
|
||||||
|
such party's negligence to the extent applicable law prohibits such
|
||||||
|
limitation. Some jurisdictions do not allow the exclusion or limitation of
|
||||||
|
incidental or consequential damages, so this exclusion and limitation may
|
||||||
|
not apply to You.
|
||||||
|
|
||||||
|
8. Litigation
|
||||||
|
|
||||||
|
Any litigation relating to this License may be brought only in the courts
|
||||||
|
of a jurisdiction where the defendant maintains its principal place of
|
||||||
|
business and such litigation shall be governed by laws of that
|
||||||
|
jurisdiction, without reference to its conflict-of-law provisions. Nothing
|
||||||
|
in this Section shall prevent a party's ability to bring cross-claims or
|
||||||
|
counter-claims.
|
||||||
|
|
||||||
|
9. Miscellaneous
|
||||||
|
|
||||||
|
This License represents the complete agreement concerning the subject
|
||||||
|
matter hereof. If any provision of this License is held to be
|
||||||
|
unenforceable, such provision shall be reformed only to the extent
|
||||||
|
necessary to make it enforceable. Any law or regulation which provides that
|
||||||
|
the language of a contract shall be construed against the drafter shall not
|
||||||
|
be used to construe this License against a Contributor.
|
||||||
|
|
||||||
|
|
||||||
|
10. Versions of the License
|
||||||
|
|
||||||
|
10.1. New Versions
|
||||||
|
|
||||||
|
Mozilla Foundation is the license steward. Except as provided in Section
|
||||||
|
10.3, no one other than the license steward has the right to modify or
|
||||||
|
publish new versions of this License. Each version will be given a
|
||||||
|
distinguishing version number.
|
||||||
|
|
||||||
|
10.2. Effect of New Versions
|
||||||
|
|
||||||
|
You may distribute the Covered Software under the terms of the version
|
||||||
|
of the License under which You originally received the Covered Software,
|
||||||
|
or under the terms of any subsequent version published by the license
|
||||||
|
steward.
|
||||||
|
|
||||||
|
10.3. Modified Versions
|
||||||
|
|
||||||
|
If you create software not governed by this License, and you want to
|
||||||
|
create a new license for such software, you may create and use a
|
||||||
|
modified version of this License if you rename the license and remove
|
||||||
|
any references to the name of the license steward (except to note that
|
||||||
|
such modified license differs from this License).
|
||||||
|
|
||||||
|
10.4. Distributing Source Code Form that is Incompatible With Secondary
|
||||||
|
Licenses If You choose to distribute Source Code Form that is
|
||||||
|
Incompatible With Secondary Licenses under the terms of this version of
|
||||||
|
the License, the notice described in Exhibit B of this License must be
|
||||||
|
attached.
|
||||||
|
|
||||||
|
Exhibit A - Source Code Form License Notice
|
||||||
|
|
||||||
|
This Source Code Form is subject to the
|
||||||
|
terms of the Mozilla Public License, v.
|
||||||
|
2.0. If a copy of the MPL was not
|
||||||
|
distributed with this file, You can
|
||||||
|
obtain one at
|
||||||
|
http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
If it is not possible or desirable to put the notice in a particular file,
|
||||||
|
then You may include the notice in a location (such as a LICENSE file in a
|
||||||
|
relevant directory) where a recipient would be likely to look for such a
|
||||||
|
notice.
|
||||||
|
|
||||||
|
You may add additional accurate notices of copyright ownership.
|
||||||
|
|
||||||
|
Exhibit B - "Incompatible With Secondary Licenses" Notice
|
||||||
|
|
||||||
|
This Source Code Form is "Incompatible
|
||||||
|
With Secondary Licenses", as defined by
|
||||||
|
the Mozilla Public License, v. 2.0.
|
||||||
|
|
5
vendor/github.com/hashicorp/go-secure-stdlib/mlock/go.mod
generated
vendored
Normal file
5
vendor/github.com/hashicorp/go-secure-stdlib/mlock/go.mod
generated
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
module github.com/hashicorp/go-secure-stdlib/mlock
|
||||||
|
|
||||||
|
go 1.16
|
||||||
|
|
||||||
|
require golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c
|
2
vendor/github.com/hashicorp/go-secure-stdlib/mlock/go.sum
generated
vendored
Normal file
2
vendor/github.com/hashicorp/go-secure-stdlib/mlock/go.sum
generated
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I=
|
||||||
|
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
35
vendor/github.com/hashicorp/vault/api/auth.go
generated
vendored
35
vendor/github.com/hashicorp/vault/api/auth.go
generated
vendored
@ -1,11 +1,46 @@
|
|||||||
package api
|
package api
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
// Auth is used to perform credential backend related operations.
|
// Auth is used to perform credential backend related operations.
|
||||||
type Auth struct {
|
type Auth struct {
|
||||||
c *Client
|
c *Client
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type AuthMethod interface {
|
||||||
|
Login(ctx context.Context, client *Client) (*Secret, error)
|
||||||
|
}
|
||||||
|
|
||||||
// Auth is used to return the client for credential-backend API calls.
|
// Auth is used to return the client for credential-backend API calls.
|
||||||
func (c *Client) Auth() *Auth {
|
func (c *Client) Auth() *Auth {
|
||||||
return &Auth{c: c}
|
return &Auth{c: c}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Login sets up the required request body for login requests to the given auth
|
||||||
|
// method's /login API endpoint, and then performs a write to it. After a
|
||||||
|
// successful login, this method will automatically set the client's token to
|
||||||
|
// the login response's ClientToken as well.
|
||||||
|
//
|
||||||
|
// The Secret returned is the authentication secret, which if desired can be
|
||||||
|
// passed as input to the NewLifetimeWatcher method in order to start
|
||||||
|
// automatically renewing the token.
|
||||||
|
func (a *Auth) Login(ctx context.Context, authMethod AuthMethod) (*Secret, error) {
|
||||||
|
if authMethod == nil {
|
||||||
|
return nil, fmt.Errorf("no auth method provided for login")
|
||||||
|
}
|
||||||
|
|
||||||
|
authSecret, err := authMethod.Login(ctx, a.c)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("unable to log in to auth method: %w", err)
|
||||||
|
}
|
||||||
|
if authSecret == nil || authSecret.Auth == nil || authSecret.Auth.ClientToken == "" {
|
||||||
|
return nil, fmt.Errorf("login response from auth method did not return client token")
|
||||||
|
}
|
||||||
|
|
||||||
|
a.c.SetToken(authSecret.Auth.ClientToken)
|
||||||
|
|
||||||
|
return authSecret, nil
|
||||||
|
}
|
||||||
|
2
vendor/github.com/hashicorp/vault/api/go.mod
generated
vendored
2
vendor/github.com/hashicorp/vault/api/go.mod
generated
vendored
@ -16,7 +16,7 @@ require (
|
|||||||
github.com/hashicorp/go-rootcerts v1.0.2
|
github.com/hashicorp/go-rootcerts v1.0.2
|
||||||
github.com/hashicorp/go-secure-stdlib/parseutil v0.1.1
|
github.com/hashicorp/go-secure-stdlib/parseutil v0.1.1
|
||||||
github.com/hashicorp/hcl v1.0.0
|
github.com/hashicorp/hcl v1.0.0
|
||||||
github.com/hashicorp/vault/sdk v0.2.1
|
github.com/hashicorp/vault/sdk v0.3.0
|
||||||
github.com/mitchellh/mapstructure v1.4.2
|
github.com/mitchellh/mapstructure v1.4.2
|
||||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110
|
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110
|
||||||
golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1
|
golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1
|
||||||
|
129
vendor/github.com/hashicorp/vault/sdk/helper/certutil/helpers.go
generated
vendored
129
vendor/github.com/hashicorp/vault/sdk/helper/certutil/helpers.go
generated
vendored
@ -3,6 +3,7 @@ package certutil
|
|||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"crypto"
|
"crypto"
|
||||||
|
"crypto/dsa"
|
||||||
"crypto/ecdsa"
|
"crypto/ecdsa"
|
||||||
"crypto/ed25519"
|
"crypto/ed25519"
|
||||||
"crypto/elliptic"
|
"crypto/elliptic"
|
||||||
@ -164,6 +165,10 @@ func ParsePEMBundle(pemBundle string) (*ParsedCertBundle, error) {
|
|||||||
parsedBundle.PrivateKey = signer
|
parsedBundle.PrivateKey = signer
|
||||||
parsedBundle.PrivateKeyType = ECPrivateKey
|
parsedBundle.PrivateKeyType = ECPrivateKey
|
||||||
parsedBundle.PrivateKeyBytes = pemBlock.Bytes
|
parsedBundle.PrivateKeyBytes = pemBlock.Bytes
|
||||||
|
case ed25519.PrivateKey:
|
||||||
|
parsedBundle.PrivateKey = signer
|
||||||
|
parsedBundle.PrivateKeyType = Ed25519PrivateKey
|
||||||
|
parsedBundle.PrivateKeyBytes = pemBlock.Bytes
|
||||||
}
|
}
|
||||||
} else if certificates, err := x509.ParseCertificates(pemBlock.Bytes); err == nil {
|
} else if certificates, err := x509.ParseCertificates(pemBlock.Bytes); err == nil {
|
||||||
certPath = append(certPath, &CertBlock{
|
certPath = append(certPath, &CertBlock{
|
||||||
@ -217,6 +222,17 @@ func generatePrivateKey(keyType string, keyBits int, container ParsedPrivateKeyC
|
|||||||
|
|
||||||
switch keyType {
|
switch keyType {
|
||||||
case "rsa":
|
case "rsa":
|
||||||
|
// XXX: there is a false-positive CodeQL path here around keyBits;
|
||||||
|
// because of a default zero value in the TypeDurationSecond and
|
||||||
|
// TypeSignedDurationSecond cases of schema.DefaultOrZero(), it
|
||||||
|
// thinks it is possible to end up with < 2048 bit RSA Key here.
|
||||||
|
// While this is true for SSH keys, it isn't true for PKI keys
|
||||||
|
// due to ValidateKeyTypeLength(...) below. While we could close
|
||||||
|
// the report as a false-positive, enforcing a minimum keyBits size
|
||||||
|
// here of 2048 would ensure no other paths exist.
|
||||||
|
if keyBits < 2048 {
|
||||||
|
return errutil.InternalError{Err: fmt.Sprintf("insecure bit length for RSA private key: %d", keyBits)}
|
||||||
|
}
|
||||||
privateKeyType = RSAPrivateKey
|
privateKeyType = RSAPrivateKey
|
||||||
privateKey, err = rsa.GenerateKey(randReader, keyBits)
|
privateKey, err = rsa.GenerateKey(randReader, keyBits)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -246,6 +262,16 @@ func generatePrivateKey(keyType string, keyBits int, container ParsedPrivateKeyC
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return errutil.InternalError{Err: fmt.Sprintf("error marshalling EC private key: %v", err)}
|
return errutil.InternalError{Err: fmt.Sprintf("error marshalling EC private key: %v", err)}
|
||||||
}
|
}
|
||||||
|
case "ed25519":
|
||||||
|
privateKeyType = Ed25519PrivateKey
|
||||||
|
_, privateKey, err = ed25519.GenerateKey(randReader)
|
||||||
|
if err != nil {
|
||||||
|
return errutil.InternalError{Err: fmt.Sprintf("error generating ed25519 private key: %v", err)}
|
||||||
|
}
|
||||||
|
privateKeyBytes, err = x509.MarshalPKCS8PrivateKey(privateKey.(ed25519.PrivateKey))
|
||||||
|
if err != nil {
|
||||||
|
return errutil.InternalError{Err: fmt.Sprintf("error marshalling Ed25519 private key: %v", err)}
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
return errutil.UserError{Err: fmt.Sprintf("unknown key type: %s", keyType)}
|
return errutil.UserError{Err: fmt.Sprintf("unknown key type: %s", keyType)}
|
||||||
}
|
}
|
||||||
@ -309,7 +335,16 @@ func ComparePublicKeys(key1Iface, key2Iface crypto.PublicKey) (bool, error) {
|
|||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
return true, nil
|
return true, nil
|
||||||
|
case ed25519.PublicKey:
|
||||||
|
key1 := key1Iface.(ed25519.PublicKey)
|
||||||
|
key2, ok := key2Iface.(ed25519.PublicKey)
|
||||||
|
if !ok {
|
||||||
|
return false, fmt.Errorf("key types do not match: %T and %T", key1Iface, key2Iface)
|
||||||
|
}
|
||||||
|
if !key1.Equal(key2) {
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
return true, nil
|
||||||
default:
|
default:
|
||||||
return false, fmt.Errorf("cannot compare key with type %T", key1Iface)
|
return false, fmt.Errorf("cannot compare key with type %T", key1Iface)
|
||||||
}
|
}
|
||||||
@ -490,6 +525,17 @@ func StringToOid(in string) (asn1.ObjectIdentifier, error) {
|
|||||||
return asn1.ObjectIdentifier(ret), nil
|
return asn1.ObjectIdentifier(ret), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ValidateSignatureLength(keyBits int) error {
|
||||||
|
switch keyBits {
|
||||||
|
case 256:
|
||||||
|
case 384:
|
||||||
|
case 512:
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("unsupported signature algorithm: %d", keyBits)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func ValidateKeyTypeLength(keyType string, keyBits int) error {
|
func ValidateKeyTypeLength(keyType string, keyBits int) error {
|
||||||
switch keyType {
|
switch keyType {
|
||||||
case "rsa":
|
case "rsa":
|
||||||
@ -510,7 +556,7 @@ func ValidateKeyTypeLength(keyType string, keyBits int) error {
|
|||||||
default:
|
default:
|
||||||
return fmt.Errorf("unsupported bit length for EC key: %d", keyBits)
|
return fmt.Errorf("unsupported bit length for EC key: %d", keyBits)
|
||||||
}
|
}
|
||||||
case "any":
|
case "any", "ed25519":
|
||||||
default:
|
default:
|
||||||
return fmt.Errorf("unknown key type %s", keyType)
|
return fmt.Errorf("unknown key type %s", keyType)
|
||||||
}
|
}
|
||||||
@ -598,9 +644,25 @@ func createCertificate(data *CreationBundle, randReader io.Reader) (*ParsedCertB
|
|||||||
if data.SigningBundle != nil {
|
if data.SigningBundle != nil {
|
||||||
switch data.SigningBundle.PrivateKeyType {
|
switch data.SigningBundle.PrivateKeyType {
|
||||||
case RSAPrivateKey:
|
case RSAPrivateKey:
|
||||||
certTemplate.SignatureAlgorithm = x509.SHA256WithRSA
|
switch data.Params.SignatureBits {
|
||||||
|
case 256:
|
||||||
|
certTemplate.SignatureAlgorithm = x509.SHA256WithRSA
|
||||||
|
case 384:
|
||||||
|
certTemplate.SignatureAlgorithm = x509.SHA384WithRSA
|
||||||
|
case 512:
|
||||||
|
certTemplate.SignatureAlgorithm = x509.SHA512WithRSA
|
||||||
|
}
|
||||||
|
case Ed25519PrivateKey:
|
||||||
|
certTemplate.SignatureAlgorithm = x509.PureEd25519
|
||||||
case ECPrivateKey:
|
case ECPrivateKey:
|
||||||
certTemplate.SignatureAlgorithm = x509.ECDSAWithSHA256
|
switch data.Params.SignatureBits {
|
||||||
|
case 256:
|
||||||
|
certTemplate.SignatureAlgorithm = x509.ECDSAWithSHA256
|
||||||
|
case 384:
|
||||||
|
certTemplate.SignatureAlgorithm = x509.ECDSAWithSHA384
|
||||||
|
case 512:
|
||||||
|
certTemplate.SignatureAlgorithm = x509.ECDSAWithSHA512
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
caCert := data.SigningBundle.Certificate
|
caCert := data.SigningBundle.Certificate
|
||||||
@ -618,9 +680,25 @@ func createCertificate(data *CreationBundle, randReader io.Reader) (*ParsedCertB
|
|||||||
|
|
||||||
switch data.Params.KeyType {
|
switch data.Params.KeyType {
|
||||||
case "rsa":
|
case "rsa":
|
||||||
certTemplate.SignatureAlgorithm = x509.SHA256WithRSA
|
switch data.Params.SignatureBits {
|
||||||
|
case 256:
|
||||||
|
certTemplate.SignatureAlgorithm = x509.SHA256WithRSA
|
||||||
|
case 384:
|
||||||
|
certTemplate.SignatureAlgorithm = x509.SHA384WithRSA
|
||||||
|
case 512:
|
||||||
|
certTemplate.SignatureAlgorithm = x509.SHA512WithRSA
|
||||||
|
}
|
||||||
|
case "ed25519":
|
||||||
|
certTemplate.SignatureAlgorithm = x509.PureEd25519
|
||||||
case "ec":
|
case "ec":
|
||||||
certTemplate.SignatureAlgorithm = x509.ECDSAWithSHA256
|
switch data.Params.SignatureBits {
|
||||||
|
case 256:
|
||||||
|
certTemplate.SignatureAlgorithm = x509.ECDSAWithSHA256
|
||||||
|
case 384:
|
||||||
|
certTemplate.SignatureAlgorithm = x509.ECDSAWithSHA384
|
||||||
|
case 512:
|
||||||
|
certTemplate.SignatureAlgorithm = x509.ECDSAWithSHA512
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
certTemplate.AuthorityKeyId = subjKeyID
|
certTemplate.AuthorityKeyId = subjKeyID
|
||||||
@ -715,6 +793,8 @@ func createCSR(data *CreationBundle, addBasicConstraints bool, randReader io.Rea
|
|||||||
csrTemplate.SignatureAlgorithm = x509.SHA256WithRSA
|
csrTemplate.SignatureAlgorithm = x509.SHA256WithRSA
|
||||||
case "ec":
|
case "ec":
|
||||||
csrTemplate.SignatureAlgorithm = x509.ECDSAWithSHA256
|
csrTemplate.SignatureAlgorithm = x509.ECDSAWithSHA256
|
||||||
|
case "ed25519":
|
||||||
|
csrTemplate.SignatureAlgorithm = x509.PureEd25519
|
||||||
}
|
}
|
||||||
|
|
||||||
csr, err := x509.CreateCertificateRequest(randReader, csrTemplate, result.PrivateKey)
|
csr, err := x509.CreateCertificateRequest(randReader, csrTemplate, result.PrivateKey)
|
||||||
@ -791,9 +871,23 @@ func signCertificate(data *CreationBundle, randReader io.Reader) (*ParsedCertBun
|
|||||||
|
|
||||||
switch data.SigningBundle.PrivateKeyType {
|
switch data.SigningBundle.PrivateKeyType {
|
||||||
case RSAPrivateKey:
|
case RSAPrivateKey:
|
||||||
certTemplate.SignatureAlgorithm = x509.SHA256WithRSA
|
switch data.Params.SignatureBits {
|
||||||
|
case 256:
|
||||||
|
certTemplate.SignatureAlgorithm = x509.SHA256WithRSA
|
||||||
|
case 384:
|
||||||
|
certTemplate.SignatureAlgorithm = x509.SHA384WithRSA
|
||||||
|
case 512:
|
||||||
|
certTemplate.SignatureAlgorithm = x509.SHA512WithRSA
|
||||||
|
}
|
||||||
case ECPrivateKey:
|
case ECPrivateKey:
|
||||||
certTemplate.SignatureAlgorithm = x509.ECDSAWithSHA256
|
switch data.Params.SignatureBits {
|
||||||
|
case 256:
|
||||||
|
certTemplate.SignatureAlgorithm = x509.ECDSAWithSHA256
|
||||||
|
case 384:
|
||||||
|
certTemplate.SignatureAlgorithm = x509.ECDSAWithSHA384
|
||||||
|
case 512:
|
||||||
|
certTemplate.SignatureAlgorithm = x509.ECDSAWithSHA512
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if data.Params.UseCSRValues {
|
if data.Params.UseCSRValues {
|
||||||
@ -920,3 +1014,22 @@ func parseCertsPEM(pemCerts []byte) ([]*x509.Certificate, error) {
|
|||||||
}
|
}
|
||||||
return certs, nil
|
return certs, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetPublicKeySize returns the key size in bits for a given arbitrary crypto.PublicKey
|
||||||
|
// Returns -1 for an unsupported key type.
|
||||||
|
func GetPublicKeySize(key crypto.PublicKey) int {
|
||||||
|
if key, ok := key.(*rsa.PublicKey); ok {
|
||||||
|
return key.Size() * 8
|
||||||
|
}
|
||||||
|
if key, ok := key.(*ecdsa.PublicKey); ok {
|
||||||
|
return key.Params().BitSize
|
||||||
|
}
|
||||||
|
if key, ok := key.(ed25519.PublicKey); ok {
|
||||||
|
return len(key) * 8
|
||||||
|
}
|
||||||
|
if key, ok := key.(dsa.PublicKey); ok {
|
||||||
|
return key.Y.BitLen()
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
26
vendor/github.com/hashicorp/vault/sdk/helper/certutil/types.go
generated
vendored
26
vendor/github.com/hashicorp/vault/sdk/helper/certutil/types.go
generated
vendored
@ -12,6 +12,7 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"crypto"
|
"crypto"
|
||||||
"crypto/ecdsa"
|
"crypto/ecdsa"
|
||||||
|
"crypto/ed25519"
|
||||||
"crypto/rsa"
|
"crypto/rsa"
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
"crypto/x509"
|
"crypto/x509"
|
||||||
@ -56,6 +57,7 @@ const (
|
|||||||
UnknownPrivateKey PrivateKeyType = ""
|
UnknownPrivateKey PrivateKeyType = ""
|
||||||
RSAPrivateKey PrivateKeyType = "rsa"
|
RSAPrivateKey PrivateKeyType = "rsa"
|
||||||
ECPrivateKey PrivateKeyType = "ec"
|
ECPrivateKey PrivateKeyType = "ec"
|
||||||
|
Ed25519PrivateKey PrivateKeyType = "ed25519"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TLSUsage controls whether the intended usage of a *tls.Config
|
// TLSUsage controls whether the intended usage of a *tls.Config
|
||||||
@ -185,6 +187,8 @@ func (c *CertBundle) ToParsedCertBundle() (*ParsedCertBundle, error) {
|
|||||||
c.PrivateKeyType = ECPrivateKey
|
c.PrivateKeyType = ECPrivateKey
|
||||||
case RSAPrivateKey:
|
case RSAPrivateKey:
|
||||||
c.PrivateKeyType = RSAPrivateKey
|
c.PrivateKeyType = RSAPrivateKey
|
||||||
|
case Ed25519PrivateKey:
|
||||||
|
c.PrivateKeyType = Ed25519PrivateKey
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
return nil, errutil.UserError{Err: fmt.Sprintf("Unsupported key block type: %s", pemBlock.Type)}
|
return nil, errutil.UserError{Err: fmt.Sprintf("Unsupported key block type: %s", pemBlock.Type)}
|
||||||
@ -290,6 +294,8 @@ func (p *ParsedCertBundle) ToCertBundle() (*CertBundle, error) {
|
|||||||
block.Type = string(ECBlock)
|
block.Type = string(ECBlock)
|
||||||
case RSAPrivateKey:
|
case RSAPrivateKey:
|
||||||
block.Type = string(PKCS1Block)
|
block.Type = string(PKCS1Block)
|
||||||
|
case Ed25519PrivateKey:
|
||||||
|
block.Type = string(PKCS8Block)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -380,7 +386,7 @@ func (p *ParsedCertBundle) getSigner() (crypto.Signer, error) {
|
|||||||
case PKCS8Block:
|
case PKCS8Block:
|
||||||
if k, err := x509.ParsePKCS8PrivateKey(p.PrivateKeyBytes); err == nil {
|
if k, err := x509.ParsePKCS8PrivateKey(p.PrivateKeyBytes); err == nil {
|
||||||
switch k := k.(type) {
|
switch k := k.(type) {
|
||||||
case *rsa.PrivateKey, *ecdsa.PrivateKey:
|
case *rsa.PrivateKey, *ecdsa.PrivateKey, ed25519.PrivateKey:
|
||||||
return k.(crypto.Signer), nil
|
return k.(crypto.Signer), nil
|
||||||
default:
|
default:
|
||||||
return nil, errutil.UserError{Err: "Found unknown private key type in pkcs#8 wrapping"}
|
return nil, errutil.UserError{Err: "Found unknown private key type in pkcs#8 wrapping"}
|
||||||
@ -411,6 +417,8 @@ func getPKCS8Type(bs []byte) (PrivateKeyType, error) {
|
|||||||
return ECPrivateKey, nil
|
return ECPrivateKey, nil
|
||||||
case *rsa.PrivateKey:
|
case *rsa.PrivateKey:
|
||||||
return RSAPrivateKey, nil
|
return RSAPrivateKey, nil
|
||||||
|
case ed25519.PrivateKey:
|
||||||
|
return Ed25519PrivateKey, nil
|
||||||
default:
|
default:
|
||||||
return UnknownPrivateKey, errutil.UserError{Err: "Found unknown private key type in pkcs#8 wrapping"}
|
return UnknownPrivateKey, errutil.UserError{Err: "Found unknown private key type in pkcs#8 wrapping"}
|
||||||
}
|
}
|
||||||
@ -443,6 +451,9 @@ func (c *CSRBundle) ToParsedCSRBundle() (*ParsedCSRBundle, error) {
|
|||||||
} else if _, err := x509.ParsePKCS1PrivateKey(pemBlock.Bytes); err == nil {
|
} else if _, err := x509.ParsePKCS1PrivateKey(pemBlock.Bytes); err == nil {
|
||||||
result.PrivateKeyType = RSAPrivateKey
|
result.PrivateKeyType = RSAPrivateKey
|
||||||
c.PrivateKeyType = "rsa"
|
c.PrivateKeyType = "rsa"
|
||||||
|
} else if _, err := x509.ParsePKCS8PrivateKey(pemBlock.Bytes); err == nil {
|
||||||
|
result.PrivateKeyType = Ed25519PrivateKey
|
||||||
|
c.PrivateKeyType = "ed25519"
|
||||||
} else {
|
} else {
|
||||||
return nil, errutil.UserError{Err: fmt.Sprintf("Unknown private key type in bundle: %s", c.PrivateKeyType)}
|
return nil, errutil.UserError{Err: fmt.Sprintf("Unknown private key type in bundle: %s", c.PrivateKeyType)}
|
||||||
}
|
}
|
||||||
@ -491,6 +502,9 @@ func (p *ParsedCSRBundle) ToCSRBundle() (*CSRBundle, error) {
|
|||||||
case ECPrivateKey:
|
case ECPrivateKey:
|
||||||
result.PrivateKeyType = "ec"
|
result.PrivateKeyType = "ec"
|
||||||
block.Type = "EC PRIVATE KEY"
|
block.Type = "EC PRIVATE KEY"
|
||||||
|
case Ed25519PrivateKey:
|
||||||
|
result.PrivateKeyType = "ed25519"
|
||||||
|
block.Type = "PRIVATE KEY"
|
||||||
default:
|
default:
|
||||||
return nil, errutil.InternalError{Err: "Could not determine private key type when creating block"}
|
return nil, errutil.InternalError{Err: "Could not determine private key type when creating block"}
|
||||||
}
|
}
|
||||||
@ -525,8 +539,15 @@ func (p *ParsedCSRBundle) getSigner() (crypto.Signer, error) {
|
|||||||
return nil, errutil.UserError{Err: fmt.Sprintf("Unable to parse CA's private RSA key: %s", err)}
|
return nil, errutil.UserError{Err: fmt.Sprintf("Unable to parse CA's private RSA key: %s", err)}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case Ed25519PrivateKey:
|
||||||
|
signerd, err := x509.ParsePKCS8PrivateKey(p.PrivateKeyBytes)
|
||||||
|
signer = signerd.(ed25519.PrivateKey)
|
||||||
|
if err != nil {
|
||||||
|
return nil, errutil.UserError{Err: fmt.Sprintf("Unable to parse CA's private Ed25519 key: %s", err)}
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return nil, errutil.UserError{Err: "Unable to determine type of private key; only RSA and EC are supported"}
|
return nil, errutil.UserError{Err: "Unable to determine type of private key; only RSA, Ed25519 and EC are supported"}
|
||||||
}
|
}
|
||||||
return signer, nil
|
return signer, nil
|
||||||
}
|
}
|
||||||
@ -677,6 +698,7 @@ type CreationParameters struct {
|
|||||||
ExtKeyUsageOIDs []string
|
ExtKeyUsageOIDs []string
|
||||||
PolicyIdentifiers []string
|
PolicyIdentifiers []string
|
||||||
BasicConstraintsValidForNonCA bool
|
BasicConstraintsValidForNonCA bool
|
||||||
|
SignatureBits int
|
||||||
|
|
||||||
// Only used when signing a CA cert
|
// Only used when signing a CA cert
|
||||||
UseCSRValues bool
|
UseCSRValues bool
|
||||||
|
4
vendor/github.com/hashicorp/vault/sdk/helper/consts/error.go
generated
vendored
4
vendor/github.com/hashicorp/vault/sdk/helper/consts/error.go
generated
vendored
@ -7,6 +7,10 @@ var (
|
|||||||
// No operation is expected to succeed before unsealing
|
// No operation is expected to succeed before unsealing
|
||||||
ErrSealed = errors.New("Vault is sealed")
|
ErrSealed = errors.New("Vault is sealed")
|
||||||
|
|
||||||
|
// ErrAPILocked is returned if an operation is performed when the API is
|
||||||
|
// locked for the request namespace.
|
||||||
|
ErrAPILocked = errors.New("API access to this namespace has been locked by an administrator")
|
||||||
|
|
||||||
// ErrStandby is returned if an operation is performed on a standby Vault.
|
// ErrStandby is returned if an operation is performed on a standby Vault.
|
||||||
// No operation is expected to succeed until active.
|
// No operation is expected to succeed until active.
|
||||||
ErrStandby = errors.New("Vault is in standby mode")
|
ErrStandby = errors.New("Vault is in standby mode")
|
||||||
|
9
vendor/github.com/hashicorp/vault/sdk/helper/consts/replication.go
generated
vendored
9
vendor/github.com/hashicorp/vault/sdk/helper/consts/replication.go
generated
vendored
@ -148,3 +148,12 @@ func (r ReplicationState) HasState(flag ReplicationState) bool { return r&flag !
|
|||||||
func (r *ReplicationState) AddState(flag ReplicationState) { *r |= flag }
|
func (r *ReplicationState) AddState(flag ReplicationState) { *r |= flag }
|
||||||
func (r *ReplicationState) ClearState(flag ReplicationState) { *r &= ^flag }
|
func (r *ReplicationState) ClearState(flag ReplicationState) { *r &= ^flag }
|
||||||
func (r *ReplicationState) ToggleState(flag ReplicationState) { *r ^= flag }
|
func (r *ReplicationState) ToggleState(flag ReplicationState) { *r ^= flag }
|
||||||
|
|
||||||
|
type HAState uint32
|
||||||
|
|
||||||
|
const (
|
||||||
|
_ HAState = iota
|
||||||
|
Standby
|
||||||
|
PerfStandby
|
||||||
|
Active
|
||||||
|
)
|
||||||
|
2
vendor/github.com/hashicorp/vault/sdk/helper/pluginutil/env.go
generated
vendored
2
vendor/github.com/hashicorp/vault/sdk/helper/pluginutil/env.go
generated
vendored
@ -3,8 +3,8 @@ package pluginutil
|
|||||||
import (
|
import (
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
|
"github.com/hashicorp/go-secure-stdlib/mlock"
|
||||||
version "github.com/hashicorp/go-version"
|
version "github.com/hashicorp/go-version"
|
||||||
"github.com/hashicorp/vault/sdk/helper/mlock"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
434
vendor/github.com/hashicorp/vault/sdk/helper/strutil/strutil.go
generated
vendored
434
vendor/github.com/hashicorp/vault/sdk/helper/strutil/strutil.go
generated
vendored
@ -1,480 +1,94 @@
|
|||||||
|
// DEPRECATED: this has been moved to go-secure-stdlib and will be removed
|
||||||
package strutil
|
package strutil
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/base64"
|
extstrutil "github.com/hashicorp/go-secure-stdlib/strutil"
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
|
||||||
"sort"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/hashicorp/errwrap"
|
|
||||||
glob "github.com/ryanuber/go-glob"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// StrListContainsGlob looks for a string in a list of strings and allows
|
|
||||||
// globs.
|
|
||||||
func StrListContainsGlob(haystack []string, needle string) bool {
|
func StrListContainsGlob(haystack []string, needle string) bool {
|
||||||
for _, item := range haystack {
|
return extstrutil.StrListContainsGlob(haystack, needle)
|
||||||
if glob.Glob(item, needle) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// StrListContains looks for a string in a list of strings.
|
|
||||||
func StrListContains(haystack []string, needle string) bool {
|
func StrListContains(haystack []string, needle string) bool {
|
||||||
for _, item := range haystack {
|
return extstrutil.StrListContains(haystack, needle)
|
||||||
if item == needle {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// StrListContainsCaseInsensitive looks for a string in a list of strings.
|
|
||||||
func StrListContainsCaseInsensitive(haystack []string, needle string) bool {
|
func StrListContainsCaseInsensitive(haystack []string, needle string) bool {
|
||||||
for _, item := range haystack {
|
return extstrutil.StrListContainsCaseInsensitive(haystack, needle)
|
||||||
if strings.EqualFold(item, needle) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// StrListSubset checks if a given list is a subset
|
|
||||||
// of another set
|
|
||||||
func StrListSubset(super, sub []string) bool {
|
func StrListSubset(super, sub []string) bool {
|
||||||
for _, item := range sub {
|
return extstrutil.StrListSubset(super, sub)
|
||||||
if !StrListContains(super, item) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ParseDedupAndSortStrings parses a comma separated list of strings
|
|
||||||
// into a slice of strings. The return slice will be sorted and will
|
|
||||||
// not contain duplicate or empty items.
|
|
||||||
func ParseDedupAndSortStrings(input string, sep string) []string {
|
func ParseDedupAndSortStrings(input string, sep string) []string {
|
||||||
input = strings.TrimSpace(input)
|
return extstrutil.ParseDedupAndSortStrings(input, sep)
|
||||||
parsed := []string{}
|
|
||||||
if input == "" {
|
|
||||||
// Don't return nil
|
|
||||||
return parsed
|
|
||||||
}
|
|
||||||
return RemoveDuplicates(strings.Split(input, sep), false)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ParseDedupLowercaseAndSortStrings parses a comma separated list of
|
|
||||||
// strings into a slice of strings. The return slice will be sorted and
|
|
||||||
// will not contain duplicate or empty items. The values will be converted
|
|
||||||
// to lower case.
|
|
||||||
func ParseDedupLowercaseAndSortStrings(input string, sep string) []string {
|
func ParseDedupLowercaseAndSortStrings(input string, sep string) []string {
|
||||||
input = strings.TrimSpace(input)
|
return extstrutil.ParseDedupLowercaseAndSortStrings(input, sep)
|
||||||
parsed := []string{}
|
|
||||||
if input == "" {
|
|
||||||
// Don't return nil
|
|
||||||
return parsed
|
|
||||||
}
|
|
||||||
return RemoveDuplicates(strings.Split(input, sep), true)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ParseKeyValues parses a comma separated list of `<key>=<value>` tuples
|
|
||||||
// into a map[string]string.
|
|
||||||
func ParseKeyValues(input string, out map[string]string, sep string) error {
|
func ParseKeyValues(input string, out map[string]string, sep string) error {
|
||||||
if out == nil {
|
return extstrutil.ParseKeyValues(input, out, sep)
|
||||||
return fmt.Errorf("'out is nil")
|
|
||||||
}
|
|
||||||
|
|
||||||
keyValues := ParseDedupLowercaseAndSortStrings(input, sep)
|
|
||||||
if len(keyValues) == 0 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, keyValue := range keyValues {
|
|
||||||
shards := strings.Split(keyValue, "=")
|
|
||||||
if len(shards) != 2 {
|
|
||||||
return fmt.Errorf("invalid <key,value> format")
|
|
||||||
}
|
|
||||||
|
|
||||||
key := strings.TrimSpace(shards[0])
|
|
||||||
value := strings.TrimSpace(shards[1])
|
|
||||||
if key == "" || value == "" {
|
|
||||||
return fmt.Errorf("invalid <key,value> pair: key: %q value: %q", key, value)
|
|
||||||
}
|
|
||||||
out[key] = value
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ParseArbitraryKeyValues parses arbitrary <key,value> tuples. The input
|
|
||||||
// can be one of the following:
|
|
||||||
// * JSON string
|
|
||||||
// * Base64 encoded JSON string
|
|
||||||
// * Comma separated list of `<key>=<value>` pairs
|
|
||||||
// * Base64 encoded string containing comma separated list of
|
|
||||||
// `<key>=<value>` pairs
|
|
||||||
//
|
|
||||||
// Input will be parsed into the output parameter, which should
|
|
||||||
// be a non-nil map[string]string.
|
|
||||||
func ParseArbitraryKeyValues(input string, out map[string]string, sep string) error {
|
func ParseArbitraryKeyValues(input string, out map[string]string, sep string) error {
|
||||||
input = strings.TrimSpace(input)
|
return extstrutil.ParseArbitraryKeyValues(input, out, sep)
|
||||||
if input == "" {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
if out == nil {
|
|
||||||
return fmt.Errorf("'out' is nil")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Try to base64 decode the input. If successful, consider the decoded
|
|
||||||
// value as input.
|
|
||||||
inputBytes, err := base64.StdEncoding.DecodeString(input)
|
|
||||||
if err == nil {
|
|
||||||
input = string(inputBytes)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Try to JSON unmarshal the input. If successful, consider that the
|
|
||||||
// metadata was supplied as JSON input.
|
|
||||||
err = json.Unmarshal([]byte(input), &out)
|
|
||||||
if err != nil {
|
|
||||||
// If JSON unmarshalling fails, consider that the input was
|
|
||||||
// supplied as a comma separated string of 'key=value' pairs.
|
|
||||||
if err = ParseKeyValues(input, out, sep); err != nil {
|
|
||||||
return errwrap.Wrapf("failed to parse the input: {{err}}", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Validate the parsed input
|
|
||||||
for key, value := range out {
|
|
||||||
if key != "" && value == "" {
|
|
||||||
return fmt.Errorf("invalid value for key %q", key)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ParseStringSlice parses a `sep`-separated list of strings into a
|
|
||||||
// []string with surrounding whitespace removed.
|
|
||||||
//
|
|
||||||
// The output will always be a valid slice but may be of length zero.
|
|
||||||
func ParseStringSlice(input string, sep string) []string {
|
func ParseStringSlice(input string, sep string) []string {
|
||||||
input = strings.TrimSpace(input)
|
return extstrutil.ParseStringSlice(input, sep)
|
||||||
if input == "" {
|
|
||||||
return []string{}
|
|
||||||
}
|
|
||||||
|
|
||||||
splitStr := strings.Split(input, sep)
|
|
||||||
ret := make([]string, len(splitStr))
|
|
||||||
for i, val := range splitStr {
|
|
||||||
ret[i] = strings.TrimSpace(val)
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ParseArbitraryStringSlice parses arbitrary string slice. The input
|
|
||||||
// can be one of the following:
|
|
||||||
// * JSON string
|
|
||||||
// * Base64 encoded JSON string
|
|
||||||
// * `sep` separated list of values
|
|
||||||
// * Base64-encoded string containing a `sep` separated list of values
|
|
||||||
//
|
|
||||||
// Note that the separator is ignored if the input is found to already be in a
|
|
||||||
// structured format (e.g., JSON)
|
|
||||||
//
|
|
||||||
// The output will always be a valid slice but may be of length zero.
|
|
||||||
func ParseArbitraryStringSlice(input string, sep string) []string {
|
func ParseArbitraryStringSlice(input string, sep string) []string {
|
||||||
input = strings.TrimSpace(input)
|
return extstrutil.ParseArbitraryStringSlice(input, sep)
|
||||||
if input == "" {
|
|
||||||
return []string{}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Try to base64 decode the input. If successful, consider the decoded
|
|
||||||
// value as input.
|
|
||||||
inputBytes, err := base64.StdEncoding.DecodeString(input)
|
|
||||||
if err == nil {
|
|
||||||
input = string(inputBytes)
|
|
||||||
}
|
|
||||||
|
|
||||||
ret := []string{}
|
|
||||||
|
|
||||||
// Try to JSON unmarshal the input. If successful, consider that the
|
|
||||||
// metadata was supplied as JSON input.
|
|
||||||
err = json.Unmarshal([]byte(input), &ret)
|
|
||||||
if err != nil {
|
|
||||||
// If JSON unmarshalling fails, consider that the input was
|
|
||||||
// supplied as a separated string of values.
|
|
||||||
return ParseStringSlice(input, sep)
|
|
||||||
}
|
|
||||||
|
|
||||||
if ret == nil {
|
|
||||||
return []string{}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TrimStrings takes a slice of strings and returns a slice of strings
|
|
||||||
// with trimmed spaces
|
|
||||||
func TrimStrings(items []string) []string {
|
func TrimStrings(items []string) []string {
|
||||||
ret := make([]string, len(items))
|
return extstrutil.TrimStrings(items)
|
||||||
for i, item := range items {
|
|
||||||
ret[i] = strings.TrimSpace(item)
|
|
||||||
}
|
|
||||||
return ret
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// RemoveDuplicates removes duplicate and empty elements from a slice of
|
|
||||||
// strings. This also may convert the items in the slice to lower case and
|
|
||||||
// returns a sorted slice.
|
|
||||||
func RemoveDuplicates(items []string, lowercase bool) []string {
|
func RemoveDuplicates(items []string, lowercase bool) []string {
|
||||||
itemsMap := map[string]bool{}
|
return extstrutil.RemoveDuplicates(items, lowercase)
|
||||||
for _, item := range items {
|
|
||||||
item = strings.TrimSpace(item)
|
|
||||||
if lowercase {
|
|
||||||
item = strings.ToLower(item)
|
|
||||||
}
|
|
||||||
if item == "" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
itemsMap[item] = true
|
|
||||||
}
|
|
||||||
items = make([]string, 0, len(itemsMap))
|
|
||||||
for item := range itemsMap {
|
|
||||||
items = append(items, item)
|
|
||||||
}
|
|
||||||
sort.Strings(items)
|
|
||||||
return items
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// RemoveDuplicatesStable removes duplicate and empty elements from a slice of
|
|
||||||
// strings, preserving order (and case) of the original slice.
|
|
||||||
// In all cases, strings are compared after trimming whitespace
|
|
||||||
// If caseInsensitive, strings will be compared after ToLower()
|
|
||||||
func RemoveDuplicatesStable(items []string, caseInsensitive bool) []string {
|
func RemoveDuplicatesStable(items []string, caseInsensitive bool) []string {
|
||||||
itemsMap := make(map[string]bool, len(items))
|
return extstrutil.RemoveDuplicatesStable(items, caseInsensitive)
|
||||||
deduplicated := make([]string, 0, len(items))
|
|
||||||
|
|
||||||
for _, item := range items {
|
|
||||||
key := strings.TrimSpace(item)
|
|
||||||
if caseInsensitive {
|
|
||||||
key = strings.ToLower(key)
|
|
||||||
}
|
|
||||||
if key == "" || itemsMap[key] {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
itemsMap[key] = true
|
|
||||||
deduplicated = append(deduplicated, item)
|
|
||||||
}
|
|
||||||
return deduplicated
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// RemoveEmpty removes empty elements from a slice of
|
|
||||||
// strings
|
|
||||||
func RemoveEmpty(items []string) []string {
|
func RemoveEmpty(items []string) []string {
|
||||||
if len(items) == 0 {
|
return extstrutil.RemoveEmpty(items)
|
||||||
return items
|
|
||||||
}
|
|
||||||
itemsSlice := make([]string, 0, len(items))
|
|
||||||
for _, item := range items {
|
|
||||||
if item == "" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
itemsSlice = append(itemsSlice, item)
|
|
||||||
}
|
|
||||||
return itemsSlice
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// EquivalentSlices checks whether the given string sets are equivalent, as in,
|
|
||||||
// they contain the same values.
|
|
||||||
func EquivalentSlices(a, b []string) bool {
|
func EquivalentSlices(a, b []string) bool {
|
||||||
if a == nil && b == nil {
|
return extstrutil.EquivalentSlices(a, b)
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
if a == nil || b == nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// First we'll build maps to ensure unique values
|
|
||||||
mapA := map[string]bool{}
|
|
||||||
mapB := map[string]bool{}
|
|
||||||
for _, keyA := range a {
|
|
||||||
mapA[keyA] = true
|
|
||||||
}
|
|
||||||
for _, keyB := range b {
|
|
||||||
mapB[keyB] = true
|
|
||||||
}
|
|
||||||
|
|
||||||
// Now we'll build our checking slices
|
|
||||||
var sortedA, sortedB []string
|
|
||||||
for keyA := range mapA {
|
|
||||||
sortedA = append(sortedA, keyA)
|
|
||||||
}
|
|
||||||
for keyB := range mapB {
|
|
||||||
sortedB = append(sortedB, keyB)
|
|
||||||
}
|
|
||||||
sort.Strings(sortedA)
|
|
||||||
sort.Strings(sortedB)
|
|
||||||
|
|
||||||
// Finally, compare
|
|
||||||
if len(sortedA) != len(sortedB) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
for i := range sortedA {
|
|
||||||
if sortedA[i] != sortedB[i] {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// EqualStringMaps tests whether two map[string]string objects are equal.
|
|
||||||
// Equal means both maps have the same sets of keys and values. This function
|
|
||||||
// is 6-10x faster than a call to reflect.DeepEqual().
|
|
||||||
func EqualStringMaps(a, b map[string]string) bool {
|
func EqualStringMaps(a, b map[string]string) bool {
|
||||||
if len(a) != len(b) {
|
return extstrutil.EqualStringMaps(a, b)
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
for k := range a {
|
|
||||||
v, ok := b[k]
|
|
||||||
if !ok || a[k] != v {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// StrListDelete removes the first occurrence of the given item from the slice
|
|
||||||
// of strings if the item exists.
|
|
||||||
func StrListDelete(s []string, d string) []string {
|
func StrListDelete(s []string, d string) []string {
|
||||||
if s == nil {
|
return extstrutil.StrListDelete(s, d)
|
||||||
return s
|
|
||||||
}
|
|
||||||
|
|
||||||
for index, element := range s {
|
|
||||||
if element == d {
|
|
||||||
return append(s[:index], s[index+1:]...)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return s
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// GlobbedStringsMatch compares item to val with support for a leading and/or
|
|
||||||
// trailing wildcard '*' in item.
|
|
||||||
func GlobbedStringsMatch(item, val string) bool {
|
func GlobbedStringsMatch(item, val string) bool {
|
||||||
if len(item) < 2 {
|
return extstrutil.GlobbedStringsMatch(item, val)
|
||||||
return val == item
|
|
||||||
}
|
|
||||||
|
|
||||||
hasPrefix := strings.HasPrefix(item, "*")
|
|
||||||
hasSuffix := strings.HasSuffix(item, "*")
|
|
||||||
|
|
||||||
if hasPrefix && hasSuffix {
|
|
||||||
return strings.Contains(val, item[1:len(item)-1])
|
|
||||||
} else if hasPrefix {
|
|
||||||
return strings.HasSuffix(val, item[1:])
|
|
||||||
} else if hasSuffix {
|
|
||||||
return strings.HasPrefix(val, item[:len(item)-1])
|
|
||||||
}
|
|
||||||
|
|
||||||
return val == item
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// AppendIfMissing adds a string to a slice if the given string is not present
|
|
||||||
func AppendIfMissing(slice []string, i string) []string {
|
func AppendIfMissing(slice []string, i string) []string {
|
||||||
if StrListContains(slice, i) {
|
return extstrutil.AppendIfMissing(slice, i)
|
||||||
return slice
|
|
||||||
}
|
|
||||||
return append(slice, i)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// MergeSlices adds an arbitrary number of slices together, uniquely
|
|
||||||
func MergeSlices(args ...[]string) []string {
|
func MergeSlices(args ...[]string) []string {
|
||||||
all := map[string]struct{}{}
|
return extstrutil.MergeSlices(args...)
|
||||||
for _, slice := range args {
|
|
||||||
for _, v := range slice {
|
|
||||||
all[v] = struct{}{}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
result := make([]string, 0, len(all))
|
|
||||||
for k := range all {
|
|
||||||
result = append(result, k)
|
|
||||||
}
|
|
||||||
sort.Strings(result)
|
|
||||||
return result
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Difference returns the set difference (A - B) of the two given slices. The
|
|
||||||
// result will also remove any duplicated values in set A regardless of whether
|
|
||||||
// that matches any values in set B.
|
|
||||||
func Difference(a, b []string, lowercase bool) []string {
|
func Difference(a, b []string, lowercase bool) []string {
|
||||||
if len(a) == 0 {
|
return extstrutil.Difference(a, b, lowercase)
|
||||||
return a
|
|
||||||
}
|
|
||||||
if len(b) == 0 {
|
|
||||||
if !lowercase {
|
|
||||||
return a
|
|
||||||
}
|
|
||||||
newA := make([]string, len(a))
|
|
||||||
for i, v := range a {
|
|
||||||
newA[i] = strings.ToLower(v)
|
|
||||||
}
|
|
||||||
return newA
|
|
||||||
}
|
|
||||||
|
|
||||||
a = RemoveDuplicates(a, lowercase)
|
|
||||||
b = RemoveDuplicates(b, lowercase)
|
|
||||||
|
|
||||||
itemsMap := map[string]bool{}
|
|
||||||
for _, aVal := range a {
|
|
||||||
itemsMap[aVal] = true
|
|
||||||
}
|
|
||||||
|
|
||||||
// Perform difference calculation
|
|
||||||
for _, bVal := range b {
|
|
||||||
if _, ok := itemsMap[bVal]; ok {
|
|
||||||
itemsMap[bVal] = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
items := []string{}
|
|
||||||
for item, exists := range itemsMap {
|
|
||||||
if exists {
|
|
||||||
items = append(items, item)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sort.Strings(items)
|
|
||||||
return items
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetString attempts to retrieve a value from the provided map and assert that it is a string. If the key does not
|
|
||||||
// exist in the map, this will return an empty string. If the key exists, but the value is not a string type, this will
|
|
||||||
// return an error. If no map or key is provied, this will return an error
|
|
||||||
func GetString(m map[string]interface{}, key string) (string, error) {
|
func GetString(m map[string]interface{}, key string) (string, error) {
|
||||||
if m == nil {
|
return extstrutil.GetString(m, key)
|
||||||
return "", fmt.Errorf("missing map")
|
|
||||||
}
|
|
||||||
if key == "" {
|
|
||||||
return "", fmt.Errorf("missing key")
|
|
||||||
}
|
|
||||||
|
|
||||||
rawVal, ok := m[key]
|
|
||||||
if !ok {
|
|
||||||
return "", nil
|
|
||||||
}
|
|
||||||
|
|
||||||
str, ok := rawVal.(string)
|
|
||||||
if !ok {
|
|
||||||
return "", fmt.Errorf("invalid value at %s: is a %T", key, rawVal)
|
|
||||||
}
|
|
||||||
return str, nil
|
|
||||||
}
|
}
|
||||||
|
4
vendor/github.com/hashicorp/vault/sdk/helper/wrapping/wrapinfo.go
generated
vendored
4
vendor/github.com/hashicorp/vault/sdk/helper/wrapping/wrapinfo.go
generated
vendored
@ -17,8 +17,8 @@ type ResponseWrapInfo struct {
|
|||||||
// expected expiration.
|
// expected expiration.
|
||||||
CreationTime time.Time `json:"creation_time" structs:"creation_time" mapstructure:"creation_time" sentinel:""`
|
CreationTime time.Time `json:"creation_time" structs:"creation_time" mapstructure:"creation_time" sentinel:""`
|
||||||
|
|
||||||
// If the contained response is the output of a token creation call, the
|
// If the contained response is the output of a token or approle secret-id creation call, the
|
||||||
// created token's accessor will be accessible here
|
// created token's/secret-id's accessor will be accessible here
|
||||||
WrappedAccessor string `json:"wrapped_accessor" structs:"wrapped_accessor" mapstructure:"wrapped_accessor" sentinel:""`
|
WrappedAccessor string `json:"wrapped_accessor" structs:"wrapped_accessor" mapstructure:"wrapped_accessor" sentinel:""`
|
||||||
|
|
||||||
// WrappedEntityID is the entity identifier of the caller who initiated the
|
// WrappedEntityID is the entity identifier of the caller who initiated the
|
||||||
|
4
vendor/github.com/hashicorp/vault/sdk/logical/error.go
generated
vendored
4
vendor/github.com/hashicorp/vault/sdk/logical/error.go
generated
vendored
@ -47,6 +47,10 @@ var (
|
|||||||
// with the data in the local node's storage, based on the provided
|
// with the data in the local node's storage, based on the provided
|
||||||
// X-Vault-Index request header.
|
// X-Vault-Index request header.
|
||||||
ErrMissingRequiredState = errors.New("required index state not present")
|
ErrMissingRequiredState = errors.New("required index state not present")
|
||||||
|
|
||||||
|
// Error indicating that the requested path used to serve a purpose in older
|
||||||
|
// versions, but the functionality has now been removed
|
||||||
|
ErrPathFunctionalityRemoved = errors.New("functionality on this path has been removed")
|
||||||
)
|
)
|
||||||
|
|
||||||
type HTTPCodedError interface {
|
type HTTPCodedError interface {
|
||||||
|
134
vendor/github.com/hashicorp/vault/sdk/logical/identity.pb.go
generated
vendored
134
vendor/github.com/hashicorp/vault/sdk/logical/identity.pb.go
generated
vendored
@ -1,13 +1,12 @@
|
|||||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||||
// versions:
|
// versions:
|
||||||
// protoc-gen-go v1.25.0
|
// protoc-gen-go v1.27.1
|
||||||
// protoc v3.15.8
|
// protoc v3.17.3
|
||||||
// source: sdk/logical/identity.proto
|
// source: sdk/logical/identity.proto
|
||||||
|
|
||||||
package logical
|
package logical
|
||||||
|
|
||||||
import (
|
import (
|
||||||
proto "github.com/golang/protobuf/proto"
|
|
||||||
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
||||||
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
||||||
reflect "reflect"
|
reflect "reflect"
|
||||||
@ -21,28 +20,24 @@ const (
|
|||||||
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
|
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
|
||||||
)
|
)
|
||||||
|
|
||||||
// This is a compile-time assertion that a sufficiently up-to-date version
|
|
||||||
// of the legacy proto package is being used.
|
|
||||||
const _ = proto.ProtoPackageIsVersion4
|
|
||||||
|
|
||||||
type Entity struct {
|
type Entity struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState
|
||||||
sizeCache protoimpl.SizeCache
|
sizeCache protoimpl.SizeCache
|
||||||
unknownFields protoimpl.UnknownFields
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
// ID is the unique identifier for the entity
|
// ID is the unique identifier for the entity
|
||||||
ID string `sentinel:"" protobuf:"bytes,1,opt,name=ID,proto3" json:"ID,omitempty"`
|
ID string `protobuf:"bytes,1,opt,name=ID,proto3" json:"ID,omitempty"`
|
||||||
// Name is the human-friendly unique identifier for the entity
|
// Name is the human-friendly unique identifier for the entity
|
||||||
Name string `sentinel:"" protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
|
Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
|
||||||
// Aliases contains thhe alias mappings for the given entity
|
// Aliases contains thhe alias mappings for the given entity
|
||||||
Aliases []*Alias `sentinel:"" protobuf:"bytes,3,rep,name=aliases,proto3" json:"aliases,omitempty"`
|
Aliases []*Alias `protobuf:"bytes,3,rep,name=aliases,proto3" json:"aliases,omitempty"`
|
||||||
// Metadata represents the custom data tied to this entity
|
// Metadata represents the custom data tied to this entity
|
||||||
Metadata map[string]string `sentinel:"" protobuf:"bytes,4,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
|
Metadata map[string]string `protobuf:"bytes,4,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
|
||||||
// Disabled is true if the entity is disabled.
|
// Disabled is true if the entity is disabled.
|
||||||
Disabled bool `sentinel:"" protobuf:"varint,5,opt,name=disabled,proto3" json:"disabled,omitempty"`
|
Disabled bool `protobuf:"varint,5,opt,name=disabled,proto3" json:"disabled,omitempty"`
|
||||||
// NamespaceID is the identifier of the namespace to which this entity
|
// NamespaceID is the identifier of the namespace to which this entity
|
||||||
// belongs to.
|
// belongs to.
|
||||||
NamespaceID string `sentinel:"" protobuf:"bytes,6,opt,name=namespace_id,json=namespaceID,proto3" json:"namespace_id,omitempty"`
|
NamespaceID string `protobuf:"bytes,6,opt,name=namespace_id,json=namespaceID,proto3" json:"namespace_id,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *Entity) Reset() {
|
func (x *Entity) Reset() {
|
||||||
@ -125,24 +120,30 @@ type Alias struct {
|
|||||||
unknownFields protoimpl.UnknownFields
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
// MountType is the backend mount's type to which this identity belongs
|
// MountType is the backend mount's type to which this identity belongs
|
||||||
MountType string `sentinel:"" protobuf:"bytes,1,opt,name=mount_type,json=mountType,proto3" json:"mount_type,omitempty"`
|
MountType string `protobuf:"bytes,1,opt,name=mount_type,json=mountType,proto3" json:"mount_type,omitempty"`
|
||||||
// MountAccessor is the identifier of the mount entry to which this
|
// MountAccessor is the identifier of the mount entry to which this
|
||||||
// identity belongs
|
// identity belongs
|
||||||
MountAccessor string `sentinel:"" protobuf:"bytes,2,opt,name=mount_accessor,json=mountAccessor,proto3" json:"mount_accessor,omitempty"`
|
MountAccessor string `protobuf:"bytes,2,opt,name=mount_accessor,json=mountAccessor,proto3" json:"mount_accessor,omitempty"`
|
||||||
// Name is the identifier of this identity in its authentication source
|
// Name is the identifier of this identity in its authentication source
|
||||||
Name string `sentinel:"" protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
|
Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
|
||||||
// Metadata represents the custom data tied to this alias. Fields added
|
// Metadata represents the custom data tied to this alias. Fields added
|
||||||
// to it should have a low rate of change (or no change) because each
|
// to it should have a low rate of change (or no change) because each
|
||||||
// change incurs a storage write, so quickly-changing fields can have
|
// change incurs a storage write, so quickly-changing fields can have
|
||||||
// a significant performance impact at scale. See the SDK's
|
// a significant performance impact at scale. See the SDK's
|
||||||
// "aliasmetadata" package for a helper that eases and standardizes
|
// "aliasmetadata" package for a helper that eases and standardizes
|
||||||
// using this safely.
|
// using this safely.
|
||||||
Metadata map[string]string `sentinel:"" protobuf:"bytes,4,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
|
Metadata map[string]string `protobuf:"bytes,4,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
|
||||||
// ID is the unique identifier for the alias
|
// ID is the unique identifier for the alias
|
||||||
ID string `sentinel:"" protobuf:"bytes,5,opt,name=ID,proto3" json:"ID,omitempty"`
|
ID string `protobuf:"bytes,5,opt,name=ID,proto3" json:"ID,omitempty"`
|
||||||
// NamespaceID is the identifier of the namespace to which this alias
|
// NamespaceID is the identifier of the namespace to which this alias
|
||||||
// belongs.
|
// belongs.
|
||||||
NamespaceID string `sentinel:"" protobuf:"bytes,6,opt,name=namespace_id,json=namespaceID,proto3" json:"namespace_id,omitempty"`
|
NamespaceID string `protobuf:"bytes,6,opt,name=namespace_id,json=namespaceID,proto3" json:"namespace_id,omitempty"`
|
||||||
|
// Custom Metadata represents the custom data tied to this alias
|
||||||
|
CustomMetadata map[string]string `protobuf:"bytes,7,rep,name=custom_metadata,json=customMetadata,proto3" json:"custom_metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
|
||||||
|
// Local indicates if the alias only belongs to the cluster where it was
|
||||||
|
// created. If true, the alias will be stored in a location that are ignored
|
||||||
|
// by the performance replication subsystem.
|
||||||
|
Local bool `protobuf:"varint,8,opt,name=local,proto3" json:"local,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *Alias) Reset() {
|
func (x *Alias) Reset() {
|
||||||
@ -219,20 +220,34 @@ func (x *Alias) GetNamespaceID() string {
|
|||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (x *Alias) GetCustomMetadata() map[string]string {
|
||||||
|
if x != nil {
|
||||||
|
return x.CustomMetadata
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *Alias) GetLocal() bool {
|
||||||
|
if x != nil {
|
||||||
|
return x.Local
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
type Group struct {
|
type Group struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState
|
||||||
sizeCache protoimpl.SizeCache
|
sizeCache protoimpl.SizeCache
|
||||||
unknownFields protoimpl.UnknownFields
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
// ID is the unique identifier for the group
|
// ID is the unique identifier for the group
|
||||||
ID string `sentinel:"" protobuf:"bytes,1,opt,name=ID,proto3" json:"ID,omitempty"`
|
ID string `protobuf:"bytes,1,opt,name=ID,proto3" json:"ID,omitempty"`
|
||||||
// Name is the human-friendly unique identifier for the group
|
// Name is the human-friendly unique identifier for the group
|
||||||
Name string `sentinel:"" protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
|
Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
|
||||||
// Metadata represents the custom data tied to this group
|
// Metadata represents the custom data tied to this group
|
||||||
Metadata map[string]string `sentinel:"" protobuf:"bytes,3,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
|
Metadata map[string]string `protobuf:"bytes,3,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
|
||||||
// NamespaceID is the identifier of the namespace to which this group
|
// NamespaceID is the identifier of the namespace to which this group
|
||||||
// belongs to.
|
// belongs to.
|
||||||
NamespaceID string `sentinel:"" protobuf:"bytes,4,opt,name=namespace_id,json=namespaceID,proto3" json:"namespace_id,omitempty"`
|
NamespaceID string `protobuf:"bytes,4,opt,name=namespace_id,json=namespaceID,proto3" json:"namespace_id,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *Group) Reset() {
|
func (x *Group) Reset() {
|
||||||
@ -317,7 +332,7 @@ var file_sdk_logical_identity_proto_rawDesc = []byte{
|
|||||||
0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
|
0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
|
||||||
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76,
|
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76,
|
||||||
0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
|
0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
|
||||||
0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x8b, 0x02, 0x0a, 0x05, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12,
|
0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xb1, 0x03, 0x0a, 0x05, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12,
|
||||||
0x1d, 0x0a, 0x0a, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20,
|
0x1d, 0x0a, 0x0a, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20,
|
||||||
0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x25,
|
0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x25,
|
||||||
0x0a, 0x0e, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72,
|
0x0a, 0x0e, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72,
|
||||||
@ -330,26 +345,37 @@ var file_sdk_logical_identity_proto_rawDesc = []byte{
|
|||||||
0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52,
|
0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52,
|
||||||
0x02, 0x49, 0x44, 0x12, 0x21, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
|
0x02, 0x49, 0x44, 0x12, 0x21, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
|
||||||
0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, 0x61, 0x6d, 0x65, 0x73,
|
0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, 0x61, 0x6d, 0x65, 0x73,
|
||||||
0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61,
|
0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x4b, 0x0a, 0x0f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d,
|
||||||
0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,
|
0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32,
|
||||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c,
|
0x22, 0x2e, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x2e,
|
||||||
0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a,
|
0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e,
|
||||||
0x02, 0x38, 0x01, 0x22, 0xc5, 0x01, 0x0a, 0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x0e, 0x0a,
|
0x74, 0x72, 0x79, 0x52, 0x0e, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64,
|
||||||
0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x44, 0x12, 0x12, 0x0a,
|
0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x18, 0x08, 0x20, 0x01,
|
||||||
0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d,
|
0x28, 0x08, 0x52, 0x05, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74,
|
||||||
0x65, 0x12, 0x38, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20,
|
0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,
|
||||||
0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x47, 0x72,
|
0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05,
|
||||||
0x6f, 0x75, 0x70, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72,
|
0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c,
|
||||||
0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x0c, 0x6e,
|
0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d,
|
||||||
0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28,
|
0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,
|
||||||
0x09, 0x52, 0x0b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x1a, 0x3b,
|
0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
|
||||||
0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12,
|
0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
|
||||||
0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,
|
0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc5, 0x01, 0x0a, 0x05, 0x47, 0x72,
|
||||||
0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
|
0x6f, 0x75, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
|
||||||
0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x28, 0x5a, 0x26, 0x67,
|
0x02, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
|
||||||
0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63,
|
0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64,
|
||||||
0x6f, 0x72, 0x70, 0x2f, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x6c, 0x6f,
|
0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6c, 0x6f, 0x67, 0x69,
|
||||||
0x67, 0x69, 0x63, 0x61, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
0x63, 0x61, 0x6c, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61,
|
||||||
|
0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
|
||||||
|
0x61, 0x12, 0x21, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69,
|
||||||
|
0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
|
||||||
|
0x63, 0x65, 0x49, 0x64, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
|
||||||
|
0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,
|
||||||
|
0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
|
||||||
|
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
|
||||||
|
0x01, 0x42, 0x28, 0x5a, 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f,
|
||||||
|
0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x2f,
|
||||||
|
0x73, 0x64, 0x6b, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f,
|
||||||
|
0x74, 0x6f, 0x33,
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -364,25 +390,27 @@ func file_sdk_logical_identity_proto_rawDescGZIP() []byte {
|
|||||||
return file_sdk_logical_identity_proto_rawDescData
|
return file_sdk_logical_identity_proto_rawDescData
|
||||||
}
|
}
|
||||||
|
|
||||||
var file_sdk_logical_identity_proto_msgTypes = make([]protoimpl.MessageInfo, 6)
|
var file_sdk_logical_identity_proto_msgTypes = make([]protoimpl.MessageInfo, 7)
|
||||||
var file_sdk_logical_identity_proto_goTypes = []interface{}{
|
var file_sdk_logical_identity_proto_goTypes = []interface{}{
|
||||||
(*Entity)(nil), // 0: logical.Entity
|
(*Entity)(nil), // 0: logical.Entity
|
||||||
(*Alias)(nil), // 1: logical.Alias
|
(*Alias)(nil), // 1: logical.Alias
|
||||||
(*Group)(nil), // 2: logical.Group
|
(*Group)(nil), // 2: logical.Group
|
||||||
nil, // 3: logical.Entity.MetadataEntry
|
nil, // 3: logical.Entity.MetadataEntry
|
||||||
nil, // 4: logical.Alias.MetadataEntry
|
nil, // 4: logical.Alias.MetadataEntry
|
||||||
nil, // 5: logical.Group.MetadataEntry
|
nil, // 5: logical.Alias.CustomMetadataEntry
|
||||||
|
nil, // 6: logical.Group.MetadataEntry
|
||||||
}
|
}
|
||||||
var file_sdk_logical_identity_proto_depIDxs = []int32{
|
var file_sdk_logical_identity_proto_depIDxs = []int32{
|
||||||
1, // 0: logical.Entity.aliases:type_name -> logical.Alias
|
1, // 0: logical.Entity.aliases:type_name -> logical.Alias
|
||||||
3, // 1: logical.Entity.metadata:type_name -> logical.Entity.MetadataEntry
|
3, // 1: logical.Entity.metadata:type_name -> logical.Entity.MetadataEntry
|
||||||
4, // 2: logical.Alias.metadata:type_name -> logical.Alias.MetadataEntry
|
4, // 2: logical.Alias.metadata:type_name -> logical.Alias.MetadataEntry
|
||||||
5, // 3: logical.Group.metadata:type_name -> logical.Group.MetadataEntry
|
5, // 3: logical.Alias.custom_metadata:type_name -> logical.Alias.CustomMetadataEntry
|
||||||
4, // [4:4] is the sub-list for method output_type
|
6, // 4: logical.Group.metadata:type_name -> logical.Group.MetadataEntry
|
||||||
4, // [4:4] is the sub-list for method input_type
|
5, // [5:5] is the sub-list for method output_type
|
||||||
4, // [4:4] is the sub-list for extension type_name
|
5, // [5:5] is the sub-list for method input_type
|
||||||
4, // [4:4] is the sub-list for extension extendee
|
5, // [5:5] is the sub-list for extension type_name
|
||||||
0, // [0:4] is the sub-list for field type_name
|
5, // [5:5] is the sub-list for extension extendee
|
||||||
|
0, // [0:5] is the sub-list for field type_name
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() { file_sdk_logical_identity_proto_init() }
|
func init() { file_sdk_logical_identity_proto_init() }
|
||||||
@ -434,7 +462,7 @@ func file_sdk_logical_identity_proto_init() {
|
|||||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||||
RawDescriptor: file_sdk_logical_identity_proto_rawDesc,
|
RawDescriptor: file_sdk_logical_identity_proto_rawDesc,
|
||||||
NumEnums: 0,
|
NumEnums: 0,
|
||||||
NumMessages: 6,
|
NumMessages: 7,
|
||||||
NumExtensions: 0,
|
NumExtensions: 0,
|
||||||
NumServices: 0,
|
NumServices: 0,
|
||||||
},
|
},
|
||||||
|
8
vendor/github.com/hashicorp/vault/sdk/logical/identity.proto
generated
vendored
8
vendor/github.com/hashicorp/vault/sdk/logical/identity.proto
generated
vendored
@ -50,6 +50,14 @@ message Alias {
|
|||||||
// NamespaceID is the identifier of the namespace to which this alias
|
// NamespaceID is the identifier of the namespace to which this alias
|
||||||
// belongs.
|
// belongs.
|
||||||
string namespace_id = 6;
|
string namespace_id = 6;
|
||||||
|
|
||||||
|
// Custom Metadata represents the custom data tied to this alias
|
||||||
|
map<string, string> custom_metadata = 7;
|
||||||
|
|
||||||
|
// Local indicates if the alias only belongs to the cluster where it was
|
||||||
|
// created. If true, the alias will be stored in a location that are ignored
|
||||||
|
// by the performance replication subsystem.
|
||||||
|
bool local = 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
message Group {
|
message Group {
|
||||||
|
4
vendor/github.com/hashicorp/vault/sdk/logical/logical.go
generated
vendored
4
vendor/github.com/hashicorp/vault/sdk/logical/logical.go
generated
vendored
@ -117,6 +117,10 @@ type Paths struct {
|
|||||||
Root []string
|
Root []string
|
||||||
|
|
||||||
// Unauthenticated are the paths that can be accessed without any auth.
|
// Unauthenticated are the paths that can be accessed without any auth.
|
||||||
|
// These can't be regular expressions, it is either exact match, a prefix
|
||||||
|
// match and/or a wildcard match. For prefix match, append '*' as a suffix.
|
||||||
|
// For a wildcard match, use '+' in the segment to match any identifier
|
||||||
|
// (e.g. 'foo/+/bar'). Note that '+' can't be adjacent to a non-slash.
|
||||||
Unauthenticated []string
|
Unauthenticated []string
|
||||||
|
|
||||||
// LocalStorage are paths (prefixes) that are local to this instance; this
|
// LocalStorage are paths (prefixes) that are local to this instance; this
|
||||||
|
9
vendor/github.com/hashicorp/vault/sdk/logical/plugin.pb.go
generated
vendored
9
vendor/github.com/hashicorp/vault/sdk/logical/plugin.pb.go
generated
vendored
@ -1,13 +1,12 @@
|
|||||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||||
// versions:
|
// versions:
|
||||||
// protoc-gen-go v1.25.0
|
// protoc-gen-go v1.27.1
|
||||||
// protoc v3.15.8
|
// protoc v3.17.3
|
||||||
// source: sdk/logical/plugin.proto
|
// source: sdk/logical/plugin.proto
|
||||||
|
|
||||||
package logical
|
package logical
|
||||||
|
|
||||||
import (
|
import (
|
||||||
proto "github.com/golang/protobuf/proto"
|
|
||||||
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
||||||
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
||||||
reflect "reflect"
|
reflect "reflect"
|
||||||
@ -21,10 +20,6 @@ const (
|
|||||||
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
|
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
|
||||||
)
|
)
|
||||||
|
|
||||||
// This is a compile-time assertion that a sufficiently up-to-date version
|
|
||||||
// of the legacy proto package is being used.
|
|
||||||
const _ = proto.ProtoPackageIsVersion4
|
|
||||||
|
|
||||||
type PluginEnvironment struct {
|
type PluginEnvironment struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState
|
||||||
sizeCache protoimpl.SizeCache
|
sizeCache protoimpl.SizeCache
|
||||||
|
7
vendor/github.com/hashicorp/vault/sdk/logical/request.go
generated
vendored
7
vendor/github.com/hashicorp/vault/sdk/logical/request.go
generated
vendored
@ -214,6 +214,12 @@ type Request struct {
|
|||||||
// in response headers; it's attached to the request rather than the response
|
// in response headers; it's attached to the request rather than the response
|
||||||
// because not all requests yields non-nil responses.
|
// because not all requests yields non-nil responses.
|
||||||
responseState *WALState
|
responseState *WALState
|
||||||
|
|
||||||
|
// ClientID is the identity of the caller. If the token is associated with an
|
||||||
|
// entity, it will be the same as the EntityID . If the token has no entity,
|
||||||
|
// this will be the sha256(sorted policies + namespace) associated with the
|
||||||
|
// client token.
|
||||||
|
ClientID string `json:"client_id" structs:"client_id" mapstructure:"client_id" sentinel:""`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clone returns a deep copy of the request by using copystructure
|
// Clone returns a deep copy of the request by using copystructure
|
||||||
@ -350,6 +356,7 @@ const (
|
|||||||
CreateOperation Operation = "create"
|
CreateOperation Operation = "create"
|
||||||
ReadOperation = "read"
|
ReadOperation = "read"
|
||||||
UpdateOperation = "update"
|
UpdateOperation = "update"
|
||||||
|
PatchOperation = "patch"
|
||||||
DeleteOperation = "delete"
|
DeleteOperation = "delete"
|
||||||
ListOperation = "list"
|
ListOperation = "list"
|
||||||
HelpOperation = "help"
|
HelpOperation = "help"
|
||||||
|
12
vendor/github.com/hashicorp/vault/sdk/logical/response.go
generated
vendored
12
vendor/github.com/hashicorp/vault/sdk/logical/response.go
generated
vendored
@ -34,9 +34,17 @@ const (
|
|||||||
// ignore errors.
|
// ignore errors.
|
||||||
HTTPRawBodyAlreadyJSONDecoded = "http_raw_body_already_json_decoded"
|
HTTPRawBodyAlreadyJSONDecoded = "http_raw_body_already_json_decoded"
|
||||||
|
|
||||||
// If set, HTTPRawCacheControl will replace the default Cache-Control=no-store header
|
// If set, HTTPCacheControlHeader will replace the default Cache-Control=no-store header
|
||||||
// set by the generic wrapping handler. The value must be a string.
|
// set by the generic wrapping handler. The value must be a string.
|
||||||
HTTPRawCacheControl = "http_raw_cache_control"
|
HTTPCacheControlHeader = "http_raw_cache_control"
|
||||||
|
|
||||||
|
// If set, HTTPPragmaHeader will set the Pragma response header.
|
||||||
|
// The value must be a string.
|
||||||
|
HTTPPragmaHeader = "http_raw_pragma"
|
||||||
|
|
||||||
|
// If set, HTTPWWWAuthenticateHeader will set the WWW-Authenticate response header.
|
||||||
|
// The value must be a string.
|
||||||
|
HTTPWWWAuthenticateHeader = "http_www_authenticate"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Response is a struct that stores the response of a request.
|
// Response is a struct that stores the response of a request.
|
||||||
|
8
vendor/github.com/hashicorp/vault/sdk/logical/response_util.go
generated
vendored
8
vendor/github.com/hashicorp/vault/sdk/logical/response_util.go
generated
vendored
@ -17,7 +17,7 @@ import (
|
|||||||
func RespondErrorCommon(req *Request, resp *Response, err error) (int, error) {
|
func RespondErrorCommon(req *Request, resp *Response, err error) (int, error) {
|
||||||
if err == nil && (resp == nil || !resp.IsError()) {
|
if err == nil && (resp == nil || !resp.IsError()) {
|
||||||
switch {
|
switch {
|
||||||
case req.Operation == ReadOperation:
|
case req.Operation == ReadOperation, req.Operation == PatchOperation:
|
||||||
if resp == nil {
|
if resp == nil {
|
||||||
return http.StatusNotFound, nil
|
return http.StatusNotFound, nil
|
||||||
}
|
}
|
||||||
@ -118,6 +118,8 @@ func RespondErrorCommon(req *Request, resp *Response, err error) (int, error) {
|
|||||||
statusCode = http.StatusTooManyRequests
|
statusCode = http.StatusTooManyRequests
|
||||||
case errwrap.Contains(err, ErrMissingRequiredState.Error()):
|
case errwrap.Contains(err, ErrMissingRequiredState.Error()):
|
||||||
statusCode = http.StatusPreconditionFailed
|
statusCode = http.StatusPreconditionFailed
|
||||||
|
case errwrap.Contains(err, ErrPathFunctionalityRemoved.Error()):
|
||||||
|
statusCode = http.StatusNotFound
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -144,6 +146,10 @@ func AdjustErrorStatusCode(status *int, err error) {
|
|||||||
*status = http.StatusServiceUnavailable
|
*status = http.StatusServiceUnavailable
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if errwrap.Contains(err, consts.ErrAPILocked.Error()) {
|
||||||
|
*status = http.StatusServiceUnavailable
|
||||||
|
}
|
||||||
|
|
||||||
// Adjust status code on
|
// Adjust status code on
|
||||||
if errwrap.Contains(err, "http: request body too large") {
|
if errwrap.Contains(err, "http: request body too large") {
|
||||||
*status = http.StatusRequestEntityTooLarge
|
*status = http.StatusRequestEntityTooLarge
|
||||||
|
20
vendor/github.com/hashicorp/vault/sdk/logical/token.go
generated
vendored
20
vendor/github.com/hashicorp/vault/sdk/logical/token.go
generated
vendored
@ -87,12 +87,18 @@ type TokenEntry struct {
|
|||||||
// Which named policies should be used
|
// Which named policies should be used
|
||||||
Policies []string `json:"policies" mapstructure:"policies" structs:"policies"`
|
Policies []string `json:"policies" mapstructure:"policies" structs:"policies"`
|
||||||
|
|
||||||
|
// InlinePolicy specifies ACL rules to be applied to this token entry.
|
||||||
|
InlinePolicy string `json:"inline_policy" mapstructure:"inline_policy" structs:"inline_policy"`
|
||||||
|
|
||||||
// Used for audit trails, this is something like "auth/user/login"
|
// Used for audit trails, this is something like "auth/user/login"
|
||||||
Path string `json:"path" mapstructure:"path" structs:"path"`
|
Path string `json:"path" mapstructure:"path" structs:"path"`
|
||||||
|
|
||||||
// Used for auditing. This could include things like "source", "user", "ip"
|
// Used for auditing. This could include things like "source", "user", "ip"
|
||||||
Meta map[string]string `json:"meta" mapstructure:"meta" structs:"meta" sentinel:"meta"`
|
Meta map[string]string `json:"meta" mapstructure:"meta" structs:"meta" sentinel:"meta"`
|
||||||
|
|
||||||
|
// InternalMeta is used to store internal metadata. This metadata will not be audit logged or returned from lookup APIs.
|
||||||
|
InternalMeta map[string]string `json:"internal_meta" mapstructure:"internal_meta" structs:"internal_meta"`
|
||||||
|
|
||||||
// Used for operators to be able to associate with the source
|
// Used for operators to be able to associate with the source
|
||||||
DisplayName string `json:"display_name" mapstructure:"display_name" structs:"display_name"`
|
DisplayName string `json:"display_name" mapstructure:"display_name" structs:"display_name"`
|
||||||
|
|
||||||
@ -128,8 +134,13 @@ type TokenEntry struct {
|
|||||||
CreationTimeDeprecated int64 `json:"CreationTime" mapstructure:"CreationTime" structs:"CreationTime" sentinel:""`
|
CreationTimeDeprecated int64 `json:"CreationTime" mapstructure:"CreationTime" structs:"CreationTime" sentinel:""`
|
||||||
ExplicitMaxTTLDeprecated time.Duration `json:"ExplicitMaxTTL" mapstructure:"ExplicitMaxTTL" structs:"ExplicitMaxTTL" sentinel:""`
|
ExplicitMaxTTLDeprecated time.Duration `json:"ExplicitMaxTTL" mapstructure:"ExplicitMaxTTL" structs:"ExplicitMaxTTL" sentinel:""`
|
||||||
|
|
||||||
|
// EntityID is the ID of the entity associated with this token.
|
||||||
EntityID string `json:"entity_id" mapstructure:"entity_id" structs:"entity_id"`
|
EntityID string `json:"entity_id" mapstructure:"entity_id" structs:"entity_id"`
|
||||||
|
|
||||||
|
// If NoIdentityPolicies is true, the token will not inherit
|
||||||
|
// identity policies from the associated EntityID.
|
||||||
|
NoIdentityPolicies bool `json:"no_identity_policies" mapstructure:"no_identity_policies" structs:"no_identity_policies"`
|
||||||
|
|
||||||
// The set of CIDRs that this token can be used with
|
// The set of CIDRs that this token can be used with
|
||||||
BoundCIDRs []*sockaddr.SockAddrMarshaler `json:"bound_cidrs" sentinel:""`
|
BoundCIDRs []*sockaddr.SockAddrMarshaler `json:"bound_cidrs" sentinel:""`
|
||||||
|
|
||||||
@ -223,3 +234,12 @@ func (te *TokenEntry) SentinelKeys() []string {
|
|||||||
"type",
|
"type",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsRoot returns false if the token is not root (or doesn't exist)
|
||||||
|
func (te *TokenEntry) IsRoot() bool {
|
||||||
|
if te == nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return len(te.Policies) == 1 && te.Policies[0] == "root"
|
||||||
|
}
|
||||||
|
2
vendor/github.com/hashicorp/vault/sdk/version/version_base.go
generated
vendored
2
vendor/github.com/hashicorp/vault/sdk/version/version_base.go
generated
vendored
@ -8,7 +8,7 @@ var (
|
|||||||
// Whether cgo is enabled or not; set at build time
|
// Whether cgo is enabled or not; set at build time
|
||||||
CgoEnabled bool
|
CgoEnabled bool
|
||||||
|
|
||||||
Version = "1.8.0"
|
Version = "1.9.0"
|
||||||
VersionPrerelease = "dev"
|
VersionPrerelease = "dev"
|
||||||
VersionMetadata = ""
|
VersionMetadata = ""
|
||||||
)
|
)
|
||||||
|
3
vendor/go.uber.org/atomic/.gitignore
generated
vendored
3
vendor/go.uber.org/atomic/.gitignore
generated
vendored
@ -10,3 +10,6 @@ lint.log
|
|||||||
|
|
||||||
# Profiling output
|
# Profiling output
|
||||||
*.prof
|
*.prof
|
||||||
|
|
||||||
|
# Output of fossa analyzer
|
||||||
|
/fossa
|
||||||
|
27
vendor/go.uber.org/atomic/.travis.yml
generated
vendored
27
vendor/go.uber.org/atomic/.travis.yml
generated
vendored
@ -1,27 +0,0 @@
|
|||||||
sudo: false
|
|
||||||
language: go
|
|
||||||
go_import_path: go.uber.org/atomic
|
|
||||||
|
|
||||||
env:
|
|
||||||
global:
|
|
||||||
- GO111MODULE=on
|
|
||||||
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
- go: oldstable
|
|
||||||
- go: stable
|
|
||||||
env: LINT=1
|
|
||||||
|
|
||||||
cache:
|
|
||||||
directories:
|
|
||||||
- vendor
|
|
||||||
|
|
||||||
before_install:
|
|
||||||
- go version
|
|
||||||
|
|
||||||
script:
|
|
||||||
- test -z "$LINT" || make lint
|
|
||||||
- make cover
|
|
||||||
|
|
||||||
after_success:
|
|
||||||
- bash <(curl -s https://codecov.io/bash)
|
|
44
vendor/go.uber.org/atomic/CHANGELOG.md
generated
vendored
44
vendor/go.uber.org/atomic/CHANGELOG.md
generated
vendored
@ -4,6 +4,20 @@ All notable changes to this project will be documented in this file.
|
|||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
## [1.9.0] - 2021-07-15
|
||||||
|
### Added
|
||||||
|
- Add `Float64.Swap` to match int atomic operations.
|
||||||
|
- Add `atomic.Time` type for atomic operations on `time.Time` values.
|
||||||
|
|
||||||
|
[1.9.0]: https://github.com/uber-go/atomic/compare/v1.8.0...v1.9.0
|
||||||
|
|
||||||
|
## [1.8.0] - 2021-06-09
|
||||||
|
### Added
|
||||||
|
- Add `atomic.Uintptr` type for atomic operations on `uintptr` values.
|
||||||
|
- Add `atomic.UnsafePointer` type for atomic operations on `unsafe.Pointer` values.
|
||||||
|
|
||||||
|
[1.8.0]: https://github.com/uber-go/atomic/compare/v1.7.0...v1.8.0
|
||||||
|
|
||||||
## [1.7.0] - 2020-09-14
|
## [1.7.0] - 2020-09-14
|
||||||
### Added
|
### Added
|
||||||
- Support JSON serialization and deserialization of primitive atomic types.
|
- Support JSON serialization and deserialization of primitive atomic types.
|
||||||
@ -15,32 +29,46 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
### Removed
|
### Removed
|
||||||
- Remove dependency on `golang.org/x/{lint, tools}`.
|
- Remove dependency on `golang.org/x/{lint, tools}`.
|
||||||
|
|
||||||
|
[1.7.0]: https://github.com/uber-go/atomic/compare/v1.6.0...v1.7.0
|
||||||
|
|
||||||
## [1.6.0] - 2020-02-24
|
## [1.6.0] - 2020-02-24
|
||||||
### Changed
|
### Changed
|
||||||
- Drop library dependency on `golang.org/x/{lint, tools}`.
|
- Drop library dependency on `golang.org/x/{lint, tools}`.
|
||||||
|
|
||||||
|
[1.6.0]: https://github.com/uber-go/atomic/compare/v1.5.1...v1.6.0
|
||||||
|
|
||||||
## [1.5.1] - 2019-11-19
|
## [1.5.1] - 2019-11-19
|
||||||
- Fix bug where `Bool.CAS` and `Bool.Toggle` do work correctly together
|
- Fix bug where `Bool.CAS` and `Bool.Toggle` do work correctly together
|
||||||
causing `CAS` to fail even though the old value matches.
|
causing `CAS` to fail even though the old value matches.
|
||||||
|
|
||||||
|
[1.5.1]: https://github.com/uber-go/atomic/compare/v1.5.0...v1.5.1
|
||||||
|
|
||||||
## [1.5.0] - 2019-10-29
|
## [1.5.0] - 2019-10-29
|
||||||
### Changed
|
### Changed
|
||||||
- With Go modules, only the `go.uber.org/atomic` import path is supported now.
|
- With Go modules, only the `go.uber.org/atomic` import path is supported now.
|
||||||
If you need to use the old import path, please add a `replace` directive to
|
If you need to use the old import path, please add a `replace` directive to
|
||||||
your `go.mod`.
|
your `go.mod`.
|
||||||
|
|
||||||
|
[1.5.0]: https://github.com/uber-go/atomic/compare/v1.4.0...v1.5.0
|
||||||
|
|
||||||
## [1.4.0] - 2019-05-01
|
## [1.4.0] - 2019-05-01
|
||||||
### Added
|
### Added
|
||||||
- Add `atomic.Error` type for atomic operations on `error` values.
|
- Add `atomic.Error` type for atomic operations on `error` values.
|
||||||
|
|
||||||
|
[1.4.0]: https://github.com/uber-go/atomic/compare/v1.3.2...v1.4.0
|
||||||
|
|
||||||
## [1.3.2] - 2018-05-02
|
## [1.3.2] - 2018-05-02
|
||||||
### Added
|
### Added
|
||||||
- Add `atomic.Duration` type for atomic operations on `time.Duration` values.
|
- Add `atomic.Duration` type for atomic operations on `time.Duration` values.
|
||||||
|
|
||||||
|
[1.3.2]: https://github.com/uber-go/atomic/compare/v1.3.1...v1.3.2
|
||||||
|
|
||||||
## [1.3.1] - 2017-11-14
|
## [1.3.1] - 2017-11-14
|
||||||
### Fixed
|
### Fixed
|
||||||
- Revert optimization for `atomic.String.Store("")` which caused data races.
|
- Revert optimization for `atomic.String.Store("")` which caused data races.
|
||||||
|
|
||||||
|
[1.3.1]: https://github.com/uber-go/atomic/compare/v1.3.0...v1.3.1
|
||||||
|
|
||||||
## [1.3.0] - 2017-11-13
|
## [1.3.0] - 2017-11-13
|
||||||
### Added
|
### Added
|
||||||
- Add `atomic.Bool.CAS` for compare-and-swap semantics on bools.
|
- Add `atomic.Bool.CAS` for compare-and-swap semantics on bools.
|
||||||
@ -48,10 +76,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
### Changed
|
### Changed
|
||||||
- Optimize `atomic.String.Store("")` by avoiding an allocation.
|
- Optimize `atomic.String.Store("")` by avoiding an allocation.
|
||||||
|
|
||||||
|
[1.3.0]: https://github.com/uber-go/atomic/compare/v1.2.0...v1.3.0
|
||||||
|
|
||||||
## [1.2.0] - 2017-04-12
|
## [1.2.0] - 2017-04-12
|
||||||
### Added
|
### Added
|
||||||
- Shadow `atomic.Value` from `sync/atomic`.
|
- Shadow `atomic.Value` from `sync/atomic`.
|
||||||
|
|
||||||
|
[1.2.0]: https://github.com/uber-go/atomic/compare/v1.1.0...v1.2.0
|
||||||
|
|
||||||
## [1.1.0] - 2017-03-10
|
## [1.1.0] - 2017-03-10
|
||||||
### Added
|
### Added
|
||||||
- Add atomic `Float64` type.
|
- Add atomic `Float64` type.
|
||||||
@ -59,18 +91,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
### Changed
|
### Changed
|
||||||
- Support new `go.uber.org/atomic` import path.
|
- Support new `go.uber.org/atomic` import path.
|
||||||
|
|
||||||
|
[1.1.0]: https://github.com/uber-go/atomic/compare/v1.0.0...v1.1.0
|
||||||
|
|
||||||
## [1.0.0] - 2016-07-18
|
## [1.0.0] - 2016-07-18
|
||||||
|
|
||||||
- Initial release.
|
- Initial release.
|
||||||
|
|
||||||
[1.7.0]: https://github.com/uber-go/atomic/compare/v1.6.0...v1.7.0
|
|
||||||
[1.6.0]: https://github.com/uber-go/atomic/compare/v1.5.1...v1.6.0
|
|
||||||
[1.5.1]: https://github.com/uber-go/atomic/compare/v1.5.0...v1.5.1
|
|
||||||
[1.5.0]: https://github.com/uber-go/atomic/compare/v1.4.0...v1.5.0
|
|
||||||
[1.4.0]: https://github.com/uber-go/atomic/compare/v1.3.2...v1.4.0
|
|
||||||
[1.3.2]: https://github.com/uber-go/atomic/compare/v1.3.1...v1.3.2
|
|
||||||
[1.3.1]: https://github.com/uber-go/atomic/compare/v1.3.0...v1.3.1
|
|
||||||
[1.3.0]: https://github.com/uber-go/atomic/compare/v1.2.0...v1.3.0
|
|
||||||
[1.2.0]: https://github.com/uber-go/atomic/compare/v1.1.0...v1.2.0
|
|
||||||
[1.1.0]: https://github.com/uber-go/atomic/compare/v1.0.0...v1.1.0
|
|
||||||
[1.0.0]: https://github.com/uber-go/atomic/releases/tag/v1.0.0
|
[1.0.0]: https://github.com/uber-go/atomic/releases/tag/v1.0.0
|
||||||
|
1
vendor/go.uber.org/atomic/Makefile
generated
vendored
1
vendor/go.uber.org/atomic/Makefile
generated
vendored
@ -69,6 +69,7 @@ generate: $(GEN_ATOMICINT) $(GEN_ATOMICWRAPPER)
|
|||||||
generatenodirty:
|
generatenodirty:
|
||||||
@[ -z "$$(git status --porcelain)" ] || ( \
|
@[ -z "$$(git status --porcelain)" ] || ( \
|
||||||
echo "Working tree is dirty. Commit your changes first."; \
|
echo "Working tree is dirty. Commit your changes first."; \
|
||||||
|
git status; \
|
||||||
exit 1 )
|
exit 1 )
|
||||||
@make generate
|
@make generate
|
||||||
@status=$$(git status --porcelain); \
|
@status=$$(git status --porcelain); \
|
||||||
|
4
vendor/go.uber.org/atomic/README.md
generated
vendored
4
vendor/go.uber.org/atomic/README.md
generated
vendored
@ -55,8 +55,8 @@ Released under the [MIT License](LICENSE.txt).
|
|||||||
|
|
||||||
[doc-img]: https://godoc.org/github.com/uber-go/atomic?status.svg
|
[doc-img]: https://godoc.org/github.com/uber-go/atomic?status.svg
|
||||||
[doc]: https://godoc.org/go.uber.org/atomic
|
[doc]: https://godoc.org/go.uber.org/atomic
|
||||||
[ci-img]: https://travis-ci.com/uber-go/atomic.svg?branch=master
|
[ci-img]: https://github.com/uber-go/atomic/actions/workflows/go.yml/badge.svg
|
||||||
[ci]: https://travis-ci.com/uber-go/atomic
|
[ci]: https://github.com/uber-go/atomic/actions/workflows/go.yml
|
||||||
[cov-img]: https://codecov.io/gh/uber-go/atomic/branch/master/graph/badge.svg
|
[cov-img]: https://codecov.io/gh/uber-go/atomic/branch/master/graph/badge.svg
|
||||||
[cov]: https://codecov.io/gh/uber-go/atomic
|
[cov]: https://codecov.io/gh/uber-go/atomic
|
||||||
[reportcard-img]: https://goreportcard.com/badge/go.uber.org/atomic
|
[reportcard-img]: https://goreportcard.com/badge/go.uber.org/atomic
|
||||||
|
20
vendor/go.uber.org/atomic/bool.go
generated
vendored
20
vendor/go.uber.org/atomic/bool.go
generated
vendored
@ -1,6 +1,6 @@
|
|||||||
// @generated Code generated by gen-atomicwrapper.
|
// @generated Code generated by gen-atomicwrapper.
|
||||||
|
|
||||||
// Copyright (c) 2020 Uber Technologies, Inc.
|
// Copyright (c) 2020-2021 Uber Technologies, Inc.
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@ -36,10 +36,10 @@ type Bool struct {
|
|||||||
var _zeroBool bool
|
var _zeroBool bool
|
||||||
|
|
||||||
// NewBool creates a new Bool.
|
// NewBool creates a new Bool.
|
||||||
func NewBool(v bool) *Bool {
|
func NewBool(val bool) *Bool {
|
||||||
x := &Bool{}
|
x := &Bool{}
|
||||||
if v != _zeroBool {
|
if val != _zeroBool {
|
||||||
x.Store(v)
|
x.Store(val)
|
||||||
}
|
}
|
||||||
return x
|
return x
|
||||||
}
|
}
|
||||||
@ -50,19 +50,19 @@ func (x *Bool) Load() bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Store atomically stores the passed bool.
|
// Store atomically stores the passed bool.
|
||||||
func (x *Bool) Store(v bool) {
|
func (x *Bool) Store(val bool) {
|
||||||
x.v.Store(boolToInt(v))
|
x.v.Store(boolToInt(val))
|
||||||
}
|
}
|
||||||
|
|
||||||
// CAS is an atomic compare-and-swap for bool values.
|
// CAS is an atomic compare-and-swap for bool values.
|
||||||
func (x *Bool) CAS(o, n bool) bool {
|
func (x *Bool) CAS(old, new bool) (swapped bool) {
|
||||||
return x.v.CAS(boolToInt(o), boolToInt(n))
|
return x.v.CAS(boolToInt(old), boolToInt(new))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Swap atomically stores the given bool and returns the old
|
// Swap atomically stores the given bool and returns the old
|
||||||
// value.
|
// value.
|
||||||
func (x *Bool) Swap(o bool) bool {
|
func (x *Bool) Swap(val bool) (old bool) {
|
||||||
return truthy(x.v.Swap(boolToInt(o)))
|
return truthy(x.v.Swap(boolToInt(val)))
|
||||||
}
|
}
|
||||||
|
|
||||||
// MarshalJSON encodes the wrapped bool into JSON.
|
// MarshalJSON encodes the wrapped bool into JSON.
|
||||||
|
2
vendor/go.uber.org/atomic/bool_ext.go
generated
vendored
2
vendor/go.uber.org/atomic/bool_ext.go
generated
vendored
@ -38,7 +38,7 @@ func boolToInt(b bool) uint32 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Toggle atomically negates the Boolean and returns the previous value.
|
// Toggle atomically negates the Boolean and returns the previous value.
|
||||||
func (b *Bool) Toggle() bool {
|
func (b *Bool) Toggle() (old bool) {
|
||||||
for {
|
for {
|
||||||
old := b.Load()
|
old := b.Load()
|
||||||
if b.CAS(old, !old) {
|
if b.CAS(old, !old) {
|
||||||
|
20
vendor/go.uber.org/atomic/duration.go
generated
vendored
20
vendor/go.uber.org/atomic/duration.go
generated
vendored
@ -1,6 +1,6 @@
|
|||||||
// @generated Code generated by gen-atomicwrapper.
|
// @generated Code generated by gen-atomicwrapper.
|
||||||
|
|
||||||
// Copyright (c) 2020 Uber Technologies, Inc.
|
// Copyright (c) 2020-2021 Uber Technologies, Inc.
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@ -37,10 +37,10 @@ type Duration struct {
|
|||||||
var _zeroDuration time.Duration
|
var _zeroDuration time.Duration
|
||||||
|
|
||||||
// NewDuration creates a new Duration.
|
// NewDuration creates a new Duration.
|
||||||
func NewDuration(v time.Duration) *Duration {
|
func NewDuration(val time.Duration) *Duration {
|
||||||
x := &Duration{}
|
x := &Duration{}
|
||||||
if v != _zeroDuration {
|
if val != _zeroDuration {
|
||||||
x.Store(v)
|
x.Store(val)
|
||||||
}
|
}
|
||||||
return x
|
return x
|
||||||
}
|
}
|
||||||
@ -51,19 +51,19 @@ func (x *Duration) Load() time.Duration {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Store atomically stores the passed time.Duration.
|
// Store atomically stores the passed time.Duration.
|
||||||
func (x *Duration) Store(v time.Duration) {
|
func (x *Duration) Store(val time.Duration) {
|
||||||
x.v.Store(int64(v))
|
x.v.Store(int64(val))
|
||||||
}
|
}
|
||||||
|
|
||||||
// CAS is an atomic compare-and-swap for time.Duration values.
|
// CAS is an atomic compare-and-swap for time.Duration values.
|
||||||
func (x *Duration) CAS(o, n time.Duration) bool {
|
func (x *Duration) CAS(old, new time.Duration) (swapped bool) {
|
||||||
return x.v.CAS(int64(o), int64(n))
|
return x.v.CAS(int64(old), int64(new))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Swap atomically stores the given time.Duration and returns the old
|
// Swap atomically stores the given time.Duration and returns the old
|
||||||
// value.
|
// value.
|
||||||
func (x *Duration) Swap(o time.Duration) time.Duration {
|
func (x *Duration) Swap(val time.Duration) (old time.Duration) {
|
||||||
return time.Duration(x.v.Swap(int64(o)))
|
return time.Duration(x.v.Swap(int64(val)))
|
||||||
}
|
}
|
||||||
|
|
||||||
// MarshalJSON encodes the wrapped time.Duration into JSON.
|
// MarshalJSON encodes the wrapped time.Duration into JSON.
|
||||||
|
8
vendor/go.uber.org/atomic/duration_ext.go
generated
vendored
8
vendor/go.uber.org/atomic/duration_ext.go
generated
vendored
@ -25,13 +25,13 @@ import "time"
|
|||||||
//go:generate bin/gen-atomicwrapper -name=Duration -type=time.Duration -wrapped=Int64 -pack=int64 -unpack=time.Duration -cas -swap -json -imports time -file=duration.go
|
//go:generate bin/gen-atomicwrapper -name=Duration -type=time.Duration -wrapped=Int64 -pack=int64 -unpack=time.Duration -cas -swap -json -imports time -file=duration.go
|
||||||
|
|
||||||
// Add atomically adds to the wrapped time.Duration and returns the new value.
|
// Add atomically adds to the wrapped time.Duration and returns the new value.
|
||||||
func (d *Duration) Add(n time.Duration) time.Duration {
|
func (d *Duration) Add(delta time.Duration) time.Duration {
|
||||||
return time.Duration(d.v.Add(int64(n)))
|
return time.Duration(d.v.Add(int64(delta)))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sub atomically subtracts from the wrapped time.Duration and returns the new value.
|
// Sub atomically subtracts from the wrapped time.Duration and returns the new value.
|
||||||
func (d *Duration) Sub(n time.Duration) time.Duration {
|
func (d *Duration) Sub(delta time.Duration) time.Duration {
|
||||||
return time.Duration(d.v.Sub(int64(n)))
|
return time.Duration(d.v.Sub(int64(delta)))
|
||||||
}
|
}
|
||||||
|
|
||||||
// String encodes the wrapped value as a string.
|
// String encodes the wrapped value as a string.
|
||||||
|
12
vendor/go.uber.org/atomic/error.go
generated
vendored
12
vendor/go.uber.org/atomic/error.go
generated
vendored
@ -1,6 +1,6 @@
|
|||||||
// @generated Code generated by gen-atomicwrapper.
|
// @generated Code generated by gen-atomicwrapper.
|
||||||
|
|
||||||
// Copyright (c) 2020 Uber Technologies, Inc.
|
// Copyright (c) 2020-2021 Uber Technologies, Inc.
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@ -32,10 +32,10 @@ type Error struct {
|
|||||||
var _zeroError error
|
var _zeroError error
|
||||||
|
|
||||||
// NewError creates a new Error.
|
// NewError creates a new Error.
|
||||||
func NewError(v error) *Error {
|
func NewError(val error) *Error {
|
||||||
x := &Error{}
|
x := &Error{}
|
||||||
if v != _zeroError {
|
if val != _zeroError {
|
||||||
x.Store(v)
|
x.Store(val)
|
||||||
}
|
}
|
||||||
return x
|
return x
|
||||||
}
|
}
|
||||||
@ -46,6 +46,6 @@ func (x *Error) Load() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Store atomically stores the passed error.
|
// Store atomically stores the passed error.
|
||||||
func (x *Error) Store(v error) {
|
func (x *Error) Store(val error) {
|
||||||
x.v.Store(packError(v))
|
x.v.Store(packError(val))
|
||||||
}
|
}
|
||||||
|
19
vendor/go.uber.org/atomic/float64.go
generated
vendored
19
vendor/go.uber.org/atomic/float64.go
generated
vendored
@ -1,6 +1,6 @@
|
|||||||
// @generated Code generated by gen-atomicwrapper.
|
// @generated Code generated by gen-atomicwrapper.
|
||||||
|
|
||||||
// Copyright (c) 2020 Uber Technologies, Inc.
|
// Copyright (c) 2020-2021 Uber Technologies, Inc.
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@ -37,10 +37,10 @@ type Float64 struct {
|
|||||||
var _zeroFloat64 float64
|
var _zeroFloat64 float64
|
||||||
|
|
||||||
// NewFloat64 creates a new Float64.
|
// NewFloat64 creates a new Float64.
|
||||||
func NewFloat64(v float64) *Float64 {
|
func NewFloat64(val float64) *Float64 {
|
||||||
x := &Float64{}
|
x := &Float64{}
|
||||||
if v != _zeroFloat64 {
|
if val != _zeroFloat64 {
|
||||||
x.Store(v)
|
x.Store(val)
|
||||||
}
|
}
|
||||||
return x
|
return x
|
||||||
}
|
}
|
||||||
@ -51,13 +51,14 @@ func (x *Float64) Load() float64 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Store atomically stores the passed float64.
|
// Store atomically stores the passed float64.
|
||||||
func (x *Float64) Store(v float64) {
|
func (x *Float64) Store(val float64) {
|
||||||
x.v.Store(math.Float64bits(v))
|
x.v.Store(math.Float64bits(val))
|
||||||
}
|
}
|
||||||
|
|
||||||
// CAS is an atomic compare-and-swap for float64 values.
|
// Swap atomically stores the given float64 and returns the old
|
||||||
func (x *Float64) CAS(o, n float64) bool {
|
// value.
|
||||||
return x.v.CAS(math.Float64bits(o), math.Float64bits(n))
|
func (x *Float64) Swap(val float64) (old float64) {
|
||||||
|
return math.Float64frombits(x.v.Swap(math.Float64bits(val)))
|
||||||
}
|
}
|
||||||
|
|
||||||
// MarshalJSON encodes the wrapped float64 into JSON.
|
// MarshalJSON encodes the wrapped float64 into JSON.
|
||||||
|
34
vendor/go.uber.org/atomic/float64_ext.go
generated
vendored
34
vendor/go.uber.org/atomic/float64_ext.go
generated
vendored
@ -20,15 +20,18 @@
|
|||||||
|
|
||||||
package atomic
|
package atomic
|
||||||
|
|
||||||
import "strconv"
|
import (
|
||||||
|
"math"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
//go:generate bin/gen-atomicwrapper -name=Float64 -type=float64 -wrapped=Uint64 -pack=math.Float64bits -unpack=math.Float64frombits -cas -json -imports math -file=float64.go
|
//go:generate bin/gen-atomicwrapper -name=Float64 -type=float64 -wrapped=Uint64 -pack=math.Float64bits -unpack=math.Float64frombits -swap -json -imports math -file=float64.go
|
||||||
|
|
||||||
// Add atomically adds to the wrapped float64 and returns the new value.
|
// Add atomically adds to the wrapped float64 and returns the new value.
|
||||||
func (f *Float64) Add(s float64) float64 {
|
func (f *Float64) Add(delta float64) float64 {
|
||||||
for {
|
for {
|
||||||
old := f.Load()
|
old := f.Load()
|
||||||
new := old + s
|
new := old + delta
|
||||||
if f.CAS(old, new) {
|
if f.CAS(old, new) {
|
||||||
return new
|
return new
|
||||||
}
|
}
|
||||||
@ -36,8 +39,27 @@ func (f *Float64) Add(s float64) float64 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Sub atomically subtracts from the wrapped float64 and returns the new value.
|
// Sub atomically subtracts from the wrapped float64 and returns the new value.
|
||||||
func (f *Float64) Sub(s float64) float64 {
|
func (f *Float64) Sub(delta float64) float64 {
|
||||||
return f.Add(-s)
|
return f.Add(-delta)
|
||||||
|
}
|
||||||
|
|
||||||
|
// CAS is an atomic compare-and-swap for float64 values.
|
||||||
|
//
|
||||||
|
// Note: CAS handles NaN incorrectly. NaN != NaN using Go's inbuilt operators
|
||||||
|
// but CAS allows a stored NaN to compare equal to a passed in NaN.
|
||||||
|
// This avoids typical CAS loops from blocking forever, e.g.,
|
||||||
|
//
|
||||||
|
// for {
|
||||||
|
// old := atom.Load()
|
||||||
|
// new = f(old)
|
||||||
|
// if atom.CAS(old, new) {
|
||||||
|
// break
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// If CAS did not match NaN to match, then the above would loop forever.
|
||||||
|
func (f *Float64) CAS(old, new float64) (swapped bool) {
|
||||||
|
return f.v.CAS(math.Float64bits(old), math.Float64bits(new))
|
||||||
}
|
}
|
||||||
|
|
||||||
// String encodes the wrapped value as a string.
|
// String encodes the wrapped value as a string.
|
||||||
|
1
vendor/go.uber.org/atomic/gen.go
generated
vendored
1
vendor/go.uber.org/atomic/gen.go
generated
vendored
@ -24,3 +24,4 @@ package atomic
|
|||||||
//go:generate bin/gen-atomicint -name=Int64 -wrapped=int64 -file=int64.go
|
//go:generate bin/gen-atomicint -name=Int64 -wrapped=int64 -file=int64.go
|
||||||
//go:generate bin/gen-atomicint -name=Uint32 -wrapped=uint32 -unsigned -file=uint32.go
|
//go:generate bin/gen-atomicint -name=Uint32 -wrapped=uint32 -unsigned -file=uint32.go
|
||||||
//go:generate bin/gen-atomicint -name=Uint64 -wrapped=uint64 -unsigned -file=uint64.go
|
//go:generate bin/gen-atomicint -name=Uint64 -wrapped=uint64 -unsigned -file=uint64.go
|
||||||
|
//go:generate bin/gen-atomicint -name=Uintptr -wrapped=uintptr -unsigned -file=uintptr.go
|
||||||
|
1
vendor/go.uber.org/atomic/go.sum
generated
vendored
1
vendor/go.uber.org/atomic/go.sum
generated
vendored
@ -1,4 +1,3 @@
|
|||||||
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
|
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
24
vendor/go.uber.org/atomic/int32.go
generated
vendored
24
vendor/go.uber.org/atomic/int32.go
generated
vendored
@ -1,6 +1,6 @@
|
|||||||
// @generated Code generated by gen-atomicint.
|
// @generated Code generated by gen-atomicint.
|
||||||
|
|
||||||
// Copyright (c) 2020 Uber Technologies, Inc.
|
// Copyright (c) 2020-2021 Uber Technologies, Inc.
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@ -36,8 +36,8 @@ type Int32 struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewInt32 creates a new Int32.
|
// NewInt32 creates a new Int32.
|
||||||
func NewInt32(i int32) *Int32 {
|
func NewInt32(val int32) *Int32 {
|
||||||
return &Int32{v: i}
|
return &Int32{v: val}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load atomically loads the wrapped value.
|
// Load atomically loads the wrapped value.
|
||||||
@ -46,13 +46,13 @@ func (i *Int32) Load() int32 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Add atomically adds to the wrapped int32 and returns the new value.
|
// Add atomically adds to the wrapped int32 and returns the new value.
|
||||||
func (i *Int32) Add(n int32) int32 {
|
func (i *Int32) Add(delta int32) int32 {
|
||||||
return atomic.AddInt32(&i.v, n)
|
return atomic.AddInt32(&i.v, delta)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sub atomically subtracts from the wrapped int32 and returns the new value.
|
// Sub atomically subtracts from the wrapped int32 and returns the new value.
|
||||||
func (i *Int32) Sub(n int32) int32 {
|
func (i *Int32) Sub(delta int32) int32 {
|
||||||
return atomic.AddInt32(&i.v, -n)
|
return atomic.AddInt32(&i.v, -delta)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Inc atomically increments the wrapped int32 and returns the new value.
|
// Inc atomically increments the wrapped int32 and returns the new value.
|
||||||
@ -66,18 +66,18 @@ func (i *Int32) Dec() int32 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CAS is an atomic compare-and-swap.
|
// CAS is an atomic compare-and-swap.
|
||||||
func (i *Int32) CAS(old, new int32) bool {
|
func (i *Int32) CAS(old, new int32) (swapped bool) {
|
||||||
return atomic.CompareAndSwapInt32(&i.v, old, new)
|
return atomic.CompareAndSwapInt32(&i.v, old, new)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store atomically stores the passed value.
|
// Store atomically stores the passed value.
|
||||||
func (i *Int32) Store(n int32) {
|
func (i *Int32) Store(val int32) {
|
||||||
atomic.StoreInt32(&i.v, n)
|
atomic.StoreInt32(&i.v, val)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Swap atomically swaps the wrapped int32 and returns the old value.
|
// Swap atomically swaps the wrapped int32 and returns the old value.
|
||||||
func (i *Int32) Swap(n int32) int32 {
|
func (i *Int32) Swap(val int32) (old int32) {
|
||||||
return atomic.SwapInt32(&i.v, n)
|
return atomic.SwapInt32(&i.v, val)
|
||||||
}
|
}
|
||||||
|
|
||||||
// MarshalJSON encodes the wrapped int32 into JSON.
|
// MarshalJSON encodes the wrapped int32 into JSON.
|
||||||
|
24
vendor/go.uber.org/atomic/int64.go
generated
vendored
24
vendor/go.uber.org/atomic/int64.go
generated
vendored
@ -1,6 +1,6 @@
|
|||||||
// @generated Code generated by gen-atomicint.
|
// @generated Code generated by gen-atomicint.
|
||||||
|
|
||||||
// Copyright (c) 2020 Uber Technologies, Inc.
|
// Copyright (c) 2020-2021 Uber Technologies, Inc.
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@ -36,8 +36,8 @@ type Int64 struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewInt64 creates a new Int64.
|
// NewInt64 creates a new Int64.
|
||||||
func NewInt64(i int64) *Int64 {
|
func NewInt64(val int64) *Int64 {
|
||||||
return &Int64{v: i}
|
return &Int64{v: val}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load atomically loads the wrapped value.
|
// Load atomically loads the wrapped value.
|
||||||
@ -46,13 +46,13 @@ func (i *Int64) Load() int64 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Add atomically adds to the wrapped int64 and returns the new value.
|
// Add atomically adds to the wrapped int64 and returns the new value.
|
||||||
func (i *Int64) Add(n int64) int64 {
|
func (i *Int64) Add(delta int64) int64 {
|
||||||
return atomic.AddInt64(&i.v, n)
|
return atomic.AddInt64(&i.v, delta)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sub atomically subtracts from the wrapped int64 and returns the new value.
|
// Sub atomically subtracts from the wrapped int64 and returns the new value.
|
||||||
func (i *Int64) Sub(n int64) int64 {
|
func (i *Int64) Sub(delta int64) int64 {
|
||||||
return atomic.AddInt64(&i.v, -n)
|
return atomic.AddInt64(&i.v, -delta)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Inc atomically increments the wrapped int64 and returns the new value.
|
// Inc atomically increments the wrapped int64 and returns the new value.
|
||||||
@ -66,18 +66,18 @@ func (i *Int64) Dec() int64 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CAS is an atomic compare-and-swap.
|
// CAS is an atomic compare-and-swap.
|
||||||
func (i *Int64) CAS(old, new int64) bool {
|
func (i *Int64) CAS(old, new int64) (swapped bool) {
|
||||||
return atomic.CompareAndSwapInt64(&i.v, old, new)
|
return atomic.CompareAndSwapInt64(&i.v, old, new)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store atomically stores the passed value.
|
// Store atomically stores the passed value.
|
||||||
func (i *Int64) Store(n int64) {
|
func (i *Int64) Store(val int64) {
|
||||||
atomic.StoreInt64(&i.v, n)
|
atomic.StoreInt64(&i.v, val)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Swap atomically swaps the wrapped int64 and returns the old value.
|
// Swap atomically swaps the wrapped int64 and returns the old value.
|
||||||
func (i *Int64) Swap(n int64) int64 {
|
func (i *Int64) Swap(val int64) (old int64) {
|
||||||
return atomic.SwapInt64(&i.v, n)
|
return atomic.SwapInt64(&i.v, val)
|
||||||
}
|
}
|
||||||
|
|
||||||
// MarshalJSON encodes the wrapped int64 into JSON.
|
// MarshalJSON encodes the wrapped int64 into JSON.
|
||||||
|
12
vendor/go.uber.org/atomic/string.go
generated
vendored
12
vendor/go.uber.org/atomic/string.go
generated
vendored
@ -1,6 +1,6 @@
|
|||||||
// @generated Code generated by gen-atomicwrapper.
|
// @generated Code generated by gen-atomicwrapper.
|
||||||
|
|
||||||
// Copyright (c) 2020 Uber Technologies, Inc.
|
// Copyright (c) 2020-2021 Uber Technologies, Inc.
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@ -32,10 +32,10 @@ type String struct {
|
|||||||
var _zeroString string
|
var _zeroString string
|
||||||
|
|
||||||
// NewString creates a new String.
|
// NewString creates a new String.
|
||||||
func NewString(v string) *String {
|
func NewString(val string) *String {
|
||||||
x := &String{}
|
x := &String{}
|
||||||
if v != _zeroString {
|
if val != _zeroString {
|
||||||
x.Store(v)
|
x.Store(val)
|
||||||
}
|
}
|
||||||
return x
|
return x
|
||||||
}
|
}
|
||||||
@ -49,6 +49,6 @@ func (x *String) Load() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Store atomically stores the passed string.
|
// Store atomically stores the passed string.
|
||||||
func (x *String) Store(v string) {
|
func (x *String) Store(val string) {
|
||||||
x.v.Store(v)
|
x.v.Store(val)
|
||||||
}
|
}
|
||||||
|
2
vendor/go.uber.org/atomic/string_ext.go
generated
vendored
2
vendor/go.uber.org/atomic/string_ext.go
generated
vendored
@ -21,6 +21,8 @@
|
|||||||
package atomic
|
package atomic
|
||||||
|
|
||||||
//go:generate bin/gen-atomicwrapper -name=String -type=string -wrapped=Value -file=string.go
|
//go:generate bin/gen-atomicwrapper -name=String -type=string -wrapped=Value -file=string.go
|
||||||
|
// Note: No Swap as String wraps Value, which wraps the stdlib sync/atomic.Value which
|
||||||
|
// only supports Swap as of go1.17: https://github.com/golang/go/issues/39351
|
||||||
|
|
||||||
// String returns the wrapped value.
|
// String returns the wrapped value.
|
||||||
func (s *String) String() string {
|
func (s *String) String() string {
|
||||||
|
55
vendor/go.uber.org/atomic/time.go
generated
vendored
Normal file
55
vendor/go.uber.org/atomic/time.go
generated
vendored
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
// @generated Code generated by gen-atomicwrapper.
|
||||||
|
|
||||||
|
// Copyright (c) 2020-2021 Uber Technologies, Inc.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
package atomic
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Time is an atomic type-safe wrapper for time.Time values.
|
||||||
|
type Time struct {
|
||||||
|
_ nocmp // disallow non-atomic comparison
|
||||||
|
|
||||||
|
v Value
|
||||||
|
}
|
||||||
|
|
||||||
|
var _zeroTime time.Time
|
||||||
|
|
||||||
|
// NewTime creates a new Time.
|
||||||
|
func NewTime(val time.Time) *Time {
|
||||||
|
x := &Time{}
|
||||||
|
if val != _zeroTime {
|
||||||
|
x.Store(val)
|
||||||
|
}
|
||||||
|
return x
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load atomically loads the wrapped time.Time.
|
||||||
|
func (x *Time) Load() time.Time {
|
||||||
|
return unpackTime(x.v.Load())
|
||||||
|
}
|
||||||
|
|
||||||
|
// Store atomically stores the passed time.Time.
|
||||||
|
func (x *Time) Store(val time.Time) {
|
||||||
|
x.v.Store(packTime(val))
|
||||||
|
}
|
36
vendor/go.uber.org/atomic/time_ext.go
generated
vendored
Normal file
36
vendor/go.uber.org/atomic/time_ext.go
generated
vendored
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
// Copyright (c) 2021 Uber Technologies, Inc.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
package atomic
|
||||||
|
|
||||||
|
import "time"
|
||||||
|
|
||||||
|
//go:generate bin/gen-atomicwrapper -name=Time -type=time.Time -wrapped=Value -pack=packTime -unpack=unpackTime -imports time -file=time.go
|
||||||
|
|
||||||
|
func packTime(t time.Time) interface{} {
|
||||||
|
return t
|
||||||
|
}
|
||||||
|
|
||||||
|
func unpackTime(v interface{}) time.Time {
|
||||||
|
if t, ok := v.(time.Time); ok {
|
||||||
|
return t
|
||||||
|
}
|
||||||
|
return time.Time{}
|
||||||
|
}
|
24
vendor/go.uber.org/atomic/uint32.go
generated
vendored
24
vendor/go.uber.org/atomic/uint32.go
generated
vendored
@ -1,6 +1,6 @@
|
|||||||
// @generated Code generated by gen-atomicint.
|
// @generated Code generated by gen-atomicint.
|
||||||
|
|
||||||
// Copyright (c) 2020 Uber Technologies, Inc.
|
// Copyright (c) 2020-2021 Uber Technologies, Inc.
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@ -36,8 +36,8 @@ type Uint32 struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewUint32 creates a new Uint32.
|
// NewUint32 creates a new Uint32.
|
||||||
func NewUint32(i uint32) *Uint32 {
|
func NewUint32(val uint32) *Uint32 {
|
||||||
return &Uint32{v: i}
|
return &Uint32{v: val}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load atomically loads the wrapped value.
|
// Load atomically loads the wrapped value.
|
||||||
@ -46,13 +46,13 @@ func (i *Uint32) Load() uint32 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Add atomically adds to the wrapped uint32 and returns the new value.
|
// Add atomically adds to the wrapped uint32 and returns the new value.
|
||||||
func (i *Uint32) Add(n uint32) uint32 {
|
func (i *Uint32) Add(delta uint32) uint32 {
|
||||||
return atomic.AddUint32(&i.v, n)
|
return atomic.AddUint32(&i.v, delta)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sub atomically subtracts from the wrapped uint32 and returns the new value.
|
// Sub atomically subtracts from the wrapped uint32 and returns the new value.
|
||||||
func (i *Uint32) Sub(n uint32) uint32 {
|
func (i *Uint32) Sub(delta uint32) uint32 {
|
||||||
return atomic.AddUint32(&i.v, ^(n - 1))
|
return atomic.AddUint32(&i.v, ^(delta - 1))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Inc atomically increments the wrapped uint32 and returns the new value.
|
// Inc atomically increments the wrapped uint32 and returns the new value.
|
||||||
@ -66,18 +66,18 @@ func (i *Uint32) Dec() uint32 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CAS is an atomic compare-and-swap.
|
// CAS is an atomic compare-and-swap.
|
||||||
func (i *Uint32) CAS(old, new uint32) bool {
|
func (i *Uint32) CAS(old, new uint32) (swapped bool) {
|
||||||
return atomic.CompareAndSwapUint32(&i.v, old, new)
|
return atomic.CompareAndSwapUint32(&i.v, old, new)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store atomically stores the passed value.
|
// Store atomically stores the passed value.
|
||||||
func (i *Uint32) Store(n uint32) {
|
func (i *Uint32) Store(val uint32) {
|
||||||
atomic.StoreUint32(&i.v, n)
|
atomic.StoreUint32(&i.v, val)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Swap atomically swaps the wrapped uint32 and returns the old value.
|
// Swap atomically swaps the wrapped uint32 and returns the old value.
|
||||||
func (i *Uint32) Swap(n uint32) uint32 {
|
func (i *Uint32) Swap(val uint32) (old uint32) {
|
||||||
return atomic.SwapUint32(&i.v, n)
|
return atomic.SwapUint32(&i.v, val)
|
||||||
}
|
}
|
||||||
|
|
||||||
// MarshalJSON encodes the wrapped uint32 into JSON.
|
// MarshalJSON encodes the wrapped uint32 into JSON.
|
||||||
|
24
vendor/go.uber.org/atomic/uint64.go
generated
vendored
24
vendor/go.uber.org/atomic/uint64.go
generated
vendored
@ -1,6 +1,6 @@
|
|||||||
// @generated Code generated by gen-atomicint.
|
// @generated Code generated by gen-atomicint.
|
||||||
|
|
||||||
// Copyright (c) 2020 Uber Technologies, Inc.
|
// Copyright (c) 2020-2021 Uber Technologies, Inc.
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@ -36,8 +36,8 @@ type Uint64 struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewUint64 creates a new Uint64.
|
// NewUint64 creates a new Uint64.
|
||||||
func NewUint64(i uint64) *Uint64 {
|
func NewUint64(val uint64) *Uint64 {
|
||||||
return &Uint64{v: i}
|
return &Uint64{v: val}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load atomically loads the wrapped value.
|
// Load atomically loads the wrapped value.
|
||||||
@ -46,13 +46,13 @@ func (i *Uint64) Load() uint64 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Add atomically adds to the wrapped uint64 and returns the new value.
|
// Add atomically adds to the wrapped uint64 and returns the new value.
|
||||||
func (i *Uint64) Add(n uint64) uint64 {
|
func (i *Uint64) Add(delta uint64) uint64 {
|
||||||
return atomic.AddUint64(&i.v, n)
|
return atomic.AddUint64(&i.v, delta)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sub atomically subtracts from the wrapped uint64 and returns the new value.
|
// Sub atomically subtracts from the wrapped uint64 and returns the new value.
|
||||||
func (i *Uint64) Sub(n uint64) uint64 {
|
func (i *Uint64) Sub(delta uint64) uint64 {
|
||||||
return atomic.AddUint64(&i.v, ^(n - 1))
|
return atomic.AddUint64(&i.v, ^(delta - 1))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Inc atomically increments the wrapped uint64 and returns the new value.
|
// Inc atomically increments the wrapped uint64 and returns the new value.
|
||||||
@ -66,18 +66,18 @@ func (i *Uint64) Dec() uint64 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CAS is an atomic compare-and-swap.
|
// CAS is an atomic compare-and-swap.
|
||||||
func (i *Uint64) CAS(old, new uint64) bool {
|
func (i *Uint64) CAS(old, new uint64) (swapped bool) {
|
||||||
return atomic.CompareAndSwapUint64(&i.v, old, new)
|
return atomic.CompareAndSwapUint64(&i.v, old, new)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store atomically stores the passed value.
|
// Store atomically stores the passed value.
|
||||||
func (i *Uint64) Store(n uint64) {
|
func (i *Uint64) Store(val uint64) {
|
||||||
atomic.StoreUint64(&i.v, n)
|
atomic.StoreUint64(&i.v, val)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Swap atomically swaps the wrapped uint64 and returns the old value.
|
// Swap atomically swaps the wrapped uint64 and returns the old value.
|
||||||
func (i *Uint64) Swap(n uint64) uint64 {
|
func (i *Uint64) Swap(val uint64) (old uint64) {
|
||||||
return atomic.SwapUint64(&i.v, n)
|
return atomic.SwapUint64(&i.v, val)
|
||||||
}
|
}
|
||||||
|
|
||||||
// MarshalJSON encodes the wrapped uint64 into JSON.
|
// MarshalJSON encodes the wrapped uint64 into JSON.
|
||||||
|
102
vendor/go.uber.org/atomic/uintptr.go
generated
vendored
Normal file
102
vendor/go.uber.org/atomic/uintptr.go
generated
vendored
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
// @generated Code generated by gen-atomicint.
|
||||||
|
|
||||||
|
// Copyright (c) 2020-2021 Uber Technologies, Inc.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
package atomic
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"strconv"
|
||||||
|
"sync/atomic"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Uintptr is an atomic wrapper around uintptr.
|
||||||
|
type Uintptr struct {
|
||||||
|
_ nocmp // disallow non-atomic comparison
|
||||||
|
|
||||||
|
v uintptr
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewUintptr creates a new Uintptr.
|
||||||
|
func NewUintptr(val uintptr) *Uintptr {
|
||||||
|
return &Uintptr{v: val}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load atomically loads the wrapped value.
|
||||||
|
func (i *Uintptr) Load() uintptr {
|
||||||
|
return atomic.LoadUintptr(&i.v)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add atomically adds to the wrapped uintptr and returns the new value.
|
||||||
|
func (i *Uintptr) Add(delta uintptr) uintptr {
|
||||||
|
return atomic.AddUintptr(&i.v, delta)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sub atomically subtracts from the wrapped uintptr and returns the new value.
|
||||||
|
func (i *Uintptr) Sub(delta uintptr) uintptr {
|
||||||
|
return atomic.AddUintptr(&i.v, ^(delta - 1))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Inc atomically increments the wrapped uintptr and returns the new value.
|
||||||
|
func (i *Uintptr) Inc() uintptr {
|
||||||
|
return i.Add(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dec atomically decrements the wrapped uintptr and returns the new value.
|
||||||
|
func (i *Uintptr) Dec() uintptr {
|
||||||
|
return i.Sub(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// CAS is an atomic compare-and-swap.
|
||||||
|
func (i *Uintptr) CAS(old, new uintptr) (swapped bool) {
|
||||||
|
return atomic.CompareAndSwapUintptr(&i.v, old, new)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Store atomically stores the passed value.
|
||||||
|
func (i *Uintptr) Store(val uintptr) {
|
||||||
|
atomic.StoreUintptr(&i.v, val)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Swap atomically swaps the wrapped uintptr and returns the old value.
|
||||||
|
func (i *Uintptr) Swap(val uintptr) (old uintptr) {
|
||||||
|
return atomic.SwapUintptr(&i.v, val)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarshalJSON encodes the wrapped uintptr into JSON.
|
||||||
|
func (i *Uintptr) MarshalJSON() ([]byte, error) {
|
||||||
|
return json.Marshal(i.Load())
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalJSON decodes JSON into the wrapped uintptr.
|
||||||
|
func (i *Uintptr) UnmarshalJSON(b []byte) error {
|
||||||
|
var v uintptr
|
||||||
|
if err := json.Unmarshal(b, &v); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
i.Store(v)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// String encodes the wrapped value as a string.
|
||||||
|
func (i *Uintptr) String() string {
|
||||||
|
v := i.Load()
|
||||||
|
return strconv.FormatUint(uint64(v), 10)
|
||||||
|
}
|
58
vendor/go.uber.org/atomic/unsafe_pointer.go
generated
vendored
Normal file
58
vendor/go.uber.org/atomic/unsafe_pointer.go
generated
vendored
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
// Copyright (c) 2021 Uber Technologies, Inc.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
package atomic
|
||||||
|
|
||||||
|
import (
|
||||||
|
"sync/atomic"
|
||||||
|
"unsafe"
|
||||||
|
)
|
||||||
|
|
||||||
|
// UnsafePointer is an atomic wrapper around unsafe.Pointer.
|
||||||
|
type UnsafePointer struct {
|
||||||
|
_ nocmp // disallow non-atomic comparison
|
||||||
|
|
||||||
|
v unsafe.Pointer
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewUnsafePointer creates a new UnsafePointer.
|
||||||
|
func NewUnsafePointer(val unsafe.Pointer) *UnsafePointer {
|
||||||
|
return &UnsafePointer{v: val}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load atomically loads the wrapped value.
|
||||||
|
func (p *UnsafePointer) Load() unsafe.Pointer {
|
||||||
|
return atomic.LoadPointer(&p.v)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Store atomically stores the passed value.
|
||||||
|
func (p *UnsafePointer) Store(val unsafe.Pointer) {
|
||||||
|
atomic.StorePointer(&p.v, val)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Swap atomically swaps the wrapped unsafe.Pointer and returns the old value.
|
||||||
|
func (p *UnsafePointer) Swap(val unsafe.Pointer) (old unsafe.Pointer) {
|
||||||
|
return atomic.SwapPointer(&p.v, val)
|
||||||
|
}
|
||||||
|
|
||||||
|
// CAS is an atomic compare-and-swap.
|
||||||
|
func (p *UnsafePointer) CAS(old, new unsafe.Pointer) (swapped bool) {
|
||||||
|
return atomic.CompareAndSwapPointer(&p.v, old, new)
|
||||||
|
}
|
18
vendor/google.golang.org/grpc/reflection/README.md
generated
vendored
Normal file
18
vendor/google.golang.org/grpc/reflection/README.md
generated
vendored
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# Reflection
|
||||||
|
|
||||||
|
Package reflection implements server reflection service.
|
||||||
|
|
||||||
|
The service implemented is defined in: https://github.com/grpc/grpc/blob/master/src/proto/grpc/reflection/v1alpha/reflection.proto.
|
||||||
|
|
||||||
|
To register server reflection on a gRPC server:
|
||||||
|
```go
|
||||||
|
import "google.golang.org/grpc/reflection"
|
||||||
|
|
||||||
|
s := grpc.NewServer()
|
||||||
|
pb.RegisterYourOwnServer(s, &server{})
|
||||||
|
|
||||||
|
// Register reflection service on gRPC server.
|
||||||
|
reflection.Register(s)
|
||||||
|
|
||||||
|
s.Serve(lis)
|
||||||
|
```
|
953
vendor/google.golang.org/grpc/reflection/grpc_reflection_v1alpha/reflection.pb.go
generated
vendored
Normal file
953
vendor/google.golang.org/grpc/reflection/grpc_reflection_v1alpha/reflection.pb.go
generated
vendored
Normal file
@ -0,0 +1,953 @@
|
|||||||
|
// Copyright 2016 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.
|
||||||
|
|
||||||
|
// Service exported by server reflection
|
||||||
|
|
||||||
|
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||||
|
// versions:
|
||||||
|
// protoc-gen-go v1.25.0
|
||||||
|
// protoc v3.14.0
|
||||||
|
// source: reflection/grpc_reflection_v1alpha/reflection.proto
|
||||||
|
|
||||||
|
package grpc_reflection_v1alpha
|
||||||
|
|
||||||
|
import (
|
||||||
|
proto "github.com/golang/protobuf/proto"
|
||||||
|
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
||||||
|
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
||||||
|
reflect "reflect"
|
||||||
|
sync "sync"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// Verify that this generated code is sufficiently up-to-date.
|
||||||
|
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
|
||||||
|
// Verify that runtime/protoimpl is sufficiently up-to-date.
|
||||||
|
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
|
||||||
|
)
|
||||||
|
|
||||||
|
// This is a compile-time assertion that a sufficiently up-to-date version
|
||||||
|
// of the legacy proto package is being used.
|
||||||
|
const _ = proto.ProtoPackageIsVersion4
|
||||||
|
|
||||||
|
// The message sent by the client when calling ServerReflectionInfo method.
|
||||||
|
type ServerReflectionRequest struct {
|
||||||
|
state protoimpl.MessageState
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
|
Host string `protobuf:"bytes,1,opt,name=host,proto3" json:"host,omitempty"`
|
||||||
|
// To use reflection service, the client should set one of the following
|
||||||
|
// fields in message_request. The server distinguishes requests by their
|
||||||
|
// defined field and then handles them using corresponding methods.
|
||||||
|
//
|
||||||
|
// Types that are assignable to MessageRequest:
|
||||||
|
// *ServerReflectionRequest_FileByFilename
|
||||||
|
// *ServerReflectionRequest_FileContainingSymbol
|
||||||
|
// *ServerReflectionRequest_FileContainingExtension
|
||||||
|
// *ServerReflectionRequest_AllExtensionNumbersOfType
|
||||||
|
// *ServerReflectionRequest_ListServices
|
||||||
|
MessageRequest isServerReflectionRequest_MessageRequest `protobuf_oneof:"message_request"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ServerReflectionRequest) Reset() {
|
||||||
|
*x = ServerReflectionRequest{}
|
||||||
|
if protoimpl.UnsafeEnabled {
|
||||||
|
mi := &file_reflection_grpc_reflection_v1alpha_reflection_proto_msgTypes[0]
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ServerReflectionRequest) String() string {
|
||||||
|
return protoimpl.X.MessageStringOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*ServerReflectionRequest) ProtoMessage() {}
|
||||||
|
|
||||||
|
func (x *ServerReflectionRequest) ProtoReflect() protoreflect.Message {
|
||||||
|
mi := &file_reflection_grpc_reflection_v1alpha_reflection_proto_msgTypes[0]
|
||||||
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
return ms
|
||||||
|
}
|
||||||
|
return mi.MessageOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deprecated: Use ServerReflectionRequest.ProtoReflect.Descriptor instead.
|
||||||
|
func (*ServerReflectionRequest) Descriptor() ([]byte, []int) {
|
||||||
|
return file_reflection_grpc_reflection_v1alpha_reflection_proto_rawDescGZIP(), []int{0}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ServerReflectionRequest) GetHost() string {
|
||||||
|
if x != nil {
|
||||||
|
return x.Host
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *ServerReflectionRequest) GetMessageRequest() isServerReflectionRequest_MessageRequest {
|
||||||
|
if m != nil {
|
||||||
|
return m.MessageRequest
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ServerReflectionRequest) GetFileByFilename() string {
|
||||||
|
if x, ok := x.GetMessageRequest().(*ServerReflectionRequest_FileByFilename); ok {
|
||||||
|
return x.FileByFilename
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ServerReflectionRequest) GetFileContainingSymbol() string {
|
||||||
|
if x, ok := x.GetMessageRequest().(*ServerReflectionRequest_FileContainingSymbol); ok {
|
||||||
|
return x.FileContainingSymbol
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ServerReflectionRequest) GetFileContainingExtension() *ExtensionRequest {
|
||||||
|
if x, ok := x.GetMessageRequest().(*ServerReflectionRequest_FileContainingExtension); ok {
|
||||||
|
return x.FileContainingExtension
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ServerReflectionRequest) GetAllExtensionNumbersOfType() string {
|
||||||
|
if x, ok := x.GetMessageRequest().(*ServerReflectionRequest_AllExtensionNumbersOfType); ok {
|
||||||
|
return x.AllExtensionNumbersOfType
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ServerReflectionRequest) GetListServices() string {
|
||||||
|
if x, ok := x.GetMessageRequest().(*ServerReflectionRequest_ListServices); ok {
|
||||||
|
return x.ListServices
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
type isServerReflectionRequest_MessageRequest interface {
|
||||||
|
isServerReflectionRequest_MessageRequest()
|
||||||
|
}
|
||||||
|
|
||||||
|
type ServerReflectionRequest_FileByFilename struct {
|
||||||
|
// Find a proto file by the file name.
|
||||||
|
FileByFilename string `protobuf:"bytes,3,opt,name=file_by_filename,json=fileByFilename,proto3,oneof"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ServerReflectionRequest_FileContainingSymbol struct {
|
||||||
|
// Find the proto file that declares the given fully-qualified symbol name.
|
||||||
|
// This field should be a fully-qualified symbol name
|
||||||
|
// (e.g. <package>.<service>[.<method>] or <package>.<type>).
|
||||||
|
FileContainingSymbol string `protobuf:"bytes,4,opt,name=file_containing_symbol,json=fileContainingSymbol,proto3,oneof"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ServerReflectionRequest_FileContainingExtension struct {
|
||||||
|
// Find the proto file which defines an extension extending the given
|
||||||
|
// message type with the given field number.
|
||||||
|
FileContainingExtension *ExtensionRequest `protobuf:"bytes,5,opt,name=file_containing_extension,json=fileContainingExtension,proto3,oneof"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ServerReflectionRequest_AllExtensionNumbersOfType struct {
|
||||||
|
// Finds the tag numbers used by all known extensions of extendee_type, and
|
||||||
|
// appends them to ExtensionNumberResponse in an undefined order.
|
||||||
|
// Its corresponding method is best-effort: it's not guaranteed that the
|
||||||
|
// reflection service will implement this method, and it's not guaranteed
|
||||||
|
// that this method will provide all extensions. Returns
|
||||||
|
// StatusCode::UNIMPLEMENTED if it's not implemented.
|
||||||
|
// This field should be a fully-qualified type name. The format is
|
||||||
|
// <package>.<type>
|
||||||
|
AllExtensionNumbersOfType string `protobuf:"bytes,6,opt,name=all_extension_numbers_of_type,json=allExtensionNumbersOfType,proto3,oneof"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ServerReflectionRequest_ListServices struct {
|
||||||
|
// List the full names of registered services. The content will not be
|
||||||
|
// checked.
|
||||||
|
ListServices string `protobuf:"bytes,7,opt,name=list_services,json=listServices,proto3,oneof"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*ServerReflectionRequest_FileByFilename) isServerReflectionRequest_MessageRequest() {}
|
||||||
|
|
||||||
|
func (*ServerReflectionRequest_FileContainingSymbol) isServerReflectionRequest_MessageRequest() {}
|
||||||
|
|
||||||
|
func (*ServerReflectionRequest_FileContainingExtension) isServerReflectionRequest_MessageRequest() {}
|
||||||
|
|
||||||
|
func (*ServerReflectionRequest_AllExtensionNumbersOfType) isServerReflectionRequest_MessageRequest() {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*ServerReflectionRequest_ListServices) isServerReflectionRequest_MessageRequest() {}
|
||||||
|
|
||||||
|
// The type name and extension number sent by the client when requesting
|
||||||
|
// file_containing_extension.
|
||||||
|
type ExtensionRequest struct {
|
||||||
|
state protoimpl.MessageState
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
|
// Fully-qualified type name. The format should be <package>.<type>
|
||||||
|
ContainingType string `protobuf:"bytes,1,opt,name=containing_type,json=containingType,proto3" json:"containing_type,omitempty"`
|
||||||
|
ExtensionNumber int32 `protobuf:"varint,2,opt,name=extension_number,json=extensionNumber,proto3" json:"extension_number,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ExtensionRequest) Reset() {
|
||||||
|
*x = ExtensionRequest{}
|
||||||
|
if protoimpl.UnsafeEnabled {
|
||||||
|
mi := &file_reflection_grpc_reflection_v1alpha_reflection_proto_msgTypes[1]
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ExtensionRequest) String() string {
|
||||||
|
return protoimpl.X.MessageStringOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*ExtensionRequest) ProtoMessage() {}
|
||||||
|
|
||||||
|
func (x *ExtensionRequest) ProtoReflect() protoreflect.Message {
|
||||||
|
mi := &file_reflection_grpc_reflection_v1alpha_reflection_proto_msgTypes[1]
|
||||||
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
return ms
|
||||||
|
}
|
||||||
|
return mi.MessageOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deprecated: Use ExtensionRequest.ProtoReflect.Descriptor instead.
|
||||||
|
func (*ExtensionRequest) Descriptor() ([]byte, []int) {
|
||||||
|
return file_reflection_grpc_reflection_v1alpha_reflection_proto_rawDescGZIP(), []int{1}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ExtensionRequest) GetContainingType() string {
|
||||||
|
if x != nil {
|
||||||
|
return x.ContainingType
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ExtensionRequest) GetExtensionNumber() int32 {
|
||||||
|
if x != nil {
|
||||||
|
return x.ExtensionNumber
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// The message sent by the server to answer ServerReflectionInfo method.
|
||||||
|
type ServerReflectionResponse struct {
|
||||||
|
state protoimpl.MessageState
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
|
ValidHost string `protobuf:"bytes,1,opt,name=valid_host,json=validHost,proto3" json:"valid_host,omitempty"`
|
||||||
|
OriginalRequest *ServerReflectionRequest `protobuf:"bytes,2,opt,name=original_request,json=originalRequest,proto3" json:"original_request,omitempty"`
|
||||||
|
// The server sets one of the following fields according to the
|
||||||
|
// message_request in the request.
|
||||||
|
//
|
||||||
|
// Types that are assignable to MessageResponse:
|
||||||
|
// *ServerReflectionResponse_FileDescriptorResponse
|
||||||
|
// *ServerReflectionResponse_AllExtensionNumbersResponse
|
||||||
|
// *ServerReflectionResponse_ListServicesResponse
|
||||||
|
// *ServerReflectionResponse_ErrorResponse
|
||||||
|
MessageResponse isServerReflectionResponse_MessageResponse `protobuf_oneof:"message_response"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ServerReflectionResponse) Reset() {
|
||||||
|
*x = ServerReflectionResponse{}
|
||||||
|
if protoimpl.UnsafeEnabled {
|
||||||
|
mi := &file_reflection_grpc_reflection_v1alpha_reflection_proto_msgTypes[2]
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ServerReflectionResponse) String() string {
|
||||||
|
return protoimpl.X.MessageStringOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*ServerReflectionResponse) ProtoMessage() {}
|
||||||
|
|
||||||
|
func (x *ServerReflectionResponse) ProtoReflect() protoreflect.Message {
|
||||||
|
mi := &file_reflection_grpc_reflection_v1alpha_reflection_proto_msgTypes[2]
|
||||||
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
return ms
|
||||||
|
}
|
||||||
|
return mi.MessageOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deprecated: Use ServerReflectionResponse.ProtoReflect.Descriptor instead.
|
||||||
|
func (*ServerReflectionResponse) Descriptor() ([]byte, []int) {
|
||||||
|
return file_reflection_grpc_reflection_v1alpha_reflection_proto_rawDescGZIP(), []int{2}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ServerReflectionResponse) GetValidHost() string {
|
||||||
|
if x != nil {
|
||||||
|
return x.ValidHost
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ServerReflectionResponse) GetOriginalRequest() *ServerReflectionRequest {
|
||||||
|
if x != nil {
|
||||||
|
return x.OriginalRequest
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *ServerReflectionResponse) GetMessageResponse() isServerReflectionResponse_MessageResponse {
|
||||||
|
if m != nil {
|
||||||
|
return m.MessageResponse
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ServerReflectionResponse) GetFileDescriptorResponse() *FileDescriptorResponse {
|
||||||
|
if x, ok := x.GetMessageResponse().(*ServerReflectionResponse_FileDescriptorResponse); ok {
|
||||||
|
return x.FileDescriptorResponse
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ServerReflectionResponse) GetAllExtensionNumbersResponse() *ExtensionNumberResponse {
|
||||||
|
if x, ok := x.GetMessageResponse().(*ServerReflectionResponse_AllExtensionNumbersResponse); ok {
|
||||||
|
return x.AllExtensionNumbersResponse
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ServerReflectionResponse) GetListServicesResponse() *ListServiceResponse {
|
||||||
|
if x, ok := x.GetMessageResponse().(*ServerReflectionResponse_ListServicesResponse); ok {
|
||||||
|
return x.ListServicesResponse
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ServerReflectionResponse) GetErrorResponse() *ErrorResponse {
|
||||||
|
if x, ok := x.GetMessageResponse().(*ServerReflectionResponse_ErrorResponse); ok {
|
||||||
|
return x.ErrorResponse
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type isServerReflectionResponse_MessageResponse interface {
|
||||||
|
isServerReflectionResponse_MessageResponse()
|
||||||
|
}
|
||||||
|
|
||||||
|
type ServerReflectionResponse_FileDescriptorResponse struct {
|
||||||
|
// This message is used to answer file_by_filename, file_containing_symbol,
|
||||||
|
// file_containing_extension requests with transitive dependencies.
|
||||||
|
// As the repeated label is not allowed in oneof fields, we use a
|
||||||
|
// FileDescriptorResponse message to encapsulate the repeated fields.
|
||||||
|
// The reflection service is allowed to avoid sending FileDescriptorProtos
|
||||||
|
// that were previously sent in response to earlier requests in the stream.
|
||||||
|
FileDescriptorResponse *FileDescriptorResponse `protobuf:"bytes,4,opt,name=file_descriptor_response,json=fileDescriptorResponse,proto3,oneof"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ServerReflectionResponse_AllExtensionNumbersResponse struct {
|
||||||
|
// This message is used to answer all_extension_numbers_of_type requests.
|
||||||
|
AllExtensionNumbersResponse *ExtensionNumberResponse `protobuf:"bytes,5,opt,name=all_extension_numbers_response,json=allExtensionNumbersResponse,proto3,oneof"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ServerReflectionResponse_ListServicesResponse struct {
|
||||||
|
// This message is used to answer list_services requests.
|
||||||
|
ListServicesResponse *ListServiceResponse `protobuf:"bytes,6,opt,name=list_services_response,json=listServicesResponse,proto3,oneof"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ServerReflectionResponse_ErrorResponse struct {
|
||||||
|
// This message is used when an error occurs.
|
||||||
|
ErrorResponse *ErrorResponse `protobuf:"bytes,7,opt,name=error_response,json=errorResponse,proto3,oneof"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*ServerReflectionResponse_FileDescriptorResponse) isServerReflectionResponse_MessageResponse() {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*ServerReflectionResponse_AllExtensionNumbersResponse) isServerReflectionResponse_MessageResponse() {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*ServerReflectionResponse_ListServicesResponse) isServerReflectionResponse_MessageResponse() {}
|
||||||
|
|
||||||
|
func (*ServerReflectionResponse_ErrorResponse) isServerReflectionResponse_MessageResponse() {}
|
||||||
|
|
||||||
|
// Serialized FileDescriptorProto messages sent by the server answering
|
||||||
|
// a file_by_filename, file_containing_symbol, or file_containing_extension
|
||||||
|
// request.
|
||||||
|
type FileDescriptorResponse struct {
|
||||||
|
state protoimpl.MessageState
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
|
// Serialized FileDescriptorProto messages. We avoid taking a dependency on
|
||||||
|
// descriptor.proto, which uses proto2 only features, by making them opaque
|
||||||
|
// bytes instead.
|
||||||
|
FileDescriptorProto [][]byte `protobuf:"bytes,1,rep,name=file_descriptor_proto,json=fileDescriptorProto,proto3" json:"file_descriptor_proto,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *FileDescriptorResponse) Reset() {
|
||||||
|
*x = FileDescriptorResponse{}
|
||||||
|
if protoimpl.UnsafeEnabled {
|
||||||
|
mi := &file_reflection_grpc_reflection_v1alpha_reflection_proto_msgTypes[3]
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *FileDescriptorResponse) String() string {
|
||||||
|
return protoimpl.X.MessageStringOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*FileDescriptorResponse) ProtoMessage() {}
|
||||||
|
|
||||||
|
func (x *FileDescriptorResponse) ProtoReflect() protoreflect.Message {
|
||||||
|
mi := &file_reflection_grpc_reflection_v1alpha_reflection_proto_msgTypes[3]
|
||||||
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
return ms
|
||||||
|
}
|
||||||
|
return mi.MessageOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deprecated: Use FileDescriptorResponse.ProtoReflect.Descriptor instead.
|
||||||
|
func (*FileDescriptorResponse) Descriptor() ([]byte, []int) {
|
||||||
|
return file_reflection_grpc_reflection_v1alpha_reflection_proto_rawDescGZIP(), []int{3}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *FileDescriptorResponse) GetFileDescriptorProto() [][]byte {
|
||||||
|
if x != nil {
|
||||||
|
return x.FileDescriptorProto
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// A list of extension numbers sent by the server answering
|
||||||
|
// all_extension_numbers_of_type request.
|
||||||
|
type ExtensionNumberResponse struct {
|
||||||
|
state protoimpl.MessageState
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
|
// Full name of the base type, including the package name. The format
|
||||||
|
// is <package>.<type>
|
||||||
|
BaseTypeName string `protobuf:"bytes,1,opt,name=base_type_name,json=baseTypeName,proto3" json:"base_type_name,omitempty"`
|
||||||
|
ExtensionNumber []int32 `protobuf:"varint,2,rep,packed,name=extension_number,json=extensionNumber,proto3" json:"extension_number,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ExtensionNumberResponse) Reset() {
|
||||||
|
*x = ExtensionNumberResponse{}
|
||||||
|
if protoimpl.UnsafeEnabled {
|
||||||
|
mi := &file_reflection_grpc_reflection_v1alpha_reflection_proto_msgTypes[4]
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ExtensionNumberResponse) String() string {
|
||||||
|
return protoimpl.X.MessageStringOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*ExtensionNumberResponse) ProtoMessage() {}
|
||||||
|
|
||||||
|
func (x *ExtensionNumberResponse) ProtoReflect() protoreflect.Message {
|
||||||
|
mi := &file_reflection_grpc_reflection_v1alpha_reflection_proto_msgTypes[4]
|
||||||
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
return ms
|
||||||
|
}
|
||||||
|
return mi.MessageOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deprecated: Use ExtensionNumberResponse.ProtoReflect.Descriptor instead.
|
||||||
|
func (*ExtensionNumberResponse) Descriptor() ([]byte, []int) {
|
||||||
|
return file_reflection_grpc_reflection_v1alpha_reflection_proto_rawDescGZIP(), []int{4}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ExtensionNumberResponse) GetBaseTypeName() string {
|
||||||
|
if x != nil {
|
||||||
|
return x.BaseTypeName
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ExtensionNumberResponse) GetExtensionNumber() []int32 {
|
||||||
|
if x != nil {
|
||||||
|
return x.ExtensionNumber
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// A list of ServiceResponse sent by the server answering list_services request.
|
||||||
|
type ListServiceResponse struct {
|
||||||
|
state protoimpl.MessageState
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
|
// The information of each service may be expanded in the future, so we use
|
||||||
|
// ServiceResponse message to encapsulate it.
|
||||||
|
Service []*ServiceResponse `protobuf:"bytes,1,rep,name=service,proto3" json:"service,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ListServiceResponse) Reset() {
|
||||||
|
*x = ListServiceResponse{}
|
||||||
|
if protoimpl.UnsafeEnabled {
|
||||||
|
mi := &file_reflection_grpc_reflection_v1alpha_reflection_proto_msgTypes[5]
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ListServiceResponse) String() string {
|
||||||
|
return protoimpl.X.MessageStringOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*ListServiceResponse) ProtoMessage() {}
|
||||||
|
|
||||||
|
func (x *ListServiceResponse) ProtoReflect() protoreflect.Message {
|
||||||
|
mi := &file_reflection_grpc_reflection_v1alpha_reflection_proto_msgTypes[5]
|
||||||
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
return ms
|
||||||
|
}
|
||||||
|
return mi.MessageOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deprecated: Use ListServiceResponse.ProtoReflect.Descriptor instead.
|
||||||
|
func (*ListServiceResponse) Descriptor() ([]byte, []int) {
|
||||||
|
return file_reflection_grpc_reflection_v1alpha_reflection_proto_rawDescGZIP(), []int{5}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ListServiceResponse) GetService() []*ServiceResponse {
|
||||||
|
if x != nil {
|
||||||
|
return x.Service
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// The information of a single service used by ListServiceResponse to answer
|
||||||
|
// list_services request.
|
||||||
|
type ServiceResponse struct {
|
||||||
|
state protoimpl.MessageState
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
|
// Full name of a registered service, including its package name. The format
|
||||||
|
// is <package>.<service>
|
||||||
|
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ServiceResponse) Reset() {
|
||||||
|
*x = ServiceResponse{}
|
||||||
|
if protoimpl.UnsafeEnabled {
|
||||||
|
mi := &file_reflection_grpc_reflection_v1alpha_reflection_proto_msgTypes[6]
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ServiceResponse) String() string {
|
||||||
|
return protoimpl.X.MessageStringOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*ServiceResponse) ProtoMessage() {}
|
||||||
|
|
||||||
|
func (x *ServiceResponse) ProtoReflect() protoreflect.Message {
|
||||||
|
mi := &file_reflection_grpc_reflection_v1alpha_reflection_proto_msgTypes[6]
|
||||||
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
return ms
|
||||||
|
}
|
||||||
|
return mi.MessageOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deprecated: Use ServiceResponse.ProtoReflect.Descriptor instead.
|
||||||
|
func (*ServiceResponse) Descriptor() ([]byte, []int) {
|
||||||
|
return file_reflection_grpc_reflection_v1alpha_reflection_proto_rawDescGZIP(), []int{6}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ServiceResponse) GetName() string {
|
||||||
|
if x != nil {
|
||||||
|
return x.Name
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
// The error code and error message sent by the server when an error occurs.
|
||||||
|
type ErrorResponse struct {
|
||||||
|
state protoimpl.MessageState
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
|
// This field uses the error codes defined in grpc::StatusCode.
|
||||||
|
ErrorCode int32 `protobuf:"varint,1,opt,name=error_code,json=errorCode,proto3" json:"error_code,omitempty"`
|
||||||
|
ErrorMessage string `protobuf:"bytes,2,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ErrorResponse) Reset() {
|
||||||
|
*x = ErrorResponse{}
|
||||||
|
if protoimpl.UnsafeEnabled {
|
||||||
|
mi := &file_reflection_grpc_reflection_v1alpha_reflection_proto_msgTypes[7]
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ErrorResponse) String() string {
|
||||||
|
return protoimpl.X.MessageStringOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*ErrorResponse) ProtoMessage() {}
|
||||||
|
|
||||||
|
func (x *ErrorResponse) ProtoReflect() protoreflect.Message {
|
||||||
|
mi := &file_reflection_grpc_reflection_v1alpha_reflection_proto_msgTypes[7]
|
||||||
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
return ms
|
||||||
|
}
|
||||||
|
return mi.MessageOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deprecated: Use ErrorResponse.ProtoReflect.Descriptor instead.
|
||||||
|
func (*ErrorResponse) Descriptor() ([]byte, []int) {
|
||||||
|
return file_reflection_grpc_reflection_v1alpha_reflection_proto_rawDescGZIP(), []int{7}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ErrorResponse) GetErrorCode() int32 {
|
||||||
|
if x != nil {
|
||||||
|
return x.ErrorCode
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *ErrorResponse) GetErrorMessage() string {
|
||||||
|
if x != nil {
|
||||||
|
return x.ErrorMessage
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
var File_reflection_grpc_reflection_v1alpha_reflection_proto protoreflect.FileDescriptor
|
||||||
|
|
||||||
|
var file_reflection_grpc_reflection_v1alpha_reflection_proto_rawDesc = []byte{
|
||||||
|
0x0a, 0x33, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x67, 0x72, 0x70,
|
||||||
|
0x63, 0x5f, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x31, 0x61,
|
||||||
|
0x6c, 0x70, 0x68, 0x61, 0x2f, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
|
||||||
|
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x17, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c,
|
||||||
|
0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x22, 0xf8,
|
||||||
|
0x02, 0x0a, 0x17, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74,
|
||||||
|
0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f,
|
||||||
|
0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x2a,
|
||||||
|
0x0a, 0x10, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x62, 0x79, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61,
|
||||||
|
0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0e, 0x66, 0x69, 0x6c, 0x65,
|
||||||
|
0x42, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x66, 0x69,
|
||||||
|
0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x79,
|
||||||
|
0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x14, 0x66, 0x69,
|
||||||
|
0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x53, 0x79, 0x6d, 0x62,
|
||||||
|
0x6f, 0x6c, 0x12, 0x67, 0x0a, 0x19, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61,
|
||||||
|
0x69, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18,
|
||||||
|
0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66,
|
||||||
|
0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e,
|
||||||
|
0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
|
||||||
|
0x48, 0x00, 0x52, 0x17, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69,
|
||||||
|
0x6e, 0x67, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x1d, 0x61,
|
||||||
|
0x6c, 0x6c, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d,
|
||||||
|
0x62, 0x65, 0x72, 0x73, 0x5f, 0x6f, 0x66, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01,
|
||||||
|
0x28, 0x09, 0x48, 0x00, 0x52, 0x19, 0x61, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
|
||||||
|
0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x4f, 0x66, 0x54, 0x79, 0x70, 0x65, 0x12,
|
||||||
|
0x25, 0x0a, 0x0d, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73,
|
||||||
|
0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0c, 0x6c, 0x69, 0x73, 0x74, 0x53, 0x65,
|
||||||
|
0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x42, 0x11, 0x0a, 0x0f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
|
||||||
|
0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x66, 0x0a, 0x10, 0x45, 0x78, 0x74,
|
||||||
|
0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a,
|
||||||
|
0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65,
|
||||||
|
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69,
|
||||||
|
0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
|
||||||
|
0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05,
|
||||||
|
0x52, 0x0f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65,
|
||||||
|
0x72, 0x22, 0xc7, 0x04, 0x0a, 0x18, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x66, 0x6c,
|
||||||
|
0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d,
|
||||||
|
0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01,
|
||||||
|
0x28, 0x09, 0x52, 0x09, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x5b, 0x0a,
|
||||||
|
0x10, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||||
|
0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72,
|
||||||
|
0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68,
|
||||||
|
0x61, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69,
|
||||||
|
0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0f, 0x6f, 0x72, 0x69, 0x67, 0x69,
|
||||||
|
0x6e, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6b, 0x0a, 0x18, 0x66, 0x69,
|
||||||
|
0x6c, 0x65, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x5f, 0x72, 0x65,
|
||||||
|
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67,
|
||||||
|
0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76,
|
||||||
|
0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72,
|
||||||
|
0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52,
|
||||||
|
0x16, 0x66, 0x69, 0x6c, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52,
|
||||||
|
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x1e, 0x61, 0x6c, 0x6c, 0x5f, 0x65,
|
||||||
|
0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73,
|
||||||
|
0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32,
|
||||||
|
0x30, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f,
|
||||||
|
0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73,
|
||||||
|
0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
|
||||||
|
0x65, 0x48, 0x00, 0x52, 0x1b, 0x61, 0x6c, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
|
||||||
|
0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
|
||||||
|
0x12, 0x64, 0x0a, 0x16, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
|
||||||
|
0x73, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b,
|
||||||
|
0x32, 0x2c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69,
|
||||||
|
0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53,
|
||||||
|
0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00,
|
||||||
|
0x52, 0x14, 0x6c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65,
|
||||||
|
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x0e, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f,
|
||||||
|
0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26,
|
||||||
|
0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
|
||||||
|
0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65,
|
||||||
|
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x52,
|
||||||
|
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x12, 0x0a, 0x10, 0x6d, 0x65, 0x73, 0x73, 0x61,
|
||||||
|
0x67, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4c, 0x0a, 0x16, 0x46,
|
||||||
|
0x69, 0x6c, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73,
|
||||||
|
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x64, 0x65,
|
||||||
|
0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x18, 0x01,
|
||||||
|
0x20, 0x03, 0x28, 0x0c, 0x52, 0x13, 0x66, 0x69, 0x6c, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69,
|
||||||
|
0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x6a, 0x0a, 0x17, 0x45, 0x78, 0x74,
|
||||||
|
0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70,
|
||||||
|
0x6f, 0x6e, 0x73, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x74, 0x79, 0x70,
|
||||||
|
0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x62, 0x61,
|
||||||
|
0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x65, 0x78,
|
||||||
|
0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02,
|
||||||
|
0x20, 0x03, 0x28, 0x05, 0x52, 0x0f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e,
|
||||||
|
0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x59, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72,
|
||||||
|
0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x07,
|
||||||
|
0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e,
|
||||||
|
0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
|
||||||
|
0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52,
|
||||||
|
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
|
||||||
|
0x22, 0x25, 0x0a, 0x0f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
|
||||||
|
0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
|
||||||
|
0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x53, 0x0a, 0x0d, 0x45, 0x72, 0x72, 0x6f, 0x72,
|
||||||
|
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f,
|
||||||
|
0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x65, 0x72,
|
||||||
|
0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72,
|
||||||
|
0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c,
|
||||||
|
0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x93, 0x01, 0x0a,
|
||||||
|
0x10, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f,
|
||||||
|
0x6e, 0x12, 0x7f, 0x0a, 0x14, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x66, 0x6c, 0x65,
|
||||||
|
0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x30, 0x2e, 0x67, 0x72, 0x70, 0x63,
|
||||||
|
0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c,
|
||||||
|
0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63,
|
||||||
|
0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x67, 0x72,
|
||||||
|
0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31,
|
||||||
|
0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x66, 0x6c,
|
||||||
|
0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01,
|
||||||
|
0x30, 0x01, 0x42, 0x3b, 0x5a, 0x39, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c,
|
||||||
|
0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x72, 0x65, 0x66,
|
||||||
|
0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x72, 0x65, 0x66,
|
||||||
|
0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x62,
|
||||||
|
0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
file_reflection_grpc_reflection_v1alpha_reflection_proto_rawDescOnce sync.Once
|
||||||
|
file_reflection_grpc_reflection_v1alpha_reflection_proto_rawDescData = file_reflection_grpc_reflection_v1alpha_reflection_proto_rawDesc
|
||||||
|
)
|
||||||
|
|
||||||
|
func file_reflection_grpc_reflection_v1alpha_reflection_proto_rawDescGZIP() []byte {
|
||||||
|
file_reflection_grpc_reflection_v1alpha_reflection_proto_rawDescOnce.Do(func() {
|
||||||
|
file_reflection_grpc_reflection_v1alpha_reflection_proto_rawDescData = protoimpl.X.CompressGZIP(file_reflection_grpc_reflection_v1alpha_reflection_proto_rawDescData)
|
||||||
|
})
|
||||||
|
return file_reflection_grpc_reflection_v1alpha_reflection_proto_rawDescData
|
||||||
|
}
|
||||||
|
|
||||||
|
var file_reflection_grpc_reflection_v1alpha_reflection_proto_msgTypes = make([]protoimpl.MessageInfo, 8)
|
||||||
|
var file_reflection_grpc_reflection_v1alpha_reflection_proto_goTypes = []interface{}{
|
||||||
|
(*ServerReflectionRequest)(nil), // 0: grpc.reflection.v1alpha.ServerReflectionRequest
|
||||||
|
(*ExtensionRequest)(nil), // 1: grpc.reflection.v1alpha.ExtensionRequest
|
||||||
|
(*ServerReflectionResponse)(nil), // 2: grpc.reflection.v1alpha.ServerReflectionResponse
|
||||||
|
(*FileDescriptorResponse)(nil), // 3: grpc.reflection.v1alpha.FileDescriptorResponse
|
||||||
|
(*ExtensionNumberResponse)(nil), // 4: grpc.reflection.v1alpha.ExtensionNumberResponse
|
||||||
|
(*ListServiceResponse)(nil), // 5: grpc.reflection.v1alpha.ListServiceResponse
|
||||||
|
(*ServiceResponse)(nil), // 6: grpc.reflection.v1alpha.ServiceResponse
|
||||||
|
(*ErrorResponse)(nil), // 7: grpc.reflection.v1alpha.ErrorResponse
|
||||||
|
}
|
||||||
|
var file_reflection_grpc_reflection_v1alpha_reflection_proto_depIdxs = []int32{
|
||||||
|
1, // 0: grpc.reflection.v1alpha.ServerReflectionRequest.file_containing_extension:type_name -> grpc.reflection.v1alpha.ExtensionRequest
|
||||||
|
0, // 1: grpc.reflection.v1alpha.ServerReflectionResponse.original_request:type_name -> grpc.reflection.v1alpha.ServerReflectionRequest
|
||||||
|
3, // 2: grpc.reflection.v1alpha.ServerReflectionResponse.file_descriptor_response:type_name -> grpc.reflection.v1alpha.FileDescriptorResponse
|
||||||
|
4, // 3: grpc.reflection.v1alpha.ServerReflectionResponse.all_extension_numbers_response:type_name -> grpc.reflection.v1alpha.ExtensionNumberResponse
|
||||||
|
5, // 4: grpc.reflection.v1alpha.ServerReflectionResponse.list_services_response:type_name -> grpc.reflection.v1alpha.ListServiceResponse
|
||||||
|
7, // 5: grpc.reflection.v1alpha.ServerReflectionResponse.error_response:type_name -> grpc.reflection.v1alpha.ErrorResponse
|
||||||
|
6, // 6: grpc.reflection.v1alpha.ListServiceResponse.service:type_name -> grpc.reflection.v1alpha.ServiceResponse
|
||||||
|
0, // 7: grpc.reflection.v1alpha.ServerReflection.ServerReflectionInfo:input_type -> grpc.reflection.v1alpha.ServerReflectionRequest
|
||||||
|
2, // 8: grpc.reflection.v1alpha.ServerReflection.ServerReflectionInfo:output_type -> grpc.reflection.v1alpha.ServerReflectionResponse
|
||||||
|
8, // [8:9] is the sub-list for method output_type
|
||||||
|
7, // [7:8] is the sub-list for method input_type
|
||||||
|
7, // [7:7] is the sub-list for extension type_name
|
||||||
|
7, // [7:7] is the sub-list for extension extendee
|
||||||
|
0, // [0:7] is the sub-list for field type_name
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() { file_reflection_grpc_reflection_v1alpha_reflection_proto_init() }
|
||||||
|
func file_reflection_grpc_reflection_v1alpha_reflection_proto_init() {
|
||||||
|
if File_reflection_grpc_reflection_v1alpha_reflection_proto != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if !protoimpl.UnsafeEnabled {
|
||||||
|
file_reflection_grpc_reflection_v1alpha_reflection_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
|
||||||
|
switch v := v.(*ServerReflectionRequest); i {
|
||||||
|
case 0:
|
||||||
|
return &v.state
|
||||||
|
case 1:
|
||||||
|
return &v.sizeCache
|
||||||
|
case 2:
|
||||||
|
return &v.unknownFields
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
file_reflection_grpc_reflection_v1alpha_reflection_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
|
||||||
|
switch v := v.(*ExtensionRequest); i {
|
||||||
|
case 0:
|
||||||
|
return &v.state
|
||||||
|
case 1:
|
||||||
|
return &v.sizeCache
|
||||||
|
case 2:
|
||||||
|
return &v.unknownFields
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
file_reflection_grpc_reflection_v1alpha_reflection_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
|
||||||
|
switch v := v.(*ServerReflectionResponse); i {
|
||||||
|
case 0:
|
||||||
|
return &v.state
|
||||||
|
case 1:
|
||||||
|
return &v.sizeCache
|
||||||
|
case 2:
|
||||||
|
return &v.unknownFields
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
file_reflection_grpc_reflection_v1alpha_reflection_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
|
||||||
|
switch v := v.(*FileDescriptorResponse); i {
|
||||||
|
case 0:
|
||||||
|
return &v.state
|
||||||
|
case 1:
|
||||||
|
return &v.sizeCache
|
||||||
|
case 2:
|
||||||
|
return &v.unknownFields
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
file_reflection_grpc_reflection_v1alpha_reflection_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
|
||||||
|
switch v := v.(*ExtensionNumberResponse); i {
|
||||||
|
case 0:
|
||||||
|
return &v.state
|
||||||
|
case 1:
|
||||||
|
return &v.sizeCache
|
||||||
|
case 2:
|
||||||
|
return &v.unknownFields
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
file_reflection_grpc_reflection_v1alpha_reflection_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
|
||||||
|
switch v := v.(*ListServiceResponse); i {
|
||||||
|
case 0:
|
||||||
|
return &v.state
|
||||||
|
case 1:
|
||||||
|
return &v.sizeCache
|
||||||
|
case 2:
|
||||||
|
return &v.unknownFields
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
file_reflection_grpc_reflection_v1alpha_reflection_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
|
||||||
|
switch v := v.(*ServiceResponse); i {
|
||||||
|
case 0:
|
||||||
|
return &v.state
|
||||||
|
case 1:
|
||||||
|
return &v.sizeCache
|
||||||
|
case 2:
|
||||||
|
return &v.unknownFields
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
file_reflection_grpc_reflection_v1alpha_reflection_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
|
||||||
|
switch v := v.(*ErrorResponse); i {
|
||||||
|
case 0:
|
||||||
|
return &v.state
|
||||||
|
case 1:
|
||||||
|
return &v.sizeCache
|
||||||
|
case 2:
|
||||||
|
return &v.unknownFields
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
file_reflection_grpc_reflection_v1alpha_reflection_proto_msgTypes[0].OneofWrappers = []interface{}{
|
||||||
|
(*ServerReflectionRequest_FileByFilename)(nil),
|
||||||
|
(*ServerReflectionRequest_FileContainingSymbol)(nil),
|
||||||
|
(*ServerReflectionRequest_FileContainingExtension)(nil),
|
||||||
|
(*ServerReflectionRequest_AllExtensionNumbersOfType)(nil),
|
||||||
|
(*ServerReflectionRequest_ListServices)(nil),
|
||||||
|
}
|
||||||
|
file_reflection_grpc_reflection_v1alpha_reflection_proto_msgTypes[2].OneofWrappers = []interface{}{
|
||||||
|
(*ServerReflectionResponse_FileDescriptorResponse)(nil),
|
||||||
|
(*ServerReflectionResponse_AllExtensionNumbersResponse)(nil),
|
||||||
|
(*ServerReflectionResponse_ListServicesResponse)(nil),
|
||||||
|
(*ServerReflectionResponse_ErrorResponse)(nil),
|
||||||
|
}
|
||||||
|
type x struct{}
|
||||||
|
out := protoimpl.TypeBuilder{
|
||||||
|
File: protoimpl.DescBuilder{
|
||||||
|
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||||
|
RawDescriptor: file_reflection_grpc_reflection_v1alpha_reflection_proto_rawDesc,
|
||||||
|
NumEnums: 0,
|
||||||
|
NumMessages: 8,
|
||||||
|
NumExtensions: 0,
|
||||||
|
NumServices: 1,
|
||||||
|
},
|
||||||
|
GoTypes: file_reflection_grpc_reflection_v1alpha_reflection_proto_goTypes,
|
||||||
|
DependencyIndexes: file_reflection_grpc_reflection_v1alpha_reflection_proto_depIdxs,
|
||||||
|
MessageInfos: file_reflection_grpc_reflection_v1alpha_reflection_proto_msgTypes,
|
||||||
|
}.Build()
|
||||||
|
File_reflection_grpc_reflection_v1alpha_reflection_proto = out.File
|
||||||
|
file_reflection_grpc_reflection_v1alpha_reflection_proto_rawDesc = nil
|
||||||
|
file_reflection_grpc_reflection_v1alpha_reflection_proto_goTypes = nil
|
||||||
|
file_reflection_grpc_reflection_v1alpha_reflection_proto_depIdxs = nil
|
||||||
|
}
|
138
vendor/google.golang.org/grpc/reflection/grpc_reflection_v1alpha/reflection.proto
generated
vendored
Normal file
138
vendor/google.golang.org/grpc/reflection/grpc_reflection_v1alpha/reflection.proto
generated
vendored
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
// Copyright 2016 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.
|
||||||
|
|
||||||
|
// Service exported by server reflection
|
||||||
|
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
option go_package = "google.golang.org/grpc/reflection/grpc_reflection_v1alpha";
|
||||||
|
|
||||||
|
package grpc.reflection.v1alpha;
|
||||||
|
|
||||||
|
service ServerReflection {
|
||||||
|
// The reflection service is structured as a bidirectional stream, ensuring
|
||||||
|
// all related requests go to a single server.
|
||||||
|
rpc ServerReflectionInfo(stream ServerReflectionRequest)
|
||||||
|
returns (stream ServerReflectionResponse);
|
||||||
|
}
|
||||||
|
|
||||||
|
// The message sent by the client when calling ServerReflectionInfo method.
|
||||||
|
message ServerReflectionRequest {
|
||||||
|
string host = 1;
|
||||||
|
// To use reflection service, the client should set one of the following
|
||||||
|
// fields in message_request. The server distinguishes requests by their
|
||||||
|
// defined field and then handles them using corresponding methods.
|
||||||
|
oneof message_request {
|
||||||
|
// Find a proto file by the file name.
|
||||||
|
string file_by_filename = 3;
|
||||||
|
|
||||||
|
// Find the proto file that declares the given fully-qualified symbol name.
|
||||||
|
// This field should be a fully-qualified symbol name
|
||||||
|
// (e.g. <package>.<service>[.<method>] or <package>.<type>).
|
||||||
|
string file_containing_symbol = 4;
|
||||||
|
|
||||||
|
// Find the proto file which defines an extension extending the given
|
||||||
|
// message type with the given field number.
|
||||||
|
ExtensionRequest file_containing_extension = 5;
|
||||||
|
|
||||||
|
// Finds the tag numbers used by all known extensions of extendee_type, and
|
||||||
|
// appends them to ExtensionNumberResponse in an undefined order.
|
||||||
|
// Its corresponding method is best-effort: it's not guaranteed that the
|
||||||
|
// reflection service will implement this method, and it's not guaranteed
|
||||||
|
// that this method will provide all extensions. Returns
|
||||||
|
// StatusCode::UNIMPLEMENTED if it's not implemented.
|
||||||
|
// This field should be a fully-qualified type name. The format is
|
||||||
|
// <package>.<type>
|
||||||
|
string all_extension_numbers_of_type = 6;
|
||||||
|
|
||||||
|
// List the full names of registered services. The content will not be
|
||||||
|
// checked.
|
||||||
|
string list_services = 7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// The type name and extension number sent by the client when requesting
|
||||||
|
// file_containing_extension.
|
||||||
|
message ExtensionRequest {
|
||||||
|
// Fully-qualified type name. The format should be <package>.<type>
|
||||||
|
string containing_type = 1;
|
||||||
|
int32 extension_number = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The message sent by the server to answer ServerReflectionInfo method.
|
||||||
|
message ServerReflectionResponse {
|
||||||
|
string valid_host = 1;
|
||||||
|
ServerReflectionRequest original_request = 2;
|
||||||
|
// The server sets one of the following fields according to the
|
||||||
|
// message_request in the request.
|
||||||
|
oneof message_response {
|
||||||
|
// This message is used to answer file_by_filename, file_containing_symbol,
|
||||||
|
// file_containing_extension requests with transitive dependencies.
|
||||||
|
// As the repeated label is not allowed in oneof fields, we use a
|
||||||
|
// FileDescriptorResponse message to encapsulate the repeated fields.
|
||||||
|
// The reflection service is allowed to avoid sending FileDescriptorProtos
|
||||||
|
// that were previously sent in response to earlier requests in the stream.
|
||||||
|
FileDescriptorResponse file_descriptor_response = 4;
|
||||||
|
|
||||||
|
// This message is used to answer all_extension_numbers_of_type requests.
|
||||||
|
ExtensionNumberResponse all_extension_numbers_response = 5;
|
||||||
|
|
||||||
|
// This message is used to answer list_services requests.
|
||||||
|
ListServiceResponse list_services_response = 6;
|
||||||
|
|
||||||
|
// This message is used when an error occurs.
|
||||||
|
ErrorResponse error_response = 7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Serialized FileDescriptorProto messages sent by the server answering
|
||||||
|
// a file_by_filename, file_containing_symbol, or file_containing_extension
|
||||||
|
// request.
|
||||||
|
message FileDescriptorResponse {
|
||||||
|
// Serialized FileDescriptorProto messages. We avoid taking a dependency on
|
||||||
|
// descriptor.proto, which uses proto2 only features, by making them opaque
|
||||||
|
// bytes instead.
|
||||||
|
repeated bytes file_descriptor_proto = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// A list of extension numbers sent by the server answering
|
||||||
|
// all_extension_numbers_of_type request.
|
||||||
|
message ExtensionNumberResponse {
|
||||||
|
// Full name of the base type, including the package name. The format
|
||||||
|
// is <package>.<type>
|
||||||
|
string base_type_name = 1;
|
||||||
|
repeated int32 extension_number = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// A list of ServiceResponse sent by the server answering list_services request.
|
||||||
|
message ListServiceResponse {
|
||||||
|
// The information of each service may be expanded in the future, so we use
|
||||||
|
// ServiceResponse message to encapsulate it.
|
||||||
|
repeated ServiceResponse service = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The information of a single service used by ListServiceResponse to answer
|
||||||
|
// list_services request.
|
||||||
|
message ServiceResponse {
|
||||||
|
// Full name of a registered service, including its package name. The format
|
||||||
|
// is <package>.<service>
|
||||||
|
string name = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The error code and error message sent by the server when an error occurs.
|
||||||
|
message ErrorResponse {
|
||||||
|
// This field uses the error codes defined in grpc::StatusCode.
|
||||||
|
int32 error_code = 1;
|
||||||
|
string error_message = 2;
|
||||||
|
}
|
139
vendor/google.golang.org/grpc/reflection/grpc_reflection_v1alpha/reflection_grpc.pb.go
generated
vendored
Normal file
139
vendor/google.golang.org/grpc/reflection/grpc_reflection_v1alpha/reflection_grpc.pb.go
generated
vendored
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
|
||||||
|
// versions:
|
||||||
|
// - protoc-gen-go-grpc v1.1.0
|
||||||
|
// - protoc v3.14.0
|
||||||
|
// source: reflection/grpc_reflection_v1alpha/reflection.proto
|
||||||
|
|
||||||
|
package grpc_reflection_v1alpha
|
||||||
|
|
||||||
|
import (
|
||||||
|
context "context"
|
||||||
|
grpc "google.golang.org/grpc"
|
||||||
|
codes "google.golang.org/grpc/codes"
|
||||||
|
status "google.golang.org/grpc/status"
|
||||||
|
)
|
||||||
|
|
||||||
|
// This is a compile-time assertion to ensure that this generated file
|
||||||
|
// is compatible with the grpc package it is being compiled against.
|
||||||
|
// Requires gRPC-Go v1.32.0 or later.
|
||||||
|
const _ = grpc.SupportPackageIsVersion7
|
||||||
|
|
||||||
|
// ServerReflectionClient is the client API for ServerReflection service.
|
||||||
|
//
|
||||||
|
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
|
||||||
|
type ServerReflectionClient interface {
|
||||||
|
// The reflection service is structured as a bidirectional stream, ensuring
|
||||||
|
// all related requests go to a single server.
|
||||||
|
ServerReflectionInfo(ctx context.Context, opts ...grpc.CallOption) (ServerReflection_ServerReflectionInfoClient, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
type serverReflectionClient struct {
|
||||||
|
cc grpc.ClientConnInterface
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewServerReflectionClient(cc grpc.ClientConnInterface) ServerReflectionClient {
|
||||||
|
return &serverReflectionClient{cc}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *serverReflectionClient) ServerReflectionInfo(ctx context.Context, opts ...grpc.CallOption) (ServerReflection_ServerReflectionInfoClient, error) {
|
||||||
|
stream, err := c.cc.NewStream(ctx, &ServerReflection_ServiceDesc.Streams[0], "/grpc.reflection.v1alpha.ServerReflection/ServerReflectionInfo", opts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
x := &serverReflectionServerReflectionInfoClient{stream}
|
||||||
|
return x, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type ServerReflection_ServerReflectionInfoClient interface {
|
||||||
|
Send(*ServerReflectionRequest) error
|
||||||
|
Recv() (*ServerReflectionResponse, error)
|
||||||
|
grpc.ClientStream
|
||||||
|
}
|
||||||
|
|
||||||
|
type serverReflectionServerReflectionInfoClient struct {
|
||||||
|
grpc.ClientStream
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *serverReflectionServerReflectionInfoClient) Send(m *ServerReflectionRequest) error {
|
||||||
|
return x.ClientStream.SendMsg(m)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *serverReflectionServerReflectionInfoClient) Recv() (*ServerReflectionResponse, error) {
|
||||||
|
m := new(ServerReflectionResponse)
|
||||||
|
if err := x.ClientStream.RecvMsg(m); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return m, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ServerReflectionServer is the server API for ServerReflection service.
|
||||||
|
// All implementations should embed UnimplementedServerReflectionServer
|
||||||
|
// for forward compatibility
|
||||||
|
type ServerReflectionServer interface {
|
||||||
|
// The reflection service is structured as a bidirectional stream, ensuring
|
||||||
|
// all related requests go to a single server.
|
||||||
|
ServerReflectionInfo(ServerReflection_ServerReflectionInfoServer) error
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnimplementedServerReflectionServer should be embedded to have forward compatible implementations.
|
||||||
|
type UnimplementedServerReflectionServer struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (UnimplementedServerReflectionServer) ServerReflectionInfo(ServerReflection_ServerReflectionInfoServer) error {
|
||||||
|
return status.Errorf(codes.Unimplemented, "method ServerReflectionInfo not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnsafeServerReflectionServer may be embedded to opt out of forward compatibility for this service.
|
||||||
|
// Use of this interface is not recommended, as added methods to ServerReflectionServer will
|
||||||
|
// result in compilation errors.
|
||||||
|
type UnsafeServerReflectionServer interface {
|
||||||
|
mustEmbedUnimplementedServerReflectionServer()
|
||||||
|
}
|
||||||
|
|
||||||
|
func RegisterServerReflectionServer(s grpc.ServiceRegistrar, srv ServerReflectionServer) {
|
||||||
|
s.RegisterService(&ServerReflection_ServiceDesc, srv)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _ServerReflection_ServerReflectionInfo_Handler(srv interface{}, stream grpc.ServerStream) error {
|
||||||
|
return srv.(ServerReflectionServer).ServerReflectionInfo(&serverReflectionServerReflectionInfoServer{stream})
|
||||||
|
}
|
||||||
|
|
||||||
|
type ServerReflection_ServerReflectionInfoServer interface {
|
||||||
|
Send(*ServerReflectionResponse) error
|
||||||
|
Recv() (*ServerReflectionRequest, error)
|
||||||
|
grpc.ServerStream
|
||||||
|
}
|
||||||
|
|
||||||
|
type serverReflectionServerReflectionInfoServer struct {
|
||||||
|
grpc.ServerStream
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *serverReflectionServerReflectionInfoServer) Send(m *ServerReflectionResponse) error {
|
||||||
|
return x.ServerStream.SendMsg(m)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *serverReflectionServerReflectionInfoServer) Recv() (*ServerReflectionRequest, error) {
|
||||||
|
m := new(ServerReflectionRequest)
|
||||||
|
if err := x.ServerStream.RecvMsg(m); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return m, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ServerReflection_ServiceDesc is the grpc.ServiceDesc for ServerReflection service.
|
||||||
|
// It's only intended for direct use with grpc.RegisterService,
|
||||||
|
// and not to be introspected or modified (even as a copy)
|
||||||
|
var ServerReflection_ServiceDesc = grpc.ServiceDesc{
|
||||||
|
ServiceName: "grpc.reflection.v1alpha.ServerReflection",
|
||||||
|
HandlerType: (*ServerReflectionServer)(nil),
|
||||||
|
Methods: []grpc.MethodDesc{},
|
||||||
|
Streams: []grpc.StreamDesc{
|
||||||
|
{
|
||||||
|
StreamName: "ServerReflectionInfo",
|
||||||
|
Handler: _ServerReflection_ServerReflectionInfo_Handler,
|
||||||
|
ServerStreams: true,
|
||||||
|
ClientStreams: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Metadata: "reflection/grpc_reflection_v1alpha/reflection.proto",
|
||||||
|
}
|
496
vendor/google.golang.org/grpc/reflection/serverreflection.go
generated
vendored
Normal file
496
vendor/google.golang.org/grpc/reflection/serverreflection.go
generated
vendored
Normal file
@ -0,0 +1,496 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright 2016 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 reflection implements server reflection service.
|
||||||
|
|
||||||
|
The service implemented is defined in:
|
||||||
|
https://github.com/grpc/grpc/blob/master/src/proto/grpc/reflection/v1alpha/reflection.proto.
|
||||||
|
|
||||||
|
To register server reflection on a gRPC server:
|
||||||
|
import "google.golang.org/grpc/reflection"
|
||||||
|
|
||||||
|
s := grpc.NewServer()
|
||||||
|
pb.RegisterYourOwnServer(s, &server{})
|
||||||
|
|
||||||
|
// Register reflection service on gRPC server.
|
||||||
|
reflection.Register(s)
|
||||||
|
|
||||||
|
s.Serve(lis)
|
||||||
|
|
||||||
|
*/
|
||||||
|
package reflection // import "google.golang.org/grpc/reflection"
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"compress/gzip"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"io/ioutil"
|
||||||
|
"reflect"
|
||||||
|
"sort"
|
||||||
|
"sync"
|
||||||
|
|
||||||
|
"github.com/golang/protobuf/proto"
|
||||||
|
dpb "github.com/golang/protobuf/protoc-gen-go/descriptor"
|
||||||
|
"google.golang.org/grpc"
|
||||||
|
"google.golang.org/grpc/codes"
|
||||||
|
rpb "google.golang.org/grpc/reflection/grpc_reflection_v1alpha"
|
||||||
|
"google.golang.org/grpc/status"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GRPCServer is the interface provided by a gRPC server. It is implemented by
|
||||||
|
// *grpc.Server, but could also be implemented by other concrete types. It acts
|
||||||
|
// as a registry, for accumulating the services exposed by the server.
|
||||||
|
type GRPCServer interface {
|
||||||
|
grpc.ServiceRegistrar
|
||||||
|
GetServiceInfo() map[string]grpc.ServiceInfo
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ GRPCServer = (*grpc.Server)(nil)
|
||||||
|
|
||||||
|
type serverReflectionServer struct {
|
||||||
|
rpb.UnimplementedServerReflectionServer
|
||||||
|
s GRPCServer
|
||||||
|
|
||||||
|
initSymbols sync.Once
|
||||||
|
serviceNames []string
|
||||||
|
symbols map[string]*dpb.FileDescriptorProto // map of fully-qualified names to files
|
||||||
|
}
|
||||||
|
|
||||||
|
// Register registers the server reflection service on the given gRPC server.
|
||||||
|
func Register(s GRPCServer) {
|
||||||
|
rpb.RegisterServerReflectionServer(s, &serverReflectionServer{
|
||||||
|
s: s,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// protoMessage is used for type assertion on proto messages.
|
||||||
|
// Generated proto message implements function Descriptor(), but Descriptor()
|
||||||
|
// is not part of interface proto.Message. This interface is needed to
|
||||||
|
// call Descriptor().
|
||||||
|
type protoMessage interface {
|
||||||
|
Descriptor() ([]byte, []int)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *serverReflectionServer) getSymbols() (svcNames []string, symbolIndex map[string]*dpb.FileDescriptorProto) {
|
||||||
|
s.initSymbols.Do(func() {
|
||||||
|
serviceInfo := s.s.GetServiceInfo()
|
||||||
|
|
||||||
|
s.symbols = map[string]*dpb.FileDescriptorProto{}
|
||||||
|
s.serviceNames = make([]string, 0, len(serviceInfo))
|
||||||
|
processed := map[string]struct{}{}
|
||||||
|
for svc, info := range serviceInfo {
|
||||||
|
s.serviceNames = append(s.serviceNames, svc)
|
||||||
|
fdenc, ok := parseMetadata(info.Metadata)
|
||||||
|
if !ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
fd, err := decodeFileDesc(fdenc)
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
s.processFile(fd, processed)
|
||||||
|
}
|
||||||
|
sort.Strings(s.serviceNames)
|
||||||
|
})
|
||||||
|
|
||||||
|
return s.serviceNames, s.symbols
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *serverReflectionServer) processFile(fd *dpb.FileDescriptorProto, processed map[string]struct{}) {
|
||||||
|
filename := fd.GetName()
|
||||||
|
if _, ok := processed[filename]; ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
processed[filename] = struct{}{}
|
||||||
|
|
||||||
|
prefix := fd.GetPackage()
|
||||||
|
|
||||||
|
for _, msg := range fd.MessageType {
|
||||||
|
s.processMessage(fd, prefix, msg)
|
||||||
|
}
|
||||||
|
for _, en := range fd.EnumType {
|
||||||
|
s.processEnum(fd, prefix, en)
|
||||||
|
}
|
||||||
|
for _, ext := range fd.Extension {
|
||||||
|
s.processField(fd, prefix, ext)
|
||||||
|
}
|
||||||
|
for _, svc := range fd.Service {
|
||||||
|
svcName := fqn(prefix, svc.GetName())
|
||||||
|
s.symbols[svcName] = fd
|
||||||
|
for _, meth := range svc.Method {
|
||||||
|
name := fqn(svcName, meth.GetName())
|
||||||
|
s.symbols[name] = fd
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, dep := range fd.Dependency {
|
||||||
|
fdenc := proto.FileDescriptor(dep)
|
||||||
|
fdDep, err := decodeFileDesc(fdenc)
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
s.processFile(fdDep, processed)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *serverReflectionServer) processMessage(fd *dpb.FileDescriptorProto, prefix string, msg *dpb.DescriptorProto) {
|
||||||
|
msgName := fqn(prefix, msg.GetName())
|
||||||
|
s.symbols[msgName] = fd
|
||||||
|
|
||||||
|
for _, nested := range msg.NestedType {
|
||||||
|
s.processMessage(fd, msgName, nested)
|
||||||
|
}
|
||||||
|
for _, en := range msg.EnumType {
|
||||||
|
s.processEnum(fd, msgName, en)
|
||||||
|
}
|
||||||
|
for _, ext := range msg.Extension {
|
||||||
|
s.processField(fd, msgName, ext)
|
||||||
|
}
|
||||||
|
for _, fld := range msg.Field {
|
||||||
|
s.processField(fd, msgName, fld)
|
||||||
|
}
|
||||||
|
for _, oneof := range msg.OneofDecl {
|
||||||
|
oneofName := fqn(msgName, oneof.GetName())
|
||||||
|
s.symbols[oneofName] = fd
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *serverReflectionServer) processEnum(fd *dpb.FileDescriptorProto, prefix string, en *dpb.EnumDescriptorProto) {
|
||||||
|
enName := fqn(prefix, en.GetName())
|
||||||
|
s.symbols[enName] = fd
|
||||||
|
|
||||||
|
for _, val := range en.Value {
|
||||||
|
valName := fqn(enName, val.GetName())
|
||||||
|
s.symbols[valName] = fd
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *serverReflectionServer) processField(fd *dpb.FileDescriptorProto, prefix string, fld *dpb.FieldDescriptorProto) {
|
||||||
|
fldName := fqn(prefix, fld.GetName())
|
||||||
|
s.symbols[fldName] = fd
|
||||||
|
}
|
||||||
|
|
||||||
|
func fqn(prefix, name string) string {
|
||||||
|
if prefix == "" {
|
||||||
|
return name
|
||||||
|
}
|
||||||
|
return prefix + "." + name
|
||||||
|
}
|
||||||
|
|
||||||
|
// fileDescForType gets the file descriptor for the given type.
|
||||||
|
// The given type should be a proto message.
|
||||||
|
func (s *serverReflectionServer) fileDescForType(st reflect.Type) (*dpb.FileDescriptorProto, error) {
|
||||||
|
m, ok := reflect.Zero(reflect.PtrTo(st)).Interface().(protoMessage)
|
||||||
|
if !ok {
|
||||||
|
return nil, fmt.Errorf("failed to create message from type: %v", st)
|
||||||
|
}
|
||||||
|
enc, _ := m.Descriptor()
|
||||||
|
|
||||||
|
return decodeFileDesc(enc)
|
||||||
|
}
|
||||||
|
|
||||||
|
// decodeFileDesc does decompression and unmarshalling on the given
|
||||||
|
// file descriptor byte slice.
|
||||||
|
func decodeFileDesc(enc []byte) (*dpb.FileDescriptorProto, error) {
|
||||||
|
raw, err := decompress(enc)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to decompress enc: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
fd := new(dpb.FileDescriptorProto)
|
||||||
|
if err := proto.Unmarshal(raw, fd); err != nil {
|
||||||
|
return nil, fmt.Errorf("bad descriptor: %v", err)
|
||||||
|
}
|
||||||
|
return fd, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// decompress does gzip decompression.
|
||||||
|
func decompress(b []byte) ([]byte, error) {
|
||||||
|
r, err := gzip.NewReader(bytes.NewReader(b))
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("bad gzipped descriptor: %v", err)
|
||||||
|
}
|
||||||
|
out, err := ioutil.ReadAll(r)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("bad gzipped descriptor: %v", err)
|
||||||
|
}
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func typeForName(name string) (reflect.Type, error) {
|
||||||
|
pt := proto.MessageType(name)
|
||||||
|
if pt == nil {
|
||||||
|
return nil, fmt.Errorf("unknown type: %q", name)
|
||||||
|
}
|
||||||
|
st := pt.Elem()
|
||||||
|
|
||||||
|
return st, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func fileDescContainingExtension(st reflect.Type, ext int32) (*dpb.FileDescriptorProto, error) {
|
||||||
|
m, ok := reflect.Zero(reflect.PtrTo(st)).Interface().(proto.Message)
|
||||||
|
if !ok {
|
||||||
|
return nil, fmt.Errorf("failed to create message from type: %v", st)
|
||||||
|
}
|
||||||
|
|
||||||
|
var extDesc *proto.ExtensionDesc
|
||||||
|
for id, desc := range proto.RegisteredExtensions(m) {
|
||||||
|
if id == ext {
|
||||||
|
extDesc = desc
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if extDesc == nil {
|
||||||
|
return nil, fmt.Errorf("failed to find registered extension for extension number %v", ext)
|
||||||
|
}
|
||||||
|
|
||||||
|
return decodeFileDesc(proto.FileDescriptor(extDesc.Filename))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *serverReflectionServer) allExtensionNumbersForType(st reflect.Type) ([]int32, error) {
|
||||||
|
m, ok := reflect.Zero(reflect.PtrTo(st)).Interface().(proto.Message)
|
||||||
|
if !ok {
|
||||||
|
return nil, fmt.Errorf("failed to create message from type: %v", st)
|
||||||
|
}
|
||||||
|
|
||||||
|
exts := proto.RegisteredExtensions(m)
|
||||||
|
out := make([]int32, 0, len(exts))
|
||||||
|
for id := range exts {
|
||||||
|
out = append(out, id)
|
||||||
|
}
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// fileDescWithDependencies returns a slice of serialized fileDescriptors in
|
||||||
|
// wire format ([]byte). The fileDescriptors will include fd and all the
|
||||||
|
// transitive dependencies of fd with names not in sentFileDescriptors.
|
||||||
|
func fileDescWithDependencies(fd *dpb.FileDescriptorProto, sentFileDescriptors map[string]bool) ([][]byte, error) {
|
||||||
|
r := [][]byte{}
|
||||||
|
queue := []*dpb.FileDescriptorProto{fd}
|
||||||
|
for len(queue) > 0 {
|
||||||
|
currentfd := queue[0]
|
||||||
|
queue = queue[1:]
|
||||||
|
if sent := sentFileDescriptors[currentfd.GetName()]; len(r) == 0 || !sent {
|
||||||
|
sentFileDescriptors[currentfd.GetName()] = true
|
||||||
|
currentfdEncoded, err := proto.Marshal(currentfd)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
r = append(r, currentfdEncoded)
|
||||||
|
}
|
||||||
|
for _, dep := range currentfd.Dependency {
|
||||||
|
fdenc := proto.FileDescriptor(dep)
|
||||||
|
fdDep, err := decodeFileDesc(fdenc)
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
queue = append(queue, fdDep)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return r, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// fileDescEncodingByFilename finds the file descriptor for given filename,
|
||||||
|
// finds all of its previously unsent transitive dependencies, does marshalling
|
||||||
|
// on them, and returns the marshalled result.
|
||||||
|
func (s *serverReflectionServer) fileDescEncodingByFilename(name string, sentFileDescriptors map[string]bool) ([][]byte, error) {
|
||||||
|
enc := proto.FileDescriptor(name)
|
||||||
|
if enc == nil {
|
||||||
|
return nil, fmt.Errorf("unknown file: %v", name)
|
||||||
|
}
|
||||||
|
fd, err := decodeFileDesc(enc)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return fileDescWithDependencies(fd, sentFileDescriptors)
|
||||||
|
}
|
||||||
|
|
||||||
|
// parseMetadata finds the file descriptor bytes specified meta.
|
||||||
|
// For SupportPackageIsVersion4, m is the name of the proto file, we
|
||||||
|
// call proto.FileDescriptor to get the byte slice.
|
||||||
|
// For SupportPackageIsVersion3, m is a byte slice itself.
|
||||||
|
func parseMetadata(meta interface{}) ([]byte, bool) {
|
||||||
|
// Check if meta is the file name.
|
||||||
|
if fileNameForMeta, ok := meta.(string); ok {
|
||||||
|
return proto.FileDescriptor(fileNameForMeta), true
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if meta is the byte slice.
|
||||||
|
if enc, ok := meta.([]byte); ok {
|
||||||
|
return enc, true
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, false
|
||||||
|
}
|
||||||
|
|
||||||
|
// fileDescEncodingContainingSymbol finds the file descriptor containing the
|
||||||
|
// given symbol, finds all of its previously unsent transitive dependencies,
|
||||||
|
// does marshalling on them, and returns the marshalled result. The given symbol
|
||||||
|
// can be a type, a service or a method.
|
||||||
|
func (s *serverReflectionServer) fileDescEncodingContainingSymbol(name string, sentFileDescriptors map[string]bool) ([][]byte, error) {
|
||||||
|
_, symbols := s.getSymbols()
|
||||||
|
fd := symbols[name]
|
||||||
|
if fd == nil {
|
||||||
|
// Check if it's a type name that was not present in the
|
||||||
|
// transitive dependencies of the registered services.
|
||||||
|
if st, err := typeForName(name); err == nil {
|
||||||
|
fd, err = s.fileDescForType(st)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if fd == nil {
|
||||||
|
return nil, fmt.Errorf("unknown symbol: %v", name)
|
||||||
|
}
|
||||||
|
|
||||||
|
return fileDescWithDependencies(fd, sentFileDescriptors)
|
||||||
|
}
|
||||||
|
|
||||||
|
// fileDescEncodingContainingExtension finds the file descriptor containing
|
||||||
|
// given extension, finds all of its previously unsent transitive dependencies,
|
||||||
|
// does marshalling on them, and returns the marshalled result.
|
||||||
|
func (s *serverReflectionServer) fileDescEncodingContainingExtension(typeName string, extNum int32, sentFileDescriptors map[string]bool) ([][]byte, error) {
|
||||||
|
st, err := typeForName(typeName)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
fd, err := fileDescContainingExtension(st, extNum)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return fileDescWithDependencies(fd, sentFileDescriptors)
|
||||||
|
}
|
||||||
|
|
||||||
|
// allExtensionNumbersForTypeName returns all extension numbers for the given type.
|
||||||
|
func (s *serverReflectionServer) allExtensionNumbersForTypeName(name string) ([]int32, error) {
|
||||||
|
st, err := typeForName(name)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
extNums, err := s.allExtensionNumbersForType(st)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return extNums, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ServerReflectionInfo is the reflection service handler.
|
||||||
|
func (s *serverReflectionServer) ServerReflectionInfo(stream rpb.ServerReflection_ServerReflectionInfoServer) error {
|
||||||
|
sentFileDescriptors := make(map[string]bool)
|
||||||
|
for {
|
||||||
|
in, err := stream.Recv()
|
||||||
|
if err == io.EOF {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
out := &rpb.ServerReflectionResponse{
|
||||||
|
ValidHost: in.Host,
|
||||||
|
OriginalRequest: in,
|
||||||
|
}
|
||||||
|
switch req := in.MessageRequest.(type) {
|
||||||
|
case *rpb.ServerReflectionRequest_FileByFilename:
|
||||||
|
b, err := s.fileDescEncodingByFilename(req.FileByFilename, sentFileDescriptors)
|
||||||
|
if err != nil {
|
||||||
|
out.MessageResponse = &rpb.ServerReflectionResponse_ErrorResponse{
|
||||||
|
ErrorResponse: &rpb.ErrorResponse{
|
||||||
|
ErrorCode: int32(codes.NotFound),
|
||||||
|
ErrorMessage: err.Error(),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
out.MessageResponse = &rpb.ServerReflectionResponse_FileDescriptorResponse{
|
||||||
|
FileDescriptorResponse: &rpb.FileDescriptorResponse{FileDescriptorProto: b},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case *rpb.ServerReflectionRequest_FileContainingSymbol:
|
||||||
|
b, err := s.fileDescEncodingContainingSymbol(req.FileContainingSymbol, sentFileDescriptors)
|
||||||
|
if err != nil {
|
||||||
|
out.MessageResponse = &rpb.ServerReflectionResponse_ErrorResponse{
|
||||||
|
ErrorResponse: &rpb.ErrorResponse{
|
||||||
|
ErrorCode: int32(codes.NotFound),
|
||||||
|
ErrorMessage: err.Error(),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
out.MessageResponse = &rpb.ServerReflectionResponse_FileDescriptorResponse{
|
||||||
|
FileDescriptorResponse: &rpb.FileDescriptorResponse{FileDescriptorProto: b},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case *rpb.ServerReflectionRequest_FileContainingExtension:
|
||||||
|
typeName := req.FileContainingExtension.ContainingType
|
||||||
|
extNum := req.FileContainingExtension.ExtensionNumber
|
||||||
|
b, err := s.fileDescEncodingContainingExtension(typeName, extNum, sentFileDescriptors)
|
||||||
|
if err != nil {
|
||||||
|
out.MessageResponse = &rpb.ServerReflectionResponse_ErrorResponse{
|
||||||
|
ErrorResponse: &rpb.ErrorResponse{
|
||||||
|
ErrorCode: int32(codes.NotFound),
|
||||||
|
ErrorMessage: err.Error(),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
out.MessageResponse = &rpb.ServerReflectionResponse_FileDescriptorResponse{
|
||||||
|
FileDescriptorResponse: &rpb.FileDescriptorResponse{FileDescriptorProto: b},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case *rpb.ServerReflectionRequest_AllExtensionNumbersOfType:
|
||||||
|
extNums, err := s.allExtensionNumbersForTypeName(req.AllExtensionNumbersOfType)
|
||||||
|
if err != nil {
|
||||||
|
out.MessageResponse = &rpb.ServerReflectionResponse_ErrorResponse{
|
||||||
|
ErrorResponse: &rpb.ErrorResponse{
|
||||||
|
ErrorCode: int32(codes.NotFound),
|
||||||
|
ErrorMessage: err.Error(),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
out.MessageResponse = &rpb.ServerReflectionResponse_AllExtensionNumbersResponse{
|
||||||
|
AllExtensionNumbersResponse: &rpb.ExtensionNumberResponse{
|
||||||
|
BaseTypeName: req.AllExtensionNumbersOfType,
|
||||||
|
ExtensionNumber: extNums,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case *rpb.ServerReflectionRequest_ListServices:
|
||||||
|
svcNames, _ := s.getSymbols()
|
||||||
|
serviceResponses := make([]*rpb.ServiceResponse, len(svcNames))
|
||||||
|
for i, n := range svcNames {
|
||||||
|
serviceResponses[i] = &rpb.ServiceResponse{
|
||||||
|
Name: n,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
out.MessageResponse = &rpb.ServerReflectionResponse_ListServicesResponse{
|
||||||
|
ListServicesResponse: &rpb.ListServiceResponse{
|
||||||
|
Service: serviceResponses,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return status.Errorf(codes.InvalidArgument, "invalid MessageRequest: %v", in.MessageRequest)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := stream.Send(out); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
168
vendor/google.golang.org/protobuf/types/known/emptypb/empty.pb.go
generated
vendored
Normal file
168
vendor/google.golang.org/protobuf/types/known/emptypb/empty.pb.go
generated
vendored
Normal file
@ -0,0 +1,168 @@
|
|||||||
|
// Protocol Buffers - Google's data interchange format
|
||||||
|
// Copyright 2008 Google Inc. All rights reserved.
|
||||||
|
// https://developers.google.com/protocol-buffers/
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
// * Neither the name of Google Inc. nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived from
|
||||||
|
// this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||||
|
// source: google/protobuf/empty.proto
|
||||||
|
|
||||||
|
package emptypb
|
||||||
|
|
||||||
|
import (
|
||||||
|
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
||||||
|
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
||||||
|
reflect "reflect"
|
||||||
|
sync "sync"
|
||||||
|
)
|
||||||
|
|
||||||
|
// A generic empty message that you can re-use to avoid defining duplicated
|
||||||
|
// empty messages in your APIs. A typical example is to use it as the request
|
||||||
|
// or the response type of an API method. For instance:
|
||||||
|
//
|
||||||
|
// service Foo {
|
||||||
|
// rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// The JSON representation for `Empty` is empty JSON object `{}`.
|
||||||
|
type Empty struct {
|
||||||
|
state protoimpl.MessageState
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
|
unknownFields protoimpl.UnknownFields
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *Empty) Reset() {
|
||||||
|
*x = Empty{}
|
||||||
|
if protoimpl.UnsafeEnabled {
|
||||||
|
mi := &file_google_protobuf_empty_proto_msgTypes[0]
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *Empty) String() string {
|
||||||
|
return protoimpl.X.MessageStringOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*Empty) ProtoMessage() {}
|
||||||
|
|
||||||
|
func (x *Empty) ProtoReflect() protoreflect.Message {
|
||||||
|
mi := &file_google_protobuf_empty_proto_msgTypes[0]
|
||||||
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
return ms
|
||||||
|
}
|
||||||
|
return mi.MessageOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deprecated: Use Empty.ProtoReflect.Descriptor instead.
|
||||||
|
func (*Empty) Descriptor() ([]byte, []int) {
|
||||||
|
return file_google_protobuf_empty_proto_rawDescGZIP(), []int{0}
|
||||||
|
}
|
||||||
|
|
||||||
|
var File_google_protobuf_empty_proto protoreflect.FileDescriptor
|
||||||
|
|
||||||
|
var file_google_protobuf_empty_proto_rawDesc = []byte{
|
||||||
|
0x0a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
|
||||||
|
0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0f, 0x67,
|
||||||
|
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x22, 0x07,
|
||||||
|
0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x7d, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x67,
|
||||||
|
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x42, 0x0a,
|
||||||
|
0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x6f,
|
||||||
|
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f,
|
||||||
|
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6b,
|
||||||
|
0x6e, 0x6f, 0x77, 0x6e, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x70, 0x62, 0xf8, 0x01, 0x01, 0xa2,
|
||||||
|
0x02, 0x03, 0x47, 0x50, 0x42, 0xaa, 0x02, 0x1e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x50,
|
||||||
|
0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x57, 0x65, 0x6c, 0x6c, 0x4b, 0x6e, 0x6f, 0x77,
|
||||||
|
0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
file_google_protobuf_empty_proto_rawDescOnce sync.Once
|
||||||
|
file_google_protobuf_empty_proto_rawDescData = file_google_protobuf_empty_proto_rawDesc
|
||||||
|
)
|
||||||
|
|
||||||
|
func file_google_protobuf_empty_proto_rawDescGZIP() []byte {
|
||||||
|
file_google_protobuf_empty_proto_rawDescOnce.Do(func() {
|
||||||
|
file_google_protobuf_empty_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_protobuf_empty_proto_rawDescData)
|
||||||
|
})
|
||||||
|
return file_google_protobuf_empty_proto_rawDescData
|
||||||
|
}
|
||||||
|
|
||||||
|
var file_google_protobuf_empty_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
|
||||||
|
var file_google_protobuf_empty_proto_goTypes = []interface{}{
|
||||||
|
(*Empty)(nil), // 0: google.protobuf.Empty
|
||||||
|
}
|
||||||
|
var file_google_protobuf_empty_proto_depIdxs = []int32{
|
||||||
|
0, // [0:0] is the sub-list for method output_type
|
||||||
|
0, // [0:0] is the sub-list for method input_type
|
||||||
|
0, // [0:0] is the sub-list for extension type_name
|
||||||
|
0, // [0:0] is the sub-list for extension extendee
|
||||||
|
0, // [0:0] is the sub-list for field type_name
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() { file_google_protobuf_empty_proto_init() }
|
||||||
|
func file_google_protobuf_empty_proto_init() {
|
||||||
|
if File_google_protobuf_empty_proto != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if !protoimpl.UnsafeEnabled {
|
||||||
|
file_google_protobuf_empty_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
|
||||||
|
switch v := v.(*Empty); i {
|
||||||
|
case 0:
|
||||||
|
return &v.state
|
||||||
|
case 1:
|
||||||
|
return &v.sizeCache
|
||||||
|
case 2:
|
||||||
|
return &v.unknownFields
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
type x struct{}
|
||||||
|
out := protoimpl.TypeBuilder{
|
||||||
|
File: protoimpl.DescBuilder{
|
||||||
|
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||||
|
RawDescriptor: file_google_protobuf_empty_proto_rawDesc,
|
||||||
|
NumEnums: 0,
|
||||||
|
NumMessages: 1,
|
||||||
|
NumExtensions: 0,
|
||||||
|
NumServices: 0,
|
||||||
|
},
|
||||||
|
GoTypes: file_google_protobuf_empty_proto_goTypes,
|
||||||
|
DependencyIndexes: file_google_protobuf_empty_proto_depIdxs,
|
||||||
|
MessageInfos: file_google_protobuf_empty_proto_msgTypes,
|
||||||
|
}.Build()
|
||||||
|
File_google_protobuf_empty_proto = out.File
|
||||||
|
file_google_protobuf_empty_proto_rawDesc = nil
|
||||||
|
file_google_protobuf_empty_proto_goTypes = nil
|
||||||
|
file_google_protobuf_empty_proto_depIdxs = nil
|
||||||
|
}
|
26
vendor/modules.txt
vendored
26
vendor/modules.txt
vendored
@ -1,4 +1,4 @@
|
|||||||
# github.com/armon/go-metrics v0.3.3
|
# github.com/armon/go-metrics v0.3.9
|
||||||
github.com/armon/go-metrics
|
github.com/armon/go-metrics
|
||||||
# github.com/armon/go-radix v1.0.0
|
# github.com/armon/go-radix v1.0.0
|
||||||
github.com/armon/go-radix
|
github.com/armon/go-radix
|
||||||
@ -100,6 +100,8 @@ github.com/fsnotify/fsnotify
|
|||||||
github.com/ghodss/yaml
|
github.com/ghodss/yaml
|
||||||
# github.com/go-logr/logr v0.4.0
|
# github.com/go-logr/logr v0.4.0
|
||||||
github.com/go-logr/logr
|
github.com/go-logr/logr
|
||||||
|
# github.com/go-sql-driver/mysql v1.5.0
|
||||||
|
## explicit
|
||||||
# github.com/gogo/protobuf v1.3.2
|
# github.com/gogo/protobuf v1.3.2
|
||||||
github.com/gogo/protobuf/proto
|
github.com/gogo/protobuf/proto
|
||||||
github.com/gogo/protobuf/sortkeys
|
github.com/gogo/protobuf/sortkeys
|
||||||
@ -114,9 +116,10 @@ github.com/golang/protobuf/protoc-gen-go/descriptor
|
|||||||
github.com/golang/protobuf/ptypes
|
github.com/golang/protobuf/ptypes
|
||||||
github.com/golang/protobuf/ptypes/any
|
github.com/golang/protobuf/ptypes/any
|
||||||
github.com/golang/protobuf/ptypes/duration
|
github.com/golang/protobuf/ptypes/duration
|
||||||
|
github.com/golang/protobuf/ptypes/empty
|
||||||
github.com/golang/protobuf/ptypes/timestamp
|
github.com/golang/protobuf/ptypes/timestamp
|
||||||
github.com/golang/protobuf/ptypes/wrappers
|
github.com/golang/protobuf/ptypes/wrappers
|
||||||
# github.com/golang/snappy v0.0.1
|
# github.com/golang/snappy v0.0.4
|
||||||
github.com/golang/snappy
|
github.com/golang/snappy
|
||||||
# github.com/google/go-cmp v0.5.5
|
# github.com/google/go-cmp v0.5.5
|
||||||
github.com/google/go-cmp/cmp
|
github.com/google/go-cmp/cmp
|
||||||
@ -149,17 +152,19 @@ github.com/hashicorp/errwrap
|
|||||||
github.com/hashicorp/go-cleanhttp
|
github.com/hashicorp/go-cleanhttp
|
||||||
# github.com/hashicorp/go-hclog v0.16.2
|
# github.com/hashicorp/go-hclog v0.16.2
|
||||||
github.com/hashicorp/go-hclog
|
github.com/hashicorp/go-hclog
|
||||||
# github.com/hashicorp/go-immutable-radix v1.1.0
|
# github.com/hashicorp/go-immutable-radix v1.3.1
|
||||||
github.com/hashicorp/go-immutable-radix
|
github.com/hashicorp/go-immutable-radix
|
||||||
# github.com/hashicorp/go-multierror v1.1.1
|
# github.com/hashicorp/go-multierror v1.1.1
|
||||||
github.com/hashicorp/go-multierror
|
github.com/hashicorp/go-multierror
|
||||||
# github.com/hashicorp/go-plugin v1.0.1
|
# github.com/hashicorp/go-plugin v1.4.3
|
||||||
github.com/hashicorp/go-plugin
|
github.com/hashicorp/go-plugin
|
||||||
github.com/hashicorp/go-plugin/internal/plugin
|
github.com/hashicorp/go-plugin/internal/plugin
|
||||||
# github.com/hashicorp/go-retryablehttp v0.6.6
|
# github.com/hashicorp/go-retryablehttp v0.6.6
|
||||||
github.com/hashicorp/go-retryablehttp
|
github.com/hashicorp/go-retryablehttp
|
||||||
# github.com/hashicorp/go-rootcerts v1.0.2
|
# github.com/hashicorp/go-rootcerts v1.0.2
|
||||||
github.com/hashicorp/go-rootcerts
|
github.com/hashicorp/go-rootcerts
|
||||||
|
# github.com/hashicorp/go-secure-stdlib/mlock v0.1.1
|
||||||
|
github.com/hashicorp/go-secure-stdlib/mlock
|
||||||
# github.com/hashicorp/go-secure-stdlib/parseutil v0.1.1
|
# github.com/hashicorp/go-secure-stdlib/parseutil v0.1.1
|
||||||
github.com/hashicorp/go-secure-stdlib/parseutil
|
github.com/hashicorp/go-secure-stdlib/parseutil
|
||||||
# github.com/hashicorp/go-secure-stdlib/strutil v0.1.1
|
# github.com/hashicorp/go-secure-stdlib/strutil v0.1.1
|
||||||
@ -171,7 +176,6 @@ github.com/hashicorp/go-uuid
|
|||||||
# github.com/hashicorp/go-version v1.2.0
|
# github.com/hashicorp/go-version v1.2.0
|
||||||
github.com/hashicorp/go-version
|
github.com/hashicorp/go-version
|
||||||
# github.com/hashicorp/golang-lru v0.5.4
|
# github.com/hashicorp/golang-lru v0.5.4
|
||||||
## explicit
|
|
||||||
github.com/hashicorp/golang-lru
|
github.com/hashicorp/golang-lru
|
||||||
github.com/hashicorp/golang-lru/simplelru
|
github.com/hashicorp/golang-lru/simplelru
|
||||||
# github.com/hashicorp/hcl v1.0.0
|
# github.com/hashicorp/hcl v1.0.0
|
||||||
@ -187,10 +191,10 @@ github.com/hashicorp/hcl/json/token
|
|||||||
# github.com/hashicorp/vault v1.4.2
|
# github.com/hashicorp/vault v1.4.2
|
||||||
github.com/hashicorp/vault/command/agent/auth
|
github.com/hashicorp/vault/command/agent/auth
|
||||||
github.com/hashicorp/vault/command/agent/auth/kubernetes
|
github.com/hashicorp/vault/command/agent/auth/kubernetes
|
||||||
# github.com/hashicorp/vault/api v1.2.0
|
# github.com/hashicorp/vault/api v1.3.0
|
||||||
## explicit
|
## explicit
|
||||||
github.com/hashicorp/vault/api
|
github.com/hashicorp/vault/api
|
||||||
# github.com/hashicorp/vault/sdk v0.2.1
|
# github.com/hashicorp/vault/sdk v0.3.0
|
||||||
github.com/hashicorp/vault/sdk/helper/certutil
|
github.com/hashicorp/vault/sdk/helper/certutil
|
||||||
github.com/hashicorp/vault/sdk/helper/compressutil
|
github.com/hashicorp/vault/sdk/helper/compressutil
|
||||||
github.com/hashicorp/vault/sdk/helper/consts
|
github.com/hashicorp/vault/sdk/helper/consts
|
||||||
@ -201,7 +205,6 @@ github.com/hashicorp/vault/sdk/helper/jsonutil
|
|||||||
github.com/hashicorp/vault/sdk/helper/license
|
github.com/hashicorp/vault/sdk/helper/license
|
||||||
github.com/hashicorp/vault/sdk/helper/locksutil
|
github.com/hashicorp/vault/sdk/helper/locksutil
|
||||||
github.com/hashicorp/vault/sdk/helper/logging
|
github.com/hashicorp/vault/sdk/helper/logging
|
||||||
github.com/hashicorp/vault/sdk/helper/mlock
|
|
||||||
github.com/hashicorp/vault/sdk/helper/pathmanager
|
github.com/hashicorp/vault/sdk/helper/pathmanager
|
||||||
github.com/hashicorp/vault/sdk/helper/pluginutil
|
github.com/hashicorp/vault/sdk/helper/pluginutil
|
||||||
github.com/hashicorp/vault/sdk/helper/strutil
|
github.com/hashicorp/vault/sdk/helper/strutil
|
||||||
@ -401,9 +404,9 @@ go.opentelemetry.io/proto/otlp/common/v1
|
|||||||
go.opentelemetry.io/proto/otlp/metrics/v1
|
go.opentelemetry.io/proto/otlp/metrics/v1
|
||||||
go.opentelemetry.io/proto/otlp/resource/v1
|
go.opentelemetry.io/proto/otlp/resource/v1
|
||||||
go.opentelemetry.io/proto/otlp/trace/v1
|
go.opentelemetry.io/proto/otlp/trace/v1
|
||||||
# go.uber.org/atomic v1.7.0
|
# go.uber.org/atomic v1.9.0
|
||||||
go.uber.org/atomic
|
go.uber.org/atomic
|
||||||
# golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e
|
# golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97
|
||||||
## explicit
|
## explicit
|
||||||
golang.org/x/crypto/blake2b
|
golang.org/x/crypto/blake2b
|
||||||
golang.org/x/crypto/blowfish
|
golang.org/x/crypto/blowfish
|
||||||
@ -526,6 +529,8 @@ google.golang.org/grpc/internal/xds/env
|
|||||||
google.golang.org/grpc/keepalive
|
google.golang.org/grpc/keepalive
|
||||||
google.golang.org/grpc/metadata
|
google.golang.org/grpc/metadata
|
||||||
google.golang.org/grpc/peer
|
google.golang.org/grpc/peer
|
||||||
|
google.golang.org/grpc/reflection
|
||||||
|
google.golang.org/grpc/reflection/grpc_reflection_v1alpha
|
||||||
google.golang.org/grpc/resolver
|
google.golang.org/grpc/resolver
|
||||||
google.golang.org/grpc/serviceconfig
|
google.golang.org/grpc/serviceconfig
|
||||||
google.golang.org/grpc/stats
|
google.golang.org/grpc/stats
|
||||||
@ -563,6 +568,7 @@ google.golang.org/protobuf/runtime/protoimpl
|
|||||||
google.golang.org/protobuf/types/descriptorpb
|
google.golang.org/protobuf/types/descriptorpb
|
||||||
google.golang.org/protobuf/types/known/anypb
|
google.golang.org/protobuf/types/known/anypb
|
||||||
google.golang.org/protobuf/types/known/durationpb
|
google.golang.org/protobuf/types/known/durationpb
|
||||||
|
google.golang.org/protobuf/types/known/emptypb
|
||||||
google.golang.org/protobuf/types/known/fieldmaskpb
|
google.golang.org/protobuf/types/known/fieldmaskpb
|
||||||
google.golang.org/protobuf/types/known/timestamppb
|
google.golang.org/protobuf/types/known/timestamppb
|
||||||
google.golang.org/protobuf/types/known/wrapperspb
|
google.golang.org/protobuf/types/known/wrapperspb
|
||||||
|
Loading…
Reference in New Issue
Block a user