Skip to content

feature_server.py crashes with TypeError: MessageToDict() got an unexpected keyword argument 'float_precision' on protobuf >= 7.34.0 #6435

@ntkathole

Description

@ntkathole

Summary

The feature server crashes on every /get-online-features and /retrieve-online-documents request
when running with protobuf >= 7.34.0. The float_precision parameter was deprecated in protobuf
6.32.x and removed in 7.34.0. Since Feast's pyproject.toml allows protobuf >= 4.24.0,
fresh installs (including the official quay.io/feastdev/feature-server:latest image) pull
protobuf 7.34.1, which does not accept this argument.

Error

TypeError: MessageToDict() got an unexpected keyword argument 'float_precision'

Full traceback from Gunicorn worker:

File "/opt/app-root/lib64/python3.12/site-packages/feast/feature_server.py", line 397 response_dict = await run_in_threadpool( MessageToDict, response.proto, preserving_proto_field_name=True, float_precision=18, # <-- removed in protobuf 7.34.0 )

The worker process crashes, Gunicorn master respawns it, and the next request crashes again —
making the online feature server completely non-functional.

Affected Code

sdk/python/feast/feature_server.py — two call sites:

  1. get_online_features endpoint (line ~398–401)
  2. retrieve_online_documents endpoint (line ~440–443)

Both pass float_precision=18 to google.protobuf.json_format.MessageToDict.

Environment

  • Feast version: 0.63.0
  • Image: quay.io/feastdev/feature-server:latest (also quay.io/feastdev-ci/feature-server:develop)
  • Python: 3.12.12
  • protobuf: 7.34.1 (installed by pip as allowed by protobuf>=4.24.0 in pyproject.toml)

Reproducer

# 1. Install feast with latest protobuf
pip install feast

# 2. Verify protobuf version
python -c "import google.protobuf; print(google.protobuf.__version__)"
# Output: 7.34.1

# 3. Reproduce the crash directly
python -c "
from google.protobuf.json_format import MessageToDict
from feast.protos.feast.serving.ServingService_pb2 import GetOnlineFeaturesResponse
resp = GetOnlineFeaturesResponse()
MessageToDict(resp, preserving_proto_field_name=True, float_precision=18)
"

# Output:
# TypeError: MessageToDict() got an unexpected keyword argument 'float_precision'

Or with a running feature server, Any POST to the online server will crash the worker:

curl -X POST https://<feast-server>/get-online-features \
  -H "Content-Type: application/json" \
  -d '{"features": ["my_fv:my_feature"], "entities": {"entity_id": [1]}}'
# Returns: 500 Internal Server Error

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions