Skip to content

Fix vendored PSLP writing a stray infeasible-message printf to native stdout - #1836

Merged
rapids-bot[bot] merged 1 commit into
mainfrom
pslp-infeasible-message-fix
Sep 1, 2026
Merged

Fix vendored PSLP writing a stray infeasible-message printf to native stdout#1836
rapids-bot[bot] merged 1 commit into
mainfrom
pslp-infeasible-message-fix

Conversation

@ramakrishnap-nv

Copy link
Copy Markdown
Collaborator

Summary

  • run_presolver() in vendored PSLP (dance858/PSLP, pinned at v0.0.11) prints "PSLP declares problem as infeasible[.| or unbounded.]" unconditionally, unlike every other console message in that function, which are all gated behind stgs->verbose (print_start_message, print_end_message, etc).
  • cuOpt already sets verbose = false when calling PSLP (third_party_presolve.cpp) specifically to keep it silent -- this one message was just missed upstream, so it writes straight to the process's native stdout regardless.
  • Found while investigating the Java bindings' "Corrupted channel" Surefire crash on Explore self-contained Java classifier JARs with a statically linked libcuopt #1818: a raw native write there bypasses System.out and corrupts Maven Surefire's forked-JVM protocol, which also multiplexes over stdout. Confirmed directly by reading the exact corrupted text out of a captured Surefire .dumpstream artifact.
  • The infeasible/unbounded status itself is unaffected by this fix -- it already flows back to the caller through run_presolver()'s typed return value, not by parsing this printed text.

Fix

Filed and fixed upstream: dance858/PSLP#55. Until a release containing it ships, pin cpp/CMakeLists.txt's GIT_TAG past v0.0.11 directly at the merge commit, rather than patching the vendored source locally.

Test plan

  • Confirmed via a captured .dumpstream artifact that this exact message was the corrupted text.
  • ProblemIntegrationTest's infeasible-solve test case (Java bindings) exercises this code path directly.
  • CI passes clean.

Split out of #1825, which originally carried this alongside an unrelated fix (routing cuOpt's own console logging through System.out).

@coderabbitai

coderabbitai Bot commented Sep 1, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 524432ca-6913-47a2-b5a5-b5f2ddaff60c

📥 Commits

Reviewing files that changed from the base of the PR and between 3f7aa35 and e2d602f.

📒 Files selected for processing (1)
  • cpp/CMakeLists.txt

Included review availability: Your plan provides up to 12 included reviews per hour; 10 remain after this review.


📝 Walkthrough

Walkthrough

Changes

PSLP dependency update

Layer / File(s) Summary
Update PSLP reference
cpp/CMakeLists.txt
PSLP changes from tag v0.0.11 to commit 12d37dd9ab5ee848b3ec5da17f4cf8e805d58cd6. Comments document the included stdout-suppression fix.

Estimated code review effort: 1 (Trivial) | ~5 minutes

Merge Risk: ⚪ Minimal · up to e2d60

This change stops an unintended PSLP status message from being written to native stdout, preventing interference with Java test-process communication; no actionable merge-blocking risk remains beyond normal checks and review.

Suggested reviewers: tmckayus, akifcorduk, hlinsen

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly describes the main change: preventing the vendored PSLP dependency from writing an unwanted infeasibility message to native stdout.
Description check ✅ Passed The description directly explains the stdout issue, its impact on Java bindings, the upstream fix, the dependency pin change, and the test plan.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0 files. (1 skipped: 1 unsupported.)

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch pslp-infeasible-message-fix

Comment @coderabbitai help to get the list of available commands.

run_presolver() prints "PSLP declares problem as infeasible[.| or
unbounded.]" unconditionally, unlike every other console message in
that function, which are all gated on stgs->verbose. cuOpt sets
verbose = false when calling PSLP (third_party_presolve.cpp)
specifically to keep it silent, so this writes unexpectedly straight
to the process's native stdout.

Found and confirmed via a captured Surefire dumpstream while
investigating the Java bindings' "Corrupted channel" crash (see
#1818): a raw native write there bypasses System.out and
corrupts Maven Surefire's forked-JVM protocol, which also uses stdout
as its own channel. The infeasible/unbounded status itself is
unaffected -- it already flows back to the caller through
run_presolver()'s typed return value, not by parsing this printed
text.

Filed and fixed upstream: dance858/PSLP#55.
Pin past v0.0.11 to the merge commit until a release containing it is
available.
@ramakrishnap-nv
ramakrishnap-nv force-pushed the pslp-infeasible-message-fix branch from 3f7aa35 to e2d602f Compare September 1, 2026 19:14
@ramakrishnap-nv ramakrishnap-nv self-assigned this Sep 1, 2026
@ramakrishnap-nv ramakrishnap-nv added non-breaking Introduces a non-breaking change improvement Improves an existing functionality labels Sep 1, 2026
@ramakrishnap-nv ramakrishnap-nv added this to the 26.10 milestone Sep 1, 2026
@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown

CI Test Summary

✅ All 31 test job(s) passed.

@ramakrishnap-nv

Copy link
Copy Markdown
Collaborator Author

/merge

@rapids-bot
rapids-bot Bot merged commit 2b05618 into main Sep 1, 2026
141 of 143 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

improvement Improves an existing functionality non-breaking Introduces a non-breaking change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants