forked from TrueCloudLab/frostfs-node
[#965] policer: Implement continuous replication
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
This commit is contained in:
parent
20f0b29a6e
commit
a74a402a7d
5 changed files with 145 additions and 159 deletions
|
@ -197,6 +197,10 @@ type cfgLocalStorage struct {
|
|||
|
||||
type cfgObjectRoutines struct {
|
||||
putRemote *ants.Pool
|
||||
|
||||
putRemoteCapacity int
|
||||
|
||||
replication *ants.Pool
|
||||
}
|
||||
|
||||
type cfgControlService struct {
|
||||
|
@ -449,10 +453,13 @@ func initObjectPool(cfg *config.Config) (pool cfgObjectRoutines) {
|
|||
|
||||
optNonBlocking := ants.WithNonblocking(true)
|
||||
|
||||
pool.putRemote, err = ants.NewPool(objectconfig.Put(cfg).PoolSizeRemote(), optNonBlocking)
|
||||
if err != nil {
|
||||
fatalOnErr(err)
|
||||
}
|
||||
pool.putRemoteCapacity = objectconfig.Put(cfg).PoolSizeRemote()
|
||||
|
||||
pool.putRemote, err = ants.NewPool(pool.putRemoteCapacity, optNonBlocking)
|
||||
fatalOnErr(err)
|
||||
|
||||
pool.replication, err = ants.NewPool(pool.putRemoteCapacity)
|
||||
fatalOnErr(err)
|
||||
|
||||
return pool
|
||||
}
|
||||
|
@ -486,3 +493,10 @@ func (c *cfg) bootstrap() error {
|
|||
func (c *cfg) needBootstrap() bool {
|
||||
return c.cfgNetmap.needBootstrap
|
||||
}
|
||||
|
||||
// ObjectServiceLoad implements system loader interface for policer component.
|
||||
// It is calculated as size/capacity ratio of "remote object put" worker.
|
||||
// Returns float value between 0.0 and 1.0.
|
||||
func (c *cfg) ObjectServiceLoad() float64 {
|
||||
return float64(c.cfgObject.pool.putRemote.Running()) / float64(c.cfgObject.pool.putRemoteCapacity)
|
||||
}
|
||||
|
|
|
@ -17,7 +17,6 @@ import (
|
|||
morphClient "github.com/nspcc-dev/neofs-node/pkg/morph/client"
|
||||
cntrwrp "github.com/nspcc-dev/neofs-node/pkg/morph/client/container/wrapper"
|
||||
nmwrp "github.com/nspcc-dev/neofs-node/pkg/morph/client/netmap/wrapper"
|
||||
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
||||
objectTransportGRPC "github.com/nspcc-dev/neofs-node/pkg/network/transport/object/grpc"
|
||||
objectService "github.com/nspcc-dev/neofs-node/pkg/services/object"
|
||||
"github.com/nspcc-dev/neofs-node/pkg/services/object/acl"
|
||||
|
@ -232,8 +231,6 @@ func initObjectService(c *cfg) {
|
|||
|
||||
c.workers = append(c.workers, repl)
|
||||
|
||||
ch := make(chan *policer.Task, 1)
|
||||
|
||||
pol := policer.New(
|
||||
policer.WithLogger(c.log),
|
||||
policer.WithLocalStorage(ls),
|
||||
|
@ -241,9 +238,6 @@ func initObjectService(c *cfg) {
|
|||
policer.WithPlacementBuilder(
|
||||
placement.NewNetworkMapSourceBuilder(c.cfgObject.netMapSource),
|
||||
),
|
||||
policer.WithWorkScope(100),
|
||||
policer.WithExpansionRate(10),
|
||||
policer.WithTrigger(ch),
|
||||
policer.WithRemoteHeader(
|
||||
headsvc.NewRemoteHeader(keyStorage, clientConstructor),
|
||||
),
|
||||
|
@ -260,18 +254,11 @@ func initObjectService(c *cfg) {
|
|||
)
|
||||
}
|
||||
}),
|
||||
policer.WithMaxCapacity(c.cfgObject.pool.putRemoteCapacity),
|
||||
policer.WithPool(c.cfgObject.pool.replication),
|
||||
policer.WithNodeLoader(c),
|
||||
)
|
||||
|
||||
addNewEpochNotificationHandler(c, func(ev event.Event) {
|
||||
select {
|
||||
case ch <- new(policer.Task):
|
||||
case <-c.ctx.Done():
|
||||
close(ch)
|
||||
default:
|
||||
c.log.Info("policer is busy")
|
||||
}
|
||||
})
|
||||
|
||||
traverseGen := util.NewTraverserGenerator(c.cfgObject.netMapSource, c.cfgObject.cnrSource, c)
|
||||
|
||||
c.workers = append(c.workers, pol)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue