frostfs-node/pkg/services/object/get/service.go
Anton Nikiforov 112a7c690f [#1103] node: Implement Get\Head requests for EC object
Signed-off-by: Anton Nikiforov <an.nikiforov@yadro.com>
2024-04-24 18:15:53 +03:00

58 lines
1.4 KiB
Go

package getsvc
import (
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/container"
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util/logger"
"go.uber.org/zap"
)
// Option is a Service's constructor option.
type Option func(*Service)
// Service utility serving requests of Object.Get service.
type Service struct {
log *logger.Logger
localStorage localStorage
traverserGenerator traverserGenerator
epochSource epochSource
keyStore keyStorage
remoteStorageConstructor remoteStorageConstructor
containerSource container.Source
}
// New creates, initializes and returns utility serving
// Object.Get service requests.
func New(
ks keyStorage,
es epochSource,
e localStorageEngine,
tg traverserGenerator,
cc clientConstructor,
cs container.Source,
opts ...Option,
) *Service {
result := &Service{
keyStore: ks,
epochSource: es,
log: &logger.Logger{Logger: zap.L()},
localStorage: &engineLocalStorage{
engine: e,
},
traverserGenerator: tg,
remoteStorageConstructor: &multiclientRemoteStorageConstructor{
clientConstructor: cc,
},
containerSource: cs,
}
for _, option := range opts {
option(result)
}
return result
}
// WithLogger returns option to specify Get service's logger.
func WithLogger(l *logger.Logger) Option {
return func(s *Service) {
s.log = &logger.Logger{Logger: l.With(zap.String("component", "Object.Get service"))}
}
}