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

chore: add experimental async data client #920

Merged
merged 59 commits into from Feb 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
b5b62c8
feat!: add new v3.0.0 API skeleton (#745)
daniel-sanche Mar 14, 2023
7d51eeb
chore: merge branch 'main' into v3
daniel-sanche Mar 15, 2023
507da99
feat: improve rows filters (#751)
daniel-sanche Mar 23, 2023
71b0312
feat: read rows query model class (#752)
daniel-sanche Apr 3, 2023
c55099f
feat: implement row and cell model classes (#753)
daniel-sanche Apr 5, 2023
f9a1907
feat: add pooled grpc transport (#748)
daniel-sanche Apr 24, 2023
3de7a68
feat: implement read_rows (#762)
daniel-sanche May 24, 2023
9b81289
feat: implement mutate rows (#769)
daniel-sanche Jun 6, 2023
ec3fd01
feat: literal value filter (#767)
daniel-sanche Jun 6, 2023
5d65703
feat: row_exists and read_row (#778)
daniel-sanche Jun 16, 2023
432d159
feat: read_modify_write and check_and_mutate_row (#780)
daniel-sanche Jun 16, 2023
ec2b983
feat: sharded read rows (#766)
daniel-sanche Jun 23, 2023
ceaf598
feat: ping and warm with metadata (#810)
daniel-sanche Jun 26, 2023
1ecf65f
feat: mutate rows batching (#770)
daniel-sanche Jun 26, 2023
eedde1e
chore: restructure module paths (#816)
daniel-sanche Jun 28, 2023
07438ca
feat: improve timeout structure (#819)
daniel-sanche Jun 29, 2023
0d92a84
fix: api errors apply to all bulk mutations
daniel-sanche Jul 24, 2023
a8cdf7c
chore: reduce public api surface (#820)
daniel-sanche Aug 1, 2023
aa760b2
feat: improve error group tracebacks on < py11 (#825)
daniel-sanche Aug 16, 2023
0323dde
feat: optimize read_rows (#852)
daniel-sanche Aug 17, 2023
0b3606f
chore: add user agent suffix (#842)
daniel-sanche Aug 17, 2023
b6d232a
feat: optimize retries (#854)
daniel-sanche Aug 17, 2023
8708a25
feat: add test proxy (#836)
daniel-sanche Aug 18, 2023
1d3a7c1
chore(tests): add conformance tests to CI for v3 (#870)
daniel-sanche Oct 16, 2023
50531e5
chore(tests): turn off fast fail for conformance tets (#882)
daniel-sanche Oct 26, 2023
8ff1216
feat: add TABLE_DEFAULTS enum for table method arguments (#880)
daniel-sanche Oct 26, 2023
94bfe66
fix: pass None for retry in gapic calls (#881)
daniel-sanche Oct 27, 2023
3ac80a9
feat: replace internal dictionaries with protos in gapic calls (#875)
daniel-sanche Nov 22, 2023
b191451
chore: optimize gapic calls (#863)
daniel-sanche Dec 1, 2023
285cdd3
feat: expose retryable error codes to users (#879)
daniel-sanche Dec 1, 2023
9342e27
chore: update api_core submodule (#897)
daniel-sanche Dec 15, 2023
858b93a
chore: merge main into experimental_v3 (#900)
daniel-sanche Dec 15, 2023
cc79d8c
chore: pin conformance tests to v0.0.2 (#903)
daniel-sanche Dec 15, 2023
f0d75de
fix: bulk mutation eventual success (#909)
daniel-sanche Dec 19, 2023
cdfcc2a
chore: merge branch 'main'
daniel-sanche Jan 18, 2024
5e11180
chore: move batcher file
daniel-sanche Jan 18, 2024
35996a8
chore: Merge branch 'main'
daniel-sanche Jan 18, 2024
54dbc08
chore(tests): fixed failing test
daniel-sanche Jan 18, 2024
fd4fba3
chore: downgraded system_emulated
daniel-sanche Jan 18, 2024
f4ac54f
fix: use default project in emulator mode
daniel-sanche Jan 18, 2024
79157c9
chore(tests): system tests support emulator
daniel-sanche Jan 18, 2024
b5c533b
chore(tests): use legacy client to spin up instance in system tests
daniel-sanche Jan 18, 2024
54462e2
chore(tests): revert back to gapic clients
daniel-sanche Jan 18, 2024
aeea5c6
fixed support for system_emulated
daniel-sanche Jan 18, 2024
ef29512
chore: ran blacken
daniel-sanche Jan 19, 2024
3b5b033
chore(tests): use emulator mode in github actions unit tests
daniel-sanche Jan 19, 2024
73171eb
run unit tests in emulator mode by default
daniel-sanche Jan 19, 2024
6fa49ab
iterating on tests
daniel-sanche Jan 19, 2024
52ec52a
use the same client init function in unit tests
daniel-sanche Jan 19, 2024
b2bf56f
use _make_client in more places
daniel-sanche Jan 19, 2024
7931069
iterating on tests
daniel-sanche Jan 19, 2024
8b886b3
changed cover requirement
daniel-sanche Jan 19, 2024
c3ed5aa
updated README
daniel-sanche Jan 19, 2024
158ceed
updated owlbot file
daniel-sanche Jan 19, 2024
22e1947
updated api_core version in setup.py
daniel-sanche Jan 19, 2024
9e60999
🦉 Updates from OwlBot post-processor
gcf-owl-bot[bot] Jan 19, 2024
1a32de2
Revert "updated README"
daniel-sanche Jan 27, 2024
cab3694
fixed versions
daniel-sanche Jan 29, 2024
952d91c
remove conformance from kokoro main run
daniel-sanche Jan 29, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion .coveragerc
Expand Up @@ -22,7 +22,7 @@ omit =
google/cloud/bigtable_admin/gapic_version.py

[report]
fail_under = 100
fail_under = 99
show_missing = True
exclude_lines =
# Re-enable the standard pragma
Expand Down
18 changes: 18 additions & 0 deletions .github/sync-repo-settings.yaml
Expand Up @@ -31,6 +31,24 @@ branchProtectionRules:
- 'Kokoro'
- 'Kokoro system-3.8'
- 'cla/google'
- pattern: experimental_v3
# Can admins overwrite branch protection.
# Defaults to `true`
isAdminEnforced: false
# Number of approving reviews required to update matching branches.
# Defaults to `1`
requiredApprovingReviewCount: 1
# Are reviews from code owners required to update matching branches.
# Defaults to `false`
requiresCodeOwnerReviews: false
# Require up to date branches
requiresStrictStatusChecks: false
# List of required status check contexts that must pass for commits to be accepted to matching branches.
requiredStatusCheckContexts:
- 'Kokoro'
- 'Kokoro system-3.8'
- 'cla/google'
- 'Conformance / Async v3 Client / Python 3.8'
# List of explicit permissions to add (additive only)
permissionRules:
# Team slug to add to repository permissions
Expand Down
56 changes: 56 additions & 0 deletions .github/workflows/conformance.yaml
@@ -0,0 +1,56 @@
# Copyright 2023 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Github action job to test core java library features on
# downstream client libraries before they are released.
on:
push:
branches:
- main
pull_request:
name: Conformance
jobs:
conformance:
runs-on: ubuntu-latest
strategy:
matrix:
test-version: [ "v0.0.2" ]
py-version: [ 3.8 ]
client-type: [ "Async v3", "Legacy" ]
fail-fast: false
name: "${{ matrix.client-type }} Client / Python ${{ matrix.py-version }} / Test Tag ${{ matrix.test-version }}"
steps:
- uses: actions/checkout@v3
name: "Checkout python-bigtable"
- uses: actions/checkout@v3
name: "Checkout conformance tests"
with:
repository: googleapis/cloud-bigtable-clients-test
ref: ${{ matrix.test-version }}
path: cloud-bigtable-clients-test
- uses: actions/setup-python@v4
with:
python-version: ${{ matrix.py-version }}
- uses: actions/setup-go@v4
with:
go-version: '>=1.20.2'
- run: chmod +x .kokoro/conformance.sh
- run: pip install -e .
name: "Install python-bigtable from HEAD"
- run: go version
- run: .kokoro/conformance.sh
name: "Run tests"
env:
CLIENT_TYPE: ${{ matrix.client-type }}
PYTHONUNBUFFERED: 1

2 changes: 1 addition & 1 deletion .github/workflows/system_emulated.yml
Expand Up @@ -20,7 +20,7 @@ jobs:
python-version: '3.8'

- name: Setup GCloud SDK
uses: google-github-actions/setup-gcloud@v2.0.1
uses: google-github-actions/setup-gcloud@v2.0.0

- name: Install / run Nox
run: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/unittest.yml
Expand Up @@ -54,4 +54,4 @@ jobs:
run: |
find .coverage-results -type f -name '*.zip' -exec unzip {} \;
coverage combine .coverage-results/**/.coverage*
coverage report --show-missing --fail-under=100
coverage report --show-missing --fail-under=99
6 changes: 6 additions & 0 deletions .gitmodules
@@ -0,0 +1,6 @@
[submodule "python-api-core"]
path = python-api-core
url = git@github.com:googleapis/python-api-core.git
[submodule "gapic-generator-fork"]
path = gapic-generator-fork
url = git@github.com:googleapis/gapic-generator-python.git
52 changes: 52 additions & 0 deletions .kokoro/conformance.sh
@@ -0,0 +1,52 @@
#!/bin/bash

# Copyright 2023 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

set -eo pipefail

## cd to the parent directory, i.e. the root of the git repo
cd $(dirname $0)/..

PROXY_ARGS=""
TEST_ARGS=""
if [[ "${CLIENT_TYPE^^}" == "LEGACY" ]]; then
echo "Using legacy client"
PROXY_ARGS="--legacy-client"
# legacy client does not expose mutate_row. Disable those tests
TEST_ARGS="-skip TestMutateRow_"
fi

# Build and start the proxy in a separate process
PROXY_PORT=9999
pushd test_proxy
nohup python test_proxy.py --port $PROXY_PORT $PROXY_ARGS &
proxyPID=$!
popd

# Kill proxy on exit
function cleanup() {
echo "Cleanup testbench";
kill $proxyPID
}
trap cleanup EXIT

# Run the conformance test
pushd cloud-bigtable-clients-test/tests
eval "go test -v -proxy_addr=:$PROXY_PORT $TEST_ARGS"
RETURN_CODE=$?
popd

echo "exiting with ${RETURN_CODE}"
exit ${RETURN_CODE}
6 changes: 6 additions & 0 deletions .kokoro/presubmit/conformance.cfg
@@ -0,0 +1,6 @@
# Format: //devtools/kokoro/config/proto/build.proto

env_vars: {
key: "NOX_SESSION"
value: "conformance"
}
1 change: 1 addition & 0 deletions gapic-generator-fork
Submodule gapic-generator-fork added at b26cda
73 changes: 73 additions & 0 deletions google/cloud/bigtable/data/__init__.py
@@ -0,0 +1,73 @@
# -*- coding: utf-8 -*-
# Copyright 2023 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
from google.cloud.bigtable import gapic_version as package_version

from google.cloud.bigtable.data._async.client import BigtableDataClientAsync
from google.cloud.bigtable.data._async.client import TableAsync

from google.cloud.bigtable.data._async.mutations_batcher import MutationsBatcherAsync

from google.cloud.bigtable.data.read_rows_query import ReadRowsQuery
from google.cloud.bigtable.data.read_rows_query import RowRange
from google.cloud.bigtable.data.row import Row
from google.cloud.bigtable.data.row import Cell

from google.cloud.bigtable.data.mutations import Mutation
from google.cloud.bigtable.data.mutations import RowMutationEntry
from google.cloud.bigtable.data.mutations import SetCell
from google.cloud.bigtable.data.mutations import DeleteRangeFromColumn
from google.cloud.bigtable.data.mutations import DeleteAllFromFamily
from google.cloud.bigtable.data.mutations import DeleteAllFromRow

from google.cloud.bigtable.data.exceptions import InvalidChunk
from google.cloud.bigtable.data.exceptions import FailedMutationEntryError
from google.cloud.bigtable.data.exceptions import FailedQueryShardError

from google.cloud.bigtable.data.exceptions import RetryExceptionGroup
from google.cloud.bigtable.data.exceptions import MutationsExceptionGroup
from google.cloud.bigtable.data.exceptions import ShardedReadRowsExceptionGroup

from google.cloud.bigtable.data._helpers import TABLE_DEFAULT
from google.cloud.bigtable.data._helpers import RowKeySamples
from google.cloud.bigtable.data._helpers import ShardedQuery


__version__: str = package_version.__version__

__all__ = (
"BigtableDataClientAsync",
"TableAsync",
"RowKeySamples",
"ReadRowsQuery",
"RowRange",
"MutationsBatcherAsync",
"Mutation",
"RowMutationEntry",
"SetCell",
"DeleteRangeFromColumn",
"DeleteAllFromFamily",
"DeleteAllFromRow",
"Row",
"Cell",
"InvalidChunk",
"FailedMutationEntryError",
"FailedQueryShardError",
"RetryExceptionGroup",
"MutationsExceptionGroup",
"ShardedReadRowsExceptionGroup",
"ShardedQuery",
"TABLE_DEFAULT",
)
25 changes: 25 additions & 0 deletions google/cloud/bigtable/data/_async/__init__.py
@@ -0,0 +1,25 @@
# Copyright 2023 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from google.cloud.bigtable.data._async.client import BigtableDataClientAsync
from google.cloud.bigtable.data._async.client import TableAsync

from google.cloud.bigtable.data._async.mutations_batcher import MutationsBatcherAsync


__all__ = [
"BigtableDataClientAsync",
"TableAsync",
"MutationsBatcherAsync",
]