Fix from Magik to remove hanging behavior

This commit is contained in:
zenground0 2022-02-14 14:00:41 -05:00
parent 2c06eb76d6
commit 977351f419

View File

@ -3,6 +3,7 @@ package kit
import ( import (
"bytes" "bytes"
"context" "context"
"fmt"
"sync" "sync"
"sync/atomic" "sync/atomic"
"testing" "testing"
@ -64,11 +65,10 @@ func (p *partitionTracker) done(t *testing.T) bool {
return uint64(len(p.partitions)) == p.count(t) return uint64(len(p.partitions)) == p.count(t)
} }
func (p *partitionTracker) recordIfPost(t *testing.T, bm *BlockMiner, smsg *types.SignedMessage) (ret bool) { func (p *partitionTracker) recordIfPost(t *testing.T, bm *BlockMiner, msg *types.Message) (ret bool) {
defer func() { defer func() {
ret = p.done(t) ret = p.done(t)
}() }()
msg := smsg.Message
if !(msg.To == bm.miner.ActorAddr) { if !(msg.To == bm.miner.ActorAddr) {
return return
} }
@ -95,7 +95,26 @@ func (bm *BlockMiner) forcePoSt(ctx context.Context, ts *types.TipSet, dlinfo *d
msgs, err := bm.miner.FullNode.MpoolPending(ctx, types.EmptyTSK) msgs, err := bm.miner.FullNode.MpoolPending(ctx, types.EmptyTSK)
require.NoError(bm.t, err) require.NoError(bm.t, err)
for _, msg := range msgs { for _, msg := range msgs {
tracker.recordIfPost(bm.t, bm, msg) if tracker.recordIfPost(bm.t, bm, &msg.Message) {
fmt.Printf("found post in mempool pending\n")
}
}
// Account for included but not yet executed messages
for _, bc := range ts.Cids() {
msgs, err := bm.miner.FullNode.ChainGetBlockMessages(ctx, bc)
require.NoError(bm.t, err)
for _, msg := range msgs.BlsMessages {
if tracker.recordIfPost(bm.t, bm, msg) {
fmt.Printf("found post in message of prev tipset\n")
}
}
for _, msg := range msgs.SecpkMessages {
if tracker.recordIfPost(bm.t, bm, &msg.Message) {
fmt.Printf("found post in message of prev tipset\n")
}
}
} }
// post not yet in mpool, wait for it // post not yet in mpool, wait for it
@ -111,7 +130,8 @@ func (bm *BlockMiner) forcePoSt(ctx context.Context, ts *types.TipSet, dlinfo *d
bm.t.Logf("pool event: %d", evt.Type) bm.t.Logf("pool event: %d", evt.Type)
if evt.Type == api.MpoolAdd { if evt.Type == api.MpoolAdd {
bm.t.Logf("incoming message %v", evt.Message) bm.t.Logf("incoming message %v", evt.Message)
if tracker.recordIfPost(bm.t, bm, evt.Message) { if tracker.recordIfPost(bm.t, bm, &evt.Message.Message) {
fmt.Printf("found post in mempool evt\n")
break POOL break POOL
} }
} }