Page MenuHomePhabricator

[avalanche] Ensure every connected block has staking rewards computed
ClosedPublic

Authored by roqqit on Fri, Dec 6, 15:13.

Details

Reviewers
Fabien
Group Reviewers
Restricted Owners Package(Owns No Changed Paths)
Restricted Project
Commits
rABC7a92d503f674: [avalanche] Ensure every connected block has staking rewards computed
Summary

While staking rewards is robust enough to skip computing, it is not the expected behavior.

Test Plan
ninja check check-functional

Diff Detail

Repository
rABC Bitcoin ABC
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

Owners added a reviewer: Restricted Owners Package.Fri, Dec 6, 15:13
roqqit requested review of this revision.Fri, Dec 6, 15:13

Failed tests logs:

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

------- Stdout: -------
2024-12-06T15:20:28.018000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-debug/test/tmp/test_runner_โ‚ฟโ‚ต_๐Ÿƒ_20241206_151848/abc_p2p_avalanche_quorum_11
2024-12-06T15:20:32.170000Z TestFramework (ERROR): Unexpected exception caught during testing
Traceback (most recent call last):
  File "/work/test/functional/test_framework/authproxy.py", line 125, in _request
    return self._get_response()
           ^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/authproxy.py", line 217, in _get_response
    http_response = self.__conn.getresponse()
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/http/client.py", line 1374, in getresponse
    response.begin()
  File "/usr/lib/python3.11/http/client.py", line 318, in begin
    version, status, reason = self._read_status()
                              ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/http/client.py", line 287, in _read_status
    raise RemoteDisconnected("Remote end closed connection without"
http.client.RemoteDisconnected: Remote end closed connection without response

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_framework.py", line 148, in main
    self._run_test_internal()
  File "/work/test/functional/test_framework/test_framework.py", line 138, in _run_test_internal
    self.run_test()
  File "/work/test/functional/abc_p2p_avalanche_quorum.py", line 68, in run_test
    key, proof = gen_proof(self, self.nodes[0])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/avatools.py", line 416, in gen_proof
    blockhashes = test_framework.generate(
                  ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/test_framework.py", line 740, in generate
    blocks = generator.generate(*args, invalid_call=False, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/test_node.py", line 449, in generate
    return self.generatetoaddress(
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/test_node.py", line 462, in generatetoaddress
    return self.__getattr__("generatetoaddress")(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/coverage.py", line 46, in __call__
    return_val = self.auth_service_proxy_instance.__call__(*args, **kwargs)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/authproxy.py", line 176, in __call__
    response, status = self._request(
                       ^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/authproxy.py", line 130, in _request
    self.__conn.request(method, path, postdata, headers)
  File "/usr/lib/python3.11/http/client.py", line 1282, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/usr/lib/python3.11/http/client.py", line 1328, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "/usr/lib/python3.11/http/client.py", line 1277, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "/usr/lib/python3.11/http/client.py", line 1037, in _send_output
    self.send(msg)
  File "/usr/lib/python3.11/http/client.py", line 975, in send
    self.connect()
  File "/usr/lib/python3.11/http/client.py", line 941, in connect
    self.sock = self._create_connection(
                ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/socket.py", line 851, in create_connection
    raise exceptions[0]
  File "/usr/lib/python3.11/socket.py", line 836, in create_connection
    sock.connect(sa)
ConnectionRefusedError: [Errno 111] Connection refused
2024-12-06T15:20:32.223000Z TestFramework (INFO): Stopping nodes
2024-12-06T15:20:32.223000Z TestFramework.node0 (ERROR): Unable to stop node.
Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_node.py", line 512, in stop_node
    self.stop(wait=wait)
  File "/work/test/functional/test_framework/coverage.py", line 46, in __call__
    return_val = self.auth_service_proxy_instance.__call__(*args, **kwargs)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/authproxy.py", line 176, in __call__
    response, status = self._request(
                       ^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/authproxy.py", line 124, in _request
    self.__conn.request(method, path, postdata, headers)
  File "/usr/lib/python3.11/http/client.py", line 1282, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/usr/lib/python3.11/http/client.py", line 1293, in _send_request
    self.putrequest(method, url, **skips)
  File "/usr/lib/python3.11/http/client.py", line 1119, in putrequest
    raise CannotSendRequest(self.__state)
http.client.CannotSendRequest: Request-sent
[node 2] Cleaning up leftover process
[node 1] Cleaning up leftover process
[node 0] Cleaning up leftover process
------- Stderr: -------
Traceback (most recent call last):
  File "/work/test/functional/abc_p2p_avalanche_quorum.py", line 268, in <module>
    AvalancheQuorumTest().main()
  File "/work/test/functional/test_framework/test_framework.py", line 171, in main
    exit_code = self.shutdown()
                ^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/test_framework.py", line 397, in shutdown
    self.stop_nodes()
  File "/work/test/functional/test_framework/test_framework.py", line 651, in stop_nodes
    node.stop_node(wait=wait, wait_until_stopped=False)
  File "/work/test/functional/test_framework/test_node.py", line 524, in stop_node
    raise AssertionError(f"Unexpected stderr {stderr} != {expected_stderr}")
AssertionError: Unexpected stderr Assertion failed: detected inconsistent lock order for '::cs_main' in /work/src/validation.cpp:6859 (in thread 'httpworker.2'), details in debug log. !=
====== Bitcoin ABC functional tests: abc_p2p_compactproofs.py ======

------- Stdout: -------
2024-12-06T15:21:13.964000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-debug/test/tmp/test_runner_โ‚ฟโ‚ต_๐Ÿƒ_20241206_151848/abc_p2p_compactproofs_25
2024-12-06T15:21:15.553000Z TestFramework (INFO): Check we send a getavaproofs message to our avalanche outbound peers
2024-12-06T15:21:17.516000Z TestFramework (INFO): Check we send periodic getavaproofs message to some of our peers
2024-12-06T15:21:17.570000Z TestFramework (INFO): After the first avaproofs has been received, all the peers are requested periodically
2024-12-06T15:21:17.842000Z TestFramework (INFO): Empty avaproofs will not trigger any request
2024-12-06T15:21:17.843000Z TestFramework (INFO): Check we send a getavaproofs message to our manually connected peers that support avalanche
2024-12-06T15:21:18.676000Z TestFramework (INFO): Check the node responds to getavaproofs messages
2024-12-06T15:21:21.175000Z TestFramework (ERROR): Unexpected exception caught during testing
Traceback (most recent call last):
  File "/work/test/functional/test_framework/authproxy.py", line 125, in _request
    return self._get_response()
           ^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/authproxy.py", line 217, in _get_response
    http_response = self.__conn.getresponse()
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/http/client.py", line 1374, in getresponse
    response.begin()
  File "/usr/lib/python3.11/http/client.py", line 318, in begin
    version, status, reason = self._read_status()
                              ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/http/client.py", line 287, in _read_status
    raise RemoteDisconnected("Remote end closed connection without"
http.client.RemoteDisconnected: Remote end closed connection without response

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_framework.py", line 148, in main
    self._run_test_internal()
  File "/work/test/functional/test_framework/test_framework.py", line 138, in _run_test_internal
    self.run_test()
  File "/work/test/functional/abc_p2p_compactproofs.py", line 726, in run_test
    self.test_respond_getavaproofs()
  File "/work/test/functional/abc_p2p_compactproofs.py", line 289, in test_respond_getavaproofs
    p = get_ava_p2p_interface(self, node)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/avatools.py", line 385, in get_ava_p2p_interface
    n = AvaP2PInterface(test_framework, node)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/avatools.py", line 318, in __init__
    self.master_privkey, self.proof = gen_proof(test_framework, node)
                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/avatools.py", line 416, in gen_proof
    blockhashes = test_framework.generate(
                  ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/test_framework.py", line 740, in generate
    blocks = generator.generate(*args, invalid_call=False, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/test_node.py", line 449, in generate
    return self.generatetoaddress(
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/test_node.py", line 462, in generatetoaddress
    return self.__getattr__("generatetoaddress")(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/coverage.py", line 46, in __call__
    return_val = self.auth_service_proxy_instance.__call__(*args, **kwargs)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/authproxy.py", line 176, in __call__
    response, status = self._request(
                       ^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/authproxy.py", line 130, in _request
    self.__conn.request(method, path, postdata, headers)
  File "/usr/lib/python3.11/http/client.py", line 1282, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/usr/lib/python3.11/http/client.py", line 1328, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "/usr/lib/python3.11/http/client.py", line 1277, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "/usr/lib/python3.11/http/client.py", line 1037, in _send_output
    self.send(msg)
  File "/usr/lib/python3.11/http/client.py", line 975, in send
    self.connect()
  File "/usr/lib/python3.11/http/client.py", line 941, in connect
    self.sock = self._create_connection(
                ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/socket.py", line 851, in create_connection
    raise exceptions[0]
  File "/usr/lib/python3.11/socket.py", line 836, in create_connection
    sock.connect(sa)
ConnectionRefusedError: [Errno 111] Connection refused
2024-12-06T15:21:21.228000Z TestFramework (INFO): Stopping nodes
2024-12-06T15:21:21.228000Z TestFramework.node0 (ERROR): Unable to stop node.
Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_node.py", line 512, in stop_node
    self.stop(wait=wait)
  File "/work/test/functional/test_framework/coverage.py", line 46, in __call__
    return_val = self.auth_service_proxy_instance.__call__(*args, **kwargs)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/authproxy.py", line 176, in __call__
    response, status = self._request(
                       ^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/authproxy.py", line 124, in _request
    self.__conn.request(method, path, postdata, headers)
  File "/usr/lib/python3.11/http/client.py", line 1282, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/usr/lib/python3.11/http/client.py", line 1293, in _send_request
    self.putrequest(method, url, **skips)
  File "/usr/lib/python3.11/http/client.py", line 1119, in putrequest
    raise CannotSendRequest(self.__state)
http.client.CannotSendRequest: Request-sent
[node 0] Cleaning up leftover process
------- Stderr: -------
Traceback (most recent call last):
  File "/work/test/functional/abc_p2p_compactproofs.py", line 735, in <module>
    CompactProofsTest().main()
  File "/work/test/functional/test_framework/test_framework.py", line 171, in main
    exit_code = self.shutdown()
                ^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/test_framework.py", line 397, in shutdown
    self.stop_nodes()
  File "/work/test/functional/test_framework/test_framework.py", line 651, in stop_nodes
    node.stop_node(wait=wait, wait_until_stopped=False)
  File "/work/test/functional/test_framework/test_node.py", line 524, in stop_node
    raise AssertionError(f"Unexpected stderr {stderr} != {expected_stderr}")
AssertionError: Unexpected stderr Assertion failed: detected inconsistent lock order for '::cs_main' in /work/src/validation.cpp:6859 (in thread 'httpworker.2'), details in debug log. !=
====== Bitcoin ABC functional tests: abc_p2p_getavaaddr.py ======

------- Stdout: -------
2024-12-06T15:20:32.349000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-debug/test/tmp/test_runner_โ‚ฟโ‚ต_๐Ÿƒ_20241206_151848/abc_p2p_getavaaddr_12
2024-12-06T15:20:35.524000Z TestFramework.p2p (WARNING): Connection lost to 127.0.0.1:20769 due to [Errno 104] Connection reset by peer
2024-12-06T15:20:35.525000Z TestFramework.p2p (WARNING): Connection lost to 127.0.0.1:20769 due to [Errno 104] Connection reset by peer
2024-12-06T15:20:39.604000Z TestFramework.p2p (WARNING): Connection lost to 127.0.0.1:20769 due to [Errno 104] Connection reset by peer
2024-12-06T15:20:43.598000Z TestFramework (INFO): Check we send a getavaaddr message to our avalanche outbound peers
2024-12-06T15:20:46.074000Z TestFramework (INFO): Check we send a getavaaddr message to our manually connected peers that support avalanche
2024-12-06T15:20:46.495000Z TestFramework (INFO): Check we send a getavaaddr message while our quorum is not established
2024-12-06T15:20:48.462000Z TestFramework (ERROR): Unexpected exception caught during testing
Traceback (most recent call last):
  File "/work/test/functional/test_framework/authproxy.py", line 125, in _request
    return self._get_response()
           ^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/authproxy.py", line 217, in _get_response
    http_response = self.__conn.getresponse()
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/http/client.py", line 1374, in getresponse
    response.begin()
  File "/usr/lib/python3.11/http/client.py", line 318, in begin
    version, status, reason = self._read_status()
                              ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/http/client.py", line 287, in _read_status
    raise RemoteDisconnected("Remote end closed connection without"
http.client.RemoteDisconnected: Remote end closed connection without response

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_framework.py", line 148, in main
    self._run_test_internal()
  File "/work/test/functional/test_framework/test_framework.py", line 138, in _run_test_internal
    self.run_test()
  File "/work/test/functional/abc_p2p_getavaaddr.py", line 555, in run_test
    self.getavaaddr_noquorum()
  File "/work/test/functional/abc_p2p_getavaaddr.py", line 379, in getavaaddr_noquorum
    avapeer = AllYesAvaP2PInterface(self, node)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/abc_p2p_getavaaddr.py", line 78, in __init__
    super().__init__(test_framework, node)
  File "/work/test/functional/abc_p2p_getavaaddr.py", line 63, in __init__
    super().__init__(test_framework, node)
  File "/work/test/functional/test_framework/avatools.py", line 318, in __init__
    self.master_privkey, self.proof = gen_proof(test_framework, node)
                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/avatools.py", line 416, in gen_proof
    blockhashes = test_framework.generate(
                  ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/test_framework.py", line 740, in generate
    blocks = generator.generate(*args, invalid_call=False, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/test_node.py", line 449, in generate
    return self.generatetoaddress(
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/test_node.py", line 462, in generatetoaddress
    return self.__getattr__("generatetoaddress")(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/coverage.py", line 46, in __call__
    return_val = self.auth_service_proxy_instance.__call__(*args, **kwargs)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/authproxy.py", line 176, in __call__
    response, status = self._request(
                       ^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/authproxy.py", line 130, in _request
    self.__conn.request(method, path, postdata, headers)
  File "/usr/lib/python3.11/http/client.py", line 1282, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/usr/lib/python3.11/http/client.py", line 1328, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "/usr/lib/python3.11/http/client.py", line 1277, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "/usr/lib/python3.11/http/client.py", line 1037, in _send_output
    self.send(msg)
  File "/usr/lib/python3.11/http/client.py", line 975, in send
    self.connect()
  File "/usr/lib/python3.11/http/client.py", line 941, in connect
    self.sock = self._create_connection(
                ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/socket.py", line 851, in create_connection
    raise exceptions[0]
  File "/usr/lib/python3.11/socket.py", line 836, in create_connection
    sock.connect(sa)
ConnectionRefusedError: [Errno 111] Connection refused
2024-12-06T15:20:48.516000Z TestFramework (INFO): Stopping nodes
2024-12-06T15:20:48.516000Z TestFramework.node0 (ERROR): Unable to stop node.
Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_node.py", line 512, in stop_node
    self.stop(wait=wait)
  File "/work/test/functional/test_framework/coverage.py", line 46, in __call__
    return_val = self.auth_service_proxy_instance.__call__(*args, **kwargs)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/authproxy.py", line 176, in __call__
    response, status = self._request(
                       ^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/authproxy.py", line 124, in _request
    self.__conn.request(method, path, postdata, headers)
  File "/usr/lib/python3.11/http/client.py", line 1282, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/usr/lib/python3.11/http/client.py", line 1293, in _send_request
    self.putrequest(method, url, **skips)
  File "/usr/lib/python3.11/http/client.py", line 1119, in putrequest
    raise CannotSendRequest(self.__state)
http.client.CannotSendRequest: Request-sent
[node 0] Cleaning up leftover process
------- Stderr: -------
Traceback (most recent call last):
  File "/work/test/functional/abc_p2p_getavaaddr.py", line 561, in <module>
    AvaAddrTest().main()
  File "/work/test/functional/test_framework/test_framework.py", line 171, in main
    exit_code = self.shutdown()
                ^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/test_framework.py", line 397, in shutdown
    self.stop_nodes()
  File "/work/test/functional/test_framework/test_framework.py", line 651, in stop_nodes
    node.stop_node(wait=wait, wait_until_stopped=False)
  File "/work/test/functional/test_framework/test_node.py", line 524, in stop_node
    raise AssertionError(f"Unexpected stderr {stderr} != {expected_stderr}")
AssertionError: Unexpected stderr Assertion failed: detected inconsistent lock order for '::cs_main' in /work/src/validation.cpp:6859 (in thread 'httpworker.3'), details in debug log. !=
====== Bitcoin ABC functional tests: abc_rpc_getavalancheinfo.py ======

------- Stdout: -------
2024-12-06T15:21:18.241000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-debug/test/tmp/test_runner_โ‚ฟโ‚ต_๐Ÿƒ_20241206_151848/abc_rpc_getavalancheinfo_26
2024-12-06T15:21:19.283000Z TestFramework (INFO): The test node has no proof
2024-12-06T15:21:19.284000Z TestFramework (INFO): The test node has a proof
2024-12-06T15:21:22.417000Z TestFramework (INFO): Mine a block to trigger proof validation, check it is immature
2024-12-06T15:21:22.444000Z TestFramework (INFO): Mine another block to check the local proof immature state remains
2024-12-06T15:21:22.456000Z TestFramework (INFO): Mine another block to mature the local proof
2024-12-06T15:21:22.464000Z TestFramework (INFO): Connect a bunch of peers and nodes
2024-12-06T15:21:24.021000Z TestFramework (ERROR): Unexpected exception caught during testing
Traceback (most recent call last):
  File "/work/test/functional/test_framework/authproxy.py", line 125, in _request
    return self._get_response()
           ^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/authproxy.py", line 217, in _get_response
    http_response = self.__conn.getresponse()
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/http/client.py", line 1374, in getresponse
    response.begin()
  File "/usr/lib/python3.11/http/client.py", line 318, in begin
    version, status, reason = self._read_status()
                              ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/http/client.py", line 287, in _read_status
    raise RemoteDisconnected("Remote end closed connection without"
http.client.RemoteDisconnected: Remote end closed connection without response

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_framework.py", line 148, in main
    self._run_test_internal()
  File "/work/test/functional/test_framework/test_framework.py", line 138, in _run_test_internal
    self.run_test()
  File "/work/test/functional/abc_rpc_getavalancheinfo.py", line 350, in run_test
    _privkey, _proof = gen_proof(self, node)
                       ^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/avatools.py", line 416, in gen_proof
    blockhashes = test_framework.generate(
                  ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/test_framework.py", line 740, in generate
    blocks = generator.generate(*args, invalid_call=False, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/test_node.py", line 449, in generate
    return self.generatetoaddress(
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/test_node.py", line 462, in generatetoaddress
    return self.__getattr__("generatetoaddress")(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/coverage.py", line 46, in __call__
    return_val = self.auth_service_proxy_instance.__call__(*args, **kwargs)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/authproxy.py", line 176, in __call__
    response, status = self._request(
                       ^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/authproxy.py", line 130, in _request
    self.__conn.request(method, path, postdata, headers)
  File "/usr/lib/python3.11/http/client.py", line 1282, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/usr/lib/python3.11/http/client.py", line 1328, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "/usr/lib/python3.11/http/client.py", line 1277, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "/usr/lib/python3.11/http/client.py", line 1037, in _send_output
    self.send(msg)
  File "/usr/lib/python3.11/http/client.py", line 975, in send
    self.connect()
  File "/usr/lib/python3.11/http/client.py", line 941, in connect
    self.sock = self._create_connection(
                ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/socket.py", line 851, in create_connection
    raise exceptions[0]
  File "/usr/lib/python3.11/socket.py", line 836, in create_connection
    sock.connect(sa)
ConnectionRefusedError: [Errno 111] Connection refused
2024-12-06T15:21:24.074000Z TestFramework (INFO): Stopping nodes
2024-12-06T15:21:24.074000Z TestFramework.node0 (ERROR): Unable to stop node.
Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_node.py", line 512, in stop_node
    self.stop(wait=wait)
  File "/work/test/functional/test_framework/coverage.py", line 46, in __call__
    return_val = self.auth_service_proxy_instance.__call__(*args, **kwargs)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/authproxy.py", line 176, in __call__
    response, status = self._request(
                       ^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/authproxy.py", line 124, in _request
    self.__conn.request(method, path, postdata, headers)
  File "/usr/lib/python3.11/http/client.py", line 1282, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/usr/lib/python3.11/http/client.py", line 1293, in _send_request
    self.putrequest(method, url, **skips)
  File "/usr/lib/python3.11/http/client.py", line 1119, in putrequest
    raise CannotSendRequest(self.__state)
http.client.CannotSendRequest: Request-sent
[node 0] Cleaning up leftover process
------- Stderr: -------
Traceback (most recent call last):
  File "/work/test/functional/abc_rpc_getavalancheinfo.py", line 703, in <module>
    GetAvalancheInfoTest().main()
  File "/work/test/functional/test_framework/test_framework.py", line 171, in main
    exit_code = self.shutdown()
                ^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/test_framework.py", line 397, in shutdown
    self.stop_nodes()
  File "/work/test/functional/test_framework/test_framework.py", line 651, in stop_nodes
    node.stop_node(wait=wait, wait_until_stopped=False)
  File "/work/test/functional/test_framework/test_node.py", line 524, in stop_node
    raise AssertionError(f"Unexpected stderr {stderr} != {expected_stderr}")
AssertionError: Unexpected stderr Assertion failed: detected inconsistent lock order for '::cs_main' in /work/src/validation.cpp:6859 (in thread 'httpworker.2'), details in debug log. !=
====== Bitcoin ABC functional tests: abc_rpc_getavalancheproofs.py ======

------- Stdout: -------
2024-12-06T15:24:16.640000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-debug/test/tmp/test_runner_โ‚ฟโ‚ต_๐Ÿƒ_20241206_151848/abc_rpc_getavalancheproofs_68
2024-12-06T15:24:17.648000Z TestFramework (INFO): The test node has no proof
2024-12-06T15:24:17.648000Z TestFramework (INFO): The test node has a proof
2024-12-06T15:24:18.911000Z TestFramework (INFO): Connect a bunch of peers and nodes
2024-12-06T15:24:20.408000Z TestFramework (ERROR): Unexpected exception caught during testing
Traceback (most recent call last):
  File "/work/test/functional/test_framework/authproxy.py", line 125, in _request
    return self._get_response()
           ^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/authproxy.py", line 217, in _get_response
    http_response = self.__conn.getresponse()
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/http/client.py", line 1374, in getresponse
    response.begin()
  File "/usr/lib/python3.11/http/client.py", line 318, in begin
    version, status, reason = self._read_status()
                              ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/http/client.py", line 287, in _read_status
    raise RemoteDisconnected("Remote end closed connection without"
http.client.RemoteDisconnected: Remote end closed connection without response

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_framework.py", line 148, in main
    self._run_test_internal()
  File "/work/test/functional/test_framework/test_framework.py", line 138, in _run_test_internal
    self.run_test()
  File "/work/test/functional/abc_rpc_getavalancheproofs.py", line 108, in run_test
    _privkey, _proof = gen_proof(self, node)
                       ^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/avatools.py", line 416, in gen_proof
    blockhashes = test_framework.generate(
                  ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/test_framework.py", line 740, in generate
    blocks = generator.generate(*args, invalid_call=False, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/test_node.py", line 449, in generate
    return self.generatetoaddress(
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/test_node.py", line 462, in generatetoaddress
    return self.__getattr__("generatetoaddress")(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/coverage.py", line 46, in __call__
    return_val = self.auth_service_proxy_instance.__call__(*args, **kwargs)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/authproxy.py", line 176, in __call__
    response, status = self._request(
                       ^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/authproxy.py", line 130, in _request
    self.__conn.request(method, path, postdata, headers)
  File "/usr/lib/python3.11/http/client.py", line 1282, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/usr/lib/python3.11/http/client.py", line 1328, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "/usr/lib/python3.11/http/client.py", line 1277, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "/usr/lib/python3.11/http/client.py", line 1037, in _send_output
    self.send(msg)
  File "/usr/lib/python3.11/http/client.py", line 975, in send
    self.connect()
  File "/usr/lib/python3.11/http/client.py", line 941, in connect
    self.sock = self._create_connection(
                ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/socket.py", line 851, in create_connection
    raise exceptions[0]
  File "/usr/lib/python3.11/socket.py", line 836, in create_connection
    sock.connect(sa)
ConnectionRefusedError: [Errno 111] Connection refused
2024-12-06T15:24:20.461000Z TestFramework (INFO): Stopping nodes
2024-12-06T15:24:20.461000Z TestFramework.node0 (ERROR): Unable to stop node.
Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_node.py", line 512, in stop_node
    self.stop(wait=wait)
  File "/work/test/functional/test_framework/coverage.py", line 46, in __call__
    return_val = self.auth_service_proxy_instance.__call__(*args, **kwargs)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/authproxy.py", line 176, in __call__
    response, status = self._request(
                       ^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/authproxy.py", line 124, in _request
    self.__conn.request(method, path, postdata, headers)
  File "/usr/lib/python3.11/http/client.py", line 1282, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/usr/lib/python3.11/http/client.py", line 1293, in _send_request
    self.putrequest(method, url, **skips)
  File "/usr/lib/python3.11/http/client.py", line 1119, in putrequest
    raise CannotSendRequest(self.__state)
http.client.CannotSendRequest: Request-sent
[node 0] Cleaning up leftover process
------- Stderr: -------
Traceback (most recent call last):
  File "/work/test/functional/abc_rpc_getavalancheproofs.py", line 226, in <module>
    GetAvalancheProofsTest().main()
  File "/work/test/functional/test_framework/test_framework.py", line 171, in main
    exit_code = self.shutdown()
                ^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/test_framework.py", line 397, in shutdown
    self.stop_nodes()
  File "/work/test/functional/test_framework/test_framework.py", line 651, in stop_nodes
    node.stop_node(wait=wait, wait_until_stopped=False)
  File "/work/test/functional/test_framework/test_node.py", line 524, in stop_node
    raise AssertionError(f"Unexpected stderr {stderr} != {expected_stderr}")
AssertionError: Unexpected stderr Assertion failed: detected inconsistent lock order for '::cs_main' in /work/src/validation.cpp:6859 (in thread 'httpworker.0'), details in debug log. !=
====== Bitcoin ABC functional tests: abc_rpc_invalidateavalancheproof.py ======

------- Stdout: -------
2024-12-06T15:27:33.312000Z TestFramework (INFO): Initializing test directory /work/abc-ci-builds/build-debug/test/tmp/test_runner_โ‚ฟโ‚ต_๐Ÿƒ_20241206_151848/abc_rpc_invalidateavalancheproof_147
2024-12-06T15:27:36.680000Z TestFramework (ERROR): Unexpected exception caught during testing
Traceback (most recent call last):
  File "/work/test/functional/test_framework/authproxy.py", line 125, in _request
    return self._get_response()
           ^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/authproxy.py", line 217, in _get_response
    http_response = self.__conn.getresponse()
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/http/client.py", line 1374, in getresponse
    response.begin()
  File "/usr/lib/python3.11/http/client.py", line 318, in begin
    version, status, reason = self._read_status()
                              ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/http/client.py", line 287, in _read_status
    raise RemoteDisconnected("Remote end closed connection without"
http.client.RemoteDisconnected: Remote end closed connection without response

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_framework.py", line 148, in main
    self._run_test_internal()
  File "/work/test/functional/test_framework/test_framework.py", line 138, in _run_test_internal
    self.run_test()
  File "/work/test/functional/abc_rpc_invalidateavalancheproof.py", line 56, in run_test
    quorum = [
             ^
  File "/work/test/functional/abc_rpc_invalidateavalancheproof.py", line 57, in <listcomp>
    node.add_p2p_connection(AvaP2PInterface(self, node)) for _ in range(10)
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/avatools.py", line 318, in __init__
    self.master_privkey, self.proof = gen_proof(test_framework, node)
                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/avatools.py", line 416, in gen_proof
    blockhashes = test_framework.generate(
                  ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/test_framework.py", line 740, in generate
    blocks = generator.generate(*args, invalid_call=False, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/test_node.py", line 449, in generate
    return self.generatetoaddress(
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/test_node.py", line 462, in generatetoaddress
    return self.__getattr__("generatetoaddress")(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/coverage.py", line 46, in __call__
    return_val = self.auth_service_proxy_instance.__call__(*args, **kwargs)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/authproxy.py", line 176, in __call__
    response, status = self._request(
                       ^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/authproxy.py", line 130, in _request
    self.__conn.request(method, path, postdata, headers)
  File "/usr/lib/python3.11/http/client.py", line 1282, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/usr/lib/python3.11/http/client.py", line 1328, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "/usr/lib/python3.11/http/client.py", line 1277, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "/usr/lib/python3.11/http/client.py", line 1037, in _send_output
    self.send(msg)
  File "/usr/lib/python3.11/http/client.py", line 975, in send
    self.connect()
  File "/usr/lib/python3.11/http/client.py", line 941, in connect
    self.sock = self._create_connection(
                ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/socket.py", line 851, in create_connection
    raise exceptions[0]
  File "/usr/lib/python3.11/socket.py", line 836, in create_connection
    sock.connect(sa)
ConnectionRefusedError: [Errno 111] Connection refused
2024-12-06T15:27:36.732000Z TestFramework (INFO): Stopping nodes
2024-12-06T15:27:36.733000Z TestFramework.node0 (ERROR): Unable to stop node.
Traceback (most recent call last):
  File "/work/test/functional/test_framework/test_node.py", line 512, in stop_node
    self.stop(wait=wait)
  File "/work/test/functional/test_framework/coverage.py", line 46, in __call__
    return_val = self.auth_service_proxy_instance.__call__(*args, **kwargs)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/authproxy.py", line 176, in __call__
    response, status = self._request(
                       ^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/authproxy.py", line 124, in _request
    self.__conn.request(method, path, postdata, headers)
  File "/usr/lib/python3.11/http/client.py", line 1282, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/usr/lib/python3.11/http/client.py", line 1293, in _send_request
    self.putrequest(method, url, **skips)
  File "/usr/lib/python3.11/http/client.py", line 1119, in putrequest
    raise CannotSendRequest(self.__state)
http.client.CannotSendRequest: Request-sent
[node 0] Cleaning up leftover process
------- Stderr: -------
Traceback (most recent call last):
  File "/work/test/functional/abc_rpc_invalidateavalancheproof.py", line 150, in <module>
    InvalidateAvalancheProofTest().main()
  File "/work/test/functional/test_framework/test_framework.py", line 171, in main
    exit_code = self.shutdown()
                ^^^^^^^^^^^^^^^
  File "/work/test/functional/test_framework/test_framework.py", line 397, in shutdown
    self.stop_nodes()
  File "/work/test/functional/test_framework/test_framework.py", line 651, in stop_nodes
    node.stop_node(wait=wait, wait_until_stopped=False)
  File "/work/test/functional/test_framework/test_node.py", line 524, in stop_node
    raise AssertionError(f"Unexpected stderr {stderr} != {expected_stderr}")
AssertionError: Unexpected stderr Assertion failed: detected inconsistent lock order for '::cs_main' in /work/src/validation.cpp:6859 (in thread 'httpworker.0'), details in debug log. !=

Each failure log is accessible here:
Bitcoin ABC functional tests: abc_p2p_avalanche_quorum.py
Bitcoin ABC functional tests: abc_p2p_compactproofs.py
Bitcoin ABC functional tests: abc_p2p_getavaaddr.py
Bitcoin ABC functional tests: abc_rpc_getavalancheinfo.py
Bitcoin ABC functional tests: abc_rpc_getavalancheproofs.py
Bitcoin ABC functional tests: abc_rpc_invalidateavalancheproof.py

roqqit planned changes to this revision.Fri, Dec 6, 16:27
Fabien requested changes to this revision.Fri, Dec 6, 20:20
Fabien added a subscriber: Fabien.
Fabien added inline comments.
src/validation.cpp
3597 โ†—(On Diff #51449)

You don't want to it in the loop. This means that this could have changed between loops which is not what you want (plus it's locking more than needed).

3601 โ†—(On Diff #51449)

Let's not use 10 but some lower value here. There is no real world where 10 could happen unless you never finalized a block. 3 seems like a better candidate to me.

This revision now requires changes to proceed.Fri, Dec 6, 20:20
Fabien added inline comments.
src/validation.cpp
3587โ€“3591 โ†—(On Diff #51456)

Nit

This revision is now accepted and ready to land.Mon, Dec 9, 13:06