Merge pull request #1375 from filecoin-project/feat/mpool-debug-future
mpool: add debug logs for future detection
This commit is contained in:
commit
a9dc2aa58b
@ -4,6 +4,7 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
|
"math"
|
||||||
"sort"
|
"sort"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
@ -32,6 +33,8 @@ import (
|
|||||||
|
|
||||||
var log = logging.Logger("messagepool")
|
var log = logging.Logger("messagepool")
|
||||||
|
|
||||||
|
const futureDebug = false
|
||||||
|
|
||||||
var (
|
var (
|
||||||
ErrMessageTooBig = errors.New("message too big")
|
ErrMessageTooBig = errors.New("message too big")
|
||||||
|
|
||||||
@ -340,7 +343,7 @@ func (mp *MessagePool) addSkipChecks(m *types.SignedMessage) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (mp *MessagePool) addLocked(m *types.SignedMessage) error {
|
func (mp *MessagePool) addLocked(m *types.SignedMessage) error {
|
||||||
log.Debugf("mpooladd: %s %s", m.Message.From, m.Message.Nonce)
|
log.Debugf("mpooladd: %s %d", m.Message.From, m.Message.Nonce)
|
||||||
if m.Signature.Type == crypto.SigTypeBLS {
|
if m.Signature.Type == crypto.SigTypeBLS {
|
||||||
mp.blsSigCache.Add(m.Cid(), m.Signature)
|
mp.blsSigCache.Add(m.Cid(), m.Signature)
|
||||||
}
|
}
|
||||||
@ -624,9 +627,78 @@ func (mp *MessagePool) HeadChange(revert []*types.TipSet, apply []*types.TipSet)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(revert) > 0 && futureDebug {
|
||||||
|
msgs, ts := mp.Pending()
|
||||||
|
|
||||||
|
buckets := map[address.Address]*statBucket{}
|
||||||
|
|
||||||
|
for _, v := range msgs {
|
||||||
|
bkt, ok := buckets[v.Message.From]
|
||||||
|
if !ok {
|
||||||
|
bkt = &statBucket{
|
||||||
|
msgs: map[uint64]*types.SignedMessage{},
|
||||||
|
}
|
||||||
|
buckets[v.Message.From] = bkt
|
||||||
|
}
|
||||||
|
|
||||||
|
bkt.msgs[v.Message.Nonce] = v
|
||||||
|
}
|
||||||
|
|
||||||
|
for a, bkt := range buckets {
|
||||||
|
act, err := mp.api.StateGetActor(a, ts)
|
||||||
|
if err != nil {
|
||||||
|
log.Debugf("%s, err: %s\n", a, err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
var cmsg *types.SignedMessage
|
||||||
|
var ok bool
|
||||||
|
|
||||||
|
cur := act.Nonce
|
||||||
|
for {
|
||||||
|
cmsg, ok = bkt.msgs[cur]
|
||||||
|
if !ok {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
cur++
|
||||||
|
}
|
||||||
|
|
||||||
|
ff := uint64(math.MaxUint64)
|
||||||
|
for k := range bkt.msgs {
|
||||||
|
if k > cur && k < ff {
|
||||||
|
ff = k
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ff != math.MaxUint64 {
|
||||||
|
m := bkt.msgs[ff]
|
||||||
|
|
||||||
|
// cmsg can be nil if no messages from the current nonce are in the mpool
|
||||||
|
ccid := "nil"
|
||||||
|
if cmsg != nil {
|
||||||
|
ccid = cmsg.Cid().String()
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Debugw("Nonce gap",
|
||||||
|
"actor", a,
|
||||||
|
"future_cid", m.Cid(),
|
||||||
|
"future_nonce", ff,
|
||||||
|
"current_cid", ccid,
|
||||||
|
"current_nonce", cur,
|
||||||
|
"revert_tipset", revert[0].Key(),
|
||||||
|
"new_head", ts.Key(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type statBucket struct {
|
||||||
|
msgs map[uint64]*types.SignedMessage
|
||||||
|
}
|
||||||
|
|
||||||
func (mp *MessagePool) MessagesForBlocks(blks []*types.BlockHeader) ([]*types.SignedMessage, error) {
|
func (mp *MessagePool) MessagesForBlocks(blks []*types.BlockHeader) ([]*types.SignedMessage, error) {
|
||||||
out := make([]*types.SignedMessage, 0)
|
out := make([]*types.SignedMessage, 0)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user