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

Land Bigtable v2 #1932

Merged
merged 57 commits into from
Jun 29, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
a43b2eb
Split 'Makefile' into datastore and bigtable portions.
tseaver Jun 24, 2016
0f4a064
Generate Bigtable V2 protos.
tseaver Jun 24, 2016
9d7d8af
Exclude new '_generated_v2' files from coverage.
tseaver Jun 24, 2016
9a2d313
Drop 'Table.rename'.
tseaver Jun 26, 2016
f5b1719
Drop overlooked docs / system test usage of 'Table.rename'.
tseaver Jun 26, 2016
e570b03
Merge pull request #1903 from tseaver/bigtable-v2-regenerate_protobufs
tseaver Jun 26, 2016
16b04c9
Parse JSON acceptance tests.
tseaver Jun 25, 2016
ebf27b5
Add 'ReadRowsResponseV2' wrapper.
tseaver Jun 26, 2016
35103f9
Merge pull request #1908 from tseaver/bigtable-v2-drop_table_rename
tseaver Jun 26, 2016
47b9246
Alias Bigtable V1 imports / factories / entry point constants.
tseaver Jun 26, 2016
377f0da
Merge pull request #1907 from tseaver/bigtable-v2-read_rows_response_…
tseaver Jun 27, 2016
cdbc47c
Merge pull request #1912 from tseaver/bigtable-v2-alias_imports_endpo…
tseaver Jun 27, 2016
3c533e0
Factor out generating GCRule-related protobufs.
tseaver Jun 26, 2016
7e9c61d
Update bigtable.column_family to use V2 protos.
tseaver Jun 26, 2016
ae3d818
Merge pull request #1913 from tseaver/bigtable-v2-column_family_crud
tseaver Jun 27, 2016
5d179bc
Clarify: testcases leaving incomplete final rows do not raise.
tseaver Jun 27, 2016
6b2f07f
Distinguish response-level errors from invalid chunks.
tseaver Jun 27, 2016
fcc3751
Merge pull request #1915 from tseaver/bigtable-v2-readrowsresponse-er…
tseaver Jun 27, 2016
8916b6c
Factor out generating RowFilter-related protobufs.
tseaver Jun 27, 2016
1b0fb53
Convert to non-instance-admin Bigtable V2 protos.
tseaver Jun 27, 2016
3b48e0f
Merge pull request #1919 from tseaver/bigtable-v2-convert_imports
tseaver Jun 27, 2016
4ed0b8f
Drop 'Cluster.table' and 'Cluster.list_tables'.
tseaver Jun 27, 2016
7cbb215
In V2, tables hold a ref. to their instance, not a cluster.
tseaver Jun 27, 2016
498271e
Add V2 Instance type.
tseaver Jun 27, 2016
e144b09
Convert instance admin to V2 protobufs.
tseaver Jun 28, 2016
9880a42
Adjust docs for V2 instance admin patterns.
tseaver Jun 28, 2016
90cd2e7
Merge pull request #1923 from tseaver/bigtable-v2-instance_admin
tseaver Jun 28, 2016
aa95442
Use 'grpcio-tools' in a virtualenv to generate latest Bigtable V2 pro…
tseaver Jun 28, 2016
d97d030
Remove duplicated line.
tseaver Jun 28, 2016
4a223b7
Use 'grpcio-tools' in a virtualenv to generate from latest Bigtable V…
tseaver Jun 28, 2016
568a463
Use 'grpcio-tools' in a virtualenv to generate from latest datastore …
tseaver Jun 28, 2016
24989d6
Accomodate final V2 renames: 'name' -> 'parent'.
tseaver Jun 28, 2016
6d3ff2e
Merge pull request #1925 from tseaver/bigtable-v2-generate_v2_protos_…
tseaver Jun 28, 2016
a488a8a
More 'cluster' -> 'instance' renames.
tseaver Jun 28, 2016
7214045
Use (same) actual V2 admin endpoint host for instance / table admin.
tseaver Jun 28, 2016
c6b747e
Use class-level constants.
tseaver Jun 28, 2016
40f609e
Add 'Client.list_instances' method.
tseaver Jun 28, 2016
c87ca51
Clean out remaining refs to V1-generated code.
tseaver Jun 28, 2016
0ac2def
Merge pull request #1926 from tseaver/bigtable-v2-cleanups
tseaver Jun 28, 2016
3467d99
Work around borked gRPC generation for g.longrunning.operations.
tseaver Jun 28, 2016
784fe01
Revise Bigtable system tests to fit instance-based patterns.
tseaver Jun 28, 2016
024c7f3
Plumb cluster 'location'/'serve_nodes' through instance creation.
tseaver Jun 28, 2016
5e85b5d
CreateInstance operation name includes location.
tseaver Jun 28, 2016
d2c9daf
'Row/ColumnFamily._table' has '_instance'.
tseaver Jun 28, 2016
a01d02e
V2 UpdateTable no longer returns operation.
tseaver Jun 28, 2016
9bdeef7
'PartialRowData' no longer keeps 'committed' state.
tseaver Jun 28, 2016
893d451
Typo fix.
tseaver Jun 28, 2016
d8a01c2
Switch to passing location ID, rather than full path, to instance.
tseaver Jun 28, 2016
6f4aced
Lint fixes.
tseaver Jun 28, 2016
0c625c5
Merge pull request #1930 from tseaver/bigtable-v2-system_tests
tseaver Jun 29, 2016
82adc5e
Adjust to V2 'instance'-based patterns.
tseaver Jun 28, 2016
40b2016
Rename testcases for clarity.
tseaver Jun 28, 2016
9dfa823
'Table.read_rows': no responses -> None.
tseaver Jun 28, 2016
e92da5c
V2 wraps row for 'ReadModifyWriteRow' request in new response message
tseaver Jun 28, 2016
0e80bdd
happybase.Table.scan: proocess all rows from a single request.
tseaver Jun 28, 2016
d18a316
Valet service.
tseaver Jun 29, 2016
d085294
Merge pull request #1931 from tseaver/bigtable-v2-happybase
tseaver Jun 29, 2016
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .coveragerc
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
[report]
omit =
*/_generated/*.py
*/_generated_v2/*.py
show_missing = True
exclude_lines =
# Re-enable the standard pragma
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -57,3 +57,4 @@ scripts/pylintrc_reduced
generated_python/
cloud-bigtable-client/
googleapis-pb/
grpc_python_venv/
56 changes: 24 additions & 32 deletions Makefile → Makefile.bigtable_v1
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
GRPCIO_VIRTUALENV=$(shell pwd)/grpc_python_venv
GENERATED_DIR=$(shell pwd)/generated_python
BIGTABLE_DIR=$(shell pwd)/gcloud/bigtable/_generated
DATASTORE_DIR=$(shell pwd)/gcloud/datastore/_generated
GRPC_PLUGIN=grpc_python_plugin
PROTOC_CMD=protoc
BIGTABLE_PROTOS_DIR=$(shell pwd)/cloud-bigtable-client/bigtable-protos/src/main/proto
GENERATED_SUBDIR=_generated
BIGTABLE_DIR=$(shell pwd)/gcloud/bigtable/$(GENERATED_SUBDIR)
PROTOC_CMD=$(GRPCIO_VIRTUALENV)/bin/python -m grpc.tools.protoc
GOOGLEAPIS_PROTOS_DIR=$(shell pwd)/googleapis-pb
BIGTABLE_CHECKOUT_DIR=$(shell pwd)/cloud-bigtable-client
BIGTABLE_PROTOS_DIR=$(BIGTABLE_CHECKOUT_DIR)/bigtable-client-core-parent/bigtable-protos/src/main/proto

help:
@echo 'Makefile for gcloud-python Bigtable protos '
Expand All @@ -14,19 +15,22 @@ help:
@echo ' make clean Clean generated files '

generate:
# Ensure we have a virtualenv w/ up-to-date grpcio/grpcio-tools
[ -d $(GRPCIO_VIRTUALENV) ] || python2.7 -m virtualenv $(GRPCIO_VIRTUALENV)
$(GRPCIO_VIRTUALENV)/bin/pip install --upgrade grpcio grpcio-tools
# Retrieve git repos that have our *.proto files.
[ -d cloud-bigtable-client ] || git clone https://github.com/GoogleCloudPlatform/cloud-bigtable-client --depth=1
cd cloud-bigtable-client && git pull origin master
[ -d googleapis-pb ] || git clone https://github.com/google/googleapis googleapis-pb --depth=1
cd googleapis-pb && git pull origin master
[ -d $(BIGTABLE_CHECKOUT_DIR) ] || git clone https://github.com/GoogleCloudPlatform/cloud-bigtable-client --depth=1
cd $(BIGTABLE_CHECKOUT_DIR) && git pull origin master
[ -d $(GOOGLEAPIS_PROTOS_DIR) ] || git clone https://github.com/google/googleapis googleapis-pb --depth=1
cd $(GOOGLEAPIS_PROTOS_DIR) && git pull origin master
# Make the directory where our *_pb2.py files will go.
mkdir -p $(GENERATED_DIR)
# Generate all *_pb2.py files that require gRPC.
$(PROTOC_CMD) \
--proto_path=$(BIGTABLE_PROTOS_DIR) \
--proto_path=$(GOOGLEAPIS_PROTOS_DIR) \
--python_out=$(GENERATED_DIR) \
--plugin=protoc-gen-grpc=$(GRPC_PLUGIN) \
--grpc_out=$(GENERATED_DIR) \
--grpc_python_out=$(GENERATED_DIR) \
$(BIGTABLE_PROTOS_DIR)/google/bigtable/v1/bigtable_service.proto \
$(BIGTABLE_PROTOS_DIR)/google/bigtable/admin/cluster/v1/bigtable_cluster_service.proto \
$(BIGTABLE_PROTOS_DIR)/google/bigtable/admin/table/v1/bigtable_table_service.proto
Expand All @@ -41,49 +45,37 @@ generate:
$(BIGTABLE_PROTOS_DIR)/google/bigtable/admin/cluster/v1/bigtable_cluster_service_messages.proto \
$(BIGTABLE_PROTOS_DIR)/google/bigtable/admin/table/v1/bigtable_table_data.proto \
$(BIGTABLE_PROTOS_DIR)/google/bigtable/admin/table/v1/bigtable_table_service_messages.proto \
$(GOOGLEAPIS_PROTOS_DIR)/google/datastore/v1beta3/datastore.proto \
$(GOOGLEAPIS_PROTOS_DIR)/google/datastore/v1beta3/entity.proto \
$(GOOGLEAPIS_PROTOS_DIR)/google/datastore/v1beta3/query.proto
# Move the newly generated *_pb2.py files into our library.
mv $(GENERATED_DIR)/google/bigtable/v1/* $(BIGTABLE_DIR)
mv $(GENERATED_DIR)/google/bigtable/admin/cluster/v1/* $(BIGTABLE_DIR)
mv $(GENERATED_DIR)/google/bigtable/admin/table/v1/* $(BIGTABLE_DIR)
mv $(GENERATED_DIR)/google/datastore/v1beta3/* $(DATASTORE_DIR)
cp $(GENERATED_DIR)/google/bigtable/v1/* $(BIGTABLE_DIR)
cp $(GENERATED_DIR)/google/bigtable/admin/cluster/v1/* $(BIGTABLE_DIR)
cp $(GENERATED_DIR)/google/bigtable/admin/table/v1/* $(BIGTABLE_DIR)
# Remove all existing *.proto files before we replace
rm -f $(BIGTABLE_DIR)/*.proto
rm -f $(DATASTORE_DIR)/*.proto
# Copy over the *.proto files into our library.
cp $(BIGTABLE_PROTOS_DIR)/google/bigtable/v1/*.proto $(BIGTABLE_DIR)
cp $(BIGTABLE_PROTOS_DIR)/google/bigtable/admin/cluster/v1/*.proto $(BIGTABLE_DIR)
cp $(BIGTABLE_PROTOS_DIR)/google/bigtable/admin/table/v1/*.proto $(BIGTABLE_DIR)
cp $(BIGTABLE_PROTOS_DIR)/google/longrunning/operations.proto $(BIGTABLE_DIR)
cp $(GOOGLEAPIS_PROTOS_DIR)/google/datastore/v1beta3/*.proto $(DATASTORE_DIR)
cp $(GOOGLEAPIS_PROTOS_DIR)/google/longrunning/operations.proto $(BIGTABLE_DIR)
# Rename all *.proto files in our library with an
# underscore and remove executable bit.
cd $(BIGTABLE_DIR) && \
for filename in *.proto; do \
chmod -x $$filename ; \
mv $$filename _$$filename ; \
done
cd $(DATASTORE_DIR) && \
for filename in *.proto; do \
chmod -x $$filename ; \
mv $$filename _$$filename ; \
done
# Separate the gRPC parts of the operations service from the
# non-gRPC parts so that the protos from `googleapis-common-protos`
# can be used without gRPC.
python scripts/make_operations_grpc.py
# Separate the gRPC parts of the datastore service from the
# non-gRPC parts so that the protos can be used without gRPC.
python scripts/make_datastore_grpc.py
GRPCIO_VIRTUALENV="$(GRPCIO_VIRTUALENV)" \
GENERATED_SUBDIR=$(GENERATED_SUBDIR) \
python scripts/make_operations_grpc.py
# Rewrite the imports in the generated *_pb2.py files.
python scripts/rewrite_imports.py
python scripts/rewrite_imports.py $(BIGTABLE_DIR)/*pb2.py

check_generate:
python scripts/check_generate.py

clean:
rm -fr cloud-bigtable-client $(GENERATED_DIR)
rm -fr $(GRPCIO_VIRTUALENV) $(GOOGLEAPIS_PROTOS_DIR) $(GENERATED_DIR)

.PHONY: generate check_generate clean
71 changes: 71 additions & 0 deletions Makefile.bigtable_v2
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
GRPCIO_VIRTUALENV=$(shell pwd)/grpc_python_venv
GENERATED_DIR=$(shell pwd)/generated_python
GENERATED_SUBDIR=_generated_v2
BIGTABLE_DIR=$(shell pwd)/gcloud/bigtable/$(GENERATED_SUBDIR)
PROTOC_CMD=$(GRPCIO_VIRTUALENV)/bin/python -m grpc.tools.protoc
GOOGLEAPIS_PROTOS_DIR=$(shell pwd)/googleapis-pb

help:
@echo 'Makefile for gcloud-python Bigtable protos '
@echo ' '
@echo ' make generate Generates the protobuf modules '
@echo ' make check_generate Checks that generate succeeded '
@echo ' make clean Clean generated files '

generate:
# Ensure we have a virtualenv w/ up-to-date grpcio/grpcio-tools
[ -d $(GRPCIO_VIRTUALENV) ] || python2.7 -m virtualenv $(GRPCIO_VIRTUALENV)
$(GRPCIO_VIRTUALENV)/bin/pip install --upgrade grpcio grpcio-tools
# Retrieve git repos that have our *.proto files.
[ -d googleapis-pb ] || git clone https://github.com/google/googleapis googleapis-pb --depth=1
cd googleapis-pb && git pull origin master
# Make the directory where our *_pb2.py files will go.
mkdir -p $(GENERATED_DIR)
# Generate all *_pb2.py files that require gRPC.
$(PROTOC_CMD) \
--proto_path=$(GOOGLEAPIS_PROTOS_DIR) \
--python_out=$(GENERATED_DIR) \
--grpc_python_out=$(GENERATED_DIR) \
$(GOOGLEAPIS_PROTOS_DIR)/google/bigtable/v2/bigtable.proto \
$(GOOGLEAPIS_PROTOS_DIR)/google/bigtable/admin/v2/bigtable_instance_admin.proto \
$(GOOGLEAPIS_PROTOS_DIR)/google/bigtable/admin/v2/bigtable_table_admin.proto
# Generate all *_pb2.py files that do not require gRPC.
$(PROTOC_CMD) \
--proto_path=$(GOOGLEAPIS_PROTOS_DIR) \
--python_out=$(GENERATED_DIR) \
$(GOOGLEAPIS_PROTOS_DIR)/google/bigtable/v2/data.proto \
$(GOOGLEAPIS_PROTOS_DIR)/google/bigtable/admin/v2/common.proto \
$(GOOGLEAPIS_PROTOS_DIR)/google/bigtable/admin/v2/instance.proto \
$(GOOGLEAPIS_PROTOS_DIR)/google/bigtable/admin/v2/table.proto \
# Move the newly generated *_pb2.py files into our library.
cp $(GENERATED_DIR)/google/bigtable/v2/* $(BIGTABLE_DIR)
cp $(GENERATED_DIR)/google/bigtable/admin/v2/* $(BIGTABLE_DIR)
# Remove all existing *.proto files before we replace
rm -f $(BIGTABLE_DIR)/*.proto
# Copy over the *.proto files into our library.
cp $(GOOGLEAPIS_PROTOS_DIR)/google/bigtable/v2/*.proto $(BIGTABLE_DIR)
cp $(GOOGLEAPIS_PROTOS_DIR)/google/bigtable/admin/v2/*.proto $(BIGTABLE_DIR)
cp $(GOOGLEAPIS_PROTOS_DIR)/google/longrunning/operations.proto $(BIGTABLE_DIR)
# Rename all *.proto files in our library with an
# underscore and remove executable bit.
cd $(BIGTABLE_DIR) && \
for filename in *.proto; do \
chmod -x $$filename ; \
mv $$filename _$$filename ; \
done
# Separate the gRPC parts of the operations service from the
# non-gRPC parts so that the protos from `googleapis-common-protos`
# can be used without gRPC.
GRPCIO_VIRTUALENV="$(GRPCIO_VIRTUALENV)" \
GENERATED_SUBDIR=$(GENERATED_SUBDIR) \
python scripts/make_operations_grpc.py
# Rewrite the imports in the generated *_pb2.py files.
python scripts/rewrite_imports.py $(BIGTABLE_DIR)/*pb2.py

check_generate:
python scripts/check_generate.py

clean:
rm -fr $(GRPCIO_VIRTUALENV) $(GOOGLEAPIS_PROTOS_DIR) $(GENERATED_DIR)

.PHONY: generate check_generate clean
57 changes: 57 additions & 0 deletions Makefile.datastore
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
GRPCIO_VIRTUALENV=$(shell pwd)/grpc_python_venv
GENERATED_DIR=$(shell pwd)/generated_python
DATASTORE_DIR=$(shell pwd)/gcloud/datastore/_generated
PROTOC_CMD=$(GRPCIO_VIRTUALENV)/bin/python -m grpc.tools.protoc
GOOGLEAPIS_PROTOS_DIR=$(shell pwd)/googleapis-pb

help:
@echo 'Makefile for gcloud-python Bigtable protos '
@echo ' '
@echo ' make generate Generates the protobuf modules '
@echo ' make check_generate Checks that generate succeeded '
@echo ' make clean Clean generated files '

generate:
# Ensure we have a virtualenv w/ up-to-date grpcio/grpcio-tools
[ -d $(GRPCIO_VIRTUALENV) ] || python2.7 -m virtualenv $(GRPCIO_VIRTUALENV)
$(GRPCIO_VIRTUALENV)/bin/pip install --upgrade grpcio grpcio-tools
# Retrieve git repos that have our *.proto files.
[ -d googleapis-pb ] || git clone https://github.com/google/googleapis googleapis-pb --depth=1
cd googleapis-pb && git pull origin master
# Make the directory where our *_pb2.py files will go.
mkdir -p $(GENERATED_DIR)
# Generate all *_pb2.py files that do not require gRPC.
$(PROTOC_CMD) \
--proto_path=$(GOOGLEAPIS_PROTOS_DIR) \
--python_out=$(GENERATED_DIR) \
$(GOOGLEAPIS_PROTOS_DIR)/google/datastore/v1beta3/datastore.proto \
$(GOOGLEAPIS_PROTOS_DIR)/google/datastore/v1beta3/entity.proto \
$(GOOGLEAPIS_PROTOS_DIR)/google/datastore/v1beta3/query.proto
# Move the newly generated *_pb2.py files into our library.
cp $(GENERATED_DIR)/google/datastore/v1beta3/* $(DATASTORE_DIR)
# Remove all existing *.proto files before we replace
rm -f $(DATASTORE_DIR)/*.proto
# Copy over the *.proto files into our library.
cp $(GOOGLEAPIS_PROTOS_DIR)/google/datastore/v1beta3/*.proto $(DATASTORE_DIR)
# Rename all *.proto files in our library with an
# underscore and remove executable bit.
cd $(DATASTORE_DIR) && \
for filename in *.proto; do \
chmod -x $$filename ; \
mv $$filename _$$filename ; \
done
# Separate the gRPC parts of the datastore service from the
# non-gRPC parts so that the protos can be used without gRPC.
GRPCIO_VIRTUALENV="$(GRPCIO_VIRTUALENV)" \
GENERATED_SUBDIR=$(GENERATED_SUBDIR) \
python scripts/make_datastore_grpc.py
# Rewrite the imports in the generated *_pb2.py files.
python scripts/rewrite_imports.py $(DATASTORE_DIR)/*pb2.py

check_generate:
python scripts/check_generate.py

clean:
rm -fr $(GENERATED_DIR)

.PHONY: generate check_generate clean
8 changes: 4 additions & 4 deletions docs/bigtable-client-intro.rst
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ Configuration
Admin API Access
----------------

If you'll be using your client to make `Cluster Admin`_ and `Table Admin`_
If you'll be using your client to make `Instance Admin`_ and `Table Admin`_
API requests, you'll need to pass the ``admin`` argument:

.. code:: python
Expand All @@ -89,10 +89,10 @@ Next Step
---------

After a :class:`Client <gcloud.bigtable.client.Client>`, the next highest-level
object is a :class:`Cluster <gcloud.bigtable.cluster.Cluster>`. You'll need
object is a :class:`Instance <gcloud.bigtable.instance.Instance>`. You'll need
one before you can interact with tables or data.

Head next to learn about the :doc:`bigtable-cluster-api`.
Head next to learn about the :doc:`bigtable-instance-api`.

.. _Cluster Admin: https://github.com/GoogleCloudPlatform/cloud-bigtable-client/tree/master/bigtable-protos/src/main/proto/google/bigtable/admin/cluster/v1
.. _Instance Admin: https://github.com/GoogleCloudPlatform/cloud-bigtable-client/tree/master/bigtable-protos/src/main/proto/google/bigtable/admin/instance/v1
.. _Table Admin: https://github.com/GoogleCloudPlatform/cloud-bigtable-client/tree/master/bigtable-protos/src/main/proto/google/bigtable/admin/table/v1
Loading