Page MenuHomePhabricator

Fix tsan suppression with Clang 14
ClosedPublic

Authored by Fabien on Jul 20 2022, 15:33.

Details

Reviewers
sdulfari
Group Reviewers
Restricted Project
Commits
rABCca16d4e0b05e: Fix tsan suppression with Clang 14
Summary

The wallet_multiwallet --usecli test fails consistently with TSAN and Clang 14.
It appears that the way the stack is stored prevents the suppression from triggering.
This diff uses another suppression filter which has a larger scope and faster lookup for excluding the issues from the lib.

Test Plan

Run the TSAN build with both clang 10 and 14.

Diff Detail

Event Timeline

Fabien requested review of this revision.Jul 20 2022, 15:33

Failed tests logs:

====== Bitcoin ABC functional tests: abc_p2p_compactproofs.py ======

------- Stdout: -------
2022-07-20T15:40:25.607000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-tsan/test/tmp/test_runner_₿₵_  _20220720_153922/abc_p2p_compactproofs_11
2022-07-20T15:40:27.976000Z TestFramework (INFO): Check we send a getavaproofs message to our avalanche outbound peers
2022-07-20T15:40:30.141000Z TestFramework (INFO): Check we send periodic getavaproofs message to some of our peers
2022-07-20T15:40:31.337000Z TestFramework (INFO): After the first avaproofs has been received, all the peers are requested periodically
2022-07-20T15:40:38.003000Z TestFramework (INFO): Check we send a getavaproofs message to our manually connected peers that support avalanche
2022-07-20T15:40:39.298000Z TestFramework (INFO): Check the node responds to getavaproofs messages
2022-07-20T15:40:53.555000Z TestFramework (INFO): Check the node requests the missing proofs after receiving an avaproofs message
2022-07-20T15:41:02.808000Z TestFramework (INFO): The node ignores unsollicited avaproofs
2022-07-20T15:41:02.965000Z TestFramework (INFO): Check no proof is requested if there is no shortid
2022-07-20T15:41:03.240000Z TestFramework (INFO): Check the node requests all the proofs if it known none
2022-07-20T15:41:03.414000Z TestFramework (INFO): Check the node requests only the missing proofs
2022-07-20T15:41:03.728000Z TestFramework (INFO): Check the node don't request prefilled proofs
2022-07-20T15:41:04.005000Z TestFramework (INFO): Check the node requests no proof if it knows all of them
2022-07-20T15:41:04.367000Z TestFramework (INFO): Check out of bounds index
2022-07-20T15:41:04.671000Z TestFramework (INFO): An invalid prefilled proof will trigger a ban
2022-07-20T15:41:05.045000Z TestFramework (INFO): Check the node respond to missing proofs requests
2022-07-20T15:41:13.238000Z TestFramework (INFO): Unsollicited requests are ignored
2022-07-20T15:41:13.444000Z TestFramework (INFO): Sending an empty request has no effect
2022-07-20T15:41:13.494000Z TestFramework (INFO): Check the requested proofs are sent by the node
2022-07-20T15:41:14.948000Z TestFramework (INFO): Check the node will not send the proofs if not requested before the timeout elapsed
2022-07-20T15:41:15.659000Z TestFramework (INFO): Check the node get compact proofs upon avalanche outbound discovery
2022-07-20T15:41:31.443000Z TestFramework (INFO): Check the node don't request compact proofs during IBD
2022-07-20T15:41:39.058000Z TestFramework (INFO): Check we also request the inbounds until the quorum is established
2022-07-20T15:42:50.018000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
            self.wait_until(lambda: count_getavaproofs(
                [inbound, outbound]) > current_total)
'''
2022-07-20T15:42:50.018000Z TestFramework (ERROR): Assertion failed
Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_framework.py", line 136, in main
    self.run_test()
  File "/work/test/functional/abc_p2p_compactproofs.py", line 681, in run_test
    self.test_send_inbound_getavaproofs_until_quorum_is_established()
  File "/work/test/functional/abc_p2p_compactproofs.py", line 663, in test_send_inbound_getavaproofs_until_quorum_is_established
    self.wait_until(lambda: count_getavaproofs(
  File "/work/test/functional/test_framework/test_framework.py", line 677, in wait_until
    timeout_factor=self.options.timeout_factor)
  File "/work/test/functional/test_framework/util.py", line 284, in wait_until_helper
    "Predicate {} not true after {} seconds".format(predicate_source, timeout))
AssertionError: Predicate ''''
            self.wait_until(lambda: count_getavaproofs(
                [inbound, outbound]) > current_total)
