From 4daad47e4951e8969d94c8802da88941f80460e5 Mon Sep 17 00:00:00 2001 From: Egon Elbre Date: Tue, 26 Oct 2021 15:13:20 +0300 Subject: [PATCH 1/6] mod: bump semantic version to go 1.17 This enables module graph pruning and lazy module loading. Change-Id: I5a942d6f9bfedaa3ee682f08216cef04b7e5b633 --- examples/drpc/go.mod | 4 +++- examples/drpc_and_http/go.mod | 4 +++- examples/grpc/go.mod | 10 +++++++++- examples/grpc_and_drpc/go.mod | 11 ++++++++++- go.mod | 2 +- internal/backcompat/go.mod | 2 +- internal/backcompat/newservice/go.mod | 9 ++++++++- internal/backcompat/newservicedefs/go.mod | 4 +++- internal/backcompat/oldservice/go.mod | 10 +++++++++- internal/backcompat/oldservicedefs/go.mod | 4 +++- internal/backcompat/servicedefs/go.mod | 2 +- internal/grpccompat/go.mod | 19 ++++++++++++++----- internal/grpccompat/go.sum | 2 -- internal/integration/go.mod | 2 +- internal/twirpcompat/go.mod | 8 ++++++-- 15 files changed, 72 insertions(+), 21 deletions(-) diff --git a/examples/drpc/go.mod b/examples/drpc/go.mod index 2fe1621..fe7ae91 100644 --- a/examples/drpc/go.mod +++ b/examples/drpc/go.mod @@ -1,10 +1,12 @@ module storj.io/drpc/examples/drpc -go 1.16 +go 1.17 require ( google.golang.org/protobuf v1.26.0 storj.io/drpc v0.0.17 ) +require github.com/zeebo/errs v1.2.2 // indirect + replace storj.io/drpc => ../.. diff --git a/examples/drpc_and_http/go.mod b/examples/drpc_and_http/go.mod index 16a285d..8b4c7b4 100644 --- a/examples/drpc_and_http/go.mod +++ b/examples/drpc_and_http/go.mod @@ -1,6 +1,6 @@ module storj.io/drpc/examples/drpc_and_http -go 1.16 +go 1.17 require ( golang.org/x/sync v0.0.0-20210220032951-036812b2e83c @@ -8,4 +8,6 @@ require ( storj.io/drpc v0.0.17 ) +require github.com/zeebo/errs v1.2.2 // indirect + replace storj.io/drpc => ../.. diff --git a/examples/grpc/go.mod b/examples/grpc/go.mod index f15dfa7..f51926c 100644 --- a/examples/grpc/go.mod +++ b/examples/grpc/go.mod @@ -1,8 +1,16 @@ module storj.io/drpc/examples/grpc -go 1.16 +go 1.17 require ( google.golang.org/grpc v1.36.0 google.golang.org/protobuf v1.26.0 ) + +require ( + github.com/golang/protobuf v1.5.0 // indirect + golang.org/x/net v0.0.0-20190311183353-d8887717615a // indirect + golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a // indirect + golang.org/x/text v0.3.0 // indirect + google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 // indirect +) diff --git a/examples/grpc_and_drpc/go.mod b/examples/grpc_and_drpc/go.mod index f94948d..cf4005f 100644 --- a/examples/grpc_and_drpc/go.mod +++ b/examples/grpc_and_drpc/go.mod @@ -1,6 +1,6 @@ module storj.io/drpc/examples/grpc_and_drpc -go 1.16 +go 1.17 require ( golang.org/x/sync v0.0.0-20210220032951-036812b2e83c @@ -9,4 +9,13 @@ require ( storj.io/drpc v0.0.17 ) +require ( + github.com/golang/protobuf v1.5.0 // indirect + github.com/zeebo/errs v1.2.2 // indirect + golang.org/x/net v0.0.0-20190311183353-d8887717615a // indirect + golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a // indirect + golang.org/x/text v0.3.0 // indirect + google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 // indirect +) + replace storj.io/drpc => ../.. diff --git a/go.mod b/go.mod index fbbe837..3795b88 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module storj.io/drpc -go 1.13 +go 1.17 require ( github.com/zeebo/assert v1.3.0 diff --git a/internal/backcompat/go.mod b/internal/backcompat/go.mod index b885024..a4c31fd 100644 --- a/internal/backcompat/go.mod +++ b/internal/backcompat/go.mod @@ -1,6 +1,6 @@ module storj.io/drpc/internal/backcompat -go 1.16 +go 1.17 require ( github.com/zeebo/assert v1.3.0 diff --git a/internal/backcompat/newservice/go.mod b/internal/backcompat/newservice/go.mod index 2600175..f9e279e 100644 --- a/internal/backcompat/newservice/go.mod +++ b/internal/backcompat/newservice/go.mod @@ -1,9 +1,16 @@ module storj.io/drpc/internal/backcompat/newservice -go 1.16 +go 1.17 require storj.io/drpc/internal/backcompat v0.0.0-00010101000000-000000000000 +require ( + github.com/zeebo/errs v1.2.2 // indirect + google.golang.org/protobuf v1.26.0 // indirect + storj.io/drpc v0.0.0-00010101000000-000000000000 // indirect + storj.io/drpc/internal/backcompat/servicedefs v0.0.0-00010101000000-000000000000 // indirect +) + replace ( storj.io/drpc => ../../.. storj.io/drpc/internal/backcompat => ../ diff --git a/internal/backcompat/newservicedefs/go.mod b/internal/backcompat/newservicedefs/go.mod index aa2f445..8fe1642 100644 --- a/internal/backcompat/newservicedefs/go.mod +++ b/internal/backcompat/newservicedefs/go.mod @@ -1,10 +1,12 @@ module storj.io/drpc/internal/backcompat/newservicedefs -go 1.16 +go 1.17 require ( google.golang.org/protobuf v1.26.0 storj.io/drpc v0.0.0-00010101000000-000000000000 ) +require github.com/zeebo/errs v1.2.2 // indirect + replace storj.io/drpc => ../../.. diff --git a/internal/backcompat/oldservice/go.mod b/internal/backcompat/oldservice/go.mod index e87c9b4..b0535fc 100644 --- a/internal/backcompat/oldservice/go.mod +++ b/internal/backcompat/oldservice/go.mod @@ -1,9 +1,17 @@ module storj.io/drpc/internal/backcompat/oldservice -go 1.16 +go 1.17 require storj.io/drpc/internal/backcompat v0.0.0-00010101000000-000000000000 +require ( + github.com/gogo/protobuf v1.3.2 // indirect + github.com/spacemonkeygo/monkit/v3 v3.0.7 // indirect + github.com/zeebo/errs v1.2.2 // indirect + storj.io/drpc v0.0.17 // indirect + storj.io/drpc/internal/backcompat/servicedefs v0.0.0-00010101000000-000000000000 // indirect +) + replace ( storj.io/drpc => storj.io/drpc v0.0.17 storj.io/drpc/internal/backcompat => ../ diff --git a/internal/backcompat/oldservicedefs/go.mod b/internal/backcompat/oldservicedefs/go.mod index bbe0c74..e6e7481 100644 --- a/internal/backcompat/oldservicedefs/go.mod +++ b/internal/backcompat/oldservicedefs/go.mod @@ -1,8 +1,10 @@ module storj.io/drpc/internal/backcompat/oldservicedefs -go 1.16 +go 1.17 require ( github.com/gogo/protobuf v1.3.2 storj.io/drpc v0.0.17 ) + +require github.com/zeebo/errs v1.2.2 // indirect diff --git a/internal/backcompat/servicedefs/go.mod b/internal/backcompat/servicedefs/go.mod index 2319660..d50707d 100644 --- a/internal/backcompat/servicedefs/go.mod +++ b/internal/backcompat/servicedefs/go.mod @@ -1,3 +1,3 @@ module storj.io/drpc/internal/backcompat/servicedefs -go 1.16 +go 1.17 diff --git a/internal/grpccompat/go.mod b/internal/grpccompat/go.mod index e8a1b6c..405760e 100644 --- a/internal/grpccompat/go.mod +++ b/internal/grpccompat/go.mod @@ -1,18 +1,27 @@ module storj.io/drpc/internal/grpccompat -go 1.13 +go 1.17 require ( - github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect github.com/improbable-eng/grpc-web v0.14.0 - github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect - github.com/rs/cors v1.8.0 // indirect github.com/zeebo/assert v1.3.0 github.com/zeebo/errs v1.2.2 google.golang.org/grpc v1.36.0 google.golang.org/protobuf v1.26.0 - nhooyr.io/websocket v1.8.7 // indirect storj.io/drpc v0.0.0-00010101000000-000000000000 ) +require ( + github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect + github.com/golang/protobuf v1.5.0 // indirect + github.com/klauspost/compress v1.10.3 // indirect + github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect + github.com/rs/cors v1.8.0 // indirect + golang.org/x/net v0.0.0-20190311183353-d8887717615a // indirect + golang.org/x/sys v0.0.0-20200116001909-b77594299b42 // indirect + golang.org/x/text v0.3.2 // indirect + google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 // indirect + nhooyr.io/websocket v1.8.7 // indirect +) + replace storj.io/drpc => ../.. diff --git a/internal/grpccompat/go.sum b/internal/grpccompat/go.sum index c6e8996..5fd8e31 100644 --- a/internal/grpccompat/go.sum +++ b/internal/grpccompat/go.sum @@ -17,7 +17,6 @@ github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do= github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= -github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM= github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= @@ -150,7 +149,6 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ= diff --git a/internal/integration/go.mod b/internal/integration/go.mod index 9fac6e1..5157979 100644 --- a/internal/integration/go.mod +++ b/internal/integration/go.mod @@ -1,6 +1,6 @@ module storj.io/drpc/internal/integration -go 1.13 +go 1.17 require ( github.com/gogo/protobuf v1.3.2 diff --git a/internal/twirpcompat/go.mod b/internal/twirpcompat/go.mod index 1e4647b..0a5cbb6 100644 --- a/internal/twirpcompat/go.mod +++ b/internal/twirpcompat/go.mod @@ -1,9 +1,8 @@ module storj.io/drpc/internal/twirpcompat -go 1.13 +go 1.17 require ( - github.com/pkg/errors v0.9.1 // indirect github.com/twitchtv/twirp v8.1.0+incompatible github.com/zeebo/assert v1.3.0 github.com/zeebo/hmux v0.3.1 @@ -11,4 +10,9 @@ require ( storj.io/drpc v0.0.0-00010101000000-000000000000 ) +require ( + github.com/pkg/errors v0.9.1 // indirect + github.com/zeebo/errs v1.2.2 // indirect +) + replace storj.io/drpc => ../.. From 8cf1dd2d41f63f5a7cd96b711680a2f3d28c444e Mon Sep 17 00:00:00 2001 From: Jeff Wendling Date: Mon, 1 Nov 2021 16:36:02 -0400 Subject: [PATCH 2/6] cmd/protoc-gen-go-drpc: proto3 optional support this additionally bumps the google.golang.org/protobuf dependency to v1.27.1, and the nix flake dependencies for protoc from v3.16.0 to v3.18.0. adds an optional field into the grpccompat tests rather than the integration tests because we generate using gogoprotobuf sometimes in the integration tests which does not support optional fields. Change-Id: Idb52705b2e57588120a7f6af7bc2db36ddde3d09 --- cmd/protoc-gen-go-drpc/main.go | 2 + examples/drpc/go.mod | 2 +- examples/drpc/go.sum | 4 +- examples/drpc/pb/sesamestreet.pb.go | 4 +- examples/drpc_and_http/go.mod | 2 +- examples/drpc_and_http/go.sum | 4 +- examples/drpc_and_http/pb/sesamestreet.pb.go | 4 +- examples/grpc/pb/sesamestreet.pb.go | 4 +- examples/grpc_and_drpc/go.mod | 2 +- examples/grpc_and_drpc/go.sum | 4 +- examples/grpc_and_drpc/pb/sesamestreet.pb.go | 4 +- flake.lock | 12 ++-- flake.nix | 8 +-- go.mod | 2 +- go.sum | 4 +- internal/backcompat/go.sum | 2 +- internal/backcompat/newservice/go.mod | 2 +- internal/backcompat/newservice/go.sum | 4 +- internal/backcompat/newservicedefs/go.mod | 2 +- internal/backcompat/newservicedefs/go.sum | 4 +- .../newservicedefs/servicedefs.pb.go | 4 +- internal/grpccompat/basic_test.go | 37 ++++++++++++ internal/grpccompat/benchmark_test.go | 6 +- internal/grpccompat/common_test.go | 4 ++ internal/grpccompat/go.mod | 2 +- internal/grpccompat/go.sum | 4 +- internal/grpccompat/service.pb.go | 60 +++++++++++++------ internal/grpccompat/service.proto | 2 + .../integration/customservice/service.pb.go | 4 +- internal/integration/go.mod | 2 +- internal/integration/go.sum | 4 +- internal/integration/service/service.pb.go | 4 +- internal/twirpcompat/clientcompat.pb.go | 4 +- internal/twirpcompat/go.sum | 1 - 34 files changed, 138 insertions(+), 76 deletions(-) create mode 100644 internal/grpccompat/basic_test.go diff --git a/cmd/protoc-gen-go-drpc/main.go b/cmd/protoc-gen-go-drpc/main.go index 4f3aebf..9cda156 100644 --- a/cmd/protoc-gen-go-drpc/main.go +++ b/cmd/protoc-gen-go-drpc/main.go @@ -11,6 +11,7 @@ import ( "strings" "google.golang.org/protobuf/compiler/protogen" + "google.golang.org/protobuf/types/pluginpb" ) type config struct { @@ -33,6 +34,7 @@ func main() { } generateFile(plugin, f, conf) } + plugin.SupportedFeatures = uint64(pluginpb.CodeGeneratorResponse_FEATURE_PROTO3_OPTIONAL) return nil }) } diff --git a/examples/drpc/go.mod b/examples/drpc/go.mod index fe7ae91..af6cef2 100644 --- a/examples/drpc/go.mod +++ b/examples/drpc/go.mod @@ -3,7 +3,7 @@ module storj.io/drpc/examples/drpc go 1.17 require ( - google.golang.org/protobuf v1.26.0 + google.golang.org/protobuf v1.27.1 storj.io/drpc v0.0.17 ) diff --git a/examples/drpc/go.sum b/examples/drpc/go.sum index c9b4de8..c129979 100644 --- a/examples/drpc/go.sum +++ b/examples/drpc/go.sum @@ -8,5 +8,5 @@ github.com/zeebo/errs v1.2.2/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtC golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= diff --git a/examples/drpc/pb/sesamestreet.pb.go b/examples/drpc/pb/sesamestreet.pb.go index adcd2f3..2c4a068 100644 --- a/examples/drpc/pb/sesamestreet.pb.go +++ b/examples/drpc/pb/sesamestreet.pb.go @@ -3,8 +3,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.16.0 +// protoc-gen-go v1.27.1 +// protoc v3.18.0 // source: sesamestreet.proto package pb diff --git a/examples/drpc_and_http/go.mod b/examples/drpc_and_http/go.mod index 8b4c7b4..83b2ac0 100644 --- a/examples/drpc_and_http/go.mod +++ b/examples/drpc_and_http/go.mod @@ -4,7 +4,7 @@ go 1.17 require ( golang.org/x/sync v0.0.0-20210220032951-036812b2e83c - google.golang.org/protobuf v1.26.0 + google.golang.org/protobuf v1.27.1 storj.io/drpc v0.0.17 ) diff --git a/examples/drpc_and_http/go.sum b/examples/drpc_and_http/go.sum index 1b12aed..f57f13e 100644 --- a/examples/drpc_and_http/go.sum +++ b/examples/drpc_and_http/go.sum @@ -10,5 +10,5 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= diff --git a/examples/drpc_and_http/pb/sesamestreet.pb.go b/examples/drpc_and_http/pb/sesamestreet.pb.go index bf60fc0..67c40ae 100644 --- a/examples/drpc_and_http/pb/sesamestreet.pb.go +++ b/examples/drpc_and_http/pb/sesamestreet.pb.go @@ -3,8 +3,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.16.0 +// protoc-gen-go v1.27.1 +// protoc v3.18.0 // source: sesamestreet.proto package pb diff --git a/examples/grpc/pb/sesamestreet.pb.go b/examples/grpc/pb/sesamestreet.pb.go index c5f3714..aa756e0 100644 --- a/examples/grpc/pb/sesamestreet.pb.go +++ b/examples/grpc/pb/sesamestreet.pb.go @@ -3,8 +3,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.16.0 +// protoc-gen-go v1.27.1 +// protoc v3.18.0 // source: sesamestreet.proto package pb diff --git a/examples/grpc_and_drpc/go.mod b/examples/grpc_and_drpc/go.mod index cf4005f..c4a10ee 100644 --- a/examples/grpc_and_drpc/go.mod +++ b/examples/grpc_and_drpc/go.mod @@ -5,7 +5,7 @@ go 1.17 require ( golang.org/x/sync v0.0.0-20210220032951-036812b2e83c google.golang.org/grpc v1.36.0 - google.golang.org/protobuf v1.26.0 + google.golang.org/protobuf v1.27.1 storj.io/drpc v0.0.17 ) diff --git a/examples/grpc_and_drpc/go.sum b/examples/grpc_and_drpc/go.sum index 1cb3315..ae92b55 100644 --- a/examples/grpc_and_drpc/go.sum +++ b/examples/grpc_and_drpc/go.sum @@ -86,8 +86,8 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/examples/grpc_and_drpc/pb/sesamestreet.pb.go b/examples/grpc_and_drpc/pb/sesamestreet.pb.go index fbcead9..63488ed 100644 --- a/examples/grpc_and_drpc/pb/sesamestreet.pb.go +++ b/examples/grpc_and_drpc/pb/sesamestreet.pb.go @@ -3,8 +3,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.16.0 +// protoc-gen-go v1.27.1 +// protoc v3.18.0 // source: sesamestreet.proto package pb diff --git a/flake.lock b/flake.lock index 0659be9..c5c557a 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "flake-utils": { "locked": { - "lastModified": 1623875721, - "narHash": "sha256-A8BU7bjS5GirpAUv4QA+QnJ4CceLHkcXdRp4xITDB0s=", + "lastModified": 1634851050, + "narHash": "sha256-N83GlSGPJJdcqhUxSCS/WwW5pksYf3VP1M13cDRTSVA=", "owner": "numtide", "repo": "flake-utils", - "rev": "f7e004a55b120c02ecb6219596820fcd32ca8772", + "rev": "c91f3de5adaf1de973b797ef7485e441a65b8935", "type": "github" }, "original": { @@ -17,11 +17,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1625323888, - "narHash": "sha256-7WYWbzvy4pCkk7tT88dQDplf8WtcGgguAMf4stLaep4=", + "lastModified": 1635797866, + "narHash": "sha256-e3vqt720wyb1PPNcGXej8wwip2/tgO1JsSGYK1NptSw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "6ad9193ea2cd18743d5ba5ad7c147cc0d48f1a05", + "rev": "6751e7428f20328fed076acfcbb340d0f4aa0c07", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 8561a39..e8adb2b 100644 --- a/flake.nix +++ b/flake.nix @@ -21,7 +21,7 @@ ])); }; subPackages = [ "cmd/protoc-gen-go-drpc" ]; - vendorSha256 = "sha256-gE5b0cmq4lHEY1Ar0dCERbFLRvptNESZqija4Ruw9z0="; + vendorSha256 = "sha256-3kIFjZDi2qnEDXDY0ozvylxJlBePkK7IPFOVipsfLBU="; }; devShell = @@ -77,8 +77,8 @@ src = fetchFromGitHub { owner = "protocolbuffers"; repo = "protobuf-go"; - rev = "v1.26.0"; - sha256 = "sha256-n2LHI8DXQFFWhTPOFCegBgwi/0tFvRE226AZfRW8Bnc="; + rev = "v1.27.1"; + sha256 = "sha256-wkUvMsoJP38KMD5b3Fz65R1cnpeTtDcVqgE7tNlZXys="; }; doCheck = false; vendorSha256 = "sha256-pQpattmS9VmO3ZIQUFn66az8GSmB4IvYhTTCFn6SUmo="; @@ -128,7 +128,7 @@ buildInputs = [ defaultPackage - go + go_1_17 golangci-lint protobuf graphviz diff --git a/go.mod b/go.mod index 3795b88..ff0e1b6 100644 --- a/go.mod +++ b/go.mod @@ -5,5 +5,5 @@ go 1.17 require ( github.com/zeebo/assert v1.3.0 github.com/zeebo/errs v1.2.2 - google.golang.org/protobuf v1.26.0 + google.golang.org/protobuf v1.27.1 ) diff --git a/go.sum b/go.sum index c9b4de8..c129979 100644 --- a/go.sum +++ b/go.sum @@ -8,5 +8,5 @@ github.com/zeebo/errs v1.2.2/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtC golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= diff --git a/internal/backcompat/go.sum b/internal/backcompat/go.sum index f79eb95..f38ad5b 100644 --- a/internal/backcompat/go.sum +++ b/internal/backcompat/go.sum @@ -6,4 +6,4 @@ github.com/zeebo/errs v1.2.2 h1:5NFypMTuSdoySVTqlNs1dEoU21QVamMQJxW/Fii5O7g= github.com/zeebo/errs v1.2.2/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= diff --git a/internal/backcompat/newservice/go.mod b/internal/backcompat/newservice/go.mod index f9e279e..ad8bfad 100644 --- a/internal/backcompat/newservice/go.mod +++ b/internal/backcompat/newservice/go.mod @@ -6,7 +6,7 @@ require storj.io/drpc/internal/backcompat v0.0.0-00010101000000-000000000000 require ( github.com/zeebo/errs v1.2.2 // indirect - google.golang.org/protobuf v1.26.0 // indirect + google.golang.org/protobuf v1.27.1 // indirect storj.io/drpc v0.0.0-00010101000000-000000000000 // indirect storj.io/drpc/internal/backcompat/servicedefs v0.0.0-00010101000000-000000000000 // indirect ) diff --git a/internal/backcompat/newservice/go.sum b/internal/backcompat/newservice/go.sum index c9b4de8..c129979 100644 --- a/internal/backcompat/newservice/go.sum +++ b/internal/backcompat/newservice/go.sum @@ -8,5 +8,5 @@ github.com/zeebo/errs v1.2.2/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtC golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= diff --git a/internal/backcompat/newservicedefs/go.mod b/internal/backcompat/newservicedefs/go.mod index 8fe1642..18d89e6 100644 --- a/internal/backcompat/newservicedefs/go.mod +++ b/internal/backcompat/newservicedefs/go.mod @@ -3,7 +3,7 @@ module storj.io/drpc/internal/backcompat/newservicedefs go 1.17 require ( - google.golang.org/protobuf v1.26.0 + google.golang.org/protobuf v1.27.1 storj.io/drpc v0.0.0-00010101000000-000000000000 ) diff --git a/internal/backcompat/newservicedefs/go.sum b/internal/backcompat/newservicedefs/go.sum index c9b4de8..c129979 100644 --- a/internal/backcompat/newservicedefs/go.sum +++ b/internal/backcompat/newservicedefs/go.sum @@ -8,5 +8,5 @@ github.com/zeebo/errs v1.2.2/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtC golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= diff --git a/internal/backcompat/newservicedefs/servicedefs.pb.go b/internal/backcompat/newservicedefs/servicedefs.pb.go index 12ced73..ec01117 100644 --- a/internal/backcompat/newservicedefs/servicedefs.pb.go +++ b/internal/backcompat/newservicedefs/servicedefs.pb.go @@ -3,8 +3,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.16.0 +// protoc-gen-go v1.27.1 +// protoc v3.18.0 // source: servicedefs.proto package servicedefs diff --git a/internal/grpccompat/basic_test.go b/internal/grpccompat/basic_test.go new file mode 100644 index 0000000..fdcdea9 --- /dev/null +++ b/internal/grpccompat/basic_test.go @@ -0,0 +1,37 @@ +// Copyright (C) 2021 Storj Labs, Inc. +// See LICENSE for copying information. + +package grpccompat + +import ( + "context" + "testing" + + "github.com/zeebo/assert" + "google.golang.org/protobuf/proto" +) + +func TestBasic(t *testing.T) { + impl := &serviceImpl{ + Method1Fn: func(ctx context.Context, in *In) (*Out, error) { + return asOut(in), nil + }, + } + + testCompat(t, impl, func(t *testing.T, cli Client, ensure func(*Out, error)) { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + in := &In{ + In: 5, + Buf: []byte("foo"), + Opt: proto.Int64(8), + } + + out, err := cli.Method1(ctx, in) + assert.NoError(t, err) + assert.That(t, proto.Equal(out, asOut(in))) + + ensure(out, err) + }) +} diff --git a/internal/grpccompat/benchmark_test.go b/internal/grpccompat/benchmark_test.go index 7b6914e..dc77dd4 100644 --- a/internal/grpccompat/benchmark_test.go +++ b/internal/grpccompat/benchmark_test.go @@ -5,7 +5,7 @@ package grpccompat import ( "context" - errors "errors" + "errors" "io" "testing" @@ -16,10 +16,6 @@ import ( "storj.io/drpc/drpcstream" ) -func asOut(in *In) *Out { - return &Out{Out: in.In, Buf: in.Buf} -} - var benchmarkImpl = &serviceImpl{ Method1Fn: func(ctx context.Context, in *In) (*Out, error) { return asOut(in), nil diff --git a/internal/grpccompat/common_test.go b/internal/grpccompat/common_test.go index 5791640..b6df40c 100644 --- a/internal/grpccompat/common_test.go +++ b/internal/grpccompat/common_test.go @@ -226,6 +226,10 @@ func checkGoroutines(t *testing.T) { func in(n int64) *In { return &In{In: n} } func out(n int64) *Out { return &Out{Out: n} } +func asOut(in *In) *Out { + return &Out{Out: in.In, Buf: in.Buf, Opt: in.Opt} +} + func createDRPCConnectionWithOptions(server DRPCServiceServer, opts drpcmanager.Options) (DRPCServiceClient, func()) { ctx := drpcctx.NewTracker(context.Background()) c1, c2 := pipe() diff --git a/internal/grpccompat/go.mod b/internal/grpccompat/go.mod index 405760e..ed77f08 100644 --- a/internal/grpccompat/go.mod +++ b/internal/grpccompat/go.mod @@ -7,7 +7,7 @@ require ( github.com/zeebo/assert v1.3.0 github.com/zeebo/errs v1.2.2 google.golang.org/grpc v1.36.0 - google.golang.org/protobuf v1.26.0 + google.golang.org/protobuf v1.27.1 storj.io/drpc v0.0.0-00010101000000-000000000000 ) diff --git a/internal/grpccompat/go.sum b/internal/grpccompat/go.sum index 5fd8e31..1bc0ea8 100644 --- a/internal/grpccompat/go.sum +++ b/internal/grpccompat/go.sum @@ -147,8 +147,8 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ= diff --git a/internal/grpccompat/service.pb.go b/internal/grpccompat/service.pb.go index 7897246..2228ae0 100644 --- a/internal/grpccompat/service.pb.go +++ b/internal/grpccompat/service.pb.go @@ -3,8 +3,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.16.0 +// protoc-gen-go v1.27.1 +// protoc v3.18.0 // source: service.proto package grpccompat @@ -30,6 +30,7 @@ type In struct { In int64 `protobuf:"varint,1,opt,name=in,proto3" json:"in,omitempty"` Buf []byte `protobuf:"bytes,2,opt,name=buf,proto3" json:"buf,omitempty"` + Opt *int64 `protobuf:"varint,3,opt,name=opt,proto3,oneof" json:"opt,omitempty"` } func (x *In) Reset() { @@ -78,6 +79,13 @@ func (x *In) GetBuf() []byte { return nil } +func (x *In) GetOpt() int64 { + if x != nil && x.Opt != nil { + return *x.Opt + } + return 0 +} + type Out struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -85,6 +93,7 @@ type Out struct { Out int64 `protobuf:"varint,1,opt,name=out,proto3" json:"out,omitempty"` Buf []byte `protobuf:"bytes,2,opt,name=buf,proto3" json:"buf,omitempty"` + Opt *int64 `protobuf:"varint,3,opt,name=opt,proto3,oneof" json:"opt,omitempty"` } func (x *Out) Reset() { @@ -133,30 +142,41 @@ func (x *Out) GetBuf() []byte { return nil } +func (x *Out) GetOpt() int64 { + if x != nil && x.Opt != nil { + return *x.Opt + } + return 0 +} + var File_service_proto protoreflect.FileDescriptor var file_service_proto_rawDesc = []byte{ 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, - 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x22, 0x26, 0x0a, 0x02, 0x49, 0x6e, 0x12, 0x0e, + 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x22, 0x45, 0x0a, 0x02, 0x49, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x62, 0x75, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x62, 0x75, 0x66, - 0x22, 0x29, 0x0a, 0x03, 0x4f, 0x75, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6f, 0x75, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6f, 0x75, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x62, 0x75, 0x66, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x62, 0x75, 0x66, 0x32, 0xa9, 0x01, 0x0a, 0x07, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x24, 0x0a, 0x07, 0x4d, 0x65, 0x74, 0x68, 0x6f, - 0x64, 0x31, 0x12, 0x0b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x49, 0x6e, 0x1a, - 0x0c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4f, 0x75, 0x74, 0x12, 0x26, 0x0a, - 0x07, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x32, 0x12, 0x0b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x49, 0x6e, 0x1a, 0x0c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x4f, 0x75, 0x74, 0x28, 0x01, 0x12, 0x26, 0x0a, 0x07, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x33, + 0x12, 0x15, 0x0a, 0x03, 0x6f, 0x70, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, + 0x03, 0x6f, 0x70, 0x74, 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x6f, 0x70, 0x74, 0x22, + 0x48, 0x0a, 0x03, 0x4f, 0x75, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6f, 0x75, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x03, 0x6f, 0x75, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x62, 0x75, 0x66, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x62, 0x75, 0x66, 0x12, 0x15, 0x0a, 0x03, 0x6f, 0x70, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x03, 0x6f, 0x70, 0x74, 0x88, 0x01, + 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x6f, 0x70, 0x74, 0x32, 0xa9, 0x01, 0x0a, 0x07, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x24, 0x0a, 0x07, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x31, 0x12, 0x0b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x49, 0x6e, 0x1a, 0x0c, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4f, 0x75, 0x74, 0x30, 0x01, 0x12, 0x28, 0x0a, - 0x07, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x34, 0x12, 0x0b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x49, 0x6e, 0x1a, 0x0c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x4f, 0x75, 0x74, 0x28, 0x01, 0x30, 0x01, 0x42, 0x23, 0x5a, 0x21, 0x73, 0x74, 0x6f, 0x72, 0x6a, - 0x2e, 0x69, 0x6f, 0x2f, 0x64, 0x72, 0x70, 0x63, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4f, 0x75, 0x74, 0x12, 0x26, 0x0a, 0x07, 0x4d, + 0x65, 0x74, 0x68, 0x6f, 0x64, 0x32, 0x12, 0x0b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x49, 0x6e, 0x1a, 0x0c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4f, 0x75, + 0x74, 0x28, 0x01, 0x12, 0x26, 0x0a, 0x07, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x33, 0x12, 0x0b, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x49, 0x6e, 0x1a, 0x0c, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4f, 0x75, 0x74, 0x30, 0x01, 0x12, 0x28, 0x0a, 0x07, 0x4d, + 0x65, 0x74, 0x68, 0x6f, 0x64, 0x34, 0x12, 0x0b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x49, 0x6e, 0x1a, 0x0c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x4f, 0x75, + 0x74, 0x28, 0x01, 0x30, 0x01, 0x42, 0x23, 0x5a, 0x21, 0x73, 0x74, 0x6f, 0x72, 0x6a, 0x2e, 0x69, + 0x6f, 0x2f, 0x64, 0x72, 0x70, 0x63, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, + 0x67, 0x72, 0x70, 0x63, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( @@ -223,6 +243,8 @@ func file_service_proto_init() { } } } + file_service_proto_msgTypes[0].OneofWrappers = []interface{}{} + file_service_proto_msgTypes[1].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ diff --git a/internal/grpccompat/service.proto b/internal/grpccompat/service.proto index 1f4dd37..368b2f7 100644 --- a/internal/grpccompat/service.proto +++ b/internal/grpccompat/service.proto @@ -16,9 +16,11 @@ service Service { message In { int64 in = 1; bytes buf = 2; + optional int64 opt = 3; } message Out { int64 out = 1; bytes buf = 2; + optional int64 opt = 3; } diff --git a/internal/integration/customservice/service.pb.go b/internal/integration/customservice/service.pb.go index 62e8fc3..6ae6deb 100644 --- a/internal/integration/customservice/service.pb.go +++ b/internal/integration/customservice/service.pb.go @@ -3,8 +3,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.16.0 +// protoc-gen-go v1.27.1 +// protoc v3.18.0 // source: service.proto package service diff --git a/internal/integration/go.mod b/internal/integration/go.mod index 5157979..8b0c8c5 100644 --- a/internal/integration/go.mod +++ b/internal/integration/go.mod @@ -6,7 +6,7 @@ require ( github.com/gogo/protobuf v1.3.2 github.com/zeebo/assert v1.3.0 github.com/zeebo/errs v1.2.2 - google.golang.org/protobuf v1.26.0 + google.golang.org/protobuf v1.27.1 storj.io/drpc v0.0.0-00010101000000-000000000000 ) diff --git a/internal/integration/go.sum b/internal/integration/go.sum index 8e60d06..3584070 100644 --- a/internal/integration/go.sum +++ b/internal/integration/go.sum @@ -38,5 +38,5 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= diff --git a/internal/integration/service/service.pb.go b/internal/integration/service/service.pb.go index 62e8fc3..6ae6deb 100644 --- a/internal/integration/service/service.pb.go +++ b/internal/integration/service/service.pb.go @@ -3,8 +3,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.16.0 +// protoc-gen-go v1.27.1 +// protoc v3.18.0 // source: service.proto package service diff --git a/internal/twirpcompat/clientcompat.pb.go b/internal/twirpcompat/clientcompat.pb.go index 4fdfcc5..598b63f 100644 --- a/internal/twirpcompat/clientcompat.pb.go +++ b/internal/twirpcompat/clientcompat.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.26.0 -// protoc v3.16.0 +// protoc-gen-go v1.27.1 +// protoc v3.18.0 // source: clientcompat.proto package twirpcompat diff --git a/internal/twirpcompat/go.sum b/internal/twirpcompat/go.sum index 605fb9f..01771ee 100644 --- a/internal/twirpcompat/go.sum +++ b/internal/twirpcompat/go.sum @@ -15,6 +15,5 @@ github.com/zeebo/hmux v0.3.1/go.mod h1:qHOtFf8FmwXOwAb8/Vq7VOBenZSTPGrduR7Qkwpiv golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= From 20dfd6291da9376c9f7bdeefcea14bab1f8ed004 Mon Sep 17 00:00:00 2001 From: Ethan Adams Date: Wed, 8 Dec 2021 10:10:47 -0600 Subject: [PATCH 3/6] Fixes "File is not `gofmt`-ed with `-s` (gofmt)" (#22) --- drpcdebug/log_disabled.go | 1 + drpcserver/util.go | 1 + 2 files changed, 2 insertions(+) diff --git a/drpcdebug/log_disabled.go b/drpcdebug/log_disabled.go index 4fad3ab..0ff4bfd 100644 --- a/drpcdebug/log_disabled.go +++ b/drpcdebug/log_disabled.go @@ -1,6 +1,7 @@ // Copyright (C) 2019 Storj Labs, Inc. // See LICENSE for copying information. +//go:build !debug // +build !debug package drpcdebug diff --git a/drpcserver/util.go b/drpcserver/util.go index f437702..33a9f2c 100644 --- a/drpcserver/util.go +++ b/drpcserver/util.go @@ -1,6 +1,7 @@ // Copyright (C) 2021 Storj Labs, Inc. // See LICENSE for copying information. +//go:build !windows // +build !windows package drpcserver From 89f52061e647e30932319bbb0ef265cd39c3c2c7 Mon Sep 17 00:00:00 2001 From: Jeff Wendling Date: Tue, 11 Jan 2022 12:37:56 -0500 Subject: [PATCH 4/6] drpcstream: control for max buffer size with many concurrent and potentially cached streams that send large messages, dropping large buffers can help with peak memory usage. Change-Id: Ia99f30ff78307bea909fde813c2ecb6667a4b1d8 --- drpcstream/README.md | 5 +++++ drpcstream/stream.go | 12 ++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/drpcstream/README.md b/drpcstream/README.md index 9ad0824..44809d0 100644 --- a/drpcstream/README.md +++ b/drpcstream/README.md @@ -21,6 +21,11 @@ type Options struct { // call RawFlush dynamically. ManualFlush bool + // MaximumBufferSize causes the Stream to drop any internal buffers that + // are larger than this amount to control maximum memory usage at the + // expense of more allocations. 0 is unlimited. + MaximumBufferSize int + // Internal contains options that are for internal use only. Internal drpcopts.Stream } diff --git a/drpcstream/stream.go b/drpcstream/stream.go index ce1aa4e..c004536 100644 --- a/drpcstream/stream.go +++ b/drpcstream/stream.go @@ -31,6 +31,11 @@ type Options struct { // call RawFlush dynamically. ManualFlush bool + // MaximumBufferSize causes the Stream to drop any internal buffers that + // are larger than this amount to control maximum memory usage at the + // expense of more allocations. 0 is unlimited. + MaximumBufferSize int + // Internal contains options that are for internal use only. Internal drpcopts.Stream } @@ -385,11 +390,14 @@ func (s *Stream) MsgSend(msg drpc.Message, enc drpc.Encoding) (err error) { s.write.Lock() defer s.write.Unlock() - s.wbuf, err = drpcenc.MarshalAppend(msg, enc, s.wbuf[:0]) + wbuf, err := drpcenc.MarshalAppend(msg, enc, s.wbuf[:0]) if err != nil { return errs.Wrap(err) } - if err := s.rawWriteLocked(drpcwire.KindMessage, s.wbuf); err != nil { + if s.opts.MaximumBufferSize == 0 || len(wbuf) < s.opts.MaximumBufferSize { + s.wbuf = wbuf + } + if err := s.rawWriteLocked(drpcwire.KindMessage, wbuf); err != nil { return err } if !s.opts.ManualFlush { From ca0e3b1f549b42757014da2ace39593d5b523a0f Mon Sep 17 00:00:00 2001 From: Jeff Wendling Date: Wed, 19 Jan 2022 16:37:40 -0500 Subject: [PATCH 5/6] drpcserver: log callback and temporary error sleeps It was possible before to spin a cpu core trying to accept from the tcp listener when it always returned a temporary error. Now, it will sleep for 500ms before trying again. Change-Id: I59d1503b4d14e9ded78d78c608ea4c416a4e10df --- drpcserver/README.md | 5 ++++ drpcserver/server.go | 40 +++++++++++++++++++++++--------- drpcserver/server_test.go | 48 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 82 insertions(+), 11 deletions(-) create mode 100644 drpcserver/server_test.go diff --git a/drpcserver/README.md b/drpcserver/README.md index 7481a82..1d2f663 100644 --- a/drpcserver/README.md +++ b/drpcserver/README.md @@ -12,6 +12,11 @@ Package drpcserver allows one to execute registered rpcs. type Options struct { // Manager controls the options we pass to the managers this server creates. Manager drpcmanager.Options + + // Log is called when errors happen that can not be returned up, like + // temporary network errors when accepting connections, or errors + // handling individual clients. It is not called if nil. + Log func(error) } ``` diff --git a/drpcserver/server.go b/drpcserver/server.go index c7fb71d..ba055e1 100644 --- a/drpcserver/server.go +++ b/drpcserver/server.go @@ -6,6 +6,7 @@ package drpcserver import ( "context" "net" + "time" "github.com/zeebo/errs" @@ -20,6 +21,11 @@ import ( type Options struct { // Manager controls the options we pass to the managers this server creates. Manager drpcmanager.Options + + // Log is called when errors happen that can not be returned up, like + // temporary network errors when accepting connections, or errors + // handling individual clients. It is not called if nil. + Log func(error) } // Server is an implementation of drpc.Server to serve drpc connections. @@ -67,6 +73,7 @@ func (s *Server) ServeOne(ctx context.Context, tr drpc.Transport) (err error) { // on new connections. func (s *Server) Serve(ctx context.Context, lis net.Listener) (err error) { tracker := drpcctx.NewTracker(ctx) + defer tracker.Wait() defer tracker.Cancel() tracker.Run(func(ctx context.Context) { @@ -77,24 +84,35 @@ func (s *Server) Serve(ctx context.Context, lis net.Listener) (err error) { for { conn, err := lis.Accept() if err != nil { + if ctx.Err() != nil { + return nil + } + if isTemporary(err) { + if s.opts.Log != nil { + s.opts.Log(err) + } + + t := time.NewTimer(500 * time.Millisecond) + select { + case <-t.C: + case <-ctx.Done(): + t.Stop() + return nil + } + continue } - select { - case <-ctx.Done(): - tracker.Wait() - return nil - default: - tracker.Cancel() - tracker.Wait() - return errs.Wrap(err) - } + + return errs.Wrap(err) } // TODO(jeff): connection limits? tracker.Run(func(ctx context.Context) { - // TODO(jeff): handle this error? - _ = s.ServeOne(ctx, conn) + err := s.ServeOne(ctx, conn) + if err != nil && s.opts.Log != nil { + s.opts.Log(err) + } }) } } diff --git a/drpcserver/server_test.go b/drpcserver/server_test.go new file mode 100644 index 0000000..181c374 --- /dev/null +++ b/drpcserver/server_test.go @@ -0,0 +1,48 @@ +// Copyright (C) 2022 Storj Labs, Inc. +// See LICENSE for copying information. + +package drpcserver + +import ( + "context" + "net" + "testing" + + "github.com/zeebo/assert" + + "storj.io/drpc/drpcctx" +) + +func TestServerTemporarySleep(t *testing.T) { + ctx := drpcctx.NewTracker(context.Background()) + defer ctx.Wait() + defer ctx.Cancel() + + calls := 0 + l := listener(func() (net.Conn, error) { + calls++ + switch calls { + case 1: + case 2: + ctx.Cancel() + default: + panic("spinning on temporary error") + } + + return nil, new(temporaryError) + }) + + assert.NoError(t, New(nil).Serve(ctx, l)) +} + +type listener func() (net.Conn, error) + +func (l listener) Accept() (net.Conn, error) { return l() } +func (l listener) Close() error { return nil } +func (l listener) Addr() net.Addr { return nil } + +type temporaryError struct{} + +func (temporaryError) Error() string { return "temporary error" } +func (temporaryError) Timeout() bool { return false } +func (temporaryError) Temporary() bool { return true } From f6e369438f636b47ee788095d3fc13062ffbd019 Mon Sep 17 00:00:00 2001 From: Jeff Wendling Date: Wed, 26 Jan 2022 15:00:39 -0500 Subject: [PATCH 6/6] drpcstream: set cancel state more often if a Close has started, and we Cancel, we should still set the cancelled state while Close is still executing. this is so that we don't surface the underying transport being closed errors. Change-Id: I2f3924f7b03c3952ab58b9952e4ae18ef1a5a88f --- drpcstream/stream.go | 4 ++-- drpcstream/stream_test.go | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/drpcstream/stream.go b/drpcstream/stream.go index c004536..4f54734 100644 --- a/drpcstream/stream.go +++ b/drpcstream/stream.go @@ -434,7 +434,7 @@ var ( // SendError terminates the stream and sends the error to the remote. It is a no-op if // the stream is already terminated. func (s *Stream) SendError(serr error) (err error) { - s.log("CALL", func() string { return fmt.Sprintf("SendError(%v)", err) }) + s.log("CALL", func() string { return fmt.Sprintf("SendError(%v)", serr) }) s.mu.Lock() if s.sigs.term.IsSet() { @@ -506,7 +506,7 @@ func (s *Stream) Cancel(err error) { s.mu.Lock() defer s.mu.Unlock() - if s.sigs.term.IsSet() { + if s.sigs.term.IsSet() && s.write.Unlocked() && s.read.Unlocked() { return } diff --git a/drpcstream/stream_test.go b/drpcstream/stream_test.go index c464051..a1117d3 100644 --- a/drpcstream/stream_test.go +++ b/drpcstream/stream_test.go @@ -169,3 +169,29 @@ func TestStream_ContextCancel(t *testing.T) { <-st.Context().Done() <-child.Done() } + +func TestStream_ConcurrentCloseCancel(t *testing.T) { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + pr, pw := io.Pipe() + defer func() { _ = pr.Close() }() + defer func() { _ = pw.Close() }() + + st := New(ctx, 0, drpcwire.NewWriter(pw, 0)) + + // start the Close call + errch := make(chan error, 1) + go func() { errch <- st.Close() }() + + // wait for the close to begin writing + _, err := pr.Read(make([]byte, 1)) + assert.NoError(t, err) + + // cancel the context and close the transport + st.Cancel(context.Canceled) + assert.NoError(t, pw.Close()) + + // we should always receive the canceled error + assert.That(t, errors.Is(<-errch, context.Canceled)) +}