diff --git a/pkg/innerring/innerring.go b/pkg/innerring/innerring.go index 08b5936ef..1c6425dc9 100644 --- a/pkg/innerring/innerring.go +++ b/pkg/innerring/innerring.go @@ -373,6 +373,11 @@ func New(ctx context.Context, log *zap.Logger, cfg *viper.Viper) (*Server, error settlement.WithLogger(server.log), ) + locodeValidator, err := server.newLocodeValidator(cfg) + if err != nil { + return nil, err + } + // create netmap processor netmapProcessor, err := netmap.New(&netmap.Params{ Log: log, @@ -391,6 +396,7 @@ func New(ctx context.Context, log *zap.Logger, cfg *viper.Viper) (*Server, error AuditSettlementsHandler: server.onlyActiveEventHandler( settlementProcessor.HandleAuditEvent, ), + NodeValidator: locodeValidator, }) if err != nil { return nil, err diff --git a/pkg/innerring/locode.go b/pkg/innerring/locode.go new file mode 100644 index 000000000..09c038bf9 --- /dev/null +++ b/pkg/innerring/locode.go @@ -0,0 +1,51 @@ +package innerring + +import ( + "github.com/nspcc-dev/neofs-node/pkg/innerring/processors/netmap" + irlocode "github.com/nspcc-dev/neofs-node/pkg/innerring/processors/netmap/nodevalidation/locode" + "github.com/nspcc-dev/neofs-node/pkg/util/locode" + locodedb "github.com/nspcc-dev/neofs-node/pkg/util/locode/db" + locodebolt "github.com/nspcc-dev/neofs-node/pkg/util/locode/db/boltdb" + "github.com/spf13/viper" +) + +func (s *Server) newLocodeValidator(cfg *viper.Viper) (netmap.NodeValidator, error) { + locodeDB := locodebolt.New(locodebolt.Prm{ + Path: cfg.GetString("locode.db.path"), + }) + + s.registerStarter(locodeDB.Open) + s.registerIOCloser(locodeDB) + + return irlocode.New(irlocode.Prm{ + DB: (*locodeBoltDBWrapper)(locodeDB), + }), nil +} + +type locodeBoltEntryWrapper struct { + *locodedb.Key + *locodedb.Record +} + +func (l *locodeBoltEntryWrapper) LocationName() string { + return l.Record.CityName() +} + +type locodeBoltDBWrapper locodebolt.DB + +func (l *locodeBoltDBWrapper) Get(lc *locode.LOCODE) (irlocode.Record, error) { + key, err := locodedb.NewKey(*lc) + if err != nil { + return nil, err + } + + rec, err := (*locodebolt.DB)(l).Get(*key) + if err != nil { + return nil, err + } + + return &locodeBoltEntryWrapper{ + Key: key, + Record: rec, + }, nil +}