pc batch: drop individual precommit processing
This commit is contained in:
parent
7db6f31cca
commit
d6aed7ba83
@ -636,7 +636,8 @@
|
|||||||
#CommitBatchSlack = "1h0m0s"
|
#CommitBatchSlack = "1h0m0s"
|
||||||
|
|
||||||
# network BaseFee below which to stop doing precommit batching, instead
|
# network BaseFee below which to stop doing precommit batching, instead
|
||||||
# sending precommit messages to the chain individually
|
# sending precommit messages to the chain individually. When the basefee is
|
||||||
|
# below this threshold, precommit messages will get sent out immediately.
|
||||||
#
|
#
|
||||||
# type: types.FIL
|
# type: types.FIL
|
||||||
# env var: LOTUS_SEALING_BATCHPRECOMMITABOVEBASEFEE
|
# env var: LOTUS_SEALING_BATCHPRECOMMITABOVEBASEFEE
|
||||||
|
@ -1263,7 +1263,8 @@ This is useful for forcing all deals to be assigned as snap deals to sectors mar
|
|||||||
Type: "types.FIL",
|
Type: "types.FIL",
|
||||||
|
|
||||||
Comment: `network BaseFee below which to stop doing precommit batching, instead
|
Comment: `network BaseFee below which to stop doing precommit batching, instead
|
||||||
sending precommit messages to the chain individually`,
|
sending precommit messages to the chain individually. When the basefee is
|
||||||
|
below this threshold, precommit messages will get sent out immediately.`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Name: "AggregateAboveBaseFee",
|
Name: "AggregateAboveBaseFee",
|
||||||
|
@ -408,7 +408,8 @@ type SealingConfig struct {
|
|||||||
CommitBatchSlack Duration
|
CommitBatchSlack Duration
|
||||||
|
|
||||||
// network BaseFee below which to stop doing precommit batching, instead
|
// network BaseFee below which to stop doing precommit batching, instead
|
||||||
// sending precommit messages to the chain individually
|
// sending precommit messages to the chain individually. When the basefee is
|
||||||
|
// below this threshold, precommit messages will get sent out immediately.
|
||||||
BatchPreCommitAboveBaseFee types.FIL
|
BatchPreCommitAboveBaseFee types.FIL
|
||||||
|
|
||||||
// network BaseFee below which to stop doing commit aggregation, instead
|
// network BaseFee below which to stop doing commit aggregation, instead
|
||||||
|
@ -7,7 +7,6 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/ipfs/go-cid"
|
|
||||||
"golang.org/x/xerrors"
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
@ -193,33 +192,30 @@ func (b *PreCommitBatcher) maybeStartBatch(notif bool) ([]sealiface.PreCommitBat
|
|||||||
return nil, xerrors.Errorf("getting config: %w", err)
|
return nil, xerrors.Errorf("getting config: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if notif && total < cfg.MaxPreCommitBatch {
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
ts, err := b.api.ChainHead(b.mctx)
|
ts, err := b.api.ChainHead(b.mctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Drop this once nv14 has come and gone
|
curBasefeeLow := false
|
||||||
|
if !cfg.BatchPreCommitAboveBaseFee.Equals(big.Zero()) && ts.MinTicketBlock().ParentBaseFee.LessThan(cfg.BatchPreCommitAboveBaseFee) {
|
||||||
|
curBasefeeLow = true
|
||||||
|
}
|
||||||
|
|
||||||
|
// if this wasn't an user-forced batch, and we're not at/above the max batch size,
|
||||||
|
// and we're not above the basefee threshold, don't batch yet
|
||||||
|
if notif && total < cfg.MaxPreCommitBatch && !curBasefeeLow {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
nv, err := b.api.StateNetworkVersion(b.mctx, ts.Key())
|
nv, err := b.api.StateNetworkVersion(b.mctx, ts.Key())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, xerrors.Errorf("couldn't get network version: %w", err)
|
return nil, xerrors.Errorf("couldn't get network version: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
individual := false
|
// For precommits the only method to precommit sectors after nv21(22?) is to use the new precommit_batch2 method
|
||||||
if !cfg.BatchPreCommitAboveBaseFee.Equals(big.Zero()) && ts.MinTicketBlock().ParentBaseFee.LessThan(cfg.BatchPreCommitAboveBaseFee) && nv >= network.Version14 {
|
// So we always batch
|
||||||
individual = true
|
res, err := b.processBatch(cfg, ts.Key(), ts.MinTicketBlock().ParentBaseFee, nv)
|
||||||
}
|
|
||||||
|
|
||||||
// todo support multiple batches
|
|
||||||
var res []sealiface.PreCommitBatchRes
|
|
||||||
if !individual {
|
|
||||||
res, err = b.processBatch(cfg, ts.Key(), ts.MinTicketBlock().ParentBaseFee, nv)
|
|
||||||
} else {
|
|
||||||
res, err = b.processIndividually(cfg)
|
|
||||||
}
|
|
||||||
if err != nil && len(res) == 0 {
|
if err != nil && len(res) == 0 {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -243,83 +239,6 @@ func (b *PreCommitBatcher) maybeStartBatch(notif bool) ([]sealiface.PreCommitBat
|
|||||||
return res, nil
|
return res, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *PreCommitBatcher) processIndividually(cfg sealiface.Config) ([]sealiface.PreCommitBatchRes, error) {
|
|
||||||
mi, err := b.api.StateMinerInfo(b.mctx, b.maddr, types.EmptyTSK)
|
|
||||||
if err != nil {
|
|
||||||
return nil, xerrors.Errorf("couldn't get miner info: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
avail := types.TotalFilecoinInt
|
|
||||||
|
|
||||||
if cfg.CollateralFromMinerBalance && !cfg.DisableCollateralFallback {
|
|
||||||
avail, err = b.api.StateMinerAvailableBalance(b.mctx, b.maddr, types.EmptyTSK)
|
|
||||||
if err != nil {
|
|
||||||
return nil, xerrors.Errorf("getting available miner balance: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
avail = big.Sub(avail, cfg.AvailableBalanceBuffer)
|
|
||||||
if avail.LessThan(big.Zero()) {
|
|
||||||
avail = big.Zero()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var res []sealiface.PreCommitBatchRes
|
|
||||||
|
|
||||||
for sn, info := range b.todo {
|
|
||||||
r := sealiface.PreCommitBatchRes{
|
|
||||||
Sectors: []abi.SectorNumber{sn},
|
|
||||||
}
|
|
||||||
|
|
||||||
mcid, err := b.processSingle(cfg, mi, &avail, info)
|
|
||||||
if err != nil {
|
|
||||||
r.Error = err.Error()
|
|
||||||
} else {
|
|
||||||
r.Msg = &mcid
|
|
||||||
}
|
|
||||||
|
|
||||||
res = append(res, r)
|
|
||||||
}
|
|
||||||
|
|
||||||
return res, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (b *PreCommitBatcher) processSingle(cfg sealiface.Config, mi api.MinerInfo, avail *abi.TokenAmount, entry *preCommitEntry) (cid.Cid, error) {
|
|
||||||
msgParams := infoToPreCommitSectorParams(entry.pci)
|
|
||||||
enc := new(bytes.Buffer)
|
|
||||||
|
|
||||||
if err := msgParams.MarshalCBOR(enc); err != nil {
|
|
||||||
return cid.Undef, xerrors.Errorf("marshaling precommit params: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
deposit := entry.deposit
|
|
||||||
if cfg.CollateralFromMinerBalance {
|
|
||||||
c := big.Sub(deposit, *avail)
|
|
||||||
*avail = big.Sub(*avail, deposit)
|
|
||||||
deposit = c
|
|
||||||
|
|
||||||
if deposit.LessThan(big.Zero()) {
|
|
||||||
deposit = big.Zero()
|
|
||||||
}
|
|
||||||
if (*avail).LessThan(big.Zero()) {
|
|
||||||
*avail = big.Zero()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
goodFunds := big.Add(deposit, big.Int(b.feeCfg.MaxPreCommitGasFee))
|
|
||||||
|
|
||||||
from, _, err := b.addrSel.AddressFor(b.mctx, b.api, mi, api.PreCommitAddr, goodFunds, deposit)
|
|
||||||
if err != nil {
|
|
||||||
return cid.Undef, xerrors.Errorf("no good address to send precommit message from: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
mcid, err := sendMsg(b.mctx, b.api, from, b.maddr, builtin.MethodsMiner.PreCommitSector, deposit, big.Int(b.feeCfg.MaxPreCommitGasFee), enc.Bytes())
|
|
||||||
if err != nil {
|
|
||||||
return cid.Undef, xerrors.Errorf("pushing message to mpool: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return mcid, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (b *PreCommitBatcher) processPreCommitBatch(cfg sealiface.Config, bf abi.TokenAmount, entries []*preCommitEntry, nv network.Version) ([]sealiface.PreCommitBatchRes, error) {
|
func (b *PreCommitBatcher) processPreCommitBatch(cfg sealiface.Config, bf abi.TokenAmount, entries []*preCommitEntry, nv network.Version) ([]sealiface.PreCommitBatchRes, error) {
|
||||||
params := miner.PreCommitSectorBatchParams2{}
|
params := miner.PreCommitSectorBatchParams2{}
|
||||||
deposit := big.Zero()
|
deposit := big.Zero()
|
||||||
|
Loading…
Reference in New Issue
Block a user