''' not true after 60.0 seconds
2022-07-20T15:42:50.069000Z TestFramework (INFO): Stopping nodes
2022-07-20T15:42:50.322000Z TestFramework (WARNING): Not cleaning up dir /work/abc-ci-builds/build-tsan/test/tmp/test_runner_₿₵_  _20220720_153922/abc_p2p_compactproofs_11
2022-07-20T15:42:50.322000Z TestFramework (ERROR): Test failed. Test logging available at /work/abc-ci-builds/build-tsan/test/tmp/test_runner_₿₵_  _20220720_153922/abc_p2p_compactproofs_11/test_framework.log
2022-07-20T15:42:50.322000Z TestFramework (ERROR): 
2022-07-20T15:42:50.322000Z TestFramework (ERROR): Hint: Call /work/test/functional/combine_logs.py '/work/abc-ci-builds/build-tsan/test/tmp/test_runner_₿₵_  _20220720_153922/abc_p2p_compactproofs_11' to consolidate all logs
2022-07-20T15:42:50.322000Z TestFramework (ERROR): 
2022-07-20T15:42:50.322000Z TestFramework (ERROR): If this failure happened unexpectedly or intermittently, please file a bug and provide a link or upload of the combined log.
2022-07-20T15:42:50.323000Z TestFramework (ERROR): https://github.com/Bitcoin-ABC/bitcoin-abc/issues
2022-07-20T15:42:50.323000Z TestFramework (ERROR):
====== Bitcoin ABC functional tests: abc_p2p_compactproofs.py --nolegacyavaproof ======

------- Stdout: -------
2022-07-20T15:42:00.546000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-tsan/test/tmp/test_runner_₿₵_  _20220720_153922/abc_p2p_compactproofs_13
2022-07-20T15:42:08.655000Z TestFramework (INFO): Check we send a getavaproofs message to our avalanche outbound peers
2022-07-20T15:42:10.703000Z TestFramework (INFO): Check we send periodic getavaproofs message to some of our peers
2022-07-20T15:43:10.887000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
            self.wait_until(lambda: count_outbounds_getavaproofs()
                            == outbounds_getavaproofs + 3)
'''
2022-07-20T15:43:10.887000Z TestFramework (ERROR): Assertion failed
Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_framework.py", line 136, in main
    self.run_test()
  File "/work/test/functional/abc_p2p_compactproofs.py", line 674, in run_test
    self.test_send_outbound_getavaproofs()
  File "/work/test/functional/abc_p2p_compactproofs.py", line 142, in test_send_outbound_getavaproofs
    self.wait_until(lambda: count_outbounds_getavaproofs()
  File "/work/test/functional/test_framework/test_framework.py", line 677, in wait_until
    timeout_factor=self.options.timeout_factor)
  File "/work/test/functional/test_framework/util.py", line 284, in wait_until_helper
    "Predicate {} not true after {} seconds".format(predicate_source, timeout))
AssertionError: Predicate ''''
            self.wait_until(lambda: count_outbounds_getavaproofs()
                            == outbounds_getavaproofs + 3)
''' not true after 60.0 seconds
2022-07-20T15:43:10.937000Z TestFramework (INFO): Stopping nodes
2022-07-20T15:43:11.239000Z TestFramework (WARNING): Not cleaning up dir /work/abc-ci-builds/build-tsan/test/tmp/test_runner_₿₵_  _20220720_153922/abc_p2p_compactproofs_13
2022-07-20T15:43:11.239000Z TestFramework (ERROR): Test failed. Test logging available at /work/abc-ci-builds/build-tsan/test/tmp/test_runner_₿₵_  _20220720_153922/abc_p2p_compactproofs_13/test_framework.log
2022-07-20T15:43:11.239000Z TestFramework (ERROR): 
2022-07-20T15:43:11.240000Z TestFramework (ERROR): Hint: Call /work/test/functional/combine_logs.py '/work/abc-ci-builds/build-tsan/test/tmp/test_runner_₿₵_  _20220720_153922/abc_p2p_compactproofs_13' to consolidate all logs
2022-07-20T15:43:11.240000Z TestFramework (ERROR): 
2022-07-20T15:43:11.240000Z TestFramework (ERROR): If this failure happened unexpectedly or intermittently, please file a bug and provide a link or upload of the combined log.
2022-07-20T15:43:11.240000Z TestFramework (ERROR): https://github.com/Bitcoin-ABC/bitcoin-abc/issues
2022-07-20T15:43:11.240000Z TestFramework (ERROR):

Each failure log is accessible here:
Bitcoin ABC functional tests: abc_p2p_compactproofs.py
Bitcoin ABC functional tests: abc_p2p_compactproofs.py --nolegacyavaproof

The build failure is hopefully fixed in D11776

Failed tests logs:

====== Bitcoin ABC functional tests: abc_p2p_compactproofs.py ======

