test: throttle large orphan transactions while being sent in RPCs #34847

pull rkrux wants to merge 125 commits into bitcoin:master from rkrux:orphan-handling changing 3 files +37 −25
  1. rkrux commented at 8:56 am on March 18, 2026: contributor

    Addresses #34731

    Reasons why I don’t believe it is a deadlock issue based on the debug logs and debugger thread backtrace output shared in the issue:

    • The HTTP worker threads (b-http_pool_x) are waiting on the condition variable and not on the mutex that signals that these threads are idle & waiting for work to be assigned to them.
    • The HTTP thread (b-http) is epoll waiting that means it is waiting for a request (or a part of it) to be received.
    • The added logs show that the first few testmempool RPCs were successful and the next one timed out. But the logs don’t show a request for it being logged unlike in the previous ones, hinting that the server never received such a request (or in full) and thus never processed it. Even then the functional test client timed out, which means that it did send it (at least a part of it).
    • The large orphan transactions being sent are each 780KB in size that are sent sequentially by the test. It tries to send 60 of them in a loop amounting to 46MB of data over a single HTTP connection that is reused.

    More details are shared in the first commit message.

    This PR throttles the RPCs on client side. I’ve not been able to reproduce this intermittent issue and thus I don’t gurantee that this fixes the issue altogether.

    Note: A previous approach in this PR tried to not reuse the HTTP connection for the RPCs in this test instead. But I noticed a CI run where this affected test took around 75mins to complete that led me to move to this approach where the HTTP connection is reused like before but with some throttling.

  2. DrahtBot added the label Tests on Mar 18, 2026
  3. DrahtBot commented at 8:57 am on March 18, 2026: contributor

    The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.

    Reviews

    See the guideline for information on the review process. A summary of reviews will appear here.

  4. rkrux commented at 10:31 am on March 18, 2026: contributor
    Is this job CI / macOS native (pull_request) stuck? It was started 1.5hrs back.
  5. DrahtBot added the label CI failed on Mar 18, 2026
  6. rkrux commented at 11:02 am on March 18, 2026: contributor
    Can the CI / macOS native (pull_request) job be re-run? It was cancelled after being stuck for 120 mins.
  7. maflcko commented at 11:08 am on March 18, 2026: member
    I don’t think the issue happens in macOS, but only in the task that tests ancestor commits, but that task is skipped for pull requests with one commit. Also, reproducing requires tens of runs/commits.
  8. hebasto commented at 11:08 am on March 18, 2026: member

    Can the CI / macOS native (pull_request) job be re-run? It was cancelled after being stuck for 120 mins.

    Done.

  9. rkrux commented at 11:13 am on March 18, 2026: contributor

    I don’t think the issue happens in macOS, but only in the task that tests ancestor commits,

    Oh interesting, I do have a second commit that I will push after this recently started job ends/succeeds.

    Also, reproducing requires tens of runs/commits.

    I’m not trying to reproduce the issue. Just ensuring that the tests don’t fail for some other reason on this commit. Will undraft the PR once the CI is green (or not yellow at least).

  10. DrahtBot removed the label CI failed on Mar 18, 2026
  11. rkrux force-pushed on Mar 18, 2026
  12. rkrux force-pushed on Mar 18, 2026
  13. rkrux renamed this:
    test: work in progress commit
    test: conditionally throttle large testmempoolaccept rpcs in p2p_orphan_handling test
    on Mar 18, 2026
  14. rkrux commented at 2:42 pm on March 18, 2026: contributor
    A previous instance of the CI run where the test took 4536s (~75min) to complete when the HTTP connection was not reused and a fresh one was created for every RPC in the test: ASan + LSan + UBSan + integer
  15. rkrux marked this as ready for review on Mar 18, 2026
  16. rkrux force-pushed on Mar 19, 2026
  17. in test/functional/p2p_orphan_handling.py:633 in b309bdb2c4
    629@@ -630,7 +630,8 @@ def test_maximal_package_protected(self):
    630 
    631         # Check to make sure these are orphans, within max standard size (to be accepted into the orphanage)
    632         for large_orphan in large_orphans:
    633-            testres = node.testmempoolaccept([large_orphan.serialize().hex()])
    634+            # throttle these 780KB large requests if the RPC latency is greater than 1s
    


    maflcko commented at 8:52 am on March 19, 2026:

    I don’t think the logs show such a delay? The tests are run on a fast gaming CPU, and the delay between calls is basically zero, never 1s.

    Of course, for the failure the delay is inf (times out), but then the test already has failed and delaying the next one doesn’t help?

    What am I missing? Can you refer to the logs with excerpts to explain your thinking?


    rkrux commented at 9:08 am on March 19, 2026:

    Thanks for raising this, I don’t think you are missing anything.

     0  node0 2026-03-13T16:52:33.591304Z (mocktime: 2026-03-13T16:52:33Z) [http] [httpserver.cpp:191] [http_request_cb] [http] http_request_cb starting 
     1  node0 2026-03-13T16:52:33.591319Z (mocktime: 2026-03-13T16:52:33Z) [http] [httpserver.cpp:196] [http_request_cb] [http] http_request tracked 
     2  node0 2026-03-13T16:52:33.591328Z (mocktime: 2026-03-13T16:52:33Z) [http] [httpserver.cpp:237] [http_request_cb] [http] Received a POST request for / from 127.0.0.1:50884 
     3  node0 2026-03-13T16:52:33.591349Z (mocktime: 2026-03-13T16:52:33Z) [http_pool_1] [httpserver.cpp:267] [operator()] [http] http_worker processing request for '/' 
     4  node0 2026-03-13T16:52:33.591354Z (mocktime: 2026-03-13T16:52:33Z) [http_pool_1] [httprpc.cpp:106] [HTTPReq_JSONRPC] [rpc] HTTPReq_JSONRPC starting for / 
     5  node0 2026-03-13T16:52:33.591953Z (mocktime: 2026-03-13T16:52:33Z) [http_pool_1] [httprpc.cpp:142] [HTTPReq_JSONRPC] [rpc] HTTPReq_JSONRPC body read, size=780258 
     6  node0 2026-03-13T16:52:33.594496Z (mocktime: 2026-03-13T16:52:33Z) [http_pool_1] [rpc/request.cpp:243] [parse] [rpc] ThreadRPCServer method=testmempoolaccept user=__cookie__ 
     7  node0 2026-03-13T16:52:33.594503Z (mocktime: 2026-03-13T16:52:33Z) [http_pool_1] [rpc/request.cpp:244] [parse] [rpc] ThreadRPCServer method=testmempoolaccept finished parse 
     8  node0 2026-03-13T16:52:33.594544Z (mocktime: 2026-03-13T16:52:33Z) [http_pool_1] [rpc/server.cpp:348] [JSONRPCExec] [rpc] ThreadRPCServer method=testmempoolaccept starting execution 
     9  node0 2026-03-13T16:52:33.594572Z (mocktime: 2026-03-13T16:52:33Z) [http_pool_1] [rpc/mempool.cpp:320] [operator()] DEBUG: testmempoolaccept - starting 
    10  node0 2026-03-13T16:52:33.597400Z (mocktime: 2026-03-13T16:52:33Z) [http_pool_1] [txmempool.cpp:441] [check] [mempool] Checking mempool with 0 transactions and 0 inputs 
    11  node0 2026-03-13T16:52:33.597412Z (mocktime: 2026-03-13T16:52:33Z) [http_pool_1] [rpc/mempool.cpp:409] [operator()] DEBUG: testmempoolaccept - finished 
    12  node0 2026-03-13T16:52:33.597425Z (mocktime: 2026-03-13T16:52:33Z) [http_pool_1] [rpc/server.cpp:364] [JSONRPCExec] [rpc] ThreadRPCServer method=testmempoolaccept finished execution 
    13  node0 2026-03-13T16:52:33.597434Z (mocktime: 2026-03-13T16:52:33Z) [http_pool_1] [httpserver.cpp:593] [WriteReply] [http] HTTPRequest::WriteReply status=200 size=238 
    14  node0 2026-03-13T16:52:33.597454Z (mocktime: 2026-03-13T16:52:33Z) [http] [httpserver.cpp:603] [operator()] [http] HTTPRequest::WriteReply callback starting status=200 
    15  node0 2026-03-13T16:52:33.597466Z (mocktime: 2026-03-13T16:52:33Z) [http] [httpserver.cpp:616] [operator()] [http] HTTPRequest::WriteReply callback finished 
    16  node0 2026-03-13T16:52:33.597486Z (mocktime: 2026-03-13T16:52:33Z) [http] [httpserver.cpp:198] [operator()] [http] http_request completed 
    

    Above is a log excerpt from the last successful request. There is no such delay in these logs (as per the first timestamps), although these are only server side logs and not from the client (test) side. I think I will just revert to unconditional timeout instead of doing it conditionally for which I don’t have any basis.

    The tests are run on a fast gaming CPU,

    Nice, I didn’t know this but do we know how much load it is under (or atleast when the intermittent issue occured)?


    rkrux commented at 9:18 am on March 19, 2026:

    From #34847 (comment)

    A previous instance of the CI run where the test took 4536s (~75min) to complete when the HTTP connection was not reused and a fresh one was created for every RPC in the test: ASan + LSan + UBSan + integer

    I like this approach for this test but this one occurence discouraged me. I do feel that it hints at the CI instance(s) being under load intermittently for which an unconditional timeout can be a remedy.


    maflcko commented at 12:01 pm on March 19, 2026:

    Nice, I didn’t know this but do we know how much load it is under (or atleast when the intermittent issue occured)?

    I wouldn’t expect a high load to be the issue here. This is an optimized build without any sanitizers, running on a high-end CPU. Seeing a spurious 30 seconds timeout for an RPC that would otherwise take milliseconds seems off.

    In fact, it may be a race, that is only visible because the CPU is so fast.


    rkrux commented at 9:55 am on March 27, 2026:
    I’ve reworked the PR to throttle at the large orphan level if it’s being sent over the network to the RPC. This handles both the p2p tests (p2p_orphan_handling, p2p_opportunistic_1p1c) that timed out intermittently.
  18. CyberNFT commented at 9:18 am on March 19, 2026: none
    👍🏻
  19. rkrux force-pushed on Mar 19, 2026
  20. rkrux renamed this:
    test: conditionally throttle large testmempoolaccept rpcs in p2p_orphan_handling test
    test: throttle large testmempoolaccept rpcs in p2p_orphan_handling test
    on Mar 19, 2026
  21. rkrux force-pushed on Mar 19, 2026
  22. DrahtBot added the label CI failed on Mar 19, 2026
  23. DrahtBot removed the label CI failed on Mar 19, 2026
  24. rkrux force-pushed on Mar 27, 2026
  25. rkrux marked this as a draft on Mar 27, 2026
  26. rkrux force-pushed on Mar 27, 2026
  27. rkrux force-pushed on Mar 27, 2026
  28. DrahtBot added the label CI failed on Mar 27, 2026
  29. rkrux renamed this:
    test: throttle large testmempoolaccept rpcs in p2p_orphan_handling test
    test: throttle large orphan transactions while being sent in RPCs
    on Mar 27, 2026
  30. rkrux marked this as ready for review on Mar 27, 2026
  31. DrahtBot removed the label CI failed on Mar 27, 2026
  32. maflcko commented at 10:40 am on March 27, 2026: member

    Not sure this is the correct fix. We are not sending 1MB from somewhere outside the solar system to the earth. This is sending 780KB on a local socket from one process to another. Why should this take 30 seconds? Normally, the whole test passes in less time than that, and then suddenly a single RPC times out?

    Also, you haven’t even tested if this fix is working. 12 runs/commits is not enough. It can happen after the 40th or 60th run. You’ll have to add 125 empty commits or so.

    I don’t mind a temporary workaround, but at least it should be tested, and it should be explained that this is just a temporary workaround for a real underlying bug.

    Otherwise, are we going to update the docs to say: “If you call an RPC with a large payload, you have to manually sleep after each call”?

  33. rkrux commented at 11:00 am on March 27, 2026: contributor

    This is sending 780KB on a local socket from one process to another. Why should this take 30 seconds?

    It shouldn’t take 30 seconds. Since it’s all on local, I don’t think this is a network latency issue, but more of an issue with the server drain rate of its TCP buffer not as quick as the client send rate. That’s why I believe the zero TCP window issue occurs.

    it should be explained that this is just a temporary workaround

    The PR description does hint at it in the end but I can make this explicit.

    Not sure this is the correct fix. It can happen after the 40th or 60th run. You’ll have to add 125 empty commits or so.

    I can test with more commits and put it in draft until then.

    for a real underlying bug.

    This presence of this issue in only one CI job is what I find confusing (and interesting) the most.

    “If you call an RPC with a large payload, you have to manually sleep after each call”

    This shouldn’t be required because this issue doesn’t happen all the time and is intermittent in a specific CI job, which can even put into question the setup of that CI job.

  34. rkrux marked this as a draft on Mar 27, 2026
  35. in test/functional/p2p_orphan_handling.py:632 in 56898d5d5a outdated
    628@@ -630,7 +629,7 @@ def test_maximal_package_protected(self):
    629 
    630         # Check to make sure these are orphans, within max standard size (to be accepted into the orphanage)
    631         for large_orphan in large_orphans:
    632-            testres = node.testmempoolaccept([large_orphan.serialize().hex()])
    633+            testres = node.testmempoolaccept([large_orphan.to_send.serialize().hex()])
    


    maflcko commented at 11:32 am on March 27, 2026:

    Instead of sleeping 300ms, it would be a smaller temporary workaround to just quickly spin up a new tcp connection. You can do this either:

    • by calling .cli() (spawns a bitcoin-cli process) in a trivial one-line patch
    • or cherry-pick fa8fc5a23752c2a590b95f62833cf013a3d6febc, which was meant for different threads, but using the new authproxy for a single rpc call should also be fine and work around the issue for now.

    If you want to keep the unconditional sleep, my preference would be to inline it here again, like it was in the beginning of this pull?


    rkrux commented at 3:16 pm on March 27, 2026:

    it would be a smaller temporary workaround to just quickly spin up a new tcp connection.

    A new connection for every iteration of testmempoolaccept?

    If you want to keep the unconditional sleep, my preference would be to inline it here again, like it was in the beginning of this pull?

    I preferred that too and then noticed the same failure in the p2p_opportunistic_1p1c test. So thought maybe highlight it in the code to add a sleep whenever a LargeOrphan is sent over the wire by putting the sleep in the class itself (though the sleep is effective only when many such large orphans are sent in a burst). Otherwise it seemed easy that a new call site might miss adding the sleep.

  36. in test/functional/p2p_opportunistic_1p1c.py:444 in 56898d5d5a outdated
    443-            assert_greater_than_or_equal(3 * large_orphan.get_vsize(), 2 * 100000)
    444-            testres = node.testmempoolaccept([large_orphan.serialize().hex()])
    445+            assert_greater_than_or_equal(100000, large_orphan.get.get_vsize())
    446+            assert_greater_than(MAX_STANDARD_TX_WEIGHT, large_orphan.get.get_weight())
    447+            assert_greater_than_or_equal(3 * large_orphan.get.get_vsize(), 2 * 100000)
    448+            testres = node.testmempoolaccept([large_orphan.to_send.serialize().hex()])
    


    maflcko commented at 2:59 pm on March 27, 2026:
    I don’t think the bug happened in this test, so no need to change it?

    rkrux commented at 3:06 pm on March 27, 2026:
    It did in PR #34927 here.
  37. maflcko approved
  38. maflcko commented at 3:01 pm on March 27, 2026: member

    lgtm (assuming ci passes)

    Looks like it is on track of passing …

    So I guess adding a sleep to workaround a timeout bug is another data point that shows there is an underlying racy bug, which is only triggered by weird timing. (And can be avoided by adding weird timing/sleeps)

  39. rkrux commented at 3:07 pm on March 27, 2026: contributor

    Looks like it is on track of passing …

    Yeah, no failure yet. But I sense that the 360 minutes threshold of the job will be hit before all the ancestor commits are tested, so this job might get cancelled in the end. :(

    Edit: It had passed in 5hr 30mins here - https://github.com/bitcoin/bitcoin/actions/runs/23643332720/job/68869238262?pr=34847

  40. rkrux force-pushed on Mar 28, 2026
  41. DrahtBot added the label CI failed on Mar 28, 2026
  42. test: throttle large orphan transactions while being sent in RPCs
    Each of these large orphan transaction is around 780KB large that are
    sent sequentially without waiting in the `testmempoolaccept` RPC. For the
    `p2p_orphan_handling` and `p2p_opportunistic_1p1c` tests that send these
    large orphan transactions sequentially 50-60 times, it has been observed in
    the CI via the tcpdump outputs (refer:
    https://github.com/bitcoin/bitcoin/issues/34731#issuecomment-4133098597) that
    the HTTP server is showing zero TCP window `win 0` intermittently that leads to
    such requests never being read fully, so the server never processes them and
    thus never sends a response. The test client rightfully times out after 30 seconds.
    
    Interestingly, this intermittent issue has been observed only in the "test ancestor
    commits" CI job that recently started testing all the commits in the PR, which is more
    robust, as opposed to testing only the last 6 commits like it used to do earlier. For each
    commit in the PR, this job runs 16 tests in parallel where the CPU nproc is 8. These
    two are the only tests that send such large orphans to the server in the same instance
    50-60 times amounting to 45MB being sent in a burst. I've noticed this issue in this
    job never in the first commit being tested but instead only in the subsequent ones.
    
    This commit creates a LargeOrphanTransaction class that provides two properties
    - one to get the large orphan transaction for the internal operations and the
    other to send this transaction over the network, which by default adds a 50ms
    sleep before returning. This is to ensure that the test client doesn't bombard
    the server with such large transactions without providing it with a cool down
    period for the TCP window to clear.
    
    One of the ealier CI runs I tested this change on had 125 commits with a 300ms
    delay between each such RPC where this issue didn't occur:
    https://github.com/bitcoin/bitcoin/actions/runs/23643332720/job/68869238262?pr=34847
    All the `p2p_orphan_handling` tests finished in under 60sec each and all the
    `p2p_opportunistic_1p1c` tests finished in undr 70sec each. Adding the timeout
    does increase the overall latency of these two tests but might help in avoiding
    the intermittent timeouts.
    08722f0a97
  43. test: remove redundant setmocktime RPC
    setmocktime RPC is already called in the cleanup function that runs prior to
    this last test, setting it again in the test case is not needed.
    dc92bb81d9
  44. test: empty commit 1 to test ancestor commits job fa01aee063
  45. test: empty commit 2 to test ancestor commits job c6f23553f1
  46. test: empty commit 3 to test ancestor commits job 59ddba1511
  47. test: empty commit 4 to test ancestor commits job d6f701f7da
  48. test: empty commit 5 to test ancestor commits job 3d6054d85e
  49. test: empty commit 6 to test ancestor commits job 5eaaee41c5
  50. test: empty commit 7 to test ancestor commits job 31bb9c9811
  51. test: empty commit 8 to test ancestor commits job 2dc526d623
  52. test: empty commit 9 to test ancestor commits job 84796fd6c8
  53. test: empty commit 10 to test ancestor commits job a4ac780c2e
  54. test: empty commit 11 to test ancestor commits job f1e794a6fa
  55. test: empty commit 12 to test ancestor commits job 3ddc58d248
  56. test: empty commit 13 to test ancestor commits job 7cb77e6329
  57. test: empty commit 14 to test ancestor commits job 9dd07a4b56
  58. test: empty commit 15 to test ancestor commits job 09308c9ec0
  59. test: empty commit 16 to test ancestor commits job 1aaa0cb7ce
  60. test: empty commit 17 to test ancestor commits job d31cfe7386
  61. test: empty commit 18 to test ancestor commits job da81542424
  62. test: empty commit 19 to test ancestor commits job 2a76b669cd
  63. test: empty commit 20 to test ancestor commits job 439b5231a1
  64. test: empty commit 21 to test ancestor commits job 86e623615c
  65. test: empty commit 22 to test ancestor commits job 64c735cb1f
  66. test: empty commit 23 to test ancestor commits job 42fa580776
  67. test: empty commit 24 to test ancestor commits job edec3511b2
  68. test: empty commit 25 to test ancestor commits job dbdd6265d9
  69. test: empty commit 26 to test ancestor commits job c0fc48c53d
  70. test: empty commit 27 to test ancestor commits job e6ca5d68e0
  71. test: empty commit 28 to test ancestor commits job 679467ddff
  72. test: empty commit 29 to test ancestor commits job c4b32e6339
  73. test: empty commit 30 to test ancestor commits job aaf1bf0e7a
  74. test: empty commit 31 to test ancestor commits job 97623fc8ed
  75. test: empty commit 32 to test ancestor commits job 7d7b59cb32
  76. test: empty commit 33 to test ancestor commits job 6924a071fe
  77. test: empty commit 34 to test ancestor commits job 7bffb9ef95
  78. test: empty commit 35 to test ancestor commits job 2eadab46d9
  79. test: empty commit 36 to test ancestor commits job 83772e1c2d
  80. test: empty commit 37 to test ancestor commits job 56efb0d097
  81. test: empty commit 38 to test ancestor commits job 44ef7ee6db
  82. test: empty commit 39 to test ancestor commits job 61f716538c
  83. test: empty commit 40 to test ancestor commits job c051b05c4b
  84. test: empty commit 41 to test ancestor commits job 311edbf9b9
  85. test: empty commit 42 to test ancestor commits job de5d7e50a9
  86. test: empty commit 43 to test ancestor commits job 1b273a0a40
  87. test: empty commit 44 to test ancestor commits job 4bdf05c7b2
  88. test: empty commit 45 to test ancestor commits job a9ee93b5b4
  89. test: empty commit 46 to test ancestor commits job 32106beb33
  90. test: empty commit 47 to test ancestor commits job 22a9a22733
  91. test: empty commit 48 to test ancestor commits job 25157737ad
  92. test: empty commit 49 to test ancestor commits job dcc2356d61
  93. test: empty commit 50 to test ancestor commits job 68b3945b1f
  94. test: empty commit 51 to test ancestor commits job 9ffa812a77
  95. test: empty commit 52 to test ancestor commits job cd1e68beeb
  96. test: empty commit 53 to test ancestor commits job 54c4fae21a
  97. test: empty commit 54 to test ancestor commits job 173d84d02a
  98. test: empty commit 55 to test ancestor commits job 248233eea5
  99. test: empty commit 56 to test ancestor commits job 536b0cc915
  100. test: empty commit 57 to test ancestor commits job 698996a727
  101. test: empty commit 58 to test ancestor commits job 9236f40d30
  102. test: empty commit 59 to test ancestor commits job f05a5aeef4
  103. test: empty commit 60 to test ancestor commits job 5494f8162e
  104. test: empty commit 61 to test ancestor commits job 8df131ffc9
  105. test: empty commit 62 to test ancestor commits job 41c55364dd
  106. test: empty commit 63 to test ancestor commits job 36170deffa
  107. test: empty commit 64 to test ancestor commits job 7bc7584346
  108. test: empty commit 65 to test ancestor commits job 0fffaf10ef
  109. test: empty commit 66 to test ancestor commits job 825ceb2811
  110. test: empty commit 67 to test ancestor commits job d4ae56fe95
  111. test: empty commit 68 to test ancestor commits job e10f1ab805
  112. test: empty commit 69 to test ancestor commits job 146ec131fb
  113. test: empty commit 70 to test ancestor commits job 9ea1efb6f0
  114. test: empty commit 71 to test ancestor commits job 42095e2757
  115. test: empty commit 72 to test ancestor commits job d9b867a8bf
  116. test: empty commit 73 to test ancestor commits job 84ada5eee0
  117. test: empty commit 74 to test ancestor commits job a0046e50ee
  118. test: empty commit 75 to test ancestor commits job 1aa85ab1b9
  119. test: empty commit 76 to test ancestor commits job ec593cbf9d
  120. test: empty commit 77 to test ancestor commits job 44b852d57a
  121. test: empty commit 78 to test ancestor commits job 6b9b9716c9
  122. test: empty commit 79 to test ancestor commits job bf1e1a3d05
  123. test: empty commit 80 to test ancestor commits job 6e9bac15ab
  124. test: empty commit 81 to test ancestor commits job 6a7e90135a
  125. test: empty commit 82 to test ancestor commits job cf8c0463c6
  126. test: empty commit 83 to test ancestor commits job e52735a2d2
  127. test: empty commit 84 to test ancestor commits job 6c27cc3180
  128. test: empty commit 85 to test ancestor commits job 838a5cac64
  129. test: empty commit 86 to test ancestor commits job 4aac950c43
  130. test: empty commit 87 to test ancestor commits job 3ad387abed
  131. test: empty commit 88 to test ancestor commits job 4a4ce69482
  132. test: empty commit 89 to test ancestor commits job 87b6bba88e
  133. test: empty commit 90 to test ancestor commits job 671eee10db
  134. test: empty commit 91 to test ancestor commits job 911cbaf55c
  135. test: empty commit 92 to test ancestor commits job 6b737a5b54
  136. test: empty commit 93 to test ancestor commits job 7082e4c530
  137. test: empty commit 94 to test ancestor commits job 7222c6e97e
  138. test: empty commit 95 to test ancestor commits job 63c2169d09
  139. test: empty commit 96 to test ancestor commits job f4a25f7849
  140. test: empty commit 97 to test ancestor commits job a9b1516e1b
  141. test: empty commit 98 to test ancestor commits job bf208caf02
  142. test: empty commit 99 to test ancestor commits job 4fd70acbfc
  143. test: empty commit 100 to test ancestor commits job caece82a70
  144. test: empty commit 101 to test ancestor commits job 7e3944ca77
  145. test: empty commit 102 to test ancestor commits job 2e5d25301c
  146. test: empty commit 103 to test ancestor commits job 49cf5bd4c8
  147. test: empty commit 104 to test ancestor commits job 5d7e2bcc89
  148. test: empty commit 105 to test ancestor commits job aba6730938
  149. test: empty commit 106 to test ancestor commits job 024fd01bfd
  150. test: empty commit 107 to test ancestor commits job 19f724c49a
  151. test: empty commit 108 to test ancestor commits job eeaa9eccaf
  152. test: empty commit 109 to test ancestor commits job b445328f27
  153. test: empty commit 110 to test ancestor commits job 2e5eada2c4
  154. test: empty commit 111 to test ancestor commits job 0b5039e466
  155. test: empty commit 112 to test ancestor commits job 2921639f50
  156. test: empty commit 113 to test ancestor commits job d81f39b3bf
  157. test: empty commit 114 to test ancestor commits job e832dc3b06
  158. test: empty commit 115 to test ancestor commits job 15aaee7e4b
  159. test: empty commit 116 to test ancestor commits job ae2e87ea6c
  160. test: empty commit 117 to test ancestor commits job 9a25b741db
  161. test: empty commit 118 to test ancestor commits job 7791baecba
  162. test: empty commit 119 to test ancestor commits job f27e4e6646
  163. test: empty commit 120 to test ancestor commits job 6e59e1e504
  164. test: empty commit 121 to test ancestor commits job ed1d49125e
  165. test: empty commit 122 to test ancestor commits job 04712a96fb
  166. test: empty commit 123 to test ancestor commits job fda946d6b8
  167. rkrux force-pushed on Mar 28, 2026
  168. rkrux commented at 10:54 am on March 28, 2026: contributor

    With a 20ms sleep, the CI job failed with the timeout in 47th commit: https://github.com/bitcoin/bitcoin/actions/runs/23681547345/job/68994196366?pr=34847

    Passed with 300ms sleep earlier. Trying with 50ms.

  169. DrahtBot removed the label CI failed on Mar 28, 2026
  170. rkrux commented at 4:12 am on March 29, 2026: contributor

    Successful with 50ms sleep: https://github.com/bitcoin/bitcoin/actions/runs/23683685089/job/68999661705?pr=34847

    Job finished 13mins faster than the one with 300ms sleep, saving more than 6s per commit.


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-30 00:13 UTC

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