[#1893] neofs-node: Do not fail unless all gRPC endpoints are unavailable

Signed-off-by: Evgenii Stratonikov <evgeniy@morphbits.ru>
This commit is contained in:
Evgenii Stratonikov 2022-10-25 09:48:02 +03:00 committed by fyrchik
parent 1e6588e761
commit 280e56f4bb
3 changed files with 25 additions and 7 deletions

View file

@ -26,6 +26,7 @@ Changelog for NeoFS Node
- `neofs-adm` now works correctly with a committee of more than 4 nodes (#1949, #1959) - `neofs-adm` now works correctly with a committee of more than 4 nodes (#1949, #1959)
- Closing a shard now waits until GC background workers stop (#1964) - Closing a shard now waits until GC background workers stop (#1964)
- Make it possible to use `shard.ContainerSize` in read-only mode (#1975) - Make it possible to use `shard.ContainerSize` in read-only mode (#1975)
- Storage node now starts if at least one gRPC enpoint is available (#1893)
### Removed ### Removed
### Updated ### Updated

View file

@ -9,6 +9,7 @@ import (
controlSvc "github.com/nspcc-dev/neofs-node/pkg/services/control/server" controlSvc "github.com/nspcc-dev/neofs-node/pkg/services/control/server"
"github.com/nspcc-dev/neofs-node/pkg/services/tree" "github.com/nspcc-dev/neofs-node/pkg/services/tree"
cid "github.com/nspcc-dev/neofs-sdk-go/container/id" cid "github.com/nspcc-dev/neofs-sdk-go/container/id"
"go.uber.org/zap"
"google.golang.org/grpc" "google.golang.org/grpc"
) )
@ -50,7 +51,10 @@ func initControlService(c *cfg) {
) )
lis, err := net.Listen("tcp", endpoint) lis, err := net.Listen("tcp", endpoint)
fatalOnErr(err) if err != nil {
c.log.Error("can't listen gRPC endpoint (control)", zap.Error(err))
return
}
c.cfgControlService.server = grpc.NewServer() c.cfgControlService.server = grpc.NewServer()

View file

@ -2,6 +2,7 @@ package main
import ( import (
"crypto/tls" "crypto/tls"
"errors"
"fmt" "fmt"
"net" "net"
"time" "time"
@ -14,12 +15,8 @@ import (
) )
func initGRPC(c *cfg) { func initGRPC(c *cfg) {
var successCount int
grpcconfig.IterateEndpoints(c.appCfg, func(sc *grpcconfig.Config) { grpcconfig.IterateEndpoints(c.appCfg, func(sc *grpcconfig.Config) {
lis, err := net.Listen("tcp", sc.Endpoint())
fatalOnErr(err)
c.cfgGRPC.listeners = append(c.cfgGRPC.listeners, lis)
serverOpts := []grpc.ServerOption{ serverOpts := []grpc.ServerOption{
grpc.MaxSendMsgSize(maxMsgSize), grpc.MaxSendMsgSize(maxMsgSize),
} }
@ -28,7 +25,10 @@ func initGRPC(c *cfg) {
if tlsCfg != nil { if tlsCfg != nil {
cert, err := tls.LoadX509KeyPair(tlsCfg.CertificateFile(), tlsCfg.KeyFile()) cert, err := tls.LoadX509KeyPair(tlsCfg.CertificateFile(), tlsCfg.KeyFile())
fatalOnErrDetails("could not read certificate from file", err) if err != nil {
c.log.Error("could not read certificate from file", zap.Error(err))
return
}
var cipherSuites []uint16 var cipherSuites []uint16
if !tlsCfg.UseInsecureCrypto() { if !tlsCfg.UseInsecureCrypto() {
@ -54,6 +54,14 @@ func initGRPC(c *cfg) {
serverOpts = append(serverOpts, grpc.Creds(creds)) serverOpts = append(serverOpts, grpc.Creds(creds))
} }
lis, err := net.Listen("tcp", sc.Endpoint())
if err != nil {
c.log.Error("can't listen gRPC endpoint", zap.Error(err))
return
}
c.cfgGRPC.listeners = append(c.cfgGRPC.listeners, lis)
srv := grpc.NewServer(serverOpts...) srv := grpc.NewServer(serverOpts...)
c.onShutdown(func() { c.onShutdown(func() {
@ -61,7 +69,12 @@ func initGRPC(c *cfg) {
}) })
c.cfgGRPC.servers = append(c.cfgGRPC.servers, srv) c.cfgGRPC.servers = append(c.cfgGRPC.servers, srv)
successCount++
}) })
if successCount == 0 {
fatalOnErr(errors.New("could not listen to any gRPC endpoints"))
}
} }
func serveGRPC(c *cfg) { func serveGRPC(c *cfg) {