mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-30 15:58:24 +01:00
Return EXIT_FAILURE on post-init fatal errors
It seems odd to return `EXIT_SUCCESS` when the node aborted execution due a fatal internal error or any post-init problem that triggers an unrequested shutdown. e.g. blocks or coins db I/O errors, disconnect block failure, failure during thread import (external blocks loading process error), among others. Co-authored-by: Ryan Ofsky <ryan@ofsky.org>
This commit is contained in:
@@ -365,7 +365,7 @@ class TestNode():
|
||||
if wait_until_stopped:
|
||||
self.wait_until_stopped()
|
||||
|
||||
def is_node_stopped(self):
|
||||
def is_node_stopped(self, expected_ret_code=None):
|
||||
"""Checks whether the node has stopped.
|
||||
|
||||
Returns True if the node has stopped. False otherwise.
|
||||
@@ -377,8 +377,13 @@ class TestNode():
|
||||
return False
|
||||
|
||||
# process has stopped. Assert that it didn't return an error code.
|
||||
assert return_code == 0, self._node_msg(
|
||||
"Node returned non-zero exit code (%d) when stopping" % return_code)
|
||||
# unless 'expected_ret_code' is provided.
|
||||
if expected_ret_code is not None:
|
||||
assert return_code == expected_ret_code, self._node_msg(
|
||||
"Node returned unexpected exit code (%d) vs (%d) when stopping" % (return_code, expected_ret_code))
|
||||
else:
|
||||
assert return_code == 0, self._node_msg(
|
||||
"Node returned non-zero exit code (%d) when stopping" % return_code)
|
||||
self.running = False
|
||||
self.process = None
|
||||
self.rpc_connected = False
|
||||
@@ -386,8 +391,9 @@ class TestNode():
|
||||
self.log.debug("Node stopped")
|
||||
return True
|
||||
|
||||
def wait_until_stopped(self, timeout=BITCOIND_PROC_WAIT_TIMEOUT):
|
||||
wait_until_helper(self.is_node_stopped, timeout=timeout, timeout_factor=self.timeout_factor)
|
||||
def wait_until_stopped(self, timeout=BITCOIND_PROC_WAIT_TIMEOUT, expect_error=False):
|
||||
expected_ret_code = 1 if expect_error else None # Whether node shutdown return EXIT_FAILURE or EXIT_SUCCESS
|
||||
wait_until_helper(lambda: self.is_node_stopped(expected_ret_code=expected_ret_code), timeout=timeout, timeout_factor=self.timeout_factor)
|
||||
|
||||
def replace_in_config(self, replacements):
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user