test: backport LLMQ recsig relay symmetry#7324
Conversation
This reverts a57a811 from PR dashpay#6967. `relayMembers` and `connections` in EnsureQuorumConnections are not interchangeable. * `connections`: who this node should connect TO. For each pair (A, B) only the deterministic-outbound side is listed, so the pair results in one TCP connection. * `relayMembers`: who this node should ask to push recovered sigs. For every already-connected MN in the set we send QSENDRECSIGS=true, and the peer then flips m_wants_recsigs=true on its side. For the handshake to happen in both directions, the set must list every other quorum member -- not just the outbound half. After a57a811, only the outbound half is listed, so on the inbound half of each pair m_wants_recsigs stays false. RelayRecoveredSig only pushes QSIGREC to peers with m_wants_recsigs=true, so half of all proactive recovered-sig pushes are silently dropped. This only triggers with spork21 on (IsAllMembersConnectedEnabled returns true). In this case both the path that uses the half-mesh outbound subset and the path that relies on proactive QSIGREC. This fixes the functional test `feature_llmq_signing.py --spork21`, which times out in wait_for_sigs ~60% of the time while the non-spork21 variant passes on the same CI job. (cherry picked from commit 0e33aa2)
|
✅ Review complete (commit 15fd508) |
✅ No Merge Conflicts DetectedThis PR currently has no conflicts with other open PRs. |
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
WalkthroughThis PR refactors LLMQ quorum connection management to separate outbound connection topology from relay member topology. The core change in Estimated code review effort🎯 2 (Simple) | ⏱️ ~12 minutes 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
Run ID: 9958cbf1-ef3c-43bc-bd61-ca234947dacc
📒 Files selected for processing (2)
src/llmq/utils.cpptest/functional/feature_llmq_signing.py
If relayMembers gets conflated with the outbound-only connections set, one direction of each MN-MN pair never sends QSENDRECSIGS, the inbound side keeps m_wants_recsigs=false, and half of all proactive QSIGREC pushes are silently dropped which could be visible only as slow/flaky signing. (cherry picked from commit c1cdb75)
95b5b5d to
15fd508
Compare
|
/rerun |
Backport LLMQ recovered-sig relay fix
Summary
v23.1.x.SPORK_21_QUORUM_ALL_CONNECTEDis active.QSENDRECSIGSnegotiation infeature_llmq_signing.py --spork21.Fixes #7323.
Context
feature_llmq_signing.py --spork21is still flaky on thev23.1.xCI lanebecause the #7289 fix is present on
developbut not on therelease branch.
The latest hit was in #7322, whose branch only changes
.github/workflows/predict-conflicts.yml, so the LLMQ failure is unrelated tothat PR.
Validation
python3 -m py_compile test/functional/feature_llmq_signing.pygit diff --check upstream/v23.1.x...test/backport-7289-v23-llmq-signingCode review gate:
code-review dashpay/dash \ upstream/v23.1.x \ test/backport-7289-v23-llmq-signing \ "Backport PR #7289 to v23.1.x to fix the #7323 spork21 flake"Result: Recommendation: ship
Functional test was not run locally; this workspace does not have a configured
Dash Core build directory for the
v23.1.xworktree.