diff --git a/reflection/serverreflection.go b/reflection/serverreflection.go index 3c1fc9d7..0daa096f 100644 --- a/reflection/serverreflection.go +++ b/reflection/serverreflection.go @@ -214,20 +214,9 @@ func (s *serverReflectionServer) serviceMetadataForSymbol(name string) (interfac return nil, fmt.Errorf("unknown symbol: %v", name) } - // Search for method in info.Methods. + // Search for method name in info.Methods. var found bool for _, m := range info.Methods { - if m == name[pos+1:] { - found = true - break - } - } - if found { - return info.Metadata, nil - } - - // Search for stream in info.Streams. - for _, m := range info.Streams { if m.Name == name[pos+1:] { found = true break diff --git a/server.go b/server.go index 478277ea..f7b8319b 100644 --- a/server.go +++ b/server.go @@ -245,9 +245,9 @@ func (s *Server) register(sd *ServiceDesc, ss interface{}) { s.m[sd.ServiceName] = srv } -// StreamInfo contains information about a streaming RPC. -type StreamInfo struct { - // Name is the RPC name only, without the service name or package name. +// MethodInfo contains information about an RPC. +type MethodInfo struct { + // Name is the method name only, without the service name or package name. Name string // IsClientStream indicates whether the RPC is a client streaming RPC. IsClientStream bool @@ -255,12 +255,9 @@ type StreamInfo struct { IsServerStream bool } -// ServiceInfo contains unary RPC names, streaming RPC infos and metadata for a service. +// ServiceInfo contains unary RPC method info, streaming RPC methid info and metadata for a service. type ServiceInfo struct { - // Methods are unary RPC names only, without the service name or package name. - Methods []string - // Streams are streaming RPC names and streaming types. - Streams []*StreamInfo + Methods []MethodInfo // Metadata is the metadata specified in ServiceDesc when registering service. Metadata interface{} } @@ -270,14 +267,17 @@ type ServiceInfo struct { func (s *Server) GetServiceInfo() map[string]*ServiceInfo { ret := make(map[string]*ServiceInfo) for n, srv := range s.m { - methods := make([]string, 0, len(srv.md)) + methods := make([]MethodInfo, 0, len(srv.md)+len(srv.sd)) for m := range srv.md { - methods = append(methods, m) + methods = append(methods, MethodInfo{ + Name: m, + IsClientStream: false, + IsServerStream: false, + }) } - streams := make([]*StreamInfo, 0, len(srv.sd)) - for s, d := range srv.sd { - streams = append(streams, &StreamInfo{ - Name: s, + for m, d := range srv.sd { + methods = append(methods, MethodInfo{ + Name: m, IsClientStream: d.ClientStreams, IsServerStream: d.ServerStreams, }) @@ -285,7 +285,6 @@ func (s *Server) GetServiceInfo() map[string]*ServiceInfo { ret[n] = &ServiceInfo{ Methods: methods, - Streams: streams, Metadata: srv.mdata, } } diff --git a/server_test.go b/server_test.go index d623764a..eb598a51 100644 --- a/server_test.go +++ b/server_test.go @@ -92,14 +92,17 @@ func TestGetServiceInfo(t *testing.T) { info := server.GetServiceInfo() want := map[string]*ServiceInfo{ "grpc.testing.EmptyService": &ServiceInfo{ - Methods: []string{ - "EmptyCall", - }, - Streams: []*StreamInfo{&StreamInfo{ - Name: "EmptyStream", - IsClientStream: true, - IsServerStream: false, - }}, + Methods: []MethodInfo{ + MethodInfo{ + Name: "EmptyCall", + IsClientStream: false, + IsServerStream: false, + }, + MethodInfo{ + Name: "EmptyStream", + IsClientStream: true, + IsServerStream: false, + }}, Metadata: []int{0, 2, 1, 3}, }, }