mirror of https://github.com/knative/caching.git
upgrade to latest dependencies (#519)
bumping knative.dev/pkg a94f5f0...4472e04: > 4472e04 Bump golangci-lint timeout to 10m for github actions (# 2241) > fac4920 Update assorted dependencies (# 2240) > 263ce40 Add chains to the downstream test (# 2237) > ddd97e9 Remove obsolete verbose log message for pre-release (# 2235) > a7f5b39 Addressable resolver now accepts custom resolvers (# 2195) > 2b66fdd Update community files (# 2239) > 51f5642 Update actions (# 2238) > 46a3611 Add Tekton downstream test (# 2233) > a70bb26 Add length limit for the generated names used in tests (# 2217) > a4ed097 Update version check comment (# 2234) bumping go.uber.org/zap 120b08c...c8e813e: > c8e813e Release v1.19.0 (# 987) > 2198a43 Optimize size of BufferedWriteSyncer by moving stopped bool field (# 984) > 81879d1 Simplify check for writing errors to ErrorOutput (# 983) > 1cac10b go mod tidy (# 977) > 42e70dd fix typo (# 976) > 007a55e Discard counters for out-of-bounds levels (# 975) Signed-off-by: Knative Automation <automation@knative.team>
This commit is contained in:
parent
caf7ff5f6b
commit
f4b23a3262
4
go.mod
4
go.mod
|
@ -12,12 +12,12 @@ require (
|
|||
github.com/sergi/go-diff v1.1.0 // indirect
|
||||
github.com/tsenart/go-tsz v0.0.0-20180814235614-0bd30b3df1c3 // indirect
|
||||
github.com/tsenart/vegeta v12.7.1-0.20190725001342-b5f4fca92137+incompatible
|
||||
go.uber.org/zap v1.18.1
|
||||
go.uber.org/zap v1.19.0
|
||||
k8s.io/api v0.20.7
|
||||
k8s.io/apimachinery v0.20.7
|
||||
k8s.io/client-go v0.20.7
|
||||
k8s.io/code-generator v0.20.7
|
||||
k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd
|
||||
knative.dev/hack v0.0.0-20210806075220-815cd312d65c
|
||||
knative.dev/pkg v0.0.0-20210824120823-a94f5f07b3c3
|
||||
knative.dev/pkg v0.0.0-20210827112638-4472e04552d3
|
||||
)
|
||||
|
|
35
go.sum
35
go.sum
|
@ -34,8 +34,8 @@ cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RX
|
|||
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
|
||||
contrib.go.opencensus.io/exporter/ocagent v0.7.1-0.20200907061046-05415f1de66d h1:LblfooH1lKOpp1hIhukktmSAxFkqMPFk9KR6iZ0MJNI=
|
||||
contrib.go.opencensus.io/exporter/ocagent v0.7.1-0.20200907061046-05415f1de66d/go.mod h1:IshRmMJBhDfFj5Y67nVhMYTTIze91RUeT73ipWKs/GY=
|
||||
contrib.go.opencensus.io/exporter/prometheus v0.3.1-0.20210621165811-f3a7283b3002 h1:1hfixyyOl6TQHQISpF6fLCOqM1xPIpAGUmHqTim8o5Y=
|
||||
contrib.go.opencensus.io/exporter/prometheus v0.3.1-0.20210621165811-f3a7283b3002/go.mod h1:o7cosnyfuPVK0tB8q0QmaQNhGnptITnPQB+z1+qeFB0=
|
||||
contrib.go.opencensus.io/exporter/prometheus v0.4.0 h1:0QfIkj9z/iVZgK31D9H9ohjjIDApI2GOPScCKwxedbs=
|
||||
contrib.go.opencensus.io/exporter/prometheus v0.4.0/go.mod h1:o7cosnyfuPVK0tB8q0QmaQNhGnptITnPQB+z1+qeFB0=
|
||||
contrib.go.opencensus.io/exporter/zipkin v0.1.2/go.mod h1:mP5xM3rrgOjpn79MM8fZbj3gsxcuytSqtH0dxSWW1RE=
|
||||
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
|
||||
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
|
||||
|
@ -543,8 +543,8 @@ go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/
|
|||
go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4=
|
||||
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
|
||||
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
|
||||
go.uber.org/zap v1.18.1 h1:CSUJ2mjFszzEWt4CdKISEuChVIXGBn3lAPwkRGyVrc4=
|
||||
go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI=
|
||||
go.uber.org/zap v1.19.0 h1:mZQZefskPPCMIBCSEH0v2/iUqqLrYtaeqwD6FUGUnFE=
|
||||
go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI=
|
||||
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||
golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
|
@ -555,8 +555,8 @@ golang.org/x/crypto v0.0.0-20190829043050-9756ffdc2472/go.mod h1:yigFU9vqHzYiE8U
|
|||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a h1:kr2P4QFmQr29mSLA43kwrOcgcReGTfbE9N577tCTuBc=
|
||||
golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8=
|
||||
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 h1:HWj/xjIHfjYU5nVXpTM0s39J9CbLn7Cc5a7IC5rwsMQ=
|
||||
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
|
@ -637,8 +637,8 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v
|
|||
golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc=
|
||||
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
|
||||
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985 h1:4CSI6oo7cOjJKajidEljs9h+uP0rRZBPPPhcCbj5mw8=
|
||||
golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20210825183410-e898025ed96a h1:bRuuGXV8wwSdGTB+CtJf+FjgO1APK1CoO39T4BN/XBw=
|
||||
golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
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-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
|
@ -647,8 +647,8 @@ golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4Iltr
|
|||
golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||
golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||
golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||
golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 h1:3B43BWw0xEBsLZ/NO1VALz6fppU3481pik+2Ksv45z8=
|
||||
golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||
golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f h1:Qmd2pbz05z7z6lm0DrgQVVPuBm92jqujBKMHMOlOQEw=
|
||||
golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
|
@ -714,8 +714,9 @@ golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40 h1:JWgyZ1qgdTaF3N3oxC+MdTV7qvEEgHo3otj+HB5CM7Q=
|
||||
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1 h1:SrN+KX8Art/Sf4HNj6Zcz06G7VEz+7w9tdXTPOZ7+l4=
|
||||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
|
@ -732,8 +733,8 @@ golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxb
|
|||
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba h1:O8mE0/t419eoIwhTFpKVkHiTs/Igowgfkj25AcZrtiE=
|
||||
golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac h1:7zkz7BUtwNFFqcowJ+RIgu2MaV/MapERkDIy+mwPyjs=
|
||||
golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
|
@ -886,8 +887,8 @@ google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTp
|
|||
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
|
||||
google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
|
||||
google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
|
||||
google.golang.org/grpc v1.39.0 h1:Klz8I9kdtkIN6EpHHUOMLCYhTn/2WAe5a0s1hcBkdTI=
|
||||
google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE=
|
||||
google.golang.org/grpc v1.40.0 h1:AGJ0Ih4mHjSeibYkFGh1dD9KJ/eOtZ93I6hoHhukQ5Q=
|
||||
google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
|
||||
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-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
||||
|
@ -969,8 +970,8 @@ k8s.io/utils v0.0.0-20201110183641-67b214c5f920 h1:CbnUZsM497iRC5QMVkHwyl8s2tB3g
|
|||
k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||
knative.dev/hack v0.0.0-20210806075220-815cd312d65c h1:nOXoDWAAItwr4o0dp3nHr6skgpVD4IvME/UX84YNl5k=
|
||||
knative.dev/hack v0.0.0-20210806075220-815cd312d65c/go.mod h1:PHt8x8yX5Z9pPquBEfIj0X66f8iWkWfR0S/sarACJrI=
|
||||
knative.dev/pkg v0.0.0-20210824120823-a94f5f07b3c3 h1:38SNaSkVBI1Fkc4Lk2AMEjPW03h3cAwTS3+dKK9RV+M=
|
||||
knative.dev/pkg v0.0.0-20210824120823-a94f5f07b3c3/go.mod h1:67yUYAgAWesv4ehCShUuIxkaxrsROSLQr3kApW4xPO4=
|
||||
knative.dev/pkg v0.0.0-20210827112638-4472e04552d3 h1:vaohz/ToGEjDW+mlGdQ8VxRTJr1iWs/MR06HnWiBS9g=
|
||||
knative.dev/pkg v0.0.0-20210827112638-4472e04552d3/go.mod h1:/6s9lJ8kRGrAEpjnRJQgg1mYqsrLGsy95RojAgx/dNE=
|
||||
pgregory.net/rapid v0.3.3/go.mod h1:UYpPVyjFHzYBGHIxLFoupi8vwk6rXNzRY9OMvVxFIOU=
|
||||
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
|
||||
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
|
||||
|
|
|
@ -1,5 +1,17 @@
|
|||
# Changelog
|
||||
|
||||
## 1.19.0 (9 Aug 2021)
|
||||
|
||||
Enhancements:
|
||||
* [#975][]: Avoid panicking in Sampler core if the level is out of bounds.
|
||||
* [#984][]: Reduce the size of BufferedWriteSyncer by aligning the fields
|
||||
better.
|
||||
|
||||
[#975]: https://github.com/uber-go/zap/pull/975
|
||||
[#984]: https://github.com/uber-go/zap/pull/984
|
||||
|
||||
Thanks to @lancoLiu and @thockin for their contributions to this release.
|
||||
|
||||
## 1.18.1 (28 Jun 2021)
|
||||
|
||||
Bugfixes:
|
||||
|
|
|
@ -5,7 +5,6 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
|
|||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
|
||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||
github.com/kr/pty v1.1.1 h1:VkoXIwSboBpnk99O/KFauAEILuNHv5DVFKZMBN/gUgw=
|
||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||
|
@ -13,7 +12,6 @@ github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
|
|||
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||
|
@ -25,23 +23,17 @@ go.uber.org/goleak v1.1.10 h1:z+mqJhf6ss6BSfSM671tgKyZBFPTTJM+HLxnhPC3wu0=
|
|||
go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=
|
||||
go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4=
|
||||
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs=
|
||||
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI=
|
||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU=
|
||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||
golang.org/x/tools v0.0.0-20191108193012-7d206e10da11 h1:Yq9t9jnGoR+dBuitxdo9l6Q7xh/zOyNnYUtDKaQ3x0E=
|
||||
golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
|
||||
|
|
|
@ -71,10 +71,10 @@ type BufferedWriteSyncer struct {
|
|||
// unexported fields for state
|
||||
mu sync.Mutex
|
||||
initialized bool // whether initialize() has run
|
||||
stopped bool // whether Stop() has run
|
||||
writer *bufio.Writer
|
||||
ticker *time.Ticker
|
||||
stop chan struct{} // closed when flushLoop should stop
|
||||
stopped bool // whether Stop() has run
|
||||
done chan struct{} // closed when flushLoop has stopped
|
||||
}
|
||||
|
||||
|
|
|
@ -219,11 +219,9 @@ func (ce *CheckedEntry) Write(fields ...Field) {
|
|||
for i := range ce.cores {
|
||||
err = multierr.Append(err, ce.cores[i].Write(ce.Entry, fields))
|
||||
}
|
||||
if ce.ErrorOutput != nil {
|
||||
if err != nil {
|
||||
fmt.Fprintf(ce.ErrorOutput, "%v write error: %v\n", ce.Time, err)
|
||||
ce.ErrorOutput.Sync()
|
||||
}
|
||||
if err != nil && ce.ErrorOutput != nil {
|
||||
fmt.Fprintf(ce.ErrorOutput, "%v write error: %v\n", ce.Time, err)
|
||||
ce.ErrorOutput.Sync()
|
||||
}
|
||||
|
||||
should, msg := ce.should, ce.Message
|
||||
|
|
|
@ -83,7 +83,7 @@ type errorGroup interface {
|
|||
Errors() []error
|
||||
}
|
||||
|
||||
// Note that errArry and errArrayElem are very similar to the version
|
||||
// Note that errArray and errArrayElem are very similar to the version
|
||||
// implemented in the top-level error.go file. We can't re-use this because
|
||||
// that would require exporting errArray as part of the zapcore API.
|
||||
|
||||
|
|
|
@ -197,12 +197,14 @@ func (s *sampler) Check(ent Entry, ce *CheckedEntry) *CheckedEntry {
|
|||
return ce
|
||||
}
|
||||
|
||||
counter := s.counts.get(ent.Level, ent.Message)
|
||||
n := counter.IncCheckReset(ent.Time, s.tick)
|
||||
if n > s.first && (n-s.first)%s.thereafter != 0 {
|
||||
s.hook(ent, LogDropped)
|
||||
return ce
|
||||
if ent.Level >= _minLevel && ent.Level <= _maxLevel {
|
||||
counter := s.counts.get(ent.Level, ent.Message)
|
||||
n := counter.IncCheckReset(ent.Time, s.tick)
|
||||
if n > s.first && (n-s.first)%s.thereafter != 0 {
|
||||
s.hook(ent, LogDropped)
|
||||
return ce
|
||||
}
|
||||
s.hook(ent, LogSampled)
|
||||
}
|
||||
s.hook(ent, LogSampled)
|
||||
return s.Core.Check(ent, ce)
|
||||
}
|
||||
|
|
|
@ -1,20 +0,0 @@
|
|||
This is a work-in-progress HTTP/2 implementation for Go.
|
||||
|
||||
It will eventually live in the Go standard library and won't require
|
||||
any changes to your code to use. It will just be automatic.
|
||||
|
||||
Status:
|
||||
|
||||
* The server support is pretty good. A few things are missing
|
||||
but are being worked on.
|
||||
* The client work has just started but shares a lot of code
|
||||
is coming along much quicker.
|
||||
|
||||
Docs are at https://godoc.org/golang.org/x/net/http2
|
||||
|
||||
Demo test server at https://http2.golang.org/
|
||||
|
||||
Help & bug reports welcome!
|
||||
|
||||
Contributing: https://golang.org/doc/contribute.html
|
||||
Bugs: https://golang.org/issue/new?title=x/net/http2:+
|
|
@ -856,6 +856,15 @@ func (sc *serverConn) serve() {
|
|||
case res := <-sc.wroteFrameCh:
|
||||
sc.wroteFrame(res)
|
||||
case res := <-sc.readFrameCh:
|
||||
// Process any written frames before reading new frames from the client since a
|
||||
// written frame could have triggered a new stream to be started.
|
||||
if sc.writingFrameAsync {
|
||||
select {
|
||||
case wroteRes := <-sc.wroteFrameCh:
|
||||
sc.wroteFrame(wroteRes)
|
||||
default:
|
||||
}
|
||||
}
|
||||
if !sc.processFrameFromReader(res) {
|
||||
return
|
||||
}
|
||||
|
|
|
@ -385,8 +385,13 @@ func (cs *clientStream) abortRequestBodyWrite(err error) {
|
|||
}
|
||||
cc := cs.cc
|
||||
cc.mu.Lock()
|
||||
cs.stopReqBody = err
|
||||
cc.cond.Broadcast()
|
||||
if cs.stopReqBody == nil {
|
||||
cs.stopReqBody = err
|
||||
if cs.req.Body != nil {
|
||||
cs.req.Body.Close()
|
||||
}
|
||||
cc.cond.Broadcast()
|
||||
}
|
||||
cc.mu.Unlock()
|
||||
}
|
||||
|
||||
|
@ -1110,40 +1115,28 @@ func (cc *ClientConn) roundTrip(req *http.Request) (res *http.Response, gotErrAf
|
|||
return res, false, nil
|
||||
}
|
||||
|
||||
handleError := func(err error) (*http.Response, bool, error) {
|
||||
if !hasBody || bodyWritten {
|
||||
cc.writeStreamReset(cs.ID, ErrCodeCancel, nil)
|
||||
} else {
|
||||
bodyWriter.cancel()
|
||||
cs.abortRequestBodyWrite(errStopReqBodyWriteAndCancel)
|
||||
<-bodyWriter.resc
|
||||
}
|
||||
cc.forgetStreamID(cs.ID)
|
||||
return nil, cs.getStartedWrite(), err
|
||||
}
|
||||
|
||||
for {
|
||||
select {
|
||||
case re := <-readLoopResCh:
|
||||
return handleReadLoopResponse(re)
|
||||
case <-respHeaderTimer:
|
||||
if !hasBody || bodyWritten {
|
||||
cc.writeStreamReset(cs.ID, ErrCodeCancel, nil)
|
||||
} else {
|
||||
bodyWriter.cancel()
|
||||
cs.abortRequestBodyWrite(errStopReqBodyWriteAndCancel)
|
||||
<-bodyWriter.resc
|
||||
}
|
||||
cc.forgetStreamID(cs.ID)
|
||||
return nil, cs.getStartedWrite(), errTimeout
|
||||
return handleError(errTimeout)
|
||||
case <-ctx.Done():
|
||||
if !hasBody || bodyWritten {
|
||||
cc.writeStreamReset(cs.ID, ErrCodeCancel, nil)
|
||||
} else {
|
||||
bodyWriter.cancel()
|
||||
cs.abortRequestBodyWrite(errStopReqBodyWriteAndCancel)
|
||||
<-bodyWriter.resc
|
||||
}
|
||||
cc.forgetStreamID(cs.ID)
|
||||
return nil, cs.getStartedWrite(), ctx.Err()
|
||||
return handleError(ctx.Err())
|
||||
case <-req.Cancel:
|
||||
if !hasBody || bodyWritten {
|
||||
cc.writeStreamReset(cs.ID, ErrCodeCancel, nil)
|
||||
} else {
|
||||
bodyWriter.cancel()
|
||||
cs.abortRequestBodyWrite(errStopReqBodyWriteAndCancel)
|
||||
<-bodyWriter.resc
|
||||
}
|
||||
cc.forgetStreamID(cs.ID)
|
||||
return nil, cs.getStartedWrite(), errRequestCanceled
|
||||
return handleError(errRequestCanceled)
|
||||
case <-cs.peerReset:
|
||||
// processResetStream already removed the
|
||||
// stream from the streams map; no need for
|
||||
|
@ -1290,7 +1283,13 @@ func (cs *clientStream) writeRequestBody(body io.Reader, bodyCloser io.Closer) (
|
|||
// Request.Body is closed by the Transport,
|
||||
// and in multiple cases: server replies <=299 and >299
|
||||
// while still writing request body
|
||||
cerr := bodyCloser.Close()
|
||||
var cerr error
|
||||
cc.mu.Lock()
|
||||
if cs.stopReqBody == nil {
|
||||
cs.stopReqBody = errStopReqBodyWrite
|
||||
cerr = bodyCloser.Close()
|
||||
}
|
||||
cc.mu.Unlock()
|
||||
if err == nil {
|
||||
err = cerr
|
||||
}
|
||||
|
|
|
@ -239,6 +239,7 @@ struct ltchars {
|
|||
#include <linux/netfilter/nfnetlink.h>
|
||||
#include <linux/netlink.h>
|
||||
#include <linux/net_namespace.h>
|
||||
#include <linux/nfc.h>
|
||||
#include <linux/nsfs.h>
|
||||
#include <linux/perf_event.h>
|
||||
#include <linux/pps.h>
|
||||
|
@ -502,6 +503,9 @@ ccflags="$@"
|
|||
$2 ~ /^LO_(KEY|NAME)_SIZE$/ ||
|
||||
$2 ~ /^LOOP_(CLR|CTL|GET|SET)_/ ||
|
||||
$2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|MCAST|EVFILT|NOTE|SHUT|PROT|MAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR|LOCAL)_/ ||
|
||||
$2 ~ /^NFC_(GENL|PROTO|COMM|RF|SE|DIRECTION|LLCP|SOCKPROTO)_/ ||
|
||||
$2 ~ /^NFC_.*_(MAX)?SIZE$/ ||
|
||||
$2 ~ /^RAW_PAYLOAD_/ ||
|
||||
$2 ~ /^TP_STATUS_/ ||
|
||||
$2 ~ /^FALLOC_/ ||
|
||||
$2 ~ /^ICMPV?6?_(FILTER|SEC)/ ||
|
||||
|
|
|
@ -904,6 +904,46 @@ func (sa *SockaddrIUCV) sockaddr() (unsafe.Pointer, _Socklen, error) {
|
|||
return unsafe.Pointer(&sa.raw), SizeofSockaddrIUCV, nil
|
||||
}
|
||||
|
||||
type SockaddrNFC struct {
|
||||
DeviceIdx uint32
|
||||
TargetIdx uint32
|
||||
NFCProtocol uint32
|
||||
raw RawSockaddrNFC
|
||||
}
|
||||
|
||||
func (sa *SockaddrNFC) sockaddr() (unsafe.Pointer, _Socklen, error) {
|
||||
sa.raw.Sa_family = AF_NFC
|
||||
sa.raw.Dev_idx = sa.DeviceIdx
|
||||
sa.raw.Target_idx = sa.TargetIdx
|
||||
sa.raw.Nfc_protocol = sa.NFCProtocol
|
||||
return unsafe.Pointer(&sa.raw), SizeofSockaddrNFC, nil
|
||||
}
|
||||
|
||||
type SockaddrNFCLLCP struct {
|
||||
DeviceIdx uint32
|
||||
TargetIdx uint32
|
||||
NFCProtocol uint32
|
||||
DestinationSAP uint8
|
||||
SourceSAP uint8
|
||||
ServiceName string
|
||||
raw RawSockaddrNFCLLCP
|
||||
}
|
||||
|
||||
func (sa *SockaddrNFCLLCP) sockaddr() (unsafe.Pointer, _Socklen, error) {
|
||||
sa.raw.Sa_family = AF_NFC
|
||||
sa.raw.Dev_idx = sa.DeviceIdx
|
||||
sa.raw.Target_idx = sa.TargetIdx
|
||||
sa.raw.Nfc_protocol = sa.NFCProtocol
|
||||
sa.raw.Dsap = sa.DestinationSAP
|
||||
sa.raw.Ssap = sa.SourceSAP
|
||||
if len(sa.ServiceName) > len(sa.raw.Service_name) {
|
||||
return nil, 0, EINVAL
|
||||
}
|
||||
copy(sa.raw.Service_name[:], sa.ServiceName)
|
||||
sa.raw.SetServiceNameLen(len(sa.ServiceName))
|
||||
return unsafe.Pointer(&sa.raw), SizeofSockaddrNFCLLCP, nil
|
||||
}
|
||||
|
||||
var socketProtocol = func(fd int) (int, error) {
|
||||
return GetsockoptInt(fd, SOL_SOCKET, SO_PROTOCOL)
|
||||
}
|
||||
|
@ -1144,6 +1184,37 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
|
|||
}
|
||||
return sa, nil
|
||||
}
|
||||
case AF_NFC:
|
||||
proto, err := socketProtocol(fd)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
switch proto {
|
||||
case NFC_SOCKPROTO_RAW:
|
||||
pp := (*RawSockaddrNFC)(unsafe.Pointer(rsa))
|
||||
sa := &SockaddrNFC{
|
||||
DeviceIdx: pp.Dev_idx,
|
||||
TargetIdx: pp.Target_idx,
|
||||
NFCProtocol: pp.Nfc_protocol,
|
||||
}
|
||||
return sa, nil
|
||||
case NFC_SOCKPROTO_LLCP:
|
||||
pp := (*RawSockaddrNFCLLCP)(unsafe.Pointer(rsa))
|
||||
if uint64(pp.Service_name_len) > uint64(len(pp.Service_name)) {
|
||||
return nil, EINVAL
|
||||
}
|
||||
sa := &SockaddrNFCLLCP{
|
||||
DeviceIdx: pp.Dev_idx,
|
||||
TargetIdx: pp.Target_idx,
|
||||
NFCProtocol: pp.Nfc_protocol,
|
||||
DestinationSAP: pp.Dsap,
|
||||
SourceSAP: pp.Ssap,
|
||||
ServiceName: string(pp.Service_name[:pp.Service_name_len]),
|
||||
}
|
||||
return sa, nil
|
||||
default:
|
||||
return nil, EINVAL
|
||||
}
|
||||
}
|
||||
return nil, EAFNOSUPPORT
|
||||
}
|
||||
|
|
|
@ -378,6 +378,10 @@ func (cmsg *Cmsghdr) SetLen(length int) {
|
|||
cmsg.Len = uint32(length)
|
||||
}
|
||||
|
||||
func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {
|
||||
rsa.Service_name_len = uint32(length)
|
||||
}
|
||||
|
||||
//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error)
|
||||
|
||||
func Poll(fds []PollFd, timeout int) (n int, err error) {
|
||||
|
|
|
@ -172,6 +172,10 @@ func (cmsg *Cmsghdr) SetLen(length int) {
|
|||
cmsg.Len = uint64(length)
|
||||
}
|
||||
|
||||
func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {
|
||||
rsa.Service_name_len = uint64(length)
|
||||
}
|
||||
|
||||
//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error)
|
||||
|
||||
func Poll(fds []PollFd, timeout int) (n int, err error) {
|
||||
|
|
|
@ -256,6 +256,10 @@ func (cmsg *Cmsghdr) SetLen(length int) {
|
|||
cmsg.Len = uint32(length)
|
||||
}
|
||||
|
||||
func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {
|
||||
rsa.Service_name_len = uint32(length)
|
||||
}
|
||||
|
||||
//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error)
|
||||
|
||||
func Poll(fds []PollFd, timeout int) (n int, err error) {
|
||||
|
|
|
@ -207,6 +207,10 @@ func (cmsg *Cmsghdr) SetLen(length int) {
|
|||
cmsg.Len = uint64(length)
|
||||
}
|
||||
|
||||
func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {
|
||||
rsa.Service_name_len = uint64(length)
|
||||
}
|
||||
|
||||
func InotifyInit() (fd int, err error) {
|
||||
return InotifyInit1(0)
|
||||
}
|
||||
|
|
|
@ -217,6 +217,10 @@ func (cmsg *Cmsghdr) SetLen(length int) {
|
|||
cmsg.Len = uint64(length)
|
||||
}
|
||||
|
||||
func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {
|
||||
rsa.Service_name_len = uint64(length)
|
||||
}
|
||||
|
||||
func InotifyInit() (fd int, err error) {
|
||||
return InotifyInit1(0)
|
||||
}
|
||||
|
|
|
@ -229,6 +229,10 @@ func (cmsg *Cmsghdr) SetLen(length int) {
|
|||
cmsg.Len = uint32(length)
|
||||
}
|
||||
|
||||
func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {
|
||||
rsa.Service_name_len = uint32(length)
|
||||
}
|
||||
|
||||
//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error)
|
||||
|
||||
func Poll(fds []PollFd, timeout int) (n int, err error) {
|
||||
|
|
|
@ -215,6 +215,10 @@ func (cmsg *Cmsghdr) SetLen(length int) {
|
|||
cmsg.Len = uint32(length)
|
||||
}
|
||||
|
||||
func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {
|
||||
rsa.Service_name_len = uint32(length)
|
||||
}
|
||||
|
||||
//sysnb pipe(p *[2]_C_int) (err error)
|
||||
|
||||
func Pipe(p []int) (err error) {
|
||||
|
|
|
@ -100,6 +100,10 @@ func (cmsg *Cmsghdr) SetLen(length int) {
|
|||
cmsg.Len = uint64(length)
|
||||
}
|
||||
|
||||
func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {
|
||||
rsa.Service_name_len = uint64(length)
|
||||
}
|
||||
|
||||
//sysnb pipe(p *[2]_C_int) (err error)
|
||||
|
||||
func Pipe(p []int) (err error) {
|
||||
|
|
|
@ -188,6 +188,10 @@ func (cmsg *Cmsghdr) SetLen(length int) {
|
|||
cmsg.Len = uint64(length)
|
||||
}
|
||||
|
||||
func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {
|
||||
rsa.Service_name_len = uint64(length)
|
||||
}
|
||||
|
||||
func InotifyInit() (fd int, err error) {
|
||||
return InotifyInit1(0)
|
||||
}
|
||||
|
|
|
@ -129,6 +129,10 @@ func (cmsg *Cmsghdr) SetLen(length int) {
|
|||
cmsg.Len = uint64(length)
|
||||
}
|
||||
|
||||
func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {
|
||||
rsa.Service_name_len = uint64(length)
|
||||
}
|
||||
|
||||
// Linux on s390x uses the old mmap interface, which requires arguments to be passed in a struct.
|
||||
// mmap2 also requires arguments to be passed in a struct; it is currently not exposed in <asm/unistd.h>.
|
||||
func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {
|
||||
|
|
|
@ -116,6 +116,10 @@ func (cmsg *Cmsghdr) SetLen(length int) {
|
|||
cmsg.Len = uint64(length)
|
||||
}
|
||||
|
||||
func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {
|
||||
rsa.Service_name_len = uint64(length)
|
||||
}
|
||||
|
||||
//sysnb pipe(p *[2]_C_int) (err error)
|
||||
|
||||
func Pipe(p []int) (err error) {
|
||||
|
|
|
@ -1566,6 +1566,59 @@ const (
|
|||
NETLINK_XFRM = 0x6
|
||||
NETNSA_MAX = 0x5
|
||||
NETNSA_NSID_NOT_ASSIGNED = -0x1
|
||||
NFC_ATR_REQ_GB_MAXSIZE = 0x30
|
||||
NFC_ATR_REQ_MAXSIZE = 0x40
|
||||
NFC_ATR_RES_GB_MAXSIZE = 0x2f
|
||||
NFC_ATR_RES_MAXSIZE = 0x40
|
||||
NFC_COMM_ACTIVE = 0x0
|
||||
NFC_COMM_PASSIVE = 0x1
|
||||
NFC_DEVICE_NAME_MAXSIZE = 0x8
|
||||
NFC_DIRECTION_RX = 0x0
|
||||
NFC_DIRECTION_TX = 0x1
|
||||
NFC_FIRMWARE_NAME_MAXSIZE = 0x20
|
||||
NFC_GB_MAXSIZE = 0x30
|
||||
NFC_GENL_MCAST_EVENT_NAME = "events"
|
||||
NFC_GENL_NAME = "nfc"
|
||||
NFC_GENL_VERSION = 0x1
|
||||
NFC_HEADER_SIZE = 0x1
|
||||
NFC_ISO15693_UID_MAXSIZE = 0x8
|
||||
NFC_LLCP_MAX_SERVICE_NAME = 0x3f
|
||||
NFC_LLCP_MIUX = 0x1
|
||||
NFC_LLCP_REMOTE_LTO = 0x3
|
||||
NFC_LLCP_REMOTE_MIU = 0x2
|
||||
NFC_LLCP_REMOTE_RW = 0x4
|
||||
NFC_LLCP_RW = 0x0
|
||||
NFC_NFCID1_MAXSIZE = 0xa
|
||||
NFC_NFCID2_MAXSIZE = 0x8
|
||||
NFC_NFCID3_MAXSIZE = 0xa
|
||||
NFC_PROTO_FELICA = 0x3
|
||||
NFC_PROTO_FELICA_MASK = 0x8
|
||||
NFC_PROTO_ISO14443 = 0x4
|
||||
NFC_PROTO_ISO14443_B = 0x6
|
||||
NFC_PROTO_ISO14443_B_MASK = 0x40
|
||||
NFC_PROTO_ISO14443_MASK = 0x10
|
||||
NFC_PROTO_ISO15693 = 0x7
|
||||
NFC_PROTO_ISO15693_MASK = 0x80
|
||||
NFC_PROTO_JEWEL = 0x1
|
||||
NFC_PROTO_JEWEL_MASK = 0x2
|
||||
NFC_PROTO_MAX = 0x8
|
||||
NFC_PROTO_MIFARE = 0x2
|
||||
NFC_PROTO_MIFARE_MASK = 0x4
|
||||
NFC_PROTO_NFC_DEP = 0x5
|
||||
NFC_PROTO_NFC_DEP_MASK = 0x20
|
||||
NFC_RAW_HEADER_SIZE = 0x2
|
||||
NFC_RF_INITIATOR = 0x0
|
||||
NFC_RF_NONE = 0x2
|
||||
NFC_RF_TARGET = 0x1
|
||||
NFC_SENSB_RES_MAXSIZE = 0xc
|
||||
NFC_SENSF_RES_MAXSIZE = 0x12
|
||||
NFC_SE_DISABLED = 0x0
|
||||
NFC_SE_EMBEDDED = 0x2
|
||||
NFC_SE_ENABLED = 0x1
|
||||
NFC_SE_UICC = 0x1
|
||||
NFC_SOCKPROTO_LLCP = 0x1
|
||||
NFC_SOCKPROTO_MAX = 0x2
|
||||
NFC_SOCKPROTO_RAW = 0x0
|
||||
NFNETLINK_V0 = 0x0
|
||||
NFNLGRP_ACCT_QUOTA = 0x8
|
||||
NFNLGRP_CONNTRACK_DESTROY = 0x3
|
||||
|
@ -1991,6 +2044,11 @@ const (
|
|||
QNX4_SUPER_MAGIC = 0x2f
|
||||
QNX6_SUPER_MAGIC = 0x68191122
|
||||
RAMFS_MAGIC = 0x858458f6
|
||||
RAW_PAYLOAD_DIGITAL = 0x3
|
||||
RAW_PAYLOAD_HCI = 0x2
|
||||
RAW_PAYLOAD_LLCP = 0x0
|
||||
RAW_PAYLOAD_NCI = 0x1
|
||||
RAW_PAYLOAD_PROPRIETARY = 0x4
|
||||
RDTGROUP_SUPER_MAGIC = 0x7655821
|
||||
REISERFS_SUPER_MAGIC = 0x52654973
|
||||
RENAME_EXCHANGE = 0x2
|
||||
|
|
|
@ -431,6 +431,9 @@ type Winsize struct {
|
|||
const (
|
||||
AT_FDCWD = 0xfffafdcd
|
||||
AT_SYMLINK_NOFOLLOW = 0x1
|
||||
AT_REMOVEDIR = 0x2
|
||||
AT_EACCESS = 0x4
|
||||
AT_SYMLINK_FOLLOW = 0x8
|
||||
)
|
||||
|
||||
type PollFd struct {
|
||||
|
|
|
@ -672,9 +672,10 @@ type Winsize struct {
|
|||
|
||||
const (
|
||||
AT_FDCWD = -0x64
|
||||
AT_REMOVEDIR = 0x800
|
||||
AT_SYMLINK_FOLLOW = 0x400
|
||||
AT_EACCESS = 0x100
|
||||
AT_SYMLINK_NOFOLLOW = 0x200
|
||||
AT_SYMLINK_FOLLOW = 0x400
|
||||
AT_REMOVEDIR = 0x800
|
||||
)
|
||||
|
||||
type PollFd struct {
|
||||
|
|
|
@ -675,9 +675,10 @@ type Winsize struct {
|
|||
|
||||
const (
|
||||
AT_FDCWD = -0x64
|
||||
AT_REMOVEDIR = 0x800
|
||||
AT_SYMLINK_FOLLOW = 0x400
|
||||
AT_EACCESS = 0x100
|
||||
AT_SYMLINK_NOFOLLOW = 0x200
|
||||
AT_SYMLINK_FOLLOW = 0x400
|
||||
AT_REMOVEDIR = 0x800
|
||||
)
|
||||
|
||||
type PollFd struct {
|
||||
|
|
|
@ -656,9 +656,10 @@ type Winsize struct {
|
|||
|
||||
const (
|
||||
AT_FDCWD = -0x64
|
||||
AT_REMOVEDIR = 0x800
|
||||
AT_SYMLINK_FOLLOW = 0x400
|
||||
AT_EACCESS = 0x100
|
||||
AT_SYMLINK_NOFOLLOW = 0x200
|
||||
AT_SYMLINK_FOLLOW = 0x400
|
||||
AT_REMOVEDIR = 0x800
|
||||
)
|
||||
|
||||
type PollFd struct {
|
||||
|
|
|
@ -653,9 +653,10 @@ type Winsize struct {
|
|||
|
||||
const (
|
||||
AT_FDCWD = -0x64
|
||||
AT_REMOVEDIR = 0x800
|
||||
AT_SYMLINK_FOLLOW = 0x400
|
||||
AT_EACCESS = 0x100
|
||||
AT_SYMLINK_NOFOLLOW = 0x200
|
||||
AT_SYMLINK_FOLLOW = 0x400
|
||||
AT_REMOVEDIR = 0x800
|
||||
)
|
||||
|
||||
type PollFd struct {
|
||||
|
|
|
@ -351,6 +351,13 @@ type RawSockaddrIUCV struct {
|
|||
Name [8]int8
|
||||
}
|
||||
|
||||
type RawSockaddrNFC struct {
|
||||
Sa_family uint16
|
||||
Dev_idx uint32
|
||||
Target_idx uint32
|
||||
Nfc_protocol uint32
|
||||
}
|
||||
|
||||
type _Socklen uint32
|
||||
|
||||
type Linger struct {
|
||||
|
@ -464,6 +471,7 @@ const (
|
|||
SizeofSockaddrL2TPIP = 0x10
|
||||
SizeofSockaddrL2TPIP6 = 0x20
|
||||
SizeofSockaddrIUCV = 0x20
|
||||
SizeofSockaddrNFC = 0x10
|
||||
SizeofLinger = 0x8
|
||||
SizeofIPMreq = 0x8
|
||||
SizeofIPMreqn = 0xc
|
||||
|
@ -3828,3 +3836,72 @@ const (
|
|||
MTD_FILE_MODE_OTP_USER = 0x2
|
||||
MTD_FILE_MODE_RAW = 0x3
|
||||
)
|
||||
|
||||
const (
|
||||
NFC_CMD_UNSPEC = 0x0
|
||||
NFC_CMD_GET_DEVICE = 0x1
|
||||
NFC_CMD_DEV_UP = 0x2
|
||||
NFC_CMD_DEV_DOWN = 0x3
|
||||
NFC_CMD_DEP_LINK_UP = 0x4
|
||||
NFC_CMD_DEP_LINK_DOWN = 0x5
|
||||
NFC_CMD_START_POLL = 0x6
|
||||
NFC_CMD_STOP_POLL = 0x7
|
||||
NFC_CMD_GET_TARGET = 0x8
|
||||
NFC_EVENT_TARGETS_FOUND = 0x9
|
||||
NFC_EVENT_DEVICE_ADDED = 0xa
|
||||
NFC_EVENT_DEVICE_REMOVED = 0xb
|
||||
NFC_EVENT_TARGET_LOST = 0xc
|
||||
NFC_EVENT_TM_ACTIVATED = 0xd
|
||||
NFC_EVENT_TM_DEACTIVATED = 0xe
|
||||
NFC_CMD_LLC_GET_PARAMS = 0xf
|
||||
NFC_CMD_LLC_SET_PARAMS = 0x10
|
||||
NFC_CMD_ENABLE_SE = 0x11
|
||||
NFC_CMD_DISABLE_SE = 0x12
|
||||
NFC_CMD_LLC_SDREQ = 0x13
|
||||
NFC_EVENT_LLC_SDRES = 0x14
|
||||
NFC_CMD_FW_DOWNLOAD = 0x15
|
||||
NFC_EVENT_SE_ADDED = 0x16
|
||||
NFC_EVENT_SE_REMOVED = 0x17
|
||||
NFC_EVENT_SE_CONNECTIVITY = 0x18
|
||||
NFC_EVENT_SE_TRANSACTION = 0x19
|
||||
NFC_CMD_GET_SE = 0x1a
|
||||
NFC_CMD_SE_IO = 0x1b
|
||||
NFC_CMD_ACTIVATE_TARGET = 0x1c
|
||||
NFC_CMD_VENDOR = 0x1d
|
||||
NFC_CMD_DEACTIVATE_TARGET = 0x1e
|
||||
NFC_ATTR_UNSPEC = 0x0
|
||||
NFC_ATTR_DEVICE_INDEX = 0x1
|
||||
NFC_ATTR_DEVICE_NAME = 0x2
|
||||
NFC_ATTR_PROTOCOLS = 0x3
|
||||
NFC_ATTR_TARGET_INDEX = 0x4
|
||||
NFC_ATTR_TARGET_SENS_RES = 0x5
|
||||
NFC_ATTR_TARGET_SEL_RES = 0x6
|
||||
NFC_ATTR_TARGET_NFCID1 = 0x7
|
||||
NFC_ATTR_TARGET_SENSB_RES = 0x8
|
||||
NFC_ATTR_TARGET_SENSF_RES = 0x9
|
||||
NFC_ATTR_COMM_MODE = 0xa
|
||||
NFC_ATTR_RF_MODE = 0xb
|
||||
NFC_ATTR_DEVICE_POWERED = 0xc
|
||||
NFC_ATTR_IM_PROTOCOLS = 0xd
|
||||
NFC_ATTR_TM_PROTOCOLS = 0xe
|
||||
NFC_ATTR_LLC_PARAM_LTO = 0xf
|
||||
NFC_ATTR_LLC_PARAM_RW = 0x10
|
||||
NFC_ATTR_LLC_PARAM_MIUX = 0x11
|
||||
NFC_ATTR_SE = 0x12
|
||||
NFC_ATTR_LLC_SDP = 0x13
|
||||
NFC_ATTR_FIRMWARE_NAME = 0x14
|
||||
NFC_ATTR_SE_INDEX = 0x15
|
||||
NFC_ATTR_SE_TYPE = 0x16
|
||||
NFC_ATTR_SE_AID = 0x17
|
||||
NFC_ATTR_FIRMWARE_DOWNLOAD_STATUS = 0x18
|
||||
NFC_ATTR_SE_APDU = 0x19
|
||||
NFC_ATTR_TARGET_ISO15693_DSFID = 0x1a
|
||||
NFC_ATTR_TARGET_ISO15693_UID = 0x1b
|
||||
NFC_ATTR_SE_PARAMS = 0x1c
|
||||
NFC_ATTR_VENDOR_ID = 0x1d
|
||||
NFC_ATTR_VENDOR_SUBCMD = 0x1e
|
||||
NFC_ATTR_VENDOR_DATA = 0x1f
|
||||
NFC_SDP_ATTR_UNSPEC = 0x0
|
||||
NFC_SDP_ATTR_URI = 0x1
|
||||
NFC_SDP_ATTR_SAP = 0x2
|
||||
)
|
||||
|
|
|
@ -128,6 +128,17 @@ const (
|
|||
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 uint32
|
||||
}
|
||||
|
||||
type RawSockaddr struct {
|
||||
Family uint16
|
||||
Data [14]int8
|
||||
|
@ -160,9 +171,10 @@ type Cmsghdr struct {
|
|||
}
|
||||
|
||||
const (
|
||||
SizeofIovec = 0x8
|
||||
SizeofMsghdr = 0x1c
|
||||
SizeofCmsghdr = 0xc
|
||||
SizeofSockaddrNFCLLCP = 0x58
|
||||
SizeofIovec = 0x8
|
||||
SizeofMsghdr = 0x1c
|
||||
SizeofCmsghdr = 0xc
|
||||
)
|
||||
|
||||
const (
|
||||
|
|
|
@ -130,6 +130,17 @@ const (
|
|||
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
|
||||
|
@ -163,9 +174,10 @@ type Cmsghdr struct {
|
|||
}
|
||||
|
||||
const (
|
||||
SizeofIovec = 0x10
|
||||
SizeofMsghdr = 0x38
|
||||
SizeofCmsghdr = 0x10
|
||||
SizeofSockaddrNFCLLCP = 0x60
|
||||
SizeofIovec = 0x10
|
||||
SizeofMsghdr = 0x38
|
||||
SizeofCmsghdr = 0x10
|
||||
)
|
||||
|
||||
const (
|
||||
|
|
|
@ -134,6 +134,17 @@ const (
|
|||
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 uint32
|
||||
}
|
||||
|
||||
type RawSockaddr struct {
|
||||
Family uint16
|
||||
Data [14]uint8
|
||||
|
@ -166,9 +177,10 @@ type Cmsghdr struct {
|
|||
}
|
||||
|
||||
const (
|
||||
SizeofIovec = 0x8
|
||||
SizeofMsghdr = 0x1c
|
||||
SizeofCmsghdr = 0xc
|
||||
SizeofSockaddrNFCLLCP = 0x58
|
||||
SizeofIovec = 0x8
|
||||
SizeofMsghdr = 0x1c
|
||||
SizeofCmsghdr = 0xc
|
||||
)
|
||||
|
||||
const (
|
||||
|
|
|
@ -131,6 +131,17 @@ const (
|
|||
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
|
||||
|
@ -164,9 +175,10 @@ type Cmsghdr struct {
|
|||
}
|
||||
|
||||
const (
|
||||
SizeofIovec = 0x10
|
||||
SizeofMsghdr = 0x38
|
||||
SizeofCmsghdr = 0x10
|
||||
SizeofSockaddrNFCLLCP = 0x60
|
||||
SizeofIovec = 0x10
|
||||
SizeofMsghdr = 0x38
|
||||
SizeofCmsghdr = 0x10
|
||||
)
|
||||
|
||||
const (
|
||||
|
|
|
@ -133,6 +133,17 @@ const (
|
|||
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 uint32
|
||||
}
|
||||
|
||||
type RawSockaddr struct {
|
||||
Family uint16
|
||||
Data [14]int8
|
||||
|
@ -165,9 +176,10 @@ type Cmsghdr struct {
|
|||
}
|
||||
|
||||
const (
|
||||
SizeofIovec = 0x8
|
||||
SizeofMsghdr = 0x1c
|
||||
SizeofCmsghdr = 0xc
|
||||
SizeofSockaddrNFCLLCP = 0x58
|
||||
SizeofIovec = 0x8
|
||||
SizeofMsghdr = 0x1c
|
||||
SizeofCmsghdr = 0xc
|
||||
)
|
||||
|
||||
const (
|
||||
|
|
|
@ -131,6 +131,17 @@ const (
|
|||
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
|
||||
|
@ -164,9 +175,10 @@ type Cmsghdr struct {
|
|||
}
|
||||
|
||||
const (
|
||||
SizeofIovec = 0x10
|
||||
SizeofMsghdr = 0x38
|
||||
SizeofCmsghdr = 0x10
|
||||
SizeofSockaddrNFCLLCP = 0x60
|
||||
SizeofIovec = 0x10
|
||||
SizeofMsghdr = 0x38
|
||||
SizeofCmsghdr = 0x10
|
||||
)
|
||||
|
||||
const (
|
||||
|
|
|
@ -131,6 +131,17 @@ const (
|
|||
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
|
||||
|
@ -164,9 +175,10 @@ type Cmsghdr struct {
|
|||
}
|
||||
|
||||
const (
|
||||
SizeofIovec = 0x10
|
||||
SizeofMsghdr = 0x38
|
||||
SizeofCmsghdr = 0x10
|
||||
SizeofSockaddrNFCLLCP = 0x60
|
||||
SizeofIovec = 0x10
|
||||
SizeofMsghdr = 0x38
|
||||
SizeofCmsghdr = 0x10
|
||||
)
|
||||
|
||||
const (
|
||||
|
|
|
@ -133,6 +133,17 @@ const (
|
|||
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 uint32
|
||||
}
|
||||
|
||||
type RawSockaddr struct {
|
||||
Family uint16
|
||||
Data [14]int8
|
||||
|
@ -165,9 +176,10 @@ type Cmsghdr struct {
|
|||
}
|
||||
|
||||
const (
|
||||
SizeofIovec = 0x8
|
||||
SizeofMsghdr = 0x1c
|
||||
SizeofCmsghdr = 0xc
|
||||
SizeofSockaddrNFCLLCP = 0x58
|
||||
SizeofIovec = 0x8
|
||||
SizeofMsghdr = 0x1c
|
||||
SizeofCmsghdr = 0xc
|
||||
)
|
||||
|
||||
const (
|
||||
|
|
|
@ -134,6 +134,17 @@ const (
|
|||
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 uint32
|
||||
}
|
||||
|
||||
type RawSockaddr struct {
|
||||
Family uint16
|
||||
Data [14]uint8
|
||||
|
@ -166,9 +177,10 @@ type Cmsghdr struct {
|
|||
}
|
||||
|
||||
const (
|
||||
SizeofIovec = 0x8
|
||||
SizeofMsghdr = 0x1c
|
||||
SizeofCmsghdr = 0xc
|
||||
SizeofSockaddrNFCLLCP = 0x58
|
||||
SizeofIovec = 0x8
|
||||
SizeofMsghdr = 0x1c
|
||||
SizeofCmsghdr = 0xc
|
||||
)
|
||||
|
||||
const (
|
||||
|
|
|
@ -132,6 +132,17 @@ const (
|
|||
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]uint8
|
||||
|
@ -165,9 +176,10 @@ type Cmsghdr struct {
|
|||
}
|
||||
|
||||
const (
|
||||
SizeofIovec = 0x10
|
||||
SizeofMsghdr = 0x38
|
||||
SizeofCmsghdr = 0x10
|
||||
SizeofSockaddrNFCLLCP = 0x60
|
||||
SizeofIovec = 0x10
|
||||
SizeofMsghdr = 0x38
|
||||
SizeofCmsghdr = 0x10
|
||||
)
|
||||
|
||||
const (
|
||||
|
|
|
@ -132,6 +132,17 @@ const (
|
|||
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]uint8
|
||||
|
@ -165,9 +176,10 @@ type Cmsghdr struct {
|
|||
}
|
||||
|
||||
const (
|
||||
SizeofIovec = 0x10
|
||||
SizeofMsghdr = 0x38
|
||||
SizeofCmsghdr = 0x10
|
||||
SizeofSockaddrNFCLLCP = 0x60
|
||||
SizeofIovec = 0x10
|
||||
SizeofMsghdr = 0x38
|
||||
SizeofCmsghdr = 0x10
|
||||
)
|
||||
|
||||
const (
|
||||
|
|
|
@ -131,6 +131,17 @@ const (
|
|||
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]uint8
|
||||
|
@ -164,9 +175,10 @@ type Cmsghdr struct {
|
|||
}
|
||||
|
||||
const (
|
||||
SizeofIovec = 0x10
|
||||
SizeofMsghdr = 0x38
|
||||
SizeofCmsghdr = 0x10
|
||||
SizeofSockaddrNFCLLCP = 0x60
|
||||
SizeofIovec = 0x10
|
||||
SizeofMsghdr = 0x38
|
||||
SizeofCmsghdr = 0x10
|
||||
)
|
||||
|
||||
const (
|
||||
|
|
|
@ -130,6 +130,17 @@ const (
|
|||
FADV_NOREUSE = 0x7
|
||||
)
|
||||
|
||||
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
|
||||
|
@ -163,9 +174,10 @@ type Cmsghdr struct {
|
|||
}
|
||||
|
||||
const (
|
||||
SizeofIovec = 0x10
|
||||
SizeofMsghdr = 0x38
|
||||
SizeofCmsghdr = 0x10
|
||||
SizeofSockaddrNFCLLCP = 0x60
|
||||
SizeofIovec = 0x10
|
||||
SizeofMsghdr = 0x38
|
||||
SizeofCmsghdr = 0x10
|
||||
)
|
||||
|
||||
const (
|
||||
|
|
|
@ -134,6 +134,17 @@ const (
|
|||
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
|
||||
|
@ -167,9 +178,10 @@ type Cmsghdr struct {
|
|||
}
|
||||
|
||||
const (
|
||||
SizeofIovec = 0x10
|
||||
SizeofMsghdr = 0x38
|
||||
SizeofCmsghdr = 0x10
|
||||
SizeofSockaddrNFCLLCP = 0x60
|
||||
SizeofIovec = 0x10
|
||||
SizeofMsghdr = 0x38
|
||||
SizeofCmsghdr = 0x10
|
||||
)
|
||||
|
||||
const (
|
||||
|
|
|
@ -445,8 +445,10 @@ type Ptmget struct {
|
|||
|
||||
const (
|
||||
AT_FDCWD = -0x64
|
||||
AT_SYMLINK_FOLLOW = 0x400
|
||||
AT_EACCESS = 0x100
|
||||
AT_SYMLINK_NOFOLLOW = 0x200
|
||||
AT_SYMLINK_FOLLOW = 0x400
|
||||
AT_REMOVEDIR = 0x800
|
||||
)
|
||||
|
||||
type PollFd struct {
|
||||
|
|
|
@ -453,8 +453,10 @@ type Ptmget struct {
|
|||
|
||||
const (
|
||||
AT_FDCWD = -0x64
|
||||
AT_SYMLINK_FOLLOW = 0x400
|
||||
AT_EACCESS = 0x100
|
||||
AT_SYMLINK_NOFOLLOW = 0x200
|
||||
AT_SYMLINK_FOLLOW = 0x400
|
||||
AT_REMOVEDIR = 0x800
|
||||
)
|
||||
|
||||
type PollFd struct {
|
||||
|
|
|
@ -450,8 +450,10 @@ type Ptmget struct {
|
|||
|
||||
const (
|
||||
AT_FDCWD = -0x64
|
||||
AT_SYMLINK_FOLLOW = 0x400
|
||||
AT_EACCESS = 0x100
|
||||
AT_SYMLINK_NOFOLLOW = 0x200
|
||||
AT_SYMLINK_FOLLOW = 0x400
|
||||
AT_REMOVEDIR = 0x800
|
||||
)
|
||||
|
||||
type PollFd struct {
|
||||
|
|
|
@ -453,8 +453,10 @@ type Ptmget struct {
|
|||
|
||||
const (
|
||||
AT_FDCWD = -0x64
|
||||
AT_SYMLINK_FOLLOW = 0x400
|
||||
AT_EACCESS = 0x100
|
||||
AT_SYMLINK_NOFOLLOW = 0x200
|
||||
AT_SYMLINK_FOLLOW = 0x400
|
||||
AT_REMOVEDIR = 0x800
|
||||
)
|
||||
|
||||
type PollFd struct {
|
||||
|
|
|
@ -438,8 +438,10 @@ type Winsize struct {
|
|||
|
||||
const (
|
||||
AT_FDCWD = -0x64
|
||||
AT_SYMLINK_FOLLOW = 0x4
|
||||
AT_EACCESS = 0x1
|
||||
AT_SYMLINK_NOFOLLOW = 0x2
|
||||
AT_SYMLINK_FOLLOW = 0x4
|
||||
AT_REMOVEDIR = 0x8
|
||||
)
|
||||
|
||||
type PollFd struct {
|
||||
|
|
|
@ -438,8 +438,10 @@ type Winsize struct {
|
|||
|
||||
const (
|
||||
AT_FDCWD = -0x64
|
||||
AT_SYMLINK_FOLLOW = 0x4
|
||||
AT_EACCESS = 0x1
|
||||
AT_SYMLINK_NOFOLLOW = 0x2
|
||||
AT_SYMLINK_FOLLOW = 0x4
|
||||
AT_REMOVEDIR = 0x8
|
||||
)
|
||||
|
||||
type PollFd struct {
|
||||
|
|
|
@ -439,8 +439,10 @@ type Winsize struct {
|
|||
|
||||
const (
|
||||
AT_FDCWD = -0x64
|
||||
AT_SYMLINK_FOLLOW = 0x4
|
||||
AT_EACCESS = 0x1
|
||||
AT_SYMLINK_NOFOLLOW = 0x2
|
||||
AT_SYMLINK_FOLLOW = 0x4
|
||||
AT_REMOVEDIR = 0x8
|
||||
)
|
||||
|
||||
type PollFd struct {
|
||||
|
|
|
@ -432,8 +432,10 @@ type Winsize struct {
|
|||
|
||||
const (
|
||||
AT_FDCWD = -0x64
|
||||
AT_SYMLINK_FOLLOW = 0x4
|
||||
AT_EACCESS = 0x1
|
||||
AT_SYMLINK_NOFOLLOW = 0x2
|
||||
AT_SYMLINK_FOLLOW = 0x4
|
||||
AT_REMOVEDIR = 0x8
|
||||
)
|
||||
|
||||
type PollFd struct {
|
||||
|
|
|
@ -432,8 +432,10 @@ type Winsize struct {
|
|||
|
||||
const (
|
||||
AT_FDCWD = -0x64
|
||||
AT_SYMLINK_FOLLOW = 0x4
|
||||
AT_EACCESS = 0x1
|
||||
AT_SYMLINK_NOFOLLOW = 0x2
|
||||
AT_SYMLINK_FOLLOW = 0x4
|
||||
AT_REMOVEDIR = 0x8
|
||||
)
|
||||
|
||||
type PollFd struct {
|
||||
|
|
|
@ -145,7 +145,6 @@ func (r *Reservation) DelayFrom(now time.Time) time.Duration {
|
|||
// Cancel is shorthand for CancelAt(time.Now()).
|
||||
func (r *Reservation) Cancel() {
|
||||
r.CancelAt(time.Now())
|
||||
return
|
||||
}
|
||||
|
||||
// CancelAt indicates that the reservation holder will not perform the reserved action
|
||||
|
@ -186,8 +185,6 @@ func (r *Reservation) CancelAt(now time.Time) {
|
|||
r.lim.lastEvent = prevEvent
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// Reserve is shorthand for ReserveN(time.Now(), 1).
|
||||
|
@ -367,20 +364,13 @@ func (lim *Limiter) advance(now time.Time) (newNow time.Time, newLast time.Time,
|
|||
last = now
|
||||
}
|
||||
|
||||
// Avoid making delta overflow below when last is very old.
|
||||
maxElapsed := lim.limit.durationFromTokens(float64(lim.burst) - lim.tokens)
|
||||
elapsed := now.Sub(last)
|
||||
if elapsed > maxElapsed {
|
||||
elapsed = maxElapsed
|
||||
}
|
||||
|
||||
// Calculate the new number of tokens, due to time that passed.
|
||||
elapsed := now.Sub(last)
|
||||
delta := lim.limit.tokensFromDuration(elapsed)
|
||||
tokens := lim.tokens + delta
|
||||
if burst := float64(lim.burst); tokens > burst {
|
||||
tokens = burst
|
||||
}
|
||||
|
||||
return now, last, tokens
|
||||
}
|
||||
|
||||
|
@ -388,15 +378,11 @@ func (lim *Limiter) advance(now time.Time) (newNow time.Time, newLast time.Time,
|
|||
// of time it takes to accumulate them at a rate of limit tokens per second.
|
||||
func (limit Limit) durationFromTokens(tokens float64) time.Duration {
|
||||
seconds := tokens / float64(limit)
|
||||
return time.Nanosecond * time.Duration(1e9*seconds)
|
||||
return time.Duration(float64(time.Second) * seconds)
|
||||
}
|
||||
|
||||
// tokensFromDuration is a unit conversion function from a time duration to the number of tokens
|
||||
// which could be accumulated during that duration at a rate of limit tokens per second.
|
||||
func (limit Limit) tokensFromDuration(d time.Duration) float64 {
|
||||
// Split the integer and fractional parts ourself to minimize rounding errors.
|
||||
// See golang.org/issues/34861.
|
||||
sec := float64(d/time.Second) * float64(limit)
|
||||
nsec := float64(d%time.Second) * float64(limit)
|
||||
return sec + nsec/1e9
|
||||
return d.Seconds() * float64(limit)
|
||||
}
|
||||
|
|
|
@ -1429,26 +1429,14 @@ func (ac *addrConn) resetConnectBackoff() {
|
|||
ac.mu.Unlock()
|
||||
}
|
||||
|
||||
// getReadyTransport returns the transport if ac's state is READY.
|
||||
// Otherwise it returns nil, false.
|
||||
// If ac's state is IDLE, it will trigger ac to connect.
|
||||
func (ac *addrConn) getReadyTransport() (transport.ClientTransport, bool) {
|
||||
// getReadyTransport returns the transport if ac's state is READY or nil if not.
|
||||
func (ac *addrConn) getReadyTransport() transport.ClientTransport {
|
||||
ac.mu.Lock()
|
||||
if ac.state == connectivity.Ready && ac.transport != nil {
|
||||
t := ac.transport
|
||||
ac.mu.Unlock()
|
||||
return t, true
|
||||
defer ac.mu.Unlock()
|
||||
if ac.state == connectivity.Ready {
|
||||
return ac.transport
|
||||
}
|
||||
var idle bool
|
||||
if ac.state == connectivity.Idle {
|
||||
idle = true
|
||||
}
|
||||
ac.mu.Unlock()
|
||||
// Trigger idle ac to connect.
|
||||
if idle {
|
||||
ac.connect()
|
||||
}
|
||||
return nil, false
|
||||
return nil
|
||||
}
|
||||
|
||||
// tearDown starts to tear down the addrConn.
|
||||
|
|
|
@ -3,6 +3,7 @@ module google.golang.org/grpc
|
|||
go 1.11
|
||||
|
||||
require (
|
||||
github.com/cespare/xxhash v1.1.0
|
||||
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403
|
||||
github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0
|
||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b
|
||||
|
|
|
@ -2,9 +2,13 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
|
|||
cloud.google.com/go v0.34.0 h1:eOI3/cP2VTU6uZLDYAoic+eyzzB9YyGmJ7eIjl8rOPg=
|
||||
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||
github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE=
|
||||
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
|
||||
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
|
||||
github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk=
|
||||
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||
github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
|
||||
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
|
||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
||||
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403 h1:cqQfy1jclcSy/FwLjemeg3SR1yaINm74aQyupQ0Bl8M=
|
||||
|
@ -50,6 +54,8 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
|
|||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
|
||||
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72 h1:qLC7fQah7D6K1B0ujays3HV9gkFtllcxhzImRR7ArPQ=
|
||||
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=
|
||||
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
|
||||
|
|
|
@ -69,7 +69,8 @@ type writerSink struct {
|
|||
func (ws *writerSink) Write(e *pb.GrpcLogEntry) error {
|
||||
b, err := proto.Marshal(e)
|
||||
if err != nil {
|
||||
grpclogLogger.Infof("binary logging: failed to marshal proto message: %v", err)
|
||||
grpclogLogger.Errorf("binary logging: failed to marshal proto message: %v", err)
|
||||
return err
|
||||
}
|
||||
hdr := make([]byte, 4)
|
||||
binary.BigEndian.PutUint32(hdr, uint32(len(b)))
|
||||
|
@ -85,24 +86,27 @@ func (ws *writerSink) Write(e *pb.GrpcLogEntry) error {
|
|||
func (ws *writerSink) Close() error { return nil }
|
||||
|
||||
type bufferedSink struct {
|
||||
mu sync.Mutex
|
||||
closer io.Closer
|
||||
out Sink // out is built on buf.
|
||||
buf *bufio.Writer // buf is kept for flush.
|
||||
mu sync.Mutex
|
||||
closer io.Closer
|
||||
out Sink // out is built on buf.
|
||||
buf *bufio.Writer // buf is kept for flush.
|
||||
flusherStarted bool
|
||||
|
||||
writeStartOnce sync.Once
|
||||
writeTicker *time.Ticker
|
||||
writeTicker *time.Ticker
|
||||
done chan struct{}
|
||||
}
|
||||
|
||||
func (fs *bufferedSink) Write(e *pb.GrpcLogEntry) error {
|
||||
// Start the write loop when Write is called.
|
||||
fs.writeStartOnce.Do(fs.startFlushGoroutine)
|
||||
fs.mu.Lock()
|
||||
defer fs.mu.Unlock()
|
||||
if !fs.flusherStarted {
|
||||
// Start the write loop when Write is called.
|
||||
fs.startFlushGoroutine()
|
||||
fs.flusherStarted = true
|
||||
}
|
||||
if err := fs.out.Write(e); err != nil {
|
||||
fs.mu.Unlock()
|
||||
return err
|
||||
}
|
||||
fs.mu.Unlock()
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -113,7 +117,12 @@ const (
|
|||
func (fs *bufferedSink) startFlushGoroutine() {
|
||||
fs.writeTicker = time.NewTicker(bufFlushDuration)
|
||||
go func() {
|
||||
for range fs.writeTicker.C {
|
||||
for {
|
||||
select {
|
||||
case <-fs.done:
|
||||
return
|
||||
case <-fs.writeTicker.C:
|
||||
}
|
||||
fs.mu.Lock()
|
||||
if err := fs.buf.Flush(); err != nil {
|
||||
grpclogLogger.Warningf("failed to flush to Sink: %v", err)
|
||||
|
@ -124,10 +133,12 @@ func (fs *bufferedSink) startFlushGoroutine() {
|
|||
}
|
||||
|
||||
func (fs *bufferedSink) Close() error {
|
||||
fs.mu.Lock()
|
||||
defer fs.mu.Unlock()
|
||||
if fs.writeTicker != nil {
|
||||
fs.writeTicker.Stop()
|
||||
}
|
||||
fs.mu.Lock()
|
||||
close(fs.done)
|
||||
if err := fs.buf.Flush(); err != nil {
|
||||
grpclogLogger.Warningf("failed to flush to Sink: %v", err)
|
||||
}
|
||||
|
@ -137,7 +148,6 @@ func (fs *bufferedSink) Close() error {
|
|||
if err := fs.out.Close(); err != nil {
|
||||
grpclogLogger.Warningf("failed to close the Sink: %v", err)
|
||||
}
|
||||
fs.mu.Unlock()
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -155,5 +165,6 @@ func NewBufferedSink(o io.WriteCloser) Sink {
|
|||
closer: o,
|
||||
out: newWriterSink(bufW),
|
||||
buf: bufW,
|
||||
done: make(chan struct{}),
|
||||
}
|
||||
}
|
||||
|
|
|
@ -58,3 +58,10 @@ func Float64() float64 {
|
|||
defer mu.Unlock()
|
||||
return r.Float64()
|
||||
}
|
||||
|
||||
// Uint64 implements rand.Uint64 on the grpcrand global source.
|
||||
func Uint64() uint64 {
|
||||
mu.Lock()
|
||||
defer mu.Unlock()
|
||||
return r.Uint64()
|
||||
}
|
||||
|
|
|
@ -97,7 +97,7 @@ func (s *Status) Err() error {
|
|||
if s.Code() == codes.OK {
|
||||
return nil
|
||||
}
|
||||
return &Error{e: s.Proto()}
|
||||
return &Error{s: s}
|
||||
}
|
||||
|
||||
// WithDetails returns a new status with the provided details messages appended to the status.
|
||||
|
@ -136,19 +136,23 @@ func (s *Status) Details() []interface{} {
|
|||
return details
|
||||
}
|
||||
|
||||
func (s *Status) String() string {
|
||||
return fmt.Sprintf("rpc error: code = %s desc = %s", s.Code(), s.Message())
|
||||
}
|
||||
|
||||
// Error wraps a pointer of a status proto. It implements error and Status,
|
||||
// and a nil *Error should never be returned by this package.
|
||||
type Error struct {
|
||||
e *spb.Status
|
||||
s *Status
|
||||
}
|
||||
|
||||
func (e *Error) Error() string {
|
||||
return fmt.Sprintf("rpc error: code = %s desc = %s", codes.Code(e.e.GetCode()), e.e.GetMessage())
|
||||
return e.s.String()
|
||||
}
|
||||
|
||||
// GRPCStatus returns the Status represented by se.
|
||||
func (e *Error) GRPCStatus() *Status {
|
||||
return FromProto(e.e)
|
||||
return e.s
|
||||
}
|
||||
|
||||
// Is implements future error.Is functionality.
|
||||
|
@ -158,5 +162,5 @@ func (e *Error) Is(target error) bool {
|
|||
if !ok {
|
||||
return false
|
||||
}
|
||||
return proto.Equal(e.e, tse.e)
|
||||
return proto.Equal(e.s.s, tse.s.s)
|
||||
}
|
||||
|
|
|
@ -24,6 +24,7 @@ import (
|
|||
"io"
|
||||
"math"
|
||||
"net"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
|
@ -241,7 +242,15 @@ func newHTTP2Client(connectCtx, ctx context.Context, addr resolver.Address, opts
|
|||
// and passed to the credential handshaker. This makes it possible for
|
||||
// address specific arbitrary data to reach the credential handshaker.
|
||||
connectCtx = icredentials.NewClientHandshakeInfoContext(connectCtx, credentials.ClientHandshakeInfo{Attributes: addr.Attributes})
|
||||
conn, authInfo, err = transportCreds.ClientHandshake(connectCtx, addr.ServerName, conn)
|
||||
rawConn := conn
|
||||
// Pull the deadline from the connectCtx, which will be used for
|
||||
// timeouts in the authentication protocol handshake. Can ignore the
|
||||
// boolean as the deadline will return the zero value, which will make
|
||||
// the conn not timeout on I/O operations.
|
||||
deadline, _ := connectCtx.Deadline()
|
||||
rawConn.SetDeadline(deadline)
|
||||
conn, authInfo, err = transportCreds.ClientHandshake(connectCtx, addr.ServerName, rawConn)
|
||||
rawConn.SetDeadline(time.Time{})
|
||||
if err != nil {
|
||||
return nil, connectionErrorf(isTemporary(err), err, "transport: authentication handshake failed: %v", err)
|
||||
}
|
||||
|
@ -607,26 +616,39 @@ func (t *http2Client) getCallAuthData(ctx context.Context, audience string, call
|
|||
return callAuthData, nil
|
||||
}
|
||||
|
||||
// PerformedIOError wraps an error to indicate IO may have been performed
|
||||
// before the error occurred.
|
||||
type PerformedIOError struct {
|
||||
// NewStreamError wraps an error and reports additional information.
|
||||
type NewStreamError struct {
|
||||
Err error
|
||||
|
||||
DoNotRetry bool
|
||||
PerformedIO bool
|
||||
}
|
||||
|
||||
// Error implements error.
|
||||
func (p PerformedIOError) Error() string {
|
||||
return p.Err.Error()
|
||||
func (e NewStreamError) Error() string {
|
||||
return e.Err.Error()
|
||||
}
|
||||
|
||||
// NewStream creates a stream and registers it into the transport as "active"
|
||||
// streams.
|
||||
// streams. All non-nil errors returned will be *NewStreamError.
|
||||
func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (_ *Stream, err error) {
|
||||
defer func() {
|
||||
if err != nil {
|
||||
nse, ok := err.(*NewStreamError)
|
||||
if !ok {
|
||||
nse = &NewStreamError{Err: err}
|
||||
}
|
||||
if len(t.perRPCCreds) > 0 || callHdr.Creds != nil {
|
||||
// We may have performed I/O in the per-RPC creds callback, so do not
|
||||
// allow transparent retry.
|
||||
nse.PerformedIO = true
|
||||
}
|
||||
err = nse
|
||||
}
|
||||
}()
|
||||
ctx = peer.NewContext(ctx, t.getPeer())
|
||||
headerFields, err := t.createHeaderFields(ctx, callHdr)
|
||||
if err != nil {
|
||||
// We may have performed I/O in the per-RPC creds callback, so do not
|
||||
// allow transparent retry.
|
||||
return nil, PerformedIOError{err}
|
||||
return nil, err
|
||||
}
|
||||
s := t.newStream(ctx, callHdr)
|
||||
cleanup := func(err error) {
|
||||
|
@ -732,7 +754,7 @@ func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (_ *Strea
|
|||
break
|
||||
}
|
||||
if hdrListSizeErr != nil {
|
||||
return nil, hdrListSizeErr
|
||||
return nil, &NewStreamError{Err: hdrListSizeErr, DoNotRetry: true}
|
||||
}
|
||||
firstTry = false
|
||||
select {
|
||||
|
@ -1226,7 +1248,11 @@ func (t *http2Client) setGoAwayReason(f *http2.GoAwayFrame) {
|
|||
t.goAwayReason = GoAwayTooManyPings
|
||||
}
|
||||
}
|
||||
t.goAwayDebugMessage = fmt.Sprintf("code: %s, debug data: %v", f.ErrCode, string(f.DebugData()))
|
||||
if len(f.DebugData()) == 0 {
|
||||
t.goAwayDebugMessage = fmt.Sprintf("code: %s", f.ErrCode)
|
||||
} else {
|
||||
t.goAwayDebugMessage = fmt.Sprintf("code: %s, debug data: %q", f.ErrCode, string(f.DebugData()))
|
||||
}
|
||||
}
|
||||
|
||||
func (t *http2Client) GetGoAwayReason() (GoAwayReason, string) {
|
||||
|
@ -1272,29 +1298,41 @@ func (t *http2Client) operateHeaders(frame *http2.MetaHeadersFrame) {
|
|||
// that the peer is speaking gRPC and we are in gRPC mode.
|
||||
isGRPC = !initialHeader
|
||||
mdata = make(map[string][]string)
|
||||
contentTypeErr string
|
||||
contentTypeErr = "malformed header: missing HTTP content-type"
|
||||
grpcMessage string
|
||||
statusGen *status.Status
|
||||
|
||||
httpStatus string
|
||||
rawStatus string
|
||||
recvCompress string
|
||||
httpStatusCode *int
|
||||
httpStatusErr string
|
||||
rawStatusCode = codes.Unknown
|
||||
// headerError is set if an error is encountered while parsing the headers
|
||||
headerError string
|
||||
)
|
||||
|
||||
if initialHeader {
|
||||
httpStatusErr = "malformed header: missing HTTP status"
|
||||
}
|
||||
|
||||
for _, hf := range frame.Fields {
|
||||
switch hf.Name {
|
||||
case "content-type":
|
||||
if _, validContentType := grpcutil.ContentSubtype(hf.Value); !validContentType {
|
||||
contentTypeErr = fmt.Sprintf("transport: received the unexpected content-type %q", hf.Value)
|
||||
contentTypeErr = fmt.Sprintf("transport: received unexpected content-type %q", hf.Value)
|
||||
break
|
||||
}
|
||||
contentTypeErr = ""
|
||||
mdata[hf.Name] = append(mdata[hf.Name], hf.Value)
|
||||
isGRPC = true
|
||||
case "grpc-encoding":
|
||||
s.recvCompress = hf.Value
|
||||
recvCompress = hf.Value
|
||||
case "grpc-status":
|
||||
rawStatus = hf.Value
|
||||
code, err := strconv.ParseInt(hf.Value, 10, 32)
|
||||
if err != nil {
|
||||
se := status.New(codes.Internal, fmt.Sprintf("transport: malformed grpc-status: %v", err))
|
||||
t.closeStream(s, se.Err(), true, http2.ErrCodeProtocol, se, nil, endStream)
|
||||
return
|
||||
}
|
||||
rawStatusCode = codes.Code(uint32(code))
|
||||
case "grpc-message":
|
||||
grpcMessage = decodeGrpcMessage(hf.Value)
|
||||
case "grpc-status-details-bin":
|
||||
|
@ -1304,7 +1342,27 @@ func (t *http2Client) operateHeaders(frame *http2.MetaHeadersFrame) {
|
|||
headerError = fmt.Sprintf("transport: malformed grpc-status-details-bin: %v", err)
|
||||
}
|
||||
case ":status":
|
||||
httpStatus = hf.Value
|
||||
if hf.Value == "200" {
|
||||
httpStatusErr = ""
|
||||
statusCode := 200
|
||||
httpStatusCode = &statusCode
|
||||
break
|
||||
}
|
||||
|
||||
c, err := strconv.ParseInt(hf.Value, 10, 32)
|
||||
if err != nil {
|
||||
se := status.New(codes.Internal, fmt.Sprintf("transport: malformed http-status: %v", err))
|
||||
t.closeStream(s, se.Err(), true, http2.ErrCodeProtocol, se, nil, endStream)
|
||||
return
|
||||
}
|
||||
statusCode := int(c)
|
||||
httpStatusCode = &statusCode
|
||||
|
||||
httpStatusErr = fmt.Sprintf(
|
||||
"unexpected HTTP status code received from server: %d (%s)",
|
||||
statusCode,
|
||||
http.StatusText(statusCode),
|
||||
)
|
||||
default:
|
||||
if isReservedHeader(hf.Name) && !isWhitelistedHeader(hf.Name) {
|
||||
break
|
||||
|
@ -1319,30 +1377,25 @@ func (t *http2Client) operateHeaders(frame *http2.MetaHeadersFrame) {
|
|||
}
|
||||
}
|
||||
|
||||
if !isGRPC {
|
||||
var (
|
||||
code = codes.Internal // when header does not include HTTP status, return INTERNAL
|
||||
httpStatusCode int
|
||||
)
|
||||
|
||||
if httpStatus != "" {
|
||||
c, err := strconv.ParseInt(httpStatus, 10, 32)
|
||||
if err != nil {
|
||||
se := status.New(codes.Internal, fmt.Sprintf("transport: malformed http-status: %v", err))
|
||||
t.closeStream(s, se.Err(), true, http2.ErrCodeProtocol, se, nil, endStream)
|
||||
return
|
||||
}
|
||||
httpStatusCode = int(c)
|
||||
if !isGRPC || httpStatusErr != "" {
|
||||
var code = codes.Internal // when header does not include HTTP status, return INTERNAL
|
||||
|
||||
if httpStatusCode != nil {
|
||||
var ok bool
|
||||
code, ok = HTTPStatusConvTab[httpStatusCode]
|
||||
code, ok = HTTPStatusConvTab[*httpStatusCode]
|
||||
if !ok {
|
||||
code = codes.Unknown
|
||||
}
|
||||
}
|
||||
|
||||
var errs []string
|
||||
if httpStatusErr != "" {
|
||||
errs = append(errs, httpStatusErr)
|
||||
}
|
||||
if contentTypeErr != "" {
|
||||
errs = append(errs, contentTypeErr)
|
||||
}
|
||||
// Verify the HTTP response is a 200.
|
||||
se := status.New(code, constructHTTPErrMsg(&httpStatusCode, contentTypeErr))
|
||||
se := status.New(code, strings.Join(errs, "; "))
|
||||
t.closeStream(s, se.Err(), true, http2.ErrCodeProtocol, se, nil, endStream)
|
||||
return
|
||||
}
|
||||
|
@ -1384,6 +1437,7 @@ func (t *http2Client) operateHeaders(frame *http2.MetaHeadersFrame) {
|
|||
// These values can be set without any synchronization because
|
||||
// stream goroutine will read it only after seeing a closed
|
||||
// headerChan which we'll close after setting this.
|
||||
s.recvCompress = recvCompress
|
||||
if len(mdata) > 0 {
|
||||
s.header = mdata
|
||||
}
|
||||
|
@ -1399,16 +1453,6 @@ func (t *http2Client) operateHeaders(frame *http2.MetaHeadersFrame) {
|
|||
}
|
||||
|
||||
if statusGen == nil {
|
||||
rawStatusCode := codes.Unknown
|
||||
if rawStatus != "" {
|
||||
code, err := strconv.ParseInt(rawStatus, 10, 32)
|
||||
if err != nil {
|
||||
se := status.New(codes.Internal, fmt.Sprintf("transport: malformed grpc-status: %v", err))
|
||||
t.closeStream(s, se.Err(), true, http2.ErrCodeProtocol, se, nil, endStream)
|
||||
return
|
||||
}
|
||||
rawStatusCode = codes.Code(uint32(code))
|
||||
}
|
||||
statusGen = status.New(rawStatusCode, grpcMessage)
|
||||
}
|
||||
|
||||
|
|
|
@ -173,26 +173,6 @@ func decodeGRPCStatusDetails(rawDetails string) (*status.Status, error) {
|
|||
return status.FromProto(st), nil
|
||||
}
|
||||
|
||||
// constructErrMsg constructs error message to be returned in HTTP fallback mode.
|
||||
// Format: HTTP status code and its corresponding message + content-type error message.
|
||||
func constructHTTPErrMsg(httpStatus *int, contentTypeErr string) string {
|
||||
var errMsgs []string
|
||||
|
||||
if httpStatus == nil {
|
||||
errMsgs = append(errMsgs, "malformed header: missing HTTP status")
|
||||
} else {
|
||||
errMsgs = append(errMsgs, fmt.Sprintf("%s: HTTP status code %d", http.StatusText(*(httpStatus)), *httpStatus))
|
||||
}
|
||||
|
||||
if contentTypeErr == "" {
|
||||
errMsgs = append(errMsgs, "transport: missing content-type field")
|
||||
} else {
|
||||
errMsgs = append(errMsgs, contentTypeErr)
|
||||
}
|
||||
|
||||
return strings.Join(errMsgs, "; ")
|
||||
}
|
||||
|
||||
type timeoutUnit uint8
|
||||
|
||||
const (
|
||||
|
|
|
@ -123,6 +123,13 @@ func (md MD) Append(k string, vals ...string) {
|
|||
md[k] = append(md[k], vals...)
|
||||
}
|
||||
|
||||
// Delete removes the values for a given key k which is converted to lowercase
|
||||
// before removing it from md.
|
||||
func (md MD) Delete(k string) {
|
||||
k = strings.ToLower(k)
|
||||
delete(md, k)
|
||||
}
|
||||
|
||||
// Join joins any number of mds into a single MD.
|
||||
//
|
||||
// The order of values for each key is determined by the order in which the mds
|
||||
|
|
|
@ -147,7 +147,7 @@ func (pw *pickerWrapper) pick(ctx context.Context, failfast bool, info balancer.
|
|||
logger.Error("subconn returned from pick is not *acBalancerWrapper")
|
||||
continue
|
||||
}
|
||||
if t, ok := acw.getAddrConn().getReadyTransport(); ok {
|
||||
if t := acw.getAddrConn().getReadyTransport(); t != nil {
|
||||
if channelz.IsOn() {
|
||||
return t, doneChannelzWrapper(acw, pickResult.Done), nil
|
||||
}
|
||||
|
|
|
@ -829,26 +829,28 @@ func Errorf(c codes.Code, format string, a ...interface{}) error {
|
|||
|
||||
// toRPCErr converts an error into an error from the status package.
|
||||
func toRPCErr(err error) error {
|
||||
if err == nil || err == io.EOF {
|
||||
switch err {
|
||||
case nil, io.EOF:
|
||||
return err
|
||||
}
|
||||
if err == io.ErrUnexpectedEOF {
|
||||
case context.DeadlineExceeded:
|
||||
return status.Error(codes.DeadlineExceeded, err.Error())
|
||||
case context.Canceled:
|
||||
return status.Error(codes.Canceled, err.Error())
|
||||
case io.ErrUnexpectedEOF:
|
||||
return status.Error(codes.Internal, err.Error())
|
||||
}
|
||||
if _, ok := status.FromError(err); ok {
|
||||
return err
|
||||
}
|
||||
|
||||
switch e := err.(type) {
|
||||
case transport.ConnectionError:
|
||||
return status.Error(codes.Unavailable, e.Desc)
|
||||
default:
|
||||
switch err {
|
||||
case context.DeadlineExceeded:
|
||||
return status.Error(codes.DeadlineExceeded, err.Error())
|
||||
case context.Canceled:
|
||||
return status.Error(codes.Canceled, err.Error())
|
||||
}
|
||||
case *transport.NewStreamError:
|
||||
return toRPCErr(e.Err)
|
||||
}
|
||||
|
||||
if _, ok := status.FromError(err); ok {
|
||||
return err
|
||||
}
|
||||
|
||||
return status.Error(codes.Unknown, err.Error())
|
||||
}
|
||||
|
||||
|
|
|
@ -863,6 +863,7 @@ func (s *Server) handleRawConn(lisAddr string, rawConn net.Conn) {
|
|||
// Finish handshaking (HTTP2)
|
||||
st := s.newHTTP2Transport(conn, authInfo)
|
||||
if st == nil {
|
||||
conn.Close()
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -1115,22 +1116,24 @@ func chainUnaryServerInterceptors(s *Server) {
|
|||
} else if len(interceptors) == 1 {
|
||||
chainedInt = interceptors[0]
|
||||
} else {
|
||||
chainedInt = func(ctx context.Context, req interface{}, info *UnaryServerInfo, handler UnaryHandler) (interface{}, error) {
|
||||
return interceptors[0](ctx, req, info, getChainUnaryHandler(interceptors, 0, info, handler))
|
||||
}
|
||||
chainedInt = chainUnaryInterceptors(interceptors)
|
||||
}
|
||||
|
||||
s.opts.unaryInt = chainedInt
|
||||
}
|
||||
|
||||
// getChainUnaryHandler recursively generate the chained UnaryHandler
|
||||
func getChainUnaryHandler(interceptors []UnaryServerInterceptor, curr int, info *UnaryServerInfo, finalHandler UnaryHandler) UnaryHandler {
|
||||
if curr == len(interceptors)-1 {
|
||||
return finalHandler
|
||||
}
|
||||
|
||||
return func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
return interceptors[curr+1](ctx, req, info, getChainUnaryHandler(interceptors, curr+1, info, finalHandler))
|
||||
func chainUnaryInterceptors(interceptors []UnaryServerInterceptor) UnaryServerInterceptor {
|
||||
return func(ctx context.Context, req interface{}, info *UnaryServerInfo, handler UnaryHandler) (interface{}, error) {
|
||||
var i int
|
||||
var next UnaryHandler
|
||||
next = func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
if i == len(interceptors)-1 {
|
||||
return interceptors[i](ctx, req, info, handler)
|
||||
}
|
||||
i++
|
||||
return interceptors[i-1](ctx, req, info, next)
|
||||
}
|
||||
return next(ctx, req)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1144,7 +1147,9 @@ func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport.
|
|||
if sh != nil {
|
||||
beginTime := time.Now()
|
||||
statsBegin = &stats.Begin{
|
||||
BeginTime: beginTime,
|
||||
BeginTime: beginTime,
|
||||
IsClientStream: false,
|
||||
IsServerStream: false,
|
||||
}
|
||||
sh.HandleRPC(stream.Context(), statsBegin)
|
||||
}
|
||||
|
@ -1396,22 +1401,24 @@ func chainStreamServerInterceptors(s *Server) {
|
|||
} else if len(interceptors) == 1 {
|
||||
chainedInt = interceptors[0]
|
||||
} else {
|
||||
chainedInt = func(srv interface{}, ss ServerStream, info *StreamServerInfo, handler StreamHandler) error {
|
||||
return interceptors[0](srv, ss, info, getChainStreamHandler(interceptors, 0, info, handler))
|
||||
}
|
||||
chainedInt = chainStreamInterceptors(interceptors)
|
||||
}
|
||||
|
||||
s.opts.streamInt = chainedInt
|
||||
}
|
||||
|
||||
// getChainStreamHandler recursively generate the chained StreamHandler
|
||||
func getChainStreamHandler(interceptors []StreamServerInterceptor, curr int, info *StreamServerInfo, finalHandler StreamHandler) StreamHandler {
|
||||
if curr == len(interceptors)-1 {
|
||||
return finalHandler
|
||||
}
|
||||
|
||||
return func(srv interface{}, ss ServerStream) error {
|
||||
return interceptors[curr+1](srv, ss, info, getChainStreamHandler(interceptors, curr+1, info, finalHandler))
|
||||
func chainStreamInterceptors(interceptors []StreamServerInterceptor) StreamServerInterceptor {
|
||||
return func(srv interface{}, ss ServerStream, info *StreamServerInfo, handler StreamHandler) error {
|
||||
var i int
|
||||
var next StreamHandler
|
||||
next = func(srv interface{}, ss ServerStream) error {
|
||||
if i == len(interceptors)-1 {
|
||||
return interceptors[i](srv, ss, info, handler)
|
||||
}
|
||||
i++
|
||||
return interceptors[i-1](srv, ss, info, next)
|
||||
}
|
||||
return next(srv, ss)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1424,7 +1431,9 @@ func (s *Server) processStreamingRPC(t transport.ServerTransport, stream *transp
|
|||
if sh != nil {
|
||||
beginTime := time.Now()
|
||||
statsBegin = &stats.Begin{
|
||||
BeginTime: beginTime,
|
||||
BeginTime: beginTime,
|
||||
IsClientStream: sd.ClientStreams,
|
||||
IsServerStream: sd.ServerStreams,
|
||||
}
|
||||
sh.HandleRPC(stream.Context(), statsBegin)
|
||||
}
|
||||
|
|
|
@ -45,6 +45,10 @@ type Begin struct {
|
|||
BeginTime time.Time
|
||||
// FailFast indicates if this RPC is failfast.
|
||||
FailFast bool
|
||||
// IsClientStream indicates whether the RPC is a client streaming RPC.
|
||||
IsClientStream bool
|
||||
// IsServerStream indicates whether the RPC is a server streaming RPC.
|
||||
IsServerStream bool
|
||||
}
|
||||
|
||||
// IsClient indicates if the stats information is from client side.
|
||||
|
|
|
@ -295,9 +295,11 @@ func newClientStreamWithParams(ctx context.Context, desc *StreamDesc, cc *Client
|
|||
ctx = sh.TagRPC(ctx, &stats.RPCTagInfo{FullMethodName: method, FailFast: c.failFast})
|
||||
beginTime = time.Now()
|
||||
begin := &stats.Begin{
|
||||
Client: true,
|
||||
BeginTime: beginTime,
|
||||
FailFast: c.failFast,
|
||||
Client: true,
|
||||
BeginTime: beginTime,
|
||||
FailFast: c.failFast,
|
||||
IsClientStream: desc.ClientStreams,
|
||||
IsServerStream: desc.ServerStreams,
|
||||
}
|
||||
sh.HandleRPC(ctx, begin)
|
||||
}
|
||||
|
@ -419,12 +421,9 @@ func (a *csAttempt) newStream() error {
|
|||
cs.callHdr.PreviousAttempts = cs.numRetries
|
||||
s, err := a.t.NewStream(cs.ctx, cs.callHdr)
|
||||
if err != nil {
|
||||
if _, ok := err.(transport.PerformedIOError); ok {
|
||||
// Return without converting to an RPC error so retry code can
|
||||
// inspect.
|
||||
return err
|
||||
}
|
||||
return toRPCErr(err)
|
||||
// Return without converting to an RPC error so retry code can
|
||||
// inspect.
|
||||
return err
|
||||
}
|
||||
cs.attempt.s = s
|
||||
cs.attempt.p = &parser{r: s}
|
||||
|
@ -523,19 +522,28 @@ func (cs *clientStream) commitAttempt() {
|
|||
// shouldRetry returns nil if the RPC should be retried; otherwise it returns
|
||||
// the error that should be returned by the operation.
|
||||
func (cs *clientStream) shouldRetry(err error) error {
|
||||
unprocessed := false
|
||||
if cs.attempt.s == nil {
|
||||
pioErr, ok := err.(transport.PerformedIOError)
|
||||
if ok {
|
||||
// Unwrap error.
|
||||
err = toRPCErr(pioErr.Err)
|
||||
} else {
|
||||
unprocessed = true
|
||||
// Error from NewClientStream.
|
||||
nse, ok := err.(*transport.NewStreamError)
|
||||
if !ok {
|
||||
// Unexpected, but assume no I/O was performed and the RPC is not
|
||||
// fatal, so retry indefinitely.
|
||||
return nil
|
||||
}
|
||||
if !ok && !cs.callInfo.failFast {
|
||||
// In the event of a non-IO operation error from NewStream, we
|
||||
// never attempted to write anything to the wire, so we can retry
|
||||
// indefinitely for non-fail-fast RPCs.
|
||||
|
||||
// Unwrap and convert error.
|
||||
err = toRPCErr(nse.Err)
|
||||
|
||||
// Never retry DoNotRetry errors, which indicate the RPC should not be
|
||||
// retried due to max header list size violation, etc.
|
||||
if nse.DoNotRetry {
|
||||
return err
|
||||
}
|
||||
|
||||
// In the event of a non-IO operation error from NewStream, we never
|
||||
// attempted to write anything to the wire, so we can retry
|
||||
// indefinitely.
|
||||
if !nse.PerformedIO {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
@ -544,6 +552,7 @@ func (cs *clientStream) shouldRetry(err error) error {
|
|||
return err
|
||||
}
|
||||
// Wait for the trailers.
|
||||
unprocessed := false
|
||||
if cs.attempt.s != nil {
|
||||
<-cs.attempt.s.Done()
|
||||
unprocessed = cs.attempt.s.Unprocessed()
|
||||
|
@ -632,7 +641,7 @@ func (cs *clientStream) shouldRetry(err error) error {
|
|||
// Returns nil if a retry was performed and succeeded; error otherwise.
|
||||
func (cs *clientStream) retryLocked(lastErr error) error {
|
||||
for {
|
||||
cs.attempt.finish(lastErr)
|
||||
cs.attempt.finish(toRPCErr(lastErr))
|
||||
if err := cs.shouldRetry(lastErr); err != nil {
|
||||
cs.commitAttemptLocked()
|
||||
return err
|
||||
|
@ -659,7 +668,11 @@ func (cs *clientStream) withRetry(op func(a *csAttempt) error, onSuccess func())
|
|||
for {
|
||||
if cs.committed {
|
||||
cs.mu.Unlock()
|
||||
return op(cs.attempt)
|
||||
// toRPCErr is used in case the error from the attempt comes from
|
||||
// NewClientStream, which intentionally doesn't return a status
|
||||
// error to allow for further inspection; all other errors should
|
||||
// already be status errors.
|
||||
return toRPCErr(op(cs.attempt))
|
||||
}
|
||||
a := cs.attempt
|
||||
cs.mu.Unlock()
|
||||
|
|
|
@ -19,4 +19,4 @@
|
|||
package grpc
|
||||
|
||||
// Version is the current grpc version.
|
||||
const Version = "1.39.0"
|
||||
const Version = "1.40.0"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# contrib.go.opencensus.io/exporter/ocagent v0.7.1-0.20200907061046-05415f1de66d
|
||||
contrib.go.opencensus.io/exporter/ocagent
|
||||
# contrib.go.opencensus.io/exporter/prometheus v0.3.1-0.20210621165811-f3a7283b3002
|
||||
# contrib.go.opencensus.io/exporter/prometheus v0.4.0
|
||||
contrib.go.opencensus.io/exporter/prometheus
|
||||
# github.com/PuerkitoBio/purell v1.1.1
|
||||
github.com/PuerkitoBio/purell
|
||||
|
@ -172,7 +172,7 @@ go.opencensus.io/trace/tracestate
|
|||
go.uber.org/atomic
|
||||
# go.uber.org/multierr v1.6.0
|
||||
go.uber.org/multierr
|
||||
# go.uber.org/zap v1.18.1
|
||||
# go.uber.org/zap v1.19.0
|
||||
## explicit
|
||||
go.uber.org/zap
|
||||
go.uber.org/zap/buffer
|
||||
|
@ -180,12 +180,12 @@ go.uber.org/zap/internal/bufferpool
|
|||
go.uber.org/zap/internal/color
|
||||
go.uber.org/zap/internal/exit
|
||||
go.uber.org/zap/zapcore
|
||||
# golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a
|
||||
# golang.org/x/crypto v0.0.0-20210817164053-32db794688a5
|
||||
golang.org/x/crypto/ssh/terminal
|
||||
# golang.org/x/mod v0.4.2
|
||||
golang.org/x/mod/module
|
||||
golang.org/x/mod/semver
|
||||
# golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985
|
||||
# golang.org/x/net v0.0.0-20210825183410-e898025ed96a
|
||||
golang.org/x/net/context
|
||||
golang.org/x/net/context/ctxhttp
|
||||
golang.org/x/net/http/httpguts
|
||||
|
@ -195,12 +195,12 @@ golang.org/x/net/http2/hpack
|
|||
golang.org/x/net/idna
|
||||
golang.org/x/net/internal/timeseries
|
||||
golang.org/x/net/trace
|
||||
# golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914
|
||||
# golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f
|
||||
golang.org/x/oauth2
|
||||
golang.org/x/oauth2/internal
|
||||
# golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
|
||||
golang.org/x/sync/semaphore
|
||||
# golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40
|
||||
# golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1
|
||||
golang.org/x/sys/execabs
|
||||
golang.org/x/sys/internal/unsafeheader
|
||||
golang.org/x/sys/plan9
|
||||
|
@ -214,7 +214,7 @@ golang.org/x/text/transform
|
|||
golang.org/x/text/unicode/bidi
|
||||
golang.org/x/text/unicode/norm
|
||||
golang.org/x/text/width
|
||||
# golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba
|
||||
# golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac
|
||||
golang.org/x/time/rate
|
||||
# golang.org/x/tools v0.1.5
|
||||
golang.org/x/tools/go/ast/astutil
|
||||
|
@ -247,7 +247,7 @@ google.golang.org/appengine/urlfetch
|
|||
google.golang.org/genproto/googleapis/api/httpbody
|
||||
google.golang.org/genproto/googleapis/rpc/status
|
||||
google.golang.org/genproto/protobuf/field_mask
|
||||
# google.golang.org/grpc v1.39.0
|
||||
# google.golang.org/grpc v1.40.0
|
||||
google.golang.org/grpc
|
||||
google.golang.org/grpc/attributes
|
||||
google.golang.org/grpc/backoff
|
||||
|
@ -569,7 +569,7 @@ k8s.io/utils/trace
|
|||
# knative.dev/hack v0.0.0-20210806075220-815cd312d65c
|
||||
## explicit
|
||||
knative.dev/hack
|
||||
# knative.dev/pkg v0.0.0-20210824120823-a94f5f07b3c3
|
||||
# knative.dev/pkg v0.0.0-20210827112638-4472e04552d3
|
||||
## explicit
|
||||
knative.dev/pkg/apis
|
||||
knative.dev/pkg/apis/duck
|
||||
|
|
Loading…
Reference in New Issue