"io"
"net"
+ hclog "github.com/hashicorp/go-hclog"
+ "github.com/hashicorp/go-plugin/internal/plugin"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
"google.golang.org/grpc/health"
config GRPCServerConfig
server *grpc.Server
broker *GRPCBroker
+
+ logger hclog.Logger
}
// ServerProtocol impl.
// Register the broker service
brokerServer := newGRPCBrokerServer()
- RegisterGRPCBrokerServer(s.server, brokerServer)
+ plugin.RegisterGRPCBrokerServer(s.server, brokerServer)
s.broker = newGRPCBroker(brokerServer, s.TLS)
go s.broker.Run()
+ // Register the controller
+ controllerServer := &grpcControllerServer{
+ server: s,
+ }
+ plugin.RegisterGRPCControllerServer(s.server, controllerServer)
+
// Register all our plugins onto the gRPC server.
for k, raw := range s.Plugins {
p, ok := raw.(GRPCPlugin)
}
if err := p.GRPCServer(s.broker, s.server); err != nil {
- return fmt.Errorf("error registring %q: %s", k, err)
+ return fmt.Errorf("error registering %q: %s", k, err)
}
}
}
func (s *GRPCServer) Serve(lis net.Listener) {
- // Start serving in a goroutine
- go s.server.Serve(lis)
-
- // Wait until graceful completion
- <-s.DoneCh
+ defer close(s.DoneCh)
+ err := s.server.Serve(lis)
+ if err != nil {
+ s.logger.Error("grpc server", "error", err)
+ }
}
// GRPCServerConfig is the extra configuration passed along for consumers