diff --git a/lib/iris/src/iris/cluster/client/job_info.py b/lib/iris/src/iris/cluster/client/job_info.py index 38f33854f4..5d10b5d385 100644 --- a/lib/iris/src/iris/cluster/client/job_info.py +++ b/lib/iris/src/iris/cluster/client/job_info.py @@ -104,7 +104,8 @@ def get_job_info() -> JobInfo | None: constraints: list[Constraint] = [] if constraints_json: for item in json.loads(constraints_json): - constraints.append(Constraint.from_proto(json_format.ParseDict(item, cluster_pb2.Constraint()))) + proto = json_format.ParseDict(item, cluster_pb2.Constraint(), ignore_unknown_fields=True) + constraints.append(Constraint.from_proto(proto)) info = JobInfo( task_id=task_id, diff --git a/lib/iris/tests/cluster/client/test_job_info.py b/lib/iris/tests/cluster/client/test_job_info.py index 5d09f1f67e..4c2da54a58 100644 --- a/lib/iris/tests/cluster/client/test_job_info.py +++ b/lib/iris/tests/cluster/client/test_job_info.py @@ -1,6 +1,8 @@ # Copyright The Marin Authors # SPDX-License-Identifier: Apache-2.0 +import json + from iris.cluster.client.job_info import JobInfo, get_job_info, resolve_job_user, set_job_info from iris.cluster.types import JobName @@ -57,3 +59,26 @@ def test_worker_region_absent_when_env_not_set(monkeypatch): assert info is not None assert info.worker_region is None set_job_info(None) + + +def test_constraints_with_unknown_fields_in_json(monkeypatch): + """get_job_info tolerates unknown fields in IRIS_JOB_CONSTRAINTS JSON.""" + set_job_info(None) + monkeypatch.setenv("IRIS_TASK_ID", "/test-user/my-job/0:1") + constraints_json = json.dumps( + [ + { + "key": "region", + "op": "CONSTRAINT_OP_EQ", + "value": {"string_value": "us-central2"}, + "unknown_future_field": "some_value", + } + ] + ) + monkeypatch.setenv("IRIS_JOB_CONSTRAINTS", constraints_json) + info = get_job_info() + assert info is not None + assert len(info.constraints) == 1 + assert info.constraints[0].key == "region" + assert info.constraints[0].value == "us-central2" + set_job_info(None)