Skip to content
This repository was archived by the owner on Feb 23, 2026. It is now read-only.
This repository was archived by the owner on Feb 23, 2026. It is now read-only.

Requiring trailing_metadata is a breaking change #297

Description

@tseaver

PR #286 added support for showing error status details -- unfortunately, it also breaks Bigtable's unit tests:

___Test_retry_read_rows_exception.test_w_deadline_exceeded_wrapped_in_grpc____self=<tests.unit.test_row_data.Test_retry_read_rows_exceptiontestMethod=test_w_deadline_exceeded_wrapped_in_grpc>deftest_w_deadline_exceeded_wrapped_in_grpc(self):
fromgoogle.api_core.exceptionsimportDeadlineExceededwrapped=DeadlineExceeded("testing")
exception=self._make_grpc_call_error(wrapped)
>self.assertTrue(self._call_fut(exception))
tests/unit/test_row_data.py:324:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/unit/test_row_data.py:268: in_call_futreturn_retry_read_rows_exception(exc)
google/cloud/bigtable/row_data.py:333: in_retry_read_rows_exceptionexc=exceptions.from_grpc_error(exc)
.nox/unit-3-9/lib/python3.9/site-packages/google/api_core/exceptions.py:537: infrom_grpc_errordetails=_parse_grpc_error_details(rpc_exc),
.nox/unit-3-9/lib/python3.9/site-packages/google/api_core/exceptions.py:490: in_parse_grpc_error_detailsstatus=rpc_status.from_call(rpc_exc)
.nox/unit-3-9/lib/python3.9/site-packages/grpc_status/rpc_status.py:48: infrom_callifcall.trailing_metadata() isNone:
__ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self=TestingException(DeadlineExceeded('testing'))
@abc.abstractmethoddeftrailing_metadata(self):
"""Accesses the trailing metadata sent by the server. This method blocks until the value is available. Returns: The trailing :term:`metadata`. """>raiseNotImplementedError()
ENotImplementedError
.nox/unit-3-9/lib/python3.9/site-packages/grpc/__init__.py:382: NotImplementedError__________Test_retry_read_rows_exception.test_w_miss_wrapped_in_grpc__________self=<tests.unit.test_row_data.Test_retry_read_rows_exceptiontestMethod=test_w_miss_wrapped_in_grpc>deftest_w_miss_wrapped_in_grpc(self):
fromgoogle.api_core.exceptionsimportConflictwrapped=Conflict("testing")
exception=self._make_grpc_call_error(wrapped)
>self.assertFalse(self._call_fut(exception))
tests/unit/test_row_data.py:310:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/unit/test_row_data.py:268: in_call_futreturn_retry_read_rows_exception(exc)
google/cloud/bigtable/row_data.py:333: in_retry_read_rows_exceptionexc=exceptions.from_grpc_error(exc)
.nox/unit-3-9/lib/python3.9/site-packages/google/api_core/exceptions.py:537: infrom_grpc_errordetails=_parse_grpc_error_details(rpc_exc),
.nox/unit-3-9/lib/python3.9/site-packages/google/api_core/exceptions.py:490: in_parse_grpc_error_detailsstatus=rpc_status.from_call(rpc_exc)
.nox/unit-3-9/lib/python3.9/site-packages/grpc_status/rpc_status.py:48: infrom_callifcall.trailing_metadata() isNone:
__ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self=TestingException(Conflict('testing'))
@abc.abstractmethoddeftrailing_metadata(self):
"""Accesses the trailing metadata sent by the server. This method blocks until the value is available. Returns: The trailing :term:`metadata`. """>raiseNotImplementedError()
ENotImplementedError
.nox/unit-3-9/lib/python3.9/site-packages/grpc/__init__.py:382: NotImplementedError__Test_retry_read_rows_exception.test_w_service_unavailable_wrapped_in_grpc___self=<tests.unit.test_row_data.Test_retry_read_rows_exceptiontestMethod=test_w_service_unavailable_wrapped_in_grpc>deftest_w_service_unavailable_wrapped_in_grpc(self):
fromgoogle.api_core.exceptionsimportServiceUnavailablewrapped=ServiceUnavailable("testing")
exception=self._make_grpc_call_error(wrapped)
>self.assertTrue(self._call_fut(exception))
tests/unit/test_row_data.py:317:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/unit/test_row_data.py:268: in_call_futreturn_retry_read_rows_exception(exc)
google/cloud/bigtable/row_data.py:333: in_retry_read_rows_exceptionexc=exceptions.from_grpc_error(exc)
.nox/unit-3-9/lib/python3.9/site-packages/google/api_core/exceptions.py:537: infrom_grpc_errordetails=_parse_grpc_error_details(rpc_exc),
.nox/unit-3-9/lib/python3.9/site-packages/google/api_core/exceptions.py:490: in_parse_grpc_error_detailsstatus=rpc_status.from_call(rpc_exc)
.nox/unit-3-9/lib/python3.9/site-packages/grpc_status/rpc_status.py:48: infrom_callifcall.trailing_metadata() isNone:
__ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self=TestingException(ServiceUnavailable('testing'))
@abc.abstractmethoddeftrailing_metadata(self):
"""Accesses the trailing metadata sent by the server. This method blocks until the value is available. Returns: The trailing :term:`metadata`. """>raiseNotImplementedError()
ENotImplementedError
.nox/unit-3-9/lib/python3.9/site-packages/grpc/__init__.py:382: NotImplementedError

Metadata

Metadata

Assignees

Labels

priority: p1Important issue which blocks shipping the next release. Will be fixed prior to next release.type: bugError or flaw in code with unintended results or allowing sub-optimal usage patterns.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions