test wallet_assumeutxo.py / wallet_backup.py is failing intermittently: wallet.cpp:543 RestoreWallet Assertion `fs::is_empty(wallet_path)’ failed. #34354

issue maflcko openend this issue on January 20, 2026
  1. maflcko commented at 3:07 pm on January 20, 2026: member

    ISTM that the Windows, ucrt, test cross-built CI failure is unrelated, a restore wallet test case related to pruned blockchain in wallet_assumeutxo.py is failing.

     02026-01-20T13:41:07.2385503Z 2026-01-20T13:41:04.152353Z TestFramework (INFO): Ensuring wallet can't be restored from a backup that was created before the pruneheight (pruned node)
     12026-01-20T13:41:07.2386535Z 
     22026-01-20T13:41:07.2386839Z 2026-01-20T13:41:06.479889Z TestFramework (ERROR): Unexpected exception
     32026-01-20T13:41:07.2387306Z 
     42026-01-20T13:41:07.2387503Z Traceback (most recent call last):
     52026-01-20T13:41:07.2387815Z 
     62026-01-20T13:41:07.2388269Z   File "D:\a\bitcoin\bitcoin\test\functional\test_framework\util.py", line 166, in try_rpc
     72026-01-20T13:41:07.2388901Z 
     82026-01-20T13:41:07.2389049Z     fun(*args, **kwds)
     92026-01-20T13:41:07.2389318Z 
    102026-01-20T13:41:07.2389432Z     ~~~^^^^^^^^^^^^^^^
    112026-01-20T13:41:07.2389660Z 
    122026-01-20T13:41:07.2390180Z   File "D:\a\bitcoin\bitcoin\test\functional\test_framework\coverage.py", line 50, in __call__
    132026-01-20T13:41:07.2390808Z 
    142026-01-20T13:41:07.2391156Z     return_val = self.auth_service_proxy_instance.__call__(*args, **kwargs)
    152026-01-20T13:41:07.2391651Z 
    162026-01-20T13:41:07.2392093Z   File "D:\a\bitcoin\bitcoin\test\functional\test_framework\authproxy.py", line 156, in __call__
    172026-01-20T13:41:07.2392771Z 
    182026-01-20T13:41:07.2392996Z     raise JSONRPCException(response['error'], status)
    192026-01-20T13:41:07.2393424Z 
    202026-01-20T13:41:07.2395532Z test_framework.authproxy.JSONRPCException: filesystem error: cannot remove: The process cannot access the file because it is being used by another process [D:\a\_temp\test_runner_₿_🏃_20260120_132914\wallet_assumeutxo_56\node3\regtest\w2\wallet.dat] (-1)
    212026-01-20T13:41:07.2397271Z 
    222026-01-20T13:41:07.2397277Z 
    232026-01-20T13:41:07.2397281Z 
    242026-01-20T13:41:07.2397613Z During handling of the above exception, another exception occurred:
    252026-01-20T13:41:07.2398102Z 
    262026-01-20T13:41:07.2398107Z 
    272026-01-20T13:41:07.2398112Z 
    282026-01-20T13:41:07.2398334Z Traceback (most recent call last):
    292026-01-20T13:41:07.2398622Z 
    302026-01-20T13:41:07.2399135Z   File "D:\a\bitcoin\bitcoin\test\functional\test_framework\test_framework.py", line 142, in main
    312026-01-20T13:41:07.2399796Z 
    322026-01-20T13:41:07.2399922Z     self.run_test()
    332026-01-20T13:41:07.2400161Z 
    342026-01-20T13:41:07.2400286Z     ~~~~~~~~~~~~~^^
    352026-01-20T13:41:07.2400474Z 
    362026-01-20T13:41:07.2400948Z   File "D:\a\bitcoin\bitcoin/test/functional/wallet_assumeutxo.py", line 267, in run_test
    372026-01-20T13:41:07.2401587Z 
    382026-01-20T13:41:07.2401827Z     self.test_restore_wallet_pruneheight(n3)
    392026-01-20T13:41:07.2402338Z 
    402026-01-20T13:41:07.2402476Z     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^
    412026-01-20T13:41:07.2402806Z 
    422026-01-20T13:41:07.2403384Z   File "D:\a\bitcoin\bitcoin/test/functional/wallet_assumeutxo.py", line 99, in test_restore_wallet_pruneheight
    432026-01-20T13:41:07.2404151Z 
    442026-01-20T13:41:07.2404691Z     assert_raises_rpc_error(-4, error_message, n3.restorewallet, "w2", "backup_w2.dat")
    452026-01-20T13:41:07.2405294Z 
    462026-01-20T13:41:07.2405553Z     ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    472026-01-20T13:41:07.2405970Z 
    482026-01-20T13:41:07.2406496Z   File "D:\a\bitcoin\bitcoin\test\functional\test_framework\util.py", line 157, in assert_raises_rpc_error
    492026-01-20T13:41:07.2407238Z 
    502026-01-20T13:41:07.2407544Z     assert try_rpc(code, message, fun, *args, **kwds), "No exception raised"
    512026-01-20T13:41:07.2408097Z 
    522026-01-20T13:41:07.2408261Z            ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    532026-01-20T13:41:07.2408598Z 
    542026-01-20T13:41:07.2409048Z   File "D:\a\bitcoin\bitcoin\test\functional\test_framework\util.py", line 170, in try_rpc
    552026-01-20T13:41:07.2409645Z 
    562026-01-20T13:41:07.2410041Z     raise AssertionError("Unexpected JSONRPC error code %i" % e.error["code"])
    572026-01-20T13:41:07.2410583Z 
    582026-01-20T13:41:07.2410797Z AssertionError: Unexpected JSONRPC error code -1
    592026-01-20T13:41:07.2411215Z 
    602026-01-20T13:41:07.2411925Z 2026-01-20T13:41:06.484138Z TestFramework (INFO): Not stopping nodes as test failed. The dangling processes will be cleaned up later.
    612026-01-20T13:41:07.2412795Z 
    622026-01-20T13:41:07.2413676Z 2026-01-20T13:41:06.484270Z TestFramework (WARNING): Not cleaning up dir D:\a\_temp\test_runner_₿_🏃_20260120_132914\wallet_assumeutxo_56
    632026-01-20T13:41:07.2414525Z 
    642026-01-20T13:41:07.2415646Z 2026-01-20T13:41:06.484375Z TestFramework (ERROR): Test failed. Test logging available at D:\a\_temp\test_runner_₿_🏃_20260120_132914\wallet_assumeutxo_56/test_framework.log
    652026-01-20T13:41:07.2416737Z 
    66
    672026-01-20T13:42:33.3464929Z wallet_assumeutxo.py                                                             | ✖ Failed  | 8 s
    682026-01-20T13:42:33.3465209Z 
    692026-01-20T13:42:33.3465460Z ALL                                                                              | ✖ Failed  | 2893 s (accumulated) 
    702026-01-20T13:42:33.3465784Z Runtime: 796 s
    

    Originally posted by @rkrux in #33014 (comment)

  2. maflcko added the label Wallet on Jan 20, 2026
  3. maflcko added the label Windows on Jan 20, 2026
  4. maflcko added the label Tests on Jan 20, 2026
  5. maflcko added the label CI failed on Jan 20, 2026
  6. sedited referenced this in commit 5715748333 on Jan 21, 2026
  7. fjahr commented at 8:47 am on January 22, 2026: contributor
    I proposed a fix here: #34377
  8. sedited closed this on Jan 22, 2026

  9. Fabcien referenced this in commit 691dc830c6 on Jan 22, 2026
  10. maflcko commented at 12:43 pm on January 23, 2026: member

    https://github.com/bitcoin/bitcoin/actions/runs/21285353740/job/61266529251?pr=34388#step:12:276:

      0398/451 - wallet_assumeutxo.py failed, Duration: 8 s
      1
      2stdout:
      32026-01-23T12:31:24.007821Z TestFramework (INFO): PRNG seed is: 249974898428252399
      4
      52026-01-23T12:31:24.037053Z TestFramework (INFO): Initializing test directory D:\a\_temp\test_runner__🏃_20260123_122001\wallet_assumeutxo_56
      6
      72026-01-23T12:31:25.327870Z TestFramework (INFO): -- Testing assumeutxo
      8
      92026-01-23T12:31:25.328814Z TestFramework (INFO): Creating a UTXO snapshot at height 299
     10
     112026-01-23T12:31:26.836907Z TestFramework (INFO): Loading snapshot into second node from D:\a\_temp\test_runner__🏃_20260123_122001\wallet_assumeutxo_56\node0\regtest\utxos.dat
     12
     132026-01-23T12:31:26.851777Z TestFramework (INFO): Backup from the snapshot height can be loaded during background sync
     14
     152026-01-23T12:31:26.859014Z TestFramework (INFO): Backup from before the snapshot height can't be loaded during background sync
     16
     172026-01-23T12:31:26.865502Z TestFramework (INFO): Backup from the snapshot height can be loaded during background sync (pruned node)
     18
     192026-01-23T12:31:26.891211Z TestFramework (INFO): Backup from before the snapshot height can't be loaded during background sync (pruned node)
     20
     212026-01-23T12:31:26.897530Z TestFramework (INFO): Test loading descriptors during background sync
     22
     232026-01-23T12:31:26.919150Z TestFramework (INFO): Test that rescanning blocks from before the snapshot fails when blocks are not available from the background sync yet
     24
     252026-01-23T12:31:26.919801Z TestFramework (INFO): Restarting node to stop at height 359
     26
     272026-01-23T12:31:27.580649Z TestFramework (INFO): Restarted node before snapshot validation completed, reloading...
     28
     292026-01-23T12:31:28.106292Z TestFramework (INFO): Ensuring wallet can be restored from a backup that was created before the snapshot height
     30
     312026-01-23T12:31:28.164076Z TestFramework (INFO): Check balance of a wallet that is active during snapshot completion
     32
     332026-01-23T12:31:29.773917Z TestFramework (INFO): Ensuring descriptors can be loaded after background sync
     34
     352026-01-23T12:31:29.817454Z TestFramework (INFO): Ensuring wallet can't be restored from a backup that was created before the pruneheight (pruned node)
     36
     372026-01-23T12:31:31.955307Z TestFramework (ERROR): Unexpected exception
     38
     39Traceback (most recent call last):
     40
     41  File "D:\a\bitcoin\bitcoin\test\functional\test_framework\util.py", line 166, in try_rpc
     42
     43    fun(*args, **kwds)
     44
     45    ~~~^^^^^^^^^^^^^^^
     46
     47  File "D:\a\bitcoin\bitcoin\test\functional\test_framework\coverage.py", line 50, in __call__
     48
     49    return_val = self.auth_service_proxy_instance.__call__(*args, **kwargs)
     50
     51  File "D:\a\bitcoin\bitcoin\test\functional\test_framework\authproxy.py", line 156, in __call__
     52
     53    raise JSONRPCException(response['error'], status)
     54
     55test_framework.authproxy.JSONRPCException: filesystem error: cannot remove: The process cannot access the file because it is being used by another process [D:\a\_temp\test_runner__🏃_20260123_122001\wallet_assumeutxo_56\node3\regtest\w2_pruneheight\wallet.dat] (-1)
     56
     57
     58
     59During handling of the above exception, another exception occurred:
     60
     61
     62
     63Traceback (most recent call last):
     64
     65  File "D:\a\bitcoin\bitcoin\test\functional\test_framework\test_framework.py", line 142, in main
     66
     67    self.run_test()
     68
     69    ~~~~~~~~~~~~~^^
     70
     71  File "D:\a\bitcoin\bitcoin/test/functional/wallet_assumeutxo.py", line 267, in run_test
     72
     73    self.test_restore_wallet_pruneheight(n3)
     74
     75    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^
     76
     77  File "D:\a\bitcoin\bitcoin/test/functional/wallet_assumeutxo.py", line 99, in test_restore_wallet_pruneheight
     78
     79    assert_raises_rpc_error(-4, error_message, n3.restorewallet, "w2_pruneheight", "backup_w2.dat")
     80
     81    ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     82
     83  File "D:\a\bitcoin\bitcoin\test\functional\test_framework\util.py", line 157, in assert_raises_rpc_error
     84
     85    assert try_rpc(code, message, fun, *args, **kwds), "No exception raised"
     86
     87           ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     88
     89  File "D:\a\bitcoin\bitcoin\test\functional\test_framework\util.py", line 170, in try_rpc
     90
     91    raise AssertionError(
     92
     93        "Expected substring not found in error message:\nsubstring: '{}'\nerror message: '{}'.".format(
     94
     95            message, e.error['message']))
     96
     97AssertionError: Expected substring not found in error message:
     98
     99substring: 'Wallet loading failed. Prune: last wallet synchronisation goes beyond pruned data. You need to -reindex (download the whole blockchain again in case of a pruned node)'
    100
    101error message: 'filesystem error: cannot remove: The process cannot access the file because it is being used by another process [D:\a\_temp\test_runner_₿_🏃_20260123_122001\wallet_assumeutxo_56\node3\regtest\w2_pruneheight\wallet.dat]'.
    102
    1032026-01-23T12:31:32.009883Z TestFramework (INFO): Not stopping nodes as test failed. The dangling processes will be cleaned up later.
    104
    1052026-01-23T12:31:32.010026Z TestFramework (WARNING): Not cleaning up dir D:\a\_temp\test_runner__🏃_20260123_122001\wallet_assumeutxo_56
    106
    1072026-01-23T12:31:32.010132Z TestFramework (ERROR): Test failed. Test logging available at D:\a\_temp\test_runner__🏃_20260123_122001\wallet_assumeutxo_56/test_framework.log
    108
    1092026-01-23T12:31:32.010359Z TestFramework (ERROR): 
    110
    1112026-01-23T12:31:32.010667Z TestFramework (ERROR): Hint: Call D:\a\bitcoin\bitcoin\test\functional\combine_logs.py 'D:\a\_temp\test_runner_₿_🏃_20260123_122001\wallet_assumeutxo_56' to consolidate all logs
    112
    1132026-01-23T12:31:32.010799Z TestFramework (ERROR): 
    114
    1152026-01-23T12:31:32.010875Z TestFramework (ERROR): If this failure happened unexpectedly or intermittently, please file a bug and provide a link or upload of the combined log.
    116
    1172026-01-23T12:31:32.010978Z TestFramework (ERROR): https://github.com/bitcoin/bitcoin/issues
    118
    1192026-01-23T12:31:32.011060Z TestFramework (ERROR): 
    120
    121
    122
    123stderr:
    124[node 3] Cleaning up leftover process
    125
    126[node 2] Cleaning up leftover process
    127
    128[node 1] Cleaning up leftover process
    129
    130[node 0] Cleaning up leftover process
    131
    132
    133
    134Combine the logs and print the last 99999999 lines ...
    135
    136============
    137Combined log for D:\a\_temp/test_runner__🏃_20260123_122001/wallet_assumeutxo_56:
    138============
    
  11. maflcko reopened this on Jan 23, 2026

  12. fjahr commented at 12:57 pm on January 23, 2026: contributor
    Seems like the problem is rather internal to the restorewallet, probably better if someone with who has a windows enviroment can try to reproduce it, I would need to set it up first…
  13. Sjors commented at 1:41 pm on January 30, 2026: member

    I ran this test a couple of times on a windows machine, but couldn’t reproduce. I’ll let it run in a loop for a while…. Update: still no failure after 400+ runs.

    Maybe there’s some changes I can make to increase the likeliness of failure?

  14. Sjors commented at 3:31 pm on January 30, 2026: member

    The following (vibe coded) patch seems to reliably reproduce the issue on my Windows machine:

     0diff --git a/src/wallet/sqlite.cpp b/src/wallet/sqlite.cpp
     1index e72455a3be..c23268d30a 100644
     2--- a/src/wallet/sqlite.cpp
     3+++ b/src/wallet/sqlite.cpp
     4@@ -20,0 +21,5 @@
     5+#ifdef WIN32
     6+#include <windows.h>
     7+#include <thread>
     8+#endif
     9+
    10@@ -376,0 +382,23 @@ void SQLiteDatabase::Close()
    11+
    12+#ifdef WIN32
    13+    // TEST: Immediately after closing SQLite, grab an exclusive lock on the file.
    14+    // This simulates Windows not releasing the file handle immediately after sqlite3_close().
    15+    // The lock is held for 200ms, causing fs::remove() to fail if called too soon.
    16+    std::wstring full_path_w = (m_dir_path / fs::PathFromString(m_file_path)).wstring();
    17+    HANDLE hFile = CreateFileW(
    18+        full_path_w.c_str(),
    19+        GENERIC_READ | GENERIC_WRITE,
    20+        0,  // No sharing - exclusive access
    21+        NULL,
    22+        OPEN_EXISTING,
    23+        FILE_ATTRIBUTE_NORMAL,
    24+        NULL
    25+    );
    26+    if (hFile != INVALID_HANDLE_VALUE) {
    27+        // Detach a thread to hold the lock, so Close() returns immediately
    28+        std::thread([hFile]() {
    29+            std::this_thread::sleep_for(std::chrono::milliseconds(200));
    30+            CloseHandle(hFile);
    31+        }).detach();
    32+    }
    33+#endif
    
  15. Sjors commented at 3:50 pm on January 30, 2026: member

    And here’s a trivial albeit not elegant fix:

     0diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp
     1index 64d7f191de..ba3c1d4c75 100644
     2--- a/src/wallet/wallet.cpp
     3+++ b/src/wallet/wallet.cpp
     4@@ -538 +538,7 @@ std::shared_ptr<CWallet> RestoreWallet(WalletContext& context, const fs::path& b
     5-        if (wallet_file_copied) fs::remove(wallet_file);
     6+        if (wallet_file_copied) {
     7+            // On Windows, and e.g. on network file systems for all platforms,
     8+            // file handles may not be released immediately after closing, so
     9+            // wait briefly before attempting removal.
    10+            std::this_thread::sleep_for(std::chrono::seconds(1));
    11+            fs::remove(wallet_file);
    12+        }
    
  16. maflcko removed the label Windows on Feb 12, 2026
  17. maflcko removed the label Tests on Feb 12, 2026
  18. maflcko added this to the milestone 31.0 on Feb 12, 2026
  19. maflcko renamed this:
    Windows CI failure: restore wallet test case related to pruned blockchain in `wallet_assumeutxo.py` is failing.
    test `wallet_assumeutxo.py` is failing intermittently: wallet.cpp:543 RestoreWallet Assertion `fs::is_empty(wallet_path)' failed.
    on Feb 12, 2026
  20. maflcko commented at 3:06 pm on February 12, 2026: member

    The same error happens on Linux, hitting an internal assert:

    0 node3 stderr wallet/wallet.cpp:543 std::shared_ptr<CWallet> wallet::RestoreWallet(WalletContext &, const fs::path &, const std::string &, std::optional<bool>, DatabaseStatus &, bilingual_str &, std::vector<bilingual_str> &, bool, bool): Assertion `fs::is_empty(wallet_path)' failed. 
    

    To reproduce, saturate all CPU threads of the machine at 100%, then run cmd to reproduce:

    0while ./bld-cmake/test/functional/wallet_assumeutxo.py ; do true ; done
    
     0 test  2026-02-12T15:02:36.624276Z TestFramework (ERROR): Unexpected exception 
     1                                   Traceback (most recent call last):
     2                                     File "/b-c/test/functional/test_framework/util.py", line 166, in try_rpc
     3                                       fun(*args, **kwds)
     4                                       ~~~^^^^^^^^^^^^^^^
     5                                     File "/b-c/test/functional/test_framework/coverage.py", line 50, in __call__
     6                                       return_val = self.auth_service_proxy_instance.__call__(*args, **kwargs)
     7                                     File "/b-c/test/functional/test_framework/authproxy.py", line 137, in __call__
     8                                       response, status = self._request('POST', self.__url.path, postdata.encode('utf-8'))
     9                                                          ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    10                                     File "/b-c/test/functional/test_framework/authproxy.py", line 111, in _request
    11                                       return self._get_response()
    12                                              ~~~~~~~~~~~~~~~~~~^^
    13                                     File "/b-c/test/functional/test_framework/authproxy.py", line 174, in _get_response
    14                                       http_response = self.__conn.getresponse()
    15                                     File "/usr/lib/python3.13/http/client.py", line 1450, in getresponse
    16                                       response.begin()
    17                                       ~~~~~~~~~~~~~~^^
    18                                     File "/usr/lib/python3.13/http/client.py", line 336, in begin
    19                                       version, status, reason = self._read_status()
    20                                                                 ~~~~~~~~~~~~~~~~~^^
    21                                     File "/usr/lib/python3.13/http/client.py", line 305, in _read_status
    22                                       raise RemoteDisconnected("Remote end closed connection without"
    23                                                                " response")
    24                                   http.client.RemoteDisconnected: Remote end closed connection without response
    25                                   During handling of the above exception, another exception occurred:
    26                                   Traceback (most recent call last):
    27                                     File "/b-c/test/functional/test_framework/test_framework.py", line 142, in main
    28                                       self.run_test()
    29                                       ~~~~~~~~~~~~~^^
    30                                     File "/b-c/./bld-cmake/test/functional/wallet_assumeutxo.py", line 267, in run_test
    31                                       self.test_restore_wallet_pruneheight(n3)
    32                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^
    33                                     File "/b-c/./bld-cmake/test/functional/wallet_assumeutxo.py", line 99, in test_restore_wallet_pruneheight
    34                                       assert_raises_rpc_error(-4, error_message, n3.restorewallet, "w2_pruneheight", "backup_w2.dat")
    35                                       ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    36                                     File "/b-c/test/functional/test_framework/util.py", line 157, in assert_raises_rpc_error
    37                                       assert try_rpc(code, message, fun, *args, **kwds), "No exception raised"
    38                                              ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    39                                     File "/b-c/test/functional/test_framework/util.py", line 177, in try_rpc
    40                                       raise AssertionError("Unexpected exception raised: " + type(e).__name__)
    41                                   AssertionError: Unexpected exception raised: RemoteDisconnected
    42 test  2026-02-12T15:02:36.638897Z TestFramework (DEBUG): Closing down network thread 
    43 test  2026-02-12T15:02:36.689925Z TestFramework (INFO): Not stopping nodes as test failed. The dangling processes will be cleaned up later. 
    44 test  2026-02-12T15:02:36.690597Z TestFramework (WARNING): Not cleaning up dir /tmp/bitcoin_func_test_noubmcc_ 
    45 test  2026-02-12T15:02:36.690935Z TestFramework (ERROR): Test failed. Test logging available at /tmp/bitcoin_func_test_noubmcc_/test_framework.log 
    46 test  2026-02-12T15:02:36.691366Z TestFramework (ERROR): 
    47 test  2026-02-12T15:02:36.691757Z TestFramework (ERROR): Hint: Call /b-c/test/functional/combine_logs.py '/tmp/bitcoin_func_test_noubmcc_' to consolidate all logs 
    48 test  2026-02-12T15:02:36.691961Z TestFramework (ERROR): 
    49 test  2026-02-12T15:02:36.692121Z TestFramework (ERROR): If this failure happened unexpectedly or intermittently, please file a bug and provide a link or upload of the combined log. 
    50 test  2026-02-12T15:02:36.692375Z TestFramework (ERROR): https://github.com/bitcoin/bitcoin/issues 
    51 test  2026-02-12T15:02:36.692613Z TestFramework (ERROR): 
    52
    53 node3 stderr wallet/wallet.cpp:543 std::shared_ptr<CWallet> wallet::RestoreWallet(WalletContext &, const fs::path &, const std::string &, std::optional<bool>, DatabaseStatus &, bilingual_str &, std::vector<bilingual_str> &, bool, bool): Assertion `fs::is_empty(wallet_path)' failed. 
    
  21. maflcko added the label Bug on Feb 12, 2026
  22. maflcko commented at 7:44 pm on February 12, 2026: member

    Not sure if this diff helps to reproduce it faster:

     0diff --git a/src/validationinterface.cpp b/src/validationinterface.cpp
     1index c7be6ab..aacb7b6 100644
     2--- a/src/validationinterface.cpp
     3+++ b/src/validationinterface.cpp
     4@@ -14,2 +14,3 @@
     5 #include <primitives/transaction.h>
     6+#include <random.h>
     7 #include <util/check.h>
     8@@ -156,2 +157,4 @@ void ValidationSignals::SyncWithValidationInterfaceQueue()
     9 
    10+static FastRandomContext g_rnd{};
    11+
    12 // Use a macro instead of a function for conditional logging to prevent
    13@@ -166,2 +169,3 @@ void ValidationSignals::SyncWithValidationInterfaceQueue()
    14             LOG_EVENT(fmt, local_name, __VA_ARGS__);           \
    15+            if(g_rnd.randrange(2)<1)UninterruptibleSleep(15ms);\
    16             event();                                           \
    
  23. fjahr commented at 9:47 pm on February 12, 2026: contributor

    To reproduce, saturate all CPU threads of the machine at 100%

    Oh, do you think that is what is actually happening in the CI? Then I guess every check we have that asserts that a file was deleted could run into this issue if the circumstances are right?

  24. maflcko commented at 9:57 pm on February 12, 2026: member

    Oh, do you think that is what is actually happening in the CI? Then I guess every check we have that asserts that a file was deleted could run into this issue if the circumstances are right?

    The assume that fails is in the line before the remove, so I think there is a logic error somewhere

  25. maflcko renamed this:
    test `wallet_assumeutxo.py` is failing intermittently: wallet.cpp:543 RestoreWallet Assertion `fs::is_empty(wallet_path)' failed.
    test `wallet_assumeutxo.py` / wallet_backup.py is failing intermittently: wallet.cpp:543 RestoreWallet Assertion `fs::is_empty(wallet_path)' failed.
    on Feb 17, 2026
  26. maflcko commented at 9:15 pm on February 17, 2026: member

    Same for wallet_backup.py:

     0 node3 2026-02-17T20:40:22.128215Z [scheduler] [wallet/wallet.h:943] [WalletLogPrintf] [restore_pruned] Releasing wallet restore_pruned.. 
     1 test  2026-02-17T20:40:22.340793Z TestFramework (ERROR): Unexpected exception 
     2                                   Traceback (most recent call last):
     3                                     File "/b-c/test/functional/test_framework/util.py", line 166, in try_rpc
     4                                       fun(*args, **kwds)
     5                                       ~~~^^^^^^^^^^^^^^^
     6                                     File "/b-c/test/functional/test_framework/coverage.py", line 50, in __call__
     7                                       return_val = self.auth_service_proxy_instance.__call__(*args, **kwargs)
     8                                     File "/b-c/test/functional/test_framework/authproxy.py", line 137, in __call__
     9                                       response, status = self._request('POST', self.__url.path, postdata.encode('utf-8'))
    10                                                          ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    11                                     File "/b-c/test/functional/test_framework/authproxy.py", line 111, in _request
    12                                       return self._get_response()
    13                                              ~~~~~~~~~~~~~~~~~~^^
    14                                     File "/b-c/test/functional/test_framework/authproxy.py", line 174, in _get_response
    15                                       http_response = self.__conn.getresponse()
    16                                     File "/usr/lib/python3.13/http/client.py", line 1450, in getresponse
    17                                       response.begin()
    18                                       ~~~~~~~~~~~~~~^^
    19                                     File "/usr/lib/python3.13/http/client.py", line 336, in begin
    20                                       version, status, reason = self._read_status()
    21                                                                 ~~~~~~~~~~~~~~~~~^^
    22                                     File "/usr/lib/python3.13/http/client.py", line 305, in _read_status
    23                                       raise RemoteDisconnected("Remote end closed connection without"
    24                                                                " response")
    25                                   http.client.RemoteDisconnected: Remote end closed connection without response
    26                                   During handling of the above exception, another exception occurred:
    27                                   Traceback (most recent call last):
    28                                     File "/b-c/test/functional/test_framework/test_framework.py", line 142, in main
    29                                       self.run_test()
    30                                       ~~~~~~~~~~~~~^^
    31                                     File "/b-c/bld-cmake/test/functional/wallet_backup.py", line 292, in run_test
    32                                       self.test_pruned_wallet_backup()
    33                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
    34                                     File "/b-c/bld-cmake/test/functional/wallet_backup.py", line 212, in test_pruned_wallet_backup
    35                                       assert_raises_rpc_error(-4, error_message, node.restorewallet, "restore_pruned", backup_file)
    36                                       ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    37                                     File "/b-c/test/functional/test_framework/util.py", line 157, in assert_raises_rpc_error
    38                                       assert try_rpc(code, message, fun, *args, **kwds), "No exception raised"
    39                                              ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    40                                     File "/b-c/test/functional/test_framework/util.py", line 177, in try_rpc
    41                                       raise AssertionError("Unexpected exception raised: " + type(e).__name__)
    42                                   AssertionError: Unexpected exception raised: RemoteDisconnected
    43 test  2026-02-17T20:40:22.344578Z TestFramework (DEBUG): Closing down network thread 
    44 test  2026-02-17T20:40:22.394821Z TestFramework (INFO): Not stopping nodes as test failed. The dangling processes will be cleaned up later. 
    45 test  2026-02-17T20:40:22.394967Z TestFramework (WARNING): Not cleaning up dir /tmp/test_runner__🏃_20260217_203305/wallet_backup_262 
    46 test  2026-02-17T20:40:22.395048Z TestFramework (ERROR): Test failed. Test logging available at /tmp/test_runner__🏃_20260217_203305/wallet_backup_262/test_framework.log 
    47 test  2026-02-17T20:40:22.395168Z TestFramework (ERROR): 
    48 test  2026-02-17T20:40:22.395280Z TestFramework (ERROR): Hint: Call /b-c/test/functional/combine_logs.py '/tmp/test_runner_₿_🏃_20260217_203305/wallet_backup_262' to consolidate all logs 
    49 test  2026-02-17T20:40:22.395334Z TestFramework (ERROR): 
    50 test  2026-02-17T20:40:22.395375Z TestFramework (ERROR): If this failure happened unexpectedly or intermittently, please file a bug and provide a link or upload of the combined log. 
    51 test  2026-02-17T20:40:22.395443Z TestFramework (ERROR): https://github.com/bitcoin/bitcoin/issues 
    52 test  2026-02-17T20:40:22.395497Z TestFramework (ERROR): 
    53
    54 node3 stderr wallet/wallet.cpp:543 std::shared_ptr<CWallet> wallet::RestoreWallet(WalletContext &, const fs::path &, const std::string &, std::optional<bool>, DatabaseStatus &, bilingual_str &, std::vector<bilingual_str> &, bool, bool): Assertion `fs::is_empty(wallet_path)' failed. 
    
  27. achow101 commented at 7:49 pm on February 18, 2026: member

    There seem to be 2 different issues reported here.

    The first is filesystem error: cannot remove: The process cannot access the file because it is being used by another process which suggests that the wallet.dat file is still open by sqlite.

    The second is Assertion fs::is_empty(wallet_path)' failed. which is probably caused by wallet.dat-journal still existing.

    I have a theoretical fix for the second issue. I don’t have one for the first.

  28. maflcko commented at 8:31 pm on February 18, 2026: member

    Nice. A fix for the second issue would be helpful, and I am happy to test it, since I can reproduce it relatively easily. edit: And sorry for mixing the two unrelated issues. I’ll open a new issue for the remaining issue, as soon as one is fixed.

    I wonder why Antithesis has not yet found this. 🤔 cc @dergoegge

  29. maflcko commented at 6:51 pm on February 19, 2026: member

    Not sure if #34619 is going to fix this issue. If the journal was zero’d, the size should be small, but I don’t see such small files after the test failure:

    0# find '/tmp/test_runner_\342\202\277_\360\237\217\203_20260219_175359/wallet_assumeutxo_8651' \
    1  -type f -name 'wallet.dat-journal' -exec wc -c {} +
    2 25136 /tmp/test_runner_₿_🏃_20260219_175359/wallet_assumeutxo_8651/node0/regtest/w/wallet.dat-journal
    3 25136 /tmp/test_runner_₿_🏃_20260219_175359/wallet_assumeutxo_8651/node0/regtest/w2/wallet.dat-journal
    4 25136 /tmp/test_runner_₿_🏃_20260219_175359/wallet_assumeutxo_8651/node1/regtest/w/wallet.dat-journal
    5 12824 /tmp/test_runner_₿_🏃_20260219_175359/wallet_assumeutxo_8651/node1/regtest/w1/wallet.dat-journal
    6 25136 /tmp/test_runner_₿_🏃_20260219_175359/wallet_assumeutxo_8651/node1/regtest/w2/wallet.dat-journal
    7 25136 /tmp/test_runner_₿_🏃_20260219_175359/wallet_assumeutxo_8651/node2/regtest/w/wallet.dat-journal
    8 25136 /tmp/test_runner_₿_🏃_20260219_175359/wallet_assumeutxo_8651/node3/regtest/w/wallet.dat-journal
    9 12824 /tmp/test_runner_₿_🏃_20260219_175359/wallet_assumeutxo_8651/node3/regtest/w2_pruneheight/wallet.dat-journal
    

    See https://drahtbot.space/temp_scratch/wallet_assumeutxo_8651.tar.zstd

    And:

    0# find $'/tmp/test_runner_\342\202\277_\360\237\217\203_20260217_203305' \
    1  -type f -name 'wallet.dat-journal' -exec wc -c {} +
    2 25136 /tmp/test_runner_₿_🏃_20260217_203305/wallet_backup_262/node0/regtest/wallets/default_wallet/wallet.dat-journal
    3 25136 /tmp/test_runner_₿_🏃_20260217_203305/wallet_backup_262/node1/regtest/wallets/default_wallet/wallet.dat-journal
    4 25136 /tmp/test_runner_₿_🏃_20260217_203305/wallet_backup_262/node2/regtest/wallets/default_wallet/wallet.dat-journal
    5 29240 /tmp/test_runner_₿_🏃_20260217_203305/wallet_backup_262/node3/regtest/wallets/default_wallet/wallet.dat-journal
    6 29240 /tmp/test_runner_₿_🏃_20260217_203305/wallet_backup_262/node3/regtest/wallets/pruned/wallet.dat-journal
    7 21032 /tmp/test_runner_₿_🏃_20260217_203305/wallet_backup_262/node3/regtest/wallets/restore_pruned/wallet.dat-journal
    

    https://drahtbot.space/temp_scratch/wallet_backup_262.tar.zstd

  30. achow101 commented at 7:25 pm on February 19, 2026: member

    If the journal was zero’d, the size should be small, but I don’t see such small files after the test failure:

    SQLite doesn’t always truncate or delete the journal file. It may only overwrite the header with 0’s to invalidate the file. I believe it does this when the file is larger than the disk sector size. #34619 does handle that case though.

    Edit: Looking at the files provided, the journal files all have 0’d headers

  31. maflcko commented at 10:16 pm on February 19, 2026: member

    It is a bit odd, that it is only me that can reproduce this. Does this diff work to reproduce?

     0diff --git a/src/validationinterface.cpp b/src/validationinterface.cpp
     1index c7be6abc3a..aacb7b6563 100644
     2--- a/src/validationinterface.cpp
     3+++ b/src/validationinterface.cpp
     4@@ -14,2 +14,3 @@
     5 #include <primitives/transaction.h>
     6+#include <random.h>
     7 #include <util/check.h>
     8@@ -156,2 +157,4 @@ void ValidationSignals::SyncWithValidationInterfaceQueue()
     9 
    10+static FastRandomContext g_rnd{};
    11+
    12 // Use a macro instead of a function for conditional logging to prevent
    13@@ -166,2 +169,3 @@ void ValidationSignals::SyncWithValidationInterfaceQueue()
    14             LOG_EVENT(fmt, local_name, __VA_ARGS__);           \
    15+            if(g_rnd.randrange(2)<1)UninterruptibleSleep(15ms);\
    16             event();                                           \
    17diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp
    18index 63dab29972..21629dd546 100644
    19--- a/src/wallet/wallet.cpp
    20+++ b/src/wallet/wallet.cpp
    21@@ -74,2 +74,3 @@
    22 #include <algorithm>
    23+#include <atomic>
    24 #include <cassert>
    25@@ -77,2 +78,3 @@
    26 #include <exception>
    27+#include <mutex>
    28 #include <optional>
    29@@ -83,2 +85,7 @@
    30 
    31+std::atomic<bool> g_debug_waiting{false};
    32+std::atomic<bool> g_debug_continue{false};
    33+std::mutex g_debug_mutex;
    34+std::condition_variable g_debug_cv;
    35+
    36 struct KeyOriginInfo;
    37@@ -542,2 +549,3 @@ std::shared_ptr<CWallet> RestoreWallet(WalletContext& context, const fs::path& b
    38         if (created_parent_dir) {
    39+        UninterruptibleSleep(1ms);
    40             Assume(fs::is_empty(wallet_path));
    41@@ -1530,2 +1538,7 @@ void CWallet::blockConnected(const ChainstateRole& role, const interfaces::Block
    42     }
    43+    UninterruptibleSleep(20ms);
    44+    if (g_debug_waiting) {
    45+        g_debug_continue = true;
    46+        g_debug_cv.notify_all();
    47+    }
    48     assert(block.data);
    49@@ -3199,2 +3212,10 @@ bool CWallet::AttachChain(const std::shared_ptr<CWallet>& walletInstance, interf
    50 
    51+    {
    52+        g_debug_continue = false;
    53+        g_debug_waiting = true;
    54+        std::unique_lock<std::mutex> lock(g_debug_mutex);
    55+        g_debug_cv.wait_for(lock, std::chrono::seconds(2), [] { return g_debug_continue.load(); });
    56+        g_debug_waiting = false;
    57+    }
    58+
    59     // If rescan_required = true, rescan_height remains equal to 0
    

    With that patch, I can reproduce the crash, even with #34619

  32. achow101 commented at 0:34 am on February 20, 2026: member

    Does this diff work to reproduce?

    Only for wallet_assumeutxo.py.

    I see what the problem is now. There is a race condition where the blocks that were generated and subsequently pruned are still in the validation interface queue, so when the wallet is being loaded for the restore, there are blockConnected signals that the wallet starts processing after AttachChain exits with the error about being pruned. Since AttachChain errors, we are expecting the wallet to be immediately destroyed once LoadExisting exits as the wallet shared_ptr goes out of scope. However, if it is still processing blockConnecteds slowly, the shared_ptr still exists so the database is still open, so we get both the windows issue (the database file is still open) and the assertion (the journal file hasn’t been deleted as the database has not been closed).

    Adding a n3.syncwithvalidationinterfacequeue after self.generate fixes the issue in the test, but the race is still actually there and that needs to be fixed.

    Also I guess linux just lets us delete a file that is still open?

    The wallet_backup.py failure may be related to this, but the diff does not cause that to fail for me. However, it is a similar failure scenario in restoring a backup to a pruned node, right after a bunch of blocks were generated. Edit: It fails if I increase the number of generated blocks. Likewise it is fixed with a `syncwithvalidationinterfacequeue()’, so I believe it’s the same problem.

  33. maflcko commented at 3:53 pm on February 20, 2026: member

    For reference, the diff for wallet_backup would be:

     0diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp
     1index 63dab29..1bcf597 100644
     2--- a/src/wallet/wallet.cpp
     3+++ b/src/wallet/wallet.cpp
     4@@ -74,2 +74,3 @@
     5 #include <algorithm>
     6+#include <atomic>
     7 #include <cassert>
     8@@ -77,2 +78,3 @@
     9 #include <exception>
    10+#include <mutex>
    11 #include <optional>
    12@@ -83,2 +85,7 @@
    13 
    14+std::atomic<bool> g_debug_waiting{false};
    15+std::atomic<bool> g_debug_continue{false};
    16+std::mutex g_debug_mutex;
    17+std::condition_variable g_debug_cv;
    18+
    19 struct KeyOriginInfo;
    20@@ -542,2 +549,3 @@ std::shared_ptr<CWallet> RestoreWallet(WalletContext& context, const fs::path& b
    21         if (created_parent_dir) {
    22+        UninterruptibleSleep(1ms);
    23             Assume(fs::is_empty(wallet_path));
    24@@ -1530,2 +1538,7 @@ void CWallet::blockConnected(const ChainstateRole& role, const interfaces::Block
    25     }
    26+    if (g_debug_waiting) {
    27+        g_debug_continue = true;
    28+        g_debug_cv.notify_all();
    29+    }
    30+    UninterruptibleSleep(260ms);
    31     assert(block.data);
    32@@ -3199,2 +3212,10 @@ bool CWallet::AttachChain(const std::shared_ptr<CWallet>& walletInstance, interf
    33 
    34+    {
    35+        g_debug_continue = false;
    36+        g_debug_waiting = true;
    37+        std::unique_lock<std::mutex> lock(g_debug_mutex);
    38+        g_debug_cv.wait_for(lock, std::chrono::seconds(2), [] { return g_debug_continue.load(); });
    39+        g_debug_waiting = false;
    40+    }
    41+
    42     // If rescan_required = true, rescan_height remains equal to 0
    

    Then,

    0while ( ./bld-cmake/test/functional/test_runner.py -j 12 --timeout-factor=4 $( printf "wallet_backup %.0s" {1..12} ) ) ; do echo >> /tmp/counter_ ; done
    

    Gives:

     0TEST             | STATUS    | DURATION
     1
     2wallet_backup.py | ✓ Passed  | 186 s
     3wallet_backup.py | ✓ Passed  | 189 s
     4wallet_backup.py | ✓ Passed  | 190 s
     5wallet_backup.py | ✖ Failed  | 189 s
     6wallet_backup.py | ✖ Failed  | 190 s
     7wallet_backup.py | ✖ Failed  | 191 s
     8wallet_backup.py | ✖ Failed  | 191 s
     9wallet_backup.py | ✖ Failed  | 191 s
    10wallet_backup.py | ✖ Failed  | 192 s
    11wallet_backup.py | ✖ Failed  | 192 s
    12wallet_backup.py | ✖ Failed  | 192 s
    13wallet_backup.py | ✖ Failed  | 192 s
    14
    15ALL              | ✖ Failed  | 2285 s (accumulated) 
    16Runtime: 192 s
    
  34. achow101 commented at 11:02 pm on February 20, 2026: member
    #34642 resolves the issue for me with the previous reproducer.
  35. rkrux commented at 1:38 pm on February 27, 2026: contributor

    so when the wallet is being loaded for the restore, there are blockConnected signals that the wallet starts processing after AttachChain exits with the error about being pruned.

    Why would the blockConnected signals be there for the wallet (w2_pruneheight in the assumeutxo test) to process when the blocks were generated before the wallet was loaded/restored (or had subscribed to them)? Shouldn’t such blocks have been processed during the wallet rescan if the prune issue had not been there?

    https://github.com/bitcoin/bitcoin/blob/3a8b4e89f6db024e82f897cb88b1cbd00a0941cf/test/functional/wallet_assumeutxo.py#L96-L100

    https://github.com/bitcoin/bitcoin/blob/3a8b4e89f6db024e82f897cb88b1cbd00a0941cf/src/wallet/wallet.cpp#L3192-L3198

  36. maflcko commented at 1:44 pm on February 27, 2026: member

    Why would the blockConnected signals be there for the wallet (w2_pruneheight in the assumeutxo test) to process when the blocks were generated before the wallet was loaded/restored (or had subscribed to them)?

    I think the events are waiting in the background scheduler thread and all of the events will be considered for the wallet: The subscribers are iterated when the event fires, not when the event is enqueued. (Otherwise, the event would have to be copied and queued for every subscriber individually)

  37. rkrux commented at 3:05 pm on February 27, 2026: contributor

    I think the events are waiting in the background scheduler thread and all of the events will be considered for the wallet: The subscribers are iterated when the event fires, not when the event is enqueued.

    Appears to be true based on my current code navigation, still doing more.

    One commonality in both these tests is that one other wallet is also loaded while the blocks were generated and this wallet was being restored. Had that other wallet not been loaded, these events would be processed quicker because there were no subscribers and the flakiness could be eliminated I guess? Also, test_restore_wallet_pruneheight creates 500 blocks where 200 would suffice, this can also help in reducing events to be processed.

    Nevertheless, the solution in PR #34642 seems to be in the right direction.

  38. sedited commented at 7:29 am on March 2, 2026: contributor

    Is the failure here related to this?

     0396/455 - wallet_assumeutxo.py failed, Duration: 2 s
     1
     2stdout:
     32026-02-28T16:12:48.637327Z TestFramework (INFO): PRNG seed is: 3704802399065086238
     42026-02-28T16:12:48.637849Z TestFramework (INFO): Initializing test directory /Users/runner/work/bitcoin/bitcoin/repo_archive/ci/scratch/test_runner/test_runner__🏃_20260228_155759/wallet_assumeutxo_58
     52026-02-28T16:12:49.548117Z TestFramework (INFO): -- Testing assumeutxo
     62026-02-28T16:12:49.548768Z TestFramework (INFO): Creating a UTXO snapshot at height 299
     72026-02-28T16:12:49.895968Z TestFramework (INFO): Loading snapshot into second node from /Users/runner/work/bitcoin/bitcoin/repo_archive/ci/scratch/test_runner/test_runner__🏃_20260228_155759/wallet_assumeutxo_58/node0/regtest/utxos.dat
     82026-02-28T16:12:49.911552Z TestFramework (INFO): Backup from the snapshot height can be loaded during background sync
     92026-02-28T16:12:49.915983Z TestFramework (INFO): Backup from before the snapshot height can't be loaded during background sync
    102026-02-28T16:12:49.919539Z TestFramework (INFO): Backup from the snapshot height can be loaded during background sync (pruned node)
    112026-02-28T16:12:49.940587Z TestFramework (INFO): Backup from before the snapshot height can't be loaded during background sync (pruned node)
    122026-02-28T16:12:49.944432Z TestFramework (INFO): Test loading descriptors during background sync
    132026-02-28T16:12:49.956406Z TestFramework (INFO): Test that rescanning blocks from before the snapshot fails when blocks are not available from the background sync yet
    142026-02-28T16:12:49.956860Z TestFramework (INFO): Restarting node to stop at height 359
    152026-02-28T16:12:50.947949Z TestFramework (INFO): Restarted node before snapshot validation completed, reloading...
    162026-02-28T16:12:51.316321Z TestFramework (INFO): Verify node state after restart during background sync
    172026-02-28T16:12:51.316847Z TestFramework (ERROR): Unexpected exception:
    18Traceback (most recent call last):
    19  File "/Users/runner/work/bitcoin/bitcoin/repo_archive/test/functional/test_framework/test_framework.py", line 142, in main
    20    self.run_test()
    21    ~~~~~~~~~~~~~^^
    22  File "/Users/runner/work/bitcoin/bitcoin/repo_archive/ci/scratch/build-aarch64-apple-darwin24.6.0/test/functional/wallet_assumeutxo.py", line 251, in run_test
    23    assert_equal(chainstates[0]['blocks'], START_HEIGHT)
    24    ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    25  File "/Users/runner/work/bitcoin/bitcoin/repo_archive/test/functional/test_framework/util.py", line 80, in assert_equal
    26    raise AssertionError("not(%s)" % " == ".join(str(arg) for arg in (thing1, thing2) + args))
    27AssertionError: not(211 == 199)
    282026-02-28T16:12:51.382295Z TestFramework (INFO): Not stopping nodes as test failed. The dangling processes will be cleaned up later.
    292026-02-28T16:12:51.382372Z TestFramework (WARNING): Not cleaning up dir /Users/runner/work/bitcoin/bitcoin/repo_archive/ci/scratch/test_runner/test_runner__🏃_20260228_155759/wallet_assumeutxo_58
    302026-02-28T16:12:51.382410Z TestFramework (ERROR): Test failed. Test logging available at /Users/runner/work/bitcoin/bitcoin/repo_archive/ci/scratch/test_runner/test_runner__🏃_20260228_155759/wallet_assumeutxo_58/test_framework.log
    312026-02-28T16:12:51.382488Z TestFramework (ERROR): 
    322026-02-28T16:12:51.382577Z TestFramework (ERROR): Hint: Call /Users/runner/work/bitcoin/bitcoin/repo_archive/test/functional/combine_logs.py '/Users/runner/work/bitcoin/bitcoin/repo_archive/ci/scratch/test_runner/test_runner_₿_🏃_20260228_155759/wallet_assumeutxo_58' to consolidate all logs
    332026-02-28T16:12:51.382609Z TestFramework (ERROR): 
    342026-02-28T16:12:51.382634Z TestFramework (ERROR): If this failure happened unexpectedly or intermittently, please file a bug and provide a link or upload of the combined log.
    352026-02-28T16:12:51.382680Z TestFramework (ERROR): https://github.com/bitcoin/bitcoin/issues
    362026-02-28T16:12:51.382703Z TestFramework (ERROR): 
    37
    38
    39stderr:
    40[node 3] Cleaning up leftover process
    41[node 2] Cleaning up leftover process
    42[node 1] Cleaning up leftover process
    43[node 0] Cleaning up leftover process
    
  39. maflcko commented at 1:59 pm on March 2, 2026: member

    Is the failure here related to this?

    No, that just ignores the f"-stopatheight={PAUSE_HEIGHT}" and sync further. That is an unrelated issue.

  40. sedited closed this on Mar 2, 2026

  41. Fabcien referenced this in commit 2702711c3a on Mar 2, 2026

github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2026-03-03 21:13 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me