GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — fix: Resolve kserve with pip --dry-run instead of installing it by larrysingleton007 · Pull Request #6733 · feast-dev/feast

Conversation

@larrysingleton007

@larrysingleton007 larrysingleton007 commented Aug 13, 2026

Copy link
Copy Markdown
Contributor

What this PR does / why we need it

test_install_kserve_with_feast installs kserve into the interpreter running the unit suite, with no isolation and no cleanup, so it mutates the environment every other test is using.

Feast pins psutil==5.9.0 and kserve 0.15.2 requires psutil<6.0.0,>=5.9.6, so pip cannot leave the installed version in place — it uninstalls psutil, then installs 5.9.8:

Attempting uninstall: psutil
  Found existing installation: psutil 5.9.0
  Uninstalling psutil-5.9.0:
    Successfully uninstalled psutil-5.9.0
Installing collected packages: … psutil …

make test-python-unit runs pytest -n 8, so eight workers share one environment. Any test importing psutil during that window fails, including every test that shells out to the CLI, since feast/metrics.py imports it at module scope. That is how an unrelated docs PR picked up a red unit-test-python (3.12, ubuntu-latest) on test_3rd_party_providers with ModuleNotFoundError: No module named 'psutil'. Because it depends on worker timing, a re-run usually passes and it reads as flake.

kserve also pulls protobuf down to 4.25.x, which leaves the environment broken for the next run: the installed grpcio-health-checking ships protobuf 6.x generated code importing google.protobuf.runtime_version. The first run passes, because collection imports precede the mid-run install; the second fails at collection.

--dry-run performs the same resolution and still exits non-zero when the versions cannot be satisfied together, which is what the test guards against, without installing anything.

This also replaces the conflict assertion, which was inverted:

conflict_occured = "dependency conflicts" in err and "ERROR" not in err

That is only true when pip reports conflicts without an error, so a run failing loudly set it to False. The exit_code == 0 assertion was already doing the real work; it now carries pip's output for diagnosis.

Which issue(s) this PR fixes

Closes #6732

Misc

Verified both directions, so the detection is unchanged rather than merely quieter:

  • clean resolution exits 0, performs the full resolve (Would install … psutil-5.9.8 …), and leaves psutil at 5.9.0 with kserve not importable afterwards
  • pip install --dry-run kserve==0.15.2 psutil==5.9.0 exits 1 with Cannot install kserve==0.15.2 and psutil==5.9.0 because these package versions have conflicting dependencies

The full unit suite now passes twice in a row — 2529 passed, 20 skipped both times, with psutil still 5.9.0 and protobuf still 6.33.6 after the first. Previously the second run produced 31 failures and 8 collection errors. The test also drops from about 13s to under 2s.

This needs a kind/ label, which I cannot add as an outside contributor.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@larrysingleton007
larrysingleton007 requested a review from a team as a code owner August 13, 2026 00:04
@codecov-commenter

codecov-commenter commented Aug 13, 2026 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown

⚠️ Please install the 'codecov app svg image' to ensure uploads and comments are reliably processed by Codecov.

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 46.80%. Comparing base (a9219d9) to head (33a8e47).
⚠️ Report is 1 commits behind head on master.
❗ Your organization needs to install the Codecov GitHub app to enable full functionality.

Additional details and impacted files

Impacted file tree graph

@@           Coverage Diff           @@
##           master    #6733   +/-   ##
=======================================
  Coverage   46.80%   46.80%           
=======================================
  Files         415      415           
  Lines       50395    50395           
  Branches     7214     7214           
=======================================
  Hits        23588    23588           
  Misses      25155    25155           
  Partials     1652     1652           
Flag Coverage Δ *Carryforward flag
go-feature-server 30.58% <ø> (ø)
python-unit 48.13% <ø> (ø) Carriedforward from a9219d9

*This pull request uses carry forward flags. Click here to find out more.


Continue to review full report in Codecov by Harness.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update a9219d9...33a8e47. Read the comment docs.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.
All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@ntkathole ntkathole added the ok-to-test label Aug 14, 2026
ntkathole
ntkathole approved these changes Aug 14, 2026
View reviewed changes
@larrysingleton007

larrysingleton007 commented Aug 14, 2026

Copy link
Copy Markdown
Contributor Author

@ntkathole thanks for the review.

Now that ok-to-test triggered the full suite, the checks have settled at 26 passing, 3 skipped, and one failure: mcp-feature-server-runtime. That one is #6706, the repo-wide mcp pin breakage, not this PR. #6713 fixes it and is still open, currently red at the Setup pixi step because it changes pyproject.toml without a regenerated pixi.lock.

Worth noting the other five integration jobs pass here, including integration-test-ray and integration-test-registration-ci, which are the ones that share that pixi setup step. This PR touches only a test file, so nothing in the lock moves. That's a useful control: it confirms the pixi failures on #6713 come from its pyproject.toml edit rather than being pre-existing.

GitHub also reports this branch as BEHIND. Happy to merge master in if you'd like it current before merging, though I've left it alone since it's conflict-free and a merge commit would re-run everything for no change.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@larrysingleton007 @ntkathole
fix: Resolve kserve with pip --dry-run instead of installing it
33a8e47
test_install_kserve_with_feast installed kserve into the interpreter
running the suite, with no isolation and no cleanup, so it mutated the
environment every other test was using.

Feast pins psutil==5.9.0 and kserve requires psutil>=5.9.6, so pip could
not leave the installed version alone: it uninstalled psutil before
reinstalling 5.9.8. The unit suite runs pytest -n 8 against one
environment, so any test importing psutil in that window failed,
including every test that shells out to the CLI, since feast.metrics
imports it at module scope. That is how an unrelated docs PR got a red
unit-test-python job on test_3rd_party_providers with ModuleNotFoundError:
No module named 'psutil'. Being timing-dependent, it read as flake.

kserve also pulled protobuf down to 4.25.x, which left the environment
broken for the next run: the installed grpcio-health-checking ships
protobuf 6.x gencode importing google.protobuf.runtime_version. The first
run passed because collection imports precede the mid-run install; the
second failed at collection.

--dry-run performs the same resolution and still exits non-zero when the
versions cannot be satisfied together, which is what the test guards
against, without installing anything. Verified both directions: a clean
resolution exits 0 and leaves psutil at 5.9.0 with kserve not importable,
and 'pip install --dry-run kserve==0.15.2 psutil==5.9.0' exits 1 with
conflicting dependencies.

Also replaces the conflict assertion, which was inverted - it was only
true when pip reported conflicts without an error, so a loud failure set
it to False. The exit code was already doing the real work; it now
carries pip's output for diagnosis.

The full unit suite now passes twice in a row: 2529 passed, 20 skipped
both times, with psutil and protobuf unchanged after the first.

Closes feast-dev#6732

Signed-off-by: Larry Singleton <[email protected]>
@ntkathole
ntkathole force-pushed the fix/kserve-test-isolation branch from ac910bc to 33a8e47 Compare August 14, 2026 04:01
@ntkathole
ntkathole merged commit 01da132 into feast-dev:master Aug 14, 2026
18 of 22 checks passed

Uh oh!

There was an error while loading. Please reload this page.

@larrysingleton007
larrysingleton007 deleted the fix/kserve-test-isolation branch August 14, 2026 14:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@ntkathole ntkathole ntkathole approved these changes

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

ok-to-test

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Unit test installs kserve into the live interpreter, causing nondeterministic failures in unrelated tests

Uh oh!

There was an error while loading. Please reload this page.

3 participants

@larrysingleton007 @codecov-commenter @ntkathole
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.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.