proxy: add RegisterServiceDescs

Signed-off-by: Adphi <philippe.adrien.nousse@gmail.com>
This commit is contained in:
Adphi 2025-04-14 09:34:15 +02:00
parent 8999dedd32
commit 533a0ea43a
Signed by: adphi
GPG Key ID: 46BE4062DB2397FF
2 changed files with 31 additions and 4 deletions

View File

@ -40,6 +40,35 @@ func RegisterService(server grpc.ServiceRegistrar, director StreamDirector, serv
server.RegisterService(fakeDesc, streamer)
}
func RegisterServiceDescs(server grpc.ServiceRegistrar, director StreamDirector, descs ...grpc.ServiceDesc) {
streamer := &handler{director}
for _, desc := range descs {
fakeDesc := &grpc.ServiceDesc{
ServiceName: desc.ServiceName,
HandlerType: (*interface{})(nil),
}
for _, desc := range desc.Methods {
streamDesc := grpc.StreamDesc{
StreamName: desc.MethodName,
Handler: streamer.handler,
ServerStreams: true,
ClientStreams: true,
}
fakeDesc.Streams = append(fakeDesc.Streams, streamDesc)
}
for _, desc := range desc.Streams {
streamDesc := grpc.StreamDesc{
StreamName: desc.StreamName,
Handler: streamer.handler,
ServerStreams: true,
ClientStreams: true,
}
fakeDesc.Streams = append(fakeDesc.Streams, streamDesc)
}
server.RegisterService(fakeDesc, streamer)
}
}
// TransparentHandler returns a handler that attempts to proxy all requests that are not registered in the server.
// The indented use here is as a transparent proxy, where the server doesn't know about the services implemented by the
// backends. It should be used as a `grpc.UnknownServiceHandler`.

View File

@ -216,10 +216,8 @@ func (s *ProxyHappySuite) SetupSuite() {
grpc.CustomCodec(proxy.Codec()),
grpc.UnknownServiceHandler(proxy.TransparentHandler(director)),
)
// Ping handler is handled as an explicit registration and not as a TransparentHandler.
proxy.RegisterService(s.proxy, director,
"mwitkow.testproto.TestService",
"Ping")
proxy.RegisterServiceDescs(s.proxy, director, pb.TestService_ServiceDesc)
// Start the serving loops.
s.T().Logf("starting grpc.Server at: %v", s.serverListener.Addr().String())