forked from TrueCloudLab/frostfs-node
[#108] cmd/neofs-node: Listen new epoch notifications from morph
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
parent
0dab4b7581
commit
07fe49088c
5 changed files with 108 additions and 0 deletions
|
@ -1,11 +1,19 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/nspcc-dev/neo-go/pkg/util"
|
||||
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
|
||||
"github.com/nspcc-dev/neofs-node/pkg/morph/client/netmap"
|
||||
"github.com/nspcc-dev/neofs-node/pkg/morph/client/netmap/wrapper"
|
||||
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
||||
netmapEvent "github.com/nspcc-dev/neofs-node/pkg/morph/event/netmap"
|
||||
"github.com/nspcc-dev/neofs-node/pkg/morph/subscriber"
|
||||
)
|
||||
|
||||
const newEpochNotification = "NewEpoch"
|
||||
|
||||
func initMorphComponents(c *cfg) {
|
||||
var err error
|
||||
|
||||
|
@ -28,3 +36,51 @@ func initMorphComponents(c *cfg) {
|
|||
c.cfgObject.netMapStorage = wrap
|
||||
c.cfgNetmap.wrapper = wrap
|
||||
}
|
||||
|
||||
func listenMorphNotifications(c *cfg) {
|
||||
subs, err := subscriber.New(c.ctx, &subscriber.Params{
|
||||
Log: c.log,
|
||||
Endpoint: c.viper.GetString(cfgMorphNotifyRPCAddress),
|
||||
DialTimeout: c.viper.GetDuration(cfgMorphNotifyDialTimeout),
|
||||
})
|
||||
fatalOnErr(err)
|
||||
|
||||
lis, err := event.NewListener(event.ListenerParams{
|
||||
Logger: c.log,
|
||||
Subscriber: subs,
|
||||
})
|
||||
fatalOnErr(err)
|
||||
|
||||
c.workers = append(c.workers, newWorkerFromFunc(lis.Listen))
|
||||
|
||||
setNetmapNotificationParser(c, newEpochNotification, netmapEvent.ParseNewEpoch)
|
||||
registerNotificationHandlers(c.cfgNetmap.scriptHash, lis, c.cfgNetmap.parsers, c.cfgNetmap.subscribers)
|
||||
}
|
||||
|
||||
func registerNotificationHandlers(scHash util.Uint160, lis event.Listener, parsers map[event.Type]event.Parser,
|
||||
subs map[event.Type][]event.Handler) {
|
||||
for typ, handlers := range subs {
|
||||
pi := event.ParserInfo{}
|
||||
pi.SetType(typ)
|
||||
pi.SetScriptHash(scHash)
|
||||
|
||||
p, ok := parsers[typ]
|
||||
if !ok {
|
||||
panic(fmt.Sprintf("missing parser for event %s", typ))
|
||||
}
|
||||
|
||||
pi.SetParser(p)
|
||||
|
||||
lis.SetParser(pi)
|
||||
|
||||
for _, h := range handlers {
|
||||
hi := event.HandlerInfo{}
|
||||
hi.SetType(typ)
|
||||
hi.SetScriptHash(scHash)
|
||||
hi.SetHandler(h)
|
||||
|
||||
lis.RegisterHandler(hi)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue