Skip to content

feat(bigtable): Rerouted DirectRow.commit to use mutate_row - #18191

Merged
daniel-sanche merged 4 commits into
mainfrom
shim/07-direct-row-commit
Sep 2, 2026
Merged

feat(bigtable): Rerouted DirectRow.commit to use mutate_row#18191
daniel-sanche merged 4 commits into
mainfrom
shim/07-direct-row-commit

Conversation

@daniel-sanche

Copy link
Copy Markdown
Contributor

Migrating over @gkevinzheng PR from bigtable monorepo googleapis/python-bigtable#1276

Original description:

Changes Made:

  • Use MutateRow instead of MutateRows for DirectRow.commit instead of Table.MutateRows
  • Added system test for DirectRow.commit because of the decoupling of DirectRow.commit and Table.MutateRows
  • Adjusted input error system test because of slight changes in error behavior
  • Adjusted unit tests for DirectRow.commit

Note to reviewers: This PR has already been reviewed and merged to a staging branch, with the intention of doing a single merge to main. We are now planning to slowly rollout these changes back to the main branch. Minimal re-review should be necessary

@daniel-sanche
daniel-sanche requested a review from a team as a code owner August 21, 2026 19:38
@daniel-sanche daniel-sanche changed the title Shim/07 direct row commit feat(bigtable): Rerouted DirectRow.commit to data client Aug 21, 2026
@daniel-sanche daniel-sanche changed the title feat(bigtable): Rerouted DirectRow.commit to data client feat(bigtable): Rerouted DirectRow.commit to use mutate_row Aug 21, 2026

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request refactors the commit method in the Row class to use the direct mutate_row API call instead of mutate_rows. It updates error handling to catch GoogleAPICallError and map it to a Status object, while raising a ValueError if no mutations are present. System and unit tests are updated and added to verify these changes. A review comment points out that GoogleAPICallError does not have a details attribute, which would cause an AttributeError at runtime, and suggests using getattr as a safe fallback.

Comment thread packages/google-cloud-bigtable/google/cloud/bigtable/row.py
@daniel-sanche
daniel-sanche marked this pull request as draft August 21, 2026 20:44
@daniel-sanche
daniel-sanche force-pushed the shim/07-direct-row-commit branch from 5374832 to fd63ef0 Compare September 2, 2026 18:42
@daniel-sanche
daniel-sanche marked this pull request as ready for review September 2, 2026 18:48
try:
self._table._table_impl.mutate_row(self.row_key, self._get_mutations())
return status_pb2.Status(code=code_pb2.OK)
except GoogleAPICallError as e:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

could it be any other type of error? should we have another block to capture all other errors?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think so. Other exceptions would just be raised here, which is what we declare in the docstring.

If you prefer to return more errors instead of raising, we can make a change though

Base automatically changed from shim/06-conditional-mutations to main September 2, 2026 19:58
gkevinzheng and others added 3 commits September 2, 2026 12:58
**Changes Made:**

- Use MutateRow instead of MutateRows for DirectRow.commit instead of
Table.MutateRows
- Added system test for DirectRow.commit because of the decoupling of
DirectRow.commit and Table.MutateRows
- Adjusted input error system test because of slight changes in error
behavior
- Adjusted unit tests for DirectRow.commit
@daniel-sanche
daniel-sanche force-pushed the shim/07-direct-row-commit branch from fd63ef0 to 7595243 Compare September 2, 2026 19:58
@daniel-sanche
daniel-sanche merged commit 7126a54 into main Sep 2, 2026
49 checks passed
@daniel-sanche
daniel-sanche deleted the shim/07-direct-row-commit branch September 2, 2026 21:58
@release-please release-please Bot mentioned this pull request Sep 2, 2026
noahdietz pushed a commit that referenced this pull request Sep 3, 2026
🤖 I have created a release *beep* *boop*
---


<details><summary>django-google-spanner: 5.1.0</summary>

##
[5.1.0](django-google-spanner-v5.0.1...django-google-spanner-v5.1.0)
(2026-09-03)


### Features

* **django-google-spanner:** support Django 6.0
([#18128](#18128))
([207d947](207d947))
</details>

<details><summary>google-ads-admanager: 0.10.3</summary>

##
[0.10.3](google-ads-admanager-v0.10.2...google-ads-admanager-v0.10.3)
(2026-09-03)


### Features

* update googleapis and regenerate
([#18229](#18229))
([d4f8a57](d4f8a57))
</details>

<details><summary>google-api-core: 2.36.0</summary>

##
[2.36.0](google-api-core-v2.35.0...google-api-core-v2.36.0)
(2026-09-03)


### Features

* **api-core:** add ClientInterceptor and apply_interceptors helper (A)
([#18236](#18236))
([b6db5a9](b6db5a9))
* **api-core:** add tracer_provider to ClientOptions for OTel support
([#18139](#18139))
([9ffebc2](9ffebc2))


### Bug Fixes

* **api-core:** handle list-shaped REST error payloads
([#18232](#18232))
([02d1fd8](02d1fd8))
* **api-core:** move http encoding into transcode method
([#18218](#18218))
([082a99a](082a99a))
</details>

<details><summary>google-cloud-batch: 0.22.3</summary>

##
[0.22.3](google-cloud-batch-v0.22.2...google-cloud-batch-v0.22.3)
(2026-09-03)


### Features

* update API sources and regenerate
([#18267](#18267))
([813a5c1](813a5c1))
</details>

<details><summary>google-cloud-biglake-hive: 0.3.3</summary>

##
[0.3.3](google-cloud-biglake-hive-v0.3.2...google-cloud-biglake-hive-v0.3.3)
(2026-09-03)


### Features

* **google/cloud/biglake/hive/v1:** onboard a new library
([#18172](#18172))
([97668d8](97668d8))
</details>

<details><summary>google-cloud-bigquery: 3.45.0</summary>

##
[3.45.0](google-cloud-bigquery-v3.44.0...google-cloud-bigquery-v3.45.0)
(2026-09-03)


### Features

* add user-agent delegation telemetry for pandas-gbq
([#18184](#18184))
([85ddfe5](85ddfe5))
</details>

<details><summary>google-cloud-bigquery-migration: 0.15.1</summary>

##
[0.15.1](google-cloud-bigquery-migration-v0.15.0...google-cloud-bigquery-migration-v0.15.1)
(2026-09-03)


### Features

* update API sources and regenerate
([#18267](#18267))
([813a5c1](813a5c1))
</details>

<details><summary>google-cloud-bigquery-reservation: 1.27.0</summary>

##
[1.27.0](google-cloud-bigquery-reservation-v1.26.0...google-cloud-bigquery-reservation-v1.27.0)
(2026-09-03)


### Features

* update googleapis and regenerate
([#18229](#18229))
([d4f8a57](d4f8a57))
</details>

<details><summary>google-cloud-bigtable: 2.44.0</summary>

##
[2.44.0](google-cloud-bigtable-v2.43.0...google-cloud-bigtable-v2.44.0)
(2026-09-03)


### Features

* **bigtable:** Rerouted CheckAndMutateRows and ReadModifyWriteRows to
data client
([#18190](#18190))
([990f86e](990f86e))
* **bigtable:** Rerouted DirectRow.commit to use mutate_row
([#18191](#18191))
([7126a54](7126a54))
* update API sources and regenerate
([#18267](#18267))
([813a5c1](813a5c1))
</details>

<details><summary>google-cloud-compute: 1.52.0</summary>

##
[1.52.0](google-cloud-compute-v1.51.0...google-cloud-compute-v1.52.0)
(2026-09-03)


### Features

* update googleapis and regenerate
([#18229](#18229))
([d4f8a57](d4f8a57))
</details>

<details><summary>google-cloud-compute-v1beta: 0.12.3</summary>

##
[0.12.3](google-cloud-compute-v1beta-v0.12.2...google-cloud-compute-v1beta-v0.12.3)
(2026-09-03)


### Features

* update googleapis and regenerate
([#18229](#18229))
([d4f8a57](d4f8a57))
</details>

<details><summary>google-cloud-confidentialcomputing: 0.11.1</summary>

##
[0.11.1](google-cloud-confidentialcomputing-v0.11.0...google-cloud-confidentialcomputing-v0.11.1)
(2026-09-03)


### Features

* update API sources and regenerate
([#18267](#18267))
([813a5c1](813a5c1))
</details>

<details><summary>google-cloud-config: 0.7.1</summary>

##
[0.7.1](google-cloud-config-v0.7.0...google-cloud-config-v0.7.1)
(2026-09-03)


### Features

* update googleapis and regenerate
([#18229](#18229))
([d4f8a57](d4f8a57))
</details>

<details><summary>google-cloud-container: 2.66.0</summary>

##
[2.66.0](google-cloud-container-v2.65.0...google-cloud-container-v2.66.0)
(2026-09-03)


### Features

* update googleapis and regenerate
([#18229](#18229))
([d4f8a57](d4f8a57))
</details>

<details><summary>google-cloud-discoveryengine: 0.20.3</summary>

##
[0.20.3](google-cloud-discoveryengine-v0.20.2...google-cloud-discoveryengine-v0.20.3)
(2026-09-03)


### Features

* update googleapis and regenerate
([#18229](#18229))
([d4f8a57](d4f8a57))
</details>

<details><summary>google-cloud-dlp: 3.39.0</summary>

##
[3.39.0](google-cloud-dlp-v3.38.0...google-cloud-dlp-v3.39.0)
(2026-09-03)


### Features

* update API sources and regenerate
([#18267](#18267))
([813a5c1](813a5c1))
</details>

<details><summary>google-cloud-firestore: 2.30.0</summary>

##
[2.30.0](google-cloud-firestore-v2.29.0...google-cloud-firestore-v2.30.0)
(2026-09-03)


### Features

* **firestore:** configure gRPC message length limits for large
documents
([#18220](#18220))
([6e0f1d9](6e0f1d9))
</details>

<details><summary>google-cloud-geminidataanalytics: 0.13.2</summary>

##
[0.13.2](google-cloud-geminidataanalytics-v0.13.1...google-cloud-geminidataanalytics-v0.13.2)
(2026-09-03)


### Features

* update API sources and regenerate
([#18267](#18267))
([813a5c1](813a5c1))
</details>

<details><summary>google-cloud-pubsub: 2.40.0</summary>

##
[2.40.0](google-cloud-pubsub-v2.39.2...google-cloud-pubsub-v2.40.0)
(2026-09-03)


### Features

* update googleapis and regenerate
([#18229](#18229))
([d4f8a57](d4f8a57))
</details>

<details><summary>google-cloud-spanner: 3.71.0</summary>

##
[3.71.0](google-cloud-spanner-v3.70.0...google-cloud-spanner-v3.71.0)
(2026-09-03)


### Features

* add send and ack mutations Cloud Spanner Queues
([#17728](#17728))
([182ff9f](182ff9f)),
refs
[#17727](#17727)
</details>

<details><summary>google-cloud-storage-control: 1.15.0</summary>

##
[1.15.0](google-cloud-storage-control-v1.14.0...google-cloud-storage-control-v1.15.0)
(2026-09-03)


### Features

* update googleapis and regenerate
([#18229](#18229))
([d4f8a57](d4f8a57))
</details>

<details><summary>google-developer-knowledge: 0.1.2</summary>

##
[0.1.2](google-developer-knowledge-v0.1.1...google-developer-knowledge-v0.1.2)
(2026-09-03)


### Features

* update API sources and regenerate
([#18267](#18267))
([813a5c1](813a5c1))
* update googleapis and regenerate
([#18229](#18229))
([d4f8a57](d4f8a57))
</details>

<details><summary>google-maps-areainsights: 0.5.1</summary>

##
[0.5.1](google-maps-areainsights-v0.5.0...google-maps-areainsights-v0.5.1)
(2026-09-03)


### Features

* update googleapis and regenerate
([#18229](#18229))
([d4f8a57](d4f8a57))
</details>

<details><summary>google-maps-mapmanagement: 0.1.1</summary>

##
[0.1.1](google-maps-mapmanagement-v0.1.0...google-maps-mapmanagement-v0.1.1)
(2026-09-03)


### Features

* **google/maps/mapmanagement/v2:** onboard a new library
([#18173](#18173))
([f0f214b](f0f214b))
</details>

<details><summary>google-maps-routing: 0.11.1</summary>

##
[0.11.1](google-maps-routing-v0.11.0...google-maps-routing-v0.11.1)
(2026-09-03)


### Features

* update googleapis and regenerate
([#18229](#18229))
([d4f8a57](d4f8a57))
</details>

<details><summary>googleapis-common-protos: 1.75.3</summary>

##
[1.75.3](googleapis-common-protos-v1.75.2...googleapis-common-protos-v1.75.3)
(2026-09-03)


### Bug Fixes

* **googleapis-common-protos:** remove deprecated license classifier
([#18242](#18242))
([6f0216a](6f0216a)),
refs
[#18235](#18235)
</details>

<details><summary>sqlalchemy-spanner: 1.20.1</summary>

##
[1.20.1](sqlalchemy-spanner-v1.20.0...sqlalchemy-spanner-v1.20.1)
(2026-09-03)


### Bug Fixes

* **sqlalchemy-spanner:** robust session-isolated test databases and
clean lifecycle management
([#18179](#18179))
([3e0bda4](3e0bda4))


### Documentation

* **sqlalchemy-spanner:** centralize CONTRIBUTING.rst pointers
([#18142](#18142))
([f55ae02](f55ae02))
</details>

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

---------

Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants