Skip to content

Update stellar-quorum-analyzer to master and handle NoQuorum status#5342

Merged
dmkozh merged 1 commit into
stellar:masterfrom
jayz22:update-quorum-analyzer
Jul 11, 2026
Merged

Update stellar-quorum-analyzer to master and handle NoQuorum status#5342
dmkozh merged 1 commit into
stellar:masterfrom
jayz22:update-quorum-analyzer

Conversation

@jayz22

@jayz22 jayz22 commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

Description

What

Bump stellar-quorum-analyzer from f67e9e2f to b422b366 (master) and adapt the Quorum Intersection Checker V2 integration:

  • Add QuorumCheckerStatus::NO_QUORUM (103), propagated through the subprocess exit code, result.json, adaptor state, a new result-no-quorum metric, and the CLI. It counts as a complete run but never advances mLastGoodLedger, so the network does not report as enjoying quorum intersection.
  • Remove the now-dead set_rust_global_memory_limit_to_unlimited() and its stale abort-based-memory comments.
  • Update the two null-qset tests to expect 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, making set_rust_global_memory_limit_to_unlimited() a no-op.

Tested: full suite passes (5,678,585 assertions / 698 cases), incl. the [quorumintersection] suite.

Checklist

  • Reviewed the contributing document
  • Rebased on top of master (no merge commits)
  • Ran clang-format (v20.1.8, the repo-pinned version; via git-clang-format on the diff)
  • Compiles
  • Ran all tests
  • If change impacts performance, include supporting evidence — n/a

Copilot AI review requested due to automatic review settings July 10, 2026 22:58
@jayz22 jayz22 requested review from dmkozh and graydon July 10, 2026 22:59

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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-analyzer git revision and update status mapping to include QuorumCheckerStatus::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.

@jayz22 jayz22 force-pushed the update-quorum-analyzer branch from 2a41d58 to 4666dc0 Compare July 10, 2026 23:07
graydon
graydon previously approved these changes Jul 10, 2026
dmkozh
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.
@jayz22 jayz22 dismissed stale reviews from dmkozh and graydon via 7e04e37 July 10, 2026 23:49
@jayz22 jayz22 force-pushed the update-quorum-analyzer branch from 4666dc0 to 7e04e37 Compare July 10, 2026 23:49
@dmkozh dmkozh enabled auto-merge July 10, 2026 23:55
@dmkozh dmkozh added this pull request to the merge queue Jul 11, 2026
Merged via the queue into stellar:master with commit c16a6d1 Jul 11, 2026
54 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants