Repository navigation
backport: v0.26 bitcoin#28565, bitcoin#28199 - #66
DCG-Claude wants to merge 2 commits into
Conversation
The quoted log contains no test output at all — only post-job teardown (git config cleanup, docker rm, network removal) — and all six Test-source jobs failed simultaneously in the same way, which points at shared CI infrastructure rather than the test this commit adds. I re-checked the adapted test against the Dash node code it exercises (MSG_DSTX orphan-parent fetch at net_processing.cpp:4922, MSG_DSTX=16 in protocol.h, the NONPREF/OVERLOADED/GETDATA_TX_INTERVAL constants, AlreadyHave's txindex and recent-confirmed checks, the BlockDisconnected filter reset) plus the framework helpers it uses (bump_mocktime's update_schedulers kwarg, set_node_times already assigning node.mocktime), and found no divergence from upstream or Dash-specific breakage. Please rerun fork CI. 🤖 backportsys, on behalf of the Dash backport pipeline. |
The attached log is only GHA post-job teardown (container removal, orphan-process cleanup) — it contains no failing test, assertion or test_runner summary, and the failures are attributed to 'UNKNOWN STEP' in all six variants at once, which is the signature of an infrastructure/runner abort rather than a test failure. I re-checked each commit against Dash: the SipHash Span call sites all type-check (including the preserved Dash-only .Write(inv.type)), EnsureAnyAddrman matches Dash's CoreContext convention and rpc_net.py's hidden-RPC check was dropped with the RPC going public, the fuzz change is not run by 'Test source', and p2p_orphan_handling.py's MSG_DSTX=16, zero-delay DSTX parent requests, debug-log string and bump_mocktime signature all match Dash's sources. Please rerun fork CI; if it fails again, the full test_runner output (or the uploaded test_logs artifact) would let me pin the actual test. 🤖 backportsys, on behalf of the Dash backport pipeline. |
The quoted log contains only post-job teardown (git config, docker rm, network rm, "Cleaning up orphan processes") with every step marked UNKNOWN STEP -- there is no failing test, assertion or traceback attributable to the branch. Since 'Test source' only runs the functional suite, all six targets built fine, so the SipHash Span refactor is compile-clean; I re-checked the new p2p_orphan_handling.py against upstream 9eac5a0 and against Dash's MSG_DSTX orphan-parent fetch, zero-delay AddObjectAnnouncement, txindex-aware AlreadyHave and the MiniWallet API, and the getaddrmaninfo visibility change against its updated rpc_net.py expectation, and found no divergence. This looks like infrastructure/flake affecting all six jobs at once; please rerun. 🤖 backportsys, on behalf of the Dash backport pipeline. |
41b4beb to
36f6a66
Compare
|
Branch rewritten at
🤖 backportsys, on behalf of the Dash backport pipeline. |
36f6a66 to
54fe4e8
Compare
The persistent failures (feature_config_args.py 'Adding fixed seeds as 60 seconds have passed' and wallet_dump.py 'Flushing wallet.dat') came from the TestNode.setmocktime() wrapper added in the bitcoin#28199 backport. It records every setmocktime value in node.mocktime, and Dash's start() appends -mocktime=<node.mocktime> to the args on every restart, so a mock time set before a restart overrides the test's own -mocktime and leaves the restarted node on a stale, frozen clock. I removed the wrapper: Dash already tracks node.mocktime via set_node_times(), and the backported p2p_orphan_handling.py uses bump_mocktime rather than upstream's bumpmocktime(), so nothing depends on it. Not reproduced locally because the worktree has no build; the file was only checked to compile. (folded into the 🤖 backportsys, on behalf of the Dash backport pipeline. |
e6e444c refactor: add and use EnsureAnyAddrman in rpc (stratospher) bf589a5 doc: add release notes for bitcoin#27511 (stratospher) 3931e6a rpc: `getaddrmaninfo` followups (stratospher) Pull request description: - make `getaddrmaninfo` RPC public since it's not for development purposes only and regular users might find it useful. [bitcoin#26988 (comment)](bitcoin#26988 (comment)) - add missing `all_networks` key to RPC help. [bitcoin#27511 (comment)](bitcoin#27511 (comment)) - fix clang format spacing - add and use `EnsureAddrman` in RPC code. [bitcoin#27511 (comment)](bitcoin#27511 (comment)) ACKs for top commit: 0xB10C: Code Review re-ACK e6e444c theStack: Code-review ACK e6e444c pablomartin4btc: tested ACK e6e444c Tree-SHA512: c14090d5c64ff15e92d252578de2437bb2ce2e1e431d6698580241a29190f0a3528ae5b013c0ddb76a9ae538507191295c37cab7fd93469941cadbde44587072 Dash adaptations: - src/rpc/server_util.h: EnsureAnyAddrman takes Dash's `const CoreContext&` instead of upstream's `const std::any&`, matching every other EnsureAny* declaration in Dash's server_util.h - src/rpc/server_util.cpp: same CoreContext signature adaptation for the EnsureAnyAddrman definition - src/rpc/net.cpp: in RegisterNetRPCCommands, getaddrmaninfo moved from "hidden" to "network" as upstream does, while Dash-only hidden entries {cleardiscouraged} and {setmnthreadactive} are kept in place around the upstream {addconnection, addpeeraddress, sendmsgtopeer} block - src/rpc/net.cpp: addpeeraddress body had a Dash-side stray blank line and a `const NodeContext&` (upstream non-const); both replaced wholesale by upstream's single `AddrMan& addrman = EnsureAnyAddrman(request.context);` line - doc/release-notes-27511.md: upstream places pending notes in doc/release-notes/release-notes-NNNNN.md; Dash keeps pending per-PR notes flat in doc/ (doc/release-notes-28414.md, -29189.md) and reserves doc/release-notes/ for the archived doc/release-notes/dash/ tree, so the file was written at doc/release-notes-27511.md with identical content
9eac5a0 [functional test] transaction orphan handling (glozow) 61e77bb [test framework] make it easier to fast-forward setmocktime (glozow) Pull request description: I was doing some mutation testing (through reckless refactoring) locally and found some specific behaviors in orphan handling that weren't picked up by tests. Adding some of these test cases now can maybe help with reviewing refactors like bitcoin#28031. - Parent requests aren't sent immediately. A delay is added and the requests are filtered by AlreadyHaveTx before they are sent, which means you can't use fake orphans to probe precise arrival timing of a tx. - Parent requests include all that are not AlreadyHaveTx. This means old confirmed parents may be requested. - The node does not give up on orphans if the peer responds to a parent request with notfound. This means that if a parent is an old confirmed transaction (in which notfound is expected), the orphan should still be resolved. - Rejected parents can cause an orphan to be dropped, but it depends on the reason and only based on txid. - Rejected parents can cause an orphan to be rejected too, by both wtxid and txid. - Requests for orphan parents should be de-duplicated with "regular" txrequest. If a missing parent has the same hash as an in-flight request, it shouldn't be requested. - Multiple orphans with overlapping parents should not cause duplicated parent requests. ACKs for top commit: instagibbs: reACK bitcoin@9eac5a0 dergoegge: reACK 9eac5a0 achow101: ACK 9eac5a0 fjahr: Code review ACK 9eac5a0 Tree-SHA512: 85488dc6a3f62cf0c38e7dfe7839c01215b44b172d1755b18164d41d01038f3a749451241e4eba8b857fd344a445740b21d6382c45977234b21460e3f53b1b2a Dash adaptations: - test/functional/p2p_orphan_handling.py: Dash requests missing orphan parents as MSG_DSTX (net_processing.cpp ~4922, to keep DSTX metadata for a parent that turns out to be a mixing tx), so wait_for_parent_requests asserts item.type == MSG_DSTX instead of MSG_WITNESS_TX, and the notfound in test_orphan_multiple_parents uses CInv(MSG_DSTX, ...) - test/functional/p2p_orphan_handling.py: no wtxid relay in Dash -- relay_transaction announces MSG_TX with tx.rehash() instead of MSG_WTX with getwtxid(), and all txid/wtxid distinctions (assert child['txid'] != getwtxid(), witness-stripped parent, alternate-witness retry) are dropped - test/functional/p2p_orphan_handling.py: TXREQUEST_TIME_SKIP drops TXID_RELAY_DELAY (no such delay in Dash) and uses OVERLOADED_PEER_OBJECT_DELAY, Dash's name for OVERLOADED_PEER_TX_DELAY - test/functional/p2p_orphan_handling.py: uses the framework's self.bump_mocktime() rather than node.bumpmocktime(), so Dash's own self.mocktime and the node clocks stay in sync; the 12h inter-subtest skip passes update_schedulers=False because the mockscheduler RPC rejects deltas > 3600s - test/functional/p2p_orphan_handling.py: drops upstream's nodes[0].setmocktime(int(time.time())) in run_test -- Dash's framework already runs every test on mocktime and resetting it would desync self.mocktime and move time backwards relative to the chain - test/functional/p2p_orphan_handling.py: self.wallet_nonsegwit renamed self.wallet_p2pk ('nonsegwit' is meaningless in Dash); the second MiniWallet is kept, with upstream's per-subtest assignment, because it keeps the two UTXO pools separate -- test_orphans_overlapping_parents asserts all its utxos have confirmations > 0, which a single shared wallet would break after test_orphan_multiple_parents' send_self_transfer calls - test/functional/p2p_orphan_handling.py: test_orphans_overlapping_parents announces inflight_parent_AB as MSG_DSTX; upstream needed txid == wtxid for the node to match the in-flight request against the missing input, the Dash analogue is matching the inv type, since the request tracker keys announcements on the full inv - test/functional/p2p_orphan_handling.py: upstream's test_orphan_rejected_parents_exceptions reduces to its first (non-segwit) block, renamed test_orphan_rejected_parents; the two 'exception' blocks are segwit-only - test/functional/test_framework/p2p.py: added GETDATA_TX_INTERVAL and OVERLOADED_PEER_OBJECT_DELAY (Dash's name for the constant); TXID_RELAY_DELAY omitted as Dash's net_processing has no such delay - test/functional/test_framework/test_node.py: setmocktime wrapper sets self.mocktime = timestamp unconditionally instead of None-on-zero -- Dash uses 0, not None, as the 'no mocktime' sentinel (checked in __init__ and start() to decide whether to pass -mocktime) - test/functional/test_framework/messages.py: added MSG_DSTX = 16 (from protocol.h) alongside the other inv type constants, so the test can express upstream's MSG_WITNESS_TX parent-request check Not applicable to Dash (intentionally omitted): - test/functional/p2p_orphan_handling.py: test_arrival_timing_orphan: it asserts the node delays orphan-parent requests so a spy cannot learn when a parent entered the mempool. Dash's AddObjectAnnouncement only delays MSG_TX invs (`if (inv.IsMsgTx() && !preferred && m_nodeman == nullptr)`), and orphan parents are fetched as MSG_DSTX, so they are requested with zero delay -- a deliberate Dash choice, documented in net_processing.cpp as matching pre-txrequest behavior. The privacy property being tested does not hold, so the subtest would fail rather than protect anything. - test/functional/p2p_orphan_handling.py: test_orphan_inherit_rejection's witness half (the grandchild/child wtxid assertions and 'retried with an alternate witness' announcement): txid == wtxid in Dash, so there is no alternate witness to retry with. The txid-level half (grandchild inherits the rejection, child never re-requested) is kept. - test/functional/p2p_orphan_handling.py: create_parent_and_child's getwtxid() return value: kept as child['txid'] since the helper is (as upstream) never called. - test/functional/test_framework/test_node.py: TestNode.bumpmocktime(): Dash already has BitcoinTestFramework.bump_mocktime(), which additionally advances self.mocktime and each node's scheduler via mockscheduler. A node-level bumpmocktime would silently desync the framework clock (a later self.bump_mocktime would move node time backwards) and skip the scheduler, so it would be a trap rather than a helper. The adapted test uses self.bump_mocktime(). - test/functional/test_framework/test_node.py: `self.mocktime = None` at the end of TestNode.__init__: Dash already sets self.mocktime from the constructor's mocktime argument and compares it against 0 in __init__ and start(). Landing this line resets it to None after the fact, which makes start() append a literal `-mocktime=None` on every node restart -- it would have broken unrelated tests.
54fe4e8 to
d3c82af
Compare
|
Branch rewritten at
🤖 backportsys, on behalf of the Dash backport pipeline. |
Automated Bitcoin Core v0.26 backports, batch
backport-0.26-b055-misc.25ad91b0fbd3c82afa39Provenance
Each commit passed: cherry-pick (adapted by an Opus lane only where conflicts existed), build, touched tests, a mechanical diff-of-diffs check (every upstream hunk landed; no added line without an upstream counterpart), and an independent Opus verification lane where anything was adapted. Gate rows and lane artifacts are in the backportsys DB.