refactor GRPC connection management
parent
852d0f4131
commit
118d4ffcc6
|
|
@ -1,36 +1,48 @@
|
|||
package kernel
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"net"
|
||||
"time"
|
||||
|
||||
"google.golang.org/grpc"
|
||||
)
|
||||
|
||||
type ServerBuilder func(grpc.ServiceRegistrar)
|
||||
type ServerBuilder func(grpc.ServiceRegistrar, string)
|
||||
|
||||
var (
|
||||
grpcServerInstance *grpc.Server
|
||||
listener net.Listener
|
||||
)
|
||||
|
||||
func StartGRPCServer(port int, sb ServerBuilder, opts ...grpc.ServerOption) (err error) {
|
||||
func StartGRPCServer(ctx context.Context, port int, sb ServerBuilder, opts ...grpc.ServerOption) (endpoint string, err error) {
|
||||
if grpcServerInstance != nil {
|
||||
return errors.New("There can only be one GRPC server running at a time")
|
||||
err = errors.New("There can only be one GRPC server running at a time")
|
||||
return
|
||||
}
|
||||
|
||||
listener, err = net.Listen("tcp", fmt.Sprintf("0.0.0.0:%d", port))
|
||||
endpoint = fmt.Sprintf("0.0.0.0:%d", port)
|
||||
listener, err = net.Listen("tcp", endpoint)
|
||||
if err != nil {
|
||||
return fmt.Errorf("could not start tcp listener: %w", err)
|
||||
endpoint = ""
|
||||
err = fmt.Errorf("could not start tcp listener: %w", err)
|
||||
return
|
||||
}
|
||||
|
||||
grpcServerInstance = grpc.NewServer(opts...)
|
||||
|
||||
sb(grpcServerInstance)
|
||||
sb(grpcServerInstance, endpoint)
|
||||
|
||||
InfoLog.Printf("Listening on 0.0.0.0:%d", port)
|
||||
return grpcServerInstance.Serve(listener)
|
||||
if err = grpcServerInstance.Serve(listener); err != nil {
|
||||
endpoint = ""
|
||||
err = fmt.Errorf("could not serve GRPC server over listener: %w", err)
|
||||
return
|
||||
}
|
||||
|
||||
InfoLog.Printf("Listening for GRPC requests on %s", endpoint)
|
||||
return
|
||||
}
|
||||
|
||||
func StopGRPCServer() error {
|
||||
|
|
|
|||
|
|
@ -10,8 +10,8 @@ import (
|
|||
"google.golang.org/grpc/status"
|
||||
)
|
||||
|
||||
func NewRunnerServer(d *runner.Domain) func(grpcServer grpc.ServiceRegistrar) {
|
||||
return func(grpcServer grpc.ServiceRegistrar) {
|
||||
func NewRunnerServer(d *runner.Domain) func(grpcServer grpc.ServiceRegistrar, endpoint string) {
|
||||
return func(grpcServer grpc.ServiceRegistrar, endpoint string) {
|
||||
api.RegisterRunnerServer(grpcServer, &runnerHandler{domain: d})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -81,7 +81,13 @@ func (app *RunnerApp) Start(ctx context.Context) error {
|
|||
})
|
||||
|
||||
return ioc.Invoke(func(d *runner.Domain) error {
|
||||
return kernel.StartGRPCServer(app.Port, internal.NewRunnerServer(d))
|
||||
runnerService := internal.NewRunnerServer(d)
|
||||
|
||||
if _, err := kernel.StartGRPCServer(ctx, app.Port, runnerService); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue