Page MenuHomePhabricator

[validation] Make script error messages uniform for parallel/single validation
ClosedPublic

Authored by PiRK on Wed, Nov 5, 14:21.

Details

Summary

This makes the debug output mostly the same for -par=1 and parallel validation runs. Of course,
parallel validation is non-deterministic in what error it may encounter first if there are
multiple issues. Also, the way certain script-related and non-script-related checks are
performed differs between the two modes still, which may result in discrepancies.

This is a partial backport of core#31112
https://github.com/bitcoin/bitcoin/pull/31112/commits/146a3d542683ddb89a31104f5211dfc757d1dafb

Depends on D18876

Test Plan

ninja all check-all

Event Timeline

PiRK requested review of this revision.Wed, Nov 5, 14:21

Tail of the build log:

[554/663] Linking C executable src/secp256k1/verify-bench
[555/663] Linking C executable src/secp256k1/ecmult-bench
[556/663] Linking CXX static library src/libbitcoinconsensus.a
[557/663] Linking CXX static library src/libscript.a
[558/663] Linking CXX static library src/libcommon.a
[559/663] Linking CXX shared library src/libbitcoinconsensus.so.0.32.2
[560/663] Creating library symlink src/libbitcoinconsensus.so.0 src/libbitcoinconsensus.so
[561/663] Linking CXX executable src/iguana/iguana
[562/663] Linking CXX executable src/bitcoin-cli
[563/663] Linking CXX executable src/bitcoin-tx
[564/663] Building CXX object src/CMakeFiles/server.dir/validation.cpp.o
FAILED: src/CMakeFiles/server.dir/validation.cpp.o 
/usr/bin/ccache /usr/bin/c++ -DBOOST_ALL_NO_LIB -DBOOST_NO_CXX98_FUNCTION_BASE -DBUILD_BITCOIN_INTERNAL -DENABLE_AVX2 -DENABLE_SHANI -DENABLE_SSE41 -DHAVE_BUILD_INFO -DHAVE_CONFIG_H -DHAVE_CONSENSUS_LIB -DLEVELDB_ATOMIC_PRESENT -DLEVELDB_PLATFORM_POSIX -DOS_LINUX -I/work/src/leveldb/helpers/memenv -I/work/src/. -I/work/abc-ci-builds/build-without-wallet/src -I/work/src/univalue/include -I/work/abc-ci-builds/build-without-wallet/src/crypto/.. -I/work/src/secp256k1/include -I/work/src/leveldb/include -isystem /usr/include/jemalloc -isystem /usr/include/miniupnpc -Werror -g -O2 -fPIC -fvisibility=hidden -fstack-reuse=none -fstack-protector-all -Wstack-protector -fcf-protection=full -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -Wall -Wextra -Wformat -Wvla -Wcast-align -Wunused-parameter -Wmissing-braces -Wredundant-decls -Wsign-compare -Wduplicated-branches -Wduplicated-cond -Wlogical-op -Wformat-security -Wredundant-move -Woverloaded-virtual -Wno-unused-parameter -Wno-implicit-fallthrough -Wno-psabi -std=gnu++20 -MD -MT src/CMakeFiles/server.dir/validation.cpp.o -MF src/CMakeFiles/server.dir/validation.cpp.o.d -o src/CMakeFiles/server.dir/validation.cpp.o -c /work/src/validation.cpp
In file included from /usr/include/c++/12/bits/char_traits.h:46,
                 from /usr/include/c++/12/string:40,
                 from /usr/include/c++/12/stdexcept:39,
                 from /work/src/./arith_uint256.h:12,
                 from /work/src/./validation.h:14,
                 from /work/src/validation.cpp:7:
In function ‘constexpr void std::_Construct(_Tp*, _Args&& ...) [with _Tp = ScriptError; _Args = {ScriptError}]’,
    inlined from ‘constexpr void std::_Optional_payload_base<_Tp>::_M_construct(_Args&& ...) [with _Args = {ScriptError}; _Tp = ScriptError]’ at /usr/include/c++/12/optional:278:19,
    inlined from ‘constexpr void std::_Optional_base_impl<_Tp, _Dp>::_M_construct(_Args&& ...) [with _Args = {ScriptError}; _Tp = ScriptError; _Dp = std::_Optional_base<ScriptError, true, true>]’ at /usr/include/c++/12/optional:457:52,
    inlined from ‘constexpr void std::optional<_Tp>::swap(std::optional<_Tp>&) [with _Tp = ScriptError]’ at /usr/include/c++/12/optional:949:26,
    inlined from ‘constexpr std::enable_if_t<(is_move_constructible_v<_Tp> && is_swappable_v<_Tp>)> std::swap(optional<_Tp>&, optional<_Tp>&) [with _Tp = ScriptError]’ at /usr/include/c++/12/optional:1438:17,
    inlined from ‘std::optional<_Up> CCheckQueue<T, R>::Loop(bool) [with T = CScriptCheck; R = ScriptError]’ at /work/src/./checkqueue.h:87:34:
