Skip to content

Commit

Permalink
Merge bitcoin#30880: test: Wait for local services to update in featu…
Browse files Browse the repository at this point in the history
…re_assumeutxo

19f4a7c test: Wait for local services to update in feature_assumeutxo (Fabian Jahr)

Pull request description:

  Closes bitcoin#30878

  It seems like there is a race where the block is stored locally and `getblock` does not error anymore, but `ActivateBestChain` has not finished yet, so the local services are not updated yet either. Fix this by waiting for the local services to update.

  Can be reproduced locally by adding the sleep here:

  ```cpp
  ──────────────────────────────────────────────────────────────────────────────────────────────────────────┐
  src/validation.cpp:3567: bool Chainstate::ActivateBestChain(BlockValidationState& state, std::shared_ptr< │
  ──────────────────────────────────────────────────────────────────────────────────────────────────────────┘
          }

          if (WITH_LOCK(::cs_main, return m_disabled)) {
              std::this_thread::sleep_for(std::chrono::seconds(10));
              // Background chainstate has reached the snapshot base block, so exit.

              // Restart indexes to resume indexing for all blocks unique to the snapshot
  ```

ACKs for top commit:
  maflcko:
    review-only ACK 19f4a7c
  achow101:
    ACK 19f4a7c
  pablomartin4btc:
    tACK 19f4a7c
  furszy:
    Code review ACK [19f4a7c](bitcoin@19f4a7c).

Tree-SHA512: 70dad3795988956c5e20f2d2d895fb56c5e3ce257c7547d3fd729c88949f0e24cb34594da1537bce8794ad02b2db44e7e46e995aa32539cd4dd84c4f1d4bb1c4
  • Loading branch information
achow101 committed Sep 12, 2024
2 parents e46bebb + 19f4a7c commit cf0120f
Showing 1 changed file with 3 additions and 3 deletions.
6 changes: 3 additions & 3 deletions test/functional/feature_assumeutxo.py
Original file line number Diff line number Diff line change
Expand Up @@ -314,9 +314,9 @@ def test_sync_from_assumeutxo_node(self, snapshot):
self.sync_blocks(nodes=(miner, snapshot_node))
# Check the base snapshot block was stored and ensure node signals full-node service support
self.wait_until(lambda: not try_rpc(-1, "Block not found", snapshot_node.getblock, snapshot_block_hash))
assert 'NETWORK' in snapshot_node.getnetworkinfo()['localservicesnames']
self.wait_until(lambda: 'NETWORK' in snapshot_node.getnetworkinfo()['localservicesnames'])

# Now the snapshot_node is sync, verify the ibd_node can sync from it
# Now that the snapshot_node is synced, verify the ibd_node can sync from it
self.connect_nodes(snapshot_node.index, ibd_node.index)
assert 'NETWORK' in ibd_node.getpeerinfo()[0]['servicesnames']
self.sync_blocks(nodes=(ibd_node, snapshot_node))
Expand Down Expand Up @@ -698,7 +698,7 @@ def check_tx_counts(final: bool) -> None:
self.wait_until(lambda: len(n2.getchainstates()['chainstates']) == 1)

# Once background chain sync completes, the full node must start offering historical blocks again.
assert {'NETWORK', 'NETWORK_LIMITED'}.issubset(n2.getnetworkinfo()['localservicesnames'])
self.wait_until(lambda: {'NETWORK', 'NETWORK_LIMITED'}.issubset(n2.getnetworkinfo()['localservicesnames']))

completed_idx_state = {
'basic block filter index': COMPLETE_IDX,
Expand Down

0 comments on commit cf0120f

Please sign in to comment.