forked from TrueCloudLab/frostfs-node
[#86] Run timer for gas emission event
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
This commit is contained in:
parent
6bc787bb19
commit
4308a6f522
4 changed files with 32 additions and 12 deletions
|
@ -76,6 +76,7 @@ func defaultConfiguration(cfg *viper.Viper) {
|
||||||
cfg.SetDefault("contracts.gas", "668e0c1f9d7b70a99dd9e06eadd4c784d641afbc")
|
cfg.SetDefault("contracts.gas", "668e0c1f9d7b70a99dd9e06eadd4c784d641afbc")
|
||||||
|
|
||||||
cfg.SetDefault("timers.epoch", "5s")
|
cfg.SetDefault("timers.epoch", "5s")
|
||||||
|
cfg.SetDefault("timers.emit", "30s")
|
||||||
|
|
||||||
cfg.SetDefault("workers.netmap", "10")
|
cfg.SetDefault("workers.netmap", "10")
|
||||||
cfg.SetDefault("workers.balance", "10")
|
cfg.SetDefault("workers.balance", "10")
|
||||||
|
|
|
@ -105,8 +105,9 @@ func New(ctx context.Context, log *zap.Logger, cfg *viper.Viper) (*Server, error
|
||||||
|
|
||||||
// create local timer instance
|
// create local timer instance
|
||||||
server.localTimers = timers.New(&timers.Params{
|
server.localTimers = timers.New(&timers.Params{
|
||||||
Log: log,
|
Log: log,
|
||||||
EpochDuration: cfg.GetDuration("timers.epoch"),
|
EpochDuration: cfg.GetDuration("timers.epoch"),
|
||||||
|
AlphabetDuration: cfg.GetDuration("timers.emit"),
|
||||||
})
|
})
|
||||||
|
|
||||||
morphChain := &chainParams{
|
morphChain := &chainParams{
|
||||||
|
|
7
pkg/innerring/timers/alphabet.go
Normal file
7
pkg/innerring/timers/alphabet.go
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
package timers
|
||||||
|
|
||||||
|
// NewAlphabetEmitTick is a event for gas emission from alphabet contract.
|
||||||
|
type NewAlphabetEmitTick struct{}
|
||||||
|
|
||||||
|
// MorphEvent implements Event interface.
|
||||||
|
func (NewAlphabetEmitTick) MorphEvent() {}
|
|
@ -20,32 +20,38 @@ type (
|
||||||
Timers struct {
|
Timers struct {
|
||||||
log *zap.Logger
|
log *zap.Logger
|
||||||
|
|
||||||
epoch localTimer
|
epoch localTimer
|
||||||
|
alphabet localTimer
|
||||||
}
|
}
|
||||||
|
|
||||||
// Params for timers instance constructor.
|
// Params for timers instance constructor.
|
||||||
Params struct {
|
Params struct {
|
||||||
Log *zap.Logger
|
Log *zap.Logger
|
||||||
EpochDuration time.Duration
|
EpochDuration time.Duration
|
||||||
|
AlphabetDuration time.Duration
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
// EpochTimer is a type for HandlerInfo structure.
|
// EpochTimer is a type for HandlerInfo structure.
|
||||||
EpochTimer = "EpochTimer"
|
EpochTimer = "EpochTimer"
|
||||||
|
// AlphabetTimer is a type for HandlerInfo structure.
|
||||||
|
AlphabetTimer = "AlphabetTimer"
|
||||||
)
|
)
|
||||||
|
|
||||||
// New creates instance of timers component.
|
// New creates instance of timers component.
|
||||||
func New(p *Params) *Timers {
|
func New(p *Params) *Timers {
|
||||||
return &Timers{
|
return &Timers{
|
||||||
log: p.Log,
|
log: p.Log,
|
||||||
epoch: localTimer{duration: p.EpochDuration},
|
epoch: localTimer{duration: p.EpochDuration},
|
||||||
|
alphabet: localTimer{duration: p.AlphabetDuration},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start runs all available local timers.
|
// Start runs all available local timers.
|
||||||
func (t *Timers) Start(ctx context.Context) {
|
func (t *Timers) Start(ctx context.Context) {
|
||||||
t.epoch.timer = time.NewTimer(t.epoch.duration)
|
t.epoch.timer = time.NewTimer(t.epoch.duration)
|
||||||
|
t.alphabet.timer = time.NewTimer(t.alphabet.duration)
|
||||||
go t.serve(ctx)
|
go t.serve(ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,16 +61,19 @@ func (t *Timers) serve(ctx context.Context) {
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
t.log.Info("timers are getting stopped")
|
t.log.Info("timers are getting stopped")
|
||||||
t.epoch.timer.Stop()
|
t.epoch.timer.Stop()
|
||||||
|
t.alphabet.timer.Stop()
|
||||||
|
|
||||||
return
|
return
|
||||||
case <-t.epoch.timer.C:
|
case <-t.epoch.timer.C:
|
||||||
// reset timer so it can tick once again
|
// reset timer so it can tick once again
|
||||||
t.epoch.timer.Reset(t.epoch.duration)
|
t.epoch.timer.Reset(t.epoch.duration)
|
||||||
|
// call handler, it should be always set
|
||||||
// call handler if it is set
|
t.epoch.handler(NewEpochTick{})
|
||||||
if t.epoch.handler != nil {
|
case <-t.alphabet.timer.C:
|
||||||
t.epoch.handler(NewEpochTick{})
|
// reset timer so it can tick once again
|
||||||
}
|
t.alphabet.timer.Reset(t.alphabet.duration)
|
||||||
|
// call handler, it should be always set
|
||||||
|
t.alphabet.handler(NewAlphabetEmitTick{})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -78,6 +87,8 @@ func (t *Timers) RegisterHandler(h event.HandlerInfo) error {
|
||||||
switch h.GetType() {
|
switch h.GetType() {
|
||||||
case EpochTimer:
|
case EpochTimer:
|
||||||
t.epoch.handler = h.Handler()
|
t.epoch.handler = h.Handler()
|
||||||
|
case AlphabetTimer:
|
||||||
|
t.alphabet.handler = h.Handler()
|
||||||
default:
|
default:
|
||||||
return errors.New("ir/timers: unknown handler type")
|
return errors.New("ir/timers: unknown handler type")
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue