Merge pull request #354 from filecoin-project/feat/tracing-3
Moar tracing!
This commit is contained in:
commit
e5909de3a4
@ -144,11 +144,11 @@ func (spa StoragePowerActor) ArbitrateConsensusFault(act *types.Actor, vmctx typ
|
|||||||
return nil, aerrors.Absorb(oerr, 3, "response from 'GetWorkerAddr' was not a valid address")
|
return nil, aerrors.Absorb(oerr, 3, "response from 'GetWorkerAddr' was not a valid address")
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := params.Block1.CheckBlockSignature(worker); err != nil {
|
if err := params.Block1.CheckBlockSignature(vmctx.Context(), worker); err != nil {
|
||||||
return nil, aerrors.Absorb(err, 4, "block1 did not have valid signature")
|
return nil, aerrors.Absorb(err, 4, "block1 did not have valid signature")
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := params.Block2.CheckBlockSignature(worker); err != nil {
|
if err := params.Block2.CheckBlockSignature(vmctx.Context(), worker); err != nil {
|
||||||
return nil, aerrors.Absorb(err, 5, "block2 did not have valid signature")
|
return nil, aerrors.Absorb(err, 5, "block2 did not have valid signature")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -169,7 +169,7 @@ func (spa StoragePowerActor) ArbitrateConsensusFault(act *types.Actor, vmctx typ
|
|||||||
}
|
}
|
||||||
|
|
||||||
miner := params.Block1.Miner
|
miner := params.Block1.Miner
|
||||||
if has, err := MinerSetHas(context.TODO(), vmctx, self.Miners, miner); err != nil {
|
if has, err := MinerSetHas(vmctx, self.Miners, miner); err != nil {
|
||||||
return nil, aerrors.Wrapf(err, "failed to check miner in set")
|
return nil, aerrors.Wrapf(err, "failed to check miner in set")
|
||||||
} else if !has {
|
} else if !has {
|
||||||
return nil, aerrors.New(7, "either already slashed or not a miner")
|
return nil, aerrors.New(7, "either already slashed or not a miner")
|
||||||
@ -276,7 +276,7 @@ func (spa StoragePowerActor) UpdateStorage(act *types.Actor, vmctx types.VMConte
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
has, err := MinerSetHas(context.TODO(), vmctx, self.Miners, vmctx.Message().From)
|
has, err := MinerSetHas(vmctx, self.Miners, vmctx.Message().From)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -327,7 +327,7 @@ func (spa StoragePowerActor) PowerLookup(act *types.Actor, vmctx types.VMContext
|
|||||||
}
|
}
|
||||||
|
|
||||||
func powerLookup(ctx context.Context, vmctx types.VMContext, self *StoragePowerState, miner address.Address) (types.BigInt, ActorError) {
|
func powerLookup(ctx context.Context, vmctx types.VMContext, self *StoragePowerState, miner address.Address) (types.BigInt, ActorError) {
|
||||||
has, err := MinerSetHas(context.TODO(), vmctx, self.Miners, miner)
|
has, err := MinerSetHas(vmctx, self.Miners, miner)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return types.EmptyInt, err
|
return types.EmptyInt, err
|
||||||
}
|
}
|
||||||
@ -354,7 +354,7 @@ func (spa StoragePowerActor) IsMiner(act *types.Actor, vmctx types.VMContext, pa
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
has, err := MinerSetHas(context.TODO(), vmctx, self.Miners, param.Addr)
|
has, err := MinerSetHas(vmctx, self.Miners, param.Addr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -432,13 +432,13 @@ func pledgeCollateralForSize(vmctx types.VMContext, size, totalStorage types.Big
|
|||||||
return types.BigAdd(powerCollateral, perCapCollateral), nil
|
return types.BigAdd(powerCollateral, perCapCollateral), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func MinerSetHas(ctx context.Context, vmctx types.VMContext, rcid cid.Cid, maddr address.Address) (bool, aerrors.ActorError) {
|
func MinerSetHas(vmctx types.VMContext, rcid cid.Cid, maddr address.Address) (bool, aerrors.ActorError) {
|
||||||
nd, err := hamt.LoadNode(ctx, vmctx.Ipld(), rcid)
|
nd, err := hamt.LoadNode(vmctx.Context(), vmctx.Ipld(), rcid)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, aerrors.HandleExternalError(err, "failed to load miner set")
|
return false, aerrors.HandleExternalError(err, "failed to load miner set")
|
||||||
}
|
}
|
||||||
|
|
||||||
err = nd.Find(ctx, string(maddr.Bytes()), nil)
|
err = nd.Find(vmctx.Context(), string(maddr.Bytes()), nil)
|
||||||
switch err {
|
switch err {
|
||||||
case hamt.ErrNotFound:
|
case hamt.ErrNotFound:
|
||||||
return false, nil
|
return false, nil
|
||||||
|
@ -61,7 +61,6 @@ func (ms *msgSet) add(m *types.SignedMessage) error {
|
|||||||
log.Error("Add with duplicate nonce")
|
log.Error("Add with duplicate nonce")
|
||||||
return xerrors.Errorf("message to %s with nonce %d already in mpool")
|
return xerrors.Errorf("message to %s with nonce %d already in mpool")
|
||||||
}
|
}
|
||||||
log.Warn("Add called with the same message multiple times")
|
|
||||||
}
|
}
|
||||||
ms.msgs[m.Message.Nonce] = m
|
ms.msgs[m.Message.Nonce] = m
|
||||||
|
|
||||||
|
@ -12,6 +12,7 @@ import (
|
|||||||
"github.com/filecoin-project/go-lotus/build"
|
"github.com/filecoin-project/go-lotus/build"
|
||||||
"github.com/filecoin-project/go-lotus/chain/address"
|
"github.com/filecoin-project/go-lotus/chain/address"
|
||||||
"github.com/filecoin-project/go-lotus/chain/state"
|
"github.com/filecoin-project/go-lotus/chain/state"
|
||||||
|
"go.opencensus.io/trace"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
|
|
||||||
amt "github.com/filecoin-project/go-amt-ipld"
|
amt "github.com/filecoin-project/go-amt-ipld"
|
||||||
@ -727,6 +728,9 @@ func (cs *ChainStore) TryFillTipSet(ts *types.TipSet) (*FullTipSet, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (cs *ChainStore) GetRandomness(ctx context.Context, blks []cid.Cid, tickets []*types.Ticket, lb int64) ([]byte, error) {
|
func (cs *ChainStore) GetRandomness(ctx context.Context, blks []cid.Cid, tickets []*types.Ticket, lb int64) ([]byte, error) {
|
||||||
|
ctx, span := trace.StartSpan(ctx, "store.GetRandomness")
|
||||||
|
defer span.End()
|
||||||
|
|
||||||
if lb < 0 {
|
if lb < 0 {
|
||||||
return nil, fmt.Errorf("negative lookback parameters are not valid (got %d)", lb)
|
return nil, fmt.Errorf("negative lookback parameters are not valid (got %d)", lb)
|
||||||
}
|
}
|
||||||
|
@ -484,7 +484,7 @@ func (syncer *Syncer) ValidateBlock(ctx context.Context, b *types.FullBlock) err
|
|||||||
return xerrors.Errorf("GetMinerWorker failed: %w", err)
|
return xerrors.Errorf("GetMinerWorker failed: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := h.CheckBlockSignature(waddr); err != nil {
|
if err := h.CheckBlockSignature(ctx, waddr); err != nil {
|
||||||
return xerrors.Errorf("check block signature failed: %w", err)
|
return xerrors.Errorf("check block signature failed: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -581,7 +581,7 @@ func (syncer *Syncer) checkBlockMessages(ctx context.Context, b *types.FullBlock
|
|||||||
pubks = append(pubks, pubk)
|
pubks = append(pubks, pubk)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := syncer.verifyBlsAggregate(b.Header.BLSAggregate, sigCids, pubks); err != nil {
|
if err := syncer.verifyBlsAggregate(ctx, b.Header.BLSAggregate, sigCids, pubks); err != nil {
|
||||||
return xerrors.Errorf("bls aggregate signature was invalid: %w", err)
|
return xerrors.Errorf("bls aggregate signature was invalid: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -629,7 +629,13 @@ func (syncer *Syncer) checkBlockMessages(ctx context.Context, b *types.FullBlock
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (syncer *Syncer) verifyBlsAggregate(sig types.Signature, msgs []cid.Cid, pubks []bls.PublicKey) error {
|
func (syncer *Syncer) verifyBlsAggregate(ctx context.Context, sig types.Signature, msgs []cid.Cid, pubks []bls.PublicKey) error {
|
||||||
|
ctx, span := trace.StartSpan(ctx, "syncer.verifyBlsAggregate")
|
||||||
|
defer span.End()
|
||||||
|
span.AddAttributes(
|
||||||
|
trace.Int64Attribute("msgCount", int64(len(msgs))),
|
||||||
|
)
|
||||||
|
|
||||||
var digests []bls.Digest
|
var digests []bls.Digest
|
||||||
for _, c := range msgs {
|
for _, c := range msgs {
|
||||||
digests = append(digests, bls.Hash(bls.Message(c.Bytes())))
|
digests = append(digests, bls.Hash(bls.Message(c.Bytes())))
|
||||||
|
@ -2,12 +2,14 @@ package types
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"context"
|
||||||
"crypto/sha256"
|
"crypto/sha256"
|
||||||
"math/big"
|
"math/big"
|
||||||
|
|
||||||
block "github.com/ipfs/go-block-format"
|
block "github.com/ipfs/go-block-format"
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
"github.com/multiformats/go-multihash"
|
"github.com/multiformats/go-multihash"
|
||||||
|
"go.opencensus.io/trace"
|
||||||
xerrors "golang.org/x/xerrors"
|
xerrors "golang.org/x/xerrors"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-lotus/chain/address"
|
"github.com/filecoin-project/go-lotus/chain/address"
|
||||||
@ -98,7 +100,10 @@ func (blk *BlockHeader) SigningBytes() ([]byte, error) {
|
|||||||
return blkcopy.Serialize()
|
return blkcopy.Serialize()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (blk *BlockHeader) CheckBlockSignature(worker address.Address) error {
|
func (blk *BlockHeader) CheckBlockSignature(ctx context.Context, worker address.Address) error {
|
||||||
|
ctx, span := trace.StartSpan(ctx, "checkBlockSignature")
|
||||||
|
defer span.End()
|
||||||
|
|
||||||
sigb, err := blk.SigningBytes()
|
sigb, err := blk.SigningBytes()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return xerrors.Errorf("failed to get block signing bytes: %w", err)
|
return xerrors.Errorf("failed to get block signing bytes: %w", err)
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
package types
|
package types
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
amt "github.com/filecoin-project/go-amt-ipld"
|
amt "github.com/filecoin-project/go-amt-ipld"
|
||||||
"github.com/filecoin-project/go-lotus/chain/actors/aerrors"
|
"github.com/filecoin-project/go-lotus/chain/actors/aerrors"
|
||||||
"github.com/filecoin-project/go-lotus/chain/address"
|
"github.com/filecoin-project/go-lotus/chain/address"
|
||||||
@ -38,6 +40,8 @@ type VMContext interface {
|
|||||||
ChargeGas(uint64) aerrors.ActorError
|
ChargeGas(uint64) aerrors.ActorError
|
||||||
GetRandomness(height uint64) ([]byte, aerrors.ActorError)
|
GetRandomness(height uint64) ([]byte, aerrors.ActorError)
|
||||||
GetBalance(address.Address) (BigInt, aerrors.ActorError)
|
GetBalance(address.Address) (BigInt, aerrors.ActorError)
|
||||||
|
|
||||||
|
Context() context.Context
|
||||||
}
|
}
|
||||||
|
|
||||||
type storageWrapper struct {
|
type storageWrapper struct {
|
||||||
|
@ -239,6 +239,10 @@ func (vmctx *VMContext) GetBalance(a address.Address) (types.BigInt, aerrors.Act
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (vmctx *VMContext) Context() context.Context {
|
||||||
|
return vmctx.ctx
|
||||||
|
}
|
||||||
|
|
||||||
type hBlocks interface {
|
type hBlocks interface {
|
||||||
GetBlock(context.Context, cid.Cid) (block.Block, error)
|
GetBlock(context.Context, cid.Cid) (block.Block, error)
|
||||||
AddBlock(block.Block) error
|
AddBlock(block.Block) error
|
||||||
|
Loading…
Reference in New Issue
Block a user