Update stellar-quorum-analyzer to master and handle NoQuorum status#5342
Merged
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
This PR updates Stellar Core’s Quorum Intersection Checker V2 integration to track and surface a new analyzer result: the “no quorum exists at all” FBAS condition. It bumps the stellar-quorum-analyzer dependency to master, propagates the new NO_QUORUM status through Rust↔C++ bridging, CLI exit codes, JSON results, and metrics, and adjusts/extends the test suite accordingly. It also removes the obsolete Rust global allocator memory-limit hook and refreshes associated documentation/comments to match the analyzer’s new soft per-solver memory limiting behavior.
Changes:
- Bump
stellar-quorum-analyzergit revision and update status mapping to includeQuorumCheckerStatus::NO_QUORUM(103). - Remove the unused
set_rust_global_memory_limit_to_unlimited()bridge/API and its call site. - Extend metrics + JSON parsing/serialization and add/adjust tests to validate NO_QUORUM behavior and reporting.
Reviewed changes
Copilot reviewed 8 out of 9 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| src/rust/src/quorum_checker.rs | Maps analyzer SolveStatus::NoQuorum into the new QuorumCheckerStatus::NO_QUORUM; updates resource-limit commentary; removes global memory-limit function. |
| src/rust/src/bridge.rs | Extends the CXX bridge enum with NO_QUORUM = 103 and updates embedded documentation about solver memory limiting. |
| src/rust/Cargo.toml | Bumps stellar-quorum-analyzer dependency revision to b422b366…. |
| Cargo.lock | Updates the locked git source hash for stellar-quorum-analyzer. |
| src/main/main.cpp | Removes the startup call to the now-removed Rust global memory-limit function. |
| src/main/CommandLine.cpp | Adds CLI handling/logging for NO_QUORUM and returns its status as the process exit code. |
| src/herder/RustQuorumCheckerAdaptor.h | Documents NO_QUORUM semantics and updates memory-limit documentation to match soft solver enforcement. |
| src/herder/RustQuorumCheckerAdaptor.cpp | Accepts NO_QUORUM from JSON/status parsing, tracks it in metrics, and treats it as a “complete run” without advancing mLastGoodLedger. |
| src/herder/test/QuorumIntersectionTests.cpp | Adjusts null-qset expectations to NO_QUORUM, adds a helper returning raw V2 status, and adds a targeted NO_QUORUM test plus metric assertion. |
2a41d58 to
4666dc0
Compare
graydon
previously approved these changes
Jul 10, 2026
dmkozh
previously approved these changes
Jul 10, 2026
Bump the stellar-quorum-analyzer dependency from f67e9e2f to b422b366
(current master) and adapt stellar-core to its two behavioral changes.
The analyzer now reports a distinct NoQuorum status when the FBAS contains
no quorum at all (a degenerate / potential-halt configuration) instead of
conflating it with UNSAT ("enjoys quorum intersection"). Surface this as a
new QuorumCheckerStatus::NO_QUORUM (103) and propagate it through the
subprocess exit code, result.json, the adaptor state and metrics (new
result-no-quorum counter), and the CLI. A NoQuorum result is treated as a
complete run but never advances mLastGoodLedger, so the network correctly
does not report as enjoying quorum intersection.
The analyzer also replaced its global-allocator hard memory limit (which
aborted the process on exceed) with a soft, estimate-based per-solver
limit. Remove the now-dead set_rust_global_memory_limit_to_unlimited() and
update the stale comments describing the abort-based design.
Update the null-qset quorum intersection tests, which previously asserted
these halted networks vacuously enjoy quorum intersection, to expect
NO_QUORUM, and add a dedicated no-quorum test case.
4666dc0 to
7e04e37
Compare
dmkozh
approved these changes
Jul 10, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
What
Bump
stellar-quorum-analyzerfromf67e9e2ftob422b366(master) and adapt the Quorum Intersection Checker V2 integration:QuorumCheckerStatus::NO_QUORUM(103), propagated through the subprocess exit code,result.json, adaptor state, a newresult-no-quorummetric, and the CLI. It counts as a complete run but never advancesmLastGoodLedger, so the network does not report as enjoying quorum intersection.set_rust_global_memory_limit_to_unlimited()and its stale abort-based-memory comments.NO_QUORUM; add a no-quorum test.Why
The new analyzer distinguishes an FBAS with no quorum at all (a degenerate / potential-halt state) from
UNSAT("enjoys quorum intersection"), which the old version wrongly conflated. It also replaced the global-allocator hard memory limit (process abort on exceed) with a soft, estimate-based per-solver limit, makingset_rust_global_memory_limit_to_unlimited()a no-op.Tested: full suite passes (5,678,585 assertions / 698 cases), incl. the
[quorumintersection]suite.Checklist
clang-format(v20.1.8, the repo-pinned version; viagit-clang-formaton the diff)