Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: mutate rows batching #770

Merged
merged 159 commits into from
Jun 26, 2023
Merged

Conversation

daniel-sanche
Copy link
Contributor

@daniel-sanche daniel-sanche commented May 5, 2023

Blocked on #769. This PR builds off of changes from this branch

Implements MutationsBatcher to submit mutations in the background.

@daniel-sanche
Copy link
Contributor Author

@igorbernstein2 @mutianf

I added timeout configuration to the batcher init signature. Previously, it would always use the table defaults. This is part of the public API, so just wanted to make sure you saw the change in case you have thoughts

tests/unit/test_mutations_batcher.py Show resolved Hide resolved
google/cloud/bigtable/mutations_batcher.py Show resolved Hide resolved
20 exceptions have been encountered since the last flush, only the
first and last 10 exceptions will be stored.
"""
return self._oldest_exceptions + self._newest_exceptions
Copy link
Contributor Author

@daniel-sanche daniel-sanche Jun 23, 2023

Choose a reason for hiding this comment

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

Do we want to make the staged exception list public? Or maybe just make a has_errors function?

Copy link
Contributor

Choose a reason for hiding this comment

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

not sure what you mean

google/cloud/bigtable/client.py Outdated Show resolved Hide resolved
google/cloud/bigtable/mutations_batcher.py Outdated Show resolved Hide resolved
google/cloud/bigtable/mutations_batcher.py Show resolved Hide resolved
20 exceptions have been encountered since the last flush, only the
first and last 10 exceptions will be stored.
"""
return self._oldest_exceptions + self._newest_exceptions
Copy link
Contributor

Choose a reason for hiding this comment

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

not sure what you mean

timer_task = asyncio.create_task(timer_routine(self, interval))
return timer_task

async def append(self, mutation_entry: RowMutationEntry):
Copy link
Contributor

Choose a reason for hiding this comment

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

Please add a TODO to return a future with the result of this mutation

in_process_requests.append(batch_task)
# wait for all inflight requests to complete
found_exceptions = await self._wait_for_batch_results(*in_process_requests)
# allow previous flush tasks to finalize before adding new exceptions to list
Copy link
Contributor

Choose a reason for hiding this comment

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

is this comment stale?

google/cloud/bigtable/mutations_batcher.py Outdated Show resolved Hide resolved
google/cloud/bigtable/mutations_batcher.py Outdated Show resolved Hide resolved
google/cloud/bigtable/mutations_batcher.py Outdated Show resolved Hide resolved
@daniel-sanche daniel-sanche merged commit 1ecf65f into googleapis:v3 Jun 26, 2023
daniel-sanche added a commit that referenced this pull request Feb 5, 2024
* feat: add new v3.0.0 API skeleton (#745)

* feat: improve rows filters (#751)

* feat: read rows query model class (#752)

* feat: implement row and cell model classes (#753)

* feat: add pooled grpc transport (#748)

* feat: implement read_rows (#762)

* feat: implement mutate rows (#769)

* feat: literal value filter (#767)

* feat: row_exists and read_row (#778)

* feat: read_modify_write and check_and_mutate_row (#780)

* feat: sharded read rows (#766)

* feat: ping and warm with metadata (#810)

* feat: mutate rows batching (#770)

* chore: restructure module paths (#816)

* feat: improve timeout structure (#819)

* fix: api errors apply to all bulk mutations

* chore: reduce public api surface (#820)

* feat: improve error group tracebacks on < py11 (#825)

* feat: optimize read_rows (#852)

* chore: add user agent suffix (#842)

* feat: optimize retries (#854)

* feat: add test proxy (#836)

* chore(tests): add conformance tests to CI for v3 (#870)

* chore(tests): turn off fast fail for conformance tets (#882)

* feat: add TABLE_DEFAULTS enum for table method arguments (#880)

* fix: pass None for retry in gapic calls (#881)

* feat: replace internal dictionaries with protos in gapic calls (#875)

* chore: optimize gapic calls (#863)

* feat: expose retryable error codes to users (#879)

* chore: update api_core submodule (#897)

* chore: merge main into experimental_v3 (#900)

* chore: pin conformance tests to v0.0.2 (#903)

* fix: bulk mutation eventual success (#909)

---------

Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
api: bigtable Issues related to the googleapis/python-bigtable API. size: xl Pull request size is extra large.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants