mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-11-21 14:44:00 +00:00
vendor: make vendor-update
This commit is contained in:
parent
ce1190974c
commit
e0195558c9
73 changed files with 5695 additions and 955 deletions
16
go.mod
16
go.mod
|
@ -11,33 +11,33 @@ require (
|
||||||
github.com/VictoriaMetrics/fasthttp v1.1.0
|
github.com/VictoriaMetrics/fasthttp v1.1.0
|
||||||
github.com/VictoriaMetrics/metrics v1.18.1
|
github.com/VictoriaMetrics/metrics v1.18.1
|
||||||
github.com/VictoriaMetrics/metricsql v0.42.0
|
github.com/VictoriaMetrics/metricsql v0.42.0
|
||||||
github.com/aws/aws-sdk-go v1.43.43
|
github.com/aws/aws-sdk-go v1.44.0
|
||||||
github.com/cespare/xxhash/v2 v2.1.2
|
github.com/cespare/xxhash/v2 v2.1.2
|
||||||
github.com/cheggaaa/pb/v3 v3.0.8
|
github.com/cheggaaa/pb/v3 v3.0.8
|
||||||
github.com/golang/snappy v0.0.4
|
github.com/golang/snappy v0.0.4
|
||||||
github.com/influxdata/influxdb v1.9.6
|
github.com/influxdata/influxdb v1.9.6
|
||||||
github.com/klauspost/compress v1.15.1
|
github.com/klauspost/compress v1.15.1
|
||||||
github.com/prometheus/prometheus v1.8.2-0.20201119142752-3ad25a6dc3d9
|
github.com/prometheus/prometheus v1.8.2-0.20201119142752-3ad25a6dc3d9
|
||||||
github.com/urfave/cli/v2 v2.4.0
|
github.com/urfave/cli/v2 v2.5.0
|
||||||
github.com/valyala/fastjson v1.6.3
|
github.com/valyala/fastjson v1.6.3
|
||||||
github.com/valyala/fastrand v1.1.0
|
github.com/valyala/fastrand v1.1.0
|
||||||
github.com/valyala/fasttemplate v1.2.1
|
github.com/valyala/fasttemplate v1.2.1
|
||||||
github.com/valyala/gozstd v1.16.0
|
github.com/valyala/gozstd v1.16.0
|
||||||
github.com/valyala/quicktemplate v1.7.0
|
github.com/valyala/quicktemplate v1.7.0
|
||||||
golang.org/x/net v0.0.0-20220420153159-1850ba15e1be
|
golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4
|
||||||
golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5
|
golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5
|
||||||
golang.org/x/sys v0.0.0-20220412211240-33da011f77ad
|
golang.org/x/sys v0.0.0-20220422013727-9388b58f7150
|
||||||
google.golang.org/api v0.75.0
|
google.golang.org/api v0.75.0
|
||||||
gopkg.in/yaml.v2 v2.4.0
|
gopkg.in/yaml.v2 v2.4.0
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
cloud.google.com/go v0.101.0 // indirect
|
cloud.google.com/go v0.101.0 // indirect
|
||||||
cloud.google.com/go/compute v1.6.0 // indirect
|
cloud.google.com/go/compute v1.6.1 // indirect
|
||||||
cloud.google.com/go/iam v0.3.0 // indirect
|
cloud.google.com/go/iam v0.3.0 // indirect
|
||||||
github.com/VividCortex/ewma v1.2.0 // indirect
|
github.com/VividCortex/ewma v1.2.0 // indirect
|
||||||
github.com/beorn7/perks v1.0.1 // indirect
|
github.com/beorn7/perks v1.0.1 // indirect
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.1 // indirect
|
github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
|
||||||
github.com/fatih/color v1.13.0 // indirect
|
github.com/fatih/color v1.13.0 // indirect
|
||||||
github.com/go-kit/kit v0.12.0 // indirect
|
github.com/go-kit/kit v0.12.0 // indirect
|
||||||
github.com/go-kit/log v0.2.0 // indirect
|
github.com/go-kit/log v0.2.0 // indirect
|
||||||
|
@ -69,8 +69,8 @@ require (
|
||||||
golang.org/x/text v0.3.7 // indirect
|
golang.org/x/text v0.3.7 // indirect
|
||||||
golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f // indirect
|
golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f // indirect
|
||||||
google.golang.org/appengine v1.6.7 // indirect
|
google.golang.org/appengine v1.6.7 // indirect
|
||||||
google.golang.org/genproto v0.0.0-20220420195807-44278fea765b // indirect
|
google.golang.org/genproto v0.0.0-20220422154200-b37d22cd5731 // indirect
|
||||||
google.golang.org/grpc v1.45.0 // indirect
|
google.golang.org/grpc v1.46.0 // indirect
|
||||||
google.golang.org/protobuf v1.28.0 // indirect
|
google.golang.org/protobuf v1.28.0 // indirect
|
||||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect
|
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect
|
||||||
)
|
)
|
||||||
|
|
32
go.sum
32
go.sum
|
@ -43,8 +43,9 @@ cloud.google.com/go/bigtable v1.10.1/go.mod h1:cyHeKlx6dcZCO0oSQucYdauseD8kIENGu
|
||||||
cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow=
|
cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow=
|
||||||
cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM=
|
cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM=
|
||||||
cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M=
|
cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M=
|
||||||
cloud.google.com/go/compute v1.6.0 h1:XdQIN5mdPTSBVwSIVDuY5e8ZzVAccsHvD3qTEz4zIps=
|
|
||||||
cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s=
|
cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s=
|
||||||
|
cloud.google.com/go/compute v1.6.1 h1:2sMmt8prCn7DPaG4Pmh0N3Inmc8cT8ae5k1M6VJ9Wqc=
|
||||||
|
cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU=
|
||||||
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
|
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
|
||||||
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
|
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
|
||||||
cloud.google.com/go/iam v0.3.0 h1:exkAomrVUuzx9kWFI1wm3KI0uoDeUFPB4kKGzx6x+Gc=
|
cloud.google.com/go/iam v0.3.0 h1:exkAomrVUuzx9kWFI1wm3KI0uoDeUFPB4kKGzx6x+Gc=
|
||||||
|
@ -91,6 +92,7 @@ github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZ
|
||||||
github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
|
github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
|
||||||
github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
|
github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
|
||||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||||
|
github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
|
||||||
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
|
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
|
||||||
github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM=
|
github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM=
|
||||||
github.com/DATA-DOG/go-sqlmock v1.4.1/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM=
|
github.com/DATA-DOG/go-sqlmock v1.4.1/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM=
|
||||||
|
@ -164,8 +166,8 @@ github.com/aws/aws-sdk-go v1.30.12/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZve
|
||||||
github.com/aws/aws-sdk-go v1.34.28/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48=
|
github.com/aws/aws-sdk-go v1.34.28/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48=
|
||||||
github.com/aws/aws-sdk-go v1.35.31/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro=
|
github.com/aws/aws-sdk-go v1.35.31/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro=
|
||||||
github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q=
|
github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q=
|
||||||
github.com/aws/aws-sdk-go v1.43.43 h1:1L06qzQvl4aC3Skfh5rV7xVhGHjIZoHcqy16NoyQ1o4=
|
github.com/aws/aws-sdk-go v1.44.0 h1:jwtHuNqfnJxL4DKHBUVUmQlfueQqBW7oXP6yebZR/R0=
|
||||||
github.com/aws/aws-sdk-go v1.43.43/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo=
|
github.com/aws/aws-sdk-go v1.44.0/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo=
|
||||||
github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g=
|
github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g=
|
||||||
github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4=
|
github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4=
|
||||||
github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o=
|
github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o=
|
||||||
|
@ -213,6 +215,7 @@ github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XP
|
||||||
github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
|
github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
|
||||||
github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
|
github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
|
||||||
github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
|
github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
|
||||||
|
github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
|
||||||
github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
|
github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
|
||||||
github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
|
github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
|
||||||
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
|
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
|
||||||
|
@ -223,8 +226,9 @@ github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7
|
||||||
github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
|
github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
|
||||||
github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
|
github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.1 h1:r/myEWzV9lfsM1tFLgDyu0atFtJ1fXn261LKYj/3DxU=
|
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||||
|
github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w=
|
||||||
|
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||||
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
|
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
|
||||||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||||
github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4=
|
github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4=
|
||||||
|
@ -266,6 +270,7 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.m
|
||||||
github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
|
github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
|
||||||
github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ=
|
github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ=
|
||||||
github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0=
|
github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0=
|
||||||
|
github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE=
|
||||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||||
github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
||||||
github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
||||||
|
@ -972,8 +977,8 @@ github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6
|
||||||
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 h1:+mkCCcOFKPnCmVYVcURKps1Xe+3zP90gSYGNfRkjoIY=
|
github.com/urfave/cli v1.22.1 h1:+mkCCcOFKPnCmVYVcURKps1Xe+3zP90gSYGNfRkjoIY=
|
||||||
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/v2 v2.4.0 h1:m2pxjjDFgDxSPtO8WSdbndj17Wu2y8vOT86wE/tjr+I=
|
github.com/urfave/cli/v2 v2.5.0 h1:2sqblaW62ebcTIEvwb8eRvDfNHeBAeKxfhdynaanhug=
|
||||||
github.com/urfave/cli/v2 v2.4.0/go.mod h1:NX9W0zmTvedE5oDoOMs2RTC8RvdK98NTYZE5LbaEYPg=
|
github.com/urfave/cli/v2 v2.5.0/go.mod h1:oDzoM7pVwz6wHn5ogWgFUU1s4VJayeQS+aEZDqXIEJs=
|
||||||
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
|
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
|
||||||
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
|
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
|
||||||
github.com/valyala/fasthttp v1.30.0/go.mod h1:2rsYD01CKFrjjsvFxx75KlEUNpWNBY9JWD3K/7o2Cus=
|
github.com/valyala/fasthttp v1.30.0/go.mod h1:2rsYD01CKFrjjsvFxx75KlEUNpWNBY9JWD3K/7o2Cus=
|
||||||
|
@ -1185,8 +1190,8 @@ golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su
|
||||||
golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||||
golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||||
golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||||
golang.org/x/net v0.0.0-20220420153159-1850ba15e1be h1:yx80W7nvY5ySWpaU8UWaj5o9e23YgO9BRhQol7Lc+JI=
|
golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4 h1:HVyaeDAYux4pnY+D/SiwmLOR36ewZ4iGQIIrtnuCjFA=
|
||||||
golang.org/x/net v0.0.0-20220420153159-1850ba15e1be/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
|
@ -1324,8 +1329,9 @@ golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBc
|
||||||
golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220405052023-b1e9470b6e64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220405052023-b1e9470b6e64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220412211240-33da011f77ad h1:ntjMns5wyP/fN65tdBD4g8J5w8n015+iIIs9rtjXkY0=
|
|
||||||
golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20220422013727-9388b58f7150 h1:xHms4gcpe1YE7A3yIllJXP16CMAGuqwO2lX1mTyyRRc=
|
||||||
|
golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/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=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
|
@ -1573,8 +1579,9 @@ google.golang.org/genproto v0.0.0-20220405205423-9d709892a2bf/go.mod h1:8w6bsBMX
|
||||||
google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
|
google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
|
||||||
google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
|
google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
|
||||||
google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
|
google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
|
||||||
google.golang.org/genproto v0.0.0-20220420195807-44278fea765b h1:5zvsLqz9A1TKTeI6AhjJH/Vkaw0GGBs+D3GkvUUqNO0=
|
google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
|
||||||
google.golang.org/genproto v0.0.0-20220420195807-44278fea765b/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
|
google.golang.org/genproto v0.0.0-20220422154200-b37d22cd5731 h1:nquqdM9+ps0JZcIiI70+tqoaIFS5Ql4ZuK8UXnz3HfE=
|
||||||
|
google.golang.org/genproto v0.0.0-20220422154200-b37d22cd5731/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
|
||||||
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=
|
||||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||||
google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM=
|
google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM=
|
||||||
|
@ -1609,8 +1616,9 @@ google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnD
|
||||||
google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
|
google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
|
||||||
google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
|
google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
|
||||||
google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
|
google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
|
||||||
google.golang.org/grpc v1.45.0 h1:NEpgUqV3Z+ZjkqMsxMg11IaDrXY4RY6CQukSGK0uI1M=
|
|
||||||
google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ=
|
google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ=
|
||||||
|
google.golang.org/grpc v1.46.0 h1:oCjezcn6g6A75TGoKYBPgKmVBLexhYLM6MebdrPApP8=
|
||||||
|
google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
|
||||||
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
|
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
|
||||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||||
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
||||||
|
|
5
vendor/github.com/aws/aws-sdk-go/aws/request/handlers.go
generated
vendored
5
vendor/github.com/aws/aws-sdk-go/aws/request/handlers.go
generated
vendored
|
@ -330,6 +330,9 @@ func MakeAddToUserAgentFreeFormHandler(s string) func(*Request) {
|
||||||
// WithSetRequestHeaders updates the operation request's HTTP header to contain
|
// WithSetRequestHeaders updates the operation request's HTTP header to contain
|
||||||
// the header key value pairs provided. If the header key already exists in the
|
// the header key value pairs provided. If the header key already exists in the
|
||||||
// request's HTTP header set, the existing value(s) will be replaced.
|
// request's HTTP header set, the existing value(s) will be replaced.
|
||||||
|
//
|
||||||
|
// Header keys added will be added as canonical format with title casing
|
||||||
|
// applied via http.Header.Set method.
|
||||||
func WithSetRequestHeaders(h map[string]string) Option {
|
func WithSetRequestHeaders(h map[string]string) Option {
|
||||||
return withRequestHeader(h).SetRequestHeaders
|
return withRequestHeader(h).SetRequestHeaders
|
||||||
}
|
}
|
||||||
|
@ -338,6 +341,6 @@ type withRequestHeader map[string]string
|
||||||
|
|
||||||
func (h withRequestHeader) SetRequestHeaders(r *Request) {
|
func (h withRequestHeader) SetRequestHeaders(r *Request) {
|
||||||
for k, v := range h {
|
for k, v := range h {
|
||||||
r.HTTPRequest.Header[k] = []string{v}
|
r.HTTPRequest.Header.Set(k, v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
2
vendor/github.com/aws/aws-sdk-go/aws/version.go
generated
vendored
2
vendor/github.com/aws/aws-sdk-go/aws/version.go
generated
vendored
|
@ -5,4 +5,4 @@ package aws
|
||||||
const SDKName = "aws-sdk-go"
|
const SDKName = "aws-sdk-go"
|
||||||
|
|
||||||
// SDKVersion is the version of this SDK
|
// SDKVersion is the version of this SDK
|
||||||
const SDKVersion = "1.43.43"
|
const SDKVersion = "1.44.0"
|
||||||
|
|
524
vendor/github.com/golang/protobuf/jsonpb/decode.go
generated
vendored
Normal file
524
vendor/github.com/golang/protobuf/jsonpb/decode.go
generated
vendored
Normal file
|
@ -0,0 +1,524 @@
|
||||||
|
// Copyright 2015 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.
|
||||||
|
|
||||||
|
package jsonpb
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"math"
|
||||||
|
"reflect"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/golang/protobuf/proto"
|
||||||
|
"google.golang.org/protobuf/encoding/protojson"
|
||||||
|
protoV2 "google.golang.org/protobuf/proto"
|
||||||
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
|
"google.golang.org/protobuf/reflect/protoregistry"
|
||||||
|
)
|
||||||
|
|
||||||
|
const wrapJSONUnmarshalV2 = false
|
||||||
|
|
||||||
|
// UnmarshalNext unmarshals the next JSON object from d into m.
|
||||||
|
func UnmarshalNext(d *json.Decoder, m proto.Message) error {
|
||||||
|
return new(Unmarshaler).UnmarshalNext(d, m)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unmarshal unmarshals a JSON object from r into m.
|
||||||
|
func Unmarshal(r io.Reader, m proto.Message) error {
|
||||||
|
return new(Unmarshaler).Unmarshal(r, m)
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalString unmarshals a JSON object from s into m.
|
||||||
|
func UnmarshalString(s string, m proto.Message) error {
|
||||||
|
return new(Unmarshaler).Unmarshal(strings.NewReader(s), m)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unmarshaler is a configurable object for converting from a JSON
|
||||||
|
// representation to a protocol buffer object.
|
||||||
|
type Unmarshaler struct {
|
||||||
|
// AllowUnknownFields specifies whether to allow messages to contain
|
||||||
|
// unknown JSON fields, as opposed to failing to unmarshal.
|
||||||
|
AllowUnknownFields bool
|
||||||
|
|
||||||
|
// AnyResolver is used to resolve the google.protobuf.Any well-known type.
|
||||||
|
// If unset, the global registry is used by default.
|
||||||
|
AnyResolver AnyResolver
|
||||||
|
}
|
||||||
|
|
||||||
|
// JSONPBUnmarshaler is implemented by protobuf messages that customize the way
|
||||||
|
// they are unmarshaled from JSON. Messages that implement this should also
|
||||||
|
// implement JSONPBMarshaler so that the custom format can be produced.
|
||||||
|
//
|
||||||
|
// The JSON unmarshaling must follow the JSON to proto specification:
|
||||||
|
// https://developers.google.com/protocol-buffers/docs/proto3#json
|
||||||
|
//
|
||||||
|
// Deprecated: Custom types should implement protobuf reflection instead.
|
||||||
|
type JSONPBUnmarshaler interface {
|
||||||
|
UnmarshalJSONPB(*Unmarshaler, []byte) error
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unmarshal unmarshals a JSON object from r into m.
|
||||||
|
func (u *Unmarshaler) Unmarshal(r io.Reader, m proto.Message) error {
|
||||||
|
return u.UnmarshalNext(json.NewDecoder(r), m)
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalNext unmarshals the next JSON object from d into m.
|
||||||
|
func (u *Unmarshaler) UnmarshalNext(d *json.Decoder, m proto.Message) error {
|
||||||
|
if m == nil {
|
||||||
|
return errors.New("invalid nil message")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parse the next JSON object from the stream.
|
||||||
|
raw := json.RawMessage{}
|
||||||
|
if err := d.Decode(&raw); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for custom unmarshalers first since they may not properly
|
||||||
|
// implement protobuf reflection that the logic below relies on.
|
||||||
|
if jsu, ok := m.(JSONPBUnmarshaler); ok {
|
||||||
|
return jsu.UnmarshalJSONPB(u, raw)
|
||||||
|
}
|
||||||
|
|
||||||
|
mr := proto.MessageReflect(m)
|
||||||
|
|
||||||
|
// NOTE: For historical reasons, a top-level null is treated as a noop.
|
||||||
|
// This is incorrect, but kept for compatibility.
|
||||||
|
if string(raw) == "null" && mr.Descriptor().FullName() != "google.protobuf.Value" {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if wrapJSONUnmarshalV2 {
|
||||||
|
// NOTE: If input message is non-empty, we need to preserve merge semantics
|
||||||
|
// of the old jsonpb implementation. These semantics are not supported by
|
||||||
|
// the protobuf JSON specification.
|
||||||
|
isEmpty := true
|
||||||
|
mr.Range(func(protoreflect.FieldDescriptor, protoreflect.Value) bool {
|
||||||
|
isEmpty = false // at least one iteration implies non-empty
|
||||||
|
return false
|
||||||
|
})
|
||||||
|
if !isEmpty {
|
||||||
|
// Perform unmarshaling into a newly allocated, empty message.
|
||||||
|
mr = mr.New()
|
||||||
|
|
||||||
|
// Use a defer to copy all unmarshaled fields into the original message.
|
||||||
|
dst := proto.MessageReflect(m)
|
||||||
|
defer mr.Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool {
|
||||||
|
dst.Set(fd, v)
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unmarshal using the v2 JSON unmarshaler.
|
||||||
|
opts := protojson.UnmarshalOptions{
|
||||||
|
DiscardUnknown: u.AllowUnknownFields,
|
||||||
|
}
|
||||||
|
if u.AnyResolver != nil {
|
||||||
|
opts.Resolver = anyResolver{u.AnyResolver}
|
||||||
|
}
|
||||||
|
return opts.Unmarshal(raw, mr.Interface())
|
||||||
|
} else {
|
||||||
|
if err := u.unmarshalMessage(mr, raw); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return protoV2.CheckInitialized(mr.Interface())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (u *Unmarshaler) unmarshalMessage(m protoreflect.Message, in []byte) error {
|
||||||
|
md := m.Descriptor()
|
||||||
|
fds := md.Fields()
|
||||||
|
|
||||||
|
if jsu, ok := proto.MessageV1(m.Interface()).(JSONPBUnmarshaler); ok {
|
||||||
|
return jsu.UnmarshalJSONPB(u, in)
|
||||||
|
}
|
||||||
|
|
||||||
|
if string(in) == "null" && md.FullName() != "google.protobuf.Value" {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
switch wellKnownType(md.FullName()) {
|
||||||
|
case "Any":
|
||||||
|
var jsonObject map[string]json.RawMessage
|
||||||
|
if err := json.Unmarshal(in, &jsonObject); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
rawTypeURL, ok := jsonObject["@type"]
|
||||||
|
if !ok {
|
||||||
|
return errors.New("Any JSON doesn't have '@type'")
|
||||||
|
}
|
||||||
|
typeURL, err := unquoteString(string(rawTypeURL))
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("can't unmarshal Any's '@type': %q", rawTypeURL)
|
||||||
|
}
|
||||||
|
m.Set(fds.ByNumber(1), protoreflect.ValueOfString(typeURL))
|
||||||
|
|
||||||
|
var m2 protoreflect.Message
|
||||||
|
if u.AnyResolver != nil {
|
||||||
|
mi, err := u.AnyResolver.Resolve(typeURL)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
m2 = proto.MessageReflect(mi)
|
||||||
|
} else {
|
||||||
|
mt, err := protoregistry.GlobalTypes.FindMessageByURL(typeURL)
|
||||||
|
if err != nil {
|
||||||
|
if err == protoregistry.NotFound {
|
||||||
|
return fmt.Errorf("could not resolve Any message type: %v", typeURL)
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
m2 = mt.New()
|
||||||
|
}
|
||||||
|
|
||||||
|
if wellKnownType(m2.Descriptor().FullName()) != "" {
|
||||||
|
rawValue, ok := jsonObject["value"]
|
||||||
|
if !ok {
|
||||||
|
return errors.New("Any JSON doesn't have 'value'")
|
||||||
|
}
|
||||||
|
if err := u.unmarshalMessage(m2, rawValue); err != nil {
|
||||||
|
return fmt.Errorf("can't unmarshal Any nested proto %v: %v", typeURL, err)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
delete(jsonObject, "@type")
|
||||||
|
rawJSON, err := json.Marshal(jsonObject)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("can't generate JSON for Any's nested proto to be unmarshaled: %v", err)
|
||||||
|
}
|
||||||
|
if err = u.unmarshalMessage(m2, rawJSON); err != nil {
|
||||||
|
return fmt.Errorf("can't unmarshal Any nested proto %v: %v", typeURL, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rawWire, err := protoV2.Marshal(m2.Interface())
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("can't marshal proto %v into Any.Value: %v", typeURL, err)
|
||||||
|
}
|
||||||
|
m.Set(fds.ByNumber(2), protoreflect.ValueOfBytes(rawWire))
|
||||||
|
return nil
|
||||||
|
case "BoolValue", "BytesValue", "StringValue",
|
||||||
|
"Int32Value", "UInt32Value", "FloatValue",
|
||||||
|
"Int64Value", "UInt64Value", "DoubleValue":
|
||||||
|
fd := fds.ByNumber(1)
|
||||||
|
v, err := u.unmarshalValue(m.NewField(fd), in, fd)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
m.Set(fd, v)
|
||||||
|
return nil
|
||||||
|
case "Duration":
|
||||||
|
v, err := unquoteString(string(in))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
d, err := time.ParseDuration(v)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("bad Duration: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
sec := d.Nanoseconds() / 1e9
|
||||||
|
nsec := d.Nanoseconds() % 1e9
|
||||||
|
m.Set(fds.ByNumber(1), protoreflect.ValueOfInt64(int64(sec)))
|
||||||
|
m.Set(fds.ByNumber(2), protoreflect.ValueOfInt32(int32(nsec)))
|
||||||
|
return nil
|
||||||
|
case "Timestamp":
|
||||||
|
v, err := unquoteString(string(in))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
t, err := time.Parse(time.RFC3339Nano, v)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("bad Timestamp: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
sec := t.Unix()
|
||||||
|
nsec := t.Nanosecond()
|
||||||
|
m.Set(fds.ByNumber(1), protoreflect.ValueOfInt64(int64(sec)))
|
||||||
|
m.Set(fds.ByNumber(2), protoreflect.ValueOfInt32(int32(nsec)))
|
||||||
|
return nil
|
||||||
|
case "Value":
|
||||||
|
switch {
|
||||||
|
case string(in) == "null":
|
||||||
|
m.Set(fds.ByNumber(1), protoreflect.ValueOfEnum(0))
|
||||||
|
case string(in) == "true":
|
||||||
|
m.Set(fds.ByNumber(4), protoreflect.ValueOfBool(true))
|
||||||
|
case string(in) == "false":
|
||||||
|
m.Set(fds.ByNumber(4), protoreflect.ValueOfBool(false))
|
||||||
|
case hasPrefixAndSuffix('"', in, '"'):
|
||||||
|
s, err := unquoteString(string(in))
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("unrecognized type for Value %q", in)
|
||||||
|
}
|
||||||
|
m.Set(fds.ByNumber(3), protoreflect.ValueOfString(s))
|
||||||
|
case hasPrefixAndSuffix('[', in, ']'):
|
||||||
|
v := m.Mutable(fds.ByNumber(6))
|
||||||
|
return u.unmarshalMessage(v.Message(), in)
|
||||||
|
case hasPrefixAndSuffix('{', in, '}'):
|
||||||
|
v := m.Mutable(fds.ByNumber(5))
|
||||||
|
return u.unmarshalMessage(v.Message(), in)
|
||||||
|
default:
|
||||||
|
f, err := strconv.ParseFloat(string(in), 0)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("unrecognized type for Value %q", in)
|
||||||
|
}
|
||||||
|
m.Set(fds.ByNumber(2), protoreflect.ValueOfFloat64(f))
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
case "ListValue":
|
||||||
|
var jsonArray []json.RawMessage
|
||||||
|
if err := json.Unmarshal(in, &jsonArray); err != nil {
|
||||||
|
return fmt.Errorf("bad ListValue: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
lv := m.Mutable(fds.ByNumber(1)).List()
|
||||||
|
for _, raw := range jsonArray {
|
||||||
|
ve := lv.NewElement()
|
||||||
|
if err := u.unmarshalMessage(ve.Message(), raw); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
lv.Append(ve)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
case "Struct":
|
||||||
|
var jsonObject map[string]json.RawMessage
|
||||||
|
if err := json.Unmarshal(in, &jsonObject); err != nil {
|
||||||
|
return fmt.Errorf("bad StructValue: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
mv := m.Mutable(fds.ByNumber(1)).Map()
|
||||||
|
for key, raw := range jsonObject {
|
||||||
|
kv := protoreflect.ValueOf(key).MapKey()
|
||||||
|
vv := mv.NewValue()
|
||||||
|
if err := u.unmarshalMessage(vv.Message(), raw); err != nil {
|
||||||
|
return fmt.Errorf("bad value in StructValue for key %q: %v", key, err)
|
||||||
|
}
|
||||||
|
mv.Set(kv, vv)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var jsonObject map[string]json.RawMessage
|
||||||
|
if err := json.Unmarshal(in, &jsonObject); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle known fields.
|
||||||
|
for i := 0; i < fds.Len(); i++ {
|
||||||
|
fd := fds.Get(i)
|
||||||
|
if fd.IsWeak() && fd.Message().IsPlaceholder() {
|
||||||
|
continue // weak reference is not linked in
|
||||||
|
}
|
||||||
|
|
||||||
|
// Search for any raw JSON value associated with this field.
|
||||||
|
var raw json.RawMessage
|
||||||
|
name := string(fd.Name())
|
||||||
|
if fd.Kind() == protoreflect.GroupKind {
|
||||||
|
name = string(fd.Message().Name())
|
||||||
|
}
|
||||||
|
if v, ok := jsonObject[name]; ok {
|
||||||
|
delete(jsonObject, name)
|
||||||
|
raw = v
|
||||||
|
}
|
||||||
|
name = string(fd.JSONName())
|
||||||
|
if v, ok := jsonObject[name]; ok {
|
||||||
|
delete(jsonObject, name)
|
||||||
|
raw = v
|
||||||
|
}
|
||||||
|
|
||||||
|
field := m.NewField(fd)
|
||||||
|
// Unmarshal the field value.
|
||||||
|
if raw == nil || (string(raw) == "null" && !isSingularWellKnownValue(fd) && !isSingularJSONPBUnmarshaler(field, fd)) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
v, err := u.unmarshalValue(field, raw, fd)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
m.Set(fd, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle extension fields.
|
||||||
|
for name, raw := range jsonObject {
|
||||||
|
if !strings.HasPrefix(name, "[") || !strings.HasSuffix(name, "]") {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// Resolve the extension field by name.
|
||||||
|
xname := protoreflect.FullName(name[len("[") : len(name)-len("]")])
|
||||||
|
xt, _ := protoregistry.GlobalTypes.FindExtensionByName(xname)
|
||||||
|
if xt == nil && isMessageSet(md) {
|
||||||
|
xt, _ = protoregistry.GlobalTypes.FindExtensionByName(xname.Append("message_set_extension"))
|
||||||
|
}
|
||||||
|
if xt == nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
delete(jsonObject, name)
|
||||||
|
fd := xt.TypeDescriptor()
|
||||||
|
if fd.ContainingMessage().FullName() != m.Descriptor().FullName() {
|
||||||
|
return fmt.Errorf("extension field %q does not extend message %q", xname, m.Descriptor().FullName())
|
||||||
|
}
|
||||||
|
|
||||||
|
field := m.NewField(fd)
|
||||||
|
// Unmarshal the field value.
|
||||||
|
if raw == nil || (string(raw) == "null" && !isSingularWellKnownValue(fd) && !isSingularJSONPBUnmarshaler(field, fd)) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
v, err := u.unmarshalValue(field, raw, fd)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
m.Set(fd, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !u.AllowUnknownFields && len(jsonObject) > 0 {
|
||||||
|
for name := range jsonObject {
|
||||||
|
return fmt.Errorf("unknown field %q in %v", name, md.FullName())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func isSingularWellKnownValue(fd protoreflect.FieldDescriptor) bool {
|
||||||
|
if md := fd.Message(); md != nil {
|
||||||
|
return md.FullName() == "google.protobuf.Value" && fd.Cardinality() != protoreflect.Repeated
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func isSingularJSONPBUnmarshaler(v protoreflect.Value, fd protoreflect.FieldDescriptor) bool {
|
||||||
|
if fd.Message() != nil && fd.Cardinality() != protoreflect.Repeated {
|
||||||
|
_, ok := proto.MessageV1(v.Interface()).(JSONPBUnmarshaler)
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (u *Unmarshaler) unmarshalValue(v protoreflect.Value, in []byte, fd protoreflect.FieldDescriptor) (protoreflect.Value, error) {
|
||||||
|
switch {
|
||||||
|
case fd.IsList():
|
||||||
|
var jsonArray []json.RawMessage
|
||||||
|
if err := json.Unmarshal(in, &jsonArray); err != nil {
|
||||||
|
return v, err
|
||||||
|
}
|
||||||
|
lv := v.List()
|
||||||
|
for _, raw := range jsonArray {
|
||||||
|
ve, err := u.unmarshalSingularValue(lv.NewElement(), raw, fd)
|
||||||
|
if err != nil {
|
||||||
|
return v, err
|
||||||
|
}
|
||||||
|
lv.Append(ve)
|
||||||
|
}
|
||||||
|
return v, nil
|
||||||
|
case fd.IsMap():
|
||||||
|
var jsonObject map[string]json.RawMessage
|
||||||
|
if err := json.Unmarshal(in, &jsonObject); err != nil {
|
||||||
|
return v, err
|
||||||
|
}
|
||||||
|
kfd := fd.MapKey()
|
||||||
|
vfd := fd.MapValue()
|
||||||
|
mv := v.Map()
|
||||||
|
for key, raw := range jsonObject {
|
||||||
|
var kv protoreflect.MapKey
|
||||||
|
if kfd.Kind() == protoreflect.StringKind {
|
||||||
|
kv = protoreflect.ValueOf(key).MapKey()
|
||||||
|
} else {
|
||||||
|
v, err := u.unmarshalSingularValue(kfd.Default(), []byte(key), kfd)
|
||||||
|
if err != nil {
|
||||||
|
return v, err
|
||||||
|
}
|
||||||
|
kv = v.MapKey()
|
||||||
|
}
|
||||||
|
|
||||||
|
vv, err := u.unmarshalSingularValue(mv.NewValue(), raw, vfd)
|
||||||
|
if err != nil {
|
||||||
|
return v, err
|
||||||
|
}
|
||||||
|
mv.Set(kv, vv)
|
||||||
|
}
|
||||||
|
return v, nil
|
||||||
|
default:
|
||||||
|
return u.unmarshalSingularValue(v, in, fd)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var nonFinite = map[string]float64{
|
||||||
|
`"NaN"`: math.NaN(),
|
||||||
|
`"Infinity"`: math.Inf(+1),
|
||||||
|
`"-Infinity"`: math.Inf(-1),
|
||||||
|
}
|
||||||
|
|
||||||
|
func (u *Unmarshaler) unmarshalSingularValue(v protoreflect.Value, in []byte, fd protoreflect.FieldDescriptor) (protoreflect.Value, error) {
|
||||||
|
switch fd.Kind() {
|
||||||
|
case protoreflect.BoolKind:
|
||||||
|
return unmarshalValue(in, new(bool))
|
||||||
|
case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind:
|
||||||
|
return unmarshalValue(trimQuote(in), new(int32))
|
||||||
|
case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind:
|
||||||
|
return unmarshalValue(trimQuote(in), new(int64))
|
||||||
|
case protoreflect.Uint32Kind, protoreflect.Fixed32Kind:
|
||||||
|
return unmarshalValue(trimQuote(in), new(uint32))
|
||||||
|
case protoreflect.Uint64Kind, protoreflect.Fixed64Kind:
|
||||||
|
return unmarshalValue(trimQuote(in), new(uint64))
|
||||||
|
case protoreflect.FloatKind:
|
||||||
|
if f, ok := nonFinite[string(in)]; ok {
|
||||||
|
return protoreflect.ValueOfFloat32(float32(f)), nil
|
||||||
|
}
|
||||||
|
return unmarshalValue(trimQuote(in), new(float32))
|
||||||
|
case protoreflect.DoubleKind:
|
||||||
|
if f, ok := nonFinite[string(in)]; ok {
|
||||||
|
return protoreflect.ValueOfFloat64(float64(f)), nil
|
||||||
|
}
|
||||||
|
return unmarshalValue(trimQuote(in), new(float64))
|
||||||
|
case protoreflect.StringKind:
|
||||||
|
return unmarshalValue(in, new(string))
|
||||||
|
case protoreflect.BytesKind:
|
||||||
|
return unmarshalValue(in, new([]byte))
|
||||||
|
case protoreflect.EnumKind:
|
||||||
|
if hasPrefixAndSuffix('"', in, '"') {
|
||||||
|
vd := fd.Enum().Values().ByName(protoreflect.Name(trimQuote(in)))
|
||||||
|
if vd == nil {
|
||||||
|
return v, fmt.Errorf("unknown value %q for enum %s", in, fd.Enum().FullName())
|
||||||
|
}
|
||||||
|
return protoreflect.ValueOfEnum(vd.Number()), nil
|
||||||
|
}
|
||||||
|
return unmarshalValue(in, new(protoreflect.EnumNumber))
|
||||||
|
case protoreflect.MessageKind, protoreflect.GroupKind:
|
||||||
|
err := u.unmarshalMessage(v.Message(), in)
|
||||||
|
return v, err
|
||||||
|
default:
|
||||||
|
panic(fmt.Sprintf("invalid kind %v", fd.Kind()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func unmarshalValue(in []byte, v interface{}) (protoreflect.Value, error) {
|
||||||
|
err := json.Unmarshal(in, v)
|
||||||
|
return protoreflect.ValueOf(reflect.ValueOf(v).Elem().Interface()), err
|
||||||
|
}
|
||||||
|
|
||||||
|
func unquoteString(in string) (out string, err error) {
|
||||||
|
err = json.Unmarshal([]byte(in), &out)
|
||||||
|
return out, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func hasPrefixAndSuffix(prefix byte, in []byte, suffix byte) bool {
|
||||||
|
if len(in) >= 2 && in[0] == prefix && in[len(in)-1] == suffix {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// trimQuote is like unquoteString but simply strips surrounding quotes.
|
||||||
|
// This is incorrect, but is behavior done by the legacy implementation.
|
||||||
|
func trimQuote(in []byte) []byte {
|
||||||
|
if len(in) >= 2 && in[0] == '"' && in[len(in)-1] == '"' {
|
||||||
|
in = in[1 : len(in)-1]
|
||||||
|
}
|
||||||
|
return in
|
||||||
|
}
|
559
vendor/github.com/golang/protobuf/jsonpb/encode.go
generated
vendored
Normal file
559
vendor/github.com/golang/protobuf/jsonpb/encode.go
generated
vendored
Normal file
|
@ -0,0 +1,559 @@
|
||||||
|
// Copyright 2015 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.
|
||||||
|
|
||||||
|
package jsonpb
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"math"
|
||||||
|
"reflect"
|
||||||
|
"sort"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/golang/protobuf/proto"
|
||||||
|
"google.golang.org/protobuf/encoding/protojson"
|
||||||
|
protoV2 "google.golang.org/protobuf/proto"
|
||||||
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
|
"google.golang.org/protobuf/reflect/protoregistry"
|
||||||
|
)
|
||||||
|
|
||||||
|
const wrapJSONMarshalV2 = false
|
||||||
|
|
||||||
|
// Marshaler is a configurable object for marshaling protocol buffer messages
|
||||||
|
// to the specified JSON representation.
|
||||||
|
type Marshaler struct {
|
||||||
|
// OrigName specifies whether to use the original protobuf name for fields.
|
||||||
|
OrigName bool
|
||||||
|
|
||||||
|
// EnumsAsInts specifies whether to render enum values as integers,
|
||||||
|
// as opposed to string values.
|
||||||
|
EnumsAsInts bool
|
||||||
|
|
||||||
|
// EmitDefaults specifies whether to render fields with zero values.
|
||||||
|
EmitDefaults bool
|
||||||
|
|
||||||
|
// Indent controls whether the output is compact or not.
|
||||||
|
// If empty, the output is compact JSON. Otherwise, every JSON object
|
||||||
|
// entry and JSON array value will be on its own line.
|
||||||
|
// Each line will be preceded by repeated copies of Indent, where the
|
||||||
|
// number of copies is the current indentation depth.
|
||||||
|
Indent string
|
||||||
|
|
||||||
|
// AnyResolver is used to resolve the google.protobuf.Any well-known type.
|
||||||
|
// If unset, the global registry is used by default.
|
||||||
|
AnyResolver AnyResolver
|
||||||
|
}
|
||||||
|
|
||||||
|
// JSONPBMarshaler is implemented by protobuf messages that customize the
|
||||||
|
// way they are marshaled to JSON. Messages that implement this should also
|
||||||
|
// implement JSONPBUnmarshaler so that the custom format can be parsed.
|
||||||
|
//
|
||||||
|
// The JSON marshaling must follow the proto to JSON specification:
|
||||||
|
// https://developers.google.com/protocol-buffers/docs/proto3#json
|
||||||
|
//
|
||||||
|
// Deprecated: Custom types should implement protobuf reflection instead.
|
||||||
|
type JSONPBMarshaler interface {
|
||||||
|
MarshalJSONPB(*Marshaler) ([]byte, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Marshal serializes a protobuf message as JSON into w.
|
||||||
|
func (jm *Marshaler) Marshal(w io.Writer, m proto.Message) error {
|
||||||
|
b, err := jm.marshal(m)
|
||||||
|
if len(b) > 0 {
|
||||||
|
if _, err := w.Write(b); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarshalToString serializes a protobuf message as JSON in string form.
|
||||||
|
func (jm *Marshaler) MarshalToString(m proto.Message) (string, error) {
|
||||||
|
b, err := jm.marshal(m)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return string(b), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (jm *Marshaler) marshal(m proto.Message) ([]byte, error) {
|
||||||
|
v := reflect.ValueOf(m)
|
||||||
|
if m == nil || (v.Kind() == reflect.Ptr && v.IsNil()) {
|
||||||
|
return nil, errors.New("Marshal called with nil")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for custom marshalers first since they may not properly
|
||||||
|
// implement protobuf reflection that the logic below relies on.
|
||||||
|
if jsm, ok := m.(JSONPBMarshaler); ok {
|
||||||
|
return jsm.MarshalJSONPB(jm)
|
||||||
|
}
|
||||||
|
|
||||||
|
if wrapJSONMarshalV2 {
|
||||||
|
opts := protojson.MarshalOptions{
|
||||||
|
UseProtoNames: jm.OrigName,
|
||||||
|
UseEnumNumbers: jm.EnumsAsInts,
|
||||||
|
EmitUnpopulated: jm.EmitDefaults,
|
||||||
|
Indent: jm.Indent,
|
||||||
|
}
|
||||||
|
if jm.AnyResolver != nil {
|
||||||
|
opts.Resolver = anyResolver{jm.AnyResolver}
|
||||||
|
}
|
||||||
|
return opts.Marshal(proto.MessageReflect(m).Interface())
|
||||||
|
} else {
|
||||||
|
// Check for unpopulated required fields first.
|
||||||
|
m2 := proto.MessageReflect(m)
|
||||||
|
if err := protoV2.CheckInitialized(m2.Interface()); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
w := jsonWriter{Marshaler: jm}
|
||||||
|
err := w.marshalMessage(m2, "", "")
|
||||||
|
return w.buf, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type jsonWriter struct {
|
||||||
|
*Marshaler
|
||||||
|
buf []byte
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *jsonWriter) write(s string) {
|
||||||
|
w.buf = append(w.buf, s...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *jsonWriter) marshalMessage(m protoreflect.Message, indent, typeURL string) error {
|
||||||
|
if jsm, ok := proto.MessageV1(m.Interface()).(JSONPBMarshaler); ok {
|
||||||
|
b, err := jsm.MarshalJSONPB(w.Marshaler)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if typeURL != "" {
|
||||||
|
// we are marshaling this object to an Any type
|
||||||
|
var js map[string]*json.RawMessage
|
||||||
|
if err = json.Unmarshal(b, &js); err != nil {
|
||||||
|
return fmt.Errorf("type %T produced invalid JSON: %v", m.Interface(), err)
|
||||||
|
}
|
||||||
|
turl, err := json.Marshal(typeURL)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to marshal type URL %q to JSON: %v", typeURL, err)
|
||||||
|
}
|
||||||
|
js["@type"] = (*json.RawMessage)(&turl)
|
||||||
|
if b, err = json.Marshal(js); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
w.write(string(b))
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
md := m.Descriptor()
|
||||||
|
fds := md.Fields()
|
||||||
|
|
||||||
|
// Handle well-known types.
|
||||||
|
const secondInNanos = int64(time.Second / time.Nanosecond)
|
||||||
|
switch wellKnownType(md.FullName()) {
|
||||||
|
case "Any":
|
||||||
|
return w.marshalAny(m, indent)
|
||||||
|
case "BoolValue", "BytesValue", "StringValue",
|
||||||
|
"Int32Value", "UInt32Value", "FloatValue",
|
||||||
|
"Int64Value", "UInt64Value", "DoubleValue":
|
||||||
|
fd := fds.ByNumber(1)
|
||||||
|
return w.marshalValue(fd, m.Get(fd), indent)
|
||||||
|
case "Duration":
|
||||||
|
const maxSecondsInDuration = 315576000000
|
||||||
|
// "Generated output always contains 0, 3, 6, or 9 fractional digits,
|
||||||
|
// depending on required precision."
|
||||||
|
s := m.Get(fds.ByNumber(1)).Int()
|
||||||
|
ns := m.Get(fds.ByNumber(2)).Int()
|
||||||
|
if s < -maxSecondsInDuration || s > maxSecondsInDuration {
|
||||||
|
return fmt.Errorf("seconds out of range %v", s)
|
||||||
|
}
|
||||||
|
if ns <= -secondInNanos || ns >= secondInNanos {
|
||||||
|
return fmt.Errorf("ns out of range (%v, %v)", -secondInNanos, secondInNanos)
|
||||||
|
}
|
||||||
|
if (s > 0 && ns < 0) || (s < 0 && ns > 0) {
|
||||||
|
return errors.New("signs of seconds and nanos do not match")
|
||||||
|
}
|
||||||
|
var sign string
|
||||||
|
if s < 0 || ns < 0 {
|
||||||
|
sign, s, ns = "-", -1*s, -1*ns
|
||||||
|
}
|
||||||
|
x := fmt.Sprintf("%s%d.%09d", sign, s, ns)
|
||||||
|
x = strings.TrimSuffix(x, "000")
|
||||||
|
x = strings.TrimSuffix(x, "000")
|
||||||
|
x = strings.TrimSuffix(x, ".000")
|
||||||
|
w.write(fmt.Sprintf(`"%vs"`, x))
|
||||||
|
return nil
|
||||||
|
case "Timestamp":
|
||||||
|
// "RFC 3339, where generated output will always be Z-normalized
|
||||||
|
// and uses 0, 3, 6 or 9 fractional digits."
|
||||||
|
s := m.Get(fds.ByNumber(1)).Int()
|
||||||
|
ns := m.Get(fds.ByNumber(2)).Int()
|
||||||
|
if ns < 0 || ns >= secondInNanos {
|
||||||
|
return fmt.Errorf("ns out of range [0, %v)", secondInNanos)
|
||||||
|
}
|
||||||
|
t := time.Unix(s, ns).UTC()
|
||||||
|
// time.RFC3339Nano isn't exactly right (we need to get 3/6/9 fractional digits).
|
||||||
|
x := t.Format("2006-01-02T15:04:05.000000000")
|
||||||
|
x = strings.TrimSuffix(x, "000")
|
||||||
|
x = strings.TrimSuffix(x, "000")
|
||||||
|
x = strings.TrimSuffix(x, ".000")
|
||||||
|
w.write(fmt.Sprintf(`"%vZ"`, x))
|
||||||
|
return nil
|
||||||
|
case "Value":
|
||||||
|
// JSON value; which is a null, number, string, bool, object, or array.
|
||||||
|
od := md.Oneofs().Get(0)
|
||||||
|
fd := m.WhichOneof(od)
|
||||||
|
if fd == nil {
|
||||||
|
return errors.New("nil Value")
|
||||||
|
}
|
||||||
|
return w.marshalValue(fd, m.Get(fd), indent)
|
||||||
|
case "Struct", "ListValue":
|
||||||
|
// JSON object or array.
|
||||||
|
fd := fds.ByNumber(1)
|
||||||
|
return w.marshalValue(fd, m.Get(fd), indent)
|
||||||
|
}
|
||||||
|
|
||||||
|
w.write("{")
|
||||||
|
if w.Indent != "" {
|
||||||
|
w.write("\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
firstField := true
|
||||||
|
if typeURL != "" {
|
||||||
|
if err := w.marshalTypeURL(indent, typeURL); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
firstField = false
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := 0; i < fds.Len(); {
|
||||||
|
fd := fds.Get(i)
|
||||||
|
if od := fd.ContainingOneof(); od != nil {
|
||||||
|
fd = m.WhichOneof(od)
|
||||||
|
i += od.Fields().Len()
|
||||||
|
if fd == nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
i++
|
||||||
|
}
|
||||||
|
|
||||||
|
v := m.Get(fd)
|
||||||
|
|
||||||
|
if !m.Has(fd) {
|
||||||
|
if !w.EmitDefaults || fd.ContainingOneof() != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if fd.Cardinality() != protoreflect.Repeated && (fd.Message() != nil || fd.Syntax() == protoreflect.Proto2) {
|
||||||
|
v = protoreflect.Value{} // use "null" for singular messages or proto2 scalars
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if !firstField {
|
||||||
|
w.writeComma()
|
||||||
|
}
|
||||||
|
if err := w.marshalField(fd, v, indent); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
firstField = false
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle proto2 extensions.
|
||||||
|
if md.ExtensionRanges().Len() > 0 {
|
||||||
|
// Collect a sorted list of all extension descriptor and values.
|
||||||
|
type ext struct {
|
||||||
|
desc protoreflect.FieldDescriptor
|
||||||
|
val protoreflect.Value
|
||||||
|
}
|
||||||
|
var exts []ext
|
||||||
|
m.Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool {
|
||||||
|
if fd.IsExtension() {
|
||||||
|
exts = append(exts, ext{fd, v})
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
sort.Slice(exts, func(i, j int) bool {
|
||||||
|
return exts[i].desc.Number() < exts[j].desc.Number()
|
||||||
|
})
|
||||||
|
|
||||||
|
for _, ext := range exts {
|
||||||
|
if !firstField {
|
||||||
|
w.writeComma()
|
||||||
|
}
|
||||||
|
if err := w.marshalField(ext.desc, ext.val, indent); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
firstField = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if w.Indent != "" {
|
||||||
|
w.write("\n")
|
||||||
|
w.write(indent)
|
||||||
|
}
|
||||||
|
w.write("}")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *jsonWriter) writeComma() {
|
||||||
|
if w.Indent != "" {
|
||||||
|
w.write(",\n")
|
||||||
|
} else {
|
||||||
|
w.write(",")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *jsonWriter) marshalAny(m protoreflect.Message, indent string) error {
|
||||||
|
// "If the Any contains a value that has a special JSON mapping,
|
||||||
|
// it will be converted as follows: {"@type": xxx, "value": yyy}.
|
||||||
|
// Otherwise, the value will be converted into a JSON object,
|
||||||
|
// and the "@type" field will be inserted to indicate the actual data type."
|
||||||
|
md := m.Descriptor()
|
||||||
|
typeURL := m.Get(md.Fields().ByNumber(1)).String()
|
||||||
|
rawVal := m.Get(md.Fields().ByNumber(2)).Bytes()
|
||||||
|
|
||||||
|
var m2 protoreflect.Message
|
||||||
|
if w.AnyResolver != nil {
|
||||||
|
mi, err := w.AnyResolver.Resolve(typeURL)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
m2 = proto.MessageReflect(mi)
|
||||||
|
} else {
|
||||||
|
mt, err := protoregistry.GlobalTypes.FindMessageByURL(typeURL)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
m2 = mt.New()
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := protoV2.Unmarshal(rawVal, m2.Interface()); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if wellKnownType(m2.Descriptor().FullName()) == "" {
|
||||||
|
return w.marshalMessage(m2, indent, typeURL)
|
||||||
|
}
|
||||||
|
|
||||||
|
w.write("{")
|
||||||
|
if w.Indent != "" {
|
||||||
|
w.write("\n")
|
||||||
|
}
|
||||||
|
if err := w.marshalTypeURL(indent, typeURL); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
w.writeComma()
|
||||||
|
if w.Indent != "" {
|
||||||
|
w.write(indent)
|
||||||
|
w.write(w.Indent)
|
||||||
|
w.write(`"value": `)
|
||||||
|
} else {
|
||||||
|
w.write(`"value":`)
|
||||||
|
}
|
||||||
|
if err := w.marshalMessage(m2, indent+w.Indent, ""); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if w.Indent != "" {
|
||||||
|
w.write("\n")
|
||||||
|
w.write(indent)
|
||||||
|
}
|
||||||
|
w.write("}")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *jsonWriter) marshalTypeURL(indent, typeURL string) error {
|
||||||
|
if w.Indent != "" {
|
||||||
|
w.write(indent)
|
||||||
|
w.write(w.Indent)
|
||||||
|
}
|
||||||
|
w.write(`"@type":`)
|
||||||
|
if w.Indent != "" {
|
||||||
|
w.write(" ")
|
||||||
|
}
|
||||||
|
b, err := json.Marshal(typeURL)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
w.write(string(b))
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// marshalField writes field description and value to the Writer.
|
||||||
|
func (w *jsonWriter) marshalField(fd protoreflect.FieldDescriptor, v protoreflect.Value, indent string) error {
|
||||||
|
if w.Indent != "" {
|
||||||
|
w.write(indent)
|
||||||
|
w.write(w.Indent)
|
||||||
|
}
|
||||||
|
w.write(`"`)
|
||||||
|
switch {
|
||||||
|
case fd.IsExtension():
|
||||||
|
// For message set, use the fname of the message as the extension name.
|
||||||
|
name := string(fd.FullName())
|
||||||
|
if isMessageSet(fd.ContainingMessage()) {
|
||||||
|
name = strings.TrimSuffix(name, ".message_set_extension")
|
||||||
|
}
|
||||||
|
|
||||||
|
w.write("[" + name + "]")
|
||||||
|
case w.OrigName:
|
||||||
|
name := string(fd.Name())
|
||||||
|
if fd.Kind() == protoreflect.GroupKind {
|
||||||
|
name = string(fd.Message().Name())
|
||||||
|
}
|
||||||
|
w.write(name)
|
||||||
|
default:
|
||||||
|
w.write(string(fd.JSONName()))
|
||||||
|
}
|
||||||
|
w.write(`":`)
|
||||||
|
if w.Indent != "" {
|
||||||
|
w.write(" ")
|
||||||
|
}
|
||||||
|
return w.marshalValue(fd, v, indent)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *jsonWriter) marshalValue(fd protoreflect.FieldDescriptor, v protoreflect.Value, indent string) error {
|
||||||
|
switch {
|
||||||
|
case fd.IsList():
|
||||||
|
w.write("[")
|
||||||
|
comma := ""
|
||||||
|
lv := v.List()
|
||||||
|
for i := 0; i < lv.Len(); i++ {
|
||||||
|
w.write(comma)
|
||||||
|
if w.Indent != "" {
|
||||||
|
w.write("\n")
|
||||||
|
w.write(indent)
|
||||||
|
w.write(w.Indent)
|
||||||
|
w.write(w.Indent)
|
||||||
|
}
|
||||||
|
if err := w.marshalSingularValue(fd, lv.Get(i), indent+w.Indent); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
comma = ","
|
||||||
|
}
|
||||||
|
if w.Indent != "" {
|
||||||
|
w.write("\n")
|
||||||
|
w.write(indent)
|
||||||
|
w.write(w.Indent)
|
||||||
|
}
|
||||||
|
w.write("]")
|
||||||
|
return nil
|
||||||
|
case fd.IsMap():
|
||||||
|
kfd := fd.MapKey()
|
||||||
|
vfd := fd.MapValue()
|
||||||
|
mv := v.Map()
|
||||||
|
|
||||||
|
// Collect a sorted list of all map keys and values.
|
||||||
|
type entry struct{ key, val protoreflect.Value }
|
||||||
|
var entries []entry
|
||||||
|
mv.Range(func(k protoreflect.MapKey, v protoreflect.Value) bool {
|
||||||
|
entries = append(entries, entry{k.Value(), v})
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
sort.Slice(entries, func(i, j int) bool {
|
||||||
|
switch kfd.Kind() {
|
||||||
|
case protoreflect.BoolKind:
|
||||||
|
return !entries[i].key.Bool() && entries[j].key.Bool()
|
||||||
|
case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind, protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind:
|
||||||
|
return entries[i].key.Int() < entries[j].key.Int()
|
||||||
|
case protoreflect.Uint32Kind, protoreflect.Fixed32Kind, protoreflect.Uint64Kind, protoreflect.Fixed64Kind:
|
||||||
|
return entries[i].key.Uint() < entries[j].key.Uint()
|
||||||
|
case protoreflect.StringKind:
|
||||||
|
return entries[i].key.String() < entries[j].key.String()
|
||||||
|
default:
|
||||||
|
panic("invalid kind")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
w.write(`{`)
|
||||||
|
comma := ""
|
||||||
|
for _, entry := range entries {
|
||||||
|
w.write(comma)
|
||||||
|
if w.Indent != "" {
|
||||||
|
w.write("\n")
|
||||||
|
w.write(indent)
|
||||||
|
w.write(w.Indent)
|
||||||
|
w.write(w.Indent)
|
||||||
|
}
|
||||||
|
|
||||||
|
s := fmt.Sprint(entry.key.Interface())
|
||||||
|
b, err := json.Marshal(s)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
w.write(string(b))
|
||||||
|
|
||||||
|
w.write(`:`)
|
||||||
|
if w.Indent != "" {
|
||||||
|
w.write(` `)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := w.marshalSingularValue(vfd, entry.val, indent+w.Indent); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
comma = ","
|
||||||
|
}
|
||||||
|
if w.Indent != "" {
|
||||||
|
w.write("\n")
|
||||||
|
w.write(indent)
|
||||||
|
w.write(w.Indent)
|
||||||
|
}
|
||||||
|
w.write(`}`)
|
||||||
|
return nil
|
||||||
|
default:
|
||||||
|
return w.marshalSingularValue(fd, v, indent)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *jsonWriter) marshalSingularValue(fd protoreflect.FieldDescriptor, v protoreflect.Value, indent string) error {
|
||||||
|
switch {
|
||||||
|
case !v.IsValid():
|
||||||
|
w.write("null")
|
||||||
|
return nil
|
||||||
|
case fd.Message() != nil:
|
||||||
|
return w.marshalMessage(v.Message(), indent+w.Indent, "")
|
||||||
|
case fd.Enum() != nil:
|
||||||
|
if fd.Enum().FullName() == "google.protobuf.NullValue" {
|
||||||
|
w.write("null")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
vd := fd.Enum().Values().ByNumber(v.Enum())
|
||||||
|
if vd == nil || w.EnumsAsInts {
|
||||||
|
w.write(strconv.Itoa(int(v.Enum())))
|
||||||
|
} else {
|
||||||
|
w.write(`"` + string(vd.Name()) + `"`)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
default:
|
||||||
|
switch v.Interface().(type) {
|
||||||
|
case float32, float64:
|
||||||
|
switch {
|
||||||
|
case math.IsInf(v.Float(), +1):
|
||||||
|
w.write(`"Infinity"`)
|
||||||
|
return nil
|
||||||
|
case math.IsInf(v.Float(), -1):
|
||||||
|
w.write(`"-Infinity"`)
|
||||||
|
return nil
|
||||||
|
case math.IsNaN(v.Float()):
|
||||||
|
w.write(`"NaN"`)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
case int64, uint64:
|
||||||
|
w.write(fmt.Sprintf(`"%d"`, v.Interface()))
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
b, err := json.Marshal(v.Interface())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
w.write(string(b))
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
69
vendor/github.com/golang/protobuf/jsonpb/json.go
generated
vendored
Normal file
69
vendor/github.com/golang/protobuf/jsonpb/json.go
generated
vendored
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
// Copyright 2015 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.
|
||||||
|
|
||||||
|
// Package jsonpb provides functionality to marshal and unmarshal between a
|
||||||
|
// protocol buffer message and JSON. It follows the specification at
|
||||||
|
// https://developers.google.com/protocol-buffers/docs/proto3#json.
|
||||||
|
//
|
||||||
|
// Do not rely on the default behavior of the standard encoding/json package
|
||||||
|
// when called on generated message types as it does not operate correctly.
|
||||||
|
//
|
||||||
|
// Deprecated: Use the "google.golang.org/protobuf/encoding/protojson"
|
||||||
|
// package instead.
|
||||||
|
package jsonpb
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/golang/protobuf/proto"
|
||||||
|
"google.golang.org/protobuf/reflect/protoreflect"
|
||||||
|
"google.golang.org/protobuf/reflect/protoregistry"
|
||||||
|
"google.golang.org/protobuf/runtime/protoimpl"
|
||||||
|
)
|
||||||
|
|
||||||
|
// AnyResolver takes a type URL, present in an Any message,
|
||||||
|
// and resolves it into an instance of the associated message.
|
||||||
|
type AnyResolver interface {
|
||||||
|
Resolve(typeURL string) (proto.Message, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
type anyResolver struct{ AnyResolver }
|
||||||
|
|
||||||
|
func (r anyResolver) FindMessageByName(message protoreflect.FullName) (protoreflect.MessageType, error) {
|
||||||
|
return r.FindMessageByURL(string(message))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r anyResolver) FindMessageByURL(url string) (protoreflect.MessageType, error) {
|
||||||
|
m, err := r.Resolve(url)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return protoimpl.X.MessageTypeOf(m), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r anyResolver) FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error) {
|
||||||
|
return protoregistry.GlobalTypes.FindExtensionByName(field)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r anyResolver) FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error) {
|
||||||
|
return protoregistry.GlobalTypes.FindExtensionByNumber(message, field)
|
||||||
|
}
|
||||||
|
|
||||||
|
func wellKnownType(s protoreflect.FullName) string {
|
||||||
|
if s.Parent() == "google.protobuf" {
|
||||||
|
switch s.Name() {
|
||||||
|
case "Empty", "Any",
|
||||||
|
"BoolValue", "BytesValue", "StringValue",
|
||||||
|
"Int32Value", "UInt32Value", "FloatValue",
|
||||||
|
"Int64Value", "UInt64Value", "DoubleValue",
|
||||||
|
"Duration", "Timestamp",
|
||||||
|
"NullValue", "Struct", "Value", "ListValue":
|
||||||
|
return string(s.Name())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func isMessageSet(md protoreflect.MessageDescriptor) bool {
|
||||||
|
ms, ok := md.(interface{ IsMessageSet() bool })
|
||||||
|
return ok && ms.IsMessageSet()
|
||||||
|
}
|
1
vendor/github.com/urfave/cli/v2/.gitignore
generated
vendored
1
vendor/github.com/urfave/cli/v2/.gitignore
generated
vendored
|
@ -5,5 +5,6 @@ vendor
|
||||||
.idea
|
.idea
|
||||||
internal/*/built-example
|
internal/*/built-example
|
||||||
coverage.txt
|
coverage.txt
|
||||||
|
/.local/
|
||||||
|
|
||||||
*.exe
|
*.exe
|
||||||
|
|
20
vendor/github.com/urfave/cli/v2/README.md
generated
vendored
20
vendor/github.com/urfave/cli/v2/README.md
generated
vendored
|
@ -4,7 +4,7 @@ cli
|
||||||
[![GoDoc](https://godoc.org/github.com/urfave/cli?status.svg)](https://pkg.go.dev/github.com/urfave/cli/v2)
|
[![GoDoc](https://godoc.org/github.com/urfave/cli?status.svg)](https://pkg.go.dev/github.com/urfave/cli/v2)
|
||||||
[![codebeat](https://codebeat.co/badges/0a8f30aa-f975-404b-b878-5fab3ae1cc5f)](https://codebeat.co/projects/github-com-urfave-cli)
|
[![codebeat](https://codebeat.co/badges/0a8f30aa-f975-404b-b878-5fab3ae1cc5f)](https://codebeat.co/projects/github-com-urfave-cli)
|
||||||
[![Go Report Card](https://goreportcard.com/badge/urfave/cli)](https://goreportcard.com/report/urfave/cli)
|
[![Go Report Card](https://goreportcard.com/badge/urfave/cli)](https://goreportcard.com/report/urfave/cli)
|
||||||
[![codecov](https://codecov.io/gh/urfave/cli/branch/master/graph/badge.svg)](https://codecov.io/gh/urfave/cli)
|
[![codecov](https://codecov.io/gh/urfave/cli/branch/main/graph/badge.svg)](https://codecov.io/gh/urfave/cli)
|
||||||
|
|
||||||
cli is a simple, fast, and fun package for building command line apps in Go. The
|
cli is a simple, fast, and fun package for building command line apps in Go. The
|
||||||
goal is to enable developers to write fast and distributable command line
|
goal is to enable developers to write fast and distributable command line
|
||||||
|
@ -12,7 +12,7 @@ applications in an expressive way.
|
||||||
|
|
||||||
## Usage Documentation
|
## Usage Documentation
|
||||||
|
|
||||||
Usage documentation exists for each major version. Don't know what version you're on? You're probably using the version from the `master` branch, which is currently `v2`.
|
Usage documentation exists for each major version. Don't know what version you're on? You're probably using the version from the `main` branch, which is currently `v2`.
|
||||||
|
|
||||||
- `v2` - [./docs/v2/manual.md](./docs/v2/manual.md)
|
- `v2` - [./docs/v2/manual.md](./docs/v2/manual.md)
|
||||||
- `v1` - [./docs/v1/manual.md](./docs/v1/manual.md)
|
- `v1` - [./docs/v1/manual.md](./docs/v1/manual.md)
|
||||||
|
@ -30,7 +30,7 @@ Go Modules are required when using this package. [See the go blog guide on using
|
||||||
### Using `v2` releases
|
### Using `v2` releases
|
||||||
|
|
||||||
```
|
```
|
||||||
$ GO111MODULE=on go get github.com/urfave/cli/v2
|
$ go get github.com/urfave/cli/v2
|
||||||
```
|
```
|
||||||
|
|
||||||
```go
|
```go
|
||||||
|
@ -44,7 +44,7 @@ import (
|
||||||
### Using `v1` releases
|
### Using `v1` releases
|
||||||
|
|
||||||
```
|
```
|
||||||
$ GO111MODULE=on go get github.com/urfave/cli
|
$ go get github.com/urfave/cli
|
||||||
```
|
```
|
||||||
|
|
||||||
```go
|
```go
|
||||||
|
@ -55,6 +55,16 @@ import (
|
||||||
...
|
...
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Build tags
|
||||||
|
|
||||||
|
You can use the following build tags:
|
||||||
|
|
||||||
|
#### `urfave_cli_no_docs`
|
||||||
|
|
||||||
|
When set, this removes `ToMarkdown` and `ToMan` methods, so your application
|
||||||
|
won't be able to call those. This reduces the resulting binary size by about
|
||||||
|
300-400 KB (measured using Go 1.18.1 on Linux/amd64), due to less dependencies.
|
||||||
|
|
||||||
### GOPATH
|
### GOPATH
|
||||||
|
|
||||||
Make sure your `PATH` includes the `$GOPATH/bin` directory so your commands can
|
Make sure your `PATH` includes the `$GOPATH/bin` directory so your commands can
|
||||||
|
@ -67,4 +77,4 @@ export PATH=$PATH:$GOPATH/bin
|
||||||
|
|
||||||
cli is tested against multiple versions of Go on Linux, and against the latest
|
cli is tested against multiple versions of Go on Linux, and against the latest
|
||||||
released version of Go on OS X and Windows. This project uses Github Actions for
|
released version of Go on OS X and Windows. This project uses Github Actions for
|
||||||
builds. To see our currently supported go versions and platforms, look at the [./.github/workflows/cli.yml](https://github.com/urfave/cli/blob/master/.github/workflows/cli.yml).
|
builds. To see our currently supported go versions and platforms, look at the [./.github/workflows/cli.yml](https://github.com/urfave/cli/blob/main/.github/workflows/cli.yml).
|
||||||
|
|
92
vendor/github.com/urfave/cli/v2/app.go
generated
vendored
92
vendor/github.com/urfave/cli/v2/app.go
generated
vendored
|
@ -12,7 +12,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
changeLogURL = "https://github.com/urfave/cli/blob/master/docs/CHANGELOG.md"
|
changeLogURL = "https://github.com/urfave/cli/blob/main/docs/CHANGELOG.md"
|
||||||
appActionDeprecationURL = fmt.Sprintf("%s#deprecated-cli-app-action-signature", changeLogURL)
|
appActionDeprecationURL = fmt.Sprintf("%s#deprecated-cli-app-action-signature", changeLogURL)
|
||||||
contactSysadmin = "This is an error in the application. Please contact the distributor of this application if this is not you."
|
contactSysadmin = "This is an error in the application. Please contact the distributor of this application if this is not you."
|
||||||
errInvalidActionType = NewExitError("ERROR invalid Action type. "+
|
errInvalidActionType = NewExitError("ERROR invalid Action type. "+
|
||||||
|
@ -245,48 +245,48 @@ func (a *App) RunContext(ctx context.Context, arguments []string) (err error) {
|
||||||
|
|
||||||
err = parseIter(set, a, arguments[1:], shellComplete)
|
err = parseIter(set, a, arguments[1:], shellComplete)
|
||||||
nerr := normalizeFlags(a.Flags, set)
|
nerr := normalizeFlags(a.Flags, set)
|
||||||
context := NewContext(a, set, &Context{Context: ctx})
|
cCtx := NewContext(a, set, &Context{Context: ctx})
|
||||||
if nerr != nil {
|
if nerr != nil {
|
||||||
_, _ = fmt.Fprintln(a.Writer, nerr)
|
_, _ = fmt.Fprintln(a.Writer, nerr)
|
||||||
_ = ShowAppHelp(context)
|
_ = ShowAppHelp(cCtx)
|
||||||
return nerr
|
return nerr
|
||||||
}
|
}
|
||||||
context.shellComplete = shellComplete
|
cCtx.shellComplete = shellComplete
|
||||||
|
|
||||||
if checkCompletions(context) {
|
if checkCompletions(cCtx) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if a.OnUsageError != nil {
|
if a.OnUsageError != nil {
|
||||||
err := a.OnUsageError(context, err, false)
|
err := a.OnUsageError(cCtx, err, false)
|
||||||
a.handleExitCoder(context, err)
|
a.handleExitCoder(cCtx, err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
_, _ = fmt.Fprintf(a.Writer, "%s %s\n\n", "Incorrect Usage.", err.Error())
|
_, _ = fmt.Fprintf(a.Writer, "%s %s\n\n", "Incorrect Usage.", err.Error())
|
||||||
_ = ShowAppHelp(context)
|
_ = ShowAppHelp(cCtx)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if !a.HideHelp && checkHelp(context) {
|
if !a.HideHelp && checkHelp(cCtx) {
|
||||||
_ = ShowAppHelp(context)
|
_ = ShowAppHelp(cCtx)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if !a.HideVersion && checkVersion(context) {
|
if !a.HideVersion && checkVersion(cCtx) {
|
||||||
ShowVersion(context)
|
ShowVersion(cCtx)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
cerr := context.checkRequiredFlags(a.Flags)
|
cerr := cCtx.checkRequiredFlags(a.Flags)
|
||||||
if cerr != nil {
|
if cerr != nil {
|
||||||
_ = ShowAppHelp(context)
|
_ = ShowAppHelp(cCtx)
|
||||||
return cerr
|
return cerr
|
||||||
}
|
}
|
||||||
|
|
||||||
if a.After != nil {
|
if a.After != nil {
|
||||||
defer func() {
|
defer func() {
|
||||||
if afterErr := a.After(context); afterErr != nil {
|
if afterErr := a.After(cCtx); afterErr != nil {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = newMultiError(err, afterErr)
|
err = newMultiError(err, afterErr)
|
||||||
} else {
|
} else {
|
||||||
|
@ -297,20 +297,20 @@ func (a *App) RunContext(ctx context.Context, arguments []string) (err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if a.Before != nil {
|
if a.Before != nil {
|
||||||
beforeErr := a.Before(context)
|
beforeErr := a.Before(cCtx)
|
||||||
if beforeErr != nil {
|
if beforeErr != nil {
|
||||||
a.handleExitCoder(context, beforeErr)
|
a.handleExitCoder(cCtx, beforeErr)
|
||||||
err = beforeErr
|
err = beforeErr
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
args := context.Args()
|
args := cCtx.Args()
|
||||||
if args.Present() {
|
if args.Present() {
|
||||||
name := args.First()
|
name := args.First()
|
||||||
c := a.Command(name)
|
c := a.Command(name)
|
||||||
if c != nil {
|
if c != nil {
|
||||||
return c.Run(context)
|
return c.Run(cCtx)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -319,9 +319,9 @@ func (a *App) RunContext(ctx context.Context, arguments []string) (err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Run default Action
|
// Run default Action
|
||||||
err = a.Action(context)
|
err = a.Action(cCtx)
|
||||||
|
|
||||||
a.handleExitCoder(context, err)
|
a.handleExitCoder(cCtx, err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -359,55 +359,55 @@ func (a *App) RunAsSubcommand(ctx *Context) (err error) {
|
||||||
|
|
||||||
err = parseIter(set, a, ctx.Args().Tail(), ctx.shellComplete)
|
err = parseIter(set, a, ctx.Args().Tail(), ctx.shellComplete)
|
||||||
nerr := normalizeFlags(a.Flags, set)
|
nerr := normalizeFlags(a.Flags, set)
|
||||||
context := NewContext(a, set, ctx)
|
cCtx := NewContext(a, set, ctx)
|
||||||
|
|
||||||
if nerr != nil {
|
if nerr != nil {
|
||||||
_, _ = fmt.Fprintln(a.Writer, nerr)
|
_, _ = fmt.Fprintln(a.Writer, nerr)
|
||||||
_, _ = fmt.Fprintln(a.Writer)
|
_, _ = fmt.Fprintln(a.Writer)
|
||||||
if len(a.Commands) > 0 {
|
if len(a.Commands) > 0 {
|
||||||
_ = ShowSubcommandHelp(context)
|
_ = ShowSubcommandHelp(cCtx)
|
||||||
} else {
|
} else {
|
||||||
_ = ShowCommandHelp(ctx, context.Args().First())
|
_ = ShowCommandHelp(ctx, cCtx.Args().First())
|
||||||
}
|
}
|
||||||
return nerr
|
return nerr
|
||||||
}
|
}
|
||||||
|
|
||||||
if checkCompletions(context) {
|
if checkCompletions(cCtx) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if a.OnUsageError != nil {
|
if a.OnUsageError != nil {
|
||||||
err = a.OnUsageError(context, err, true)
|
err = a.OnUsageError(cCtx, err, true)
|
||||||
a.handleExitCoder(context, err)
|
a.handleExitCoder(cCtx, err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
_, _ = fmt.Fprintf(a.Writer, "%s %s\n\n", "Incorrect Usage.", err.Error())
|
_, _ = fmt.Fprintf(a.Writer, "%s %s\n\n", "Incorrect Usage.", err.Error())
|
||||||
_ = ShowSubcommandHelp(context)
|
_ = ShowSubcommandHelp(cCtx)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(a.Commands) > 0 {
|
if len(a.Commands) > 0 {
|
||||||
if checkSubcommandHelp(context) {
|
if checkSubcommandHelp(cCtx) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if checkCommandHelp(ctx, context.Args().First()) {
|
if checkCommandHelp(ctx, cCtx.Args().First()) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cerr := context.checkRequiredFlags(a.Flags)
|
cerr := cCtx.checkRequiredFlags(a.Flags)
|
||||||
if cerr != nil {
|
if cerr != nil {
|
||||||
_ = ShowSubcommandHelp(context)
|
_ = ShowSubcommandHelp(cCtx)
|
||||||
return cerr
|
return cerr
|
||||||
}
|
}
|
||||||
|
|
||||||
if a.After != nil {
|
if a.After != nil {
|
||||||
defer func() {
|
defer func() {
|
||||||
afterErr := a.After(context)
|
afterErr := a.After(cCtx)
|
||||||
if afterErr != nil {
|
if afterErr != nil {
|
||||||
a.handleExitCoder(context, err)
|
a.handleExitCoder(cCtx, err)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = newMultiError(err, afterErr)
|
err = newMultiError(err, afterErr)
|
||||||
} else {
|
} else {
|
||||||
|
@ -418,27 +418,27 @@ func (a *App) RunAsSubcommand(ctx *Context) (err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if a.Before != nil {
|
if a.Before != nil {
|
||||||
beforeErr := a.Before(context)
|
beforeErr := a.Before(cCtx)
|
||||||
if beforeErr != nil {
|
if beforeErr != nil {
|
||||||
a.handleExitCoder(context, beforeErr)
|
a.handleExitCoder(cCtx, beforeErr)
|
||||||
err = beforeErr
|
err = beforeErr
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
args := context.Args()
|
args := cCtx.Args()
|
||||||
if args.Present() {
|
if args.Present() {
|
||||||
name := args.First()
|
name := args.First()
|
||||||
c := a.Command(name)
|
c := a.Command(name)
|
||||||
if c != nil {
|
if c != nil {
|
||||||
return c.Run(context)
|
return c.Run(cCtx)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Run default Action
|
// Run default Action
|
||||||
err = a.Action(context)
|
err = a.Action(cCtx)
|
||||||
|
|
||||||
a.handleExitCoder(context, err)
|
a.handleExitCoder(cCtx, err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -498,9 +498,9 @@ func (a *App) appendCommand(c *Command) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) handleExitCoder(context *Context, err error) {
|
func (a *App) handleExitCoder(cCtx *Context, err error) {
|
||||||
if a.ExitErrHandler != nil {
|
if a.ExitErrHandler != nil {
|
||||||
a.ExitErrHandler(context, err)
|
a.ExitErrHandler(cCtx, err)
|
||||||
} else {
|
} else {
|
||||||
HandleExitCoder(err)
|
HandleExitCoder(err)
|
||||||
}
|
}
|
||||||
|
@ -525,14 +525,14 @@ func (a *Author) String() string {
|
||||||
// HandleAction attempts to figure out which Action signature was used. If
|
// HandleAction attempts to figure out which Action signature was used. If
|
||||||
// it's an ActionFunc or a func with the legacy signature for Action, the func
|
// it's an ActionFunc or a func with the legacy signature for Action, the func
|
||||||
// is run!
|
// is run!
|
||||||
func HandleAction(action interface{}, context *Context) (err error) {
|
func HandleAction(action interface{}, cCtx *Context) (err error) {
|
||||||
switch a := action.(type) {
|
switch a := action.(type) {
|
||||||
case ActionFunc:
|
case ActionFunc:
|
||||||
return a(context)
|
return a(cCtx)
|
||||||
case func(*Context) error:
|
case func(*Context) error:
|
||||||
return a(context)
|
return a(cCtx)
|
||||||
case func(*Context): // deprecated function signature
|
case func(*Context): // deprecated function signature
|
||||||
a(context)
|
a(cCtx)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
36
vendor/github.com/urfave/cli/v2/command.go
generated
vendored
36
vendor/github.com/urfave/cli/v2/command.go
generated
vendored
|
@ -105,39 +105,39 @@ func (c *Command) Run(ctx *Context) (err error) {
|
||||||
|
|
||||||
set, err := c.parseFlags(ctx.Args(), ctx.shellComplete)
|
set, err := c.parseFlags(ctx.Args(), ctx.shellComplete)
|
||||||
|
|
||||||
context := NewContext(ctx.App, set, ctx)
|
cCtx := NewContext(ctx.App, set, ctx)
|
||||||
context.Command = c
|
cCtx.Command = c
|
||||||
if checkCommandCompletions(context, c.Name) {
|
if checkCommandCompletions(cCtx, c.Name) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if c.OnUsageError != nil {
|
if c.OnUsageError != nil {
|
||||||
err = c.OnUsageError(context, err, false)
|
err = c.OnUsageError(cCtx, err, false)
|
||||||
context.App.handleExitCoder(context, err)
|
cCtx.App.handleExitCoder(cCtx, err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
_, _ = fmt.Fprintln(context.App.Writer, "Incorrect Usage:", err.Error())
|
_, _ = fmt.Fprintln(cCtx.App.Writer, "Incorrect Usage:", err.Error())
|
||||||
_, _ = fmt.Fprintln(context.App.Writer)
|
_, _ = fmt.Fprintln(cCtx.App.Writer)
|
||||||
_ = ShowCommandHelp(context, c.Name)
|
_ = ShowCommandHelp(cCtx, c.Name)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if checkCommandHelp(context, c.Name) {
|
if checkCommandHelp(cCtx, c.Name) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
cerr := context.checkRequiredFlags(c.Flags)
|
cerr := cCtx.checkRequiredFlags(c.Flags)
|
||||||
if cerr != nil {
|
if cerr != nil {
|
||||||
_ = ShowCommandHelp(context, c.Name)
|
_ = ShowCommandHelp(cCtx, c.Name)
|
||||||
return cerr
|
return cerr
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.After != nil {
|
if c.After != nil {
|
||||||
defer func() {
|
defer func() {
|
||||||
afterErr := c.After(context)
|
afterErr := c.After(cCtx)
|
||||||
if afterErr != nil {
|
if afterErr != nil {
|
||||||
context.App.handleExitCoder(context, err)
|
cCtx.App.handleExitCoder(cCtx, err)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = newMultiError(err, afterErr)
|
err = newMultiError(err, afterErr)
|
||||||
} else {
|
} else {
|
||||||
|
@ -148,9 +148,9 @@ func (c *Command) Run(ctx *Context) (err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.Before != nil {
|
if c.Before != nil {
|
||||||
err = c.Before(context)
|
err = c.Before(cCtx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
context.App.handleExitCoder(context, err)
|
cCtx.App.handleExitCoder(cCtx, err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -159,11 +159,11 @@ func (c *Command) Run(ctx *Context) (err error) {
|
||||||
c.Action = helpSubcommand.Action
|
c.Action = helpSubcommand.Action
|
||||||
}
|
}
|
||||||
|
|
||||||
context.Command = c
|
cCtx.Command = c
|
||||||
err = c.Action(context)
|
err = c.Action(cCtx)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
context.App.handleExitCoder(context, err)
|
cCtx.App.handleExitCoder(cCtx, err)
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
56
vendor/github.com/urfave/cli/v2/context.go
generated
vendored
56
vendor/github.com/urfave/cli/v2/context.go
generated
vendored
|
@ -40,18 +40,18 @@ func NewContext(app *App, set *flag.FlagSet, parentCtx *Context) *Context {
|
||||||
}
|
}
|
||||||
|
|
||||||
// NumFlags returns the number of flags set
|
// NumFlags returns the number of flags set
|
||||||
func (c *Context) NumFlags() int {
|
func (cCtx *Context) NumFlags() int {
|
||||||
return c.flagSet.NFlag()
|
return cCtx.flagSet.NFlag()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set sets a context flag to a value.
|
// Set sets a context flag to a value.
|
||||||
func (c *Context) Set(name, value string) error {
|
func (cCtx *Context) Set(name, value string) error {
|
||||||
return c.flagSet.Set(name, value)
|
return cCtx.flagSet.Set(name, value)
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsSet determines if the flag was actually set
|
// IsSet determines if the flag was actually set
|
||||||
func (c *Context) IsSet(name string) bool {
|
func (cCtx *Context) IsSet(name string) bool {
|
||||||
if fs := c.lookupFlagSet(name); fs != nil {
|
if fs := cCtx.lookupFlagSet(name); fs != nil {
|
||||||
isSet := false
|
isSet := false
|
||||||
fs.Visit(func(f *flag.Flag) {
|
fs.Visit(func(f *flag.Flag) {
|
||||||
if f.Name == name {
|
if f.Name == name {
|
||||||
|
@ -62,7 +62,7 @@ func (c *Context) IsSet(name string) bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
f := c.lookupFlag(name)
|
f := cCtx.lookupFlag(name)
|
||||||
if f == nil {
|
if f == nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
@ -74,28 +74,28 @@ func (c *Context) IsSet(name string) bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
// LocalFlagNames returns a slice of flag names used in this context.
|
// LocalFlagNames returns a slice of flag names used in this context.
|
||||||
func (c *Context) LocalFlagNames() []string {
|
func (cCtx *Context) LocalFlagNames() []string {
|
||||||
var names []string
|
var names []string
|
||||||
c.flagSet.Visit(makeFlagNameVisitor(&names))
|
cCtx.flagSet.Visit(makeFlagNameVisitor(&names))
|
||||||
return names
|
return names
|
||||||
}
|
}
|
||||||
|
|
||||||
// FlagNames returns a slice of flag names used by the this context and all of
|
// FlagNames returns a slice of flag names used by the this context and all of
|
||||||
// its parent contexts.
|
// its parent contexts.
|
||||||
func (c *Context) FlagNames() []string {
|
func (cCtx *Context) FlagNames() []string {
|
||||||
var names []string
|
var names []string
|
||||||
for _, ctx := range c.Lineage() {
|
for _, pCtx := range cCtx.Lineage() {
|
||||||
ctx.flagSet.Visit(makeFlagNameVisitor(&names))
|
pCtx.flagSet.Visit(makeFlagNameVisitor(&names))
|
||||||
}
|
}
|
||||||
return names
|
return names
|
||||||
}
|
}
|
||||||
|
|
||||||
// Lineage returns *this* context and all of its ancestor contexts in order from
|
// Lineage returns *this* context and all of its ancestor contexts in order from
|
||||||
// child to parent
|
// child to parent
|
||||||
func (c *Context) Lineage() []*Context {
|
func (cCtx *Context) Lineage() []*Context {
|
||||||
var lineage []*Context
|
var lineage []*Context
|
||||||
|
|
||||||
for cur := c; cur != nil; cur = cur.parentContext {
|
for cur := cCtx; cur != nil; cur = cur.parentContext {
|
||||||
lineage = append(lineage, cur)
|
lineage = append(lineage, cur)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -103,26 +103,26 @@ func (c *Context) Lineage() []*Context {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Value returns the value of the flag corresponding to `name`
|
// Value returns the value of the flag corresponding to `name`
|
||||||
func (c *Context) Value(name string) interface{} {
|
func (cCtx *Context) Value(name string) interface{} {
|
||||||
if fs := c.lookupFlagSet(name); fs != nil {
|
if fs := cCtx.lookupFlagSet(name); fs != nil {
|
||||||
return fs.Lookup(name).Value.(flag.Getter).Get()
|
return fs.Lookup(name).Value.(flag.Getter).Get()
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Args returns the command line arguments associated with the context.
|
// Args returns the command line arguments associated with the context.
|
||||||
func (c *Context) Args() Args {
|
func (cCtx *Context) Args() Args {
|
||||||
ret := args(c.flagSet.Args())
|
ret := args(cCtx.flagSet.Args())
|
||||||
return &ret
|
return &ret
|
||||||
}
|
}
|
||||||
|
|
||||||
// NArg returns the number of the command line arguments.
|
// NArg returns the number of the command line arguments.
|
||||||
func (c *Context) NArg() int {
|
func (cCtx *Context) NArg() int {
|
||||||
return c.Args().Len()
|
return cCtx.Args().Len()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ctx *Context) lookupFlag(name string) Flag {
|
func (cCtx *Context) lookupFlag(name string) Flag {
|
||||||
for _, c := range ctx.Lineage() {
|
for _, c := range cCtx.Lineage() {
|
||||||
if c.Command == nil {
|
if c.Command == nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
@ -136,8 +136,8 @@ func (ctx *Context) lookupFlag(name string) Flag {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ctx.App != nil {
|
if cCtx.App != nil {
|
||||||
for _, f := range ctx.App.Flags {
|
for _, f := range cCtx.App.Flags {
|
||||||
for _, n := range f.Names() {
|
for _, n := range f.Names() {
|
||||||
if n == name {
|
if n == name {
|
||||||
return f
|
return f
|
||||||
|
@ -149,8 +149,8 @@ func (ctx *Context) lookupFlag(name string) Flag {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ctx *Context) lookupFlagSet(name string) *flag.FlagSet {
|
func (cCtx *Context) lookupFlagSet(name string) *flag.FlagSet {
|
||||||
for _, c := range ctx.Lineage() {
|
for _, c := range cCtx.Lineage() {
|
||||||
if c.flagSet == nil {
|
if c.flagSet == nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
@ -162,7 +162,7 @@ func (ctx *Context) lookupFlagSet(name string) *flag.FlagSet {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (context *Context) checkRequiredFlags(flags []Flag) requiredFlagsErr {
|
func (cCtx *Context) checkRequiredFlags(flags []Flag) requiredFlagsErr {
|
||||||
var missingFlags []string
|
var missingFlags []string
|
||||||
for _, f := range flags {
|
for _, f := range flags {
|
||||||
if rf, ok := f.(RequiredFlag); ok && rf.IsRequired() {
|
if rf, ok := f.(RequiredFlag); ok && rf.IsRequired() {
|
||||||
|
@ -174,7 +174,7 @@ func (context *Context) checkRequiredFlags(flags []Flag) requiredFlagsErr {
|
||||||
flagName = key
|
flagName = key
|
||||||
}
|
}
|
||||||
|
|
||||||
if context.IsSet(strings.TrimSpace(key)) {
|
if cCtx.IsSet(strings.TrimSpace(key)) {
|
||||||
flagPresent = true
|
flagPresent = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
7
vendor/github.com/urfave/cli/v2/docs.go
generated
vendored
7
vendor/github.com/urfave/cli/v2/docs.go
generated
vendored
|
@ -1,3 +1,6 @@
|
||||||
|
//go:build !urfave_cli_no_docs
|
||||||
|
// +build !urfave_cli_no_docs
|
||||||
|
|
||||||
package cli
|
package cli
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
@ -80,14 +83,14 @@ func prepareCommands(commands []*Command, level int) []string {
|
||||||
usageText,
|
usageText,
|
||||||
)
|
)
|
||||||
|
|
||||||
flags := prepareArgsWithValues(command.Flags)
|
flags := prepareArgsWithValues(command.VisibleFlags())
|
||||||
if len(flags) > 0 {
|
if len(flags) > 0 {
|
||||||
prepared += fmt.Sprintf("\n%s", strings.Join(flags, "\n"))
|
prepared += fmt.Sprintf("\n%s", strings.Join(flags, "\n"))
|
||||||
}
|
}
|
||||||
|
|
||||||
coms = append(coms, prepared)
|
coms = append(coms, prepared)
|
||||||
|
|
||||||
// recursevly iterate subcommands
|
// recursively iterate subcommands
|
||||||
if len(command.Subcommands) > 0 {
|
if len(command.Subcommands) > 0 {
|
||||||
coms = append(
|
coms = append(
|
||||||
coms,
|
coms,
|
||||||
|
|
2
vendor/github.com/urfave/cli/v2/fish.go
generated
vendored
2
vendor/github.com/urfave/cli/v2/fish.go
generated
vendored
|
@ -95,7 +95,7 @@ func (a *App) prepareFishCommands(commands []*Command, allCommands *[]string, pr
|
||||||
completions = append(completions, completion.String())
|
completions = append(completions, completion.String())
|
||||||
completions = append(
|
completions = append(
|
||||||
completions,
|
completions,
|
||||||
a.prepareFishFlags(command.Flags, command.Names())...,
|
a.prepareFishFlags(command.VisibleFlags(), command.Names())...,
|
||||||
)
|
)
|
||||||
|
|
||||||
// recursevly iterate subcommands
|
// recursevly iterate subcommands
|
||||||
|
|
82
vendor/github.com/urfave/cli/v2/flag.go
generated
vendored
82
vendor/github.com/urfave/cli/v2/flag.go
generated
vendored
|
@ -5,7 +5,6 @@ import (
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"reflect"
|
|
||||||
"regexp"
|
"regexp"
|
||||||
"runtime"
|
"runtime"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
@ -117,6 +116,12 @@ type DocGenerationFlag interface {
|
||||||
// GetValue returns the flags value as string representation and an empty
|
// GetValue returns the flags value as string representation and an empty
|
||||||
// string if the flag takes no value at all.
|
// string if the flag takes no value at all.
|
||||||
GetValue() string
|
GetValue() string
|
||||||
|
|
||||||
|
// GetDefaultText returns the default text for this flag
|
||||||
|
GetDefaultText() string
|
||||||
|
|
||||||
|
// GetEnvVars returns the env vars for this flag
|
||||||
|
GetEnvVars() []string
|
||||||
}
|
}
|
||||||
|
|
||||||
// VisibleFlag is an interface that allows to check if a flag is visible
|
// VisibleFlag is an interface that allows to check if a flag is visible
|
||||||
|
@ -238,7 +243,7 @@ func prefixedNames(names []string, placeholder string) string {
|
||||||
|
|
||||||
func withEnvHint(envVars []string, str string) string {
|
func withEnvHint(envVars []string, str string) string {
|
||||||
envText := ""
|
envText := ""
|
||||||
if envVars != nil && len(envVars) > 0 {
|
if len(envVars) > 0 {
|
||||||
prefix := "$"
|
prefix := "$"
|
||||||
suffix := ""
|
suffix := ""
|
||||||
sep := ", $"
|
sep := ", $"
|
||||||
|
@ -267,17 +272,6 @@ func flagNames(name string, aliases []string) []string {
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
func flagStringSliceField(f Flag, name string) []string {
|
|
||||||
fv := flagValue(f)
|
|
||||||
field := fv.FieldByName(name)
|
|
||||||
|
|
||||||
if field.IsValid() {
|
|
||||||
return field.Interface().([]string)
|
|
||||||
}
|
|
||||||
|
|
||||||
return []string{}
|
|
||||||
}
|
|
||||||
|
|
||||||
func withFileHint(filePath, str string) string {
|
func withFileHint(filePath, str string) string {
|
||||||
fileText := ""
|
fileText := ""
|
||||||
if filePath != "" {
|
if filePath != "" {
|
||||||
|
@ -286,68 +280,34 @@ func withFileHint(filePath, str string) string {
|
||||||
return str + fileText
|
return str + fileText
|
||||||
}
|
}
|
||||||
|
|
||||||
func flagValue(f Flag) reflect.Value {
|
|
||||||
fv := reflect.ValueOf(f)
|
|
||||||
for fv.Kind() == reflect.Ptr {
|
|
||||||
fv = reflect.Indirect(fv)
|
|
||||||
}
|
|
||||||
return fv
|
|
||||||
}
|
|
||||||
|
|
||||||
func formatDefault(format string) string {
|
func formatDefault(format string) string {
|
||||||
return " (default: " + format + ")"
|
return " (default: " + format + ")"
|
||||||
}
|
}
|
||||||
|
|
||||||
func stringifyFlag(f Flag) string {
|
func stringifyFlag(f Flag) string {
|
||||||
fv := flagValue(f)
|
// enforce DocGeneration interface on flags to avoid reflection
|
||||||
|
df, ok := f.(DocGenerationFlag)
|
||||||
switch f := f.(type) {
|
if !ok {
|
||||||
case *IntSliceFlag:
|
return ""
|
||||||
return withEnvHint(flagStringSliceField(f, "EnvVars"),
|
|
||||||
stringifyIntSliceFlag(f))
|
|
||||||
case *Int64SliceFlag:
|
|
||||||
return withEnvHint(flagStringSliceField(f, "EnvVars"),
|
|
||||||
stringifyInt64SliceFlag(f))
|
|
||||||
case *Float64SliceFlag:
|
|
||||||
return withEnvHint(flagStringSliceField(f, "EnvVars"),
|
|
||||||
stringifyFloat64SliceFlag(f))
|
|
||||||
case *StringSliceFlag:
|
|
||||||
return withEnvHint(flagStringSliceField(f, "EnvVars"),
|
|
||||||
stringifyStringSliceFlag(f))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
placeholder, usage := unquoteUsage(fv.FieldByName("Usage").String())
|
placeholder, usage := unquoteUsage(df.GetUsage())
|
||||||
|
needsPlaceholder := df.TakesValue()
|
||||||
needsPlaceholder := false
|
|
||||||
defaultValueString := ""
|
|
||||||
val := fv.FieldByName("Value")
|
|
||||||
if val.IsValid() {
|
|
||||||
needsPlaceholder = val.Kind() != reflect.Bool
|
|
||||||
defaultValueString = fmt.Sprintf(formatDefault("%v"), val.Interface())
|
|
||||||
|
|
||||||
if val.Kind() == reflect.String && val.String() != "" {
|
|
||||||
defaultValueString = fmt.Sprintf(formatDefault("%q"), val.String())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
helpText := fv.FieldByName("DefaultText")
|
|
||||||
if helpText.IsValid() && helpText.String() != "" {
|
|
||||||
needsPlaceholder = val.Kind() != reflect.Bool
|
|
||||||
defaultValueString = fmt.Sprintf(formatDefault("%s"), helpText.String())
|
|
||||||
}
|
|
||||||
|
|
||||||
if defaultValueString == formatDefault("") {
|
|
||||||
defaultValueString = ""
|
|
||||||
}
|
|
||||||
|
|
||||||
if needsPlaceholder && placeholder == "" {
|
if needsPlaceholder && placeholder == "" {
|
||||||
placeholder = defaultPlaceholder
|
placeholder = defaultPlaceholder
|
||||||
}
|
}
|
||||||
|
|
||||||
|
defaultValueString := ""
|
||||||
|
|
||||||
|
if s := df.GetDefaultText(); s != "" {
|
||||||
|
defaultValueString = fmt.Sprintf(formatDefault("%s"), s)
|
||||||
|
}
|
||||||
|
|
||||||
usageWithDefault := strings.TrimSpace(usage + defaultValueString)
|
usageWithDefault := strings.TrimSpace(usage + defaultValueString)
|
||||||
|
|
||||||
return withEnvHint(flagStringSliceField(f, "EnvVars"),
|
return withEnvHint(df.GetEnvVars(),
|
||||||
fmt.Sprintf("%s\t%s", prefixedNames(f.Names(), placeholder), usageWithDefault))
|
fmt.Sprintf("%s\t%s", prefixedNames(df.Names(), placeholder), usageWithDefault))
|
||||||
}
|
}
|
||||||
|
|
||||||
func stringifyIntSliceFlag(f *IntSliceFlag) string {
|
func stringifyIntSliceFlag(f *IntSliceFlag) string {
|
||||||
|
|
17
vendor/github.com/urfave/cli/v2/flag_bool.go
generated
vendored
17
vendor/github.com/urfave/cli/v2/flag_bool.go
generated
vendored
|
@ -63,6 +63,19 @@ func (f *BoolFlag) IsVisible() bool {
|
||||||
return !f.Hidden
|
return !f.Hidden
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetDefaultText returns the default text for this flag
|
||||||
|
func (f *BoolFlag) GetDefaultText() string {
|
||||||
|
if f.DefaultText != "" {
|
||||||
|
return f.DefaultText
|
||||||
|
}
|
||||||
|
return fmt.Sprintf("%v", f.Value)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetEnvVars returns the env vars for this flag
|
||||||
|
func (f *BoolFlag) GetEnvVars() []string {
|
||||||
|
return f.EnvVars
|
||||||
|
}
|
||||||
|
|
||||||
// Apply populates the flag given the flag set and environment
|
// Apply populates the flag given the flag set and environment
|
||||||
func (f *BoolFlag) Apply(set *flag.FlagSet) error {
|
func (f *BoolFlag) Apply(set *flag.FlagSet) error {
|
||||||
if val, ok := flagFromEnvOrFile(f.EnvVars, f.FilePath); ok {
|
if val, ok := flagFromEnvOrFile(f.EnvVars, f.FilePath); ok {
|
||||||
|
@ -91,8 +104,8 @@ func (f *BoolFlag) Apply(set *flag.FlagSet) error {
|
||||||
|
|
||||||
// Bool looks up the value of a local BoolFlag, returns
|
// Bool looks up the value of a local BoolFlag, returns
|
||||||
// false if not found
|
// false if not found
|
||||||
func (c *Context) Bool(name string) bool {
|
func (cCtx *Context) Bool(name string) bool {
|
||||||
if fs := c.lookupFlagSet(name); fs != nil {
|
if fs := cCtx.lookupFlagSet(name); fs != nil {
|
||||||
return lookupBool(name, fs)
|
return lookupBool(name, fs)
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
|
|
17
vendor/github.com/urfave/cli/v2/flag_duration.go
generated
vendored
17
vendor/github.com/urfave/cli/v2/flag_duration.go
generated
vendored
|
@ -63,6 +63,19 @@ func (f *DurationFlag) IsVisible() bool {
|
||||||
return !f.Hidden
|
return !f.Hidden
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetDefaultText returns the default text for this flag
|
||||||
|
func (f *DurationFlag) GetDefaultText() string {
|
||||||
|
if f.DefaultText != "" {
|
||||||
|
return f.DefaultText
|
||||||
|
}
|
||||||
|
return f.GetValue()
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetEnvVars returns the env vars for this flag
|
||||||
|
func (f *DurationFlag) GetEnvVars() []string {
|
||||||
|
return f.EnvVars
|
||||||
|
}
|
||||||
|
|
||||||
// Apply populates the flag given the flag set and environment
|
// Apply populates the flag given the flag set and environment
|
||||||
func (f *DurationFlag) Apply(set *flag.FlagSet) error {
|
func (f *DurationFlag) Apply(set *flag.FlagSet) error {
|
||||||
if val, ok := flagFromEnvOrFile(f.EnvVars, f.FilePath); ok {
|
if val, ok := flagFromEnvOrFile(f.EnvVars, f.FilePath); ok {
|
||||||
|
@ -90,8 +103,8 @@ func (f *DurationFlag) Apply(set *flag.FlagSet) error {
|
||||||
|
|
||||||
// Duration looks up the value of a local DurationFlag, returns
|
// Duration looks up the value of a local DurationFlag, returns
|
||||||
// 0 if not found
|
// 0 if not found
|
||||||
func (c *Context) Duration(name string) time.Duration {
|
func (cCtx *Context) Duration(name string) time.Duration {
|
||||||
if fs := c.lookupFlagSet(name); fs != nil {
|
if fs := cCtx.lookupFlagSet(name); fs != nil {
|
||||||
return lookupDuration(name, fs)
|
return lookupDuration(name, fs)
|
||||||
}
|
}
|
||||||
return 0
|
return 0
|
||||||
|
|
19
vendor/github.com/urfave/cli/v2/flag_float64.go
generated
vendored
19
vendor/github.com/urfave/cli/v2/flag_float64.go
generated
vendored
|
@ -55,7 +55,20 @@ func (f *Float64Flag) GetUsage() string {
|
||||||
// GetValue returns the flags value as string representation and an empty
|
// GetValue returns the flags value as string representation and an empty
|
||||||
// string if the flag takes no value at all.
|
// string if the flag takes no value at all.
|
||||||
func (f *Float64Flag) GetValue() string {
|
func (f *Float64Flag) GetValue() string {
|
||||||
return fmt.Sprintf("%f", f.Value)
|
return fmt.Sprintf("%v", f.Value)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetDefaultText returns the default text for this flag
|
||||||
|
func (f *Float64Flag) GetDefaultText() string {
|
||||||
|
if f.DefaultText != "" {
|
||||||
|
return f.DefaultText
|
||||||
|
}
|
||||||
|
return f.GetValue()
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetEnvVars returns the env vars for this flag
|
||||||
|
func (f *Float64Flag) GetEnvVars() []string {
|
||||||
|
return f.EnvVars
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsVisible returns true if the flag is not hidden, otherwise false
|
// IsVisible returns true if the flag is not hidden, otherwise false
|
||||||
|
@ -90,8 +103,8 @@ func (f *Float64Flag) Apply(set *flag.FlagSet) error {
|
||||||
|
|
||||||
// Float64 looks up the value of a local Float64Flag, returns
|
// Float64 looks up the value of a local Float64Flag, returns
|
||||||
// 0 if not found
|
// 0 if not found
|
||||||
func (c *Context) Float64(name string) float64 {
|
func (cCtx *Context) Float64(name string) float64 {
|
||||||
if fs := c.lookupFlagSet(name); fs != nil {
|
if fs := cCtx.lookupFlagSet(name); fs != nil {
|
||||||
return lookupFloat64(name, fs)
|
return lookupFloat64(name, fs)
|
||||||
}
|
}
|
||||||
return 0
|
return 0
|
||||||
|
|
19
vendor/github.com/urfave/cli/v2/flag_float64_slice.go
generated
vendored
19
vendor/github.com/urfave/cli/v2/flag_float64_slice.go
generated
vendored
|
@ -95,7 +95,7 @@ func (f *Float64SliceFlag) IsSet() bool {
|
||||||
// String returns a readable representation of this value
|
// String returns a readable representation of this value
|
||||||
// (for usage defaults)
|
// (for usage defaults)
|
||||||
func (f *Float64SliceFlag) String() string {
|
func (f *Float64SliceFlag) String() string {
|
||||||
return FlagStringer(f)
|
return withEnvHint(f.GetEnvVars(), stringifyFloat64SliceFlag(f))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Names returns the names of the flag
|
// Names returns the names of the flag
|
||||||
|
@ -132,6 +132,19 @@ func (f *Float64SliceFlag) IsVisible() bool {
|
||||||
return !f.Hidden
|
return !f.Hidden
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetDefaultText returns the default text for this flag
|
||||||
|
func (f *Float64SliceFlag) GetDefaultText() string {
|
||||||
|
if f.DefaultText != "" {
|
||||||
|
return f.DefaultText
|
||||||
|
}
|
||||||
|
return f.GetValue()
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetEnvVars returns the env vars for this flag
|
||||||
|
func (f *Float64SliceFlag) GetEnvVars() []string {
|
||||||
|
return f.EnvVars
|
||||||
|
}
|
||||||
|
|
||||||
// Apply populates the flag given the flag set and environment
|
// Apply populates the flag given the flag set and environment
|
||||||
func (f *Float64SliceFlag) Apply(set *flag.FlagSet) error {
|
func (f *Float64SliceFlag) Apply(set *flag.FlagSet) error {
|
||||||
if val, ok := flagFromEnvOrFile(f.EnvVars, f.FilePath); ok {
|
if val, ok := flagFromEnvOrFile(f.EnvVars, f.FilePath); ok {
|
||||||
|
@ -164,8 +177,8 @@ func (f *Float64SliceFlag) Apply(set *flag.FlagSet) error {
|
||||||
|
|
||||||
// Float64Slice looks up the value of a local Float64SliceFlag, returns
|
// Float64Slice looks up the value of a local Float64SliceFlag, returns
|
||||||
// nil if not found
|
// nil if not found
|
||||||
func (c *Context) Float64Slice(name string) []float64 {
|
func (cCtx *Context) Float64Slice(name string) []float64 {
|
||||||
if fs := c.lookupFlagSet(name); fs != nil {
|
if fs := cCtx.lookupFlagSet(name); fs != nil {
|
||||||
return lookupFloat64Slice(name, fs)
|
return lookupFloat64Slice(name, fs)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|
17
vendor/github.com/urfave/cli/v2/flag_generic.go
generated
vendored
17
vendor/github.com/urfave/cli/v2/flag_generic.go
generated
vendored
|
@ -71,6 +71,19 @@ func (f *GenericFlag) IsVisible() bool {
|
||||||
return !f.Hidden
|
return !f.Hidden
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetDefaultText returns the default text for this flag
|
||||||
|
func (f *GenericFlag) GetDefaultText() string {
|
||||||
|
if f.DefaultText != "" {
|
||||||
|
return f.DefaultText
|
||||||
|
}
|
||||||
|
return f.GetValue()
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetEnvVars returns the env vars for this flag
|
||||||
|
func (f *GenericFlag) GetEnvVars() []string {
|
||||||
|
return f.EnvVars
|
||||||
|
}
|
||||||
|
|
||||||
// Apply takes the flagset and calls Set on the generic flag with the value
|
// Apply takes the flagset and calls Set on the generic flag with the value
|
||||||
// provided by the user for parsing by the flag
|
// provided by the user for parsing by the flag
|
||||||
func (f GenericFlag) Apply(set *flag.FlagSet) error {
|
func (f GenericFlag) Apply(set *flag.FlagSet) error {
|
||||||
|
@ -93,8 +106,8 @@ func (f GenericFlag) Apply(set *flag.FlagSet) error {
|
||||||
|
|
||||||
// Generic looks up the value of a local GenericFlag, returns
|
// Generic looks up the value of a local GenericFlag, returns
|
||||||
// nil if not found
|
// nil if not found
|
||||||
func (c *Context) Generic(name string) interface{} {
|
func (cCtx *Context) Generic(name string) interface{} {
|
||||||
if fs := c.lookupFlagSet(name); fs != nil {
|
if fs := cCtx.lookupFlagSet(name); fs != nil {
|
||||||
return lookupGeneric(name, fs)
|
return lookupGeneric(name, fs)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|
17
vendor/github.com/urfave/cli/v2/flag_int.go
generated
vendored
17
vendor/github.com/urfave/cli/v2/flag_int.go
generated
vendored
|
@ -63,6 +63,19 @@ func (f *IntFlag) IsVisible() bool {
|
||||||
return !f.Hidden
|
return !f.Hidden
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetDefaultText returns the default text for this flag
|
||||||
|
func (f *IntFlag) GetDefaultText() string {
|
||||||
|
if f.DefaultText != "" {
|
||||||
|
return f.DefaultText
|
||||||
|
}
|
||||||
|
return f.GetValue()
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetEnvVars returns the env vars for this flag
|
||||||
|
func (f *IntFlag) GetEnvVars() []string {
|
||||||
|
return f.EnvVars
|
||||||
|
}
|
||||||
|
|
||||||
// Apply populates the flag given the flag set and environment
|
// Apply populates the flag given the flag set and environment
|
||||||
func (f *IntFlag) Apply(set *flag.FlagSet) error {
|
func (f *IntFlag) Apply(set *flag.FlagSet) error {
|
||||||
if val, ok := flagFromEnvOrFile(f.EnvVars, f.FilePath); ok {
|
if val, ok := flagFromEnvOrFile(f.EnvVars, f.FilePath); ok {
|
||||||
|
@ -91,8 +104,8 @@ func (f *IntFlag) Apply(set *flag.FlagSet) error {
|
||||||
|
|
||||||
// Int looks up the value of a local IntFlag, returns
|
// Int looks up the value of a local IntFlag, returns
|
||||||
// 0 if not found
|
// 0 if not found
|
||||||
func (c *Context) Int(name string) int {
|
func (cCtx *Context) Int(name string) int {
|
||||||
if fs := c.lookupFlagSet(name); fs != nil {
|
if fs := cCtx.lookupFlagSet(name); fs != nil {
|
||||||
return lookupInt(name, fs)
|
return lookupInt(name, fs)
|
||||||
}
|
}
|
||||||
return 0
|
return 0
|
||||||
|
|
17
vendor/github.com/urfave/cli/v2/flag_int64.go
generated
vendored
17
vendor/github.com/urfave/cli/v2/flag_int64.go
generated
vendored
|
@ -63,6 +63,19 @@ func (f *Int64Flag) IsVisible() bool {
|
||||||
return !f.Hidden
|
return !f.Hidden
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetDefaultText returns the default text for this flag
|
||||||
|
func (f *Int64Flag) GetDefaultText() string {
|
||||||
|
if f.DefaultText != "" {
|
||||||
|
return f.DefaultText
|
||||||
|
}
|
||||||
|
return f.GetValue()
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetEnvVars returns the env vars for this flag
|
||||||
|
func (f *Int64Flag) GetEnvVars() []string {
|
||||||
|
return f.EnvVars
|
||||||
|
}
|
||||||
|
|
||||||
// Apply populates the flag given the flag set and environment
|
// Apply populates the flag given the flag set and environment
|
||||||
func (f *Int64Flag) Apply(set *flag.FlagSet) error {
|
func (f *Int64Flag) Apply(set *flag.FlagSet) error {
|
||||||
if val, ok := flagFromEnvOrFile(f.EnvVars, f.FilePath); ok {
|
if val, ok := flagFromEnvOrFile(f.EnvVars, f.FilePath); ok {
|
||||||
|
@ -90,8 +103,8 @@ func (f *Int64Flag) Apply(set *flag.FlagSet) error {
|
||||||
|
|
||||||
// Int64 looks up the value of a local Int64Flag, returns
|
// Int64 looks up the value of a local Int64Flag, returns
|
||||||
// 0 if not found
|
// 0 if not found
|
||||||
func (c *Context) Int64(name string) int64 {
|
func (cCtx *Context) Int64(name string) int64 {
|
||||||
if fs := c.lookupFlagSet(name); fs != nil {
|
if fs := cCtx.lookupFlagSet(name); fs != nil {
|
||||||
return lookupInt64(name, fs)
|
return lookupInt64(name, fs)
|
||||||
}
|
}
|
||||||
return 0
|
return 0
|
||||||
|
|
19
vendor/github.com/urfave/cli/v2/flag_int64_slice.go
generated
vendored
19
vendor/github.com/urfave/cli/v2/flag_int64_slice.go
generated
vendored
|
@ -96,7 +96,7 @@ func (f *Int64SliceFlag) IsSet() bool {
|
||||||
// String returns a readable representation of this value
|
// String returns a readable representation of this value
|
||||||
// (for usage defaults)
|
// (for usage defaults)
|
||||||
func (f *Int64SliceFlag) String() string {
|
func (f *Int64SliceFlag) String() string {
|
||||||
return FlagStringer(f)
|
return withEnvHint(f.GetEnvVars(), stringifyInt64SliceFlag(f))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Names returns the names of the flag
|
// Names returns the names of the flag
|
||||||
|
@ -133,6 +133,19 @@ func (f *Int64SliceFlag) IsVisible() bool {
|
||||||
return !f.Hidden
|
return !f.Hidden
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetDefaultText returns the default text for this flag
|
||||||
|
func (f *Int64SliceFlag) GetDefaultText() string {
|
||||||
|
if f.DefaultText != "" {
|
||||||
|
return f.DefaultText
|
||||||
|
}
|
||||||
|
return f.GetValue()
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetEnvVars returns the env vars for this flag
|
||||||
|
func (f *Int64SliceFlag) GetEnvVars() []string {
|
||||||
|
return f.EnvVars
|
||||||
|
}
|
||||||
|
|
||||||
// Apply populates the flag given the flag set and environment
|
// Apply populates the flag given the flag set and environment
|
||||||
func (f *Int64SliceFlag) Apply(set *flag.FlagSet) error {
|
func (f *Int64SliceFlag) Apply(set *flag.FlagSet) error {
|
||||||
if val, ok := flagFromEnvOrFile(f.EnvVars, f.FilePath); ok {
|
if val, ok := flagFromEnvOrFile(f.EnvVars, f.FilePath); ok {
|
||||||
|
@ -163,8 +176,8 @@ func (f *Int64SliceFlag) Apply(set *flag.FlagSet) error {
|
||||||
|
|
||||||
// Int64Slice looks up the value of a local Int64SliceFlag, returns
|
// Int64Slice looks up the value of a local Int64SliceFlag, returns
|
||||||
// nil if not found
|
// nil if not found
|
||||||
func (c *Context) Int64Slice(name string) []int64 {
|
func (cCtx *Context) Int64Slice(name string) []int64 {
|
||||||
if fs := c.lookupFlagSet(name); fs != nil {
|
if fs := cCtx.lookupFlagSet(name); fs != nil {
|
||||||
return lookupInt64Slice(name, fs)
|
return lookupInt64Slice(name, fs)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|
19
vendor/github.com/urfave/cli/v2/flag_int_slice.go
generated
vendored
19
vendor/github.com/urfave/cli/v2/flag_int_slice.go
generated
vendored
|
@ -107,7 +107,7 @@ func (f *IntSliceFlag) IsSet() bool {
|
||||||
// String returns a readable representation of this value
|
// String returns a readable representation of this value
|
||||||
// (for usage defaults)
|
// (for usage defaults)
|
||||||
func (f *IntSliceFlag) String() string {
|
func (f *IntSliceFlag) String() string {
|
||||||
return FlagStringer(f)
|
return withEnvHint(f.GetEnvVars(), stringifyIntSliceFlag(f))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Names returns the names of the flag
|
// Names returns the names of the flag
|
||||||
|
@ -144,6 +144,19 @@ func (f *IntSliceFlag) IsVisible() bool {
|
||||||
return !f.Hidden
|
return !f.Hidden
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetDefaultText returns the default text for this flag
|
||||||
|
func (f *IntSliceFlag) GetDefaultText() string {
|
||||||
|
if f.DefaultText != "" {
|
||||||
|
return f.DefaultText
|
||||||
|
}
|
||||||
|
return f.GetValue()
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetEnvVars returns the env vars for this flag
|
||||||
|
func (f *IntSliceFlag) GetEnvVars() []string {
|
||||||
|
return f.EnvVars
|
||||||
|
}
|
||||||
|
|
||||||
// Apply populates the flag given the flag set and environment
|
// Apply populates the flag given the flag set and environment
|
||||||
func (f *IntSliceFlag) Apply(set *flag.FlagSet) error {
|
func (f *IntSliceFlag) Apply(set *flag.FlagSet) error {
|
||||||
if val, ok := flagFromEnvOrFile(f.EnvVars, f.FilePath); ok {
|
if val, ok := flagFromEnvOrFile(f.EnvVars, f.FilePath); ok {
|
||||||
|
@ -174,8 +187,8 @@ func (f *IntSliceFlag) Apply(set *flag.FlagSet) error {
|
||||||
|
|
||||||
// IntSlice looks up the value of a local IntSliceFlag, returns
|
// IntSlice looks up the value of a local IntSliceFlag, returns
|
||||||
// nil if not found
|
// nil if not found
|
||||||
func (c *Context) IntSlice(name string) []int {
|
func (cCtx *Context) IntSlice(name string) []int {
|
||||||
if fs := c.lookupFlagSet(name); fs != nil {
|
if fs := cCtx.lookupFlagSet(name); fs != nil {
|
||||||
return lookupIntSlice(name, fs)
|
return lookupIntSlice(name, fs)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|
25
vendor/github.com/urfave/cli/v2/flag_path.go
generated
vendored
25
vendor/github.com/urfave/cli/v2/flag_path.go
generated
vendored
|
@ -1,6 +1,9 @@
|
||||||
package cli
|
package cli
|
||||||
|
|
||||||
import "flag"
|
import (
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
type PathFlag struct {
|
type PathFlag struct {
|
||||||
Name string
|
Name string
|
||||||
|
@ -59,6 +62,22 @@ func (f *PathFlag) IsVisible() bool {
|
||||||
return !f.Hidden
|
return !f.Hidden
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetDefaultText returns the default text for this flag
|
||||||
|
func (f *PathFlag) GetDefaultText() string {
|
||||||
|
if f.DefaultText != "" {
|
||||||
|
return f.DefaultText
|
||||||
|
}
|
||||||
|
if f.Value == "" {
|
||||||
|
return f.Value
|
||||||
|
}
|
||||||
|
return fmt.Sprintf("%q", f.Value)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetEnvVars returns the env vars for this flag
|
||||||
|
func (f *PathFlag) GetEnvVars() []string {
|
||||||
|
return f.EnvVars
|
||||||
|
}
|
||||||
|
|
||||||
// Apply populates the flag given the flag set and environment
|
// Apply populates the flag given the flag set and environment
|
||||||
func (f *PathFlag) Apply(set *flag.FlagSet) error {
|
func (f *PathFlag) Apply(set *flag.FlagSet) error {
|
||||||
if val, ok := flagFromEnvOrFile(f.EnvVars, f.FilePath); ok {
|
if val, ok := flagFromEnvOrFile(f.EnvVars, f.FilePath); ok {
|
||||||
|
@ -79,8 +98,8 @@ func (f *PathFlag) Apply(set *flag.FlagSet) error {
|
||||||
|
|
||||||
// Path looks up the value of a local PathFlag, returns
|
// Path looks up the value of a local PathFlag, returns
|
||||||
// "" if not found
|
// "" if not found
|
||||||
func (c *Context) Path(name string) string {
|
func (cCtx *Context) Path(name string) string {
|
||||||
if fs := c.lookupFlagSet(name); fs != nil {
|
if fs := cCtx.lookupFlagSet(name); fs != nil {
|
||||||
return lookupPath(name, fs)
|
return lookupPath(name, fs)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
25
vendor/github.com/urfave/cli/v2/flag_string.go
generated
vendored
25
vendor/github.com/urfave/cli/v2/flag_string.go
generated
vendored
|
@ -1,6 +1,9 @@
|
||||||
package cli
|
package cli
|
||||||
|
|
||||||
import "flag"
|
import (
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
// StringFlag is a flag with type string
|
// StringFlag is a flag with type string
|
||||||
type StringFlag struct {
|
type StringFlag struct {
|
||||||
|
@ -60,6 +63,22 @@ func (f *StringFlag) IsVisible() bool {
|
||||||
return !f.Hidden
|
return !f.Hidden
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetDefaultText returns the default text for this flag
|
||||||
|
func (f *StringFlag) GetDefaultText() string {
|
||||||
|
if f.DefaultText != "" {
|
||||||
|
return f.DefaultText
|
||||||
|
}
|
||||||
|
if f.Value == "" {
|
||||||
|
return f.Value
|
||||||
|
}
|
||||||
|
return fmt.Sprintf("%q", f.Value)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetEnvVars returns the env vars for this flag
|
||||||
|
func (f *StringFlag) GetEnvVars() []string {
|
||||||
|
return f.EnvVars
|
||||||
|
}
|
||||||
|
|
||||||
// Apply populates the flag given the flag set and environment
|
// Apply populates the flag given the flag set and environment
|
||||||
func (f *StringFlag) Apply(set *flag.FlagSet) error {
|
func (f *StringFlag) Apply(set *flag.FlagSet) error {
|
||||||
if val, ok := flagFromEnvOrFile(f.EnvVars, f.FilePath); ok {
|
if val, ok := flagFromEnvOrFile(f.EnvVars, f.FilePath); ok {
|
||||||
|
@ -80,8 +99,8 @@ func (f *StringFlag) Apply(set *flag.FlagSet) error {
|
||||||
|
|
||||||
// String looks up the value of a local StringFlag, returns
|
// String looks up the value of a local StringFlag, returns
|
||||||
// "" if not found
|
// "" if not found
|
||||||
func (c *Context) String(name string) string {
|
func (cCtx *Context) String(name string) string {
|
||||||
if fs := c.lookupFlagSet(name); fs != nil {
|
if fs := cCtx.lookupFlagSet(name); fs != nil {
|
||||||
return lookupString(name, fs)
|
return lookupString(name, fs)
|
||||||
}
|
}
|
||||||
return ""
|
return ""
|
||||||
|
|
19
vendor/github.com/urfave/cli/v2/flag_string_slice.go
generated
vendored
19
vendor/github.com/urfave/cli/v2/flag_string_slice.go
generated
vendored
|
@ -92,7 +92,7 @@ func (f *StringSliceFlag) IsSet() bool {
|
||||||
// String returns a readable representation of this value
|
// String returns a readable representation of this value
|
||||||
// (for usage defaults)
|
// (for usage defaults)
|
||||||
func (f *StringSliceFlag) String() string {
|
func (f *StringSliceFlag) String() string {
|
||||||
return FlagStringer(f)
|
return withEnvHint(f.GetEnvVars(), stringifyStringSliceFlag(f))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Names returns the names of the flag
|
// Names returns the names of the flag
|
||||||
|
@ -129,6 +129,19 @@ func (f *StringSliceFlag) IsVisible() bool {
|
||||||
return !f.Hidden
|
return !f.Hidden
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetDefaultText returns the default text for this flag
|
||||||
|
func (f *StringSliceFlag) GetDefaultText() string {
|
||||||
|
if f.DefaultText != "" {
|
||||||
|
return f.DefaultText
|
||||||
|
}
|
||||||
|
return f.GetValue()
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetEnvVars returns the env vars for this flag
|
||||||
|
func (f *StringSliceFlag) GetEnvVars() []string {
|
||||||
|
return f.EnvVars
|
||||||
|
}
|
||||||
|
|
||||||
// Apply populates the flag given the flag set and environment
|
// Apply populates the flag given the flag set and environment
|
||||||
func (f *StringSliceFlag) Apply(set *flag.FlagSet) error {
|
func (f *StringSliceFlag) Apply(set *flag.FlagSet) error {
|
||||||
|
|
||||||
|
@ -175,8 +188,8 @@ func (f *StringSliceFlag) Apply(set *flag.FlagSet) error {
|
||||||
|
|
||||||
// StringSlice looks up the value of a local StringSliceFlag, returns
|
// StringSlice looks up the value of a local StringSliceFlag, returns
|
||||||
// nil if not found
|
// nil if not found
|
||||||
func (c *Context) StringSlice(name string) []string {
|
func (cCtx *Context) StringSlice(name string) []string {
|
||||||
if fs := c.lookupFlagSet(name); fs != nil {
|
if fs := cCtx.lookupFlagSet(name); fs != nil {
|
||||||
return lookupStringSlice(name, fs)
|
return lookupStringSlice(name, fs)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|
17
vendor/github.com/urfave/cli/v2/flag_timestamp.go
generated
vendored
17
vendor/github.com/urfave/cli/v2/flag_timestamp.go
generated
vendored
|
@ -119,6 +119,19 @@ func (f *TimestampFlag) IsVisible() bool {
|
||||||
return !f.Hidden
|
return !f.Hidden
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetDefaultText returns the default text for this flag
|
||||||
|
func (f *TimestampFlag) GetDefaultText() string {
|
||||||
|
if f.DefaultText != "" {
|
||||||
|
return f.DefaultText
|
||||||
|
}
|
||||||
|
return f.GetValue()
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetEnvVars returns the env vars for this flag
|
||||||
|
func (f *TimestampFlag) GetEnvVars() []string {
|
||||||
|
return f.EnvVars
|
||||||
|
}
|
||||||
|
|
||||||
// Apply populates the flag given the flag set and environment
|
// Apply populates the flag given the flag set and environment
|
||||||
func (f *TimestampFlag) Apply(set *flag.FlagSet) error {
|
func (f *TimestampFlag) Apply(set *flag.FlagSet) error {
|
||||||
if f.Layout == "" {
|
if f.Layout == "" {
|
||||||
|
@ -152,8 +165,8 @@ func (f *TimestampFlag) Apply(set *flag.FlagSet) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Timestamp gets the timestamp from a flag name
|
// Timestamp gets the timestamp from a flag name
|
||||||
func (c *Context) Timestamp(name string) *time.Time {
|
func (cCtx *Context) Timestamp(name string) *time.Time {
|
||||||
if fs := c.lookupFlagSet(name); fs != nil {
|
if fs := cCtx.lookupFlagSet(name); fs != nil {
|
||||||
return lookupTimestamp(name, fs)
|
return lookupTimestamp(name, fs)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|
17
vendor/github.com/urfave/cli/v2/flag_uint.go
generated
vendored
17
vendor/github.com/urfave/cli/v2/flag_uint.go
generated
vendored
|
@ -88,10 +88,23 @@ func (f *UintFlag) GetValue() string {
|
||||||
return fmt.Sprintf("%d", f.Value)
|
return fmt.Sprintf("%d", f.Value)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetDefaultText returns the default text for this flag
|
||||||
|
func (f *UintFlag) GetDefaultText() string {
|
||||||
|
if f.DefaultText != "" {
|
||||||
|
return f.DefaultText
|
||||||
|
}
|
||||||
|
return f.GetValue()
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetEnvVars returns the env vars for this flag
|
||||||
|
func (f *UintFlag) GetEnvVars() []string {
|
||||||
|
return f.EnvVars
|
||||||
|
}
|
||||||
|
|
||||||
// Uint looks up the value of a local UintFlag, returns
|
// Uint looks up the value of a local UintFlag, returns
|
||||||
// 0 if not found
|
// 0 if not found
|
||||||
func (c *Context) Uint(name string) uint {
|
func (cCtx *Context) Uint(name string) uint {
|
||||||
if fs := c.lookupFlagSet(name); fs != nil {
|
if fs := cCtx.lookupFlagSet(name); fs != nil {
|
||||||
return lookupUint(name, fs)
|
return lookupUint(name, fs)
|
||||||
}
|
}
|
||||||
return 0
|
return 0
|
||||||
|
|
17
vendor/github.com/urfave/cli/v2/flag_uint64.go
generated
vendored
17
vendor/github.com/urfave/cli/v2/flag_uint64.go
generated
vendored
|
@ -88,10 +88,23 @@ func (f *Uint64Flag) GetValue() string {
|
||||||
return fmt.Sprintf("%d", f.Value)
|
return fmt.Sprintf("%d", f.Value)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetDefaultText returns the default text for this flag
|
||||||
|
func (f *Uint64Flag) GetDefaultText() string {
|
||||||
|
if f.DefaultText != "" {
|
||||||
|
return f.DefaultText
|
||||||
|
}
|
||||||
|
return f.GetValue()
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetEnvVars returns the env vars for this flag
|
||||||
|
func (f *Uint64Flag) GetEnvVars() []string {
|
||||||
|
return f.EnvVars
|
||||||
|
}
|
||||||
|
|
||||||
// Uint64 looks up the value of a local Uint64Flag, returns
|
// Uint64 looks up the value of a local Uint64Flag, returns
|
||||||
// 0 if not found
|
// 0 if not found
|
||||||
func (c *Context) Uint64(name string) uint64 {
|
func (cCtx *Context) Uint64(name string) uint64 {
|
||||||
if fs := c.lookupFlagSet(name); fs != nil {
|
if fs := cCtx.lookupFlagSet(name); fs != nil {
|
||||||
return lookupUint64(name, fs)
|
return lookupUint64(name, fs)
|
||||||
}
|
}
|
||||||
return 0
|
return 0
|
||||||
|
|
4
vendor/github.com/urfave/cli/v2/funcs.go
generated
vendored
4
vendor/github.com/urfave/cli/v2/funcs.go
generated
vendored
|
@ -21,11 +21,11 @@ type CommandNotFoundFunc func(*Context, string)
|
||||||
// customized usage error messages. This function is able to replace the
|
// customized usage error messages. This function is able to replace the
|
||||||
// original error messages. If this function is not set, the "Incorrect usage"
|
// original error messages. If this function is not set, the "Incorrect usage"
|
||||||
// is displayed and the execution is interrupted.
|
// is displayed and the execution is interrupted.
|
||||||
type OnUsageErrorFunc func(context *Context, err error, isSubcommand bool) error
|
type OnUsageErrorFunc func(cCtx *Context, err error, isSubcommand bool) error
|
||||||
|
|
||||||
// ExitErrHandlerFunc is executed if provided in order to handle exitError values
|
// ExitErrHandlerFunc is executed if provided in order to handle exitError values
|
||||||
// returned by Actions and Before/After functions.
|
// returned by Actions and Before/After functions.
|
||||||
type ExitErrHandlerFunc func(context *Context, err error)
|
type ExitErrHandlerFunc func(cCtx *Context, err error)
|
||||||
|
|
||||||
// FlagStringFunc is used by the help generation to display a flag, which is
|
// FlagStringFunc is used by the help generation to display a flag, which is
|
||||||
// expected to be a single line.
|
// expected to be a single line.
|
||||||
|
|
101
vendor/github.com/urfave/cli/v2/help.go
generated
vendored
101
vendor/github.com/urfave/cli/v2/help.go
generated
vendored
|
@ -15,13 +15,13 @@ var helpCommand = &Command{
|
||||||
Aliases: []string{"h"},
|
Aliases: []string{"h"},
|
||||||
Usage: "Shows a list of commands or help for one command",
|
Usage: "Shows a list of commands or help for one command",
|
||||||
ArgsUsage: "[command]",
|
ArgsUsage: "[command]",
|
||||||
Action: func(c *Context) error {
|
Action: func(cCtx *Context) error {
|
||||||
args := c.Args()
|
args := cCtx.Args()
|
||||||
if args.Present() {
|
if args.Present() {
|
||||||
return ShowCommandHelp(c, args.First())
|
return ShowCommandHelp(cCtx, args.First())
|
||||||
}
|
}
|
||||||
|
|
||||||
_ = ShowAppHelp(c)
|
_ = ShowAppHelp(cCtx)
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -31,13 +31,13 @@ var helpSubcommand = &Command{
|
||||||
Aliases: []string{"h"},
|
Aliases: []string{"h"},
|
||||||
Usage: "Shows a list of commands or help for one command",
|
Usage: "Shows a list of commands or help for one command",
|
||||||
ArgsUsage: "[command]",
|
ArgsUsage: "[command]",
|
||||||
Action: func(c *Context) error {
|
Action: func(cCtx *Context) error {
|
||||||
args := c.Args()
|
args := cCtx.Args()
|
||||||
if args.Present() {
|
if args.Present() {
|
||||||
return ShowCommandHelp(c, args.First())
|
return ShowCommandHelp(cCtx, args.First())
|
||||||
}
|
}
|
||||||
|
|
||||||
return ShowSubcommandHelp(c)
|
return ShowSubcommandHelp(cCtx)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -71,30 +71,30 @@ func ShowAppHelpAndExit(c *Context, exitCode int) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ShowAppHelp is an action that displays the help.
|
// ShowAppHelp is an action that displays the help.
|
||||||
func ShowAppHelp(c *Context) error {
|
func ShowAppHelp(cCtx *Context) error {
|
||||||
tpl := c.App.CustomAppHelpTemplate
|
tpl := cCtx.App.CustomAppHelpTemplate
|
||||||
if tpl == "" {
|
if tpl == "" {
|
||||||
tpl = AppHelpTemplate
|
tpl = AppHelpTemplate
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.App.ExtraInfo == nil {
|
if cCtx.App.ExtraInfo == nil {
|
||||||
HelpPrinter(c.App.Writer, tpl, c.App)
|
HelpPrinter(cCtx.App.Writer, tpl, cCtx.App)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
customAppData := func() map[string]interface{} {
|
customAppData := func() map[string]interface{} {
|
||||||
return map[string]interface{}{
|
return map[string]interface{}{
|
||||||
"ExtraInfo": c.App.ExtraInfo,
|
"ExtraInfo": cCtx.App.ExtraInfo,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
HelpPrinterCustom(c.App.Writer, tpl, c.App, customAppData())
|
HelpPrinterCustom(cCtx.App.Writer, tpl, cCtx.App, customAppData())
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// DefaultAppComplete prints the list of subcommands as the default app completion method
|
// DefaultAppComplete prints the list of subcommands as the default app completion method
|
||||||
func DefaultAppComplete(c *Context) {
|
func DefaultAppComplete(cCtx *Context) {
|
||||||
DefaultCompleteWithFlags(nil)(c)
|
DefaultCompleteWithFlags(nil)(cCtx)
|
||||||
}
|
}
|
||||||
|
|
||||||
func printCommandSuggestions(commands []*Command, writer io.Writer) {
|
func printCommandSuggestions(commands []*Command, writer io.Writer) {
|
||||||
|
@ -159,23 +159,30 @@ func printFlagSuggestions(lastArg string, flags []Flag, writer io.Writer) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func DefaultCompleteWithFlags(cmd *Command) func(c *Context) {
|
func DefaultCompleteWithFlags(cmd *Command) func(cCtx *Context) {
|
||||||
return func(c *Context) {
|
return func(cCtx *Context) {
|
||||||
if len(os.Args) > 2 {
|
if len(os.Args) > 2 {
|
||||||
lastArg := os.Args[len(os.Args)-2]
|
lastArg := os.Args[len(os.Args)-2]
|
||||||
|
|
||||||
if strings.HasPrefix(lastArg, "-") {
|
if strings.HasPrefix(lastArg, "-") {
|
||||||
printFlagSuggestions(lastArg, c.App.Flags, c.App.Writer)
|
|
||||||
if cmd != nil {
|
if cmd != nil {
|
||||||
printFlagSuggestions(lastArg, cmd.Flags, c.App.Writer)
|
printFlagSuggestions(lastArg, cmd.Flags, cCtx.App.Writer)
|
||||||
|
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
printFlagSuggestions(lastArg, cCtx.App.Flags, cCtx.App.Writer)
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if cmd != nil {
|
if cmd != nil {
|
||||||
printCommandSuggestions(cmd.Subcommands, c.App.Writer)
|
printCommandSuggestions(cmd.Subcommands, cCtx.App.Writer)
|
||||||
} else {
|
return
|
||||||
printCommandSuggestions(c.App.Commands, c.App.Writer)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
printCommandSuggestions(cCtx.App.Commands, cCtx.App.Writer)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -221,32 +228,32 @@ func ShowSubcommandHelpAndExit(c *Context, exitCode int) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ShowSubcommandHelp prints help for the given subcommand
|
// ShowSubcommandHelp prints help for the given subcommand
|
||||||
func ShowSubcommandHelp(c *Context) error {
|
func ShowSubcommandHelp(cCtx *Context) error {
|
||||||
if c == nil {
|
if cCtx == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.Command != nil {
|
if cCtx.Command != nil {
|
||||||
return ShowCommandHelp(c, c.Command.Name)
|
return ShowCommandHelp(cCtx, cCtx.Command.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
return ShowCommandHelp(c, "")
|
return ShowCommandHelp(cCtx, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
// ShowVersion prints the version number of the App
|
// ShowVersion prints the version number of the App
|
||||||
func ShowVersion(c *Context) {
|
func ShowVersion(cCtx *Context) {
|
||||||
VersionPrinter(c)
|
VersionPrinter(cCtx)
|
||||||
}
|
}
|
||||||
|
|
||||||
func printVersion(c *Context) {
|
func printVersion(cCtx *Context) {
|
||||||
_, _ = fmt.Fprintf(c.App.Writer, "%v version %v\n", c.App.Name, c.App.Version)
|
_, _ = fmt.Fprintf(cCtx.App.Writer, "%v version %v\n", cCtx.App.Name, cCtx.App.Version)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ShowCompletions prints the lists of commands within a given context
|
// ShowCompletions prints the lists of commands within a given context
|
||||||
func ShowCompletions(c *Context) {
|
func ShowCompletions(cCtx *Context) {
|
||||||
a := c.App
|
a := cCtx.App
|
||||||
if a != nil && a.BashComplete != nil {
|
if a != nil && a.BashComplete != nil {
|
||||||
a.BashComplete(c)
|
a.BashComplete(cCtx)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -297,20 +304,20 @@ func printHelp(out io.Writer, templ string, data interface{}) {
|
||||||
HelpPrinterCustom(out, templ, data, nil)
|
HelpPrinterCustom(out, templ, data, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkVersion(c *Context) bool {
|
func checkVersion(cCtx *Context) bool {
|
||||||
found := false
|
found := false
|
||||||
for _, name := range VersionFlag.Names() {
|
for _, name := range VersionFlag.Names() {
|
||||||
if c.Bool(name) {
|
if cCtx.Bool(name) {
|
||||||
found = true
|
found = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return found
|
return found
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkHelp(c *Context) bool {
|
func checkHelp(cCtx *Context) bool {
|
||||||
found := false
|
found := false
|
||||||
for _, name := range HelpFlag.Names() {
|
for _, name := range HelpFlag.Names() {
|
||||||
if c.Bool(name) {
|
if cCtx.Bool(name) {
|
||||||
found = true
|
found = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -326,9 +333,9 @@ func checkCommandHelp(c *Context, name string) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkSubcommandHelp(c *Context) bool {
|
func checkSubcommandHelp(cCtx *Context) bool {
|
||||||
if c.Bool("h") || c.Bool("help") {
|
if cCtx.Bool("h") || cCtx.Bool("help") {
|
||||||
_ = ShowSubcommandHelp(c)
|
_ = ShowSubcommandHelp(cCtx)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -350,20 +357,20 @@ func checkShellCompleteFlag(a *App, arguments []string) (bool, []string) {
|
||||||
return true, arguments[:pos]
|
return true, arguments[:pos]
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkCompletions(c *Context) bool {
|
func checkCompletions(cCtx *Context) bool {
|
||||||
if !c.shellComplete {
|
if !cCtx.shellComplete {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
if args := c.Args(); args.Present() {
|
if args := cCtx.Args(); args.Present() {
|
||||||
name := args.First()
|
name := args.First()
|
||||||
if cmd := c.App.Command(name); cmd != nil {
|
if cmd := cCtx.App.Command(name); cmd != nil {
|
||||||
// let the command handle the completion
|
// let the command handle the completion
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ShowCompletions(c)
|
ShowCompletions(cCtx)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
8
vendor/golang.org/x/net/http2/transport.go
generated
vendored
8
vendor/golang.org/x/net/http2/transport.go
generated
vendored
|
@ -16,7 +16,6 @@ import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
|
||||||
"log"
|
"log"
|
||||||
"math"
|
"math"
|
||||||
mathrand "math/rand"
|
mathrand "math/rand"
|
||||||
|
@ -2904,7 +2903,12 @@ func (t *Transport) logf(format string, args ...interface{}) {
|
||||||
log.Printf(format, args...)
|
log.Printf(format, args...)
|
||||||
}
|
}
|
||||||
|
|
||||||
var noBody io.ReadCloser = ioutil.NopCloser(bytes.NewReader(nil))
|
var noBody io.ReadCloser = noBodyReader{}
|
||||||
|
|
||||||
|
type noBodyReader struct{}
|
||||||
|
|
||||||
|
func (noBodyReader) Close() error { return nil }
|
||||||
|
func (noBodyReader) Read([]byte) (int, error) { return 0, io.EOF }
|
||||||
|
|
||||||
type missingBody struct{}
|
type missingBody struct{}
|
||||||
|
|
||||||
|
|
4
vendor/golang.org/x/sys/unix/endian_little.go
generated
vendored
4
vendor/golang.org/x/sys/unix/endian_little.go
generated
vendored
|
@ -2,8 +2,8 @@
|
||||||
// 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.
|
||||||
//
|
//
|
||||||
//go:build 386 || amd64 || amd64p32 || alpha || arm || arm64 || mipsle || mips64le || mips64p32le || nios2 || ppc64le || riscv || riscv64 || sh
|
//go:build 386 || amd64 || amd64p32 || alpha || arm || arm64 || loong64 || mipsle || mips64le || mips64p32le || nios2 || ppc64le || riscv || riscv64 || sh
|
||||||
// +build 386 amd64 amd64p32 alpha arm arm64 mipsle mips64le mips64p32le nios2 ppc64le riscv riscv64 sh
|
// +build 386 amd64 amd64p32 alpha arm arm64 loong64 mipsle mips64le mips64p32le nios2 ppc64le riscv riscv64 sh
|
||||||
|
|
||||||
package unix
|
package unix
|
||||||
|
|
||||||
|
|
191
vendor/golang.org/x/sys/unix/syscall_linux_loong64.go
generated
vendored
Normal file
191
vendor/golang.org/x/sys/unix/syscall_linux_loong64.go
generated
vendored
Normal file
|
@ -0,0 +1,191 @@
|
||||||
|
// Copyright 2022 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.
|
||||||
|
|
||||||
|
//go:build loong64 && linux
|
||||||
|
// +build loong64,linux
|
||||||
|
|
||||||
|
package unix
|
||||||
|
|
||||||
|
import "unsafe"
|
||||||
|
|
||||||
|
//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT
|
||||||
|
//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
|
||||||
|
//sys Fchown(fd int, uid int, gid int) (err error)
|
||||||
|
//sys Fstat(fd int, stat *Stat_t) (err error)
|
||||||
|
//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error)
|
||||||
|
//sys Fstatfs(fd int, buf *Statfs_t) (err error)
|
||||||
|
//sys Ftruncate(fd int, length int64) (err error)
|
||||||
|
//sysnb Getegid() (egid int)
|
||||||
|
//sysnb Geteuid() (euid int)
|
||||||
|
//sysnb Getgid() (gid int)
|
||||||
|
//sysnb Getuid() (uid int)
|
||||||
|
//sys Listen(s int, n int) (err error)
|
||||||
|
//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
|
||||||
|
//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
|
||||||
|
//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK
|
||||||
|
|
||||||
|
func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
|
||||||
|
var ts *Timespec
|
||||||
|
if timeout != nil {
|
||||||
|
ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000}
|
||||||
|
}
|
||||||
|
return Pselect(nfd, r, w, e, ts, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
|
||||||
|
//sys setfsgid(gid int) (prev int, err error)
|
||||||
|
//sys setfsuid(uid int) (prev int, err error)
|
||||||
|
//sysnb Setregid(rgid int, egid int) (err error)
|
||||||
|
//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
|
||||||
|
//sysnb Setresuid(ruid int, euid int, suid int) (err error)
|
||||||
|
//sysnb Setreuid(ruid int, euid int) (err error)
|
||||||
|
//sys Shutdown(fd int, how int) (err error)
|
||||||
|
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
|
||||||
|
|
||||||
|
func Stat(path string, stat *Stat_t) (err error) {
|
||||||
|
return Fstatat(AT_FDCWD, path, stat, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Lchown(path string, uid int, gid int) (err error) {
|
||||||
|
return Fchownat(AT_FDCWD, path, uid, gid, AT_SYMLINK_NOFOLLOW)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Lstat(path string, stat *Stat_t) (err error) {
|
||||||
|
return Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW)
|
||||||
|
}
|
||||||
|
|
||||||
|
//sys Statfs(path string, buf *Statfs_t) (err error)
|
||||||
|
//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error)
|
||||||
|
//sys Truncate(path string, length int64) (err error)
|
||||||
|
|
||||||
|
func Ustat(dev int, ubuf *Ustat_t) (err error) {
|
||||||
|
return ENOSYS
|
||||||
|
}
|
||||||
|
|
||||||
|
//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
|
||||||
|
//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
||||||
|
//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
|
||||||
|
//sysnb getgroups(n int, list *_Gid_t) (nn int, err error)
|
||||||
|
//sysnb setgroups(n int, list *_Gid_t) (err error)
|
||||||
|
//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)
|
||||||
|
//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)
|
||||||
|
//sysnb socket(domain int, typ int, proto int) (fd int, err error)
|
||||||
|
//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error)
|
||||||
|
//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
|
||||||
|
//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
|
||||||
|
//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)
|
||||||
|
//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)
|
||||||
|
//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error)
|
||||||
|
//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error)
|
||||||
|
//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)
|
||||||
|
|
||||||
|
//sysnb Gettimeofday(tv *Timeval) (err error)
|
||||||
|
|
||||||
|
func setTimespec(sec, nsec int64) Timespec {
|
||||||
|
return Timespec{Sec: sec, Nsec: nsec}
|
||||||
|
}
|
||||||
|
|
||||||
|
func setTimeval(sec, usec int64) Timeval {
|
||||||
|
return Timeval{Sec: sec, Usec: usec}
|
||||||
|
}
|
||||||
|
|
||||||
|
func Getrlimit(resource int, rlim *Rlimit) (err error) {
|
||||||
|
err = Prlimit(0, resource, nil, rlim)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func Setrlimit(resource int, rlim *Rlimit) (err error) {
|
||||||
|
err = Prlimit(0, resource, rlim, nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func futimesat(dirfd int, path string, tv *[2]Timeval) (err error) {
|
||||||
|
if tv == nil {
|
||||||
|
return utimensat(dirfd, path, nil, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
ts := []Timespec{
|
||||||
|
NsecToTimespec(TimevalToNsec(tv[0])),
|
||||||
|
NsecToTimespec(TimevalToNsec(tv[1])),
|
||||||
|
}
|
||||||
|
return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Time(t *Time_t) (Time_t, error) {
|
||||||
|
var tv Timeval
|
||||||
|
err := Gettimeofday(&tv)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
if t != nil {
|
||||||
|
*t = Time_t(tv.Sec)
|
||||||
|
}
|
||||||
|
return Time_t(tv.Sec), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func Utime(path string, buf *Utimbuf) error {
|
||||||
|
tv := []Timeval{
|
||||||
|
{Sec: buf.Actime},
|
||||||
|
{Sec: buf.Modtime},
|
||||||
|
}
|
||||||
|
return Utimes(path, tv)
|
||||||
|
}
|
||||||
|
|
||||||
|
func utimes(path string, tv *[2]Timeval) (err error) {
|
||||||
|
if tv == nil {
|
||||||
|
return utimensat(AT_FDCWD, path, nil, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
ts := []Timespec{
|
||||||
|
NsecToTimespec(TimevalToNsec(tv[0])),
|
||||||
|
NsecToTimespec(TimevalToNsec(tv[1])),
|
||||||
|
}
|
||||||
|
return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *PtraceRegs) PC() uint64 { return r.Era }
|
||||||
|
|
||||||
|
func (r *PtraceRegs) SetPC(era uint64) { r.Era = era }
|
||||||
|
|
||||||
|
func (iov *Iovec) SetLen(length int) {
|
||||||
|
iov.Len = uint64(length)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (msghdr *Msghdr) SetControllen(length int) {
|
||||||
|
msghdr.Controllen = uint64(length)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (msghdr *Msghdr) SetIovlen(length int) {
|
||||||
|
msghdr.Iovlen = uint64(length)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (cmsg *Cmsghdr) SetLen(length int) {
|
||||||
|
cmsg.Len = uint64(length)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {
|
||||||
|
rsa.Service_name_len = uint64(length)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Pause() error {
|
||||||
|
_, err := ppoll(nil, 0, nil, nil)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
|
||||||
|
return Renameat2(olddirfd, oldpath, newdirfd, newpath, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
//sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)
|
||||||
|
|
||||||
|
func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {
|
||||||
|
cmdlineLen := len(cmdline)
|
||||||
|
if cmdlineLen > 0 {
|
||||||
|
// Account for the additional NULL byte added by
|
||||||
|
// BytePtrFromString in kexecFileLoad. The kexec_file_load
|
||||||
|
// syscall expects a NULL-terminated string.
|
||||||
|
cmdlineLen++
|
||||||
|
}
|
||||||
|
return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)
|
||||||
|
}
|
1
vendor/golang.org/x/sys/unix/zerrors_linux.go
generated
vendored
1
vendor/golang.org/x/sys/unix/zerrors_linux.go
generated
vendored
|
@ -1310,6 +1310,7 @@ const (
|
||||||
KEXEC_ARCH_ARM = 0x280000
|
KEXEC_ARCH_ARM = 0x280000
|
||||||
KEXEC_ARCH_DEFAULT = 0x0
|
KEXEC_ARCH_DEFAULT = 0x0
|
||||||
KEXEC_ARCH_IA_64 = 0x320000
|
KEXEC_ARCH_IA_64 = 0x320000
|
||||||
|
KEXEC_ARCH_LOONGARCH = 0x1020000
|
||||||
KEXEC_ARCH_MASK = 0xffff0000
|
KEXEC_ARCH_MASK = 0xffff0000
|
||||||
KEXEC_ARCH_MIPS = 0x80000
|
KEXEC_ARCH_MIPS = 0x80000
|
||||||
KEXEC_ARCH_MIPS_LE = 0xa0000
|
KEXEC_ARCH_MIPS_LE = 0xa0000
|
||||||
|
|
818
vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go
generated
vendored
Normal file
818
vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go
generated
vendored
Normal file
|
@ -0,0 +1,818 @@
|
||||||
|
// mkerrors.sh -Wall -Werror -static -I/tmp/include
|
||||||
|
// Code generated by the command above; see README.md. DO NOT EDIT.
|
||||||
|
|
||||||
|
//go:build loong64 && linux
|
||||||
|
// +build loong64,linux
|
||||||
|
|
||||||
|
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
|
||||||
|
// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go
|
||||||
|
|
||||||
|
package unix
|
||||||
|
|
||||||
|
import "syscall"
|
||||||
|
|
||||||
|
const (
|
||||||
|
B1000000 = 0x1008
|
||||||
|
B115200 = 0x1002
|
||||||
|
B1152000 = 0x1009
|
||||||
|
B1500000 = 0x100a
|
||||||
|
B2000000 = 0x100b
|
||||||
|
B230400 = 0x1003
|
||||||
|
B2500000 = 0x100c
|
||||||
|
B3000000 = 0x100d
|
||||||
|
B3500000 = 0x100e
|
||||||
|
B4000000 = 0x100f
|
||||||
|
B460800 = 0x1004
|
||||||
|
B500000 = 0x1005
|
||||||
|
B57600 = 0x1001
|
||||||
|
B576000 = 0x1006
|
||||||
|
B921600 = 0x1007
|
||||||
|
BLKBSZGET = 0x80081270
|
||||||
|
BLKBSZSET = 0x40081271
|
||||||
|
BLKFLSBUF = 0x1261
|
||||||
|
BLKFRAGET = 0x1265
|
||||||
|
BLKFRASET = 0x1264
|
||||||
|
BLKGETSIZE = 0x1260
|
||||||
|
BLKGETSIZE64 = 0x80081272
|
||||||
|
BLKPBSZGET = 0x127b
|
||||||
|
BLKRAGET = 0x1263
|
||||||
|
BLKRASET = 0x1262
|
||||||
|
BLKROGET = 0x125e
|
||||||
|
BLKROSET = 0x125d
|
||||||
|
BLKRRPART = 0x125f
|
||||||
|
BLKSECTGET = 0x1267
|
||||||
|
BLKSECTSET = 0x1266
|
||||||
|
BLKSSZGET = 0x1268
|
||||||
|
BOTHER = 0x1000
|
||||||
|
BS1 = 0x2000
|
||||||
|
BSDLY = 0x2000
|
||||||
|
CBAUD = 0x100f
|
||||||
|
CBAUDEX = 0x1000
|
||||||
|
CIBAUD = 0x100f0000
|
||||||
|
CLOCAL = 0x800
|
||||||
|
CR1 = 0x200
|
||||||
|
CR2 = 0x400
|
||||||
|
CR3 = 0x600
|
||||||
|
CRDLY = 0x600
|
||||||
|
CREAD = 0x80
|
||||||
|
CS6 = 0x10
|
||||||
|
CS7 = 0x20
|
||||||
|
CS8 = 0x30
|
||||||
|
CSIZE = 0x30
|
||||||
|
CSTOPB = 0x40
|
||||||
|
ECCGETLAYOUT = 0x81484d11
|
||||||
|
ECCGETSTATS = 0x80104d12
|
||||||
|
ECHOCTL = 0x200
|
||||||
|
ECHOE = 0x10
|
||||||
|
ECHOK = 0x20
|
||||||
|
ECHOKE = 0x800
|
||||||
|
ECHONL = 0x40
|
||||||
|
ECHOPRT = 0x400
|
||||||
|
EFD_CLOEXEC = 0x80000
|
||||||
|
EFD_NONBLOCK = 0x800
|
||||||
|
EPOLL_CLOEXEC = 0x80000
|
||||||
|
EXTPROC = 0x10000
|
||||||
|
FF1 = 0x8000
|
||||||
|
FFDLY = 0x8000
|
||||||
|
FICLONE = 0x40049409
|
||||||
|
FICLONERANGE = 0x4020940d
|
||||||
|
FLUSHO = 0x1000
|
||||||
|
FPU_CTX_MAGIC = 0x46505501
|
||||||
|
FS_IOC_ENABLE_VERITY = 0x40806685
|
||||||
|
FS_IOC_GETFLAGS = 0x80086601
|
||||||
|
FS_IOC_GET_ENCRYPTION_NONCE = 0x8010661b
|
||||||
|
FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615
|
||||||
|
FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614
|
||||||
|
FS_IOC_SETFLAGS = 0x40086602
|
||||||
|
FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613
|
||||||
|
F_GETLK = 0x5
|
||||||
|
F_GETLK64 = 0x5
|
||||||
|
F_GETOWN = 0x9
|
||||||
|
F_RDLCK = 0x0
|
||||||
|
F_SETLK = 0x6
|
||||||
|
F_SETLK64 = 0x6
|
||||||
|
F_SETLKW = 0x7
|
||||||
|
F_SETLKW64 = 0x7
|
||||||
|
F_SETOWN = 0x8
|
||||||
|
F_UNLCK = 0x2
|
||||||
|
F_WRLCK = 0x1
|
||||||
|
HIDIOCGRAWINFO = 0x80084803
|
||||||
|
HIDIOCGRDESC = 0x90044802
|
||||||
|
HIDIOCGRDESCSIZE = 0x80044801
|
||||||
|
HUPCL = 0x400
|
||||||
|
ICANON = 0x2
|
||||||
|
IEXTEN = 0x8000
|
||||||
|
IN_CLOEXEC = 0x80000
|
||||||
|
IN_NONBLOCK = 0x800
|
||||||
|
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9
|
||||||
|
ISIG = 0x1
|
||||||
|
IUCLC = 0x200
|
||||||
|
IXOFF = 0x1000
|
||||||
|
IXON = 0x400
|
||||||
|
LASX_CTX_MAGIC = 0x41535801
|
||||||
|
LSX_CTX_MAGIC = 0x53580001
|
||||||
|
MAP_ANON = 0x20
|
||||||
|
MAP_ANONYMOUS = 0x20
|
||||||
|
MAP_DENYWRITE = 0x800
|
||||||
|
MAP_EXECUTABLE = 0x1000
|
||||||
|
MAP_GROWSDOWN = 0x100
|
||||||
|
MAP_HUGETLB = 0x40000
|
||||||
|
MAP_LOCKED = 0x2000
|
||||||
|
MAP_NONBLOCK = 0x10000
|
||||||
|
MAP_NORESERVE = 0x4000
|
||||||
|
MAP_POPULATE = 0x8000
|
||||||
|
MAP_STACK = 0x20000
|
||||||
|
MAP_SYNC = 0x80000
|
||||||
|
MCL_CURRENT = 0x1
|
||||||
|
MCL_FUTURE = 0x2
|
||||||
|
MCL_ONFAULT = 0x4
|
||||||
|
MEMERASE = 0x40084d02
|
||||||
|
MEMERASE64 = 0x40104d14
|
||||||
|
MEMGETBADBLOCK = 0x40084d0b
|
||||||
|
MEMGETINFO = 0x80204d01
|
||||||
|
MEMGETOOBSEL = 0x80c84d0a
|
||||||
|
MEMGETREGIONCOUNT = 0x80044d07
|
||||||
|
MEMISLOCKED = 0x80084d17
|
||||||
|
MEMLOCK = 0x40084d05
|
||||||
|
MEMREADOOB = 0xc0104d04
|
||||||
|
MEMSETBADBLOCK = 0x40084d0c
|
||||||
|
MEMUNLOCK = 0x40084d06
|
||||||
|
MEMWRITEOOB = 0xc0104d03
|
||||||
|
MTDFILEMODE = 0x4d13
|
||||||
|
NFDBITS = 0x40
|
||||||
|
NLDLY = 0x100
|
||||||
|
NOFLSH = 0x80
|
||||||
|
NS_GET_NSTYPE = 0xb703
|
||||||
|
NS_GET_OWNER_UID = 0xb704
|
||||||
|
NS_GET_PARENT = 0xb702
|
||||||
|
NS_GET_USERNS = 0xb701
|
||||||
|
OLCUC = 0x2
|
||||||
|
ONLCR = 0x4
|
||||||
|
OTPERASE = 0x400c4d19
|
||||||
|
OTPGETREGIONCOUNT = 0x40044d0e
|
||||||
|
OTPGETREGIONINFO = 0x400c4d0f
|
||||||
|
OTPLOCK = 0x800c4d10
|
||||||
|
OTPSELECT = 0x80044d0d
|
||||||
|
O_APPEND = 0x400
|
||||||
|
O_ASYNC = 0x2000
|
||||||
|
O_CLOEXEC = 0x80000
|
||||||
|
O_CREAT = 0x40
|
||||||
|
O_DIRECT = 0x4000
|
||||||
|
O_DIRECTORY = 0x10000
|
||||||
|
O_DSYNC = 0x1000
|
||||||
|
O_EXCL = 0x80
|
||||||
|
O_FSYNC = 0x101000
|
||||||
|
O_LARGEFILE = 0x0
|
||||||
|
O_NDELAY = 0x800
|
||||||
|
O_NOATIME = 0x40000
|
||||||
|
O_NOCTTY = 0x100
|
||||||
|
O_NOFOLLOW = 0x20000
|
||||||
|
O_NONBLOCK = 0x800
|
||||||
|
O_PATH = 0x200000
|
||||||
|
O_RSYNC = 0x101000
|
||||||
|
O_SYNC = 0x101000
|
||||||
|
O_TMPFILE = 0x410000
|
||||||
|
O_TRUNC = 0x200
|
||||||
|
PARENB = 0x100
|
||||||
|
PARODD = 0x200
|
||||||
|
PENDIN = 0x4000
|
||||||
|
PERF_EVENT_IOC_DISABLE = 0x2401
|
||||||
|
PERF_EVENT_IOC_ENABLE = 0x2400
|
||||||
|
PERF_EVENT_IOC_ID = 0x80082407
|
||||||
|
PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b
|
||||||
|
PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409
|
||||||
|
PERF_EVENT_IOC_PERIOD = 0x40082404
|
||||||
|
PERF_EVENT_IOC_QUERY_BPF = 0xc008240a
|
||||||
|
PERF_EVENT_IOC_REFRESH = 0x2402
|
||||||
|
PERF_EVENT_IOC_RESET = 0x2403
|
||||||
|
PERF_EVENT_IOC_SET_BPF = 0x40042408
|
||||||
|
PERF_EVENT_IOC_SET_FILTER = 0x40082406
|
||||||
|
PERF_EVENT_IOC_SET_OUTPUT = 0x2405
|
||||||
|
PPPIOCATTACH = 0x4004743d
|
||||||
|
PPPIOCATTCHAN = 0x40047438
|
||||||
|
PPPIOCBRIDGECHAN = 0x40047435
|
||||||
|
PPPIOCCONNECT = 0x4004743a
|
||||||
|
PPPIOCDETACH = 0x4004743c
|
||||||
|
PPPIOCDISCONN = 0x7439
|
||||||
|
PPPIOCGASYNCMAP = 0x80047458
|
||||||
|
PPPIOCGCHAN = 0x80047437
|
||||||
|
PPPIOCGDEBUG = 0x80047441
|
||||||
|
PPPIOCGFLAGS = 0x8004745a
|
||||||
|
PPPIOCGIDLE = 0x8010743f
|
||||||
|
PPPIOCGIDLE32 = 0x8008743f
|
||||||
|
PPPIOCGIDLE64 = 0x8010743f
|
||||||
|
PPPIOCGL2TPSTATS = 0x80487436
|
||||||
|
PPPIOCGMRU = 0x80047453
|
||||||
|
PPPIOCGRASYNCMAP = 0x80047455
|
||||||
|
PPPIOCGUNIT = 0x80047456
|
||||||
|
PPPIOCGXASYNCMAP = 0x80207450
|
||||||
|
PPPIOCSACTIVE = 0x40107446
|
||||||
|
PPPIOCSASYNCMAP = 0x40047457
|
||||||
|
PPPIOCSCOMPRESS = 0x4010744d
|
||||||
|
PPPIOCSDEBUG = 0x40047440
|
||||||
|
PPPIOCSFLAGS = 0x40047459
|
||||||
|
PPPIOCSMAXCID = 0x40047451
|
||||||
|
PPPIOCSMRRU = 0x4004743b
|
||||||
|
PPPIOCSMRU = 0x40047452
|
||||||
|
PPPIOCSNPMODE = 0x4008744b
|
||||||
|
PPPIOCSPASS = 0x40107447
|
||||||
|
PPPIOCSRASYNCMAP = 0x40047454
|
||||||
|
PPPIOCSXASYNCMAP = 0x4020744f
|
||||||
|
PPPIOCUNBRIDGECHAN = 0x7434
|
||||||
|
PPPIOCXFERUNIT = 0x744e
|
||||||
|
PR_SET_PTRACER_ANY = 0xffffffffffffffff
|
||||||
|
PTRACE_SYSEMU = 0x1f
|
||||||
|
PTRACE_SYSEMU_SINGLESTEP = 0x20
|
||||||
|
RLIMIT_AS = 0x9
|
||||||
|
RLIMIT_MEMLOCK = 0x8
|
||||||
|
RLIMIT_NOFILE = 0x7
|
||||||
|
RLIMIT_NPROC = 0x6
|
||||||
|
RLIMIT_RSS = 0x5
|
||||||
|
RNDADDENTROPY = 0x40085203
|
||||||
|
RNDADDTOENTCNT = 0x40045201
|
||||||
|
RNDCLEARPOOL = 0x5206
|
||||||
|
RNDGETENTCNT = 0x80045200
|
||||||
|
RNDGETPOOL = 0x80085202
|
||||||
|
RNDRESEEDCRNG = 0x5207
|
||||||
|
RNDZAPENTCNT = 0x5204
|
||||||
|
RTC_AIE_OFF = 0x7002
|
||||||
|
RTC_AIE_ON = 0x7001
|
||||||
|
RTC_ALM_READ = 0x80247008
|
||||||
|
RTC_ALM_SET = 0x40247007
|
||||||
|
RTC_EPOCH_READ = 0x8008700d
|
||||||
|
RTC_EPOCH_SET = 0x4008700e
|
||||||
|
RTC_IRQP_READ = 0x8008700b
|
||||||
|
RTC_IRQP_SET = 0x4008700c
|
||||||
|
RTC_PARAM_GET = 0x40187013
|
||||||
|
RTC_PARAM_SET = 0x40187014
|
||||||
|
RTC_PIE_OFF = 0x7006
|
||||||
|
RTC_PIE_ON = 0x7005
|
||||||
|
RTC_PLL_GET = 0x80207011
|
||||||
|
RTC_PLL_SET = 0x40207012
|
||||||
|
RTC_RD_TIME = 0x80247009
|
||||||
|
RTC_SET_TIME = 0x4024700a
|
||||||
|
RTC_UIE_OFF = 0x7004
|
||||||
|
RTC_UIE_ON = 0x7003
|
||||||
|
RTC_VL_CLR = 0x7014
|
||||||
|
RTC_VL_READ = 0x80047013
|
||||||
|
RTC_WIE_OFF = 0x7010
|
||||||
|
RTC_WIE_ON = 0x700f
|
||||||
|
RTC_WKALM_RD = 0x80287010
|
||||||
|
RTC_WKALM_SET = 0x4028700f
|
||||||
|
SCM_TIMESTAMPING = 0x25
|
||||||
|
SCM_TIMESTAMPING_OPT_STATS = 0x36
|
||||||
|
SCM_TIMESTAMPING_PKTINFO = 0x3a
|
||||||
|
SCM_TIMESTAMPNS = 0x23
|
||||||
|
SCM_TXTIME = 0x3d
|
||||||
|
SCM_WIFI_STATUS = 0x29
|
||||||
|
SFD_CLOEXEC = 0x80000
|
||||||
|
SFD_NONBLOCK = 0x800
|
||||||
|
SIOCATMARK = 0x8905
|
||||||
|
SIOCGPGRP = 0x8904
|
||||||
|
SIOCGSTAMPNS_NEW = 0x80108907
|
||||||
|
SIOCGSTAMP_NEW = 0x80108906
|
||||||
|
SIOCINQ = 0x541b
|
||||||
|
SIOCOUTQ = 0x5411
|
||||||
|
SIOCSPGRP = 0x8902
|
||||||
|
SOCK_CLOEXEC = 0x80000
|
||||||
|
SOCK_DGRAM = 0x2
|
||||||
|
SOCK_NONBLOCK = 0x800
|
||||||
|
SOCK_STREAM = 0x1
|
||||||
|
SOL_SOCKET = 0x1
|
||||||
|
SO_ACCEPTCONN = 0x1e
|
||||||
|
SO_ATTACH_BPF = 0x32
|
||||||
|
SO_ATTACH_REUSEPORT_CBPF = 0x33
|
||||||
|
SO_ATTACH_REUSEPORT_EBPF = 0x34
|
||||||
|
SO_BINDTODEVICE = 0x19
|
||||||
|
SO_BINDTOIFINDEX = 0x3e
|
||||||
|
SO_BPF_EXTENSIONS = 0x30
|
||||||
|
SO_BROADCAST = 0x6
|
||||||
|
SO_BSDCOMPAT = 0xe
|
||||||
|
SO_BUF_LOCK = 0x48
|
||||||
|
SO_BUSY_POLL = 0x2e
|
||||||
|
SO_BUSY_POLL_BUDGET = 0x46
|
||||||
|
SO_CNX_ADVICE = 0x35
|
||||||
|
SO_COOKIE = 0x39
|
||||||
|
SO_DETACH_REUSEPORT_BPF = 0x44
|
||||||
|
SO_DOMAIN = 0x27
|
||||||
|
SO_DONTROUTE = 0x5
|
||||||
|
SO_ERROR = 0x4
|
||||||
|
SO_INCOMING_CPU = 0x31
|
||||||
|
SO_INCOMING_NAPI_ID = 0x38
|
||||||
|
SO_KEEPALIVE = 0x9
|
||||||
|
SO_LINGER = 0xd
|
||||||
|
SO_LOCK_FILTER = 0x2c
|
||||||
|
SO_MARK = 0x24
|
||||||
|
SO_MAX_PACING_RATE = 0x2f
|
||||||
|
SO_MEMINFO = 0x37
|
||||||
|
SO_NETNS_COOKIE = 0x47
|
||||||
|
SO_NOFCS = 0x2b
|
||||||
|
SO_OOBINLINE = 0xa
|
||||||
|
SO_PASSCRED = 0x10
|
||||||
|
SO_PASSSEC = 0x22
|
||||||
|
SO_PEEK_OFF = 0x2a
|
||||||
|
SO_PEERCRED = 0x11
|
||||||
|
SO_PEERGROUPS = 0x3b
|
||||||
|
SO_PEERSEC = 0x1f
|
||||||
|
SO_PREFER_BUSY_POLL = 0x45
|
||||||
|
SO_PROTOCOL = 0x26
|
||||||
|
SO_RCVBUF = 0x8
|
||||||
|
SO_RCVBUFFORCE = 0x21
|
||||||
|
SO_RCVLOWAT = 0x12
|
||||||
|
SO_RCVTIMEO = 0x14
|
||||||
|
SO_RCVTIMEO_NEW = 0x42
|
||||||
|
SO_RCVTIMEO_OLD = 0x14
|
||||||
|
SO_RESERVE_MEM = 0x49
|
||||||
|
SO_REUSEADDR = 0x2
|
||||||
|
SO_REUSEPORT = 0xf
|
||||||
|
SO_RXQ_OVFL = 0x28
|
||||||
|
SO_SECURITY_AUTHENTICATION = 0x16
|
||||||
|
SO_SECURITY_ENCRYPTION_NETWORK = 0x18
|
||||||
|
SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
|
||||||
|
SO_SELECT_ERR_QUEUE = 0x2d
|
||||||
|
SO_SNDBUF = 0x7
|
||||||
|
SO_SNDBUFFORCE = 0x20
|
||||||
|
SO_SNDLOWAT = 0x13
|
||||||
|
SO_SNDTIMEO = 0x15
|
||||||
|
SO_SNDTIMEO_NEW = 0x43
|
||||||
|
SO_SNDTIMEO_OLD = 0x15
|
||||||
|
SO_TIMESTAMPING = 0x25
|
||||||
|
SO_TIMESTAMPING_NEW = 0x41
|
||||||
|
SO_TIMESTAMPING_OLD = 0x25
|
||||||
|
SO_TIMESTAMPNS = 0x23
|
||||||
|
SO_TIMESTAMPNS_NEW = 0x40
|
||||||
|
SO_TIMESTAMPNS_OLD = 0x23
|
||||||
|
SO_TIMESTAMP_NEW = 0x3f
|
||||||
|
SO_TXTIME = 0x3d
|
||||||
|
SO_TYPE = 0x3
|
||||||
|
SO_WIFI_STATUS = 0x29
|
||||||
|
SO_ZEROCOPY = 0x3c
|
||||||
|
TAB1 = 0x800
|
||||||
|
TAB2 = 0x1000
|
||||||
|
TAB3 = 0x1800
|
||||||
|
TABDLY = 0x1800
|
||||||
|
TCFLSH = 0x540b
|
||||||
|
TCGETA = 0x5405
|
||||||
|
TCGETS = 0x5401
|
||||||
|
TCGETS2 = 0x802c542a
|
||||||
|
TCGETX = 0x5432
|
||||||
|
TCSAFLUSH = 0x2
|
||||||
|
TCSBRK = 0x5409
|
||||||
|
TCSBRKP = 0x5425
|
||||||
|
TCSETA = 0x5406
|
||||||
|
TCSETAF = 0x5408
|
||||||
|
TCSETAW = 0x5407
|
||||||
|
TCSETS = 0x5402
|
||||||
|
TCSETS2 = 0x402c542b
|
||||||
|
TCSETSF = 0x5404
|
||||||
|
TCSETSF2 = 0x402c542d
|
||||||
|
TCSETSW = 0x5403
|
||||||
|
TCSETSW2 = 0x402c542c
|
||||||
|
TCSETX = 0x5433
|
||||||
|
TCSETXF = 0x5434
|
||||||
|
TCSETXW = 0x5435
|
||||||
|
TCXONC = 0x540a
|
||||||
|
TFD_CLOEXEC = 0x80000
|
||||||
|
TFD_NONBLOCK = 0x800
|
||||||
|
TIOCCBRK = 0x5428
|
||||||
|
TIOCCONS = 0x541d
|
||||||
|
TIOCEXCL = 0x540c
|
||||||
|
TIOCGDEV = 0x80045432
|
||||||
|
TIOCGETD = 0x5424
|
||||||
|
TIOCGEXCL = 0x80045440
|
||||||
|
TIOCGICOUNT = 0x545d
|
||||||
|
TIOCGISO7816 = 0x80285442
|
||||||
|
TIOCGLCKTRMIOS = 0x5456
|
||||||
|
TIOCGPGRP = 0x540f
|
||||||
|
TIOCGPKT = 0x80045438
|
||||||
|
TIOCGPTLCK = 0x80045439
|
||||||
|
TIOCGPTN = 0x80045430
|
||||||
|
TIOCGPTPEER = 0x5441
|
||||||
|
TIOCGRS485 = 0x542e
|
||||||
|
TIOCGSERIAL = 0x541e
|
||||||
|
TIOCGSID = 0x5429
|
||||||
|
TIOCGSOFTCAR = 0x5419
|
||||||
|
TIOCGWINSZ = 0x5413
|
||||||
|
TIOCINQ = 0x541b
|
||||||
|
TIOCLINUX = 0x541c
|
||||||
|
TIOCMBIC = 0x5417
|
||||||
|
TIOCMBIS = 0x5416
|
||||||
|
TIOCMGET = 0x5415
|
||||||
|
TIOCMIWAIT = 0x545c
|
||||||
|
TIOCMSET = 0x5418
|
||||||
|
TIOCM_CAR = 0x40
|
||||||
|
TIOCM_CD = 0x40
|
||||||
|
TIOCM_CTS = 0x20
|
||||||
|
TIOCM_DSR = 0x100
|
||||||
|
TIOCM_RI = 0x80
|
||||||
|
TIOCM_RNG = 0x80
|
||||||
|
TIOCM_SR = 0x10
|
||||||
|
TIOCM_ST = 0x8
|
||||||
|
TIOCNOTTY = 0x5422
|
||||||
|
TIOCNXCL = 0x540d
|
||||||
|
TIOCOUTQ = 0x5411
|
||||||
|
TIOCPKT = 0x5420
|
||||||
|
TIOCSBRK = 0x5427
|
||||||
|
TIOCSCTTY = 0x540e
|
||||||
|
TIOCSERCONFIG = 0x5453
|
||||||
|
TIOCSERGETLSR = 0x5459
|
||||||
|
TIOCSERGETMULTI = 0x545a
|
||||||
|
TIOCSERGSTRUCT = 0x5458
|
||||||
|
TIOCSERGWILD = 0x5454
|
||||||
|
TIOCSERSETMULTI = 0x545b
|
||||||
|
TIOCSERSWILD = 0x5455
|
||||||
|
TIOCSER_TEMT = 0x1
|
||||||
|
TIOCSETD = 0x5423
|
||||||
|
TIOCSIG = 0x40045436
|
||||||
|
TIOCSISO7816 = 0xc0285443
|
||||||
|
TIOCSLCKTRMIOS = 0x5457
|
||||||
|
TIOCSPGRP = 0x5410
|
||||||
|
TIOCSPTLCK = 0x40045431
|
||||||
|
TIOCSRS485 = 0x542f
|
||||||
|
TIOCSSERIAL = 0x541f
|
||||||
|
TIOCSSOFTCAR = 0x541a
|
||||||
|
TIOCSTI = 0x5412
|
||||||
|
TIOCSWINSZ = 0x5414
|
||||||
|
TIOCVHANGUP = 0x5437
|
||||||
|
TOSTOP = 0x100
|
||||||
|
TUNATTACHFILTER = 0x401054d5
|
||||||
|
TUNDETACHFILTER = 0x401054d6
|
||||||
|
TUNGETDEVNETNS = 0x54e3
|
||||||
|
TUNGETFEATURES = 0x800454cf
|
||||||
|
TUNGETFILTER = 0x801054db
|
||||||
|
TUNGETIFF = 0x800454d2
|
||||||
|
TUNGETSNDBUF = 0x800454d3
|
||||||
|
TUNGETVNETBE = 0x800454df
|
||||||
|
TUNGETVNETHDRSZ = 0x800454d7
|
||||||
|
TUNGETVNETLE = 0x800454dd
|
||||||
|
TUNSETCARRIER = 0x400454e2
|
||||||
|
TUNSETDEBUG = 0x400454c9
|
||||||
|
TUNSETFILTEREBPF = 0x800454e1
|
||||||
|
TUNSETGROUP = 0x400454ce
|
||||||
|
TUNSETIFF = 0x400454ca
|
||||||
|
TUNSETIFINDEX = 0x400454da
|
||||||
|
TUNSETLINK = 0x400454cd
|
||||||
|
TUNSETNOCSUM = 0x400454c8
|
||||||
|
TUNSETOFFLOAD = 0x400454d0
|
||||||
|
TUNSETOWNER = 0x400454cc
|
||||||
|
TUNSETPERSIST = 0x400454cb
|
||||||
|
TUNSETQUEUE = 0x400454d9
|
||||||
|
TUNSETSNDBUF = 0x400454d4
|
||||||
|
TUNSETSTEERINGEBPF = 0x800454e0
|
||||||
|
TUNSETTXFILTER = 0x400454d1
|
||||||
|
TUNSETVNETBE = 0x400454de
|
||||||
|
TUNSETVNETHDRSZ = 0x400454d8
|
||||||
|
TUNSETVNETLE = 0x400454dc
|
||||||
|
UBI_IOCATT = 0x40186f40
|
||||||
|
UBI_IOCDET = 0x40046f41
|
||||||
|
UBI_IOCEBCH = 0x40044f02
|
||||||
|
UBI_IOCEBER = 0x40044f01
|
||||||
|
UBI_IOCEBISMAP = 0x80044f05
|
||||||
|
UBI_IOCEBMAP = 0x40084f03
|
||||||
|
UBI_IOCEBUNMAP = 0x40044f04
|
||||||
|
UBI_IOCMKVOL = 0x40986f00
|
||||||
|
UBI_IOCRMVOL = 0x40046f01
|
||||||
|
UBI_IOCRNVOL = 0x51106f03
|
||||||
|
UBI_IOCRPEB = 0x40046f04
|
||||||
|
UBI_IOCRSVOL = 0x400c6f02
|
||||||
|
UBI_IOCSETVOLPROP = 0x40104f06
|
||||||
|
UBI_IOCSPEB = 0x40046f05
|
||||||
|
UBI_IOCVOLCRBLK = 0x40804f07
|
||||||
|
UBI_IOCVOLRMBLK = 0x4f08
|
||||||
|
UBI_IOCVOLUP = 0x40084f00
|
||||||
|
VDISCARD = 0xd
|
||||||
|
VEOF = 0x4
|
||||||
|
VEOL = 0xb
|
||||||
|
VEOL2 = 0x10
|
||||||
|
VMIN = 0x6
|
||||||
|
VREPRINT = 0xc
|
||||||
|
VSTART = 0x8
|
||||||
|
VSTOP = 0x9
|
||||||
|
VSUSP = 0xa
|
||||||
|
VSWTC = 0x7
|
||||||
|
VT1 = 0x4000
|
||||||
|
VTDLY = 0x4000
|
||||||
|
VTIME = 0x5
|
||||||
|
VWERASE = 0xe
|
||||||
|
WDIOC_GETBOOTSTATUS = 0x80045702
|
||||||
|
WDIOC_GETPRETIMEOUT = 0x80045709
|
||||||
|
WDIOC_GETSTATUS = 0x80045701
|
||||||
|
WDIOC_GETSUPPORT = 0x80285700
|
||||||
|
WDIOC_GETTEMP = 0x80045703
|
||||||
|
WDIOC_GETTIMELEFT = 0x8004570a
|
||||||
|
WDIOC_GETTIMEOUT = 0x80045707
|
||||||
|
WDIOC_KEEPALIVE = 0x80045705
|
||||||
|
WDIOC_SETOPTIONS = 0x80045704
|
||||||
|
WORDSIZE = 0x40
|
||||||
|
XCASE = 0x4
|
||||||
|
XTABS = 0x1800
|
||||||
|
_HIDIOCGRAWNAME = 0x80804804
|
||||||
|
_HIDIOCGRAWPHYS = 0x80404805
|
||||||
|
_HIDIOCGRAWUNIQ = 0x80404808
|
||||||
|
)
|
||||||
|
|
||||||
|
// Errors
|
||||||
|
const (
|
||||||
|
EADDRINUSE = syscall.Errno(0x62)
|
||||||
|
EADDRNOTAVAIL = syscall.Errno(0x63)
|
||||||
|
EADV = syscall.Errno(0x44)
|
||||||
|
EAFNOSUPPORT = syscall.Errno(0x61)
|
||||||
|
EALREADY = syscall.Errno(0x72)
|
||||||
|
EBADE = syscall.Errno(0x34)
|
||||||
|
EBADFD = syscall.Errno(0x4d)
|
||||||
|
EBADMSG = syscall.Errno(0x4a)
|
||||||
|
EBADR = syscall.Errno(0x35)
|
||||||
|
EBADRQC = syscall.Errno(0x38)
|
||||||
|
EBADSLT = syscall.Errno(0x39)
|
||||||
|
EBFONT = syscall.Errno(0x3b)
|
||||||
|
ECANCELED = syscall.Errno(0x7d)
|
||||||
|
ECHRNG = syscall.Errno(0x2c)
|
||||||
|
ECOMM = syscall.Errno(0x46)
|
||||||
|
ECONNABORTED = syscall.Errno(0x67)
|
||||||
|
ECONNREFUSED = syscall.Errno(0x6f)
|
||||||
|
ECONNRESET = syscall.Errno(0x68)
|
||||||
|
EDEADLK = syscall.Errno(0x23)
|
||||||
|
EDEADLOCK = syscall.Errno(0x23)
|
||||||
|
EDESTADDRREQ = syscall.Errno(0x59)
|
||||||
|
EDOTDOT = syscall.Errno(0x49)
|
||||||
|
EDQUOT = syscall.Errno(0x7a)
|
||||||
|
EHOSTDOWN = syscall.Errno(0x70)
|
||||||
|
EHOSTUNREACH = syscall.Errno(0x71)
|
||||||
|
EHWPOISON = syscall.Errno(0x85)
|
||||||
|
EIDRM = syscall.Errno(0x2b)
|
||||||
|
EILSEQ = syscall.Errno(0x54)
|
||||||
|
EINPROGRESS = syscall.Errno(0x73)
|
||||||
|
EISCONN = syscall.Errno(0x6a)
|
||||||
|
EISNAM = syscall.Errno(0x78)
|
||||||
|
EKEYEXPIRED = syscall.Errno(0x7f)
|
||||||
|
EKEYREJECTED = syscall.Errno(0x81)
|
||||||
|
EKEYREVOKED = syscall.Errno(0x80)
|
||||||
|
EL2HLT = syscall.Errno(0x33)
|
||||||
|
EL2NSYNC = syscall.Errno(0x2d)
|
||||||
|
EL3HLT = syscall.Errno(0x2e)
|
||||||
|
EL3RST = syscall.Errno(0x2f)
|
||||||
|
ELIBACC = syscall.Errno(0x4f)
|
||||||
|
ELIBBAD = syscall.Errno(0x50)
|
||||||
|
ELIBEXEC = syscall.Errno(0x53)
|
||||||
|
ELIBMAX = syscall.Errno(0x52)
|
||||||
|
ELIBSCN = syscall.Errno(0x51)
|
||||||
|
ELNRNG = syscall.Errno(0x30)
|
||||||
|
ELOOP = syscall.Errno(0x28)
|
||||||
|
EMEDIUMTYPE = syscall.Errno(0x7c)
|
||||||
|
EMSGSIZE = syscall.Errno(0x5a)
|
||||||
|
EMULTIHOP = syscall.Errno(0x48)
|
||||||
|
ENAMETOOLONG = syscall.Errno(0x24)
|
||||||
|
ENAVAIL = syscall.Errno(0x77)
|
||||||
|
ENETDOWN = syscall.Errno(0x64)
|
||||||
|
ENETRESET = syscall.Errno(0x66)
|
||||||
|
ENETUNREACH = syscall.Errno(0x65)
|
||||||
|
ENOANO = syscall.Errno(0x37)
|
||||||
|
ENOBUFS = syscall.Errno(0x69)
|
||||||
|
ENOCSI = syscall.Errno(0x32)
|
||||||
|
ENODATA = syscall.Errno(0x3d)
|
||||||
|
ENOKEY = syscall.Errno(0x7e)
|
||||||
|
ENOLCK = syscall.Errno(0x25)
|
||||||
|
ENOLINK = syscall.Errno(0x43)
|
||||||
|
ENOMEDIUM = syscall.Errno(0x7b)
|
||||||
|
ENOMSG = syscall.Errno(0x2a)
|
||||||
|
ENONET = syscall.Errno(0x40)
|
||||||
|
ENOPKG = syscall.Errno(0x41)
|
||||||
|
ENOPROTOOPT = syscall.Errno(0x5c)
|
||||||
|
ENOSR = syscall.Errno(0x3f)
|
||||||
|
ENOSTR = syscall.Errno(0x3c)
|
||||||
|
ENOSYS = syscall.Errno(0x26)
|
||||||
|
ENOTCONN = syscall.Errno(0x6b)
|
||||||
|
ENOTEMPTY = syscall.Errno(0x27)
|
||||||
|
ENOTNAM = syscall.Errno(0x76)
|
||||||
|
ENOTRECOVERABLE = syscall.Errno(0x83)
|
||||||
|
ENOTSOCK = syscall.Errno(0x58)
|
||||||
|
ENOTSUP = syscall.Errno(0x5f)
|
||||||
|
ENOTUNIQ = syscall.Errno(0x4c)
|
||||||
|
EOPNOTSUPP = syscall.Errno(0x5f)
|
||||||
|
EOVERFLOW = syscall.Errno(0x4b)
|
||||||
|
EOWNERDEAD = syscall.Errno(0x82)
|
||||||
|
EPFNOSUPPORT = syscall.Errno(0x60)
|
||||||
|
EPROTO = syscall.Errno(0x47)
|
||||||
|
EPROTONOSUPPORT = syscall.Errno(0x5d)
|
||||||
|
EPROTOTYPE = syscall.Errno(0x5b)
|
||||||
|
EREMCHG = syscall.Errno(0x4e)
|
||||||
|
EREMOTE = syscall.Errno(0x42)
|
||||||
|
EREMOTEIO = syscall.Errno(0x79)
|
||||||
|
ERESTART = syscall.Errno(0x55)
|
||||||
|
ERFKILL = syscall.Errno(0x84)
|
||||||
|
ESHUTDOWN = syscall.Errno(0x6c)
|
||||||
|
ESOCKTNOSUPPORT = syscall.Errno(0x5e)
|
||||||
|
ESRMNT = syscall.Errno(0x45)
|
||||||
|
ESTALE = syscall.Errno(0x74)
|
||||||
|
ESTRPIPE = syscall.Errno(0x56)
|
||||||
|
ETIME = syscall.Errno(0x3e)
|
||||||
|
ETIMEDOUT = syscall.Errno(0x6e)
|
||||||
|
ETOOMANYREFS = syscall.Errno(0x6d)
|
||||||
|
EUCLEAN = syscall.Errno(0x75)
|
||||||
|
EUNATCH = syscall.Errno(0x31)
|
||||||
|
EUSERS = syscall.Errno(0x57)
|
||||||
|
EXFULL = syscall.Errno(0x36)
|
||||||
|
)
|
||||||
|
|
||||||
|
// Signals
|
||||||
|
const (
|
||||||
|
SIGBUS = syscall.Signal(0x7)
|
||||||
|
SIGCHLD = syscall.Signal(0x11)
|
||||||
|
SIGCLD = syscall.Signal(0x11)
|
||||||
|
SIGCONT = syscall.Signal(0x12)
|
||||||
|
SIGIO = syscall.Signal(0x1d)
|
||||||
|
SIGPOLL = syscall.Signal(0x1d)
|
||||||
|
SIGPROF = syscall.Signal(0x1b)
|
||||||
|
SIGPWR = syscall.Signal(0x1e)
|
||||||
|
SIGSTKFLT = syscall.Signal(0x10)
|
||||||
|
SIGSTOP = syscall.Signal(0x13)
|
||||||
|
SIGSYS = syscall.Signal(0x1f)
|
||||||
|
SIGTSTP = syscall.Signal(0x14)
|
||||||
|
SIGTTIN = syscall.Signal(0x15)
|
||||||
|
SIGTTOU = syscall.Signal(0x16)
|
||||||
|
SIGURG = syscall.Signal(0x17)
|
||||||
|
SIGUSR1 = syscall.Signal(0xa)
|
||||||
|
SIGUSR2 = syscall.Signal(0xc)
|
||||||
|
SIGVTALRM = syscall.Signal(0x1a)
|
||||||
|
SIGWINCH = syscall.Signal(0x1c)
|
||||||
|
SIGXCPU = syscall.Signal(0x18)
|
||||||
|
SIGXFSZ = syscall.Signal(0x19)
|
||||||
|
)
|
||||||
|
|
||||||
|
// Error table
|
||||||
|
var errorList = [...]struct {
|
||||||
|
num syscall.Errno
|
||||||
|
name string
|
||||||
|
desc string
|
||||||
|
}{
|
||||||
|
{1, "EPERM", "operation not permitted"},
|
||||||
|
{2, "ENOENT", "no such file or directory"},
|
||||||
|
{3, "ESRCH", "no such process"},
|
||||||
|
{4, "EINTR", "interrupted system call"},
|
||||||
|
{5, "EIO", "input/output error"},
|
||||||
|
{6, "ENXIO", "no such device or address"},
|
||||||
|
{7, "E2BIG", "argument list too long"},
|
||||||
|
{8, "ENOEXEC", "exec format error"},
|
||||||
|
{9, "EBADF", "bad file descriptor"},
|
||||||
|
{10, "ECHILD", "no child processes"},
|
||||||
|
{11, "EAGAIN", "resource temporarily unavailable"},
|
||||||
|
{12, "ENOMEM", "cannot allocate memory"},
|
||||||
|
{13, "EACCES", "permission denied"},
|
||||||
|
{14, "EFAULT", "bad address"},
|
||||||
|
{15, "ENOTBLK", "block device required"},
|
||||||
|
{16, "EBUSY", "device or resource busy"},
|
||||||
|
{17, "EEXIST", "file exists"},
|
||||||
|
{18, "EXDEV", "invalid cross-device link"},
|
||||||
|
{19, "ENODEV", "no such device"},
|
||||||
|
{20, "ENOTDIR", "not a directory"},
|
||||||
|
{21, "EISDIR", "is a directory"},
|
||||||
|
{22, "EINVAL", "invalid argument"},
|
||||||
|
{23, "ENFILE", "too many open files in system"},
|
||||||
|
{24, "EMFILE", "too many open files"},
|
||||||
|
{25, "ENOTTY", "inappropriate ioctl for device"},
|
||||||
|
{26, "ETXTBSY", "text file busy"},
|
||||||
|
{27, "EFBIG", "file too large"},
|
||||||
|
{28, "ENOSPC", "no space left on device"},
|
||||||
|
{29, "ESPIPE", "illegal seek"},
|
||||||
|
{30, "EROFS", "read-only file system"},
|
||||||
|
{31, "EMLINK", "too many links"},
|
||||||
|
{32, "EPIPE", "broken pipe"},
|
||||||
|
{33, "EDOM", "numerical argument out of domain"},
|
||||||
|
{34, "ERANGE", "numerical result out of range"},
|
||||||
|
{35, "EDEADLK", "resource deadlock avoided"},
|
||||||
|
{36, "ENAMETOOLONG", "file name too long"},
|
||||||
|
{37, "ENOLCK", "no locks available"},
|
||||||
|
{38, "ENOSYS", "function not implemented"},
|
||||||
|
{39, "ENOTEMPTY", "directory not empty"},
|
||||||
|
{40, "ELOOP", "too many levels of symbolic links"},
|
||||||
|
{42, "ENOMSG", "no message of desired type"},
|
||||||
|
{43, "EIDRM", "identifier removed"},
|
||||||
|
{44, "ECHRNG", "channel number out of range"},
|
||||||
|
{45, "EL2NSYNC", "level 2 not synchronized"},
|
||||||
|
{46, "EL3HLT", "level 3 halted"},
|
||||||
|
{47, "EL3RST", "level 3 reset"},
|
||||||
|
{48, "ELNRNG", "link number out of range"},
|
||||||
|
{49, "EUNATCH", "protocol driver not attached"},
|
||||||
|
{50, "ENOCSI", "no CSI structure available"},
|
||||||
|
{51, "EL2HLT", "level 2 halted"},
|
||||||
|
{52, "EBADE", "invalid exchange"},
|
||||||
|
{53, "EBADR", "invalid request descriptor"},
|
||||||
|
{54, "EXFULL", "exchange full"},
|
||||||
|
{55, "ENOANO", "no anode"},
|
||||||
|
{56, "EBADRQC", "invalid request code"},
|
||||||
|
{57, "EBADSLT", "invalid slot"},
|
||||||
|
{59, "EBFONT", "bad font file format"},
|
||||||
|
{60, "ENOSTR", "device not a stream"},
|
||||||
|
{61, "ENODATA", "no data available"},
|
||||||
|
{62, "ETIME", "timer expired"},
|
||||||
|
{63, "ENOSR", "out of streams resources"},
|
||||||
|
{64, "ENONET", "machine is not on the network"},
|
||||||
|
{65, "ENOPKG", "package not installed"},
|
||||||
|
{66, "EREMOTE", "object is remote"},
|
||||||
|
{67, "ENOLINK", "link has been severed"},
|
||||||
|
{68, "EADV", "advertise error"},
|
||||||
|
{69, "ESRMNT", "srmount error"},
|
||||||
|
{70, "ECOMM", "communication error on send"},
|
||||||
|
{71, "EPROTO", "protocol error"},
|
||||||
|
{72, "EMULTIHOP", "multihop attempted"},
|
||||||
|
{73, "EDOTDOT", "RFS specific error"},
|
||||||
|
{74, "EBADMSG", "bad message"},
|
||||||
|
{75, "EOVERFLOW", "value too large for defined data type"},
|
||||||
|
{76, "ENOTUNIQ", "name not unique on network"},
|
||||||
|
{77, "EBADFD", "file descriptor in bad state"},
|
||||||
|
{78, "EREMCHG", "remote address changed"},
|
||||||
|
{79, "ELIBACC", "can not access a needed shared library"},
|
||||||
|
{80, "ELIBBAD", "accessing a corrupted shared library"},
|
||||||
|
{81, "ELIBSCN", ".lib section in a.out corrupted"},
|
||||||
|
{82, "ELIBMAX", "attempting to link in too many shared libraries"},
|
||||||
|
{83, "ELIBEXEC", "cannot exec a shared library directly"},
|
||||||
|
{84, "EILSEQ", "invalid or incomplete multibyte or wide character"},
|
||||||
|
{85, "ERESTART", "interrupted system call should be restarted"},
|
||||||
|
{86, "ESTRPIPE", "streams pipe error"},
|
||||||
|
{87, "EUSERS", "too many users"},
|
||||||
|
{88, "ENOTSOCK", "socket operation on non-socket"},
|
||||||
|
{89, "EDESTADDRREQ", "destination address required"},
|
||||||
|
{90, "EMSGSIZE", "message too long"},
|
||||||
|
{91, "EPROTOTYPE", "protocol wrong type for socket"},
|
||||||
|
{92, "ENOPROTOOPT", "protocol not available"},
|
||||||
|
{93, "EPROTONOSUPPORT", "protocol not supported"},
|
||||||
|
{94, "ESOCKTNOSUPPORT", "socket type not supported"},
|
||||||
|
{95, "ENOTSUP", "operation not supported"},
|
||||||
|
{96, "EPFNOSUPPORT", "protocol family not supported"},
|
||||||
|
{97, "EAFNOSUPPORT", "address family not supported by protocol"},
|
||||||
|
{98, "EADDRINUSE", "address already in use"},
|
||||||
|
{99, "EADDRNOTAVAIL", "cannot assign requested address"},
|
||||||
|
{100, "ENETDOWN", "network is down"},
|
||||||
|
{101, "ENETUNREACH", "network is unreachable"},
|
||||||
|
{102, "ENETRESET", "network dropped connection on reset"},
|
||||||
|
{103, "ECONNABORTED", "software caused connection abort"},
|
||||||
|
{104, "ECONNRESET", "connection reset by peer"},
|
||||||
|
{105, "ENOBUFS", "no buffer space available"},
|
||||||
|
{106, "EISCONN", "transport endpoint is already connected"},
|
||||||
|
{107, "ENOTCONN", "transport endpoint is not connected"},
|
||||||
|
{108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"},
|
||||||
|
{109, "ETOOMANYREFS", "too many references: cannot splice"},
|
||||||
|
{110, "ETIMEDOUT", "connection timed out"},
|
||||||
|
{111, "ECONNREFUSED", "connection refused"},
|
||||||
|
{112, "EHOSTDOWN", "host is down"},
|
||||||
|
{113, "EHOSTUNREACH", "no route to host"},
|
||||||
|
{114, "EALREADY", "operation already in progress"},
|
||||||
|
{115, "EINPROGRESS", "operation now in progress"},
|
||||||
|
{116, "ESTALE", "stale file handle"},
|
||||||
|
{117, "EUCLEAN", "structure needs cleaning"},
|
||||||
|
{118, "ENOTNAM", "not a XENIX named type file"},
|
||||||
|
{119, "ENAVAIL", "no XENIX semaphores available"},
|
||||||
|
{120, "EISNAM", "is a named type file"},
|
||||||
|
{121, "EREMOTEIO", "remote I/O error"},
|
||||||
|
{122, "EDQUOT", "disk quota exceeded"},
|
||||||
|
{123, "ENOMEDIUM", "no medium found"},
|
||||||
|
{124, "EMEDIUMTYPE", "wrong medium type"},
|
||||||
|
{125, "ECANCELED", "operation canceled"},
|
||||||
|
{126, "ENOKEY", "required key not available"},
|
||||||
|
{127, "EKEYEXPIRED", "key has expired"},
|
||||||
|
{128, "EKEYREVOKED", "key has been revoked"},
|
||||||
|
{129, "EKEYREJECTED", "key was rejected by service"},
|
||||||
|
{130, "EOWNERDEAD", "owner died"},
|
||||||
|
{131, "ENOTRECOVERABLE", "state not recoverable"},
|
||||||
|
{132, "ERFKILL", "operation not possible due to RF-kill"},
|
||||||
|
{133, "EHWPOISON", "memory page has hardware error"},
|
||||||
|
}
|
||||||
|
|
||||||
|
// Signal table
|
||||||
|
var signalList = [...]struct {
|
||||||
|
num syscall.Signal
|
||||||
|
name string
|
||||||
|
desc string
|
||||||
|
}{
|
||||||
|
{1, "SIGHUP", "hangup"},
|
||||||
|
{2, "SIGINT", "interrupt"},
|
||||||
|
{3, "SIGQUIT", "quit"},
|
||||||
|
{4, "SIGILL", "illegal instruction"},
|
||||||
|
{5, "SIGTRAP", "trace/breakpoint trap"},
|
||||||
|
{6, "SIGABRT", "aborted"},
|
||||||
|
{7, "SIGBUS", "bus error"},
|
||||||
|
{8, "SIGFPE", "floating point exception"},
|
||||||
|
{9, "SIGKILL", "killed"},
|
||||||
|
{10, "SIGUSR1", "user defined signal 1"},
|
||||||
|
{11, "SIGSEGV", "segmentation fault"},
|
||||||
|
{12, "SIGUSR2", "user defined signal 2"},
|
||||||
|
{13, "SIGPIPE", "broken pipe"},
|
||||||
|
{14, "SIGALRM", "alarm clock"},
|
||||||
|
{15, "SIGTERM", "terminated"},
|
||||||
|
{16, "SIGSTKFLT", "stack fault"},
|
||||||
|
{17, "SIGCHLD", "child exited"},
|
||||||
|
{18, "SIGCONT", "continued"},
|
||||||
|
{19, "SIGSTOP", "stopped (signal)"},
|
||||||
|
{20, "SIGTSTP", "stopped"},
|
||||||
|
{21, "SIGTTIN", "stopped (tty input)"},
|
||||||
|
{22, "SIGTTOU", "stopped (tty output)"},
|
||||||
|
{23, "SIGURG", "urgent I/O condition"},
|
||||||
|
{24, "SIGXCPU", "CPU time limit exceeded"},
|
||||||
|
{25, "SIGXFSZ", "file size limit exceeded"},
|
||||||
|
{26, "SIGVTALRM", "virtual timer expired"},
|
||||||
|
{27, "SIGPROF", "profiling timer expired"},
|
||||||
|
{28, "SIGWINCH", "window changed"},
|
||||||
|
{29, "SIGIO", "I/O possible"},
|
||||||
|
{30, "SIGPWR", "power failure"},
|
||||||
|
{31, "SIGSYS", "bad system call"},
|
||||||
|
}
|
552
vendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go
generated
vendored
Normal file
552
vendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go
generated
vendored
Normal file
|
@ -0,0 +1,552 @@
|
||||||
|
// go run mksyscall.go -tags linux,loong64 syscall_linux.go syscall_linux_loong64.go
|
||||||
|
// Code generated by the command above; see README.md. DO NOT EDIT.
|
||||||
|
|
||||||
|
//go:build linux && loong64
|
||||||
|
// +build linux,loong64
|
||||||
|
|
||||||
|
package unix
|
||||||
|
|
||||||
|
import (
|
||||||
|
"syscall"
|
||||||
|
"unsafe"
|
||||||
|
)
|
||||||
|
|
||||||
|
var _ syscall.Errno
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {
|
||||||
|
_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
|
||||||
|
_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
|
||||||
|
r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)
|
||||||
|
n = int64(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(events) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&events[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
|
||||||
|
_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Fchown(fd int, uid int, gid int) (err error) {
|
||||||
|
_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Fstat(fd int, stat *Stat_t) (err error) {
|
||||||
|
_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
|
||||||
|
var _p0 *byte
|
||||||
|
_p0, err = BytePtrFromString(path)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Fstatfs(fd int, buf *Statfs_t) (err error) {
|
||||||
|
_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Ftruncate(fd int, length int64) (err error) {
|
||||||
|
_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Getegid() (egid int) {
|
||||||
|
r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)
|
||||||
|
egid = int(r0)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Geteuid() (euid int) {
|
||||||
|
r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)
|
||||||
|
euid = int(r0)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Getgid() (gid int) {
|
||||||
|
r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)
|
||||||
|
gid = int(r0)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Getuid() (uid int) {
|
||||||
|
r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)
|
||||||
|
uid = int(r0)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Listen(s int, n int) (err error) {
|
||||||
|
_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(p) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(p) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Seek(fd int, offset int64, whence int) (off int64, err error) {
|
||||||
|
r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
|
||||||
|
off = int64(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
|
||||||
|
r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)
|
||||||
|
written = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func setfsgid(gid int) (prev int, err error) {
|
||||||
|
r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)
|
||||||
|
prev = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func setfsuid(uid int) (prev int, err error) {
|
||||||
|
r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)
|
||||||
|
prev = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Setregid(rgid int, egid int) (err error) {
|
||||||
|
_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Setresgid(rgid int, egid int, sgid int) (err error) {
|
||||||
|
_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Setresuid(ruid int, euid int, suid int) (err error) {
|
||||||
|
_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Setreuid(ruid int, euid int) (err error) {
|
||||||
|
_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Shutdown(fd int, how int) (err error) {
|
||||||
|
_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {
|
||||||
|
r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
|
||||||
|
n = int64(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Statfs(path string, buf *Statfs_t) (err error) {
|
||||||
|
var _p0 *byte
|
||||||
|
_p0, err = BytePtrFromString(path)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func SyncFileRange(fd int, off int64, n int64, flags int) (err error) {
|
||||||
|
_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Truncate(path string, length int64) (err error) {
|
||||||
|
var _p0 *byte
|
||||||
|
_p0, err = BytePtrFromString(path)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
|
||||||
|
r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
|
||||||
|
fd = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
|
||||||
|
_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
|
||||||
|
_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func getgroups(n int, list *_Gid_t) (nn int, err error) {
|
||||||
|
r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
|
||||||
|
nn = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func setgroups(n int, list *_Gid_t) (err error) {
|
||||||
|
_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
|
||||||
|
_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
|
||||||
|
_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func socket(domain int, typ int, proto int) (fd int, err error) {
|
||||||
|
r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
|
||||||
|
fd = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
|
||||||
|
_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
|
||||||
|
_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
|
||||||
|
_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(p) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(buf) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&buf[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
|
||||||
|
r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
|
||||||
|
r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {
|
||||||
|
r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))
|
||||||
|
xaddr = uintptr(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Gettimeofday(tv *Timeval) (err error) {
|
||||||
|
_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {
|
||||||
|
var _p0 *byte
|
||||||
|
_p0, err = BytePtrFromString(cmdline)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
_, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
313
vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go
generated
vendored
Normal file
313
vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go
generated
vendored
Normal file
|
@ -0,0 +1,313 @@
|
||||||
|
// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
|
||||||
|
// Code generated by the command above; see README.md. DO NOT EDIT.
|
||||||
|
|
||||||
|
//go:build loong64 && linux
|
||||||
|
// +build loong64,linux
|
||||||
|
|
||||||
|
package unix
|
||||||
|
|
||||||
|
const (
|
||||||
|
SYS_IO_SETUP = 0
|
||||||
|
SYS_IO_DESTROY = 1
|
||||||
|
SYS_IO_SUBMIT = 2
|
||||||
|
SYS_IO_CANCEL = 3
|
||||||
|
SYS_IO_GETEVENTS = 4
|
||||||
|
SYS_SETXATTR = 5
|
||||||
|
SYS_LSETXATTR = 6
|
||||||
|
SYS_FSETXATTR = 7
|
||||||
|
SYS_GETXATTR = 8
|
||||||
|
SYS_LGETXATTR = 9
|
||||||
|
SYS_FGETXATTR = 10
|
||||||
|
SYS_LISTXATTR = 11
|
||||||
|
SYS_LLISTXATTR = 12
|
||||||
|
SYS_FLISTXATTR = 13
|
||||||
|
SYS_REMOVEXATTR = 14
|
||||||
|
SYS_LREMOVEXATTR = 15
|
||||||
|
SYS_FREMOVEXATTR = 16
|
||||||
|
SYS_GETCWD = 17
|
||||||
|
SYS_LOOKUP_DCOOKIE = 18
|
||||||
|
SYS_EVENTFD2 = 19
|
||||||
|
SYS_EPOLL_CREATE1 = 20
|
||||||
|
SYS_EPOLL_CTL = 21
|
||||||
|
SYS_EPOLL_PWAIT = 22
|
||||||
|
SYS_DUP = 23
|
||||||
|
SYS_DUP3 = 24
|
||||||
|
SYS_FCNTL = 25
|
||||||
|
SYS_INOTIFY_INIT1 = 26
|
||||||
|
SYS_INOTIFY_ADD_WATCH = 27
|
||||||
|
SYS_INOTIFY_RM_WATCH = 28
|
||||||
|
SYS_IOCTL = 29
|
||||||
|
SYS_IOPRIO_SET = 30
|
||||||
|
SYS_IOPRIO_GET = 31
|
||||||
|
SYS_FLOCK = 32
|
||||||
|
SYS_MKNODAT = 33
|
||||||
|
SYS_MKDIRAT = 34
|
||||||
|
SYS_UNLINKAT = 35
|
||||||
|
SYS_SYMLINKAT = 36
|
||||||
|
SYS_LINKAT = 37
|
||||||
|
SYS_UMOUNT2 = 39
|
||||||
|
SYS_MOUNT = 40
|
||||||
|
SYS_PIVOT_ROOT = 41
|
||||||
|
SYS_NFSSERVCTL = 42
|
||||||
|
SYS_STATFS = 43
|
||||||
|
SYS_FSTATFS = 44
|
||||||
|
SYS_TRUNCATE = 45
|
||||||
|
SYS_FTRUNCATE = 46
|
||||||
|
SYS_FALLOCATE = 47
|
||||||
|
SYS_FACCESSAT = 48
|
||||||
|
SYS_CHDIR = 49
|
||||||
|
SYS_FCHDIR = 50
|
||||||
|
SYS_CHROOT = 51
|
||||||
|
SYS_FCHMOD = 52
|
||||||
|
SYS_FCHMODAT = 53
|
||||||
|
SYS_FCHOWNAT = 54
|
||||||
|
SYS_FCHOWN = 55
|
||||||
|
SYS_OPENAT = 56
|
||||||
|
SYS_CLOSE = 57
|
||||||
|
SYS_VHANGUP = 58
|
||||||
|
SYS_PIPE2 = 59
|
||||||
|
SYS_QUOTACTL = 60
|
||||||
|
SYS_GETDENTS64 = 61
|
||||||
|
SYS_LSEEK = 62
|
||||||
|
SYS_READ = 63
|
||||||
|
SYS_WRITE = 64
|
||||||
|
SYS_READV = 65
|
||||||
|
SYS_WRITEV = 66
|
||||||
|
SYS_PREAD64 = 67
|
||||||
|
SYS_PWRITE64 = 68
|
||||||
|
SYS_PREADV = 69
|
||||||
|
SYS_PWRITEV = 70
|
||||||
|
SYS_SENDFILE = 71
|
||||||
|
SYS_PSELECT6 = 72
|
||||||
|
SYS_PPOLL = 73
|
||||||
|
SYS_SIGNALFD4 = 74
|
||||||
|
SYS_VMSPLICE = 75
|
||||||
|
SYS_SPLICE = 76
|
||||||
|
SYS_TEE = 77
|
||||||
|
SYS_READLINKAT = 78
|
||||||
|
SYS_FSTATAT = 79
|
||||||
|
SYS_FSTAT = 80
|
||||||
|
SYS_SYNC = 81
|
||||||
|
SYS_FSYNC = 82
|
||||||
|
SYS_FDATASYNC = 83
|
||||||
|
SYS_SYNC_FILE_RANGE = 84
|
||||||
|
SYS_TIMERFD_CREATE = 85
|
||||||
|
SYS_TIMERFD_SETTIME = 86
|
||||||
|
SYS_TIMERFD_GETTIME = 87
|
||||||
|
SYS_UTIMENSAT = 88
|
||||||
|
SYS_ACCT = 89
|
||||||
|
SYS_CAPGET = 90
|
||||||
|
SYS_CAPSET = 91
|
||||||
|
SYS_PERSONALITY = 92
|
||||||
|
SYS_EXIT = 93
|
||||||
|
SYS_EXIT_GROUP = 94
|
||||||
|
SYS_WAITID = 95
|
||||||
|
SYS_SET_TID_ADDRESS = 96
|
||||||
|
SYS_UNSHARE = 97
|
||||||
|
SYS_FUTEX = 98
|
||||||
|
SYS_SET_ROBUST_LIST = 99
|
||||||
|
SYS_GET_ROBUST_LIST = 100
|
||||||
|
SYS_NANOSLEEP = 101
|
||||||
|
SYS_GETITIMER = 102
|
||||||
|
SYS_SETITIMER = 103
|
||||||
|
SYS_KEXEC_LOAD = 104
|
||||||
|
SYS_INIT_MODULE = 105
|
||||||
|
SYS_DELETE_MODULE = 106
|
||||||
|
SYS_TIMER_CREATE = 107
|
||||||
|
SYS_TIMER_GETTIME = 108
|
||||||
|
SYS_TIMER_GETOVERRUN = 109
|
||||||
|
SYS_TIMER_SETTIME = 110
|
||||||
|
SYS_TIMER_DELETE = 111
|
||||||
|
SYS_CLOCK_SETTIME = 112
|
||||||
|
SYS_CLOCK_GETTIME = 113
|
||||||
|
SYS_CLOCK_GETRES = 114
|
||||||
|
SYS_CLOCK_NANOSLEEP = 115
|
||||||
|
SYS_SYSLOG = 116
|
||||||
|
SYS_PTRACE = 117
|
||||||
|
SYS_SCHED_SETPARAM = 118
|
||||||
|
SYS_SCHED_SETSCHEDULER = 119
|
||||||
|
SYS_SCHED_GETSCHEDULER = 120
|
||||||
|
SYS_SCHED_GETPARAM = 121
|
||||||
|
SYS_SCHED_SETAFFINITY = 122
|
||||||
|
SYS_SCHED_GETAFFINITY = 123
|
||||||
|
SYS_SCHED_YIELD = 124
|
||||||
|
SYS_SCHED_GET_PRIORITY_MAX = 125
|
||||||
|
SYS_SCHED_GET_PRIORITY_MIN = 126
|
||||||
|
SYS_SCHED_RR_GET_INTERVAL = 127
|
||||||
|
SYS_RESTART_SYSCALL = 128
|
||||||
|
SYS_KILL = 129
|
||||||
|
SYS_TKILL = 130
|
||||||
|
SYS_TGKILL = 131
|
||||||
|
SYS_SIGALTSTACK = 132
|
||||||
|
SYS_RT_SIGSUSPEND = 133
|
||||||
|
SYS_RT_SIGACTION = 134
|
||||||
|
SYS_RT_SIGPROCMASK = 135
|
||||||
|
SYS_RT_SIGPENDING = 136
|
||||||
|
SYS_RT_SIGTIMEDWAIT = 137
|
||||||
|
SYS_RT_SIGQUEUEINFO = 138
|
||||||
|
SYS_RT_SIGRETURN = 139
|
||||||
|
SYS_SETPRIORITY = 140
|
||||||
|
SYS_GETPRIORITY = 141
|
||||||
|
SYS_REBOOT = 142
|
||||||
|
SYS_SETREGID = 143
|
||||||
|
SYS_SETGID = 144
|
||||||
|
SYS_SETREUID = 145
|
||||||
|
SYS_SETUID = 146
|
||||||
|
SYS_SETRESUID = 147
|
||||||
|
SYS_GETRESUID = 148
|
||||||
|
SYS_SETRESGID = 149
|
||||||
|
SYS_GETRESGID = 150
|
||||||
|
SYS_SETFSUID = 151
|
||||||
|
SYS_SETFSGID = 152
|
||||||
|
SYS_TIMES = 153
|
||||||
|
SYS_SETPGID = 154
|
||||||
|
SYS_GETPGID = 155
|
||||||
|
SYS_GETSID = 156
|
||||||
|
SYS_SETSID = 157
|
||||||
|
SYS_GETGROUPS = 158
|
||||||
|
SYS_SETGROUPS = 159
|
||||||
|
SYS_UNAME = 160
|
||||||
|
SYS_SETHOSTNAME = 161
|
||||||
|
SYS_SETDOMAINNAME = 162
|
||||||
|
SYS_GETRUSAGE = 165
|
||||||
|
SYS_UMASK = 166
|
||||||
|
SYS_PRCTL = 167
|
||||||
|
SYS_GETCPU = 168
|
||||||
|
SYS_GETTIMEOFDAY = 169
|
||||||
|
SYS_SETTIMEOFDAY = 170
|
||||||
|
SYS_ADJTIMEX = 171
|
||||||
|
SYS_GETPID = 172
|
||||||
|
SYS_GETPPID = 173
|
||||||
|
SYS_GETUID = 174
|
||||||
|
SYS_GETEUID = 175
|
||||||
|
SYS_GETGID = 176
|
||||||
|
SYS_GETEGID = 177
|
||||||
|
SYS_GETTID = 178
|
||||||
|
SYS_SYSINFO = 179
|
||||||
|
SYS_MQ_OPEN = 180
|
||||||
|
SYS_MQ_UNLINK = 181
|
||||||
|
SYS_MQ_TIMEDSEND = 182
|
||||||
|
SYS_MQ_TIMEDRECEIVE = 183
|
||||||
|
SYS_MQ_NOTIFY = 184
|
||||||
|
SYS_MQ_GETSETATTR = 185
|
||||||
|
SYS_MSGGET = 186
|
||||||
|
SYS_MSGCTL = 187
|
||||||
|
SYS_MSGRCV = 188
|
||||||
|
SYS_MSGSND = 189
|
||||||
|
SYS_SEMGET = 190
|
||||||
|
SYS_SEMCTL = 191
|
||||||
|
SYS_SEMTIMEDOP = 192
|
||||||
|
SYS_SEMOP = 193
|
||||||
|
SYS_SHMGET = 194
|
||||||
|
SYS_SHMCTL = 195
|
||||||
|
SYS_SHMAT = 196
|
||||||
|
SYS_SHMDT = 197
|
||||||
|
SYS_SOCKET = 198
|
||||||
|
SYS_SOCKETPAIR = 199
|
||||||
|
SYS_BIND = 200
|
||||||
|
SYS_LISTEN = 201
|
||||||
|
SYS_ACCEPT = 202
|
||||||
|
SYS_CONNECT = 203
|
||||||
|
SYS_GETSOCKNAME = 204
|
||||||
|
SYS_GETPEERNAME = 205
|
||||||
|
SYS_SENDTO = 206
|
||||||
|
SYS_RECVFROM = 207
|
||||||
|
SYS_SETSOCKOPT = 208
|
||||||
|
SYS_GETSOCKOPT = 209
|
||||||
|
SYS_SHUTDOWN = 210
|
||||||
|
SYS_SENDMSG = 211
|
||||||
|
SYS_RECVMSG = 212
|
||||||
|
SYS_READAHEAD = 213
|
||||||
|
SYS_BRK = 214
|
||||||
|
SYS_MUNMAP = 215
|
||||||
|
SYS_MREMAP = 216
|
||||||
|
SYS_ADD_KEY = 217
|
||||||
|
SYS_REQUEST_KEY = 218
|
||||||
|
SYS_KEYCTL = 219
|
||||||
|
SYS_CLONE = 220
|
||||||
|
SYS_EXECVE = 221
|
||||||
|
SYS_MMAP = 222
|
||||||
|
SYS_FADVISE64 = 223
|
||||||
|
SYS_SWAPON = 224
|
||||||
|
SYS_SWAPOFF = 225
|
||||||
|
SYS_MPROTECT = 226
|
||||||
|
SYS_MSYNC = 227
|
||||||
|
SYS_MLOCK = 228
|
||||||
|
SYS_MUNLOCK = 229
|
||||||
|
SYS_MLOCKALL = 230
|
||||||
|
SYS_MUNLOCKALL = 231
|
||||||
|
SYS_MINCORE = 232
|
||||||
|
SYS_MADVISE = 233
|
||||||
|
SYS_REMAP_FILE_PAGES = 234
|
||||||
|
SYS_MBIND = 235
|
||||||
|
SYS_GET_MEMPOLICY = 236
|
||||||
|
SYS_SET_MEMPOLICY = 237
|
||||||
|
SYS_MIGRATE_PAGES = 238
|
||||||
|
SYS_MOVE_PAGES = 239
|
||||||
|
SYS_RT_TGSIGQUEUEINFO = 240
|
||||||
|
SYS_PERF_EVENT_OPEN = 241
|
||||||
|
SYS_ACCEPT4 = 242
|
||||||
|
SYS_RECVMMSG = 243
|
||||||
|
SYS_ARCH_SPECIFIC_SYSCALL = 244
|
||||||
|
SYS_WAIT4 = 260
|
||||||
|
SYS_PRLIMIT64 = 261
|
||||||
|
SYS_FANOTIFY_INIT = 262
|
||||||
|
SYS_FANOTIFY_MARK = 263
|
||||||
|
SYS_NAME_TO_HANDLE_AT = 264
|
||||||
|
SYS_OPEN_BY_HANDLE_AT = 265
|
||||||
|
SYS_CLOCK_ADJTIME = 266
|
||||||
|
SYS_SYNCFS = 267
|
||||||
|
SYS_SETNS = 268
|
||||||
|
SYS_SENDMMSG = 269
|
||||||
|
SYS_PROCESS_VM_READV = 270
|
||||||
|
SYS_PROCESS_VM_WRITEV = 271
|
||||||
|
SYS_KCMP = 272
|
||||||
|
SYS_FINIT_MODULE = 273
|
||||||
|
SYS_SCHED_SETATTR = 274
|
||||||
|
SYS_SCHED_GETATTR = 275
|
||||||
|
SYS_RENAMEAT2 = 276
|
||||||
|
SYS_SECCOMP = 277
|
||||||
|
SYS_GETRANDOM = 278
|
||||||
|
SYS_MEMFD_CREATE = 279
|
||||||
|
SYS_BPF = 280
|
||||||
|
SYS_EXECVEAT = 281
|
||||||
|
SYS_USERFAULTFD = 282
|
||||||
|
SYS_MEMBARRIER = 283
|
||||||
|
SYS_MLOCK2 = 284
|
||||||
|
SYS_COPY_FILE_RANGE = 285
|
||||||
|
SYS_PREADV2 = 286
|
||||||
|
SYS_PWRITEV2 = 287
|
||||||
|
SYS_PKEY_MPROTECT = 288
|
||||||
|
SYS_PKEY_ALLOC = 289
|
||||||
|
SYS_PKEY_FREE = 290
|
||||||
|
SYS_STATX = 291
|
||||||
|
SYS_IO_PGETEVENTS = 292
|
||||||
|
SYS_RSEQ = 293
|
||||||
|
SYS_KEXEC_FILE_LOAD = 294
|
||||||
|
SYS_PIDFD_SEND_SIGNAL = 424
|
||||||
|
SYS_IO_URING_SETUP = 425
|
||||||
|
SYS_IO_URING_ENTER = 426
|
||||||
|
SYS_IO_URING_REGISTER = 427
|
||||||
|
SYS_OPEN_TREE = 428
|
||||||
|
SYS_MOVE_MOUNT = 429
|
||||||
|
SYS_FSOPEN = 430
|
||||||
|
SYS_FSCONFIG = 431
|
||||||
|
SYS_FSMOUNT = 432
|
||||||
|
SYS_FSPICK = 433
|
||||||
|
SYS_PIDFD_OPEN = 434
|
||||||
|
SYS_CLONE3 = 435
|
||||||
|
SYS_CLOSE_RANGE = 436
|
||||||
|
SYS_OPENAT2 = 437
|
||||||
|
SYS_PIDFD_GETFD = 438
|
||||||
|
SYS_FACCESSAT2 = 439
|
||||||
|
SYS_PROCESS_MADVISE = 440
|
||||||
|
SYS_EPOLL_PWAIT2 = 441
|
||||||
|
SYS_MOUNT_SETATTR = 442
|
||||||
|
SYS_QUOTACTL_FD = 443
|
||||||
|
SYS_LANDLOCK_CREATE_RULESET = 444
|
||||||
|
SYS_LANDLOCK_ADD_RULE = 445
|
||||||
|
SYS_LANDLOCK_RESTRICT_SELF = 446
|
||||||
|
SYS_PROCESS_MRELEASE = 448
|
||||||
|
SYS_FUTEX_WAITV = 449
|
||||||
|
SYS_SET_MEMPOLICY_HOME_NODE = 450
|
||||||
|
)
|
679
vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go
generated
vendored
Normal file
679
vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go
generated
vendored
Normal file
|
@ -0,0 +1,679 @@
|
||||||
|
// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go
|
||||||
|
// Code generated by the command above; see README.md. DO NOT EDIT.
|
||||||
|
|
||||||
|
//go:build loong64 && linux
|
||||||
|
// +build loong64,linux
|
||||||
|
|
||||||
|
package unix
|
||||||
|
|
||||||
|
const (
|
||||||
|
SizeofPtr = 0x8
|
||||||
|
SizeofLong = 0x8
|
||||||
|
)
|
||||||
|
|
||||||
|
type (
|
||||||
|
_C_long int64
|
||||||
|
)
|
||||||
|
|
||||||
|
type Timespec struct {
|
||||||
|
Sec int64
|
||||||
|
Nsec int64
|
||||||
|
}
|
||||||
|
|
||||||
|
type Timeval struct {
|
||||||
|
Sec int64
|
||||||
|
Usec int64
|
||||||
|
}
|
||||||
|
|
||||||
|
type Timex struct {
|
||||||
|
Modes uint32
|
||||||
|
Offset int64
|
||||||
|
Freq int64
|
||||||
|
Maxerror int64
|
||||||
|
Esterror int64
|
||||||
|
Status int32
|
||||||
|
Constant int64
|
||||||
|
Precision int64
|
||||||
|
Tolerance int64
|
||||||
|
Time Timeval
|
||||||
|
Tick int64
|
||||||
|
Ppsfreq int64
|
||||||
|
Jitter int64
|
||||||
|
Shift int32
|
||||||
|
Stabil int64
|
||||||
|
Jitcnt int64
|
||||||
|
Calcnt int64
|
||||||
|
Errcnt int64
|
||||||
|
Stbcnt int64
|
||||||
|
Tai int32
|
||||||
|
_ [44]byte
|
||||||
|
}
|
||||||
|
|
||||||
|
type Time_t int64
|
||||||
|
|
||||||
|
type Tms struct {
|
||||||
|
Utime int64
|
||||||
|
Stime int64
|
||||||
|
Cutime int64
|
||||||
|
Cstime int64
|
||||||
|
}
|
||||||
|
|
||||||
|
type Utimbuf struct {
|
||||||
|
Actime int64
|
||||||
|
Modtime int64
|
||||||
|
}
|
||||||
|
|
||||||
|
type Rusage struct {
|
||||||
|
Utime Timeval
|
||||||
|
Stime Timeval
|
||||||
|
Maxrss int64
|
||||||
|
Ixrss int64
|
||||||
|
Idrss int64
|
||||||
|
Isrss int64
|
||||||
|
Minflt int64
|
||||||
|
Majflt int64
|
||||||
|
Nswap int64
|
||||||
|
Inblock int64
|
||||||
|
Oublock int64
|
||||||
|
Msgsnd int64
|
||||||
|
Msgrcv int64
|
||||||
|
Nsignals int64
|
||||||
|
Nvcsw int64
|
||||||
|
Nivcsw int64
|
||||||
|
}
|
||||||
|
|
||||||
|
type Stat_t struct {
|
||||||
|
Dev uint64
|
||||||
|
Ino uint64
|
||||||
|
Mode uint32
|
||||||
|
Nlink uint32
|
||||||
|
Uid uint32
|
||||||
|
Gid uint32
|
||||||
|
Rdev uint64
|
||||||
|
_ uint64
|
||||||
|
Size int64
|
||||||
|
Blksize int32
|
||||||
|
_ int32
|
||||||
|
Blocks int64
|
||||||
|
Atim Timespec
|
||||||
|
Mtim Timespec
|
||||||
|
Ctim Timespec
|
||||||
|
_ [2]int32
|
||||||
|
}
|
||||||
|
|
||||||
|
type Dirent struct {
|
||||||
|
Ino uint64
|
||||||
|
Off int64
|
||||||
|
Reclen uint16
|
||||||
|
Type uint8
|
||||||
|
Name [256]int8
|
||||||
|
_ [5]byte
|
||||||
|
}
|
||||||
|
|
||||||
|
type Flock_t struct {
|
||||||
|
Type int16
|
||||||
|
Whence int16
|
||||||
|
Start int64
|
||||||
|
Len int64
|
||||||
|
Pid int32
|
||||||
|
_ [4]byte
|
||||||
|
}
|
||||||
|
|
||||||
|
type DmNameList struct {
|
||||||
|
Dev uint64
|
||||||
|
Next uint32
|
||||||
|
Name [0]byte
|
||||||
|
_ [4]byte
|
||||||
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
FADV_DONTNEED = 0x4
|
||||||
|
FADV_NOREUSE = 0x5
|
||||||
|
)
|
||||||
|
|
||||||
|
type RawSockaddrNFCLLCP struct {
|
||||||
|
Sa_family uint16
|
||||||
|
Dev_idx uint32
|
||||||
|
Target_idx uint32
|
||||||
|
Nfc_protocol uint32
|
||||||
|
Dsap uint8
|
||||||
|
Ssap uint8
|
||||||
|
Service_name [63]uint8
|
||||||
|
Service_name_len uint64
|
||||||
|
}
|
||||||
|
|
||||||
|
type RawSockaddr struct {
|
||||||
|
Family uint16
|
||||||
|
Data [14]int8
|
||||||
|
}
|
||||||
|
|
||||||
|
type RawSockaddrAny struct {
|
||||||
|
Addr RawSockaddr
|
||||||
|
Pad [96]int8
|
||||||
|
}
|
||||||
|
|
||||||
|
type Iovec struct {
|
||||||
|
Base *byte
|
||||||
|
Len uint64
|
||||||
|
}
|
||||||
|
|
||||||
|
type Msghdr struct {
|
||||||
|
Name *byte
|
||||||
|
Namelen uint32
|
||||||
|
Iov *Iovec
|
||||||
|
Iovlen uint64
|
||||||
|
Control *byte
|
||||||
|
Controllen uint64
|
||||||
|
Flags int32
|
||||||
|
_ [4]byte
|
||||||
|
}
|
||||||
|
|
||||||
|
type Cmsghdr struct {
|
||||||
|
Len uint64
|
||||||
|
Level int32
|
||||||
|
Type int32
|
||||||
|
}
|
||||||
|
|
||||||
|
type ifreq struct {
|
||||||
|
Ifrn [16]byte
|
||||||
|
Ifru [24]byte
|
||||||
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
SizeofSockaddrNFCLLCP = 0x60
|
||||||
|
SizeofIovec = 0x10
|
||||||
|
SizeofMsghdr = 0x38
|
||||||
|
SizeofCmsghdr = 0x10
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
SizeofSockFprog = 0x10
|
||||||
|
)
|
||||||
|
|
||||||
|
type PtraceRegs struct {
|
||||||
|
Regs [32]uint64
|
||||||
|
Orig_a0 uint64
|
||||||
|
Era uint64
|
||||||
|
Badv uint64
|
||||||
|
Reserved [10]uint64
|
||||||
|
}
|
||||||
|
|
||||||
|
type FdSet struct {
|
||||||
|
Bits [16]int64
|
||||||
|
}
|
||||||
|
|
||||||
|
type Sysinfo_t struct {
|
||||||
|
Uptime int64
|
||||||
|
Loads [3]uint64
|
||||||
|
Totalram uint64
|
||||||
|
Freeram uint64
|
||||||
|
Sharedram uint64
|
||||||
|
Bufferram uint64
|
||||||
|
Totalswap uint64
|
||||||
|
Freeswap uint64
|
||||||
|
Procs uint16
|
||||||
|
Pad uint16
|
||||||
|
Totalhigh uint64
|
||||||
|
Freehigh uint64
|
||||||
|
Unit uint32
|
||||||
|
_ [0]int8
|
||||||
|
_ [4]byte
|
||||||
|
}
|
||||||
|
|
||||||
|
type Ustat_t struct {
|
||||||
|
Tfree int32
|
||||||
|
Tinode uint64
|
||||||
|
Fname [6]int8
|
||||||
|
Fpack [6]int8
|
||||||
|
_ [4]byte
|
||||||
|
}
|
||||||
|
|
||||||
|
type EpollEvent struct {
|
||||||
|
Events uint32
|
||||||
|
_ int32
|
||||||
|
Fd int32
|
||||||
|
Pad int32
|
||||||
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
OPEN_TREE_CLOEXEC = 0x80000
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
POLLRDHUP = 0x2000
|
||||||
|
)
|
||||||
|
|
||||||
|
type Sigset_t struct {
|
||||||
|
Val [16]uint64
|
||||||
|
}
|
||||||
|
|
||||||
|
const _C__NSIG = 0x41
|
||||||
|
|
||||||
|
type Siginfo struct {
|
||||||
|
Signo int32
|
||||||
|
Errno int32
|
||||||
|
Code int32
|
||||||
|
_ int32
|
||||||
|
_ [112]byte
|
||||||
|
}
|
||||||
|
|
||||||
|
type Termios struct {
|
||||||
|
Iflag uint32
|
||||||
|
Oflag uint32
|
||||||
|
Cflag uint32
|
||||||
|
Lflag uint32
|
||||||
|
Line uint8
|
||||||
|
Cc [19]uint8
|
||||||
|
Ispeed uint32
|
||||||
|
Ospeed uint32
|
||||||
|
}
|
||||||
|
|
||||||
|
type Taskstats struct {
|
||||||
|
Version uint16
|
||||||
|
Ac_exitcode uint32
|
||||||
|
Ac_flag uint8
|
||||||
|
Ac_nice uint8
|
||||||
|
Cpu_count uint64
|
||||||
|
Cpu_delay_total uint64
|
||||||
|
Blkio_count uint64
|
||||||
|
Blkio_delay_total uint64
|
||||||
|
Swapin_count uint64
|
||||||
|
Swapin_delay_total uint64
|
||||||
|
Cpu_run_real_total uint64
|
||||||
|
Cpu_run_virtual_total uint64
|
||||||
|
Ac_comm [32]int8
|
||||||
|
Ac_sched uint8
|
||||||
|
Ac_pad [3]uint8
|
||||||
|
_ [4]byte
|
||||||
|
Ac_uid uint32
|
||||||
|
Ac_gid uint32
|
||||||
|
Ac_pid uint32
|
||||||
|
Ac_ppid uint32
|
||||||
|
Ac_btime uint32
|
||||||
|
Ac_etime uint64
|
||||||
|
Ac_utime uint64
|
||||||
|
Ac_stime uint64
|
||||||
|
Ac_minflt uint64
|
||||||
|
Ac_majflt uint64
|
||||||
|
Coremem uint64
|
||||||
|
Virtmem uint64
|
||||||
|
Hiwater_rss uint64
|
||||||
|
Hiwater_vm uint64
|
||||||
|
Read_char uint64
|
||||||
|
Write_char uint64
|
||||||
|
Read_syscalls uint64
|
||||||
|
Write_syscalls uint64
|
||||||
|
Read_bytes uint64
|
||||||
|
Write_bytes uint64
|
||||||
|
Cancelled_write_bytes uint64
|
||||||
|
Nvcsw uint64
|
||||||
|
Nivcsw uint64
|
||||||
|
Ac_utimescaled uint64
|
||||||
|
Ac_stimescaled uint64
|
||||||
|
Cpu_scaled_run_real_total uint64
|
||||||
|
Freepages_count uint64
|
||||||
|
Freepages_delay_total uint64
|
||||||
|
Thrashing_count uint64
|
||||||
|
Thrashing_delay_total uint64
|
||||||
|
Ac_btime64 uint64
|
||||||
|
Compact_count uint64
|
||||||
|
Compact_delay_total uint64
|
||||||
|
}
|
||||||
|
|
||||||
|
type cpuMask uint64
|
||||||
|
|
||||||
|
const (
|
||||||
|
_NCPUBITS = 0x40
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
CBitFieldMaskBit0 = 0x1
|
||||||
|
CBitFieldMaskBit1 = 0x2
|
||||||
|
CBitFieldMaskBit2 = 0x4
|
||||||
|
CBitFieldMaskBit3 = 0x8
|
||||||
|
CBitFieldMaskBit4 = 0x10
|
||||||
|
CBitFieldMaskBit5 = 0x20
|
||||||
|
CBitFieldMaskBit6 = 0x40
|
||||||
|
CBitFieldMaskBit7 = 0x80
|
||||||
|
CBitFieldMaskBit8 = 0x100
|
||||||
|
CBitFieldMaskBit9 = 0x200
|
||||||
|
CBitFieldMaskBit10 = 0x400
|
||||||
|
CBitFieldMaskBit11 = 0x800
|
||||||
|
CBitFieldMaskBit12 = 0x1000
|
||||||
|
CBitFieldMaskBit13 = 0x2000
|
||||||
|
CBitFieldMaskBit14 = 0x4000
|
||||||
|
CBitFieldMaskBit15 = 0x8000
|
||||||
|
CBitFieldMaskBit16 = 0x10000
|
||||||
|
CBitFieldMaskBit17 = 0x20000
|
||||||
|
CBitFieldMaskBit18 = 0x40000
|
||||||
|
CBitFieldMaskBit19 = 0x80000
|
||||||
|
CBitFieldMaskBit20 = 0x100000
|
||||||
|
CBitFieldMaskBit21 = 0x200000
|
||||||
|
CBitFieldMaskBit22 = 0x400000
|
||||||
|
CBitFieldMaskBit23 = 0x800000
|
||||||
|
CBitFieldMaskBit24 = 0x1000000
|
||||||
|
CBitFieldMaskBit25 = 0x2000000
|
||||||
|
CBitFieldMaskBit26 = 0x4000000
|
||||||
|
CBitFieldMaskBit27 = 0x8000000
|
||||||
|
CBitFieldMaskBit28 = 0x10000000
|
||||||
|
CBitFieldMaskBit29 = 0x20000000
|
||||||
|
CBitFieldMaskBit30 = 0x40000000
|
||||||
|
CBitFieldMaskBit31 = 0x80000000
|
||||||
|
CBitFieldMaskBit32 = 0x100000000
|
||||||
|
CBitFieldMaskBit33 = 0x200000000
|
||||||
|
CBitFieldMaskBit34 = 0x400000000
|
||||||
|
CBitFieldMaskBit35 = 0x800000000
|
||||||
|
CBitFieldMaskBit36 = 0x1000000000
|
||||||
|
CBitFieldMaskBit37 = 0x2000000000
|
||||||
|
CBitFieldMaskBit38 = 0x4000000000
|
||||||
|
CBitFieldMaskBit39 = 0x8000000000
|
||||||
|
CBitFieldMaskBit40 = 0x10000000000
|
||||||
|
CBitFieldMaskBit41 = 0x20000000000
|
||||||
|
CBitFieldMaskBit42 = 0x40000000000
|
||||||
|
CBitFieldMaskBit43 = 0x80000000000
|
||||||
|
CBitFieldMaskBit44 = 0x100000000000
|
||||||
|
CBitFieldMaskBit45 = 0x200000000000
|
||||||
|
CBitFieldMaskBit46 = 0x400000000000
|
||||||
|
CBitFieldMaskBit47 = 0x800000000000
|
||||||
|
CBitFieldMaskBit48 = 0x1000000000000
|
||||||
|
CBitFieldMaskBit49 = 0x2000000000000
|
||||||
|
CBitFieldMaskBit50 = 0x4000000000000
|
||||||
|
CBitFieldMaskBit51 = 0x8000000000000
|
||||||
|
CBitFieldMaskBit52 = 0x10000000000000
|
||||||
|
CBitFieldMaskBit53 = 0x20000000000000
|
||||||
|
CBitFieldMaskBit54 = 0x40000000000000
|
||||||
|
CBitFieldMaskBit55 = 0x80000000000000
|
||||||
|
CBitFieldMaskBit56 = 0x100000000000000
|
||||||
|
CBitFieldMaskBit57 = 0x200000000000000
|
||||||
|
CBitFieldMaskBit58 = 0x400000000000000
|
||||||
|
CBitFieldMaskBit59 = 0x800000000000000
|
||||||
|
CBitFieldMaskBit60 = 0x1000000000000000
|
||||||
|
CBitFieldMaskBit61 = 0x2000000000000000
|
||||||
|
CBitFieldMaskBit62 = 0x4000000000000000
|
||||||
|
CBitFieldMaskBit63 = 0x8000000000000000
|
||||||
|
)
|
||||||
|
|
||||||
|
type SockaddrStorage struct {
|
||||||
|
Family uint16
|
||||||
|
_ [118]int8
|
||||||
|
_ uint64
|
||||||
|
}
|
||||||
|
|
||||||
|
type HDGeometry struct {
|
||||||
|
Heads uint8
|
||||||
|
Sectors uint8
|
||||||
|
Cylinders uint16
|
||||||
|
Start uint64
|
||||||
|
}
|
||||||
|
|
||||||
|
type Statfs_t struct {
|
||||||
|
Type int64
|
||||||
|
Bsize int64
|
||||||
|
Blocks uint64
|
||||||
|
Bfree uint64
|
||||||
|
Bavail uint64
|
||||||
|
Files uint64
|
||||||
|
Ffree uint64
|
||||||
|
Fsid Fsid
|
||||||
|
Namelen int64
|
||||||
|
Frsize int64
|
||||||
|
Flags int64
|
||||||
|
Spare [4]int64
|
||||||
|
}
|
||||||
|
|
||||||
|
type TpacketHdr struct {
|
||||||
|
Status uint64
|
||||||
|
Len uint32
|
||||||
|
Snaplen uint32
|
||||||
|
Mac uint16
|
||||||
|
Net uint16
|
||||||
|
Sec uint32
|
||||||
|
Usec uint32
|
||||||
|
_ [4]byte
|
||||||
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
SizeofTpacketHdr = 0x20
|
||||||
|
)
|
||||||
|
|
||||||
|
type RTCPLLInfo struct {
|
||||||
|
Ctrl int32
|
||||||
|
Value int32
|
||||||
|
Max int32
|
||||||
|
Min int32
|
||||||
|
Posmult int32
|
||||||
|
Negmult int32
|
||||||
|
Clock int64
|
||||||
|
}
|
||||||
|
|
||||||
|
type BlkpgPartition struct {
|
||||||
|
Start int64
|
||||||
|
Length int64
|
||||||
|
Pno int32
|
||||||
|
Devname [64]uint8
|
||||||
|
Volname [64]uint8
|
||||||
|
_ [4]byte
|
||||||
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
BLKPG = 0x1269
|
||||||
|
)
|
||||||
|
|
||||||
|
type XDPUmemReg struct {
|
||||||
|
Addr uint64
|
||||||
|
Len uint64
|
||||||
|
Size uint32
|
||||||
|
Headroom uint32
|
||||||
|
Flags uint32
|
||||||
|
_ [4]byte
|
||||||
|
}
|
||||||
|
|
||||||
|
type CryptoUserAlg struct {
|
||||||
|
Name [64]int8
|
||||||
|
Driver_name [64]int8
|
||||||
|
Module_name [64]int8
|
||||||
|
Type uint32
|
||||||
|
Mask uint32
|
||||||
|
Refcnt uint32
|
||||||
|
Flags uint32
|
||||||
|
}
|
||||||
|
|
||||||
|
type CryptoStatAEAD struct {
|
||||||
|
Type [64]int8
|
||||||
|
Encrypt_cnt uint64
|
||||||
|
Encrypt_tlen uint64
|
||||||
|
Decrypt_cnt uint64
|
||||||
|
Decrypt_tlen uint64
|
||||||
|
Err_cnt uint64
|
||||||
|
}
|
||||||
|
|
||||||
|
type CryptoStatAKCipher struct {
|
||||||
|
Type [64]int8
|
||||||
|
Encrypt_cnt uint64
|
||||||
|
Encrypt_tlen uint64
|
||||||
|
Decrypt_cnt uint64
|
||||||
|
Decrypt_tlen uint64
|
||||||
|
Verify_cnt uint64
|
||||||
|
Sign_cnt uint64
|
||||||
|
Err_cnt uint64
|
||||||
|
}
|
||||||
|
|
||||||
|
type CryptoStatCipher struct {
|
||||||
|
Type [64]int8
|
||||||
|
Encrypt_cnt uint64
|
||||||
|
Encrypt_tlen uint64
|
||||||
|
Decrypt_cnt uint64
|
||||||
|
Decrypt_tlen uint64
|
||||||
|
Err_cnt uint64
|
||||||
|
}
|
||||||
|
|
||||||
|
type CryptoStatCompress struct {
|
||||||
|
Type [64]int8
|
||||||
|
Compress_cnt uint64
|
||||||
|
Compress_tlen uint64
|
||||||
|
Decompress_cnt uint64
|
||||||
|
Decompress_tlen uint64
|
||||||
|
Err_cnt uint64
|
||||||
|
}
|
||||||
|
|
||||||
|
type CryptoStatHash struct {
|
||||||
|
Type [64]int8
|
||||||
|
Hash_cnt uint64
|
||||||
|
Hash_tlen uint64
|
||||||
|
Err_cnt uint64
|
||||||
|
}
|
||||||
|
|
||||||
|
type CryptoStatKPP struct {
|
||||||
|
Type [64]int8
|
||||||
|
Setsecret_cnt uint64
|
||||||
|
Generate_public_key_cnt uint64
|
||||||
|
Compute_shared_secret_cnt uint64
|
||||||
|
Err_cnt uint64
|
||||||
|
}
|
||||||
|
|
||||||
|
type CryptoStatRNG struct {
|
||||||
|
Type [64]int8
|
||||||
|
Generate_cnt uint64
|
||||||
|
Generate_tlen uint64
|
||||||
|
Seed_cnt uint64
|
||||||
|
Err_cnt uint64
|
||||||
|
}
|
||||||
|
|
||||||
|
type CryptoStatLarval struct {
|
||||||
|
Type [64]int8
|
||||||
|
}
|
||||||
|
|
||||||
|
type CryptoReportLarval struct {
|
||||||
|
Type [64]int8
|
||||||
|
}
|
||||||
|
|
||||||
|
type CryptoReportHash struct {
|
||||||
|
Type [64]int8
|
||||||
|
Blocksize uint32
|
||||||
|
Digestsize uint32
|
||||||
|
}
|
||||||
|
|
||||||
|
type CryptoReportCipher struct {
|
||||||
|
Type [64]int8
|
||||||
|
Blocksize uint32
|
||||||
|
Min_keysize uint32
|
||||||
|
Max_keysize uint32
|
||||||
|
}
|
||||||
|
|
||||||
|
type CryptoReportBlkCipher struct {
|
||||||
|
Type [64]int8
|
||||||
|
Geniv [64]int8
|
||||||
|
Blocksize uint32
|
||||||
|
Min_keysize uint32
|
||||||
|
Max_keysize uint32
|
||||||
|
Ivsize uint32
|
||||||
|
}
|
||||||
|
|
||||||
|
type CryptoReportAEAD struct {
|
||||||
|
Type [64]int8
|
||||||
|
Geniv [64]int8
|
||||||
|
Blocksize uint32
|
||||||
|
Maxauthsize uint32
|
||||||
|
Ivsize uint32
|
||||||
|
}
|
||||||
|
|
||||||
|
type CryptoReportComp struct {
|
||||||
|
Type [64]int8
|
||||||
|
}
|
||||||
|
|
||||||
|
type CryptoReportRNG struct {
|
||||||
|
Type [64]int8
|
||||||
|
Seedsize uint32
|
||||||
|
}
|
||||||
|
|
||||||
|
type CryptoReportAKCipher struct {
|
||||||
|
Type [64]int8
|
||||||
|
}
|
||||||
|
|
||||||
|
type CryptoReportKPP struct {
|
||||||
|
Type [64]int8
|
||||||
|
}
|
||||||
|
|
||||||
|
type CryptoReportAcomp struct {
|
||||||
|
Type [64]int8
|
||||||
|
}
|
||||||
|
|
||||||
|
type LoopInfo struct {
|
||||||
|
Number int32
|
||||||
|
Device uint32
|
||||||
|
Inode uint64
|
||||||
|
Rdevice uint32
|
||||||
|
Offset int32
|
||||||
|
Encrypt_type int32
|
||||||
|
Encrypt_key_size int32
|
||||||
|
Flags int32
|
||||||
|
Name [64]int8
|
||||||
|
Encrypt_key [32]uint8
|
||||||
|
Init [2]uint64
|
||||||
|
Reserved [4]int8
|
||||||
|
_ [4]byte
|
||||||
|
}
|
||||||
|
|
||||||
|
type TIPCSubscr struct {
|
||||||
|
Seq TIPCServiceRange
|
||||||
|
Timeout uint32
|
||||||
|
Filter uint32
|
||||||
|
Handle [8]int8
|
||||||
|
}
|
||||||
|
|
||||||
|
type TIPCSIOCLNReq struct {
|
||||||
|
Peer uint32
|
||||||
|
Id uint32
|
||||||
|
Linkname [68]int8
|
||||||
|
}
|
||||||
|
|
||||||
|
type TIPCSIOCNodeIDReq struct {
|
||||||
|
Peer uint32
|
||||||
|
Id [16]int8
|
||||||
|
}
|
||||||
|
|
||||||
|
type PPSKInfo struct {
|
||||||
|
Assert_sequence uint32
|
||||||
|
Clear_sequence uint32
|
||||||
|
Assert_tu PPSKTime
|
||||||
|
Clear_tu PPSKTime
|
||||||
|
Current_mode int32
|
||||||
|
_ [4]byte
|
||||||
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
PPS_GETPARAMS = 0x800870a1
|
||||||
|
PPS_SETPARAMS = 0x400870a2
|
||||||
|
PPS_GETCAP = 0x800870a3
|
||||||
|
PPS_FETCH = 0xc00870a4
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
PIDFD_NONBLOCK = 0x800
|
||||||
|
)
|
||||||
|
|
||||||
|
type SysvIpcPerm struct {
|
||||||
|
Key int32
|
||||||
|
Uid uint32
|
||||||
|
Gid uint32
|
||||||
|
Cuid uint32
|
||||||
|
Cgid uint32
|
||||||
|
Mode uint32
|
||||||
|
_ [0]uint8
|
||||||
|
Seq uint16
|
||||||
|
_ uint16
|
||||||
|
_ uint64
|
||||||
|
_ uint64
|
||||||
|
}
|
||||||
|
type SysvShmDesc struct {
|
||||||
|
Perm SysvIpcPerm
|
||||||
|
Segsz uint64
|
||||||
|
Atime int64
|
||||||
|
Dtime int64
|
||||||
|
Ctime int64
|
||||||
|
Cpid int32
|
||||||
|
Lpid int32
|
||||||
|
Nattch uint64
|
||||||
|
_ uint64
|
||||||
|
_ uint64
|
||||||
|
}
|
3
vendor/google.golang.org/grpc/balancer/balancer.go
generated
vendored
3
vendor/google.golang.org/grpc/balancer/balancer.go
generated
vendored
|
@ -27,6 +27,7 @@ import (
|
||||||
"net"
|
"net"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"google.golang.org/grpc/channelz"
|
||||||
"google.golang.org/grpc/connectivity"
|
"google.golang.org/grpc/connectivity"
|
||||||
"google.golang.org/grpc/credentials"
|
"google.golang.org/grpc/credentials"
|
||||||
"google.golang.org/grpc/internal"
|
"google.golang.org/grpc/internal"
|
||||||
|
@ -192,7 +193,7 @@ type BuildOptions struct {
|
||||||
// server can ignore this field.
|
// server can ignore this field.
|
||||||
Authority string
|
Authority string
|
||||||
// ChannelzParentID is the parent ClientConn's channelz ID.
|
// ChannelzParentID is the parent ClientConn's channelz ID.
|
||||||
ChannelzParentID int64
|
ChannelzParentID *channelz.Identifier
|
||||||
// CustomUserAgent is the custom user agent set on the parent ClientConn.
|
// CustomUserAgent is the custom user agent set on the parent ClientConn.
|
||||||
// The balancer should set the same custom user agent if it creates a
|
// The balancer should set the same custom user agent if it creates a
|
||||||
// ClientConn.
|
// ClientConn.
|
||||||
|
|
5
vendor/google.golang.org/grpc/balancer/grpclb/grpclb_remote_balancer.go
generated
vendored
5
vendor/google.golang.org/grpc/balancer/grpclb/grpclb_remote_balancer.go
generated
vendored
|
@ -35,7 +35,6 @@ import (
|
||||||
"google.golang.org/grpc/connectivity"
|
"google.golang.org/grpc/connectivity"
|
||||||
"google.golang.org/grpc/credentials/insecure"
|
"google.golang.org/grpc/credentials/insecure"
|
||||||
"google.golang.org/grpc/internal/backoff"
|
"google.golang.org/grpc/internal/backoff"
|
||||||
"google.golang.org/grpc/internal/channelz"
|
|
||||||
imetadata "google.golang.org/grpc/internal/metadata"
|
imetadata "google.golang.org/grpc/internal/metadata"
|
||||||
"google.golang.org/grpc/keepalive"
|
"google.golang.org/grpc/keepalive"
|
||||||
"google.golang.org/grpc/metadata"
|
"google.golang.org/grpc/metadata"
|
||||||
|
@ -240,9 +239,7 @@ func (lb *lbBalancer) newRemoteBalancerCCWrapper() {
|
||||||
// Explicitly set pickfirst as the balancer.
|
// Explicitly set pickfirst as the balancer.
|
||||||
dopts = append(dopts, grpc.WithDefaultServiceConfig(`{"loadBalancingPolicy":"pick_first"}`))
|
dopts = append(dopts, grpc.WithDefaultServiceConfig(`{"loadBalancingPolicy":"pick_first"}`))
|
||||||
dopts = append(dopts, grpc.WithResolvers(lb.manualResolver))
|
dopts = append(dopts, grpc.WithResolvers(lb.manualResolver))
|
||||||
if channelz.IsOn() {
|
dopts = append(dopts, grpc.WithChannelzParentID(lb.opt.ChannelzParentID))
|
||||||
dopts = append(dopts, grpc.WithChannelzParentID(lb.opt.ChannelzParentID))
|
|
||||||
}
|
|
||||||
|
|
||||||
// Enable Keepalive for grpclb client.
|
// Enable Keepalive for grpclb client.
|
||||||
dopts = append(dopts, grpc.WithKeepaliveParams(keepalive.ClientParameters{
|
dopts = append(dopts, grpc.WithKeepaliveParams(keepalive.ClientParameters{
|
||||||
|
|
326
vendor/google.golang.org/grpc/balancer_conn_wrappers.go
generated
vendored
326
vendor/google.golang.org/grpc/balancer_conn_wrappers.go
generated
vendored
|
@ -20,130 +20,178 @@ package grpc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"google.golang.org/grpc/balancer"
|
"google.golang.org/grpc/balancer"
|
||||||
"google.golang.org/grpc/connectivity"
|
"google.golang.org/grpc/connectivity"
|
||||||
|
"google.golang.org/grpc/internal/balancer/gracefulswitch"
|
||||||
"google.golang.org/grpc/internal/buffer"
|
"google.golang.org/grpc/internal/buffer"
|
||||||
"google.golang.org/grpc/internal/channelz"
|
"google.golang.org/grpc/internal/channelz"
|
||||||
"google.golang.org/grpc/internal/grpcsync"
|
"google.golang.org/grpc/internal/grpcsync"
|
||||||
"google.golang.org/grpc/resolver"
|
"google.golang.org/grpc/resolver"
|
||||||
)
|
)
|
||||||
|
|
||||||
// scStateUpdate contains the subConn and the new state it changed to.
|
// ccBalancerWrapper sits between the ClientConn and the Balancer.
|
||||||
|
//
|
||||||
|
// ccBalancerWrapper implements methods corresponding to the ones on the
|
||||||
|
// balancer.Balancer interface. The ClientConn is free to call these methods
|
||||||
|
// concurrently and the ccBalancerWrapper ensures that calls from the ClientConn
|
||||||
|
// to the Balancer happen synchronously and in order.
|
||||||
|
//
|
||||||
|
// ccBalancerWrapper also implements the balancer.ClientConn interface and is
|
||||||
|
// passed to the Balancer implementations. It invokes unexported methods on the
|
||||||
|
// ClientConn to handle these calls from the Balancer.
|
||||||
|
//
|
||||||
|
// It uses the gracefulswitch.Balancer internally to ensure that balancer
|
||||||
|
// switches happen in a graceful manner.
|
||||||
|
type ccBalancerWrapper struct {
|
||||||
|
cc *ClientConn
|
||||||
|
|
||||||
|
// Since these fields are accessed only from handleXxx() methods which are
|
||||||
|
// synchronized by the watcher goroutine, we do not need a mutex to protect
|
||||||
|
// these fields.
|
||||||
|
balancer *gracefulswitch.Balancer
|
||||||
|
curBalancerName string
|
||||||
|
|
||||||
|
updateCh *buffer.Unbounded // Updates written on this channel are processed by watcher().
|
||||||
|
resultCh *buffer.Unbounded // Results of calls to UpdateClientConnState() are pushed here.
|
||||||
|
closed *grpcsync.Event // Indicates if close has been called.
|
||||||
|
done *grpcsync.Event // Indicates if close has completed its work.
|
||||||
|
}
|
||||||
|
|
||||||
|
// newCCBalancerWrapper creates a new balancer wrapper. The underlying balancer
|
||||||
|
// is not created until the switchTo() method is invoked.
|
||||||
|
func newCCBalancerWrapper(cc *ClientConn, bopts balancer.BuildOptions) *ccBalancerWrapper {
|
||||||
|
ccb := &ccBalancerWrapper{
|
||||||
|
cc: cc,
|
||||||
|
updateCh: buffer.NewUnbounded(),
|
||||||
|
resultCh: buffer.NewUnbounded(),
|
||||||
|
closed: grpcsync.NewEvent(),
|
||||||
|
done: grpcsync.NewEvent(),
|
||||||
|
}
|
||||||
|
go ccb.watcher()
|
||||||
|
ccb.balancer = gracefulswitch.NewBalancer(ccb, bopts)
|
||||||
|
return ccb
|
||||||
|
}
|
||||||
|
|
||||||
|
// The following xxxUpdate structs wrap the arguments received as part of the
|
||||||
|
// corresponding update. The watcher goroutine uses the 'type' of the update to
|
||||||
|
// invoke the appropriate handler routine to handle the update.
|
||||||
|
|
||||||
|
type ccStateUpdate struct {
|
||||||
|
ccs *balancer.ClientConnState
|
||||||
|
}
|
||||||
|
|
||||||
type scStateUpdate struct {
|
type scStateUpdate struct {
|
||||||
sc balancer.SubConn
|
sc balancer.SubConn
|
||||||
state connectivity.State
|
state connectivity.State
|
||||||
err error
|
err error
|
||||||
}
|
}
|
||||||
|
|
||||||
// exitIdle contains no data and is just a signal sent on the updateCh in
|
type exitIdleUpdate struct{}
|
||||||
// ccBalancerWrapper to instruct the balancer to exit idle.
|
|
||||||
type exitIdle struct{}
|
|
||||||
|
|
||||||
// ccBalancerWrapper is a wrapper on top of cc for balancers.
|
type resolverErrorUpdate struct {
|
||||||
// It implements balancer.ClientConn interface.
|
err error
|
||||||
type ccBalancerWrapper struct {
|
|
||||||
cc *ClientConn
|
|
||||||
balancerMu sync.Mutex // synchronizes calls to the balancer
|
|
||||||
balancer balancer.Balancer
|
|
||||||
hasExitIdle bool
|
|
||||||
updateCh *buffer.Unbounded
|
|
||||||
closed *grpcsync.Event
|
|
||||||
done *grpcsync.Event
|
|
||||||
|
|
||||||
mu sync.Mutex
|
|
||||||
subConns map[*acBalancerWrapper]struct{}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func newCCBalancerWrapper(cc *ClientConn, b balancer.Builder, bopts balancer.BuildOptions) *ccBalancerWrapper {
|
type switchToUpdate struct {
|
||||||
ccb := &ccBalancerWrapper{
|
name string
|
||||||
cc: cc,
|
|
||||||
updateCh: buffer.NewUnbounded(),
|
|
||||||
closed: grpcsync.NewEvent(),
|
|
||||||
done: grpcsync.NewEvent(),
|
|
||||||
subConns: make(map[*acBalancerWrapper]struct{}),
|
|
||||||
}
|
|
||||||
go ccb.watcher()
|
|
||||||
ccb.balancer = b.Build(ccb, bopts)
|
|
||||||
_, ccb.hasExitIdle = ccb.balancer.(balancer.ExitIdler)
|
|
||||||
return ccb
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// watcher balancer functions sequentially, so the balancer can be implemented
|
type subConnUpdate struct {
|
||||||
// lock-free.
|
acbw *acBalancerWrapper
|
||||||
|
}
|
||||||
|
|
||||||
|
// watcher is a long-running goroutine which reads updates from a channel and
|
||||||
|
// invokes corresponding methods on the underlying balancer. It ensures that
|
||||||
|
// these methods are invoked in a synchronous fashion. It also ensures that
|
||||||
|
// these methods are invoked in the order in which the updates were received.
|
||||||
func (ccb *ccBalancerWrapper) watcher() {
|
func (ccb *ccBalancerWrapper) watcher() {
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case t := <-ccb.updateCh.Get():
|
case u := <-ccb.updateCh.Get():
|
||||||
ccb.updateCh.Load()
|
ccb.updateCh.Load()
|
||||||
if ccb.closed.HasFired() {
|
if ccb.closed.HasFired() {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
switch u := t.(type) {
|
switch update := u.(type) {
|
||||||
|
case *ccStateUpdate:
|
||||||
|
ccb.handleClientConnStateChange(update.ccs)
|
||||||
case *scStateUpdate:
|
case *scStateUpdate:
|
||||||
ccb.balancerMu.Lock()
|
ccb.handleSubConnStateChange(update)
|
||||||
ccb.balancer.UpdateSubConnState(u.sc, balancer.SubConnState{ConnectivityState: u.state, ConnectionError: u.err})
|
case *exitIdleUpdate:
|
||||||
ccb.balancerMu.Unlock()
|
ccb.handleExitIdle()
|
||||||
case *acBalancerWrapper:
|
case *resolverErrorUpdate:
|
||||||
ccb.mu.Lock()
|
ccb.handleResolverError(update.err)
|
||||||
if ccb.subConns != nil {
|
case *switchToUpdate:
|
||||||
delete(ccb.subConns, u)
|
ccb.handleSwitchTo(update.name)
|
||||||
ccb.cc.removeAddrConn(u.getAddrConn(), errConnDrain)
|
case *subConnUpdate:
|
||||||
}
|
ccb.handleRemoveSubConn(update.acbw)
|
||||||
ccb.mu.Unlock()
|
|
||||||
case exitIdle:
|
|
||||||
if ccb.cc.GetState() == connectivity.Idle {
|
|
||||||
if ei, ok := ccb.balancer.(balancer.ExitIdler); ok {
|
|
||||||
// We already checked that the balancer implements
|
|
||||||
// ExitIdle before pushing the event to updateCh, but
|
|
||||||
// check conditionally again as defensive programming.
|
|
||||||
ccb.balancerMu.Lock()
|
|
||||||
ei.ExitIdle()
|
|
||||||
ccb.balancerMu.Unlock()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
default:
|
default:
|
||||||
logger.Errorf("ccBalancerWrapper.watcher: unknown update %+v, type %T", t, t)
|
logger.Errorf("ccBalancerWrapper.watcher: unknown update %+v, type %T", update, update)
|
||||||
}
|
}
|
||||||
case <-ccb.closed.Done():
|
case <-ccb.closed.Done():
|
||||||
}
|
}
|
||||||
|
|
||||||
if ccb.closed.HasFired() {
|
if ccb.closed.HasFired() {
|
||||||
ccb.balancerMu.Lock()
|
ccb.handleClose()
|
||||||
ccb.balancer.Close()
|
|
||||||
ccb.balancerMu.Unlock()
|
|
||||||
ccb.mu.Lock()
|
|
||||||
scs := ccb.subConns
|
|
||||||
ccb.subConns = nil
|
|
||||||
ccb.mu.Unlock()
|
|
||||||
ccb.UpdateState(balancer.State{ConnectivityState: connectivity.Connecting, Picker: nil})
|
|
||||||
ccb.done.Fire()
|
|
||||||
// Fire done before removing the addr conns. We can safely unblock
|
|
||||||
// ccb.close and allow the removeAddrConns to happen
|
|
||||||
// asynchronously.
|
|
||||||
for acbw := range scs {
|
|
||||||
ccb.cc.removeAddrConn(acbw.getAddrConn(), errConnDrain)
|
|
||||||
}
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ccb *ccBalancerWrapper) close() {
|
// updateClientConnState is invoked by grpc to push a ClientConnState update to
|
||||||
ccb.closed.Fire()
|
// the underlying balancer.
|
||||||
<-ccb.done.Done()
|
//
|
||||||
}
|
// Unlike other methods invoked by grpc to push updates to the underlying
|
||||||
|
// balancer, this method cannot simply push the update onto the update channel
|
||||||
|
// and return. It needs to return the error returned by the underlying balancer
|
||||||
|
// back to grpc which propagates that to the resolver.
|
||||||
|
func (ccb *ccBalancerWrapper) updateClientConnState(ccs *balancer.ClientConnState) error {
|
||||||
|
ccb.updateCh.Put(&ccStateUpdate{ccs: ccs})
|
||||||
|
|
||||||
func (ccb *ccBalancerWrapper) exitIdle() bool {
|
var res interface{}
|
||||||
if !ccb.hasExitIdle {
|
select {
|
||||||
return false
|
case res = <-ccb.resultCh.Get():
|
||||||
|
ccb.resultCh.Load()
|
||||||
|
case <-ccb.closed.Done():
|
||||||
|
// Return early if the balancer wrapper is closed while we are waiting for
|
||||||
|
// the underlying balancer to process a ClientConnState update.
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
ccb.updateCh.Put(exitIdle{})
|
// If the returned error is nil, attempting to type assert to error leads to
|
||||||
return true
|
// panic. So, this needs to handled separately.
|
||||||
|
if res == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return res.(error)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ccb *ccBalancerWrapper) handleSubConnStateChange(sc balancer.SubConn, s connectivity.State, err error) {
|
// handleClientConnStateChange handles a ClientConnState update from the update
|
||||||
|
// channel and invokes the appropriate method on the underlying balancer.
|
||||||
|
//
|
||||||
|
// If the addresses specified in the update contain addresses of type "grpclb"
|
||||||
|
// and the selected LB policy is not "grpclb", these addresses will be filtered
|
||||||
|
// out and ccs will be modified with the updated address list.
|
||||||
|
func (ccb *ccBalancerWrapper) handleClientConnStateChange(ccs *balancer.ClientConnState) {
|
||||||
|
if ccb.curBalancerName != grpclbName {
|
||||||
|
// Filter any grpclb addresses since we don't have the grpclb balancer.
|
||||||
|
var addrs []resolver.Address
|
||||||
|
for _, addr := range ccs.ResolverState.Addresses {
|
||||||
|
if addr.Type == resolver.GRPCLB {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
addrs = append(addrs, addr)
|
||||||
|
}
|
||||||
|
ccs.ResolverState.Addresses = addrs
|
||||||
|
}
|
||||||
|
ccb.resultCh.Put(ccb.balancer.UpdateClientConnState(*ccs))
|
||||||
|
}
|
||||||
|
|
||||||
|
// updateSubConnState is invoked by grpc to push a subConn state update to the
|
||||||
|
// underlying balancer.
|
||||||
|
func (ccb *ccBalancerWrapper) updateSubConnState(sc balancer.SubConn, s connectivity.State, err error) {
|
||||||
// When updating addresses for a SubConn, if the address in use is not in
|
// When updating addresses for a SubConn, if the address in use is not in
|
||||||
// the new addresses, the old ac will be tearDown() and a new ac will be
|
// the new addresses, the old ac will be tearDown() and a new ac will be
|
||||||
// created. tearDown() generates a state change with Shutdown state, we
|
// created. tearDown() generates a state change with Shutdown state, we
|
||||||
|
@ -161,44 +209,125 @@ func (ccb *ccBalancerWrapper) handleSubConnStateChange(sc balancer.SubConn, s co
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ccb *ccBalancerWrapper) updateClientConnState(ccs *balancer.ClientConnState) error {
|
// handleSubConnStateChange handles a SubConnState update from the update
|
||||||
ccb.balancerMu.Lock()
|
// channel and invokes the appropriate method on the underlying balancer.
|
||||||
defer ccb.balancerMu.Unlock()
|
func (ccb *ccBalancerWrapper) handleSubConnStateChange(update *scStateUpdate) {
|
||||||
return ccb.balancer.UpdateClientConnState(*ccs)
|
ccb.balancer.UpdateSubConnState(update.sc, balancer.SubConnState{ConnectivityState: update.state, ConnectionError: update.err})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ccb *ccBalancerWrapper) exitIdle() {
|
||||||
|
ccb.updateCh.Put(&exitIdleUpdate{})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ccb *ccBalancerWrapper) handleExitIdle() {
|
||||||
|
if ccb.cc.GetState() != connectivity.Idle {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
ccb.balancer.ExitIdle()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ccb *ccBalancerWrapper) resolverError(err error) {
|
func (ccb *ccBalancerWrapper) resolverError(err error) {
|
||||||
ccb.balancerMu.Lock()
|
ccb.updateCh.Put(&resolverErrorUpdate{err: err})
|
||||||
defer ccb.balancerMu.Unlock()
|
}
|
||||||
|
|
||||||
|
func (ccb *ccBalancerWrapper) handleResolverError(err error) {
|
||||||
ccb.balancer.ResolverError(err)
|
ccb.balancer.ResolverError(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// switchTo is invoked by grpc to instruct the balancer wrapper to switch to the
|
||||||
|
// LB policy identified by name.
|
||||||
|
//
|
||||||
|
// ClientConn calls newCCBalancerWrapper() at creation time. Upon receipt of the
|
||||||
|
// first good update from the name resolver, it determines the LB policy to use
|
||||||
|
// and invokes the switchTo() method. Upon receipt of every subsequent update
|
||||||
|
// from the name resolver, it invokes this method.
|
||||||
|
//
|
||||||
|
// the ccBalancerWrapper keeps track of the current LB policy name, and skips
|
||||||
|
// the graceful balancer switching process if the name does not change.
|
||||||
|
func (ccb *ccBalancerWrapper) switchTo(name string) {
|
||||||
|
ccb.updateCh.Put(&switchToUpdate{name: name})
|
||||||
|
}
|
||||||
|
|
||||||
|
// handleSwitchTo handles a balancer switch update from the update channel. It
|
||||||
|
// calls the SwitchTo() method on the gracefulswitch.Balancer with a
|
||||||
|
// balancer.Builder corresponding to name. If no balancer.Builder is registered
|
||||||
|
// for the given name, it uses the default LB policy which is "pick_first".
|
||||||
|
func (ccb *ccBalancerWrapper) handleSwitchTo(name string) {
|
||||||
|
// TODO: Other languages use case-insensitive balancer registries. We should
|
||||||
|
// switch as well. See: https://github.com/grpc/grpc-go/issues/5288.
|
||||||
|
if strings.EqualFold(ccb.curBalancerName, name) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Ensure that name is a registered LB policy when we get here.
|
||||||
|
// We currently only validate the `loadBalancingConfig` field. We need to do
|
||||||
|
// the same for the `loadBalancingPolicy` field and reject the service config
|
||||||
|
// if the specified policy is not registered.
|
||||||
|
builder := balancer.Get(name)
|
||||||
|
if builder == nil {
|
||||||
|
channelz.Warningf(logger, ccb.cc.channelzID, "Channel switches to new LB policy %q, since the specified LB policy %q was not registered", PickFirstBalancerName, name)
|
||||||
|
builder = newPickfirstBuilder()
|
||||||
|
} else {
|
||||||
|
channelz.Infof(logger, ccb.cc.channelzID, "Channel switches to new LB policy %q", name)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := ccb.balancer.SwitchTo(builder); err != nil {
|
||||||
|
channelz.Errorf(logger, ccb.cc.channelzID, "Channel failed to build new LB policy %q: %v", name, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
ccb.curBalancerName = builder.Name()
|
||||||
|
}
|
||||||
|
|
||||||
|
// handleRemoveSucConn handles a request from the underlying balancer to remove
|
||||||
|
// a subConn.
|
||||||
|
//
|
||||||
|
// See comments in RemoveSubConn() for more details.
|
||||||
|
func (ccb *ccBalancerWrapper) handleRemoveSubConn(acbw *acBalancerWrapper) {
|
||||||
|
ccb.cc.removeAddrConn(acbw.getAddrConn(), errConnDrain)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ccb *ccBalancerWrapper) close() {
|
||||||
|
ccb.closed.Fire()
|
||||||
|
<-ccb.done.Done()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ccb *ccBalancerWrapper) handleClose() {
|
||||||
|
ccb.balancer.Close()
|
||||||
|
ccb.done.Fire()
|
||||||
|
}
|
||||||
|
|
||||||
func (ccb *ccBalancerWrapper) NewSubConn(addrs []resolver.Address, opts balancer.NewSubConnOptions) (balancer.SubConn, error) {
|
func (ccb *ccBalancerWrapper) NewSubConn(addrs []resolver.Address, opts balancer.NewSubConnOptions) (balancer.SubConn, error) {
|
||||||
if len(addrs) <= 0 {
|
if len(addrs) <= 0 {
|
||||||
return nil, fmt.Errorf("grpc: cannot create SubConn with empty address list")
|
return nil, fmt.Errorf("grpc: cannot create SubConn with empty address list")
|
||||||
}
|
}
|
||||||
ccb.mu.Lock()
|
|
||||||
defer ccb.mu.Unlock()
|
|
||||||
if ccb.subConns == nil {
|
|
||||||
return nil, fmt.Errorf("grpc: ClientConn balancer wrapper was closed")
|
|
||||||
}
|
|
||||||
ac, err := ccb.cc.newAddrConn(addrs, opts)
|
ac, err := ccb.cc.newAddrConn(addrs, opts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
channelz.Warningf(logger, ccb.cc.channelzID, "acBalancerWrapper: NewSubConn: failed to newAddrConn: %v", err)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
acbw := &acBalancerWrapper{ac: ac}
|
acbw := &acBalancerWrapper{ac: ac}
|
||||||
acbw.ac.mu.Lock()
|
acbw.ac.mu.Lock()
|
||||||
ac.acbw = acbw
|
ac.acbw = acbw
|
||||||
acbw.ac.mu.Unlock()
|
acbw.ac.mu.Unlock()
|
||||||
ccb.subConns[acbw] = struct{}{}
|
|
||||||
return acbw, nil
|
return acbw, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ccb *ccBalancerWrapper) RemoveSubConn(sc balancer.SubConn) {
|
func (ccb *ccBalancerWrapper) RemoveSubConn(sc balancer.SubConn) {
|
||||||
// The RemoveSubConn() is handled in the run() goroutine, to avoid deadlock
|
// Before we switched the ccBalancerWrapper to use gracefulswitch.Balancer, it
|
||||||
// during switchBalancer() if the old balancer calls RemoveSubConn() in its
|
// was required to handle the RemoveSubConn() method asynchronously by pushing
|
||||||
// Close().
|
// the update onto the update channel. This was done to avoid a deadlock as
|
||||||
ccb.updateCh.Put(sc)
|
// switchBalancer() was holding cc.mu when calling Close() on the old
|
||||||
|
// balancer, which would in turn call RemoveSubConn().
|
||||||
|
//
|
||||||
|
// With the use of gracefulswitch.Balancer in ccBalancerWrapper, handling this
|
||||||
|
// asynchronously is probably not required anymore since the switchTo() method
|
||||||
|
// handles the balancer switch by pushing the update onto the channel.
|
||||||
|
// TODO(easwars): Handle this inline.
|
||||||
|
acbw, ok := sc.(*acBalancerWrapper)
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
ccb.updateCh.Put(&subConnUpdate{acbw: acbw})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ccb *ccBalancerWrapper) UpdateAddresses(sc balancer.SubConn, addrs []resolver.Address) {
|
func (ccb *ccBalancerWrapper) UpdateAddresses(sc balancer.SubConn, addrs []resolver.Address) {
|
||||||
|
@ -210,11 +339,6 @@ func (ccb *ccBalancerWrapper) UpdateAddresses(sc balancer.SubConn, addrs []resol
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ccb *ccBalancerWrapper) UpdateState(s balancer.State) {
|
func (ccb *ccBalancerWrapper) UpdateState(s balancer.State) {
|
||||||
ccb.mu.Lock()
|
|
||||||
defer ccb.mu.Unlock()
|
|
||||||
if ccb.subConns == nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
// Update picker before updating state. Even though the ordering here does
|
// Update picker before updating state. Even though the ordering here does
|
||||||
// not matter, it can lead to multiple calls of Pick in the common start-up
|
// not matter, it can lead to multiple calls of Pick in the common start-up
|
||||||
// case where we wait for ready and then perform an RPC. If the picker is
|
// case where we wait for ready and then perform an RPC. If the picker is
|
||||||
|
|
36
vendor/google.golang.org/grpc/channelz/channelz.go
generated
vendored
Normal file
36
vendor/google.golang.org/grpc/channelz/channelz.go
generated
vendored
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright 2020 gRPC authors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Package channelz exports internals of the channelz implementation as required
|
||||||
|
// by other gRPC packages.
|
||||||
|
//
|
||||||
|
// The implementation of the channelz spec as defined in
|
||||||
|
// https://github.com/grpc/proposal/blob/master/A14-channelz.md, is provided by
|
||||||
|
// the `internal/channelz` package.
|
||||||
|
//
|
||||||
|
// Experimental
|
||||||
|
//
|
||||||
|
// Notice: All APIs in this package are experimental and may be removed in a
|
||||||
|
// later release.
|
||||||
|
package channelz
|
||||||
|
|
||||||
|
import "google.golang.org/grpc/internal/channelz"
|
||||||
|
|
||||||
|
// Identifier is an opaque identifier which uniquely identifies an entity in the
|
||||||
|
// channelz database.
|
||||||
|
type Identifier = channelz.Identifier
|
312
vendor/google.golang.org/grpc/clientconn.go
generated
vendored
312
vendor/google.golang.org/grpc/clientconn.go
generated
vendored
|
@ -159,23 +159,20 @@ func DialContext(ctx context.Context, target string, opts ...DialOption) (conn *
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
if channelz.IsOn() {
|
pid := cc.dopts.channelzParentID
|
||||||
if cc.dopts.channelzParentID != 0 {
|
cc.channelzID = channelz.RegisterChannel(&channelzChannel{cc}, pid, target)
|
||||||
cc.channelzID = channelz.RegisterChannel(&channelzChannel{cc}, cc.dopts.channelzParentID, target)
|
ted := &channelz.TraceEventDesc{
|
||||||
channelz.AddTraceEvent(logger, cc.channelzID, 0, &channelz.TraceEventDesc{
|
Desc: "Channel created",
|
||||||
Desc: "Channel Created",
|
Severity: channelz.CtInfo,
|
||||||
Severity: channelz.CtInfo,
|
|
||||||
Parent: &channelz.TraceEventDesc{
|
|
||||||
Desc: fmt.Sprintf("Nested Channel(id:%d) created", cc.channelzID),
|
|
||||||
Severity: channelz.CtInfo,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
cc.channelzID = channelz.RegisterChannel(&channelzChannel{cc}, 0, target)
|
|
||||||
channelz.Info(logger, cc.channelzID, "Channel Created")
|
|
||||||
}
|
|
||||||
cc.csMgr.channelzID = cc.channelzID
|
|
||||||
}
|
}
|
||||||
|
if cc.dopts.channelzParentID != nil {
|
||||||
|
ted.Parent = &channelz.TraceEventDesc{
|
||||||
|
Desc: fmt.Sprintf("Nested Channel(id:%d) created", cc.channelzID.Int()),
|
||||||
|
Severity: channelz.CtInfo,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
channelz.AddTraceEvent(logger, cc.channelzID, 1, ted)
|
||||||
|
cc.csMgr.channelzID = cc.channelzID
|
||||||
|
|
||||||
if cc.dopts.copts.TransportCredentials == nil && cc.dopts.copts.CredsBundle == nil {
|
if cc.dopts.copts.TransportCredentials == nil && cc.dopts.copts.CredsBundle == nil {
|
||||||
return nil, errNoTransportSecurity
|
return nil, errNoTransportSecurity
|
||||||
|
@ -281,7 +278,7 @@ func DialContext(ctx context.Context, target string, opts ...DialOption) (conn *
|
||||||
if creds := cc.dopts.copts.TransportCredentials; creds != nil {
|
if creds := cc.dopts.copts.TransportCredentials; creds != nil {
|
||||||
credsClone = creds.Clone()
|
credsClone = creds.Clone()
|
||||||
}
|
}
|
||||||
cc.balancerBuildOpts = balancer.BuildOptions{
|
cc.balancerWrapper = newCCBalancerWrapper(cc, balancer.BuildOptions{
|
||||||
DialCreds: credsClone,
|
DialCreds: credsClone,
|
||||||
CredsBundle: cc.dopts.copts.CredsBundle,
|
CredsBundle: cc.dopts.copts.CredsBundle,
|
||||||
Dialer: cc.dopts.copts.Dialer,
|
Dialer: cc.dopts.copts.Dialer,
|
||||||
|
@ -289,7 +286,7 @@ func DialContext(ctx context.Context, target string, opts ...DialOption) (conn *
|
||||||
CustomUserAgent: cc.dopts.copts.UserAgent,
|
CustomUserAgent: cc.dopts.copts.UserAgent,
|
||||||
ChannelzParentID: cc.channelzID,
|
ChannelzParentID: cc.channelzID,
|
||||||
Target: cc.parsedTarget,
|
Target: cc.parsedTarget,
|
||||||
}
|
})
|
||||||
|
|
||||||
// Build the resolver.
|
// Build the resolver.
|
||||||
rWrapper, err := newCCResolverWrapper(cc, resolverBuilder)
|
rWrapper, err := newCCResolverWrapper(cc, resolverBuilder)
|
||||||
|
@ -398,7 +395,7 @@ type connectivityStateManager struct {
|
||||||
mu sync.Mutex
|
mu sync.Mutex
|
||||||
state connectivity.State
|
state connectivity.State
|
||||||
notifyChan chan struct{}
|
notifyChan chan struct{}
|
||||||
channelzID int64
|
channelzID *channelz.Identifier
|
||||||
}
|
}
|
||||||
|
|
||||||
// updateState updates the connectivity.State of ClientConn.
|
// updateState updates the connectivity.State of ClientConn.
|
||||||
|
@ -464,34 +461,36 @@ var _ ClientConnInterface = (*ClientConn)(nil)
|
||||||
// handshakes. It also handles errors on established connections by
|
// handshakes. It also handles errors on established connections by
|
||||||
// re-resolving the name and reconnecting.
|
// re-resolving the name and reconnecting.
|
||||||
type ClientConn struct {
|
type ClientConn struct {
|
||||||
ctx context.Context
|
ctx context.Context // Initialized using the background context at dial time.
|
||||||
cancel context.CancelFunc
|
cancel context.CancelFunc // Cancelled on close.
|
||||||
|
|
||||||
target string
|
// The following are initialized at dial time, and are read-only after that.
|
||||||
parsedTarget resolver.Target
|
target string // User's dial target.
|
||||||
authority string
|
parsedTarget resolver.Target // See parseTargetAndFindResolver().
|
||||||
dopts dialOptions
|
authority string // See determineAuthority().
|
||||||
csMgr *connectivityStateManager
|
dopts dialOptions // Default and user specified dial options.
|
||||||
|
channelzID *channelz.Identifier // Channelz identifier for the channel.
|
||||||
balancerBuildOpts balancer.BuildOptions
|
balancerWrapper *ccBalancerWrapper // Uses gracefulswitch.balancer underneath.
|
||||||
blockingpicker *pickerWrapper
|
|
||||||
|
|
||||||
|
// The following provide their own synchronization, and therefore don't
|
||||||
|
// require cc.mu to be held to access them.
|
||||||
|
csMgr *connectivityStateManager
|
||||||
|
blockingpicker *pickerWrapper
|
||||||
safeConfigSelector iresolver.SafeConfigSelector
|
safeConfigSelector iresolver.SafeConfigSelector
|
||||||
|
czData *channelzData
|
||||||
|
retryThrottler atomic.Value // Updated from service config.
|
||||||
|
|
||||||
mu sync.RWMutex
|
// firstResolveEvent is used to track whether the name resolver sent us at
|
||||||
resolverWrapper *ccResolverWrapper
|
// least one update. RPCs block on this event.
|
||||||
sc *ServiceConfig
|
|
||||||
conns map[*addrConn]struct{}
|
|
||||||
// Keepalive parameter can be updated if a GoAway is received.
|
|
||||||
mkp keepalive.ClientParameters
|
|
||||||
curBalancerName string
|
|
||||||
balancerWrapper *ccBalancerWrapper
|
|
||||||
retryThrottler atomic.Value
|
|
||||||
|
|
||||||
firstResolveEvent *grpcsync.Event
|
firstResolveEvent *grpcsync.Event
|
||||||
|
|
||||||
channelzID int64 // channelz unique identification number
|
// mu protects the following fields.
|
||||||
czData *channelzData
|
// TODO: split mu so the same mutex isn't used for everything.
|
||||||
|
mu sync.RWMutex
|
||||||
|
resolverWrapper *ccResolverWrapper // Initialized in Dial; cleared in Close.
|
||||||
|
sc *ServiceConfig // Latest service config received from the resolver.
|
||||||
|
conns map[*addrConn]struct{} // Set to nil on close.
|
||||||
|
mkp keepalive.ClientParameters // May be updated upon receipt of a GoAway.
|
||||||
|
|
||||||
lceMu sync.Mutex // protects lastConnectionError
|
lceMu sync.Mutex // protects lastConnectionError
|
||||||
lastConnectionError error
|
lastConnectionError error
|
||||||
|
@ -536,14 +535,7 @@ func (cc *ClientConn) GetState() connectivity.State {
|
||||||
// Notice: This API is EXPERIMENTAL and may be changed or removed in a later
|
// Notice: This API is EXPERIMENTAL and may be changed or removed in a later
|
||||||
// release.
|
// release.
|
||||||
func (cc *ClientConn) Connect() {
|
func (cc *ClientConn) Connect() {
|
||||||
cc.mu.Lock()
|
cc.balancerWrapper.exitIdle()
|
||||||
defer cc.mu.Unlock()
|
|
||||||
if cc.balancerWrapper != nil && cc.balancerWrapper.exitIdle() {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
for ac := range cc.conns {
|
|
||||||
go ac.connect()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cc *ClientConn) scWatcher() {
|
func (cc *ClientConn) scWatcher() {
|
||||||
|
@ -623,9 +615,7 @@ func (cc *ClientConn) updateResolverState(s resolver.State, err error) error {
|
||||||
// with the new addresses.
|
// with the new addresses.
|
||||||
cc.maybeApplyDefaultServiceConfig(nil)
|
cc.maybeApplyDefaultServiceConfig(nil)
|
||||||
|
|
||||||
if cc.balancerWrapper != nil {
|
cc.balancerWrapper.resolverError(err)
|
||||||
cc.balancerWrapper.resolverError(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// No addresses are valid with err set; return early.
|
// No addresses are valid with err set; return early.
|
||||||
cc.mu.Unlock()
|
cc.mu.Unlock()
|
||||||
|
@ -653,16 +643,10 @@ func (cc *ClientConn) updateResolverState(s resolver.State, err error) error {
|
||||||
cc.applyServiceConfigAndBalancer(sc, configSelector, s.Addresses)
|
cc.applyServiceConfigAndBalancer(sc, configSelector, s.Addresses)
|
||||||
} else {
|
} else {
|
||||||
ret = balancer.ErrBadResolverState
|
ret = balancer.ErrBadResolverState
|
||||||
if cc.balancerWrapper == nil {
|
if cc.sc == nil {
|
||||||
var err error
|
// Apply the failing LB only if we haven't received valid service config
|
||||||
if s.ServiceConfig.Err != nil {
|
// from the name resolver in the past.
|
||||||
err = status.Errorf(codes.Unavailable, "error parsing service config: %v", s.ServiceConfig.Err)
|
cc.applyFailingLB(s.ServiceConfig)
|
||||||
} else {
|
|
||||||
err = status.Errorf(codes.Unavailable, "illegal service config type: %T", s.ServiceConfig.Config)
|
|
||||||
}
|
|
||||||
cc.safeConfigSelector.UpdateConfigSelector(&defaultConfigSelector{cc.sc})
|
|
||||||
cc.blockingpicker.updatePicker(base.NewErrPicker(err))
|
|
||||||
cc.csMgr.updateState(connectivity.TransientFailure)
|
|
||||||
cc.mu.Unlock()
|
cc.mu.Unlock()
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
@ -670,24 +654,12 @@ func (cc *ClientConn) updateResolverState(s resolver.State, err error) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
var balCfg serviceconfig.LoadBalancingConfig
|
var balCfg serviceconfig.LoadBalancingConfig
|
||||||
if cc.dopts.balancerBuilder == nil && cc.sc != nil && cc.sc.lbConfig != nil {
|
if cc.sc != nil && cc.sc.lbConfig != nil {
|
||||||
balCfg = cc.sc.lbConfig.cfg
|
balCfg = cc.sc.lbConfig.cfg
|
||||||
}
|
}
|
||||||
|
|
||||||
cbn := cc.curBalancerName
|
|
||||||
bw := cc.balancerWrapper
|
bw := cc.balancerWrapper
|
||||||
cc.mu.Unlock()
|
cc.mu.Unlock()
|
||||||
if cbn != grpclbName {
|
|
||||||
// Filter any grpclb addresses since we don't have the grpclb balancer.
|
|
||||||
for i := 0; i < len(s.Addresses); {
|
|
||||||
if s.Addresses[i].Type == resolver.GRPCLB {
|
|
||||||
copy(s.Addresses[i:], s.Addresses[i+1:])
|
|
||||||
s.Addresses = s.Addresses[:len(s.Addresses)-1]
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
i++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
uccsErr := bw.updateClientConnState(&balancer.ClientConnState{ResolverState: s, BalancerConfig: balCfg})
|
uccsErr := bw.updateClientConnState(&balancer.ClientConnState{ResolverState: s, BalancerConfig: balCfg})
|
||||||
if ret == nil {
|
if ret == nil {
|
||||||
ret = uccsErr // prefer ErrBadResolver state since any other error is
|
ret = uccsErr // prefer ErrBadResolver state since any other error is
|
||||||
|
@ -696,56 +668,28 @@ func (cc *ClientConn) updateResolverState(s resolver.State, err error) error {
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
// switchBalancer starts the switching from current balancer to the balancer
|
// applyFailingLB is akin to configuring an LB policy on the channel which
|
||||||
// with the given name.
|
// always fails RPCs. Here, an actual LB policy is not configured, but an always
|
||||||
//
|
// erroring picker is configured, which returns errors with information about
|
||||||
// It will NOT send the current address list to the new balancer. If needed,
|
// what was invalid in the received service config. A config selector with no
|
||||||
// caller of this function should send address list to the new balancer after
|
// service config is configured, and the connectivity state of the channel is
|
||||||
// this function returns.
|
// set to TransientFailure.
|
||||||
//
|
//
|
||||||
// Caller must hold cc.mu.
|
// Caller must hold cc.mu.
|
||||||
func (cc *ClientConn) switchBalancer(name string) {
|
func (cc *ClientConn) applyFailingLB(sc *serviceconfig.ParseResult) {
|
||||||
if strings.EqualFold(cc.curBalancerName, name) {
|
var err error
|
||||||
return
|
if sc.Err != nil {
|
||||||
}
|
err = status.Errorf(codes.Unavailable, "error parsing service config: %v", sc.Err)
|
||||||
|
|
||||||
channelz.Infof(logger, cc.channelzID, "ClientConn switching balancer to %q", name)
|
|
||||||
if cc.dopts.balancerBuilder != nil {
|
|
||||||
channelz.Info(logger, cc.channelzID, "ignoring balancer switching: Balancer DialOption used instead")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if cc.balancerWrapper != nil {
|
|
||||||
// Don't hold cc.mu while closing the balancers. The balancers may call
|
|
||||||
// methods that require cc.mu (e.g. cc.NewSubConn()). Holding the mutex
|
|
||||||
// would cause a deadlock in that case.
|
|
||||||
cc.mu.Unlock()
|
|
||||||
cc.balancerWrapper.close()
|
|
||||||
cc.mu.Lock()
|
|
||||||
}
|
|
||||||
|
|
||||||
builder := balancer.Get(name)
|
|
||||||
if builder == nil {
|
|
||||||
channelz.Warningf(logger, cc.channelzID, "Channel switches to new LB policy %q due to fallback from invalid balancer name", PickFirstBalancerName)
|
|
||||||
channelz.Infof(logger, cc.channelzID, "failed to get balancer builder for: %v, using pick_first instead", name)
|
|
||||||
builder = newPickfirstBuilder()
|
|
||||||
} else {
|
} else {
|
||||||
channelz.Infof(logger, cc.channelzID, "Channel switches to new LB policy %q", name)
|
err = status.Errorf(codes.Unavailable, "illegal service config type: %T", sc.Config)
|
||||||
}
|
}
|
||||||
|
cc.safeConfigSelector.UpdateConfigSelector(&defaultConfigSelector{nil})
|
||||||
cc.curBalancerName = builder.Name()
|
cc.blockingpicker.updatePicker(base.NewErrPicker(err))
|
||||||
cc.balancerWrapper = newCCBalancerWrapper(cc, builder, cc.balancerBuildOpts)
|
cc.csMgr.updateState(connectivity.TransientFailure)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cc *ClientConn) handleSubConnStateChange(sc balancer.SubConn, s connectivity.State, err error) {
|
func (cc *ClientConn) handleSubConnStateChange(sc balancer.SubConn, s connectivity.State, err error) {
|
||||||
cc.mu.Lock()
|
cc.balancerWrapper.updateSubConnState(sc, s, err)
|
||||||
if cc.conns == nil {
|
|
||||||
cc.mu.Unlock()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
// TODO(bar switching) send updates to all balancer wrappers when balancer
|
|
||||||
// gracefully switching is supported.
|
|
||||||
cc.balancerWrapper.handleSubConnStateChange(sc, s, err)
|
|
||||||
cc.mu.Unlock()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// newAddrConn creates an addrConn for addrs and adds it to cc.conns.
|
// newAddrConn creates an addrConn for addrs and adds it to cc.conns.
|
||||||
|
@ -768,17 +712,21 @@ func (cc *ClientConn) newAddrConn(addrs []resolver.Address, opts balancer.NewSub
|
||||||
cc.mu.Unlock()
|
cc.mu.Unlock()
|
||||||
return nil, ErrClientConnClosing
|
return nil, ErrClientConnClosing
|
||||||
}
|
}
|
||||||
if channelz.IsOn() {
|
|
||||||
ac.channelzID = channelz.RegisterSubChannel(ac, cc.channelzID, "")
|
var err error
|
||||||
channelz.AddTraceEvent(logger, ac.channelzID, 0, &channelz.TraceEventDesc{
|
ac.channelzID, err = channelz.RegisterSubChannel(ac, cc.channelzID, "")
|
||||||
Desc: "Subchannel Created",
|
if err != nil {
|
||||||
Severity: channelz.CtInfo,
|
return nil, err
|
||||||
Parent: &channelz.TraceEventDesc{
|
|
||||||
Desc: fmt.Sprintf("Subchannel(id:%d) created", ac.channelzID),
|
|
||||||
Severity: channelz.CtInfo,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
channelz.AddTraceEvent(logger, ac.channelzID, 0, &channelz.TraceEventDesc{
|
||||||
|
Desc: "Subchannel created",
|
||||||
|
Severity: channelz.CtInfo,
|
||||||
|
Parent: &channelz.TraceEventDesc{
|
||||||
|
Desc: fmt.Sprintf("Subchannel(id:%d) created", ac.channelzID.Int()),
|
||||||
|
Severity: channelz.CtInfo,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
cc.conns[ac] = struct{}{}
|
cc.conns[ac] = struct{}{}
|
||||||
cc.mu.Unlock()
|
cc.mu.Unlock()
|
||||||
return ac, nil
|
return ac, nil
|
||||||
|
@ -991,35 +939,26 @@ func (cc *ClientConn) applyServiceConfigAndBalancer(sc *ServiceConfig, configSel
|
||||||
cc.retryThrottler.Store((*retryThrottler)(nil))
|
cc.retryThrottler.Store((*retryThrottler)(nil))
|
||||||
}
|
}
|
||||||
|
|
||||||
if cc.dopts.balancerBuilder == nil {
|
var newBalancerName string
|
||||||
// Only look at balancer types and switch balancer if balancer dial
|
if cc.sc != nil && cc.sc.lbConfig != nil {
|
||||||
// option is not set.
|
newBalancerName = cc.sc.lbConfig.name
|
||||||
var newBalancerName string
|
} else {
|
||||||
if cc.sc != nil && cc.sc.lbConfig != nil {
|
var isGRPCLB bool
|
||||||
newBalancerName = cc.sc.lbConfig.name
|
for _, a := range addrs {
|
||||||
} else {
|
if a.Type == resolver.GRPCLB {
|
||||||
var isGRPCLB bool
|
isGRPCLB = true
|
||||||
for _, a := range addrs {
|
break
|
||||||
if a.Type == resolver.GRPCLB {
|
|
||||||
isGRPCLB = true
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if isGRPCLB {
|
|
||||||
newBalancerName = grpclbName
|
|
||||||
} else if cc.sc != nil && cc.sc.LB != nil {
|
|
||||||
newBalancerName = *cc.sc.LB
|
|
||||||
} else {
|
|
||||||
newBalancerName = PickFirstBalancerName
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
cc.switchBalancer(newBalancerName)
|
if isGRPCLB {
|
||||||
} else if cc.balancerWrapper == nil {
|
newBalancerName = grpclbName
|
||||||
// Balancer dial option was set, and this is the first time handling
|
} else if cc.sc != nil && cc.sc.LB != nil {
|
||||||
// resolved addresses. Build a balancer with dopts.balancerBuilder.
|
newBalancerName = *cc.sc.LB
|
||||||
cc.curBalancerName = cc.dopts.balancerBuilder.Name()
|
} else {
|
||||||
cc.balancerWrapper = newCCBalancerWrapper(cc, cc.dopts.balancerBuilder, cc.balancerBuildOpts)
|
newBalancerName = PickFirstBalancerName
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
cc.balancerWrapper.switchTo(newBalancerName)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cc *ClientConn) resolveNow(o resolver.ResolveNowOptions) {
|
func (cc *ClientConn) resolveNow(o resolver.ResolveNowOptions) {
|
||||||
|
@ -1070,11 +1009,11 @@ func (cc *ClientConn) Close() error {
|
||||||
rWrapper := cc.resolverWrapper
|
rWrapper := cc.resolverWrapper
|
||||||
cc.resolverWrapper = nil
|
cc.resolverWrapper = nil
|
||||||
bWrapper := cc.balancerWrapper
|
bWrapper := cc.balancerWrapper
|
||||||
cc.balancerWrapper = nil
|
|
||||||
cc.mu.Unlock()
|
cc.mu.Unlock()
|
||||||
|
|
||||||
|
// The order of closing matters here since the balancer wrapper assumes the
|
||||||
|
// picker is closed before it is closed.
|
||||||
cc.blockingpicker.close()
|
cc.blockingpicker.close()
|
||||||
|
|
||||||
if bWrapper != nil {
|
if bWrapper != nil {
|
||||||
bWrapper.close()
|
bWrapper.close()
|
||||||
}
|
}
|
||||||
|
@ -1085,22 +1024,22 @@ func (cc *ClientConn) Close() error {
|
||||||
for ac := range conns {
|
for ac := range conns {
|
||||||
ac.tearDown(ErrClientConnClosing)
|
ac.tearDown(ErrClientConnClosing)
|
||||||
}
|
}
|
||||||
if channelz.IsOn() {
|
ted := &channelz.TraceEventDesc{
|
||||||
ted := &channelz.TraceEventDesc{
|
Desc: "Channel deleted",
|
||||||
Desc: "Channel Deleted",
|
Severity: channelz.CtInfo,
|
||||||
|
}
|
||||||
|
if cc.dopts.channelzParentID != nil {
|
||||||
|
ted.Parent = &channelz.TraceEventDesc{
|
||||||
|
Desc: fmt.Sprintf("Nested channel(id:%d) deleted", cc.channelzID.Int()),
|
||||||
Severity: channelz.CtInfo,
|
Severity: channelz.CtInfo,
|
||||||
}
|
}
|
||||||
if cc.dopts.channelzParentID != 0 {
|
|
||||||
ted.Parent = &channelz.TraceEventDesc{
|
|
||||||
Desc: fmt.Sprintf("Nested channel(id:%d) deleted", cc.channelzID),
|
|
||||||
Severity: channelz.CtInfo,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
channelz.AddTraceEvent(logger, cc.channelzID, 0, ted)
|
|
||||||
// TraceEvent needs to be called before RemoveEntry, as TraceEvent may add trace reference to
|
|
||||||
// the entity being deleted, and thus prevent it from being deleted right away.
|
|
||||||
channelz.RemoveEntry(cc.channelzID)
|
|
||||||
}
|
}
|
||||||
|
channelz.AddTraceEvent(logger, cc.channelzID, 0, ted)
|
||||||
|
// TraceEvent needs to be called before RemoveEntry, as TraceEvent may add
|
||||||
|
// trace reference to the entity being deleted, and thus prevent it from being
|
||||||
|
// deleted right away.
|
||||||
|
channelz.RemoveEntry(cc.channelzID)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1130,7 +1069,7 @@ type addrConn struct {
|
||||||
backoffIdx int // Needs to be stateful for resetConnectBackoff.
|
backoffIdx int // Needs to be stateful for resetConnectBackoff.
|
||||||
resetBackoff chan struct{}
|
resetBackoff chan struct{}
|
||||||
|
|
||||||
channelzID int64 // channelz unique identification number.
|
channelzID *channelz.Identifier
|
||||||
czData *channelzData
|
czData *channelzData
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1312,14 +1251,12 @@ func (ac *addrConn) createTransport(addr resolver.Address, copts transport.Conne
|
||||||
|
|
||||||
connectCtx, cancel := context.WithDeadline(ac.ctx, connectDeadline)
|
connectCtx, cancel := context.WithDeadline(ac.ctx, connectDeadline)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
if channelz.IsOn() {
|
copts.ChannelzParentID = ac.channelzID
|
||||||
copts.ChannelzParentID = ac.channelzID
|
|
||||||
}
|
|
||||||
|
|
||||||
newTr, err := transport.NewClientTransport(connectCtx, ac.cc.ctx, addr, copts, func() { prefaceReceived.Fire() }, onGoAway, onClose)
|
newTr, err := transport.NewClientTransport(connectCtx, ac.cc.ctx, addr, copts, func() { prefaceReceived.Fire() }, onGoAway, onClose)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// newTr is either nil, or closed.
|
// newTr is either nil, or closed.
|
||||||
channelz.Warningf(logger, ac.channelzID, "grpc: addrConn.createTransport failed to connect to %v. Err: %v", addr, err)
|
channelz.Warningf(logger, ac.channelzID, "grpc: addrConn.createTransport failed to connect to %s. Err: %v", addr, err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1332,7 +1269,7 @@ func (ac *addrConn) createTransport(addr resolver.Address, copts transport.Conne
|
||||||
newTr.Close(transport.ErrConnClosing)
|
newTr.Close(transport.ErrConnClosing)
|
||||||
if connectCtx.Err() == context.DeadlineExceeded {
|
if connectCtx.Err() == context.DeadlineExceeded {
|
||||||
err := errors.New("failed to receive server preface within timeout")
|
err := errors.New("failed to receive server preface within timeout")
|
||||||
channelz.Warningf(logger, ac.channelzID, "grpc: addrConn.createTransport failed to connect to %v: %v", addr, err)
|
channelz.Warningf(logger, ac.channelzID, "grpc: addrConn.createTransport failed to connect to %s: %v", addr, err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
@ -1497,19 +1434,18 @@ func (ac *addrConn) tearDown(err error) {
|
||||||
curTr.GracefulClose()
|
curTr.GracefulClose()
|
||||||
ac.mu.Lock()
|
ac.mu.Lock()
|
||||||
}
|
}
|
||||||
if channelz.IsOn() {
|
channelz.AddTraceEvent(logger, ac.channelzID, 0, &channelz.TraceEventDesc{
|
||||||
channelz.AddTraceEvent(logger, ac.channelzID, 0, &channelz.TraceEventDesc{
|
Desc: "Subchannel deleted",
|
||||||
Desc: "Subchannel Deleted",
|
Severity: channelz.CtInfo,
|
||||||
|
Parent: &channelz.TraceEventDesc{
|
||||||
|
Desc: fmt.Sprintf("Subchannel(id:%d) deleted", ac.channelzID.Int()),
|
||||||
Severity: channelz.CtInfo,
|
Severity: channelz.CtInfo,
|
||||||
Parent: &channelz.TraceEventDesc{
|
},
|
||||||
Desc: fmt.Sprintf("Subchanel(id:%d) deleted", ac.channelzID),
|
})
|
||||||
Severity: channelz.CtInfo,
|
// TraceEvent needs to be called before RemoveEntry, as TraceEvent may add
|
||||||
},
|
// trace reference to the entity being deleted, and thus prevent it from
|
||||||
})
|
// being deleted right away.
|
||||||
// TraceEvent needs to be called before RemoveEntry, as TraceEvent may add trace reference to
|
channelz.RemoveEntry(ac.channelzID)
|
||||||
// the entity being deleted, and thus prevent it from being deleted right away.
|
|
||||||
channelz.RemoveEntry(ac.channelzID)
|
|
||||||
}
|
|
||||||
ac.mu.Unlock()
|
ac.mu.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
52
vendor/google.golang.org/grpc/dialoptions.go
generated
vendored
52
vendor/google.golang.org/grpc/dialoptions.go
generated
vendored
|
@ -20,12 +20,11 @@ package grpc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
|
||||||
"net"
|
"net"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"google.golang.org/grpc/backoff"
|
"google.golang.org/grpc/backoff"
|
||||||
"google.golang.org/grpc/balancer"
|
"google.golang.org/grpc/channelz"
|
||||||
"google.golang.org/grpc/credentials"
|
"google.golang.org/grpc/credentials"
|
||||||
"google.golang.org/grpc/credentials/insecure"
|
"google.golang.org/grpc/credentials/insecure"
|
||||||
"google.golang.org/grpc/internal"
|
"google.golang.org/grpc/internal"
|
||||||
|
@ -45,19 +44,17 @@ type dialOptions struct {
|
||||||
chainUnaryInts []UnaryClientInterceptor
|
chainUnaryInts []UnaryClientInterceptor
|
||||||
chainStreamInts []StreamClientInterceptor
|
chainStreamInts []StreamClientInterceptor
|
||||||
|
|
||||||
cp Compressor
|
cp Compressor
|
||||||
dc Decompressor
|
dc Decompressor
|
||||||
bs internalbackoff.Strategy
|
bs internalbackoff.Strategy
|
||||||
block bool
|
block bool
|
||||||
returnLastError bool
|
returnLastError bool
|
||||||
timeout time.Duration
|
timeout time.Duration
|
||||||
scChan <-chan ServiceConfig
|
scChan <-chan ServiceConfig
|
||||||
authority string
|
authority string
|
||||||
copts transport.ConnectOptions
|
copts transport.ConnectOptions
|
||||||
callOptions []CallOption
|
callOptions []CallOption
|
||||||
// This is used by WithBalancerName dial option.
|
channelzParentID *channelz.Identifier
|
||||||
balancerBuilder balancer.Builder
|
|
||||||
channelzParentID int64
|
|
||||||
disableServiceConfig bool
|
disableServiceConfig bool
|
||||||
disableRetry bool
|
disableRetry bool
|
||||||
disableHealthCheck bool
|
disableHealthCheck bool
|
||||||
|
@ -195,25 +192,6 @@ func WithDecompressor(dc Decompressor) DialOption {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// WithBalancerName sets the balancer that the ClientConn will be initialized
|
|
||||||
// with. Balancer registered with balancerName will be used. This function
|
|
||||||
// panics if no balancer was registered by balancerName.
|
|
||||||
//
|
|
||||||
// The balancer cannot be overridden by balancer option specified by service
|
|
||||||
// config.
|
|
||||||
//
|
|
||||||
// Deprecated: use WithDefaultServiceConfig and WithDisableServiceConfig
|
|
||||||
// instead. Will be removed in a future 1.x release.
|
|
||||||
func WithBalancerName(balancerName string) DialOption {
|
|
||||||
builder := balancer.Get(balancerName)
|
|
||||||
if builder == nil {
|
|
||||||
panic(fmt.Sprintf("grpc.WithBalancerName: no balancer is registered for name %v", balancerName))
|
|
||||||
}
|
|
||||||
return newFuncDialOption(func(o *dialOptions) {
|
|
||||||
o.balancerBuilder = builder
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithServiceConfig returns a DialOption which has a channel to read the
|
// WithServiceConfig returns a DialOption which has a channel to read the
|
||||||
// service configuration.
|
// service configuration.
|
||||||
//
|
//
|
||||||
|
@ -304,8 +282,8 @@ func WithReturnConnectionError() DialOption {
|
||||||
// WithCredentialsBundle or WithPerRPCCredentials) which require transport
|
// WithCredentialsBundle or WithPerRPCCredentials) which require transport
|
||||||
// security is incompatible and will cause grpc.Dial() to fail.
|
// security is incompatible and will cause grpc.Dial() to fail.
|
||||||
//
|
//
|
||||||
// Deprecated: use WithTransportCredentials and insecure.NewCredentials() instead.
|
// Deprecated: use WithTransportCredentials and insecure.NewCredentials()
|
||||||
// Will be supported throughout 1.x.
|
// instead. Will be supported throughout 1.x.
|
||||||
func WithInsecure() DialOption {
|
func WithInsecure() DialOption {
|
||||||
return newFuncDialOption(func(o *dialOptions) {
|
return newFuncDialOption(func(o *dialOptions) {
|
||||||
o.copts.TransportCredentials = insecure.NewCredentials()
|
o.copts.TransportCredentials = insecure.NewCredentials()
|
||||||
|
@ -498,7 +476,7 @@ func WithAuthority(a string) DialOption {
|
||||||
//
|
//
|
||||||
// Notice: This API is EXPERIMENTAL and may be changed or removed in a
|
// Notice: This API is EXPERIMENTAL and may be changed or removed in a
|
||||||
// later release.
|
// later release.
|
||||||
func WithChannelzParentID(id int64) DialOption {
|
func WithChannelzParentID(id *channelz.Identifier) DialOption {
|
||||||
return newFuncDialOption(func(o *dialOptions) {
|
return newFuncDialOption(func(o *dialOptions) {
|
||||||
o.channelzParentID = id
|
o.channelzParentID = id
|
||||||
})
|
})
|
||||||
|
|
382
vendor/google.golang.org/grpc/internal/balancer/gracefulswitch/gracefulswitch.go
generated
vendored
Normal file
382
vendor/google.golang.org/grpc/internal/balancer/gracefulswitch/gracefulswitch.go
generated
vendored
Normal file
|
@ -0,0 +1,382 @@
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright 2022 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 gracefulswitch implements a graceful switch load balancer.
|
||||||
|
package gracefulswitch
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"sync"
|
||||||
|
|
||||||
|
"google.golang.org/grpc/balancer"
|
||||||
|
"google.golang.org/grpc/balancer/base"
|
||||||
|
"google.golang.org/grpc/connectivity"
|
||||||
|
"google.golang.org/grpc/resolver"
|
||||||
|
)
|
||||||
|
|
||||||
|
var errBalancerClosed = errors.New("gracefulSwitchBalancer is closed")
|
||||||
|
var _ balancer.Balancer = (*Balancer)(nil)
|
||||||
|
|
||||||
|
// NewBalancer returns a graceful switch Balancer.
|
||||||
|
func NewBalancer(cc balancer.ClientConn, opts balancer.BuildOptions) *Balancer {
|
||||||
|
return &Balancer{
|
||||||
|
cc: cc,
|
||||||
|
bOpts: opts,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Balancer is a utility to gracefully switch from one balancer to
|
||||||
|
// a new balancer. It implements the balancer.Balancer interface.
|
||||||
|
type Balancer struct {
|
||||||
|
bOpts balancer.BuildOptions
|
||||||
|
cc balancer.ClientConn
|
||||||
|
|
||||||
|
// mu protects the following fields and all fields within balancerCurrent
|
||||||
|
// and balancerPending. mu does not need to be held when calling into the
|
||||||
|
// child balancers, as all calls into these children happen only as a direct
|
||||||
|
// result of a call into the gracefulSwitchBalancer, which are also
|
||||||
|
// guaranteed to be synchronous. There is one exception: an UpdateState call
|
||||||
|
// from a child balancer when current and pending are populated can lead to
|
||||||
|
// calling Close() on the current. To prevent that racing with an
|
||||||
|
// UpdateSubConnState from the channel, we hold currentMu during Close and
|
||||||
|
// UpdateSubConnState calls.
|
||||||
|
mu sync.Mutex
|
||||||
|
balancerCurrent *balancerWrapper
|
||||||
|
balancerPending *balancerWrapper
|
||||||
|
closed bool // set to true when this balancer is closed
|
||||||
|
|
||||||
|
// currentMu must be locked before mu. This mutex guards against this
|
||||||
|
// sequence of events: UpdateSubConnState() called, finds the
|
||||||
|
// balancerCurrent, gives up lock, updateState comes in, causes Close() on
|
||||||
|
// balancerCurrent before the UpdateSubConnState is called on the
|
||||||
|
// balancerCurrent.
|
||||||
|
currentMu sync.Mutex
|
||||||
|
}
|
||||||
|
|
||||||
|
// swap swaps out the current lb with the pending lb and updates the ClientConn.
|
||||||
|
// The caller must hold gsb.mu.
|
||||||
|
func (gsb *Balancer) swap() {
|
||||||
|
gsb.cc.UpdateState(gsb.balancerPending.lastState)
|
||||||
|
cur := gsb.balancerCurrent
|
||||||
|
gsb.balancerCurrent = gsb.balancerPending
|
||||||
|
gsb.balancerPending = nil
|
||||||
|
go func() {
|
||||||
|
gsb.currentMu.Lock()
|
||||||
|
defer gsb.currentMu.Unlock()
|
||||||
|
cur.Close()
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Helper function that checks if the balancer passed in is current or pending.
|
||||||
|
// The caller must hold gsb.mu.
|
||||||
|
func (gsb *Balancer) balancerCurrentOrPending(bw *balancerWrapper) bool {
|
||||||
|
return bw == gsb.balancerCurrent || bw == gsb.balancerPending
|
||||||
|
}
|
||||||
|
|
||||||
|
// SwitchTo initializes the graceful switch process, which completes based on
|
||||||
|
// connectivity state changes on the current/pending balancer. Thus, the switch
|
||||||
|
// process is not complete when this method returns. This method must be called
|
||||||
|
// synchronously alongside the rest of the balancer.Balancer methods this
|
||||||
|
// Graceful Switch Balancer implements.
|
||||||
|
func (gsb *Balancer) SwitchTo(builder balancer.Builder) error {
|
||||||
|
gsb.mu.Lock()
|
||||||
|
if gsb.closed {
|
||||||
|
gsb.mu.Unlock()
|
||||||
|
return errBalancerClosed
|
||||||
|
}
|
||||||
|
bw := &balancerWrapper{
|
||||||
|
gsb: gsb,
|
||||||
|
lastState: balancer.State{
|
||||||
|
ConnectivityState: connectivity.Connecting,
|
||||||
|
Picker: base.NewErrPicker(balancer.ErrNoSubConnAvailable),
|
||||||
|
},
|
||||||
|
subconns: make(map[balancer.SubConn]bool),
|
||||||
|
}
|
||||||
|
balToClose := gsb.balancerPending // nil if there is no pending balancer
|
||||||
|
if gsb.balancerCurrent == nil {
|
||||||
|
gsb.balancerCurrent = bw
|
||||||
|
} else {
|
||||||
|
gsb.balancerPending = bw
|
||||||
|
}
|
||||||
|
gsb.mu.Unlock()
|
||||||
|
balToClose.Close()
|
||||||
|
// This function takes a builder instead of a balancer because builder.Build
|
||||||
|
// can call back inline, and this utility needs to handle the callbacks.
|
||||||
|
newBalancer := builder.Build(bw, gsb.bOpts)
|
||||||
|
if newBalancer == nil {
|
||||||
|
// This is illegal and should never happen; we clear the balancerWrapper
|
||||||
|
// we were constructing if it happens to avoid a potential panic.
|
||||||
|
gsb.mu.Lock()
|
||||||
|
if gsb.balancerPending != nil {
|
||||||
|
gsb.balancerPending = nil
|
||||||
|
} else {
|
||||||
|
gsb.balancerCurrent = nil
|
||||||
|
}
|
||||||
|
gsb.mu.Unlock()
|
||||||
|
return balancer.ErrBadResolverState
|
||||||
|
}
|
||||||
|
|
||||||
|
// This write doesn't need to take gsb.mu because this field never gets read
|
||||||
|
// or written to on any calls from the current or pending. Calls from grpc
|
||||||
|
// to this balancer are guaranteed to be called synchronously, so this
|
||||||
|
// bw.Balancer field will never be forwarded to until this SwitchTo()
|
||||||
|
// function returns.
|
||||||
|
bw.Balancer = newBalancer
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns nil if the graceful switch balancer is closed.
|
||||||
|
func (gsb *Balancer) latestBalancer() *balancerWrapper {
|
||||||
|
gsb.mu.Lock()
|
||||||
|
defer gsb.mu.Unlock()
|
||||||
|
if gsb.balancerPending != nil {
|
||||||
|
return gsb.balancerPending
|
||||||
|
}
|
||||||
|
return gsb.balancerCurrent
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateClientConnState forwards the update to the latest balancer created.
|
||||||
|
func (gsb *Balancer) UpdateClientConnState(state balancer.ClientConnState) error {
|
||||||
|
// The resolver data is only relevant to the most recent LB Policy.
|
||||||
|
balToUpdate := gsb.latestBalancer()
|
||||||
|
if balToUpdate == nil {
|
||||||
|
return errBalancerClosed
|
||||||
|
}
|
||||||
|
// Perform this call without gsb.mu to prevent deadlocks if the child calls
|
||||||
|
// back into the channel. The latest balancer can never be closed during a
|
||||||
|
// call from the channel, even without gsb.mu held.
|
||||||
|
return balToUpdate.UpdateClientConnState(state)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ResolverError forwards the error to the latest balancer created.
|
||||||
|
func (gsb *Balancer) ResolverError(err error) {
|
||||||
|
// The resolver data is only relevant to the most recent LB Policy.
|
||||||
|
balToUpdate := gsb.latestBalancer()
|
||||||
|
if balToUpdate == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// Perform this call without gsb.mu to prevent deadlocks if the child calls
|
||||||
|
// back into the channel. The latest balancer can never be closed during a
|
||||||
|
// call from the channel, even without gsb.mu held.
|
||||||
|
balToUpdate.ResolverError(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExitIdle forwards the call to the latest balancer created.
|
||||||
|
//
|
||||||
|
// If the latest balancer does not support ExitIdle, the subConns are
|
||||||
|
// re-connected to manually.
|
||||||
|
func (gsb *Balancer) ExitIdle() {
|
||||||
|
balToUpdate := gsb.latestBalancer()
|
||||||
|
if balToUpdate == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// There is no need to protect this read with a mutex, as the write to the
|
||||||
|
// Balancer field happens in SwitchTo, which completes before this can be
|
||||||
|
// called.
|
||||||
|
if ei, ok := balToUpdate.Balancer.(balancer.ExitIdler); ok {
|
||||||
|
ei.ExitIdle()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for sc := range balToUpdate.subconns {
|
||||||
|
sc.Connect()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateSubConnState forwards the update to the appropriate child.
|
||||||
|
func (gsb *Balancer) UpdateSubConnState(sc balancer.SubConn, state balancer.SubConnState) {
|
||||||
|
gsb.currentMu.Lock()
|
||||||
|
defer gsb.currentMu.Unlock()
|
||||||
|
gsb.mu.Lock()
|
||||||
|
// Forward update to the appropriate child. Even if there is a pending
|
||||||
|
// balancer, the current balancer should continue to get SubConn updates to
|
||||||
|
// maintain the proper state while the pending is still connecting.
|
||||||
|
var balToUpdate *balancerWrapper
|
||||||
|
if gsb.balancerCurrent != nil && gsb.balancerCurrent.subconns[sc] {
|
||||||
|
balToUpdate = gsb.balancerCurrent
|
||||||
|
} else if gsb.balancerPending != nil && gsb.balancerPending.subconns[sc] {
|
||||||
|
balToUpdate = gsb.balancerPending
|
||||||
|
}
|
||||||
|
gsb.mu.Unlock()
|
||||||
|
if balToUpdate == nil {
|
||||||
|
// SubConn belonged to a stale lb policy that has not yet fully closed,
|
||||||
|
// or the balancer was already closed.
|
||||||
|
return
|
||||||
|
}
|
||||||
|
balToUpdate.UpdateSubConnState(sc, state)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Close closes any active child balancers.
|
||||||
|
func (gsb *Balancer) Close() {
|
||||||
|
gsb.mu.Lock()
|
||||||
|
gsb.closed = true
|
||||||
|
currentBalancerToClose := gsb.balancerCurrent
|
||||||
|
gsb.balancerCurrent = nil
|
||||||
|
pendingBalancerToClose := gsb.balancerPending
|
||||||
|
gsb.balancerPending = nil
|
||||||
|
gsb.mu.Unlock()
|
||||||
|
|
||||||
|
currentBalancerToClose.Close()
|
||||||
|
pendingBalancerToClose.Close()
|
||||||
|
}
|
||||||
|
|
||||||
|
// balancerWrapper wraps a balancer.Balancer, and overrides some Balancer
|
||||||
|
// methods to help cleanup SubConns created by the wrapped balancer.
|
||||||
|
//
|
||||||
|
// It implements the balancer.ClientConn interface and is passed down in that
|
||||||
|
// capacity to the wrapped balancer. It maintains a set of subConns created by
|
||||||
|
// the wrapped balancer and calls from the latter to create/update/remove
|
||||||
|
// SubConns update this set before being forwarded to the parent ClientConn.
|
||||||
|
// State updates from the wrapped balancer can result in invocation of the
|
||||||
|
// graceful switch logic.
|
||||||
|
type balancerWrapper struct {
|
||||||
|
balancer.Balancer
|
||||||
|
gsb *Balancer
|
||||||
|
|
||||||
|
lastState balancer.State
|
||||||
|
subconns map[balancer.SubConn]bool // subconns created by this balancer
|
||||||
|
}
|
||||||
|
|
||||||
|
func (bw *balancerWrapper) UpdateSubConnState(sc balancer.SubConn, state balancer.SubConnState) {
|
||||||
|
if state.ConnectivityState == connectivity.Shutdown {
|
||||||
|
bw.gsb.mu.Lock()
|
||||||
|
delete(bw.subconns, sc)
|
||||||
|
bw.gsb.mu.Unlock()
|
||||||
|
}
|
||||||
|
// There is no need to protect this read with a mutex, as the write to the
|
||||||
|
// Balancer field happens in SwitchTo, which completes before this can be
|
||||||
|
// called.
|
||||||
|
bw.Balancer.UpdateSubConnState(sc, state)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Close closes the underlying LB policy and removes the subconns it created. bw
|
||||||
|
// must not be referenced via balancerCurrent or balancerPending in gsb when
|
||||||
|
// called. gsb.mu must not be held. Does not panic with a nil receiver.
|
||||||
|
func (bw *balancerWrapper) Close() {
|
||||||
|
// before Close is called.
|
||||||
|
if bw == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// There is no need to protect this read with a mutex, as Close() is
|
||||||
|
// impossible to be called concurrently with the write in SwitchTo(). The
|
||||||
|
// callsites of Close() for this balancer in Graceful Switch Balancer will
|
||||||
|
// never be called until SwitchTo() returns.
|
||||||
|
bw.Balancer.Close()
|
||||||
|
bw.gsb.mu.Lock()
|
||||||
|
for sc := range bw.subconns {
|
||||||
|
bw.gsb.cc.RemoveSubConn(sc)
|
||||||
|
}
|
||||||
|
bw.gsb.mu.Unlock()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (bw *balancerWrapper) UpdateState(state balancer.State) {
|
||||||
|
// Hold the mutex for this entire call to ensure it cannot occur
|
||||||
|
// concurrently with other updateState() calls. This causes updates to
|
||||||
|
// lastState and calls to cc.UpdateState to happen atomically.
|
||||||
|
bw.gsb.mu.Lock()
|
||||||
|
defer bw.gsb.mu.Unlock()
|
||||||
|
bw.lastState = state
|
||||||
|
|
||||||
|
if !bw.gsb.balancerCurrentOrPending(bw) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if bw == bw.gsb.balancerCurrent {
|
||||||
|
// In the case that the current balancer exits READY, and there is a pending
|
||||||
|
// balancer, you can forward the pending balancer's cached State up to
|
||||||
|
// ClientConn and swap the pending into the current. This is because there
|
||||||
|
// is no reason to gracefully switch from and keep using the old policy as
|
||||||
|
// the ClientConn is not connected to any backends.
|
||||||
|
if state.ConnectivityState != connectivity.Ready && bw.gsb.balancerPending != nil {
|
||||||
|
bw.gsb.swap()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// Even if there is a pending balancer waiting to be gracefully switched to,
|
||||||
|
// continue to forward current balancer updates to the Client Conn. Ignoring
|
||||||
|
// state + picker from the current would cause undefined behavior/cause the
|
||||||
|
// system to behave incorrectly from the current LB policies perspective.
|
||||||
|
// Also, the current LB is still being used by grpc to choose SubConns per
|
||||||
|
// RPC, and thus should use the most updated form of the current balancer.
|
||||||
|
bw.gsb.cc.UpdateState(state)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// This method is now dealing with a state update from the pending balancer.
|
||||||
|
// If the current balancer is currently in a state other than READY, the new
|
||||||
|
// policy can be swapped into place immediately. This is because there is no
|
||||||
|
// reason to gracefully switch from and keep using the old policy as the
|
||||||
|
// ClientConn is not connected to any backends.
|
||||||
|
if state.ConnectivityState != connectivity.Connecting || bw.gsb.balancerCurrent.lastState.ConnectivityState != connectivity.Ready {
|
||||||
|
bw.gsb.swap()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (bw *balancerWrapper) NewSubConn(addrs []resolver.Address, opts balancer.NewSubConnOptions) (balancer.SubConn, error) {
|
||||||
|
bw.gsb.mu.Lock()
|
||||||
|
if !bw.gsb.balancerCurrentOrPending(bw) {
|
||||||
|
bw.gsb.mu.Unlock()
|
||||||
|
return nil, fmt.Errorf("%T at address %p that called NewSubConn is deleted", bw, bw)
|
||||||
|
}
|
||||||
|
bw.gsb.mu.Unlock()
|
||||||
|
|
||||||
|
sc, err := bw.gsb.cc.NewSubConn(addrs, opts)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
bw.gsb.mu.Lock()
|
||||||
|
if !bw.gsb.balancerCurrentOrPending(bw) { // balancer was closed during this call
|
||||||
|
bw.gsb.cc.RemoveSubConn(sc)
|
||||||
|
bw.gsb.mu.Unlock()
|
||||||
|
return nil, fmt.Errorf("%T at address %p that called NewSubConn is deleted", bw, bw)
|
||||||
|
}
|
||||||
|
bw.subconns[sc] = true
|
||||||
|
bw.gsb.mu.Unlock()
|
||||||
|
return sc, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (bw *balancerWrapper) ResolveNow(opts resolver.ResolveNowOptions) {
|
||||||
|
// Ignore ResolveNow requests from anything other than the most recent
|
||||||
|
// balancer, because older balancers were already removed from the config.
|
||||||
|
if bw != bw.gsb.latestBalancer() {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
bw.gsb.cc.ResolveNow(opts)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (bw *balancerWrapper) RemoveSubConn(sc balancer.SubConn) {
|
||||||
|
bw.gsb.mu.Lock()
|
||||||
|
if !bw.gsb.balancerCurrentOrPending(bw) {
|
||||||
|
bw.gsb.mu.Unlock()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
bw.gsb.mu.Unlock()
|
||||||
|
bw.gsb.cc.RemoveSubConn(sc)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (bw *balancerWrapper) UpdateAddresses(sc balancer.SubConn, addrs []resolver.Address) {
|
||||||
|
bw.gsb.mu.Lock()
|
||||||
|
if !bw.gsb.balancerCurrentOrPending(bw) {
|
||||||
|
bw.gsb.mu.Unlock()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
bw.gsb.mu.Unlock()
|
||||||
|
bw.gsb.cc.UpdateAddresses(sc, addrs)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (bw *balancerWrapper) Target() string {
|
||||||
|
return bw.gsb.cc.Target()
|
||||||
|
}
|
91
vendor/google.golang.org/grpc/internal/binarylog/binarylog.go
generated
vendored
91
vendor/google.golang.org/grpc/internal/binarylog/binarylog.go
generated
vendored
|
@ -31,7 +31,7 @@ import (
|
||||||
// Logger is the global binary logger. It can be used to get binary logger for
|
// Logger is the global binary logger. It can be used to get binary logger for
|
||||||
// each method.
|
// each method.
|
||||||
type Logger interface {
|
type Logger interface {
|
||||||
getMethodLogger(methodName string) *MethodLogger
|
GetMethodLogger(methodName string) MethodLogger
|
||||||
}
|
}
|
||||||
|
|
||||||
// binLogger is the global binary logger for the binary. One of this should be
|
// binLogger is the global binary logger for the binary. One of this should be
|
||||||
|
@ -49,17 +49,24 @@ func SetLogger(l Logger) {
|
||||||
binLogger = l
|
binLogger = l
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetLogger gets the binarg logger.
|
||||||
|
//
|
||||||
|
// Only call this at init time.
|
||||||
|
func GetLogger() Logger {
|
||||||
|
return binLogger
|
||||||
|
}
|
||||||
|
|
||||||
// GetMethodLogger returns the methodLogger for the given methodName.
|
// GetMethodLogger returns the methodLogger for the given methodName.
|
||||||
//
|
//
|
||||||
// methodName should be in the format of "/service/method".
|
// methodName should be in the format of "/service/method".
|
||||||
//
|
//
|
||||||
// Each methodLogger returned by this method is a new instance. This is to
|
// Each methodLogger returned by this method is a new instance. This is to
|
||||||
// generate sequence id within the call.
|
// generate sequence id within the call.
|
||||||
func GetMethodLogger(methodName string) *MethodLogger {
|
func GetMethodLogger(methodName string) MethodLogger {
|
||||||
if binLogger == nil {
|
if binLogger == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return binLogger.getMethodLogger(methodName)
|
return binLogger.GetMethodLogger(methodName)
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
@ -68,17 +75,29 @@ func init() {
|
||||||
binLogger = NewLoggerFromConfigString(configStr)
|
binLogger = NewLoggerFromConfigString(configStr)
|
||||||
}
|
}
|
||||||
|
|
||||||
type methodLoggerConfig struct {
|
// MethodLoggerConfig contains the setting for logging behavior of a method
|
||||||
|
// logger. Currently, it contains the max length of header and message.
|
||||||
|
type MethodLoggerConfig struct {
|
||||||
// Max length of header and message.
|
// Max length of header and message.
|
||||||
hdr, msg uint64
|
Header, Message uint64
|
||||||
|
}
|
||||||
|
|
||||||
|
// LoggerConfig contains the config for loggers to create method loggers.
|
||||||
|
type LoggerConfig struct {
|
||||||
|
All *MethodLoggerConfig
|
||||||
|
Services map[string]*MethodLoggerConfig
|
||||||
|
Methods map[string]*MethodLoggerConfig
|
||||||
|
|
||||||
|
Blacklist map[string]struct{}
|
||||||
}
|
}
|
||||||
|
|
||||||
type logger struct {
|
type logger struct {
|
||||||
all *methodLoggerConfig
|
config LoggerConfig
|
||||||
services map[string]*methodLoggerConfig
|
}
|
||||||
methods map[string]*methodLoggerConfig
|
|
||||||
|
|
||||||
blacklist map[string]struct{}
|
// NewLoggerFromConfig builds a logger with the given LoggerConfig.
|
||||||
|
func NewLoggerFromConfig(config LoggerConfig) Logger {
|
||||||
|
return &logger{config: config}
|
||||||
}
|
}
|
||||||
|
|
||||||
// newEmptyLogger creates an empty logger. The map fields need to be filled in
|
// newEmptyLogger creates an empty logger. The map fields need to be filled in
|
||||||
|
@ -88,57 +107,57 @@ func newEmptyLogger() *logger {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set method logger for "*".
|
// Set method logger for "*".
|
||||||
func (l *logger) setDefaultMethodLogger(ml *methodLoggerConfig) error {
|
func (l *logger) setDefaultMethodLogger(ml *MethodLoggerConfig) error {
|
||||||
if l.all != nil {
|
if l.config.All != nil {
|
||||||
return fmt.Errorf("conflicting global rules found")
|
return fmt.Errorf("conflicting global rules found")
|
||||||
}
|
}
|
||||||
l.all = ml
|
l.config.All = ml
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set method logger for "service/*".
|
// Set method logger for "service/*".
|
||||||
//
|
//
|
||||||
// New methodLogger with same service overrides the old one.
|
// New methodLogger with same service overrides the old one.
|
||||||
func (l *logger) setServiceMethodLogger(service string, ml *methodLoggerConfig) error {
|
func (l *logger) setServiceMethodLogger(service string, ml *MethodLoggerConfig) error {
|
||||||
if _, ok := l.services[service]; ok {
|
if _, ok := l.config.Services[service]; ok {
|
||||||
return fmt.Errorf("conflicting service rules for service %v found", service)
|
return fmt.Errorf("conflicting service rules for service %v found", service)
|
||||||
}
|
}
|
||||||
if l.services == nil {
|
if l.config.Services == nil {
|
||||||
l.services = make(map[string]*methodLoggerConfig)
|
l.config.Services = make(map[string]*MethodLoggerConfig)
|
||||||
}
|
}
|
||||||
l.services[service] = ml
|
l.config.Services[service] = ml
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set method logger for "service/method".
|
// Set method logger for "service/method".
|
||||||
//
|
//
|
||||||
// New methodLogger with same method overrides the old one.
|
// New methodLogger with same method overrides the old one.
|
||||||
func (l *logger) setMethodMethodLogger(method string, ml *methodLoggerConfig) error {
|
func (l *logger) setMethodMethodLogger(method string, ml *MethodLoggerConfig) error {
|
||||||
if _, ok := l.blacklist[method]; ok {
|
if _, ok := l.config.Blacklist[method]; ok {
|
||||||
return fmt.Errorf("conflicting blacklist rules for method %v found", method)
|
return fmt.Errorf("conflicting blacklist rules for method %v found", method)
|
||||||
}
|
}
|
||||||
if _, ok := l.methods[method]; ok {
|
if _, ok := l.config.Methods[method]; ok {
|
||||||
return fmt.Errorf("conflicting method rules for method %v found", method)
|
return fmt.Errorf("conflicting method rules for method %v found", method)
|
||||||
}
|
}
|
||||||
if l.methods == nil {
|
if l.config.Methods == nil {
|
||||||
l.methods = make(map[string]*methodLoggerConfig)
|
l.config.Methods = make(map[string]*MethodLoggerConfig)
|
||||||
}
|
}
|
||||||
l.methods[method] = ml
|
l.config.Methods[method] = ml
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set blacklist method for "-service/method".
|
// Set blacklist method for "-service/method".
|
||||||
func (l *logger) setBlacklist(method string) error {
|
func (l *logger) setBlacklist(method string) error {
|
||||||
if _, ok := l.blacklist[method]; ok {
|
if _, ok := l.config.Blacklist[method]; ok {
|
||||||
return fmt.Errorf("conflicting blacklist rules for method %v found", method)
|
return fmt.Errorf("conflicting blacklist rules for method %v found", method)
|
||||||
}
|
}
|
||||||
if _, ok := l.methods[method]; ok {
|
if _, ok := l.config.Methods[method]; ok {
|
||||||
return fmt.Errorf("conflicting method rules for method %v found", method)
|
return fmt.Errorf("conflicting method rules for method %v found", method)
|
||||||
}
|
}
|
||||||
if l.blacklist == nil {
|
if l.config.Blacklist == nil {
|
||||||
l.blacklist = make(map[string]struct{})
|
l.config.Blacklist = make(map[string]struct{})
|
||||||
}
|
}
|
||||||
l.blacklist[method] = struct{}{}
|
l.config.Blacklist[method] = struct{}{}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -148,23 +167,23 @@ func (l *logger) setBlacklist(method string) error {
|
||||||
//
|
//
|
||||||
// Each methodLogger returned by this method is a new instance. This is to
|
// Each methodLogger returned by this method is a new instance. This is to
|
||||||
// generate sequence id within the call.
|
// generate sequence id within the call.
|
||||||
func (l *logger) getMethodLogger(methodName string) *MethodLogger {
|
func (l *logger) GetMethodLogger(methodName string) MethodLogger {
|
||||||
s, m, err := grpcutil.ParseMethod(methodName)
|
s, m, err := grpcutil.ParseMethod(methodName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
grpclogLogger.Infof("binarylogging: failed to parse %q: %v", methodName, err)
|
grpclogLogger.Infof("binarylogging: failed to parse %q: %v", methodName, err)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
if ml, ok := l.methods[s+"/"+m]; ok {
|
if ml, ok := l.config.Methods[s+"/"+m]; ok {
|
||||||
return newMethodLogger(ml.hdr, ml.msg)
|
return newMethodLogger(ml.Header, ml.Message)
|
||||||
}
|
}
|
||||||
if _, ok := l.blacklist[s+"/"+m]; ok {
|
if _, ok := l.config.Blacklist[s+"/"+m]; ok {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
if ml, ok := l.services[s]; ok {
|
if ml, ok := l.config.Services[s]; ok {
|
||||||
return newMethodLogger(ml.hdr, ml.msg)
|
return newMethodLogger(ml.Header, ml.Message)
|
||||||
}
|
}
|
||||||
if l.all == nil {
|
if l.config.All == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return newMethodLogger(l.all.hdr, l.all.msg)
|
return newMethodLogger(l.config.All.Header, l.config.All.Message)
|
||||||
}
|
}
|
||||||
|
|
6
vendor/google.golang.org/grpc/internal/binarylog/env_config.go
generated
vendored
6
vendor/google.golang.org/grpc/internal/binarylog/env_config.go
generated
vendored
|
@ -89,7 +89,7 @@ func (l *logger) fillMethodLoggerWithConfigString(config string) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("invalid config: %q, %v", config, err)
|
return fmt.Errorf("invalid config: %q, %v", config, err)
|
||||||
}
|
}
|
||||||
if err := l.setDefaultMethodLogger(&methodLoggerConfig{hdr: hdr, msg: msg}); err != nil {
|
if err := l.setDefaultMethodLogger(&MethodLoggerConfig{Header: hdr, Message: msg}); err != nil {
|
||||||
return fmt.Errorf("invalid config: %v", err)
|
return fmt.Errorf("invalid config: %v", err)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
@ -104,11 +104,11 @@ func (l *logger) fillMethodLoggerWithConfigString(config string) error {
|
||||||
return fmt.Errorf("invalid header/message length config: %q, %v", suffix, err)
|
return fmt.Errorf("invalid header/message length config: %q, %v", suffix, err)
|
||||||
}
|
}
|
||||||
if m == "*" {
|
if m == "*" {
|
||||||
if err := l.setServiceMethodLogger(s, &methodLoggerConfig{hdr: hdr, msg: msg}); err != nil {
|
if err := l.setServiceMethodLogger(s, &MethodLoggerConfig{Header: hdr, Message: msg}); err != nil {
|
||||||
return fmt.Errorf("invalid config: %v", err)
|
return fmt.Errorf("invalid config: %v", err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if err := l.setMethodMethodLogger(s+"/"+m, &methodLoggerConfig{hdr: hdr, msg: msg}); err != nil {
|
if err := l.setMethodMethodLogger(s+"/"+m, &MethodLoggerConfig{Header: hdr, Message: msg}); err != nil {
|
||||||
return fmt.Errorf("invalid config: %v", err)
|
return fmt.Errorf("invalid config: %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
28
vendor/google.golang.org/grpc/internal/binarylog/method_logger.go
generated
vendored
28
vendor/google.golang.org/grpc/internal/binarylog/method_logger.go
generated
vendored
|
@ -48,7 +48,11 @@ func (g *callIDGenerator) reset() {
|
||||||
var idGen callIDGenerator
|
var idGen callIDGenerator
|
||||||
|
|
||||||
// MethodLogger is the sub-logger for each method.
|
// MethodLogger is the sub-logger for each method.
|
||||||
type MethodLogger struct {
|
type MethodLogger interface {
|
||||||
|
Log(LogEntryConfig)
|
||||||
|
}
|
||||||
|
|
||||||
|
type methodLogger struct {
|
||||||
headerMaxLen, messageMaxLen uint64
|
headerMaxLen, messageMaxLen uint64
|
||||||
|
|
||||||
callID uint64
|
callID uint64
|
||||||
|
@ -57,8 +61,8 @@ type MethodLogger struct {
|
||||||
sink Sink // TODO(blog): make this plugable.
|
sink Sink // TODO(blog): make this plugable.
|
||||||
}
|
}
|
||||||
|
|
||||||
func newMethodLogger(h, m uint64) *MethodLogger {
|
func newMethodLogger(h, m uint64) *methodLogger {
|
||||||
return &MethodLogger{
|
return &methodLogger{
|
||||||
headerMaxLen: h,
|
headerMaxLen: h,
|
||||||
messageMaxLen: m,
|
messageMaxLen: m,
|
||||||
|
|
||||||
|
@ -69,8 +73,10 @@ func newMethodLogger(h, m uint64) *MethodLogger {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Log creates a proto binary log entry, and logs it to the sink.
|
// Build is an internal only method for building the proto message out of the
|
||||||
func (ml *MethodLogger) Log(c LogEntryConfig) {
|
// input event. It's made public to enable other library to reuse as much logic
|
||||||
|
// in methodLogger as possible.
|
||||||
|
func (ml *methodLogger) Build(c LogEntryConfig) *pb.GrpcLogEntry {
|
||||||
m := c.toProto()
|
m := c.toProto()
|
||||||
timestamp, _ := ptypes.TimestampProto(time.Now())
|
timestamp, _ := ptypes.TimestampProto(time.Now())
|
||||||
m.Timestamp = timestamp
|
m.Timestamp = timestamp
|
||||||
|
@ -85,11 +91,15 @@ func (ml *MethodLogger) Log(c LogEntryConfig) {
|
||||||
case *pb.GrpcLogEntry_Message:
|
case *pb.GrpcLogEntry_Message:
|
||||||
m.PayloadTruncated = ml.truncateMessage(pay.Message)
|
m.PayloadTruncated = ml.truncateMessage(pay.Message)
|
||||||
}
|
}
|
||||||
|
return m
|
||||||
ml.sink.Write(m)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ml *MethodLogger) truncateMetadata(mdPb *pb.Metadata) (truncated bool) {
|
// Log creates a proto binary log entry, and logs it to the sink.
|
||||||
|
func (ml *methodLogger) Log(c LogEntryConfig) {
|
||||||
|
ml.sink.Write(ml.Build(c))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ml *methodLogger) truncateMetadata(mdPb *pb.Metadata) (truncated bool) {
|
||||||
if ml.headerMaxLen == maxUInt {
|
if ml.headerMaxLen == maxUInt {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
@ -119,7 +129,7 @@ func (ml *MethodLogger) truncateMetadata(mdPb *pb.Metadata) (truncated bool) {
|
||||||
return truncated
|
return truncated
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ml *MethodLogger) truncateMessage(msgPb *pb.Message) (truncated bool) {
|
func (ml *methodLogger) truncateMessage(msgPb *pb.Message) (truncated bool) {
|
||||||
if ml.messageMaxLen == maxUInt {
|
if ml.messageMaxLen == maxUInt {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
159
vendor/google.golang.org/grpc/internal/channelz/funcs.go
generated
vendored
159
vendor/google.golang.org/grpc/internal/channelz/funcs.go
generated
vendored
|
@ -25,6 +25,7 @@ package channelz
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"sort"
|
"sort"
|
||||||
"sync"
|
"sync"
|
||||||
|
@ -184,54 +185,77 @@ func GetServer(id int64) *ServerMetric {
|
||||||
return db.get().GetServer(id)
|
return db.get().GetServer(id)
|
||||||
}
|
}
|
||||||
|
|
||||||
// RegisterChannel registers the given channel c in channelz database with ref
|
// RegisterChannel registers the given channel c in the channelz database with
|
||||||
// as its reference name, and add it to the child list of its parent (identified
|
// ref as its reference name, and adds it to the child list of its parent
|
||||||
// by pid). pid = 0 means no parent. It returns the unique channelz tracking id
|
// (identified by pid). pid == nil means no parent.
|
||||||
// assigned to this channel.
|
//
|
||||||
func RegisterChannel(c Channel, pid int64, ref string) int64 {
|
// Returns a unique channelz identifier assigned to this channel.
|
||||||
|
//
|
||||||
|
// If channelz is not turned ON, the channelz database is not mutated.
|
||||||
|
func RegisterChannel(c Channel, pid *Identifier, ref string) *Identifier {
|
||||||
id := idGen.genID()
|
id := idGen.genID()
|
||||||
|
var parent int64
|
||||||
|
isTopChannel := true
|
||||||
|
if pid != nil {
|
||||||
|
isTopChannel = false
|
||||||
|
parent = pid.Int()
|
||||||
|
}
|
||||||
|
|
||||||
|
if !IsOn() {
|
||||||
|
return newIdentifer(RefChannel, id, pid)
|
||||||
|
}
|
||||||
|
|
||||||
cn := &channel{
|
cn := &channel{
|
||||||
refName: ref,
|
refName: ref,
|
||||||
c: c,
|
c: c,
|
||||||
subChans: make(map[int64]string),
|
subChans: make(map[int64]string),
|
||||||
nestedChans: make(map[int64]string),
|
nestedChans: make(map[int64]string),
|
||||||
id: id,
|
id: id,
|
||||||
pid: pid,
|
pid: parent,
|
||||||
trace: &channelTrace{createdTime: time.Now(), events: make([]*TraceEvent, 0, getMaxTraceEntry())},
|
trace: &channelTrace{createdTime: time.Now(), events: make([]*TraceEvent, 0, getMaxTraceEntry())},
|
||||||
}
|
}
|
||||||
if pid == 0 {
|
db.get().addChannel(id, cn, isTopChannel, parent)
|
||||||
db.get().addChannel(id, cn, true, pid)
|
return newIdentifer(RefChannel, id, pid)
|
||||||
} else {
|
|
||||||
db.get().addChannel(id, cn, false, pid)
|
|
||||||
}
|
|
||||||
return id
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// RegisterSubChannel registers the given channel c in channelz database with ref
|
// RegisterSubChannel registers the given subChannel c in the channelz database
|
||||||
// as its reference name, and add it to the child list of its parent (identified
|
// with ref as its reference name, and adds it to the child list of its parent
|
||||||
// by pid). It returns the unique channelz tracking id assigned to this subchannel.
|
// (identified by pid).
|
||||||
func RegisterSubChannel(c Channel, pid int64, ref string) int64 {
|
//
|
||||||
if pid == 0 {
|
// Returns a unique channelz identifier assigned to this subChannel.
|
||||||
logger.Error("a SubChannel's parent id cannot be 0")
|
//
|
||||||
return 0
|
// If channelz is not turned ON, the channelz database is not mutated.
|
||||||
|
func RegisterSubChannel(c Channel, pid *Identifier, ref string) (*Identifier, error) {
|
||||||
|
if pid == nil {
|
||||||
|
return nil, errors.New("a SubChannel's parent id cannot be nil")
|
||||||
}
|
}
|
||||||
id := idGen.genID()
|
id := idGen.genID()
|
||||||
|
if !IsOn() {
|
||||||
|
return newIdentifer(RefSubChannel, id, pid), nil
|
||||||
|
}
|
||||||
|
|
||||||
sc := &subChannel{
|
sc := &subChannel{
|
||||||
refName: ref,
|
refName: ref,
|
||||||
c: c,
|
c: c,
|
||||||
sockets: make(map[int64]string),
|
sockets: make(map[int64]string),
|
||||||
id: id,
|
id: id,
|
||||||
pid: pid,
|
pid: pid.Int(),
|
||||||
trace: &channelTrace{createdTime: time.Now(), events: make([]*TraceEvent, 0, getMaxTraceEntry())},
|
trace: &channelTrace{createdTime: time.Now(), events: make([]*TraceEvent, 0, getMaxTraceEntry())},
|
||||||
}
|
}
|
||||||
db.get().addSubChannel(id, sc, pid)
|
db.get().addSubChannel(id, sc, pid.Int())
|
||||||
return id
|
return newIdentifer(RefSubChannel, id, pid), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// RegisterServer registers the given server s in channelz database. It returns
|
// RegisterServer registers the given server s in channelz database. It returns
|
||||||
// the unique channelz tracking id assigned to this server.
|
// the unique channelz tracking id assigned to this server.
|
||||||
func RegisterServer(s Server, ref string) int64 {
|
//
|
||||||
|
// If channelz is not turned ON, the channelz database is not mutated.
|
||||||
|
func RegisterServer(s Server, ref string) *Identifier {
|
||||||
id := idGen.genID()
|
id := idGen.genID()
|
||||||
|
if !IsOn() {
|
||||||
|
return newIdentifer(RefServer, id, nil)
|
||||||
|
}
|
||||||
|
|
||||||
svr := &server{
|
svr := &server{
|
||||||
refName: ref,
|
refName: ref,
|
||||||
s: s,
|
s: s,
|
||||||
|
@ -240,71 +264,92 @@ func RegisterServer(s Server, ref string) int64 {
|
||||||
id: id,
|
id: id,
|
||||||
}
|
}
|
||||||
db.get().addServer(id, svr)
|
db.get().addServer(id, svr)
|
||||||
return id
|
return newIdentifer(RefServer, id, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
// RegisterListenSocket registers the given listen socket s in channelz database
|
// RegisterListenSocket registers the given listen socket s in channelz database
|
||||||
// with ref as its reference name, and add it to the child list of its parent
|
// with ref as its reference name, and add it to the child list of its parent
|
||||||
// (identified by pid). It returns the unique channelz tracking id assigned to
|
// (identified by pid). It returns the unique channelz tracking id assigned to
|
||||||
// this listen socket.
|
// this listen socket.
|
||||||
func RegisterListenSocket(s Socket, pid int64, ref string) int64 {
|
//
|
||||||
if pid == 0 {
|
// If channelz is not turned ON, the channelz database is not mutated.
|
||||||
logger.Error("a ListenSocket's parent id cannot be 0")
|
func RegisterListenSocket(s Socket, pid *Identifier, ref string) (*Identifier, error) {
|
||||||
return 0
|
if pid == nil {
|
||||||
|
return nil, errors.New("a ListenSocket's parent id cannot be 0")
|
||||||
}
|
}
|
||||||
id := idGen.genID()
|
id := idGen.genID()
|
||||||
ls := &listenSocket{refName: ref, s: s, id: id, pid: pid}
|
if !IsOn() {
|
||||||
db.get().addListenSocket(id, ls, pid)
|
return newIdentifer(RefListenSocket, id, pid), nil
|
||||||
return id
|
}
|
||||||
|
|
||||||
|
ls := &listenSocket{refName: ref, s: s, id: id, pid: pid.Int()}
|
||||||
|
db.get().addListenSocket(id, ls, pid.Int())
|
||||||
|
return newIdentifer(RefListenSocket, id, pid), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// RegisterNormalSocket registers the given normal socket s in channelz database
|
// RegisterNormalSocket registers the given normal socket s in channelz database
|
||||||
// with ref as its reference name, and add it to the child list of its parent
|
// with ref as its reference name, and adds it to the child list of its parent
|
||||||
// (identified by pid). It returns the unique channelz tracking id assigned to
|
// (identified by pid). It returns the unique channelz tracking id assigned to
|
||||||
// this normal socket.
|
// this normal socket.
|
||||||
func RegisterNormalSocket(s Socket, pid int64, ref string) int64 {
|
//
|
||||||
if pid == 0 {
|
// If channelz is not turned ON, the channelz database is not mutated.
|
||||||
logger.Error("a NormalSocket's parent id cannot be 0")
|
func RegisterNormalSocket(s Socket, pid *Identifier, ref string) (*Identifier, error) {
|
||||||
return 0
|
if pid == nil {
|
||||||
|
return nil, errors.New("a NormalSocket's parent id cannot be 0")
|
||||||
}
|
}
|
||||||
id := idGen.genID()
|
id := idGen.genID()
|
||||||
ns := &normalSocket{refName: ref, s: s, id: id, pid: pid}
|
if !IsOn() {
|
||||||
db.get().addNormalSocket(id, ns, pid)
|
return newIdentifer(RefNormalSocket, id, pid), nil
|
||||||
return id
|
}
|
||||||
|
|
||||||
|
ns := &normalSocket{refName: ref, s: s, id: id, pid: pid.Int()}
|
||||||
|
db.get().addNormalSocket(id, ns, pid.Int())
|
||||||
|
return newIdentifer(RefNormalSocket, id, pid), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// RemoveEntry removes an entry with unique channelz tracking id to be id from
|
// RemoveEntry removes an entry with unique channelz tracking id to be id from
|
||||||
// channelz database.
|
// channelz database.
|
||||||
func RemoveEntry(id int64) {
|
//
|
||||||
db.get().removeEntry(id)
|
// If channelz is not turned ON, this function is a no-op.
|
||||||
|
func RemoveEntry(id *Identifier) {
|
||||||
|
if !IsOn() {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
db.get().removeEntry(id.Int())
|
||||||
}
|
}
|
||||||
|
|
||||||
// TraceEventDesc is what the caller of AddTraceEvent should provide to describe the event to be added
|
// TraceEventDesc is what the caller of AddTraceEvent should provide to describe
|
||||||
// to the channel trace.
|
// the event to be added to the channel trace.
|
||||||
// The Parent field is optional. It is used for event that will be recorded in the entity's parent
|
//
|
||||||
// trace also.
|
// The Parent field is optional. It is used for an event that will be recorded
|
||||||
|
// in the entity's parent trace.
|
||||||
type TraceEventDesc struct {
|
type TraceEventDesc struct {
|
||||||
Desc string
|
Desc string
|
||||||
Severity Severity
|
Severity Severity
|
||||||
Parent *TraceEventDesc
|
Parent *TraceEventDesc
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddTraceEvent adds trace related to the entity with specified id, using the provided TraceEventDesc.
|
// AddTraceEvent adds trace related to the entity with specified id, using the
|
||||||
func AddTraceEvent(l grpclog.DepthLoggerV2, id int64, depth int, desc *TraceEventDesc) {
|
// provided TraceEventDesc.
|
||||||
for d := desc; d != nil; d = d.Parent {
|
//
|
||||||
switch d.Severity {
|
// If channelz is not turned ON, this will simply log the event descriptions.
|
||||||
case CtUnknown, CtInfo:
|
func AddTraceEvent(l grpclog.DepthLoggerV2, id *Identifier, depth int, desc *TraceEventDesc) {
|
||||||
l.InfoDepth(depth+1, d.Desc)
|
// Log only the trace description associated with the bottom most entity.
|
||||||
case CtWarning:
|
switch desc.Severity {
|
||||||
l.WarningDepth(depth+1, d.Desc)
|
case CtUnknown, CtInfo:
|
||||||
case CtError:
|
l.InfoDepth(depth+1, withParens(id)+desc.Desc)
|
||||||
l.ErrorDepth(depth+1, d.Desc)
|
case CtWarning:
|
||||||
}
|
l.WarningDepth(depth+1, withParens(id)+desc.Desc)
|
||||||
|
case CtError:
|
||||||
|
l.ErrorDepth(depth+1, withParens(id)+desc.Desc)
|
||||||
}
|
}
|
||||||
|
|
||||||
if getMaxTraceEntry() == 0 {
|
if getMaxTraceEntry() == 0 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
db.get().traceEvent(id, desc)
|
if IsOn() {
|
||||||
|
db.get().traceEvent(id.Int(), desc)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// channelMap is the storage data structure for channelz.
|
// channelMap is the storage data structure for channelz.
|
||||||
|
|
75
vendor/google.golang.org/grpc/internal/channelz/id.go
generated
vendored
Normal file
75
vendor/google.golang.org/grpc/internal/channelz/id.go
generated
vendored
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright 2022 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 channelz
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
// Identifier is an opaque identifier which uniquely identifies an entity in the
|
||||||
|
// channelz database.
|
||||||
|
type Identifier struct {
|
||||||
|
typ RefChannelType
|
||||||
|
id int64
|
||||||
|
str string
|
||||||
|
pid *Identifier
|
||||||
|
}
|
||||||
|
|
||||||
|
// Type returns the entity type corresponding to id.
|
||||||
|
func (id *Identifier) Type() RefChannelType {
|
||||||
|
return id.typ
|
||||||
|
}
|
||||||
|
|
||||||
|
// Int returns the integer identifier corresponding to id.
|
||||||
|
func (id *Identifier) Int() int64 {
|
||||||
|
return id.id
|
||||||
|
}
|
||||||
|
|
||||||
|
// String returns a string representation of the entity corresponding to id.
|
||||||
|
//
|
||||||
|
// This includes some information about the parent as well. Examples:
|
||||||
|
// Top-level channel: [Channel #channel-number]
|
||||||
|
// Nested channel: [Channel #parent-channel-number Channel #channel-number]
|
||||||
|
// Sub channel: [Channel #parent-channel SubChannel #subchannel-number]
|
||||||
|
func (id *Identifier) String() string {
|
||||||
|
return id.str
|
||||||
|
}
|
||||||
|
|
||||||
|
// Equal returns true if other is the same as id.
|
||||||
|
func (id *Identifier) Equal(other *Identifier) bool {
|
||||||
|
if (id != nil) != (other != nil) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if id == nil && other == nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return id.typ == other.typ && id.id == other.id && id.pid == other.pid
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewIdentifierForTesting returns a new opaque identifier to be used only for
|
||||||
|
// testing purposes.
|
||||||
|
func NewIdentifierForTesting(typ RefChannelType, id int64, pid *Identifier) *Identifier {
|
||||||
|
return newIdentifer(typ, id, pid)
|
||||||
|
}
|
||||||
|
|
||||||
|
func newIdentifer(typ RefChannelType, id int64, pid *Identifier) *Identifier {
|
||||||
|
str := fmt.Sprintf("%s #%d", typ, id)
|
||||||
|
if pid != nil {
|
||||||
|
str = fmt.Sprintf("%s %s", pid, str)
|
||||||
|
}
|
||||||
|
return &Identifier{typ: typ, id: id, str: str, pid: pid}
|
||||||
|
}
|
91
vendor/google.golang.org/grpc/internal/channelz/logging.go
generated
vendored
91
vendor/google.golang.org/grpc/internal/channelz/logging.go
generated
vendored
|
@ -26,77 +26,54 @@ import (
|
||||||
|
|
||||||
var logger = grpclog.Component("channelz")
|
var logger = grpclog.Component("channelz")
|
||||||
|
|
||||||
|
func withParens(id *Identifier) string {
|
||||||
|
return "[" + id.String() + "] "
|
||||||
|
}
|
||||||
|
|
||||||
// Info logs and adds a trace event if channelz is on.
|
// Info logs and adds a trace event if channelz is on.
|
||||||
func Info(l grpclog.DepthLoggerV2, id int64, args ...interface{}) {
|
func Info(l grpclog.DepthLoggerV2, id *Identifier, args ...interface{}) {
|
||||||
if IsOn() {
|
AddTraceEvent(l, id, 1, &TraceEventDesc{
|
||||||
AddTraceEvent(l, id, 1, &TraceEventDesc{
|
Desc: fmt.Sprint(args...),
|
||||||
Desc: fmt.Sprint(args...),
|
Severity: CtInfo,
|
||||||
Severity: CtInfo,
|
})
|
||||||
})
|
|
||||||
} else {
|
|
||||||
l.InfoDepth(1, args...)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Infof logs and adds a trace event if channelz is on.
|
// Infof logs and adds a trace event if channelz is on.
|
||||||
func Infof(l grpclog.DepthLoggerV2, id int64, format string, args ...interface{}) {
|
func Infof(l grpclog.DepthLoggerV2, id *Identifier, format string, args ...interface{}) {
|
||||||
msg := fmt.Sprintf(format, args...)
|
AddTraceEvent(l, id, 1, &TraceEventDesc{
|
||||||
if IsOn() {
|
Desc: fmt.Sprintf(format, args...),
|
||||||
AddTraceEvent(l, id, 1, &TraceEventDesc{
|
Severity: CtInfo,
|
||||||
Desc: msg,
|
})
|
||||||
Severity: CtInfo,
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
l.InfoDepth(1, msg)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Warning logs and adds a trace event if channelz is on.
|
// Warning logs and adds a trace event if channelz is on.
|
||||||
func Warning(l grpclog.DepthLoggerV2, id int64, args ...interface{}) {
|
func Warning(l grpclog.DepthLoggerV2, id *Identifier, args ...interface{}) {
|
||||||
if IsOn() {
|
AddTraceEvent(l, id, 1, &TraceEventDesc{
|
||||||
AddTraceEvent(l, id, 1, &TraceEventDesc{
|
Desc: fmt.Sprint(args...),
|
||||||
Desc: fmt.Sprint(args...),
|
Severity: CtWarning,
|
||||||
Severity: CtWarning,
|
})
|
||||||
})
|
|
||||||
} else {
|
|
||||||
l.WarningDepth(1, args...)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Warningf logs and adds a trace event if channelz is on.
|
// Warningf logs and adds a trace event if channelz is on.
|
||||||
func Warningf(l grpclog.DepthLoggerV2, id int64, format string, args ...interface{}) {
|
func Warningf(l grpclog.DepthLoggerV2, id *Identifier, format string, args ...interface{}) {
|
||||||
msg := fmt.Sprintf(format, args...)
|
AddTraceEvent(l, id, 1, &TraceEventDesc{
|
||||||
if IsOn() {
|
Desc: fmt.Sprintf(format, args...),
|
||||||
AddTraceEvent(l, id, 1, &TraceEventDesc{
|
Severity: CtWarning,
|
||||||
Desc: msg,
|
})
|
||||||
Severity: CtWarning,
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
l.WarningDepth(1, msg)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Error logs and adds a trace event if channelz is on.
|
// Error logs and adds a trace event if channelz is on.
|
||||||
func Error(l grpclog.DepthLoggerV2, id int64, args ...interface{}) {
|
func Error(l grpclog.DepthLoggerV2, id *Identifier, args ...interface{}) {
|
||||||
if IsOn() {
|
AddTraceEvent(l, id, 1, &TraceEventDesc{
|
||||||
AddTraceEvent(l, id, 1, &TraceEventDesc{
|
Desc: fmt.Sprint(args...),
|
||||||
Desc: fmt.Sprint(args...),
|
Severity: CtError,
|
||||||
Severity: CtError,
|
})
|
||||||
})
|
|
||||||
} else {
|
|
||||||
l.ErrorDepth(1, args...)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Errorf logs and adds a trace event if channelz is on.
|
// Errorf logs and adds a trace event if channelz is on.
|
||||||
func Errorf(l grpclog.DepthLoggerV2, id int64, format string, args ...interface{}) {
|
func Errorf(l grpclog.DepthLoggerV2, id *Identifier, format string, args ...interface{}) {
|
||||||
msg := fmt.Sprintf(format, args...)
|
AddTraceEvent(l, id, 1, &TraceEventDesc{
|
||||||
if IsOn() {
|
Desc: fmt.Sprintf(format, args...),
|
||||||
AddTraceEvent(l, id, 1, &TraceEventDesc{
|
Severity: CtError,
|
||||||
Desc: msg,
|
})
|
||||||
Severity: CtError,
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
l.ErrorDepth(1, msg)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
23
vendor/google.golang.org/grpc/internal/channelz/types.go
generated
vendored
23
vendor/google.golang.org/grpc/internal/channelz/types.go
generated
vendored
|
@ -686,12 +686,33 @@ const (
|
||||||
type RefChannelType int
|
type RefChannelType int
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
// RefUnknown indicates an unknown entity type, the zero value for this type.
|
||||||
|
RefUnknown RefChannelType = iota
|
||||||
// RefChannel indicates the referenced entity is a Channel.
|
// RefChannel indicates the referenced entity is a Channel.
|
||||||
RefChannel RefChannelType = iota
|
RefChannel
|
||||||
// RefSubChannel indicates the referenced entity is a SubChannel.
|
// RefSubChannel indicates the referenced entity is a SubChannel.
|
||||||
RefSubChannel
|
RefSubChannel
|
||||||
|
// RefServer indicates the referenced entity is a Server.
|
||||||
|
RefServer
|
||||||
|
// RefListenSocket indicates the referenced entity is a ListenSocket.
|
||||||
|
RefListenSocket
|
||||||
|
// RefNormalSocket indicates the referenced entity is a NormalSocket.
|
||||||
|
RefNormalSocket
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var refChannelTypeToString = map[RefChannelType]string{
|
||||||
|
RefUnknown: "Unknown",
|
||||||
|
RefChannel: "Channel",
|
||||||
|
RefSubChannel: "SubChannel",
|
||||||
|
RefServer: "Server",
|
||||||
|
RefListenSocket: "ListenSocket",
|
||||||
|
RefNormalSocket: "NormalSocket",
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r RefChannelType) String() string {
|
||||||
|
return refChannelTypeToString[r]
|
||||||
|
}
|
||||||
|
|
||||||
func (c *channelTrace) dumpData() *ChannelTrace {
|
func (c *channelTrace) dumpData() *ChannelTrace {
|
||||||
c.mu.Lock()
|
c.mu.Lock()
|
||||||
ct := &ChannelTrace{EventNum: c.eventCount, CreationTime: c.createdTime}
|
ct := &ChannelTrace{EventNum: c.eventCount, CreationTime: c.createdTime}
|
||||||
|
|
76
vendor/google.golang.org/grpc/internal/googlecloud/googlecloud.go
generated
vendored
76
vendor/google.golang.org/grpc/internal/googlecloud/googlecloud.go
generated
vendored
|
@ -20,13 +20,6 @@
|
||||||
package googlecloud
|
package googlecloud
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
|
||||||
"fmt"
|
|
||||||
"io"
|
|
||||||
"io/ioutil"
|
|
||||||
"os"
|
|
||||||
"os/exec"
|
|
||||||
"regexp"
|
|
||||||
"runtime"
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
@ -35,43 +28,9 @@ import (
|
||||||
internalgrpclog "google.golang.org/grpc/internal/grpclog"
|
internalgrpclog "google.golang.org/grpc/internal/grpclog"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const logPrefix = "[googlecloud]"
|
||||||
linuxProductNameFile = "/sys/class/dmi/id/product_name"
|
|
||||||
windowsCheckCommand = "powershell.exe"
|
|
||||||
windowsCheckCommandArgs = "Get-WmiObject -Class Win32_BIOS"
|
|
||||||
powershellOutputFilter = "Manufacturer"
|
|
||||||
windowsManufacturerRegex = ":(.*)"
|
|
||||||
|
|
||||||
logPrefix = "[googlecloud]"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
var (
|
||||||
// The following two variables will be reassigned in tests.
|
|
||||||
runningOS = runtime.GOOS
|
|
||||||
manufacturerReader = func() (io.Reader, error) {
|
|
||||||
switch runningOS {
|
|
||||||
case "linux":
|
|
||||||
return os.Open(linuxProductNameFile)
|
|
||||||
case "windows":
|
|
||||||
cmd := exec.Command(windowsCheckCommand, windowsCheckCommandArgs)
|
|
||||||
out, err := cmd.Output()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
for _, line := range strings.Split(strings.TrimSuffix(string(out), "\n"), "\n") {
|
|
||||||
if strings.HasPrefix(line, powershellOutputFilter) {
|
|
||||||
re := regexp.MustCompile(windowsManufacturerRegex)
|
|
||||||
name := re.FindString(line)
|
|
||||||
name = strings.TrimLeft(name, ":")
|
|
||||||
return strings.NewReader(name), nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil, errors.New("cannot determine the machine's manufacturer")
|
|
||||||
default:
|
|
||||||
return nil, fmt.Errorf("%s is not supported", runningOS)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
vmOnGCEOnce sync.Once
|
vmOnGCEOnce sync.Once
|
||||||
vmOnGCE bool
|
vmOnGCE bool
|
||||||
|
|
||||||
|
@ -84,21 +43,21 @@ var (
|
||||||
// package. We keep this to avoid depending on the cloud library module.
|
// package. We keep this to avoid depending on the cloud library module.
|
||||||
func OnGCE() bool {
|
func OnGCE() bool {
|
||||||
vmOnGCEOnce.Do(func() {
|
vmOnGCEOnce.Do(func() {
|
||||||
vmOnGCE = isRunningOnGCE()
|
mf, err := manufacturer()
|
||||||
|
if err != nil {
|
||||||
|
logger.Infof("failed to read manufacturer, setting onGCE=false: %v")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
vmOnGCE = isRunningOnGCE(mf, runtime.GOOS)
|
||||||
})
|
})
|
||||||
return vmOnGCE
|
return vmOnGCE
|
||||||
}
|
}
|
||||||
|
|
||||||
// isRunningOnGCE checks whether the local system, without doing a network request is
|
// isRunningOnGCE checks whether the local system, without doing a network request, is
|
||||||
// running on GCP.
|
// running on GCP.
|
||||||
func isRunningOnGCE() bool {
|
func isRunningOnGCE(manufacturer []byte, goos string) bool {
|
||||||
manufacturer, err := readManufacturer()
|
|
||||||
if err != nil {
|
|
||||||
logger.Infof("failed to read manufacturer %v, returning OnGCE=false", err)
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
name := string(manufacturer)
|
name := string(manufacturer)
|
||||||
switch runningOS {
|
switch goos {
|
||||||
case "linux":
|
case "linux":
|
||||||
name = strings.TrimSpace(name)
|
name = strings.TrimSpace(name)
|
||||||
return name == "Google" || name == "Google Compute Engine"
|
return name == "Google" || name == "Google Compute Engine"
|
||||||
|
@ -111,18 +70,3 @@ func isRunningOnGCE() bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func readManufacturer() ([]byte, error) {
|
|
||||||
reader, err := manufacturerReader()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if reader == nil {
|
|
||||||
return nil, errors.New("got nil reader")
|
|
||||||
}
|
|
||||||
manufacturer, err := ioutil.ReadAll(reader)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("failed reading %v: %v", linuxProductNameFile, err)
|
|
||||||
}
|
|
||||||
return manufacturer, nil
|
|
||||||
}
|
|
||||||
|
|
26
vendor/google.golang.org/grpc/internal/googlecloud/manufacturer.go
generated
vendored
Normal file
26
vendor/google.golang.org/grpc/internal/googlecloud/manufacturer.go
generated
vendored
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
//go:build !(linux || windows)
|
||||||
|
// +build !linux,!windows
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright 2022 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 googlecloud
|
||||||
|
|
||||||
|
func manufacturer() ([]byte, error) {
|
||||||
|
return nil, nil
|
||||||
|
}
|
27
vendor/google.golang.org/grpc/internal/googlecloud/manufacturer_linux.go
generated
vendored
Normal file
27
vendor/google.golang.org/grpc/internal/googlecloud/manufacturer_linux.go
generated
vendored
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright 2022 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 googlecloud
|
||||||
|
|
||||||
|
import "io/ioutil"
|
||||||
|
|
||||||
|
const linuxProductNameFile = "/sys/class/dmi/id/product_name"
|
||||||
|
|
||||||
|
func manufacturer() ([]byte, error) {
|
||||||
|
return ioutil.ReadFile(linuxProductNameFile)
|
||||||
|
}
|
50
vendor/google.golang.org/grpc/internal/googlecloud/manufacturer_windows.go
generated
vendored
Normal file
50
vendor/google.golang.org/grpc/internal/googlecloud/manufacturer_windows.go
generated
vendored
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright 2022 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 googlecloud
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"os/exec"
|
||||||
|
"regexp"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
windowsCheckCommand = "powershell.exe"
|
||||||
|
windowsCheckCommandArgs = "Get-WmiObject -Class Win32_BIOS"
|
||||||
|
powershellOutputFilter = "Manufacturer"
|
||||||
|
windowsManufacturerRegex = ":(.*)"
|
||||||
|
)
|
||||||
|
|
||||||
|
func manufacturer() ([]byte, error) {
|
||||||
|
cmd := exec.Command(windowsCheckCommand, windowsCheckCommandArgs)
|
||||||
|
out, err := cmd.Output()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
for _, line := range strings.Split(strings.TrimSuffix(string(out), "\n"), "\n") {
|
||||||
|
if strings.HasPrefix(line, powershellOutputFilter) {
|
||||||
|
re := regexp.MustCompile(windowsManufacturerRegex)
|
||||||
|
name := re.FindString(line)
|
||||||
|
name = strings.TrimLeft(name, ":")
|
||||||
|
return []byte(name), nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil, errors.New("cannot determine the machine's manufacturer")
|
||||||
|
}
|
6
vendor/google.golang.org/grpc/internal/internal.go
generated
vendored
6
vendor/google.golang.org/grpc/internal/internal.go
generated
vendored
|
@ -85,3 +85,9 @@ const (
|
||||||
// that supports backend returned by grpclb balancer.
|
// that supports backend returned by grpclb balancer.
|
||||||
CredsBundleModeBackendFromBalancer = "backend-from-balancer"
|
CredsBundleModeBackendFromBalancer = "backend-from-balancer"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// RLSLoadBalancingPolicyName is the name of the RLS LB policy.
|
||||||
|
//
|
||||||
|
// It currently has an experimental suffix which would be removed once
|
||||||
|
// end-to-end testing of the policy is completed.
|
||||||
|
const RLSLoadBalancingPolicyName = "rls_experimental"
|
||||||
|
|
46
vendor/google.golang.org/grpc/internal/metadata/metadata.go
generated
vendored
46
vendor/google.golang.org/grpc/internal/metadata/metadata.go
generated
vendored
|
@ -22,6 +22,9 @@
|
||||||
package metadata
|
package metadata
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"google.golang.org/grpc/metadata"
|
"google.golang.org/grpc/metadata"
|
||||||
"google.golang.org/grpc/resolver"
|
"google.golang.org/grpc/resolver"
|
||||||
)
|
)
|
||||||
|
@ -72,3 +75,46 @@ func Set(addr resolver.Address, md metadata.MD) resolver.Address {
|
||||||
addr.Attributes = addr.Attributes.WithValue(mdKey, mdValue(md))
|
addr.Attributes = addr.Attributes.WithValue(mdKey, mdValue(md))
|
||||||
return addr
|
return addr
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Validate returns an error if the input md contains invalid keys or values.
|
||||||
|
//
|
||||||
|
// If the header is not a pseudo-header, the following items are checked:
|
||||||
|
// - header names must contain one or more characters from this set [0-9 a-z _ - .].
|
||||||
|
// - if the header-name ends with a "-bin" suffix, no validation of the header value is performed.
|
||||||
|
// - otherwise, the header value must contain one or more characters from the set [%x20-%x7E].
|
||||||
|
func Validate(md metadata.MD) error {
|
||||||
|
for k, vals := range md {
|
||||||
|
// pseudo-header will be ignored
|
||||||
|
if k[0] == ':' {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
// check key, for i that saving a conversion if not using for range
|
||||||
|
for i := 0; i < len(k); i++ {
|
||||||
|
r := k[i]
|
||||||
|
if !(r >= 'a' && r <= 'z') && !(r >= '0' && r <= '9') && r != '.' && r != '-' && r != '_' {
|
||||||
|
return fmt.Errorf("header key %q contains illegal characters not in [0-9a-z-_.]", k)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if strings.HasSuffix(k, "-bin") {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
// check value
|
||||||
|
for _, val := range vals {
|
||||||
|
if hasNotPrintable(val) {
|
||||||
|
return fmt.Errorf("header key %q contains value with non-printable ASCII characters", k)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// hasNotPrintable return true if msg contains any characters which are not in %x20-%x7E
|
||||||
|
func hasNotPrintable(msg string) bool {
|
||||||
|
// for i that saving a conversion if not using for range
|
||||||
|
for i := 0; i < len(msg); i++ {
|
||||||
|
if msg[i] < 0x20 || msg[i] > 0x7E {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
82
vendor/google.golang.org/grpc/internal/pretty/pretty.go
generated
vendored
Normal file
82
vendor/google.golang.org/grpc/internal/pretty/pretty.go
generated
vendored
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright 2021 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 pretty defines helper functions to pretty-print structs for logging.
|
||||||
|
package pretty
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/golang/protobuf/jsonpb"
|
||||||
|
protov1 "github.com/golang/protobuf/proto"
|
||||||
|
"google.golang.org/protobuf/encoding/protojson"
|
||||||
|
protov2 "google.golang.org/protobuf/proto"
|
||||||
|
)
|
||||||
|
|
||||||
|
const jsonIndent = " "
|
||||||
|
|
||||||
|
// ToJSON marshals the input into a json string.
|
||||||
|
//
|
||||||
|
// If marshal fails, it falls back to fmt.Sprintf("%+v").
|
||||||
|
func ToJSON(e interface{}) string {
|
||||||
|
switch ee := e.(type) {
|
||||||
|
case protov1.Message:
|
||||||
|
mm := jsonpb.Marshaler{Indent: jsonIndent}
|
||||||
|
ret, err := mm.MarshalToString(ee)
|
||||||
|
if err != nil {
|
||||||
|
// This may fail for proto.Anys, e.g. for xDS v2, LDS, the v2
|
||||||
|
// messages are not imported, and this will fail because the message
|
||||||
|
// is not found.
|
||||||
|
return fmt.Sprintf("%+v", ee)
|
||||||
|
}
|
||||||
|
return ret
|
||||||
|
case protov2.Message:
|
||||||
|
mm := protojson.MarshalOptions{
|
||||||
|
Multiline: true,
|
||||||
|
Indent: jsonIndent,
|
||||||
|
}
|
||||||
|
ret, err := mm.Marshal(ee)
|
||||||
|
if err != nil {
|
||||||
|
// This may fail for proto.Anys, e.g. for xDS v2, LDS, the v2
|
||||||
|
// messages are not imported, and this will fail because the message
|
||||||
|
// is not found.
|
||||||
|
return fmt.Sprintf("%+v", ee)
|
||||||
|
}
|
||||||
|
return string(ret)
|
||||||
|
default:
|
||||||
|
ret, err := json.MarshalIndent(ee, "", jsonIndent)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Sprintf("%+v", ee)
|
||||||
|
}
|
||||||
|
return string(ret)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FormatJSON formats the input json bytes with indentation.
|
||||||
|
//
|
||||||
|
// If Indent fails, it returns the unchanged input as string.
|
||||||
|
func FormatJSON(b []byte) string {
|
||||||
|
var out bytes.Buffer
|
||||||
|
err := json.Indent(&out, b, "", jsonIndent)
|
||||||
|
if err != nil {
|
||||||
|
return string(b)
|
||||||
|
}
|
||||||
|
return out.String()
|
||||||
|
}
|
11
vendor/google.golang.org/grpc/internal/transport/http2_client.go
generated
vendored
11
vendor/google.golang.org/grpc/internal/transport/http2_client.go
generated
vendored
|
@ -132,7 +132,7 @@ type http2Client struct {
|
||||||
kpDormant bool
|
kpDormant bool
|
||||||
|
|
||||||
// Fields below are for channelz metric collection.
|
// Fields below are for channelz metric collection.
|
||||||
channelzID int64 // channelz unique identification number
|
channelzID *channelz.Identifier
|
||||||
czData *channelzData
|
czData *channelzData
|
||||||
|
|
||||||
onGoAway func(GoAwayReason)
|
onGoAway func(GoAwayReason)
|
||||||
|
@ -351,8 +351,9 @@ func newHTTP2Client(connectCtx, ctx context.Context, addr resolver.Address, opts
|
||||||
}
|
}
|
||||||
t.statsHandler.HandleConn(t.ctx, connBegin)
|
t.statsHandler.HandleConn(t.ctx, connBegin)
|
||||||
}
|
}
|
||||||
if channelz.IsOn() {
|
t.channelzID, err = channelz.RegisterNormalSocket(t, opts.ChannelzParentID, fmt.Sprintf("%s -> %s", t.localAddr, t.remoteAddr))
|
||||||
t.channelzID = channelz.RegisterNormalSocket(t, opts.ChannelzParentID, fmt.Sprintf("%s -> %s", t.localAddr, t.remoteAddr))
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
}
|
}
|
||||||
if t.keepaliveEnabled {
|
if t.keepaliveEnabled {
|
||||||
t.kpDormancyCond = sync.NewCond(&t.mu)
|
t.kpDormancyCond = sync.NewCond(&t.mu)
|
||||||
|
@ -898,9 +899,7 @@ func (t *http2Client) Close(err error) {
|
||||||
t.controlBuf.finish()
|
t.controlBuf.finish()
|
||||||
t.cancel()
|
t.cancel()
|
||||||
t.conn.Close()
|
t.conn.Close()
|
||||||
if channelz.IsOn() {
|
channelz.RemoveEntry(t.channelzID)
|
||||||
channelz.RemoveEntry(t.channelzID)
|
|
||||||
}
|
|
||||||
// Append info about previous goaways if there were any, since this may be important
|
// Append info about previous goaways if there were any, since this may be important
|
||||||
// for understanding the root cause for this connection to be closed.
|
// for understanding the root cause for this connection to be closed.
|
||||||
_, goAwayDebugMessage := t.GetGoAwayReason()
|
_, goAwayDebugMessage := t.GetGoAwayReason()
|
||||||
|
|
18
vendor/google.golang.org/grpc/internal/transport/http2_server.go
generated
vendored
18
vendor/google.golang.org/grpc/internal/transport/http2_server.go
generated
vendored
|
@ -36,6 +36,7 @@ import (
|
||||||
"golang.org/x/net/http2"
|
"golang.org/x/net/http2"
|
||||||
"golang.org/x/net/http2/hpack"
|
"golang.org/x/net/http2/hpack"
|
||||||
"google.golang.org/grpc/internal/grpcutil"
|
"google.golang.org/grpc/internal/grpcutil"
|
||||||
|
"google.golang.org/grpc/internal/syscall"
|
||||||
|
|
||||||
"google.golang.org/grpc/codes"
|
"google.golang.org/grpc/codes"
|
||||||
"google.golang.org/grpc/credentials"
|
"google.golang.org/grpc/credentials"
|
||||||
|
@ -117,7 +118,7 @@ type http2Server struct {
|
||||||
idle time.Time
|
idle time.Time
|
||||||
|
|
||||||
// Fields below are for channelz metric collection.
|
// Fields below are for channelz metric collection.
|
||||||
channelzID int64 // channelz unique identification number
|
channelzID *channelz.Identifier
|
||||||
czData *channelzData
|
czData *channelzData
|
||||||
bufferPool *bufferPool
|
bufferPool *bufferPool
|
||||||
|
|
||||||
|
@ -231,6 +232,11 @@ func NewServerTransport(conn net.Conn, config *ServerConfig) (_ ServerTransport,
|
||||||
if kp.Timeout == 0 {
|
if kp.Timeout == 0 {
|
||||||
kp.Timeout = defaultServerKeepaliveTimeout
|
kp.Timeout = defaultServerKeepaliveTimeout
|
||||||
}
|
}
|
||||||
|
if kp.Time != infinity {
|
||||||
|
if err = syscall.SetTCPUserTimeout(conn, kp.Timeout); err != nil {
|
||||||
|
return nil, connectionErrorf(false, err, "transport: failed to set TCP_USER_TIMEOUT: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
kep := config.KeepalivePolicy
|
kep := config.KeepalivePolicy
|
||||||
if kep.MinTime == 0 {
|
if kep.MinTime == 0 {
|
||||||
kep.MinTime = defaultKeepalivePolicyMinTime
|
kep.MinTime = defaultKeepalivePolicyMinTime
|
||||||
|
@ -275,12 +281,12 @@ func NewServerTransport(conn net.Conn, config *ServerConfig) (_ ServerTransport,
|
||||||
connBegin := &stats.ConnBegin{}
|
connBegin := &stats.ConnBegin{}
|
||||||
t.stats.HandleConn(t.ctx, connBegin)
|
t.stats.HandleConn(t.ctx, connBegin)
|
||||||
}
|
}
|
||||||
if channelz.IsOn() {
|
t.channelzID, err = channelz.RegisterNormalSocket(t, config.ChannelzParentID, fmt.Sprintf("%s -> %s", t.remoteAddr, t.localAddr))
|
||||||
t.channelzID = channelz.RegisterNormalSocket(t, config.ChannelzParentID, fmt.Sprintf("%s -> %s", t.remoteAddr, t.localAddr))
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
t.connectionID = atomic.AddUint64(&serverConnectionCounter, 1)
|
t.connectionID = atomic.AddUint64(&serverConnectionCounter, 1)
|
||||||
|
|
||||||
t.framer.writer.Flush()
|
t.framer.writer.Flush()
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
|
@ -1210,9 +1216,7 @@ func (t *http2Server) Close() {
|
||||||
if err := t.conn.Close(); err != nil && logger.V(logLevel) {
|
if err := t.conn.Close(); err != nil && logger.V(logLevel) {
|
||||||
logger.Infof("transport: error closing conn during Close: %v", err)
|
logger.Infof("transport: error closing conn during Close: %v", err)
|
||||||
}
|
}
|
||||||
if channelz.IsOn() {
|
channelz.RemoveEntry(t.channelzID)
|
||||||
channelz.RemoveEntry(t.channelzID)
|
|
||||||
}
|
|
||||||
// Cancel all active streams.
|
// Cancel all active streams.
|
||||||
for _, s := range streams {
|
for _, s := range streams {
|
||||||
s.cancel()
|
s.cancel()
|
||||||
|
|
5
vendor/google.golang.org/grpc/internal/transport/transport.go
generated
vendored
5
vendor/google.golang.org/grpc/internal/transport/transport.go
generated
vendored
|
@ -34,6 +34,7 @@ import (
|
||||||
|
|
||||||
"google.golang.org/grpc/codes"
|
"google.golang.org/grpc/codes"
|
||||||
"google.golang.org/grpc/credentials"
|
"google.golang.org/grpc/credentials"
|
||||||
|
"google.golang.org/grpc/internal/channelz"
|
||||||
"google.golang.org/grpc/keepalive"
|
"google.golang.org/grpc/keepalive"
|
||||||
"google.golang.org/grpc/metadata"
|
"google.golang.org/grpc/metadata"
|
||||||
"google.golang.org/grpc/resolver"
|
"google.golang.org/grpc/resolver"
|
||||||
|
@ -529,7 +530,7 @@ type ServerConfig struct {
|
||||||
InitialConnWindowSize int32
|
InitialConnWindowSize int32
|
||||||
WriteBufferSize int
|
WriteBufferSize int
|
||||||
ReadBufferSize int
|
ReadBufferSize int
|
||||||
ChannelzParentID int64
|
ChannelzParentID *channelz.Identifier
|
||||||
MaxHeaderListSize *uint32
|
MaxHeaderListSize *uint32
|
||||||
HeaderTableSize *uint32
|
HeaderTableSize *uint32
|
||||||
}
|
}
|
||||||
|
@ -563,7 +564,7 @@ type ConnectOptions struct {
|
||||||
// ReadBufferSize sets the size of read buffer, which in turn determines how much data can be read at most for one read syscall.
|
// ReadBufferSize sets the size of read buffer, which in turn determines how much data can be read at most for one read syscall.
|
||||||
ReadBufferSize int
|
ReadBufferSize int
|
||||||
// ChannelzParentID sets the addrConn id which initiate the creation of this client transport.
|
// ChannelzParentID sets the addrConn id which initiate the creation of this client transport.
|
||||||
ChannelzParentID int64
|
ChannelzParentID *channelz.Identifier
|
||||||
// MaxHeaderListSize sets the max (uncompressed) size of header list that is prepared to be received.
|
// MaxHeaderListSize sets the max (uncompressed) size of header list that is prepared to be received.
|
||||||
MaxHeaderListSize *uint32
|
MaxHeaderListSize *uint32
|
||||||
// UseProxy specifies if a proxy should be used.
|
// UseProxy specifies if a proxy should be used.
|
||||||
|
|
8
vendor/google.golang.org/grpc/metadata/metadata.go
generated
vendored
8
vendor/google.golang.org/grpc/metadata/metadata.go
generated
vendored
|
@ -188,7 +188,9 @@ func FromIncomingContext(ctx context.Context) (MD, bool) {
|
||||||
// map, and there's no guarantee that the MD attached to the context is
|
// map, and there's no guarantee that the MD attached to the context is
|
||||||
// created using our helper functions.
|
// created using our helper functions.
|
||||||
key := strings.ToLower(k)
|
key := strings.ToLower(k)
|
||||||
out[key] = v
|
s := make([]string, len(v))
|
||||||
|
copy(s, v)
|
||||||
|
out[key] = s
|
||||||
}
|
}
|
||||||
return out, true
|
return out, true
|
||||||
}
|
}
|
||||||
|
@ -226,7 +228,9 @@ func FromOutgoingContext(ctx context.Context) (MD, bool) {
|
||||||
// map, and there's no guarantee that the MD attached to the context is
|
// map, and there's no guarantee that the MD attached to the context is
|
||||||
// created using our helper functions.
|
// created using our helper functions.
|
||||||
key := strings.ToLower(k)
|
key := strings.ToLower(k)
|
||||||
out[key] = v
|
s := make([]string, len(v))
|
||||||
|
copy(s, v)
|
||||||
|
out[key] = s
|
||||||
}
|
}
|
||||||
for _, added := range raw.added {
|
for _, added := range raw.added {
|
||||||
if len(added)%2 == 1 {
|
if len(added)%2 == 1 {
|
||||||
|
|
128
vendor/google.golang.org/grpc/pickfirst.go
generated
vendored
128
vendor/google.golang.org/grpc/pickfirst.go
generated
vendored
|
@ -44,79 +44,107 @@ func (*pickfirstBuilder) Name() string {
|
||||||
}
|
}
|
||||||
|
|
||||||
type pickfirstBalancer struct {
|
type pickfirstBalancer struct {
|
||||||
state connectivity.State
|
state connectivity.State
|
||||||
cc balancer.ClientConn
|
cc balancer.ClientConn
|
||||||
sc balancer.SubConn
|
subConn balancer.SubConn
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *pickfirstBalancer) ResolverError(err error) {
|
func (b *pickfirstBalancer) ResolverError(err error) {
|
||||||
switch b.state {
|
|
||||||
case connectivity.TransientFailure, connectivity.Idle, connectivity.Connecting:
|
|
||||||
// Set a failing picker if we don't have a good picker.
|
|
||||||
b.cc.UpdateState(balancer.State{ConnectivityState: connectivity.TransientFailure,
|
|
||||||
Picker: &picker{err: fmt.Errorf("name resolver error: %v", err)},
|
|
||||||
})
|
|
||||||
}
|
|
||||||
if logger.V(2) {
|
if logger.V(2) {
|
||||||
logger.Infof("pickfirstBalancer: ResolverError called with error %v", err)
|
logger.Infof("pickfirstBalancer: ResolverError called with error %v", err)
|
||||||
}
|
}
|
||||||
|
if b.subConn == nil {
|
||||||
|
b.state = connectivity.TransientFailure
|
||||||
|
}
|
||||||
|
|
||||||
|
if b.state != connectivity.TransientFailure {
|
||||||
|
// The picker will not change since the balancer does not currently
|
||||||
|
// report an error.
|
||||||
|
return
|
||||||
|
}
|
||||||
|
b.cc.UpdateState(balancer.State{
|
||||||
|
ConnectivityState: connectivity.TransientFailure,
|
||||||
|
Picker: &picker{err: fmt.Errorf("name resolver error: %v", err)},
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *pickfirstBalancer) UpdateClientConnState(cs balancer.ClientConnState) error {
|
func (b *pickfirstBalancer) UpdateClientConnState(state balancer.ClientConnState) error {
|
||||||
if len(cs.ResolverState.Addresses) == 0 {
|
if len(state.ResolverState.Addresses) == 0 {
|
||||||
|
// The resolver reported an empty address list. Treat it like an error by
|
||||||
|
// calling b.ResolverError.
|
||||||
|
if b.subConn != nil {
|
||||||
|
// Remove the old subConn. All addresses were removed, so it is no longer
|
||||||
|
// valid.
|
||||||
|
b.cc.RemoveSubConn(b.subConn)
|
||||||
|
b.subConn = nil
|
||||||
|
}
|
||||||
b.ResolverError(errors.New("produced zero addresses"))
|
b.ResolverError(errors.New("produced zero addresses"))
|
||||||
return balancer.ErrBadResolverState
|
return balancer.ErrBadResolverState
|
||||||
}
|
}
|
||||||
if b.sc == nil {
|
|
||||||
var err error
|
if b.subConn != nil {
|
||||||
b.sc, err = b.cc.NewSubConn(cs.ResolverState.Addresses, balancer.NewSubConnOptions{})
|
b.cc.UpdateAddresses(b.subConn, state.ResolverState.Addresses)
|
||||||
if err != nil {
|
return nil
|
||||||
if logger.V(2) {
|
|
||||||
logger.Errorf("pickfirstBalancer: failed to NewSubConn: %v", err)
|
|
||||||
}
|
|
||||||
b.state = connectivity.TransientFailure
|
|
||||||
b.cc.UpdateState(balancer.State{ConnectivityState: connectivity.TransientFailure,
|
|
||||||
Picker: &picker{err: fmt.Errorf("error creating connection: %v", err)},
|
|
||||||
})
|
|
||||||
return balancer.ErrBadResolverState
|
|
||||||
}
|
|
||||||
b.state = connectivity.Idle
|
|
||||||
b.cc.UpdateState(balancer.State{ConnectivityState: connectivity.Idle, Picker: &picker{result: balancer.PickResult{SubConn: b.sc}}})
|
|
||||||
b.sc.Connect()
|
|
||||||
} else {
|
|
||||||
b.cc.UpdateAddresses(b.sc, cs.ResolverState.Addresses)
|
|
||||||
b.sc.Connect()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
subConn, err := b.cc.NewSubConn(state.ResolverState.Addresses, balancer.NewSubConnOptions{})
|
||||||
|
if err != nil {
|
||||||
|
if logger.V(2) {
|
||||||
|
logger.Errorf("pickfirstBalancer: failed to NewSubConn: %v", err)
|
||||||
|
}
|
||||||
|
b.state = connectivity.TransientFailure
|
||||||
|
b.cc.UpdateState(balancer.State{
|
||||||
|
ConnectivityState: connectivity.TransientFailure,
|
||||||
|
Picker: &picker{err: fmt.Errorf("error creating connection: %v", err)},
|
||||||
|
})
|
||||||
|
return balancer.ErrBadResolverState
|
||||||
|
}
|
||||||
|
b.subConn = subConn
|
||||||
|
b.state = connectivity.Idle
|
||||||
|
b.cc.UpdateState(balancer.State{
|
||||||
|
ConnectivityState: connectivity.Idle,
|
||||||
|
Picker: &picker{result: balancer.PickResult{SubConn: b.subConn}},
|
||||||
|
})
|
||||||
|
b.subConn.Connect()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *pickfirstBalancer) UpdateSubConnState(sc balancer.SubConn, s balancer.SubConnState) {
|
func (b *pickfirstBalancer) UpdateSubConnState(subConn balancer.SubConn, state balancer.SubConnState) {
|
||||||
if logger.V(2) {
|
if logger.V(2) {
|
||||||
logger.Infof("pickfirstBalancer: UpdateSubConnState: %p, %v", sc, s)
|
logger.Infof("pickfirstBalancer: UpdateSubConnState: %p, %v", subConn, state)
|
||||||
}
|
}
|
||||||
if b.sc != sc {
|
if b.subConn != subConn {
|
||||||
if logger.V(2) {
|
if logger.V(2) {
|
||||||
logger.Infof("pickfirstBalancer: ignored state change because sc is not recognized")
|
logger.Infof("pickfirstBalancer: ignored state change because subConn is not recognized")
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
b.state = s.ConnectivityState
|
b.state = state.ConnectivityState
|
||||||
if s.ConnectivityState == connectivity.Shutdown {
|
if state.ConnectivityState == connectivity.Shutdown {
|
||||||
b.sc = nil
|
b.subConn = nil
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
switch s.ConnectivityState {
|
switch state.ConnectivityState {
|
||||||
case connectivity.Ready:
|
case connectivity.Ready:
|
||||||
b.cc.UpdateState(balancer.State{ConnectivityState: s.ConnectivityState, Picker: &picker{result: balancer.PickResult{SubConn: sc}}})
|
b.cc.UpdateState(balancer.State{
|
||||||
|
ConnectivityState: state.ConnectivityState,
|
||||||
|
Picker: &picker{result: balancer.PickResult{SubConn: subConn}},
|
||||||
|
})
|
||||||
case connectivity.Connecting:
|
case connectivity.Connecting:
|
||||||
b.cc.UpdateState(balancer.State{ConnectivityState: s.ConnectivityState, Picker: &picker{err: balancer.ErrNoSubConnAvailable}})
|
b.cc.UpdateState(balancer.State{
|
||||||
|
ConnectivityState: state.ConnectivityState,
|
||||||
|
Picker: &picker{err: balancer.ErrNoSubConnAvailable},
|
||||||
|
})
|
||||||
case connectivity.Idle:
|
case connectivity.Idle:
|
||||||
b.cc.UpdateState(balancer.State{ConnectivityState: s.ConnectivityState, Picker: &idlePicker{sc: sc}})
|
b.cc.UpdateState(balancer.State{
|
||||||
|
ConnectivityState: state.ConnectivityState,
|
||||||
|
Picker: &idlePicker{subConn: subConn},
|
||||||
|
})
|
||||||
case connectivity.TransientFailure:
|
case connectivity.TransientFailure:
|
||||||
b.cc.UpdateState(balancer.State{
|
b.cc.UpdateState(balancer.State{
|
||||||
ConnectivityState: s.ConnectivityState,
|
ConnectivityState: state.ConnectivityState,
|
||||||
Picker: &picker{err: s.ConnectionError},
|
Picker: &picker{err: state.ConnectionError},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -125,8 +153,8 @@ func (b *pickfirstBalancer) Close() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *pickfirstBalancer) ExitIdle() {
|
func (b *pickfirstBalancer) ExitIdle() {
|
||||||
if b.sc != nil && b.state == connectivity.Idle {
|
if b.subConn != nil && b.state == connectivity.Idle {
|
||||||
b.sc.Connect()
|
b.subConn.Connect()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -135,18 +163,18 @@ type picker struct {
|
||||||
err error
|
err error
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *picker) Pick(info balancer.PickInfo) (balancer.PickResult, error) {
|
func (p *picker) Pick(balancer.PickInfo) (balancer.PickResult, error) {
|
||||||
return p.result, p.err
|
return p.result, p.err
|
||||||
}
|
}
|
||||||
|
|
||||||
// idlePicker is used when the SubConn is IDLE and kicks the SubConn into
|
// idlePicker is used when the SubConn is IDLE and kicks the SubConn into
|
||||||
// CONNECTING when Pick is called.
|
// CONNECTING when Pick is called.
|
||||||
type idlePicker struct {
|
type idlePicker struct {
|
||||||
sc balancer.SubConn
|
subConn balancer.SubConn
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *idlePicker) Pick(info balancer.PickInfo) (balancer.PickResult, error) {
|
func (i *idlePicker) Pick(balancer.PickInfo) (balancer.PickResult, error) {
|
||||||
i.sc.Connect()
|
i.subConn.Connect()
|
||||||
return balancer.PickResult{}, balancer.ErrNoSubConnAvailable
|
return balancer.PickResult{}, balancer.ErrNoSubConnAvailable
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
8
vendor/google.golang.org/grpc/resolver/resolver.go
generated
vendored
8
vendor/google.golang.org/grpc/resolver/resolver.go
generated
vendored
|
@ -27,6 +27,7 @@ import (
|
||||||
|
|
||||||
"google.golang.org/grpc/attributes"
|
"google.golang.org/grpc/attributes"
|
||||||
"google.golang.org/grpc/credentials"
|
"google.golang.org/grpc/credentials"
|
||||||
|
"google.golang.org/grpc/internal/pretty"
|
||||||
"google.golang.org/grpc/serviceconfig"
|
"google.golang.org/grpc/serviceconfig"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -139,13 +140,18 @@ type Address struct {
|
||||||
|
|
||||||
// Equal returns whether a and o are identical. Metadata is compared directly,
|
// Equal returns whether a and o are identical. Metadata is compared directly,
|
||||||
// not with any recursive introspection.
|
// not with any recursive introspection.
|
||||||
func (a *Address) Equal(o Address) bool {
|
func (a Address) Equal(o Address) bool {
|
||||||
return a.Addr == o.Addr && a.ServerName == o.ServerName &&
|
return a.Addr == o.Addr && a.ServerName == o.ServerName &&
|
||||||
a.Attributes.Equal(o.Attributes) &&
|
a.Attributes.Equal(o.Attributes) &&
|
||||||
a.BalancerAttributes.Equal(o.BalancerAttributes) &&
|
a.BalancerAttributes.Equal(o.BalancerAttributes) &&
|
||||||
a.Type == o.Type && a.Metadata == o.Metadata
|
a.Type == o.Type && a.Metadata == o.Metadata
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// String returns JSON formatted string representation of the address.
|
||||||
|
func (a Address) String() string {
|
||||||
|
return pretty.ToJSON(a)
|
||||||
|
}
|
||||||
|
|
||||||
// BuildOptions includes additional information for the builder to create
|
// BuildOptions includes additional information for the builder to create
|
||||||
// the resolver.
|
// the resolver.
|
||||||
type BuildOptions struct {
|
type BuildOptions struct {
|
||||||
|
|
23
vendor/google.golang.org/grpc/resolver_conn_wrapper.go
generated
vendored
23
vendor/google.golang.org/grpc/resolver_conn_wrapper.go
generated
vendored
|
@ -19,7 +19,6 @@
|
||||||
package grpc
|
package grpc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
|
@ -27,6 +26,7 @@ import (
|
||||||
"google.golang.org/grpc/credentials"
|
"google.golang.org/grpc/credentials"
|
||||||
"google.golang.org/grpc/internal/channelz"
|
"google.golang.org/grpc/internal/channelz"
|
||||||
"google.golang.org/grpc/internal/grpcsync"
|
"google.golang.org/grpc/internal/grpcsync"
|
||||||
|
"google.golang.org/grpc/internal/pretty"
|
||||||
"google.golang.org/grpc/resolver"
|
"google.golang.org/grpc/resolver"
|
||||||
"google.golang.org/grpc/serviceconfig"
|
"google.golang.org/grpc/serviceconfig"
|
||||||
)
|
)
|
||||||
|
@ -97,10 +97,7 @@ func (ccr *ccResolverWrapper) UpdateState(s resolver.State) error {
|
||||||
if ccr.done.HasFired() {
|
if ccr.done.HasFired() {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
channelz.Infof(logger, ccr.cc.channelzID, "ccResolverWrapper: sending update to cc: %v", s)
|
ccr.addChannelzTraceEvent(s)
|
||||||
if channelz.IsOn() {
|
|
||||||
ccr.addChannelzTraceEvent(s)
|
|
||||||
}
|
|
||||||
ccr.curState = s
|
ccr.curState = s
|
||||||
if err := ccr.cc.updateResolverState(ccr.curState, nil); err == balancer.ErrBadResolverState {
|
if err := ccr.cc.updateResolverState(ccr.curState, nil); err == balancer.ErrBadResolverState {
|
||||||
return balancer.ErrBadResolverState
|
return balancer.ErrBadResolverState
|
||||||
|
@ -125,10 +122,7 @@ func (ccr *ccResolverWrapper) NewAddress(addrs []resolver.Address) {
|
||||||
if ccr.done.HasFired() {
|
if ccr.done.HasFired() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
channelz.Infof(logger, ccr.cc.channelzID, "ccResolverWrapper: sending new addresses to cc: %v", addrs)
|
ccr.addChannelzTraceEvent(resolver.State{Addresses: addrs, ServiceConfig: ccr.curState.ServiceConfig})
|
||||||
if channelz.IsOn() {
|
|
||||||
ccr.addChannelzTraceEvent(resolver.State{Addresses: addrs, ServiceConfig: ccr.curState.ServiceConfig})
|
|
||||||
}
|
|
||||||
ccr.curState.Addresses = addrs
|
ccr.curState.Addresses = addrs
|
||||||
ccr.cc.updateResolverState(ccr.curState, nil)
|
ccr.cc.updateResolverState(ccr.curState, nil)
|
||||||
}
|
}
|
||||||
|
@ -141,7 +135,7 @@ func (ccr *ccResolverWrapper) NewServiceConfig(sc string) {
|
||||||
if ccr.done.HasFired() {
|
if ccr.done.HasFired() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
channelz.Infof(logger, ccr.cc.channelzID, "ccResolverWrapper: got new service config: %v", sc)
|
channelz.Infof(logger, ccr.cc.channelzID, "ccResolverWrapper: got new service config: %s", sc)
|
||||||
if ccr.cc.dopts.disableServiceConfig {
|
if ccr.cc.dopts.disableServiceConfig {
|
||||||
channelz.Info(logger, ccr.cc.channelzID, "Service config lookups disabled; ignoring config")
|
channelz.Info(logger, ccr.cc.channelzID, "Service config lookups disabled; ignoring config")
|
||||||
return
|
return
|
||||||
|
@ -151,9 +145,7 @@ func (ccr *ccResolverWrapper) NewServiceConfig(sc string) {
|
||||||
channelz.Warningf(logger, ccr.cc.channelzID, "ccResolverWrapper: error parsing service config: %v", scpr.Err)
|
channelz.Warningf(logger, ccr.cc.channelzID, "ccResolverWrapper: error parsing service config: %v", scpr.Err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if channelz.IsOn() {
|
ccr.addChannelzTraceEvent(resolver.State{Addresses: ccr.curState.Addresses, ServiceConfig: scpr})
|
||||||
ccr.addChannelzTraceEvent(resolver.State{Addresses: ccr.curState.Addresses, ServiceConfig: scpr})
|
|
||||||
}
|
|
||||||
ccr.curState.ServiceConfig = scpr
|
ccr.curState.ServiceConfig = scpr
|
||||||
ccr.cc.updateResolverState(ccr.curState, nil)
|
ccr.cc.updateResolverState(ccr.curState, nil)
|
||||||
}
|
}
|
||||||
|
@ -180,8 +172,5 @@ func (ccr *ccResolverWrapper) addChannelzTraceEvent(s resolver.State) {
|
||||||
} else if len(ccr.curState.Addresses) == 0 && len(s.Addresses) > 0 {
|
} else if len(ccr.curState.Addresses) == 0 && len(s.Addresses) > 0 {
|
||||||
updates = append(updates, "resolver returned new addresses")
|
updates = append(updates, "resolver returned new addresses")
|
||||||
}
|
}
|
||||||
channelz.AddTraceEvent(logger, ccr.cc.channelzID, 0, &channelz.TraceEventDesc{
|
channelz.Infof(logger, ccr.cc.channelzID, "Resolver state updated: %s (%v)", pretty.ToJSON(s), strings.Join(updates, "; "))
|
||||||
Desc: fmt.Sprintf("Resolver state updated: %+v (%v)", s, strings.Join(updates, "; ")),
|
|
||||||
Severity: channelz.CtInfo,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
41
vendor/google.golang.org/grpc/server.go
generated
vendored
41
vendor/google.golang.org/grpc/server.go
generated
vendored
|
@ -134,7 +134,7 @@ type Server struct {
|
||||||
channelzRemoveOnce sync.Once
|
channelzRemoveOnce sync.Once
|
||||||
serveWG sync.WaitGroup // counts active Serve goroutines for GracefulStop
|
serveWG sync.WaitGroup // counts active Serve goroutines for GracefulStop
|
||||||
|
|
||||||
channelzID int64 // channelz unique identification number
|
channelzID *channelz.Identifier
|
||||||
czData *channelzData
|
czData *channelzData
|
||||||
|
|
||||||
serverWorkerChannels []chan *serverWorkerData
|
serverWorkerChannels []chan *serverWorkerData
|
||||||
|
@ -584,9 +584,8 @@ func NewServer(opt ...ServerOption) *Server {
|
||||||
s.initServerWorkers()
|
s.initServerWorkers()
|
||||||
}
|
}
|
||||||
|
|
||||||
if channelz.IsOn() {
|
s.channelzID = channelz.RegisterServer(&channelzServer{s}, "")
|
||||||
s.channelzID = channelz.RegisterServer(&channelzServer{s}, "")
|
channelz.Info(logger, s.channelzID, "Server created")
|
||||||
}
|
|
||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -712,7 +711,7 @@ var ErrServerStopped = errors.New("grpc: the server has been stopped")
|
||||||
|
|
||||||
type listenSocket struct {
|
type listenSocket struct {
|
||||||
net.Listener
|
net.Listener
|
||||||
channelzID int64
|
channelzID *channelz.Identifier
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *listenSocket) ChannelzMetric() *channelz.SocketInternalMetric {
|
func (l *listenSocket) ChannelzMetric() *channelz.SocketInternalMetric {
|
||||||
|
@ -724,9 +723,8 @@ func (l *listenSocket) ChannelzMetric() *channelz.SocketInternalMetric {
|
||||||
|
|
||||||
func (l *listenSocket) Close() error {
|
func (l *listenSocket) Close() error {
|
||||||
err := l.Listener.Close()
|
err := l.Listener.Close()
|
||||||
if channelz.IsOn() {
|
channelz.RemoveEntry(l.channelzID)
|
||||||
channelz.RemoveEntry(l.channelzID)
|
channelz.Info(logger, l.channelzID, "ListenSocket deleted")
|
||||||
}
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -759,11 +757,6 @@ func (s *Server) Serve(lis net.Listener) error {
|
||||||
ls := &listenSocket{Listener: lis}
|
ls := &listenSocket{Listener: lis}
|
||||||
s.lis[ls] = true
|
s.lis[ls] = true
|
||||||
|
|
||||||
if channelz.IsOn() {
|
|
||||||
ls.channelzID = channelz.RegisterListenSocket(ls, s.channelzID, lis.Addr().String())
|
|
||||||
}
|
|
||||||
s.mu.Unlock()
|
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
s.mu.Lock()
|
s.mu.Lock()
|
||||||
if s.lis != nil && s.lis[ls] {
|
if s.lis != nil && s.lis[ls] {
|
||||||
|
@ -773,8 +766,16 @@ func (s *Server) Serve(lis net.Listener) error {
|
||||||
s.mu.Unlock()
|
s.mu.Unlock()
|
||||||
}()
|
}()
|
||||||
|
|
||||||
var tempDelay time.Duration // how long to sleep on accept failure
|
var err error
|
||||||
|
ls.channelzID, err = channelz.RegisterListenSocket(ls, s.channelzID, lis.Addr().String())
|
||||||
|
if err != nil {
|
||||||
|
s.mu.Unlock()
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
s.mu.Unlock()
|
||||||
|
channelz.Info(logger, ls.channelzID, "ListenSocket created")
|
||||||
|
|
||||||
|
var tempDelay time.Duration // how long to sleep on accept failure
|
||||||
for {
|
for {
|
||||||
rawConn, err := lis.Accept()
|
rawConn, err := lis.Accept()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -1709,11 +1710,7 @@ func (s *Server) Stop() {
|
||||||
s.done.Fire()
|
s.done.Fire()
|
||||||
}()
|
}()
|
||||||
|
|
||||||
s.channelzRemoveOnce.Do(func() {
|
s.channelzRemoveOnce.Do(func() { channelz.RemoveEntry(s.channelzID) })
|
||||||
if channelz.IsOn() {
|
|
||||||
channelz.RemoveEntry(s.channelzID)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
s.mu.Lock()
|
s.mu.Lock()
|
||||||
listeners := s.lis
|
listeners := s.lis
|
||||||
|
@ -1751,11 +1748,7 @@ func (s *Server) GracefulStop() {
|
||||||
s.quit.Fire()
|
s.quit.Fire()
|
||||||
defer s.done.Fire()
|
defer s.done.Fire()
|
||||||
|
|
||||||
s.channelzRemoveOnce.Do(func() {
|
s.channelzRemoveOnce.Do(func() { channelz.RemoveEntry(s.channelzID) })
|
||||||
if channelz.IsOn() {
|
|
||||||
channelz.RemoveEntry(s.channelzID)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
s.mu.Lock()
|
s.mu.Lock()
|
||||||
if s.conns == nil {
|
if s.conns == nil {
|
||||||
s.mu.Unlock()
|
s.mu.Unlock()
|
||||||
|
|
3
vendor/google.golang.org/grpc/service_config.go
generated
vendored
3
vendor/google.golang.org/grpc/service_config.go
generated
vendored
|
@ -381,6 +381,9 @@ func init() {
|
||||||
//
|
//
|
||||||
// If any of them is NOT *ServiceConfig, return false.
|
// If any of them is NOT *ServiceConfig, return false.
|
||||||
func equalServiceConfig(a, b serviceconfig.Config) bool {
|
func equalServiceConfig(a, b serviceconfig.Config) bool {
|
||||||
|
if a == nil && b == nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
aa, ok := a.(*ServiceConfig)
|
aa, ok := a.(*ServiceConfig)
|
||||||
if !ok {
|
if !ok {
|
||||||
return false
|
return false
|
||||||
|
|
24
vendor/google.golang.org/grpc/stream.go
generated
vendored
24
vendor/google.golang.org/grpc/stream.go
generated
vendored
|
@ -36,6 +36,7 @@ import (
|
||||||
"google.golang.org/grpc/internal/channelz"
|
"google.golang.org/grpc/internal/channelz"
|
||||||
"google.golang.org/grpc/internal/grpcrand"
|
"google.golang.org/grpc/internal/grpcrand"
|
||||||
"google.golang.org/grpc/internal/grpcutil"
|
"google.golang.org/grpc/internal/grpcutil"
|
||||||
|
imetadata "google.golang.org/grpc/internal/metadata"
|
||||||
iresolver "google.golang.org/grpc/internal/resolver"
|
iresolver "google.golang.org/grpc/internal/resolver"
|
||||||
"google.golang.org/grpc/internal/serviceconfig"
|
"google.golang.org/grpc/internal/serviceconfig"
|
||||||
"google.golang.org/grpc/internal/transport"
|
"google.golang.org/grpc/internal/transport"
|
||||||
|
@ -166,6 +167,11 @@ func NewClientStream(ctx context.Context, desc *StreamDesc, cc *ClientConn, meth
|
||||||
}
|
}
|
||||||
|
|
||||||
func newClientStream(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, opts ...CallOption) (_ ClientStream, err error) {
|
func newClientStream(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, opts ...CallOption) (_ ClientStream, err error) {
|
||||||
|
if md, _, ok := metadata.FromOutgoingContextRaw(ctx); ok {
|
||||||
|
if err := imetadata.Validate(md); err != nil {
|
||||||
|
return nil, status.Error(codes.Internal, err.Error())
|
||||||
|
}
|
||||||
|
}
|
||||||
if channelz.IsOn() {
|
if channelz.IsOn() {
|
||||||
cc.incrCallsStarted()
|
cc.incrCallsStarted()
|
||||||
defer func() {
|
defer func() {
|
||||||
|
@ -456,7 +462,7 @@ type clientStream struct {
|
||||||
|
|
||||||
retryThrottler *retryThrottler // The throttler active when the RPC began.
|
retryThrottler *retryThrottler // The throttler active when the RPC began.
|
||||||
|
|
||||||
binlog *binarylog.MethodLogger // Binary logger, can be nil.
|
binlog binarylog.MethodLogger // Binary logger, can be nil.
|
||||||
// serverHeaderBinlogged is a boolean for whether server header has been
|
// serverHeaderBinlogged is a boolean for whether server header has been
|
||||||
// logged. Server header will be logged when the first time one of those
|
// logged. Server header will be logged when the first time one of those
|
||||||
// happens: stream.Header(), stream.Recv().
|
// happens: stream.Header(), stream.Recv().
|
||||||
|
@ -1428,7 +1434,7 @@ type serverStream struct {
|
||||||
|
|
||||||
statsHandler stats.Handler
|
statsHandler stats.Handler
|
||||||
|
|
||||||
binlog *binarylog.MethodLogger
|
binlog binarylog.MethodLogger
|
||||||
// serverHeaderBinlogged indicates whether server header has been logged. It
|
// serverHeaderBinlogged indicates whether server header has been logged. It
|
||||||
// will happen when one of the following two happens: stream.SendHeader(),
|
// will happen when one of the following two happens: stream.SendHeader(),
|
||||||
// stream.Send().
|
// stream.Send().
|
||||||
|
@ -1448,11 +1454,20 @@ func (ss *serverStream) SetHeader(md metadata.MD) error {
|
||||||
if md.Len() == 0 {
|
if md.Len() == 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
err := imetadata.Validate(md)
|
||||||
|
if err != nil {
|
||||||
|
return status.Error(codes.Internal, err.Error())
|
||||||
|
}
|
||||||
return ss.s.SetHeader(md)
|
return ss.s.SetHeader(md)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ss *serverStream) SendHeader(md metadata.MD) error {
|
func (ss *serverStream) SendHeader(md metadata.MD) error {
|
||||||
err := ss.t.WriteHeader(ss.s, md)
|
err := imetadata.Validate(md)
|
||||||
|
if err != nil {
|
||||||
|
return status.Error(codes.Internal, err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
err = ss.t.WriteHeader(ss.s, md)
|
||||||
if ss.binlog != nil && !ss.serverHeaderBinlogged {
|
if ss.binlog != nil && !ss.serverHeaderBinlogged {
|
||||||
h, _ := ss.s.Header()
|
h, _ := ss.s.Header()
|
||||||
ss.binlog.Log(&binarylog.ServerHeader{
|
ss.binlog.Log(&binarylog.ServerHeader{
|
||||||
|
@ -1467,6 +1482,9 @@ func (ss *serverStream) SetTrailer(md metadata.MD) {
|
||||||
if md.Len() == 0 {
|
if md.Len() == 0 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if err := imetadata.Validate(md); err != nil {
|
||||||
|
logger.Errorf("stream: failed to validate md when setting trailer, err: %v", err)
|
||||||
|
}
|
||||||
ss.s.SetTrailer(md)
|
ss.s.SetTrailer(md)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
2
vendor/google.golang.org/grpc/version.go
generated
vendored
2
vendor/google.golang.org/grpc/version.go
generated
vendored
|
@ -19,4 +19,4 @@
|
||||||
package grpc
|
package grpc
|
||||||
|
|
||||||
// Version is the current grpc version.
|
// Version is the current grpc version.
|
||||||
const Version = "1.45.0"
|
const Version = "1.46.0"
|
||||||
|
|
22
vendor/modules.txt
vendored
22
vendor/modules.txt
vendored
|
@ -5,7 +5,7 @@ cloud.google.com/go/internal
|
||||||
cloud.google.com/go/internal/optional
|
cloud.google.com/go/internal/optional
|
||||||
cloud.google.com/go/internal/trace
|
cloud.google.com/go/internal/trace
|
||||||
cloud.google.com/go/internal/version
|
cloud.google.com/go/internal/version
|
||||||
# cloud.google.com/go/compute v1.6.0
|
# cloud.google.com/go/compute v1.6.1
|
||||||
## explicit; go 1.15
|
## explicit; go 1.15
|
||||||
cloud.google.com/go/compute/metadata
|
cloud.google.com/go/compute/metadata
|
||||||
# cloud.google.com/go/iam v0.3.0
|
# cloud.google.com/go/iam v0.3.0
|
||||||
|
@ -34,7 +34,7 @@ github.com/VictoriaMetrics/metricsql/binaryop
|
||||||
# github.com/VividCortex/ewma v1.2.0
|
# github.com/VividCortex/ewma v1.2.0
|
||||||
## explicit; go 1.12
|
## explicit; go 1.12
|
||||||
github.com/VividCortex/ewma
|
github.com/VividCortex/ewma
|
||||||
# github.com/aws/aws-sdk-go v1.43.43
|
# github.com/aws/aws-sdk-go v1.44.0
|
||||||
## explicit; go 1.11
|
## explicit; go 1.11
|
||||||
github.com/aws/aws-sdk-go/aws
|
github.com/aws/aws-sdk-go/aws
|
||||||
github.com/aws/aws-sdk-go/aws/arn
|
github.com/aws/aws-sdk-go/aws/arn
|
||||||
|
@ -97,7 +97,7 @@ github.com/cespare/xxhash/v2
|
||||||
## explicit; go 1.12
|
## explicit; go 1.12
|
||||||
github.com/cheggaaa/pb/v3
|
github.com/cheggaaa/pb/v3
|
||||||
github.com/cheggaaa/pb/v3/termutil
|
github.com/cheggaaa/pb/v3/termutil
|
||||||
# github.com/cpuguy83/go-md2man/v2 v2.0.1
|
# github.com/cpuguy83/go-md2man/v2 v2.0.2
|
||||||
## explicit; go 1.11
|
## explicit; go 1.11
|
||||||
github.com/cpuguy83/go-md2man/v2/md2man
|
github.com/cpuguy83/go-md2man/v2/md2man
|
||||||
# github.com/fatih/color v1.13.0
|
# github.com/fatih/color v1.13.0
|
||||||
|
@ -119,6 +119,7 @@ github.com/go-logfmt/logfmt
|
||||||
github.com/golang/groupcache/lru
|
github.com/golang/groupcache/lru
|
||||||
# github.com/golang/protobuf v1.5.2
|
# github.com/golang/protobuf v1.5.2
|
||||||
## explicit; go 1.9
|
## explicit; go 1.9
|
||||||
|
github.com/golang/protobuf/jsonpb
|
||||||
github.com/golang/protobuf/proto
|
github.com/golang/protobuf/proto
|
||||||
github.com/golang/protobuf/ptypes
|
github.com/golang/protobuf/ptypes
|
||||||
github.com/golang/protobuf/ptypes/any
|
github.com/golang/protobuf/ptypes/any
|
||||||
|
@ -219,8 +220,8 @@ github.com/rivo/uniseg
|
||||||
# github.com/russross/blackfriday/v2 v2.1.0
|
# github.com/russross/blackfriday/v2 v2.1.0
|
||||||
## explicit
|
## explicit
|
||||||
github.com/russross/blackfriday/v2
|
github.com/russross/blackfriday/v2
|
||||||
# github.com/urfave/cli/v2 v2.4.0
|
# github.com/urfave/cli/v2 v2.5.0
|
||||||
## explicit; go 1.11
|
## explicit; go 1.18
|
||||||
github.com/urfave/cli/v2
|
github.com/urfave/cli/v2
|
||||||
# github.com/valyala/bytebufferpool v1.0.0
|
# github.com/valyala/bytebufferpool v1.0.0
|
||||||
## explicit
|
## explicit
|
||||||
|
@ -268,7 +269,7 @@ go.opencensus.io/trace/tracestate
|
||||||
go.uber.org/atomic
|
go.uber.org/atomic
|
||||||
# go.uber.org/goleak v1.1.11-0.20210813005559-691160354723
|
# go.uber.org/goleak v1.1.11-0.20210813005559-691160354723
|
||||||
## explicit; go 1.13
|
## explicit; go 1.13
|
||||||
# golang.org/x/net v0.0.0-20220420153159-1850ba15e1be
|
# golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4
|
||||||
## explicit; go 1.17
|
## explicit; go 1.17
|
||||||
golang.org/x/net/context
|
golang.org/x/net/context
|
||||||
golang.org/x/net/context/ctxhttp
|
golang.org/x/net/context/ctxhttp
|
||||||
|
@ -293,7 +294,7 @@ golang.org/x/oauth2/jwt
|
||||||
# golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
|
# golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
|
||||||
## explicit
|
## explicit
|
||||||
golang.org/x/sync/errgroup
|
golang.org/x/sync/errgroup
|
||||||
# golang.org/x/sys v0.0.0-20220412211240-33da011f77ad
|
# golang.org/x/sys v0.0.0-20220422013727-9388b58f7150
|
||||||
## explicit; go 1.17
|
## explicit; go 1.17
|
||||||
golang.org/x/sys/internal/unsafeheader
|
golang.org/x/sys/internal/unsafeheader
|
||||||
golang.org/x/sys/unix
|
golang.org/x/sys/unix
|
||||||
|
@ -341,7 +342,7 @@ google.golang.org/appengine/internal/socket
|
||||||
google.golang.org/appengine/internal/urlfetch
|
google.golang.org/appengine/internal/urlfetch
|
||||||
google.golang.org/appengine/socket
|
google.golang.org/appengine/socket
|
||||||
google.golang.org/appengine/urlfetch
|
google.golang.org/appengine/urlfetch
|
||||||
# google.golang.org/genproto v0.0.0-20220420195807-44278fea765b
|
# google.golang.org/genproto v0.0.0-20220422154200-b37d22cd5731
|
||||||
## explicit; go 1.15
|
## explicit; go 1.15
|
||||||
google.golang.org/genproto/googleapis/api/annotations
|
google.golang.org/genproto/googleapis/api/annotations
|
||||||
google.golang.org/genproto/googleapis/iam/v1
|
google.golang.org/genproto/googleapis/iam/v1
|
||||||
|
@ -356,7 +357,7 @@ google.golang.org/genproto/googleapis/type/decimal
|
||||||
google.golang.org/genproto/googleapis/type/expr
|
google.golang.org/genproto/googleapis/type/expr
|
||||||
google.golang.org/genproto/googleapis/type/fraction
|
google.golang.org/genproto/googleapis/type/fraction
|
||||||
google.golang.org/genproto/googleapis/type/month
|
google.golang.org/genproto/googleapis/type/month
|
||||||
# google.golang.org/grpc v1.45.0
|
# google.golang.org/grpc v1.46.0
|
||||||
## explicit; go 1.14
|
## explicit; go 1.14
|
||||||
google.golang.org/grpc
|
google.golang.org/grpc
|
||||||
google.golang.org/grpc/attributes
|
google.golang.org/grpc/attributes
|
||||||
|
@ -368,6 +369,7 @@ google.golang.org/grpc/balancer/grpclb/grpc_lb_v1
|
||||||
google.golang.org/grpc/balancer/grpclb/state
|
google.golang.org/grpc/balancer/grpclb/state
|
||||||
google.golang.org/grpc/balancer/roundrobin
|
google.golang.org/grpc/balancer/roundrobin
|
||||||
google.golang.org/grpc/binarylog/grpc_binarylog_v1
|
google.golang.org/grpc/binarylog/grpc_binarylog_v1
|
||||||
|
google.golang.org/grpc/channelz
|
||||||
google.golang.org/grpc/codes
|
google.golang.org/grpc/codes
|
||||||
google.golang.org/grpc/connectivity
|
google.golang.org/grpc/connectivity
|
||||||
google.golang.org/grpc/credentials
|
google.golang.org/grpc/credentials
|
||||||
|
@ -386,6 +388,7 @@ google.golang.org/grpc/encoding/proto
|
||||||
google.golang.org/grpc/grpclog
|
google.golang.org/grpc/grpclog
|
||||||
google.golang.org/grpc/internal
|
google.golang.org/grpc/internal
|
||||||
google.golang.org/grpc/internal/backoff
|
google.golang.org/grpc/internal/backoff
|
||||||
|
google.golang.org/grpc/internal/balancer/gracefulswitch
|
||||||
google.golang.org/grpc/internal/balancerload
|
google.golang.org/grpc/internal/balancerload
|
||||||
google.golang.org/grpc/internal/binarylog
|
google.golang.org/grpc/internal/binarylog
|
||||||
google.golang.org/grpc/internal/buffer
|
google.golang.org/grpc/internal/buffer
|
||||||
|
@ -398,6 +401,7 @@ google.golang.org/grpc/internal/grpcrand
|
||||||
google.golang.org/grpc/internal/grpcsync
|
google.golang.org/grpc/internal/grpcsync
|
||||||
google.golang.org/grpc/internal/grpcutil
|
google.golang.org/grpc/internal/grpcutil
|
||||||
google.golang.org/grpc/internal/metadata
|
google.golang.org/grpc/internal/metadata
|
||||||
|
google.golang.org/grpc/internal/pretty
|
||||||
google.golang.org/grpc/internal/resolver
|
google.golang.org/grpc/internal/resolver
|
||||||
google.golang.org/grpc/internal/resolver/dns
|
google.golang.org/grpc/internal/resolver/dns
|
||||||
google.golang.org/grpc/internal/resolver/passthrough
|
google.golang.org/grpc/internal/resolver/passthrough
|
||||||
|
|
Loading…
Reference in a new issue