lntest: make sure chain backend is synced to miner

We sometimes see `timeout waiting for UTXOs` error from bitcoind-related
itests due to the chain backend not synced to the miner. We now assert
it's synced before continue.
This commit is contained in:
yyforyongyu 2024-12-07 18:02:59 +08:00
parent 1dec926165
commit 7ab4081ffd
No known key found for this signature in database
GPG Key ID: 9BCD95C4FF296868
3 changed files with 15 additions and 12 deletions

View File

@ -481,6 +481,14 @@ func (h *HarnessTest) NewNode(name string,
err = node.Start(h.runCtx)
require.NoError(h, err, "failed to start node %s", node.Name())
// Get the miner's best block hash.
bestBlock, err := h.miner.Client.GetBestBlockHash()
require.NoError(h, err, "unable to get best block hash")
// Wait until the node's chain backend is synced to the miner's best
// block.
h.WaitForBlockchainSyncTo(node, *bestBlock)
return node
}
@ -490,12 +498,7 @@ func (h *HarnessTest) NewNode(name string,
func (h *HarnessTest) NewNodeWithCoins(name string,
extraArgs []string) *node.HarnessNode {
node, err := h.manager.newNode(h.T, name, extraArgs, nil, false)
require.NoErrorf(h, err, "unable to create new node for %s", name)
// Start the node.
err = node.Start(h.runCtx)
require.NoError(h, err, "failed to start node %s", node.Name())
node := h.NewNode(name, extraArgs)
// Load up the wallets of the node with 5 outputs of 1 BTC each.
const (

View File

@ -61,9 +61,9 @@ func (h *HarnessTest) WaitForBlockchainSync(hn *node.HarnessNode) {
// WaitForBlockchainSyncTo waits until the node is synced to bestBlock.
func (h *HarnessTest) WaitForBlockchainSyncTo(hn *node.HarnessNode,
bestBlock *wire.MsgBlock) {
bestBlock chainhash.Hash) {
bestBlockHash := bestBlock.BlockHash().String()
bestBlockHash := bestBlock.String()
err := wait.NoError(func() error {
resp := hn.RPC.GetInfo()
if resp.SyncedToChain {
@ -1629,7 +1629,7 @@ func (h *HarnessTest) AssertActiveNodesSynced() {
// AssertActiveNodesSyncedTo asserts all active nodes have synced to the
// provided bestBlock.
func (h *HarnessTest) AssertActiveNodesSyncedTo(bestBlock *wire.MsgBlock) {
func (h *HarnessTest) AssertActiveNodesSyncedTo(bestBlock chainhash.Hash) {
for _, node := range h.manager.activeNodes {
h.WaitForBlockchainSyncTo(node, bestBlock)
}

View File

@ -41,7 +41,7 @@ func (h *HarnessTest) MineBlocks(num int) {
// Check the block doesn't have any txns except the coinbase.
if len(block.Transactions) <= 1 {
// Make sure all the active nodes are synced.
h.AssertActiveNodesSyncedTo(block)
h.AssertActiveNodesSyncedTo(block.BlockHash())
// Mine the next block.
continue
@ -116,7 +116,7 @@ func (h *HarnessTest) MineBlocksAndAssertNumTxes(num uint32,
// Finally, make sure all the active nodes are synced.
bestBlock := blocks[len(blocks)-1]
h.AssertActiveNodesSyncedTo(bestBlock)
h.AssertActiveNodesSyncedTo(bestBlock.BlockHash())
return blocks
}
@ -157,7 +157,7 @@ func (h *HarnessTest) cleanMempool() {
bestBlock = blocks[len(blocks)-1]
// Make sure all the active nodes are synced.
h.AssertActiveNodesSyncedTo(bestBlock)
h.AssertActiveNodesSyncedTo(bestBlock.BlockHash())
return fmt.Errorf("still have %d txes in mempool", len(mem))
}, wait.MinerMempoolTimeout)