Page MenuHomePhabricator

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

Authored by roqqit on Dec 6 2024, 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

Event Timeline

Owners added a reviewer: Restricted Owners Package.Dec 6 2024, 15:13
roqqit requested review of this revision.Dec 6 2024, 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.Dec 6 2024, 16:27
Fabien requested changes to this revision.Dec 6 2024, 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.Dec 6 2024, 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