frostfs-node/services/public/container/service.go

79 lines
1.8 KiB
Go
Raw Normal View History

package container
import (
"github.com/nspcc-dev/neofs-api-go/container"
"github.com/nspcc-dev/neofs-node/internal"
"github.com/nspcc-dev/neofs-node/lib/acl"
libcnr "github.com/nspcc-dev/neofs-node/lib/container"
"github.com/nspcc-dev/neofs-node/lib/core"
"github.com/nspcc-dev/neofs-node/modules/grpc"
"go.uber.org/zap"
)
type (
// Service is an interface of the server of Container service.
Service interface {
grpc.Service
container.ServiceServer
}
// HealthChecker is an interface of node healthiness checking tool.
HealthChecker interface {
Healthy() error
}
// Params groups the parameters of Container service server's constructor.
Params struct {
Logger *zap.Logger
Healthy HealthChecker
Store libcnr.Storage
ExtendedACLStore acl.BinaryExtendedACLStore
}
cnrService struct {
log *zap.Logger
healthy HealthChecker
cnrStore libcnr.Storage
aclStore acl.BinaryExtendedACLStore
}
)
const (
errEmptyLogger = internal.Error("empty log component")
errEmptyStore = internal.Error("empty store component")
errEmptyHealthChecker = internal.Error("empty healthy component")
)
var requestVerifyFunc = core.VerifyRequestWithSignatures
// New is an Container service server's constructor.
func New(p Params) (Service, error) {
switch {
case p.Logger == nil:
return nil, errEmptyLogger
case p.Store == nil:
return nil, errEmptyStore
case p.Healthy == nil:
return nil, errEmptyHealthChecker
case p.ExtendedACLStore == nil:
return nil, acl.ErrNilBinaryExtendedACLStore
}
return &cnrService{
log: p.Logger,
healthy: p.Healthy,
cnrStore: p.Store,
aclStore: p.ExtendedACLStore,
}, nil
}
func (cnrService) Name() string { return "ContainerService" }
func (s cnrService) Register(g *grpc.Server) { container.RegisterServiceServer(g, s) }