Skip to content

Commit

Permalink
lntest: make sure chain backend is synced to miner
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
yyforyongyu committed Dec 12, 2024
1 parent 2088e36 commit e31c412
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 12 deletions.
15 changes: 9 additions & 6 deletions lntest/harness.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

Expand All @@ -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 (
Expand Down
6 changes: 3 additions & 3 deletions lntest/harness_assertion.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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)
}
Expand Down
6 changes: 3 additions & 3 deletions lntest/harness_miner.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
}
Expand Down Expand Up @@ -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)
Expand Down

0 comments on commit e31c412

Please sign in to comment.