[#1643] innerring: Exit if we cannot bind to the control endpoint

Return listen errors in a synchronous fashion.
Another solution would be to use buffered channel, but this is not
scalable: for each new similar runner we would need to extend the
buffer.

Signed-off-by: Evgenii Stratonikov <evgeniy@morphbits.ru>
This commit is contained in:
Evgenii Stratonikov 2022-07-30 07:53:35 +03:00 committed by Pavel Karpy
parent 0a60524a9c
commit 9a5f9d6f0e
2 changed files with 8 additions and 5 deletions

View file

@ -10,6 +10,7 @@ Changelog for NeoFS Node
### Fixed
- Losing request context in eACL response checks (#1595)
- `neofs-ir` no longer hangs if it cannot bind to the control endpoint (#1643)
- Do not require `lifetime` flag in `session create` CLI command (#1655)
### Removed

View file

@ -121,7 +121,7 @@ type (
// Set of component runners which
// should report start errors
// to the application.
runners []func(chan<- error)
runners []func(chan<- error) error
subnetHandler
}
@ -256,7 +256,9 @@ func (s *Server) Start(ctx context.Context, intError chan<- error) (err error) {
}
for _, runner := range s.runners {
runner(intError)
if err := runner(intError); err != nil {
return err
}
}
go s.morphListener.ListenWithError(ctx, morphErr) // listen for neo:morph events
@ -891,16 +893,16 @@ func New(ctx context.Context, log *zap.Logger, cfg *viper.Viper, errChan chan<-
grpcControlSrv := grpc.NewServer()
control.RegisterControlServiceServer(grpcControlSrv, controlSvc)
server.runners = append(server.runners, func(ch chan<- error) {
server.runners = append(server.runners, func(ch chan<- error) error {
lis, err := net.Listen("tcp", controlSvcEndpoint)
if err != nil {
ch <- err
return
return err
}
go func() {
ch <- grpcControlSrv.Serve(lis)
}()
return nil
})
server.registerNoErrCloser(grpcControlSrv.GracefulStop)