add persistence for mpool config
This commit is contained in:
parent
1b56b88132
commit
f6e8f02fd2
@ -1,9 +1,12 @@
|
|||||||
package messagepool
|
package messagepool
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/filecoin-project/lotus/chain/types"
|
"github.com/filecoin-project/lotus/chain/types"
|
||||||
|
"github.com/filecoin-project/lotus/node/modules/dtypes"
|
||||||
|
"github.com/ipfs/go-datastore"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -11,8 +14,37 @@ var (
|
|||||||
MemPoolSizeLimitHiDefault = 30000
|
MemPoolSizeLimitHiDefault = 30000
|
||||||
MemPoolSizeLimitLoDefault = 20000
|
MemPoolSizeLimitLoDefault = 20000
|
||||||
PruneCooldownDefault = time.Minute
|
PruneCooldownDefault = time.Minute
|
||||||
|
|
||||||
|
ConfigKey = datastore.NewKey("/mpool/config")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func loadConfig(ds dtypes.MetadataDS) (*types.MpoolConfig, error) {
|
||||||
|
haveCfg, err := ds.Has(ConfigKey)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if haveCfg {
|
||||||
|
cfgBytes, err := ds.Get(ConfigKey)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
cfg := new(types.MpoolConfig)
|
||||||
|
err = json.Unmarshal(cfgBytes, cfg)
|
||||||
|
return cfg, err
|
||||||
|
} else {
|
||||||
|
return DefaultConfig(), nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func saveConfig(cfg *types.MpoolConfig, ds dtypes.MetadataDS) error {
|
||||||
|
cfgBytes, err := json.Marshal(cfg)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return ds.Put(ConfigKey, cfgBytes)
|
||||||
|
}
|
||||||
|
|
||||||
func (mp *MessagePool) GetConfig() *types.MpoolConfig {
|
func (mp *MessagePool) GetConfig() *types.MpoolConfig {
|
||||||
mp.cfgLk.Lock()
|
mp.cfgLk.Lock()
|
||||||
defer mp.cfgLk.Unlock()
|
defer mp.cfgLk.Unlock()
|
||||||
@ -24,6 +56,10 @@ func (mp *MessagePool) SetConfig(cfg *types.MpoolConfig) {
|
|||||||
mp.cfgLk.Lock()
|
mp.cfgLk.Lock()
|
||||||
mp.cfg = cfg
|
mp.cfg = cfg
|
||||||
mp.rbfNum = types.NewInt(uint64((cfg.ReplaceByFeeRatio - 1) * RbfDenom))
|
mp.rbfNum = types.NewInt(uint64((cfg.ReplaceByFeeRatio - 1) * RbfDenom))
|
||||||
|
err := saveConfig(cfg, mp.ds)
|
||||||
|
if err != nil {
|
||||||
|
log.Warnf("error persisting mpool config: %s", err)
|
||||||
|
}
|
||||||
mp.cfgLk.Unlock()
|
mp.cfgLk.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -67,6 +67,8 @@ const (
|
|||||||
type MessagePool struct {
|
type MessagePool struct {
|
||||||
lk sync.Mutex
|
lk sync.Mutex
|
||||||
|
|
||||||
|
ds dtypes.MetadataDS
|
||||||
|
|
||||||
closer chan struct{}
|
closer chan struct{}
|
||||||
repubTk *clock.Ticker
|
repubTk *clock.Ticker
|
||||||
|
|
||||||
@ -209,9 +211,16 @@ func (mpp *mpoolProvider) ChainComputeBaseFee(ctx context.Context, ts *types.Tip
|
|||||||
func New(api Provider, ds dtypes.MetadataDS, netName dtypes.NetworkName) (*MessagePool, error) {
|
func New(api Provider, ds dtypes.MetadataDS, netName dtypes.NetworkName) (*MessagePool, error) {
|
||||||
cache, _ := lru.New2Q(build.BlsSignatureCacheSize)
|
cache, _ := lru.New2Q(build.BlsSignatureCacheSize)
|
||||||
verifcache, _ := lru.New2Q(build.VerifSigCacheSize)
|
verifcache, _ := lru.New2Q(build.VerifSigCacheSize)
|
||||||
cfg := DefaultConfig()
|
|
||||||
|
cfg, err := loadConfig(ds)
|
||||||
|
if err != nil {
|
||||||
|
if err != nil {
|
||||||
|
return nil, xerrors.Errorf("error loading mpool config: %w", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
mp := &MessagePool{
|
mp := &MessagePool{
|
||||||
|
ds: ds,
|
||||||
closer: make(chan struct{}),
|
closer: make(chan struct{}),
|
||||||
repubTk: build.Clock.Ticker(time.Duration(build.BlockDelaySecs) * 10 * time.Second),
|
repubTk: build.Clock.Ticker(time.Duration(build.BlockDelaySecs) * 10 * time.Second),
|
||||||
localAddrs: make(map[address.Address]struct{}),
|
localAddrs: make(map[address.Address]struct{}),
|
||||||
|
Loading…
Reference in New Issue
Block a user