Expected Behavior
make test-python-unit (pytest with -n / xdist) collects sdk/python/tests/unit/infra/feature_servers/test_mcp_server.py reliably.
Current Behavior
Intermittently, parallel unit-test collection fails on an xdist worker while importing the MCP server package, which aborts the whole session:
ERROR collecting tests/unit/infra/feature_servers/test_mcp_server.py
sdk/python/tests/unit/infra/feature_servers/test_mcp_server.py:8: in <module>
from feast.infra.mcp_servers.mcp_config import McpFeatureServerConfig
sdk/python/feast/infra/mcp_servers/__init__.py:4: in <module>
from .mcp_server import add_mcp_support_to_app
<frozen importlib._bootstrap>:946: in _load_unlocked
E KeyError: 'feast.infra.mcp_servers.mcp_server'
The tests pass in isolation, so this surfaces as a flaky unit-test-python job failure (seen recently on unit-test-python (3.12, ubuntu-latest)).
Root cause: feast/infra/mcp_servers/mcp_server.py imports feast.feature_store.FeatureStore at module load but uses it only for a type annotation on add_mcp_support_to_app. Because the package __init__.py eagerly imports mcp_server, importing feast.infra.mcp_servers pulls in the whole feature_store import graph. Under parallel collection that heavy import races with an in-progress feature_store import; the partially-initialized mcp_server module is cleaned up, and the outer import's sys.modules.pop("feast.infra.mcp_servers.mcp_server") raises KeyError.
Steps to reproduce
Ordering-dependent, so not reliably reproducible in isolation; it surfaces under the full parallel unit-test run (make test-python-unit, pytest -n). Isolated collection (pytest --collect-only .../test_mcp_server.py) always succeeds.
Specifications
- Version: master (module unchanged through 0.65.x)
- Platform: CI
unit-test-python (3.12, ubuntu-latest)
- Subsystem:
infra/mcp_servers, unit-test collection
Possible Solution
Move the FeatureStore import in mcp_server.py under TYPE_CHECKING (it is only a type annotation), so importing mcp_server no longer drags in the feature_store graph. I have a fix ready and will open a PR referencing this issue.
Expected Behavior
make test-python-unit(pytest with-n/ xdist) collectssdk/python/tests/unit/infra/feature_servers/test_mcp_server.pyreliably.Current Behavior
Intermittently, parallel unit-test collection fails on an xdist worker while importing the MCP server package, which aborts the whole session:
The tests pass in isolation, so this surfaces as a flaky
unit-test-pythonjob failure (seen recently onunit-test-python (3.12, ubuntu-latest)).Root cause:
feast/infra/mcp_servers/mcp_server.pyimportsfeast.feature_store.FeatureStoreat module load but uses it only for a type annotation onadd_mcp_support_to_app. Because the package__init__.pyeagerly importsmcp_server, importingfeast.infra.mcp_serverspulls in the wholefeature_storeimport graph. Under parallel collection that heavy import races with an in-progressfeature_storeimport; the partially-initializedmcp_servermodule is cleaned up, and the outer import'ssys.modules.pop("feast.infra.mcp_servers.mcp_server")raisesKeyError.Steps to reproduce
Ordering-dependent, so not reliably reproducible in isolation; it surfaces under the full parallel unit-test run (
make test-python-unit, pytest-n). Isolated collection (pytest --collect-only .../test_mcp_server.py) always succeeds.Specifications
unit-test-python (3.12, ubuntu-latest)infra/mcp_servers, unit-test collectionPossible Solution
Move the
FeatureStoreimport inmcp_server.pyunderTYPE_CHECKING(it is only a type annotation), so importingmcp_serverno longer drags in thefeature_storegraph. I have a fix ready and will open a PR referencing this issue.