This is an automated email from the ASF dual-hosted git repository.

liujun pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/dubbo-go.git


The following commit(s) were added to refs/heads/main by this push:
     new 7341d507b feat:save old service info (#2556)
7341d507b is described below

commit 7341d507bef2ad65346a37e9b0dfb41fa7036539
Author: finalt <[email protected]>
AuthorDate: Fri Jan 5 10:32:28 2024 +0800

    feat:save old service info (#2556)
---
 protocol/triple/server.go | 30 +++++++++++++++++++++++++++++-
 1 file changed, 29 insertions(+), 1 deletion(-)

diff --git a/protocol/triple/server.go b/protocol/triple/server.go
index 7a2dc7d04..70ca805a8 100644
--- a/protocol/triple/server.go
+++ b/protocol/triple/server.go
@@ -27,6 +27,8 @@ import (
 import (
        "github.com/dubbogo/gost/log/logger"
 
+       grpc_go "github.com/dubbogo/grpc-go"
+
        "github.com/dustin/go-humanize"
 
        "google.golang.org/grpc"
@@ -174,9 +176,10 @@ func (s *Server) compatHandleService(interfaceName string, 
group, version string
                if !ok {
                        info := createServiceInfoWithReflection(service)
                        s.handleServiceWithInfo(interfaceName, invoker, info, 
opts...)
+                       s.saveServiceInfo(interfaceName, info)
                        continue
                }
-
+               s.compatSaveServiceInfo(ds.XXX_ServiceDesc())
                // inject invoker, it has all invocation logics
                ds.XXX_SetProxyImpl(invoker)
                s.compatRegisterHandler(interfaceName, ds, opts...)
@@ -318,6 +321,31 @@ func (s *Server) saveServiceInfo(interfaceName string, 
info *server.ServiceInfo)
        s.services[interfaceName] = ret
 }
 
+func (s *Server) compatSaveServiceInfo(desc *grpc_go.ServiceDesc) {
+       ret := grpc.ServiceInfo{}
+       ret.Methods = make([]grpc.MethodInfo, 0, 
len(desc.Streams)+len(desc.Methods))
+       for _, method := range desc.Methods {
+               md := grpc.MethodInfo{
+                       Name:           method.MethodName,
+                       IsClientStream: false,
+                       IsServerStream: false,
+               }
+               ret.Methods = append(ret.Methods, md)
+       }
+       for _, stream := range desc.Streams {
+               md := grpc.MethodInfo{
+                       Name:           stream.StreamName,
+                       IsClientStream: stream.ClientStreams,
+                       IsServerStream: stream.ServerStreams,
+               }
+               ret.Methods = append(ret.Methods, md)
+       }
+       ret.Metadata = desc.Metadata
+       s.mu.Lock()
+       defer s.mu.Unlock()
+       s.services[desc.ServiceName] = ret
+}
+
 func (s *Server) GetServiceInfo() map[string]grpc.ServiceInfo {
        s.mu.RLock()
        defer s.mu.RUnlock()

Reply via email to