From 3acd846dcd9a5fc425fcb2dd4463b8cb34507f01 Mon Sep 17 00:00:00 2001 From: Peter Rabbitson Date: Fri, 21 May 2021 15:00:21 +0200 Subject: [PATCH 1/6] Fix logging around mineOne - A nil MiningBaseInfo is *NOT* unexpected: it happens when one is in penalty https://github.com/filecoin-project/lotus/blob/v1.9.0/chain/stmgr/utils.go#L500-L502 - Remove the log from IsRoundWinner(): all we care about is the randbase epoch --- chain/gen/gen.go | 9 ------- miner/miner.go | 67 ++++++++++++++++++++++++++++++++---------------- 2 files changed, 45 insertions(+), 31 deletions(-) diff --git a/chain/gen/gen.go b/chain/gen/gen.go index 0cbdb218823..aa0f7df8850 100644 --- a/chain/gen/gen.go +++ b/chain/gen/gen.go @@ -658,15 +658,6 @@ func IsRoundWinner(ctx context.Context, ts *types.TipSet, round abi.ChainEpoch, ep := &types.ElectionProof{VRFProof: vrfout} j := ep.ComputeWinCount(mbi.MinerPower, mbi.NetworkPower) ep.WinCount = j - - log.Infow("completed winAttemptVRF", - "beaconRound", brand.Round, - "beaconDataB64", b64.EncodeToString(brand.Data), - "electionRandB64", b64.EncodeToString(electionRand), - "vrfB64", b64.EncodeToString(vrfout), - "winCount", j, - ) - if j < 1 { return nil, nil } diff --git a/miner/miner.go b/miner/miner.go index a77e1c18bc5..5fbc9aae30c 100644 --- a/miner/miner.go +++ b/miner/miner.go @@ -18,6 +18,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/go-state-types/crypto" lru "github.com/hashicorp/golang-lru" @@ -415,36 +416,51 @@ func (m *Miner) GetBestMiningCandidate(ctx context.Context) (*MiningBase, error) // This method does the following: // // 1. -func (m *Miner) mineOne(ctx context.Context, base *MiningBase) (*types.BlockMsg, error) { +func (m *Miner) mineOne(ctx context.Context, base *MiningBase) (minedBlock *types.BlockMsg, err error) { log.Debugw("attempting to mine a block", "tipset", types.LogCids(base.TipSet.Cids())) start := build.Clock.Now() round := base.TipSet.Height() + base.NullRounds + 1 - mbi, err := m.api.MinerGetBaseInfo(ctx, m.address, round, base.TipSet.Key()) - if err != nil { - return nil, xerrors.Errorf("failed to get mining base info: %w", err) - } - if mbi == nil { - log.Warnf("mineOne: unexpectedly nil MiningBaseInfo for round %d, off tipset %d/%s", round, base.TipSet.Height(), base.TipSet.Key().String()) - return nil, nil - } - - // always write out a log from this point out + // always write out a log var winner *types.ElectionProof + var mbi *api.MiningBaseInfo + var rbase types.BeaconEntry defer func() { + // mbi can be nil if we are deep in penalty and there are 0 eligible sectors + // in the current deadline. If this case - put together a dummy one for reporting + // https://github.com/filecoin-project/lotus/blob/v1.9.0/chain/stmgr/utils.go#L500-L502 + if mbi == nil { + mbi = &api.MiningBaseInfo{ + NetworkPower: big.NewInt(-1), // we do not know how big the network is at this point + EligibleForMining: false, + MinerPower: big.NewInt(0), // but we do know we do not have anything + } + } + log.Infow( "completed mineOne", "forRound", int64(round), "baseEpoch", int64(base.TipSet.Height()), + "beaconEpoch", rbase.Round, "lookbackEpochs", int64(policy.ChainFinality), // hardcoded as it is unlikely to change again: https://github.com/filecoin-project/lotus/blob/v1.8.0/chain/actors/policy/policy.go#L180-L186 "networkPowerAtLookback", mbi.NetworkPower.String(), "minerPowerAtLookback", mbi.MinerPower.String(), "isEligible", mbi.EligibleForMining, "isWinner", (winner != nil), + "error", err, ) }() + mbi, err = m.api.MinerGetBaseInfo(ctx, m.address, round, base.TipSet.Key()) + if err != nil { + err = xerrors.Errorf("failed to get mining base info: %w", err) + return nil, err + } + if mbi == nil { + return nil, nil + } + if !mbi.EligibleForMining { // slashed or just have no power yet return nil, nil @@ -461,19 +477,21 @@ func (m *Miner) mineOne(ctx context.Context, base *MiningBase) (*types.BlockMsg, log.Infof("Time delta between now and our mining base: %ds (nulls: %d)", uint64(build.Clock.Now().Unix())-base.TipSet.MinTimestamp(), base.NullRounds) - rbase := beaconPrev + rbase = beaconPrev if len(bvals) > 0 { rbase = bvals[len(bvals)-1] } ticket, err := m.computeTicket(ctx, &rbase, base, mbi) if err != nil { - return nil, xerrors.Errorf("scratching ticket failed: %w", err) + err = xerrors.Errorf("scratching ticket failed: %w", err) + return nil, err } winner, err = gen.IsRoundWinner(ctx, base.TipSet, round, m.address, rbase, mbi, m.api) if err != nil { - return nil, xerrors.Errorf("failed to check if we win next round: %w", err) + err = xerrors.Errorf("failed to check if we win next round: %w", err) + return nil, err } if winner == nil { @@ -484,12 +502,14 @@ func (m *Miner) mineOne(ctx context.Context, base *MiningBase) (*types.BlockMsg, buf := new(bytes.Buffer) if err := m.address.MarshalCBOR(buf); err != nil { - return nil, xerrors.Errorf("failed to marshal miner address: %w", err) + err = xerrors.Errorf("failed to marshal miner address: %w", err) + return nil, err } rand, err := store.DrawRandomness(rbase.Data, crypto.DomainSeparationTag_WinningPoStChallengeSeed, round, buf.Bytes()) if err != nil { - return nil, xerrors.Errorf("failed to get randomness for winning post: %w", err) + err = xerrors.Errorf("failed to get randomness for winning post: %w", err) + return nil, err } prand := abi.PoStRandomness(rand) @@ -498,7 +518,8 @@ func (m *Miner) mineOne(ctx context.Context, base *MiningBase) (*types.BlockMsg, postProof, err := m.epp.ComputeProof(ctx, mbi.Sectors, prand) if err != nil { - return nil, xerrors.Errorf("failed to compute winning post proof: %w", err) + err = xerrors.Errorf("failed to compute winning post proof: %w", err) + return nil, err } tProof := build.Clock.Now() @@ -506,15 +527,17 @@ func (m *Miner) mineOne(ctx context.Context, base *MiningBase) (*types.BlockMsg, // get pending messages early, msgs, err := m.api.MpoolSelect(context.TODO(), base.TipSet.Key(), ticket.Quality()) if err != nil { - return nil, xerrors.Errorf("failed to select messages for block: %w", err) + err = xerrors.Errorf("failed to select messages for block: %w", err) + return nil, err } tPending := build.Clock.Now() // TODO: winning post proof - b, err := m.createBlock(base, m.address, ticket, winner, bvals, postProof, msgs) + minedBlock, err = m.createBlock(base, m.address, ticket, winner, bvals, postProof, msgs) if err != nil { - return nil, xerrors.Errorf("failed to create block: %w", err) + err = xerrors.Errorf("failed to create block: %w", err) + return nil, err } tCreateBlock := build.Clock.Now() @@ -523,7 +546,7 @@ func (m *Miner) mineOne(ctx context.Context, base *MiningBase) (*types.BlockMsg, for i, header := range base.TipSet.Blocks() { parentMiners[i] = header.Miner } - log.Infow("mined new block", "cid", b.Cid(), "height", int64(b.Header.Height), "miner", b.Header.Miner, "parents", parentMiners, "parentTipset", base.TipSet.Key().String(), "took", dur) + log.Infow("mined new block", "cid", minedBlock.Cid(), "height", int64(minedBlock.Header.Height), "miner", minedBlock.Header.Miner, "parents", parentMiners, "parentTipset", base.TipSet.Key().String(), "took", dur) if dur > time.Second*time.Duration(build.BlockDelaySecs) { log.Warnw("CAUTION: block production took longer than the block delay. Your computer may not be fast enough to keep up", "tMinerBaseInfo ", tMBI.Sub(start), @@ -536,7 +559,7 @@ func (m *Miner) mineOne(ctx context.Context, base *MiningBase) (*types.BlockMsg, "tCreateBlock ", tCreateBlock.Sub(tPending)) } - return b, nil + return minedBlock, nil } func (m *Miner) computeTicket(ctx context.Context, brand *types.BeaconEntry, base *MiningBase, mbi *api.MiningBaseInfo) (*types.Ticket, error) { From 429419f2101210fd3dd59ef145e0eee0286c06a3 Mon Sep 17 00:00:00 2001 From: Peter Rabbitson Date: Fri, 21 May 2021 15:30:08 +0200 Subject: [PATCH 2/6] Forgotten deadcode --- chain/gen/gen.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/chain/gen/gen.go b/chain/gen/gen.go index aa0f7df8850..98bb3ea9102 100644 --- a/chain/gen/gen.go +++ b/chain/gen/gen.go @@ -3,7 +3,6 @@ package gen import ( "bytes" "context" - "encoding/base64" "fmt" "io" "io/ioutil" @@ -635,8 +634,6 @@ func (wpp *wppProvider) ComputeProof(context.Context, []proof5.SectorInfo, abi.P return ValidWpostForTesting, nil } -var b64 = base64.URLEncoding.WithPadding(base64.NoPadding) - func IsRoundWinner(ctx context.Context, ts *types.TipSet, round abi.ChainEpoch, miner address.Address, brand types.BeaconEntry, mbi *api.MiningBaseInfo, a MiningCheckAPI) (*types.ElectionProof, error) { From 400780606804e19fc3f77f6a9bf0a55c86ff9e8e Mon Sep 17 00:00:00 2001 From: Peter Rabbitson Date: Sat, 22 May 2021 17:39:56 +0200 Subject: [PATCH 3/6] Incorporate the 'Time delta between now...' log into the 'completed mineOne' --- miner/miner.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/miner/miner.go b/miner/miner.go index 5fbc9aae30c..7b85e558efd 100644 --- a/miner/miner.go +++ b/miner/miner.go @@ -440,9 +440,12 @@ func (m *Miner) mineOne(ctx context.Context, base *MiningBase) (minedBlock *type log.Infow( "completed mineOne", + "tookMilliseconds", (build.Clock.Now().UnixNano()-start.UnixNano())/1_000_000, "forRound", int64(round), "baseEpoch", int64(base.TipSet.Height()), - "beaconEpoch", rbase.Round, + "baseDeltaSeconds", uint64(start.Unix())-base.TipSet.MinTimestamp(), + "nullRounds", int64(base.NullRounds), + "beaconEpoch", uint64(rbase.Round), "lookbackEpochs", int64(policy.ChainFinality), // hardcoded as it is unlikely to change again: https://github.com/filecoin-project/lotus/blob/v1.8.0/chain/actors/policy/policy.go#L180-L186 "networkPowerAtLookback", mbi.NetworkPower.String(), "minerPowerAtLookback", mbi.MinerPower.String(), @@ -475,8 +478,6 @@ func (m *Miner) mineOne(ctx context.Context, base *MiningBase) (minedBlock *type tPowercheck := build.Clock.Now() - log.Infof("Time delta between now and our mining base: %ds (nulls: %d)", uint64(build.Clock.Now().Unix())-base.TipSet.MinTimestamp(), base.NullRounds) - rbase = beaconPrev if len(bvals) > 0 { rbase = bvals[len(bvals)-1] From ef3ef8596081a6c19fec2c390c195b1998824bdd Mon Sep 17 00:00:00 2001 From: Peter Rabbitson Date: Sat, 22 May 2021 23:55:32 +0200 Subject: [PATCH 4/6] Add a `lateStart` indicator, differentiate on Error/Warn/Info --- miner/miner.go | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/miner/miner.go b/miner/miner.go index 7b85e558efd..b2da25d8e48 100644 --- a/miner/miner.go +++ b/miner/miner.go @@ -13,6 +13,7 @@ import ( proof2 "github.com/filecoin-project/specs-actors/v2/actors/runtime/proof" + "github.com/filecoin-project/lotus/chain/actors/builtin" "github.com/filecoin-project/lotus/chain/actors/policy" "github.com/filecoin-project/lotus/chain/gen/slashfilter" @@ -438,13 +439,15 @@ func (m *Miner) mineOne(ctx context.Context, base *MiningBase) (minedBlock *type } } - log.Infow( - "completed mineOne", - "tookMilliseconds", (build.Clock.Now().UnixNano()-start.UnixNano())/1_000_000, + isLate := uint64(start.Unix()) > (base.TipSet.MinTimestamp() + uint64(base.NullRounds*builtin.EpochDurationSeconds) + build.PropagationDelaySecs) + + logStruct := []interface{}{ + "tookMilliseconds", (build.Clock.Now().UnixNano() - start.UnixNano()) / 1_000_000, "forRound", int64(round), "baseEpoch", int64(base.TipSet.Height()), - "baseDeltaSeconds", uint64(start.Unix())-base.TipSet.MinTimestamp(), + "baseDeltaSeconds", uint64(start.Unix()) - base.TipSet.MinTimestamp(), "nullRounds", int64(base.NullRounds), + "lateStart", isLate, "beaconEpoch", uint64(rbase.Round), "lookbackEpochs", int64(policy.ChainFinality), // hardcoded as it is unlikely to change again: https://github.com/filecoin-project/lotus/blob/v1.8.0/chain/actors/policy/policy.go#L180-L186 "networkPowerAtLookback", mbi.NetworkPower.String(), @@ -452,7 +455,15 @@ func (m *Miner) mineOne(ctx context.Context, base *MiningBase) (minedBlock *type "isEligible", mbi.EligibleForMining, "isWinner", (winner != nil), "error", err, - ) + } + + if err != nil { + log.Errorw("completed mineOne", logStruct...) + } else if isLate { + log.Warnw("completed mineOne", logStruct...) + } else { + log.Infow("completed mineOne", logStruct...) + } }() mbi, err = m.api.MinerGetBaseInfo(ctx, m.address, round, base.TipSet.Key()) From c198e7aa9a67d48008bf4c3d4fdb006428367687 Mon Sep 17 00:00:00 2001 From: Jennifer Wang Date: Mon, 24 May 2021 10:04:37 -0400 Subject: [PATCH 5/6] make lint happy --- miner/miner.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/miner/miner.go b/miner/miner.go index b2da25d8e48..62bec5b55f4 100644 --- a/miner/miner.go +++ b/miner/miner.go @@ -448,7 +448,7 @@ func (m *Miner) mineOne(ctx context.Context, base *MiningBase) (minedBlock *type "baseDeltaSeconds", uint64(start.Unix()) - base.TipSet.MinTimestamp(), "nullRounds", int64(base.NullRounds), "lateStart", isLate, - "beaconEpoch", uint64(rbase.Round), + "beaconEpoch", rbase.Round, "lookbackEpochs", int64(policy.ChainFinality), // hardcoded as it is unlikely to change again: https://github.com/filecoin-project/lotus/blob/v1.8.0/chain/actors/policy/policy.go#L180-L186 "networkPowerAtLookback", mbi.NetworkPower.String(), "minerPowerAtLookback", mbi.MinerPower.String(), From 36bc96a6bc1472b2493c6165592712bc3a266028 Mon Sep 17 00:00:00 2001 From: Aayush Rajasekaran Date: Wed, 16 Jun 2021 13:41:52 -0400 Subject: [PATCH 6/6] Fix docsgen --- build/openrpc/full.json.gz | Bin 22485 -> 22484 bytes build/openrpc/miner.json.gz | Bin 8089 -> 8089 bytes build/openrpc/worker.json.gz | Bin 2579 -> 2579 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index 1eb1ebf942b6dc8ee9d4eea0dcbc656d37db061a..2fee80bb1d1fe56d7cad5f1d80d458fe0ab222cd 100644 GIT binary patch delta 22342 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 delta 22338 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 diff --git a/build/openrpc/miner.json.gz b/build/openrpc/miner.json.gz index d4d24cdd539c616b66c9ef471c391d0a13027209..da845c6ee1c48c7335ecec8f72fee5b5ddd94b68 100644 GIT binary patch delta 22 ecmbPfKhu6f2b0u{ja}^W9EbMIxVo>0kpTc`@d+FN delta 22 ecmbPfKhu6f2h*$B8@t%$IldS3mF(+bWB>qf(+KbY diff --git a/build/openrpc/worker.json.gz b/build/openrpc/worker.json.gz index 19d041474e1b52cbe1c66613982bb5bb4e5f834b..945825467fb0703833cb416aba1486f9faac7026 100644 GIT binary patch delta 21 dcmbO%GFfCoBjfLlO`V(^`Bx8h_*XG7003e!2!H?p delta 21 ccmbO%GFfCoBV+Z(rcO?dJoBhB|0)Is08|YI=Kufz