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
@ramakrishnap-nv
ramakrishnap-nv deleted the pslp-infeasible-message-fix branch September 9, 2026 14:25
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