/usr/include/c++/12/bits/stl_construct.h:119:7: error: ‘*(int*)((char*)&local_result + offsetof(std::optional<ScriptError>,std::optional<ScriptError>::<unnamed>.std::_Optional_base<ScriptError, true, true>::<unnamed>))’ may be used uninitialized [-Werror=maybe-uninitialized]
  119 |       ::new((void*)__p) _Tp(std::forward<_Args>(__args)...);
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /work/src/validation.cpp:22:
/work/src/./checkqueue.h: In member function ‘std::optional<_Up> CCheckQueue<T, R>::Loop(bool) [with T = CScriptCheck; R = ScriptError]’:
/work/src/./checkqueue.h:78:26: note: ‘*(int*)((char*)&local_result + offsetof(std::optional<ScriptError>,std::optional<ScriptError>::<unnamed>.std::_Optional_base<ScriptError, true, true>::<unnamed>))’ was declared here
   78 |         std::optional<R> local_result;
      |                          ^~~~~~~~~~~~
cc1plus: all warnings being treated as errors
[565/663] Building CXX object src/CMakeFiles/bitcoinkernel.dir/validation.cpp.o
FAILED: src/CMakeFiles/bitcoinkernel.dir/validation.cpp.o 
/usr/bin/ccache /usr/bin/c++ -DBOOST_ALL_NO_LIB -DENABLE_AVX2 -DENABLE_SHANI -DENABLE_SSE41 -DHAVE_CONFIG_H -DLEVELDB_ATOMIC_PRESENT -DLEVELDB_PLATFORM_POSIX -DOS_LINUX -I/work/src/. -I/work/src/leveldb/helpers/memenv -I/work/abc-ci-builds/build-without-wallet/src -I/work/abc-ci-builds/build-without-wallet/src/crypto/.. -I/work/src/univalue/include -I/work/src/secp256k1/include -I/work/src/leveldb/include -isystem /usr/include/jemalloc -Werror -g -O2 -fPIC -fvisibility=hidden -fstack-reuse=none -fstack-protector-all -Wstack-protector -fcf-protection=full -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -Wall -Wextra -Wformat -Wvla -Wcast-align -Wunused-parameter -Wmissing-braces -Wredundant-decls -Wsign-compare -Wduplicated-branches -Wduplicated-cond -Wlogical-op -Wformat-security -Wredundant-move -Woverloaded-virtual -Wno-unused-parameter -Wno-implicit-fallthrough -Wno-psabi -std=gnu++20 -MD -MT src/CMakeFiles/bitcoinkernel.dir/validation.cpp.o -MF src/CMakeFiles/bitcoinkernel.dir/validation.cpp.o.d -o src/CMakeFiles/bitcoinkernel.dir/validation.cpp.o -c /work/src/validation.cpp
In file included from /usr/include/c++/12/bits/char_traits.h:46,
                 from /usr/include/c++/12/string:40,
                 from /usr/include/c++/12/stdexcept:39,
                 from /work/src/./arith_uint256.h:12,
                 from /work/src/./validation.h:14,
                 from /work/src/validation.cpp:7:
In function ‘constexpr void std::_Construct(_Tp*, _Args&& ...) [with _Tp = ScriptError; _Args = {ScriptError}]’,
    inlined from ‘constexpr void std::_Optional_payload_base<_Tp>::_M_construct(_Args&& ...) [with _Args = {ScriptError}; _Tp = ScriptError]’ at /usr/include/c++/12/optional:278:19,
    inlined from ‘constexpr void std::_Optional_base_impl<_Tp, _Dp>::_M_construct(_Args&& ...) [with _Args = {ScriptError}; _Tp = ScriptError; _Dp = std::_Optional_base<ScriptError, true, true>]’ at /usr/include/c++/12/optional:457:52,
    inlined from ‘constexpr void std::optional<_Tp>::swap(std::optional<_Tp>&) [with _Tp = ScriptError]’ at /usr/include/c++/12/optional:949:26,
    inlined from ‘constexpr std::enable_if_t<(is_move_constructible_v<_Tp> && is_swappable_v<_Tp>)> std::swap(optional<_Tp>&, optional<_Tp>&) [with _Tp = ScriptError]’ at /usr/include/c++/12/optional:1438:17,
    inlined from ‘std::optional<_Up> CCheckQueue<T, R>::Loop(bool) [with T = CScriptCheck; R = ScriptError]’ at /work/src/./checkqueue.h:87:34:
/usr/include/c++/12/bits/stl_construct.h:119:7: error: ‘*(int*)((char*)&local_result + offsetof(std::optional<ScriptError>,std::optional<ScriptError>::<unnamed>.std::_Optional_base<ScriptError, true, true>::<unnamed>))’ may be used uninitialized [-Werror=maybe-uninitialized]
  119 |       ::new((void*)__p) _Tp(std::forward<_Args>(__args)...);
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /work/src/validation.cpp:22:
/work/src/./checkqueue.h: In member function ‘std::optional<_Up> CCheckQueue<T, R>::Loop(bool) [with T = CScriptCheck; R = ScriptError]’:
/work/src/./checkqueue.h:78:26: note: ‘*(int*)((char*)&local_result + offsetof(std::optional<ScriptError>,std::optional<ScriptError>::<unnamed>.std::_Optional_base<ScriptError, true, true>::<unnamed>))’ was declared here
   78 |         std::optional<R> local_result;
      |                          ^~~~~~~~~~~~
cc1plus: all warnings being treated as errors
ninja: build stopped: cannot make progress due to previous errors.
Build build-without-wallet failed with exit code 1

Tail of the build log:

[422/585] Building CXX object src/wallet/CMakeFiles/wallet.dir/coinselection.cpp.o
[423/585] Building CXX object src/test/CMakeFiles/testutil.dir/util/txmempool.cpp.o
[424/585] Building CXX object src/test/CMakeFiles/testutil.dir/util/mining.cpp.o
[425/585] Building CXX object src/wallet/CMakeFiles/wallet.dir/bdb.cpp.o
[426/585] Building CXX object src/test/CMakeFiles/testutil.dir/util/wallet.cpp.o
[427/585] Building CXX object src/wallet/CMakeFiles/wallet.dir/fees.cpp.o
[428/585] Building CXX object src/test/CMakeFiles/testutil.dir/util/setup_common.cpp.o
[429/585] Building CXX object src/wallet/CMakeFiles/wallet.dir/receive.cpp.o
[430/585] Building CXX object src/wallet/CMakeFiles/wallet.dir/load.cpp.o
[431/585] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/util.cpp.o
[432/585] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/signmessage.cpp.o
[433/585] Building CXX object src/wallet/CMakeFiles/wallet.dir/transaction.cpp.o
[434/585] Building CXX object src/wallet/CMakeFiles/wallet.dir/sqlite.cpp.o
[435/585] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/encrypt.cpp.o
[436/585] Building CXX object src/CMakeFiles/server.dir/validation.cpp.o
FAILED: src/CMakeFiles/server.dir/validation.cpp.o 
/usr/bin/ccache /usr/bin/c++ -DBOOST_ALL_NO_LIB -DBOOST_NO_CXX98_FUNCTION_BASE -DBUILD_BITCOIN_INTERNAL -DENABLE_AVX2 -DENABLE_SHANI -DENABLE_SSE41 -DHAVE_BUILD_INFO -DHAVE_CONFIG_H -DHAVE_CONSENSUS_LIB -DLEVELDB_ATOMIC_PRESENT -DLEVELDB_PLATFORM_POSIX -DOS_LINUX -I/work/src/leveldb/helpers/memenv -I/work/src/. -I/work/abc-ci-builds/build-diff/src -I/work/src/univalue/include -I/work/abc-ci-builds/build-diff/src/crypto/.. -I/work/src/secp256k1/include -I/work/src/leveldb/include -isystem /usr/include/jemalloc -isystem /usr/include/miniupnpc -Werror -g -O2 -fPIC -fvisibility=hidden -fstack-reuse=none -fstack-protector-all -Wstack-protector -fcf-protection=full -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -Wall -Wextra -Wformat -Wvla -Wcast-align -Wunused-parameter -Wmissing-braces -Wredundant-decls -Wsign-compare -Wduplicated-branches -Wduplicated-cond -Wlogical-op -Wformat-security -Wredundant-move -Woverloaded-virtual -Wno-unused-parameter -Wno-implicit-fallthrough -Wno-psabi -std=gnu++20 -MD -MT src/CMakeFiles/server.dir/validation.cpp.o -MF src/CMakeFiles/server.dir/validation.cpp.o.d -o src/CMakeFiles/server.dir/validation.cpp.o -c /work/src/validation.cpp
In file included from /usr/include/c++/12/bits/char_traits.h:46,
                 from /usr/include/c++/12/string:40,
                 from /usr/include/c++/12/stdexcept:39,
                 from /work/src/./arith_uint256.h:12,
                 from /work/src/./validation.h:14,
                 from /work/src/validation.cpp:7:
In function ‘constexpr void std::_Construct(_Tp*, _Args&& ...) [with _Tp = ScriptError; _Args = {ScriptError}]’,
    inlined from ‘constexpr void std::_Optional_payload_base<_Tp>::_M_construct(_Args&& ...) [with _Args = {ScriptError}; _Tp = ScriptError]’ at /usr/include/c++/12/optional:278:19,
    inlined from ‘constexpr void std::_Optional_base_impl<_Tp, _Dp>::_M_construct(_Args&& ...) [with _Args = {ScriptError}; _Tp = ScriptError; _Dp = std::_Optional_base<ScriptError, true, true>]’ at /usr/include/c++/12/optional:457:52,
    inlined from ‘constexpr void std::optional<_Tp>::swap(std::optional<_Tp>&) [with _Tp = ScriptError]’ at /usr/include/c++/12/optional:949:26,
    inlined from ‘constexpr std::enable_if_t<(is_move_constructible_v<_Tp> && is_swappable_v<_Tp>)> std::swap(optional<_Tp>&, optional<_Tp>&) [with _Tp = ScriptError]’ at /usr/include/c++/12/optional:1438:17,
    inlined from ‘std::optional<_Up> CCheckQueue<T, R>::Loop(bool) [with T = CScriptCheck; R = ScriptError]’ at /work/src/./checkqueue.h:87:34:
/usr/include/c++/12/bits/stl_construct.h:119:7: error: ‘*(int*)((char*)&local_result + offsetof(std::optional<ScriptError>,std::optional<ScriptError>::<unnamed>.std::_Optional_base<ScriptError, true, true>::<unnamed>))’ may be used uninitialized [-Werror=maybe-uninitialized]
  119 |       ::new((void*)__p) _Tp(std::forward<_Args>(__args)...);
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /work/src/validation.cpp:22:
/work/src/./checkqueue.h: In member function ‘std::optional<_Up> CCheckQueue<T, R>::Loop(bool) [with T = CScriptCheck; R = ScriptError]’:
/work/src/./checkqueue.h:78:26: note: ‘*(int*)((char*)&local_result + offsetof(std::optional<ScriptError>,std::optional<ScriptError>::<unnamed>.std::_Optional_base<ScriptError, true, true>::<unnamed>))’ was declared here
   78 |         std::optional<R> local_result;
      |                          ^~~~~~~~~~~~
cc1plus: all warnings being treated as errors
[437/585] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/dns.cpp.o
[438/585] Building CXX object src/wallet/CMakeFiles/wallet.dir/salvage.cpp.o
[439/585] Building CXX object src/wallet/CMakeFiles/wallet.dir/interfaces.cpp.o
[440/585] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/db.cpp.o
[441/585] Building CXX object src/wallet/CMakeFiles/wallet.dir/spend.cpp.o
[442/585] Building CXX object src/wallet/CMakeFiles/wallet.dir/walletutil.cpp.o
[443/585] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/options.cpp.o
[444/585] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana_formatter.cpp.o
[445/585] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana_interpreter.cpp.o
[446/585] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana.cpp.o
[447/585] Linking CXX executable src/iguana/iguana
[448/585] Building CXX object src/wallet/CMakeFiles/wallet.dir/scriptpubkeyman.cpp.o
[449/585] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/bitcoin.cpp.o
[450/585] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/backup.cpp.o
[451/585] Building CXX object src/seeder/CMakeFiles/bitcoin-seeder.dir/main.cpp.o
[452/585] Building CXX object src/wallet/CMakeFiles/wallet-tool.dir/wallettool.cpp.o
[453/585] Building CXX object src/wallet/CMakeFiles/wallet.dir/walletdb.cpp.o
[454/585] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpcwallet.cpp.o
[455/585] Building CXX object src/wallet/CMakeFiles/wallet.dir/wallet.cpp.o
[456/585] Linking CXX static library src/wallet/libwallet.a
ninja: build stopped: cannot make progress due to previous errors.
Build build-diff failed with exit code 1
PiRK planned changes to this revision.Wed, Nov 5, 14:45
Fabien added a subscriber: Fabien.
Fabien added inline comments.
doc/release-notes.md
12 ↗(On Diff #56451)

Macro newlinebernie:

This revision is now accepted and ready to land.Wed, Nov 5, 19:00