-
Notifications
You must be signed in to change notification settings - Fork 88
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
docs(sample): Add sample for native image support in Bigtable (#1165)
* docs(sample): add sample for native image support * 🦉 Updates from OwlBot See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * add setup instructions to readme Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>
- Loading branch information
1 parent
8d2ca86
commit 143aaee
Showing
6 changed files
with
524 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,113 @@ | ||
# BigTable Sample Application with Native Image | ||
|
||
This application uses the [Google Cloud BigTable Client Libraries](https://cloud.google.com/bigtable/docs/reference/libraries) and is compatible with Native Image compilation. | ||
|
||
The application runs through some simple BigTable Client Library operations to demonstrate compatibility. | ||
|
||
## Setup Instructions | ||
|
||
You will need to follow these prerequisite steps in order to run the samples: | ||
|
||
1. If you have not already, [create a Google Cloud Platform Project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#creating_a_project). | ||
|
||
2. Install the [Google Cloud SDK](https://cloud.google.com/sdk/) which will allow you to run the sample with your project's credentials. | ||
|
||
Once installed, log in with Application Default Credentials using the following command: | ||
|
||
``` | ||
gcloud auth application-default login | ||
``` | ||
**Note:** Authenticating with Application Default Credentials is convenient to use during development, but we recommend [alternate methods of authentication](https://cloud.google.com/docs/authentication/production) during production use. | ||
3. Install the GraalVM compiler. | ||
You can follow the [official installation instructions](https://www.graalvm.org/docs/getting-started/#install-graalvm) from the GraalVM website. | ||
After following the instructions, ensure that you install the native image extension installed by running: | ||
``` | ||
gu install native-image | ||
``` | ||
Once you finish following the instructions, verify that the default version of Java is set to the GraalVM version by running `java -version` in a terminal. | ||
You will see something similar to the below output: | ||
``` | ||
$ java -version | ||
openjdk version "11.0.7" 2020-04-14 | ||
OpenJDK Runtime Environment GraalVM CE 20.1.0 (build 11.0.7+10-jvmci-20.1-b02) | ||
OpenJDK 64-Bit Server VM GraalVM CE 20.1.0 (build 11.0.7+10-jvmci-20.1-b02, mixed mode, sharing) | ||
``` | ||
## BigTable Environment setup | ||
The following sections describe how you can run the sample application against the BigTable emulator or a real BigTable instance. | ||
1. *(Using emulator)* If you wish to run the application against the [BigTable emulator](https://cloud.google.com/bigtable/docs/emulator), ensure that you have the [Google Cloud SDK](https://cloud.google.com/sdk) installed. | ||
In a new terminal window, start the emulator via `gcloud`: | ||
``` | ||
gcloud beta emulators bigtable start --host-port=localhost:9010 | ||
``` | ||
Leave the emulator running in this terminal for now. | ||
In the next section, we will run the sample application against the BigTable emulator instance. | ||
2. *(Using real BigTable instance)* If instead you wish to run the application against a real BigTable instance, ensure you already have a BigTable instance created. | ||
For example, the following command creates a new BigTable instance named `nativeimage-test-instance`. | ||
``` | ||
gcloud bigtable instances create nativeimage-test-instance \ | ||
--cluster=nativeimage-test-cluster \ | ||
--cluster-zone=us-central1-c \ | ||
--cluster-num-nodes=1 \ | ||
--display-name=nativeimage-test-instance | ||
``` | ||
You can also manually manage your BigTable resources through the [BigTable Cloud Console view](http://console.cloud.google.com/bigtable). | ||
## Run with Native Image Compilation | ||
1. Compile the application with the Native Image compiler. | ||
``` | ||
mvn package -P native -DskipTests | ||
``` | ||
2. **(Optional)** If you're using the emulator, export the `BIGTABLE_EMULATOR_HOST` as an environment variable in your terminal. | ||
``` | ||
export BIGTABLE_EMULATOR_HOST=localhost:9010 | ||
``` | ||
The BigTable Client Libraries will detect this environment variable and automatically connect to the emulator instance if this variable is set. | ||
3. Run the application. | ||
Pass in the BigTable instance you wish to use via the `-Dbigtable.instance` property. | ||
``` | ||
./target/bigtable-sample -Dbigtable.instance={BIGTABLE_INSTANCE_NAME} | ||
``` | ||
4. The application will run through some basic BigTable operations and log some output statements. | ||
``` | ||
Created table: nativeimage-test-table2b5b0031-f4ea-4c39-bc0c-bf6c3c62c90c | ||
Successfully wrote row: phone#1608775178843000 | ||
Reading phone data in table: | ||
Key: phone#1608775178843000 | ||
connected_cell: @1608775178843000 | ||
connected_wifi: @1608775178843000 | ||
os_build: PQ2A.190405.003 @1608775178843000 | ||
Deleted table: nativeimage-test-table2b5b0031-f4ea-4c39-bc0c-bf6c3c62c90c | ||
``` | ||
## Run integration test for the sample | ||
In order to run the sample's integration test, call the following command: | ||
``` | ||
mvn test -P native | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,139 @@ | ||
<?xml version='1.0' encoding='UTF-8'?> | ||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||
<modelVersion>4.0.0</modelVersion> | ||
<groupId>com.example.bigtable</groupId> | ||
<artifactId>native-image-sample</artifactId> | ||
<name>Native Image Sample</name> | ||
<url>https://github.com/googleapis/java-bigtable</url> | ||
|
||
<!-- | ||
The parent pom defines common style checks and testing strategies for our samples. | ||
Removing or replacing it should not affect the execution of the samples in anyway. | ||
--> | ||
<parent> | ||
<groupId>com.google.cloud.samples</groupId> | ||
<artifactId>shared-configuration</artifactId> | ||
<version>1.2.0</version> | ||
</parent> | ||
|
||
<properties> | ||
<maven.compiler.target>1.8</maven.compiler.target> | ||
<maven.compiler.source>1.8</maven.compiler.source> | ||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | ||
</properties> | ||
|
||
|
||
<!-- [START bigtable_install_with_bom] --> | ||
<dependencyManagement> | ||
<dependencies> | ||
<dependency> | ||
<groupId>com.google.cloud</groupId> | ||
<artifactId>libraries-bom</artifactId> | ||
<version>24.2.0</version> | ||
<type>pom</type> | ||
<scope>import</scope> | ||
</dependency> | ||
</dependencies> | ||
</dependencyManagement> | ||
|
||
<dependencies> | ||
<dependency> | ||
<groupId>com.google.cloud</groupId> | ||
<artifactId>google-cloud-bigtable</artifactId> | ||
</dependency> | ||
<!-- [END bigtable_install_with_bom] --> | ||
|
||
<dependency> | ||
<groupId>junit</groupId> | ||
<artifactId>junit</artifactId> | ||
<version>4.13.2</version> | ||
<scope>test</scope> | ||
</dependency> | ||
<dependency> | ||
<groupId>com.google.truth</groupId> | ||
<artifactId>truth</artifactId> | ||
<version>1.1.3</version> | ||
<scope>test</scope> | ||
</dependency> | ||
</dependencies> | ||
|
||
<build> | ||
<plugins> | ||
<plugin> | ||
<groupId>org.apache.maven.plugins</groupId> | ||
<artifactId>maven-jar-plugin</artifactId> | ||
<configuration> | ||
<archive> | ||
<manifest> | ||
<mainClass>com.example.bigquery.NativeImageBigtableSample | ||
</mainClass> | ||
</manifest> | ||
</archive> | ||
</configuration> | ||
</plugin> | ||
</plugins> | ||
</build> | ||
|
||
<!-- Native Profile--> | ||
<profiles> | ||
<profile> | ||
<id>native</id> | ||
|
||
<dependencies> | ||
<dependency> | ||
<groupId>com.google.cloud</groupId> | ||
<artifactId>native-image-support</artifactId> | ||
<version>0.10.0</version> | ||
</dependency> | ||
<dependency> | ||
<groupId>org.junit.vintage</groupId> | ||
<artifactId>junit-vintage-engine</artifactId> | ||
<version>5.8.2</version> | ||
<scope>test</scope> | ||
</dependency> | ||
<dependency> | ||
<groupId>org.graalvm.buildtools</groupId> | ||
<artifactId>junit-platform-native</artifactId> | ||
<version>0.9.9</version> | ||
<scope>test</scope> | ||
</dependency> | ||
</dependencies> | ||
|
||
<build> | ||
<plugins> | ||
<plugin> | ||
<groupId>org.graalvm.buildtools</groupId> | ||
<artifactId>native-maven-plugin</artifactId> | ||
<version>0.9.9</version> | ||
<extensions>true</extensions> | ||
<configuration> | ||
<mainClass>com.example.bigtable.NativeImageBigtableSample | ||
</mainClass> | ||
<buildArgs> | ||
<buildArg>--no-fallback</buildArg> | ||
<buildArg>--no-server</buildArg> | ||
</buildArgs> | ||
</configuration> | ||
<executions> | ||
<execution> | ||
<id>build-native</id> | ||
<goals> | ||
<goal>build</goal> | ||
<goal>test</goal> | ||
</goals> | ||
<phase>package</phase> | ||
</execution> | ||
<execution> | ||
<id>test-native</id> | ||
<goals> | ||
<goal>test</goal> | ||
</goals> | ||
<phase>test</phase> | ||
</execution> | ||
</executions> | ||
</plugin> | ||
</plugins> | ||
</build> | ||
</profile> | ||
</profiles> | ||
</project> |
Oops, something went wrong.