------- Stdout: -------
2022-07-20T16:46:42.985000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-tsan/test/tmp/test_runner_₿₵_  _20220720_164530/abc_p2p_compactproofs_11
2022-07-20T16:46:52.726000Z TestFramework (INFO): Check we send a getavaproofs message to our avalanche outbound peers
2022-07-20T16:46:55.355000Z TestFramework (INFO): Check we send periodic getavaproofs message to some of our peers
2022-07-20T16:46:56.674000Z TestFramework (INFO): After the first avaproofs has been received, all the peers are requested periodically
2022-07-20T16:47:03.236000Z TestFramework (INFO): Check we send a getavaproofs message to our manually connected peers that support avalanche
2022-07-20T16:47:04.413000Z TestFramework (INFO): Check the node responds to getavaproofs messages
2022-07-20T16:47:19.295000Z TestFramework (INFO): Check the node requests the missing proofs after receiving an avaproofs message
2022-07-20T16:47:29.541000Z TestFramework (INFO): The node ignores unsollicited avaproofs
2022-07-20T16:47:29.701000Z TestFramework (INFO): Check no proof is requested if there is no shortid
2022-07-20T16:47:29.975000Z TestFramework (INFO): Check the node requests all the proofs if it known none
2022-07-20T16:47:30.150000Z TestFramework (INFO): Check the node requests only the missing proofs
2022-07-20T16:47:30.461000Z TestFramework (INFO): Check the node don't request prefilled proofs
2022-07-20T16:47:30.745000Z TestFramework (INFO): Check the node requests no proof if it knows all of them
2022-07-20T16:47:31.057000Z TestFramework (INFO): Check out of bounds index
2022-07-20T16:47:31.383000Z TestFramework (INFO): An invalid prefilled proof will trigger a ban
2022-07-20T16:47:31.793000Z TestFramework (INFO): Check the node respond to missing proofs requests
2022-07-20T16:47:40.445000Z TestFramework (INFO): Unsollicited requests are ignored
2022-07-20T16:47:40.462000Z TestFramework (INFO): Sending an empty request has no effect
2022-07-20T16:47:40.463000Z TestFramework (INFO): Check the requested proofs are sent by the node
2022-07-20T16:47:41.831000Z TestFramework (INFO): Check the node will not send the proofs if not requested before the timeout elapsed
2022-07-20T16:47:42.540000Z TestFramework (INFO): Check the node get compact proofs upon avalanche outbound discovery
2022-07-20T16:47:59.507000Z TestFramework (INFO): Check the node don't request compact proofs during IBD
2022-07-20T16:48:07.720000Z TestFramework (INFO): Check we also request the inbounds until the quorum is established
2022-07-20T16:49:17.468000Z TestFramework.utils (ERROR): wait_until() failed. Predicate: ''''
            self.wait_until(lambda: count_getavaproofs(
                [inbound, outbound]) > current_total)
'''
2022-07-20T16:49:17.468000Z TestFramework (ERROR): Assertion failed
Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_framework.py", line 136, in main
    self.run_test()
  File "/work/test/functional/abc_p2p_compactproofs.py", line 681, in run_test
    self.test_send_inbound_getavaproofs_until_quorum_is_established()
  File "/work/test/functional/abc_p2p_compactproofs.py", line 663, in test_send_inbound_getavaproofs_until_quorum_is_established
    self.wait_until(lambda: count_getavaproofs(
  File "/work/test/functional/test_framework/test_framework.py", line 677, in wait_until
    timeout_factor=self.options.timeout_factor)
  File "/work/test/functional/test_framework/util.py", line 284, in wait_until_helper
    "Predicate {} not true after {} seconds".format(predicate_source, timeout))
AssertionError: Predicate ''''
            self.wait_until(lambda: count_getavaproofs(
                [inbound, outbound]) > current_total)
''' not true after 60.0 seconds
2022-07-20T16:49:17.519000Z TestFramework (INFO): Stopping nodes
2022-07-20T16:49:17.872000Z TestFramework (WARNING): Not cleaning up dir /work/abc-ci-builds/build-tsan/test/tmp/test_runner_₿₵_  _20220720_164530/abc_p2p_compactproofs_11
2022-07-20T16:49:17.872000Z TestFramework (ERROR): Test failed. Test logging available at /work/abc-ci-builds/build-tsan/test/tmp/test_runner_₿₵_  _20220720_164530/abc_p2p_compactproofs_11/test_framework.log
2022-07-20T16:49:17.872000Z TestFramework (ERROR): 
2022-07-20T16:49:17.872000Z TestFramework (ERROR): Hint: Call /work/test/functional/combine_logs.py '/work/abc-ci-builds/build-tsan/test/tmp/test_runner_₿₵_  _20220720_164530/abc_p2p_compactproofs_11' to consolidate all logs
2022-07-20T16:49:17.872000Z TestFramework (ERROR): 
2022-07-20T16:49:17.872000Z TestFramework (ERROR): If this failure happened unexpectedly or intermittently, please file a bug and provide a link or upload of the combined log.
2022-07-20T16:49:17.873000Z TestFramework (ERROR): https://github.com/Bitcoin-ABC/bitcoin-abc/issues
2022-07-20T16:49:17.873000Z TestFramework (ERROR):

Each failure log is accessible here:
Bitcoin ABC functional tests: abc_p2p_compactproofs.py

This revision is now accepted and ready to land.Jul 20 2022, 21:14
This revision was automatically updated to reflect the committed changes.