Skip to content

Commit

Permalink
fix(server/v2/grpc): fix reflection (#23333)
Browse files Browse the repository at this point in the history
(cherry picked from commit c79e19d)

# Conflicts:
#	CHANGELOG.md
#	server/grpc/gogoreflection/serverreflection.go
#	tests/systemtests/go.mod
#	tests/systemtests/go.sum
  • Loading branch information
julienrbrt authored and mergify[bot] committed Jan 13, 2025
1 parent e19ef65 commit 699c221
Show file tree
Hide file tree
Showing 6 changed files with 218 additions and 131 deletions.
17 changes: 17 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,23 @@ Every module contains its own CHANGELOG.md. Please refer to the module you are i
* (x/auth/tx) [23144](https://github.com/cosmos/cosmos-sdk/pull/23144) Add missing CacheWithValue for ExtensionOptions.
* (x/auth/tx) [#23148](https://github.com/cosmos/cosmos-sdk/pull/23148) Avoid panic from intoAnyV2 when v1.PublicKey is optional.

<<<<<<< HEAD
=======
### API Breaking Changes

* (x/params) [#22995](https://github.com/cosmos/cosmos-sdk/pull/22995) Remove `x/params`. Migrate to the new params system introduced in `v0.47` as demonstrated [here](https://github.com/cosmos/cosmos-sdk/blob/main/UPGRADING.md#xparams).
* (testutil) [#22392](https://github.com/cosmos/cosmos-sdk/pull/22392) Remove `testutil/network` package. Use the integration framework or systemtests framework instead.

#### Removal of v0 components

This subsection lists the API breaking changes that are [part of the removal of v0 components](https://github.com/cosmos/cosmos-sdk/issues/22904). The v0 components were deprecated in `v0.52` and are now removed.

* (simapp) [#23009](https://github.com/cosmos/cosmos-sdk/pull/23009) Simapp has been removed. Check-out Simapp/v2 instead.
* (server) [#23018](https://github.com/cosmos/cosmos-sdk/pull/23018) [#23238](https://github.com/cosmos/cosmos-sdk/pull/23238) The server package has been removed. Use server/v2 instead
* (x/genutil) [#23238](https://github.com/cosmos/cosmos-sdk/pull/23238) Genutil commands specific to a baseapp chain have been deleted.
* (client) [#22904](https://github.com/cosmos/cosmos-sdk/issues/22904) v1 specific client commands have been removed.

>>>>>>> c79e19dfc (fix(server/v2/grpc): fix reflection (#23333))
### Deprecated

* (modules) [#22994](https://github.com/cosmos/cosmos-sdk/pull/22994) Deprecate `Invariants` and associated methods.
Expand Down
90 changes: 90 additions & 0 deletions server/grpc/gogoreflection/serverreflection.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,21 +49,42 @@ import (
"google.golang.org/grpc/codes"
rpb "google.golang.org/grpc/reflection/grpc_reflection_v1alpha"
"google.golang.org/grpc/status"
<<<<<<< HEAD:server/grpc/gogoreflection/serverreflection.go

Check failure on line 52 in server/grpc/gogoreflection/serverreflection.go

View workflow job for this annotation

GitHub Actions / split-test-files

missing import path

Check failure on line 52 in server/grpc/gogoreflection/serverreflection.go

View workflow job for this annotation

GitHub Actions / dependency-review

missing import path

Check failure on line 52 in server/grpc/gogoreflection/serverreflection.go

View workflow job for this annotation

GitHub Actions / dependency-review

missing import path

Check failure on line 52 in server/grpc/gogoreflection/serverreflection.go

View workflow job for this annotation

GitHub Actions / dependency-review

missing import path

Check failure on line 52 in server/grpc/gogoreflection/serverreflection.go

View workflow job for this annotation

GitHub Actions / dependency-review

expected ';', found ':'

Check failure on line 52 in server/grpc/gogoreflection/serverreflection.go

View workflow job for this annotation

GitHub Actions / dependency-review

missing import path
=======
"google.golang.org/protobuf/reflect/protodesc"
"google.golang.org/protobuf/reflect/protoreflect"
"google.golang.org/protobuf/reflect/protoregistry"

"cosmossdk.io/core/log"
>>>>>>> c79e19dfc (fix(server/v2/grpc): fix reflection (#23333)):server/v2/api/grpc/gogoreflection/serverreflection.go

Check failure on line 59 in server/grpc/gogoreflection/serverreflection.go

View workflow job for this annotation

GitHub Actions / dependency-review

missing import path

Check failure on line 59 in server/grpc/gogoreflection/serverreflection.go

View workflow job for this annotation

GitHub Actions / dependency-review

expected ';', found ':'

Check failure on line 59 in server/grpc/gogoreflection/serverreflection.go

View workflow job for this annotation

GitHub Actions / dependency-review

illegal character U+0023 '#'

Check failure on line 59 in server/grpc/gogoreflection/serverreflection.go

View workflow job for this annotation

GitHub Actions / dependency-review

expected declaration, found 'go'
)

type serverReflectionServer struct {
rpb.UnimplementedServerReflectionServer
s *grpc.Server

<<<<<<< HEAD:server/grpc/gogoreflection/serverreflection.go

Check failure on line 66 in server/grpc/gogoreflection/serverreflection.go

View workflow job for this annotation

GitHub Actions / dependency-review

expected '}', found '<<'

Check failure on line 66 in server/grpc/gogoreflection/serverreflection.go

View workflow job for this annotation

GitHub Actions / dependency-review

expected ';', found '<<'
=======
messages []string

>>>>>>> c79e19dfc (fix(server/v2/grpc): fix reflection (#23333)):server/v2/api/grpc/gogoreflection/serverreflection.go
initSymbols sync.Once
serviceNames []string
symbols map[string]*dpb.FileDescriptorProto // map of fully-qualified names to files
}

// Register registers the server reflection service on the given gRPC server.
<<<<<<< HEAD:server/grpc/gogoreflection/serverreflection.go
func Register(s *grpc.Server) {
rpb.RegisterServerReflectionServer(s, &serverReflectionServer{
s: s,
=======
func Register(s *grpc.Server, messages []string, logger log.Logger) {
rpb.RegisterServerReflectionServer(s, &serverReflectionServer{
s: s,
messages: messages,
log: logger,
>>>>>>> c79e19dfc (fix(server/v2/grpc): fix reflection (#23333)):server/v2/api/grpc/gogoreflection/serverreflection.go
})
}

Expand All @@ -77,7 +98,13 @@ type protoMessage interface {

func (s *serverReflectionServer) getSymbols() (svcNames []string, symbolIndex map[string]*dpb.FileDescriptorProto) {
s.initSymbols.Do(func() {
<<<<<<< HEAD:server/grpc/gogoreflection/serverreflection.go
serviceInfo := s.s.GetServiceInfo()
=======
s.symbols = map[string]*dpb.FileDescriptorProto{}
services, fds := s.getServices(s.messages)
s.serviceNames = services
>>>>>>> c79e19dfc (fix(server/v2/grpc): fix reflection (#23333)):server/v2/api/grpc/gogoreflection/serverreflection.go

s.symbols = map[string]*dpb.FileDescriptorProto{}
s.serviceNames = make([]string, 0, len(serviceInfo))
Expand Down Expand Up @@ -471,3 +498,66 @@ func (s *serverReflectionServer) ServerReflectionInfo(stream rpb.ServerReflectio
}
}
}
<<<<<<< HEAD:server/grpc/gogoreflection/serverreflection.go
=======

// getServices gets the unique list of services given a list of methods.
func (s *serverReflectionServer) getServices(messages []string) (svcs []string, fds []*dpb.FileDescriptorProto) {
registry, err := gogoproto.MergedRegistry()
if err != nil {
s.log.Error("unable to load merged registry", "err", err)
return nil, nil
}
seenSvc := map[protoreflect.FullName]struct{}{}
for _, messageName := range messages {
md, err := registry.FindDescriptorByName(protoreflect.FullName(messageName))
if err != nil {
s.log.Error("unable to load message descriptor", "message", messageName, "err", err)
continue
}

svc, ok := findServiceForMessage(registry, md.(protoreflect.MessageDescriptor))
if !ok {
// if a service is not found for the message, simply skip
// this is likely the message isn't part of a service and using appmodulev2.Handler instead.
continue
}

if _, seen := seenSvc[svc.FullName()]; !seen {
svcs = append(svcs, string(svc.FullName()))
file := svc.ParentFile()
fds = append(fds, protodesc.ToFileDescriptorProto(file))
}

seenSvc[svc.FullName()] = struct{}{}
}

return svcs, fds
}

func findServiceForMessage(registry *protoregistry.Files, messageDesc protoreflect.MessageDescriptor) (protoreflect.ServiceDescriptor, bool) {
var (
service protoreflect.ServiceDescriptor
found bool
)

registry.RangeFiles(func(fileDescriptor protoreflect.FileDescriptor) bool {
for i := 0; i < fileDescriptor.Services().Len(); i++ {
serviceDesc := fileDescriptor.Services().Get(i)

for j := 0; j < serviceDesc.Methods().Len(); j++ {
methodDesc := serviceDesc.Methods().Get(j)

if methodDesc.Input() == messageDesc || methodDesc.Output() == messageDesc {
service = serviceDesc
found = true
return false
}
}
}
return true
})

return service, found
}
>>>>>>> c79e19dfc (fix(server/v2/grpc): fix reflection (#23333)):server/v2/api/grpc/gogoreflection/serverreflection.go
127 changes: 0 additions & 127 deletions tests/integration/runtime/query_test.go

This file was deleted.

16 changes: 16 additions & 0 deletions tests/systemtests/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,13 @@ require (
cosmossdk.io/math v1.5.0
cosmossdk.io/systemtests v1.0.0
github.com/cosmos/cosmos-sdk v0.50.11
<<<<<<< HEAD
github.com/stretchr/testify v1.10.0
github.com/tidwall/gjson v1.14.2
github.com/tidwall/sjson v1.2.5
=======
github.com/fullstorydev/grpcurl v1.9.2
>>>>>>> c79e19dfc (fix(server/v2/grpc): fix reflection (#23333))
)

require (
Expand All @@ -27,12 +31,14 @@ require (
github.com/DataDog/zstd v1.5.6 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/bgentry/speakeasy v0.2.0 // indirect
github.com/bufbuild/protocompile v0.10.0 // indirect
github.com/bytedance/sonic v1.12.6 // indirect
github.com/bytedance/sonic/loader v0.2.1 // indirect
github.com/cenkalti/backoff/v4 v4.1.3 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/cloudwego/base64x v0.1.4 // indirect
github.com/cloudwego/iasm v0.2.0 // indirect
github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 // indirect
github.com/cockroachdb/apd/v3 v3.2.1 // indirect
github.com/cockroachdb/errors v1.11.3 // indirect
github.com/cockroachdb/fifo v0.0.0-20240816210425-c5d0cb0b6fc0 // indirect
Expand Down Expand Up @@ -62,6 +68,8 @@ require (
github.com/dustin/go-humanize v1.0.1 // indirect
github.com/dvsekhvalnov/jose2go v1.6.0 // indirect
github.com/emicklei/dot v1.6.2 // indirect
github.com/envoyproxy/go-control-plane v0.13.1 // indirect
github.com/envoyproxy/protoc-gen-validate v1.1.0 // indirect
github.com/fatih/color v1.18.0 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.8.0 // indirect
Expand Down Expand Up @@ -98,6 +106,7 @@ require (
github.com/iancoleman/strcase v0.3.0 // indirect
github.com/improbable-eng/grpc-web v0.15.0 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/jhump/protoreflect v1.16.0
github.com/jmhodges/levigo v1.0.0 // indirect
github.com/klauspost/compress v1.17.10 // indirect
github.com/klauspost/cpuid/v2 v2.2.9 // indirect
Expand All @@ -117,6 +126,7 @@ require (
github.com/pelletier/go-toml/v2 v2.2.3 // indirect
github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/prometheus/client_golang v1.20.5 // indirect
github.com/prometheus/client_model v0.6.1 // indirect
Expand Down Expand Up @@ -157,9 +167,15 @@ require (
golang.org/x/text v0.21.0 // indirect
google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20241015192408-796eee8c2d53 // indirect
<<<<<<< HEAD
google.golang.org/genproto/googleapis/rpc v0.0.0-20241219192143-6b3ec007d9bb // indirect
google.golang.org/grpc v1.69.2 // indirect
google.golang.org/protobuf v1.36.1 // indirect
=======
google.golang.org/genproto/googleapis/rpc v0.0.0-20250106144421-5f5ef82da422 // indirect
google.golang.org/grpc v1.69.2
google.golang.org/protobuf v1.36.2 // indirect
>>>>>>> c79e19dfc (fix(server/v2/grpc): fix reflection (#23333))
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
gotest.tools/v3 v3.5.1 // indirect
Expand Down
Loading

0 comments on commit 699c221

Please sign in to comment.