diff --git a/TESTING.md b/TESTING.md
index f5a8242b6cae..ce8a7f2641f8 100644
--- a/TESTING.md
+++ b/TESTING.md
@@ -200,6 +200,10 @@ try {
}
```
+### Testing code that uses Redis
+
+Currently, there isn't an emulator for Redis. An alternative is to create a test project.
+
### Testing code that uses Resource Manager
#### On your machine
diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/stub/BigtableTableAdminStubSettings.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/stub/BigtableTableAdminStubSettings.java
index f3b5ad7e0065..b8450494aa27 100644
--- a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/stub/BigtableTableAdminStubSettings.java
+++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/admin/v2/stub/BigtableTableAdminStubSettings.java
@@ -482,6 +482,28 @@ public static class Builder
.setTotalTimeout(Duration.ofMillis(600000L))
.build();
definitions.put("default", settings);
+ settings =
+ RetrySettings.newBuilder()
+ .setInitialRetryDelay(Duration.ofMillis(100L))
+ .setRetryDelayMultiplier(1.3)
+ .setMaxRetryDelay(Duration.ofMillis(60000L))
+ .setInitialRpcTimeout(Duration.ofMillis(130000L))
+ .setRpcTimeoutMultiplier(1.0)
+ .setMaxRpcTimeout(Duration.ofMillis(130000L))
+ .setTotalTimeout(Duration.ofMillis(3600000L))
+ .build();
+ definitions.put("create_table", settings);
+ settings =
+ RetrySettings.newBuilder()
+ .setInitialRetryDelay(Duration.ofMillis(100L))
+ .setRetryDelayMultiplier(1.3)
+ .setMaxRetryDelay(Duration.ofMillis(60000L))
+ .setInitialRpcTimeout(Duration.ofMillis(900000L))
+ .setRpcTimeoutMultiplier(1.0)
+ .setMaxRpcTimeout(Duration.ofMillis(900000L))
+ .setTotalTimeout(Duration.ofMillis(3600000L))
+ .build();
+ definitions.put("drop_row_range", settings);
RETRY_PARAM_DEFINITIONS = definitions.build();
}
@@ -555,7 +577,7 @@ private static Builder initDefaults(Builder builder) {
builder
.createTableSettings()
.setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("non_idempotent"))
- .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("default"));
+ .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("create_table"));
builder
.createTableFromSnapshotSettings()
@@ -585,7 +607,7 @@ private static Builder initDefaults(Builder builder) {
builder
.dropRowRangeSettings()
.setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("non_idempotent"))
- .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("default"));
+ .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("drop_row_range"));
builder
.generateConsistencyTokenSettings()
diff --git a/google-cloud-bom/pom.xml b/google-cloud-bom/pom.xml
index ede88cfa398c..6af4e7df70d0 100644
--- a/google-cloud-bom/pom.xml
+++ b/google-cloud-bom/pom.xml
@@ -151,6 +151,7 @@
0.46.1-beta-SNAPSHOT0.46.1-alpha-SNAPSHOT0.46.1-beta-SNAPSHOT
+ 0.46.1-alpha-SNAPSHOT0.46.1-alpha-SNAPSHOT0.46.1-beta-SNAPSHOT0.46.1-alpha-SNAPSHOT
@@ -173,8 +174,8 @@
1.25.01.25.00.42.0
- 0.11.0
- 1.10.0
+ 0.12.0
+ 1.11.0
@@ -624,6 +625,27 @@
grpc-google-cloud-pubsub-v1${generated-proto-beta.version}
+
+ com.google.cloud
+ google-cloud-redis
+ ${redis.version}
+
+
+ com.google.cloud
+ google-cloud-redis
+ ${redis.version}
+ test-jar
+
+
+ com.google.api.grpc
+ proto-google-cloud-redis-v1beta1
+ ${generated-proto-beta.version}
+
+
+ com.google.api.grpc
+ grpc-google-cloud-redis-v1beta1
+ ${generated-proto-beta.version}
+ com.google.cloudgoogle-cloud-resourcemanager
diff --git a/google-cloud-redis/README.md b/google-cloud-redis/README.md
new file mode 100644
index 000000000000..6a9920d2028d
--- /dev/null
+++ b/google-cloud-redis/README.md
@@ -0,0 +1,118 @@
+Google Cloud Java Client for Redis
+==================================
+
+Java idiomatic client for [Google Cloud Redis][cloud-redis].
+
+[](https://circleci.com/gh/GoogleCloudPlatform/google-cloud-java/tree/master)
+[](https://coveralls.io/r/GoogleCloudPlatform/google-cloud-java?branch=master)
+[]( https://img.shields.io/maven-central/v/com.google.cloud/google-cloud-redis.svg)
+[](https://www.codacy.com/app/mziccard/google-cloud-java)
+[](https://www.versioneye.com/user/projects/58fe4c8d6ac171426c414772)
+
+- [Product Documentation][redis-product-docs]
+- [Client Library Documentation][redis-client-lib-docs]
+
+> Note: This client is a work-in-progress, and may occasionally
+> make backwards-incompatible changes.
+
+Quickstart
+----------
+
+[//]: # ({x-version-update-start:google-cloud-redis:released})
+Add this to your pom.xml file
+```xml
+
+ com.google.cloud
+ google-cloud-redis
+ 0.46.0-beta
+
+```
+If you are using Gradle, add this to your dependencies
+```Groovy
+compile 'com.google.cloud:google-cloud-redis:0.46.0-beta'
+```
+If you are using SBT, add this to your dependencies
+```Scala
+libraryDependencies += "com.google.cloud" % "google-cloud-redis" % "0.46.0-beta"
+```
+[//]: # ({x-version-update-end})
+
+Authentication
+--------------
+
+See the [Authentication](https://github.com/GoogleCloudPlatform/google-cloud-java#authentication) section in the base directory's README.
+
+About Google Cloud Redis
+--------------------------
+
+[Google Cloud Redis API][cloud-redis] transfers data from partner
+SaaS applications to Google BigQuery on a scheduled, managed basis.
+
+See the [Redis client library docs][redis-client-lib-docs] to learn how to interact with the
+Cloud Redis using this Client Library.
+
+Getting Started
+---------------
+#### Prerequisites
+For this tutorial, you will need a
+[Google Developers Console](https://console.developers.google.com/) project with the Redis API
+enabled. You will need to [enable billing](https://support.google.com/cloud/answer/6158867?hl=en) to
+use Google Cloud Redis.
+[Follow these instructions](https://cloud.google.com/docs/authentication#preparation) to get your
+project set up. You will also need to set up the local development environment by [installing the
+Google Cloud SDK](https://cloud.google.com/sdk/) and running the following commands in command line:
+`gcloud auth login` and `gcloud config set project [YOUR PROJECT ID]`.
+
+#### Installation and setup
+You'll need to obtain the `google-cloud-redis` library. See the [Quickstart](#quickstart) section
+to add `google-cloud-redis` as a dependency in your code.
+
+Transport
+---------
+Redis uses gRPC for the transport layer.
+
+Java Versions
+-------------
+
+Java 7 or above is required for using this client.
+
+Testing
+-------
+
+This library has tools to help make tests for code using Cloud Redis.
+
+See [TESTING] to read more about testing.
+
+Versioning
+----------
+
+This library follows [Semantic Versioning](http://semver.org/).
+
+It is currently in major version zero (``0.y.z``), which means that anything
+may change at any time and the public API should not be considered
+stable.
+
+Contributing
+------------
+
+Contributions to this library are always welcome and highly encouraged.
+
+See `google-cloud`'s [CONTRIBUTING] documentation and the [shared documentation](https://github.com/GoogleCloudPlatform/gcloud-common/blob/master/contributing/readme.md#how-to-contribute-to-gcloud) for more information on how to get started.
+
+Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms. See [Code of Conduct][code-of-conduct] for more information.
+
+License
+-------
+
+Apache 2.0 - See [LICENSE] for more information.
+
+
+[CONTRIBUTING]:https://github.com/GoogleCloudPlatform/google-cloud-java/blob/master/CONTRIBUTING.md
+[code-of-conduct]:https://github.com/GoogleCloudPlatform/google-cloud-java/blob/master/CODE_OF_CONDUCT.md#contributor-code-of-conduct
+[LICENSE]: https://github.com/GoogleCloudPlatform/google-cloud-java/blob/master/LICENSE
+[TESTING]: https://github.com/GoogleCloudPlatform/google-cloud-java/blob/master/TESTING.md#testing-code-that-uses-redis
+
+
+[cloud-redis]: https://cloud.google.com/
+[redis-product-docs]: https://cloud.google.com/
+[redis-client-lib-docs]: https://googlecloudplatform.github.io/google-cloud-java/latest/apidocs/index.html?com/google/cloud/redis/v1/package-summary.html
diff --git a/google-cloud-redis/pom.xml b/google-cloud-redis/pom.xml
new file mode 100644
index 000000000000..086607f3959a
--- /dev/null
+++ b/google-cloud-redis/pom.xml
@@ -0,0 +1,92 @@
+
+
+ 4.0.0
+ google-cloud-redis
+ 0.46.1-alpha-SNAPSHOT
+ jar
+ Google Cloud Redis
+ https://github.com/GoogleCloudPlatform/google-cloud-java/tree/master/google-cloud-redis
+
+ Java idiomatic client for Google Cloud Redis.
+
+
+ com.google.cloud
+ google-cloud-pom
+ 0.46.1-alpha-SNAPSHOT
+
+
+ google-cloud-redis
+
+
+
+ ${project.groupId}
+ google-cloud-core
+
+
+ ${project.groupId}
+ google-cloud-core-grpc
+
+
+ com.google.api.grpc
+ proto-google-cloud-redis-v1beta1
+
+
+ com.google.api.grpc
+ grpc-google-cloud-redis-v1beta1
+
+
+ io.grpc
+ grpc-netty-shaded
+
+
+ io.grpc
+ grpc-stub
+
+
+ io.grpc
+ grpc-auth
+
+
+ com.google.auto.value
+ auto-value
+ compile
+
+
+ ${project.groupId}
+ google-cloud-core
+ test-jar
+ test
+
+
+ junit
+ junit
+ test
+
+
+ org.easymock
+ easymock
+ test
+
+
+ org.objenesis
+ objenesis
+ test
+
+
+ com.google.truth
+ truth
+ test
+
+
+ com.google.api.grpc
+ grpc-google-iam-v1
+ test
+
+
+ com.google.api
+ gax-grpc
+ testlib
+ test
+
+
+
diff --git a/google-cloud-redis/src/main/java/com/google/cloud/redis/v1beta1/CloudRedisClient.java b/google-cloud-redis/src/main/java/com/google/cloud/redis/v1beta1/CloudRedisClient.java
new file mode 100644
index 000000000000..c12db4788193
--- /dev/null
+++ b/google-cloud-redis/src/main/java/com/google/cloud/redis/v1beta1/CloudRedisClient.java
@@ -0,0 +1,1057 @@
+/*
+ * Copyright 2018 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
+ *
+ * https://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.
+ */
+package com.google.cloud.redis.v1beta1;
+
+import com.google.api.core.ApiFunction;
+import com.google.api.core.ApiFuture;
+import com.google.api.core.ApiFutures;
+import com.google.api.core.BetaApi;
+import com.google.api.gax.core.BackgroundResource;
+import com.google.api.gax.longrunning.OperationFuture;
+import com.google.api.gax.paging.AbstractFixedSizeCollection;
+import com.google.api.gax.paging.AbstractPage;
+import com.google.api.gax.paging.AbstractPagedListResponse;
+import com.google.api.gax.rpc.OperationCallable;
+import com.google.api.gax.rpc.PageContext;
+import com.google.api.gax.rpc.UnaryCallable;
+import com.google.cloud.redis.v1beta1.stub.CloudRedisStub;
+import com.google.cloud.redis.v1beta1.stub.CloudRedisStubSettings;
+import com.google.longrunning.Operation;
+import com.google.longrunning.OperationsClient;
+import com.google.protobuf.Any;
+import com.google.protobuf.Empty;
+import com.google.protobuf.FieldMask;
+import java.io.IOException;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+import javax.annotation.Generated;
+
+// AUTO-GENERATED DOCUMENTATION AND SERVICE
+/**
+ * Service Description: Configures and manages Cloud Memorystore for Redis instances
+ *
+ *
Google Cloud Memorystore for Redis v1beta1
+ *
+ *
The `redis.googleapis.com` service implements the Google Cloud Memorystore for Redis API and
+ * defines the following resource model for managing Redis instances: * The service works with a
+ * collection of cloud projects, named: `/projects/*` * Each project has a collection of
+ * available locations, named: `/locations/*` * Each location has a collection of Redis
+ * instances, named: `/instances/*` * As such, Redis instances are resources of the form:
+ * `/projects/{project_id}/locations/{location_id}/instances/{instance_id}`
+ *
+ *
Note that location_id must be refering to a GCP `region`; for example: *
+ * `projects/redpepper-1290/locations/us-central1/instances/my-redis`
+ *
+ *
This class provides the ability to make remote calls to the backing service through method
+ * calls that map to API methods. Sample code to get started:
+ *
+ *
Note: close() needs to be called on the cloudRedisClient object to clean up resources such as
+ * threads. In the example above, try-with-resources is used, which automatically calls close().
+ *
+ *
The surface of this class includes several types of Java methods for each of the API's
+ * methods:
+ *
+ *
+ *
A "flattened" method. With this type of method, the fields of the request type have been
+ * converted into function parameters. It may be the case that not all fields are available as
+ * parameters, and not every API method will have a flattened method entry point.
+ *
A "request object" method. This type of method only takes one parameter, a request object,
+ * which must be constructed before the call. Not every API method will have a request object
+ * method.
+ *
A "callable" method. This type of method takes no parameters and returns an immutable API
+ * callable object, which can be used to initiate calls to the service.
+ *
+ *
+ *
See the individual methods for example code.
+ *
+ *
Many parameters require resource names to be formatted in a particular way. To assist with
+ * these names, this class includes a format method for each type of name, and additionally a parse
+ * method to extract the individual identifiers contained within names that are returned.
+ *
+ *
This class can be customized by passing in a custom instance of CloudRedisSettings to
+ * create(). For example:
+ *
+ *
+ */
+@Generated("by gapic-generator")
+@BetaApi
+public class CloudRedisClient implements BackgroundResource {
+ private final CloudRedisSettings settings;
+ private final CloudRedisStub stub;
+ private final OperationsClient operationsClient;
+
+ /** Constructs an instance of CloudRedisClient with default settings. */
+ public static final CloudRedisClient create() throws IOException {
+ return create(CloudRedisSettings.newBuilder().build());
+ }
+
+ /**
+ * Constructs an instance of CloudRedisClient, using the given settings. The channels are created
+ * based on the settings passed in, or defaults for any settings that are not set.
+ */
+ public static final CloudRedisClient create(CloudRedisSettings settings) throws IOException {
+ return new CloudRedisClient(settings);
+ }
+
+ /**
+ * Constructs an instance of CloudRedisClient, using the given stub for making calls. This is for
+ * advanced usage - prefer to use CloudRedisSettings}.
+ */
+ @BetaApi("A restructuring of stub classes is planned, so this may break in the future")
+ public static final CloudRedisClient create(CloudRedisStub stub) {
+ return new CloudRedisClient(stub);
+ }
+
+ /**
+ * Constructs an instance of CloudRedisClient, using the given settings. This is protected so that
+ * it is easy to make a subclass, but otherwise, the static factory methods should be preferred.
+ */
+ protected CloudRedisClient(CloudRedisSettings settings) throws IOException {
+ this.settings = settings;
+ this.stub = ((CloudRedisStubSettings) settings.getStubSettings()).createStub();
+ this.operationsClient = OperationsClient.create(this.stub.getOperationsStub());
+ }
+
+ @BetaApi("A restructuring of stub classes is planned, so this may break in the future")
+ protected CloudRedisClient(CloudRedisStub stub) {
+ this.settings = null;
+ this.stub = stub;
+ this.operationsClient = OperationsClient.create(this.stub.getOperationsStub());
+ }
+
+ public final CloudRedisSettings getSettings() {
+ return settings;
+ }
+
+ @BetaApi("A restructuring of stub classes is planned, so this may break in the future")
+ public CloudRedisStub getStub() {
+ return stub;
+ }
+
+ /**
+ * Returns the OperationsClient that can be used to query the status of a long-running operation
+ * returned by another API method call.
+ */
+ public final OperationsClient getOperationsClient() {
+ return operationsClient;
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD
+ /**
+ * Lists all Redis instances owned by a project in either the specified location (region) or all
+ * locations.
+ *
+ *
The location should have the following format: *
+ * `projects/{project_id}/locations/{location_id}`
+ *
+ *
If `location_id` is specified as `-` (wildcard), then all regions available to the project
+ * are queried, and the results are aggregated.
+ *
+ *
+ *
+ * @param parent Required. The resource name of the instance location using the form:
+ * `projects/{project_id}/locations/{location_id}` where `location_id` refers to a GCP region
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final ListInstancesPagedResponse listInstances(LocationName parent) {
+ ListInstancesRequest request =
+ ListInstancesRequest.newBuilder()
+ .setParent(parent == null ? null : parent.toString())
+ .build();
+ return listInstances(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD
+ /**
+ * Lists all Redis instances owned by a project in either the specified location (region) or all
+ * locations.
+ *
+ *
The location should have the following format: *
+ * `projects/{project_id}/locations/{location_id}`
+ *
+ *
If `location_id` is specified as `-` (wildcard), then all regions available to the project
+ * are queried, and the results are aggregated.
+ *
+ *
+ *
+ * @param parent Required. The resource name of the instance location using the form:
+ * `projects/{project_id}/locations/{location_id}` where `location_id` refers to a GCP region
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final ListInstancesPagedResponse listInstances(String parent) {
+ ListInstancesRequest request = ListInstancesRequest.newBuilder().setParent(parent).build();
+ return listInstances(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD
+ /**
+ * Lists all Redis instances owned by a project in either the specified location (region) or all
+ * locations.
+ *
+ *
The location should have the following format: *
+ * `projects/{project_id}/locations/{location_id}`
+ *
+ *
If `location_id` is specified as `-` (wildcard), then all regions available to the project
+ * are queried, and the results are aggregated.
+ *
+ *
+ *
+ * @param request The request object containing all of the parameters for the API call.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final ListInstancesPagedResponse listInstances(ListInstancesRequest request) {
+ return listInstancesPagedCallable().call(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD
+ /**
+ * Lists all Redis instances owned by a project in either the specified location (region) or all
+ * locations.
+ *
+ *
The location should have the following format: *
+ * `projects/{project_id}/locations/{location_id}`
+ *
+ *
If `location_id` is specified as `-` (wildcard), then all regions available to the project
+ * are queried, and the results are aggregated.
+ *
+ *
+ */
+ public final UnaryCallable
+ listInstancesPagedCallable() {
+ return stub.listInstancesPagedCallable();
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD
+ /**
+ * Lists all Redis instances owned by a project in either the specified location (region) or all
+ * locations.
+ *
+ *
The location should have the following format: *
+ * `projects/{project_id}/locations/{location_id}`
+ *
+ *
If `location_id` is specified as `-` (wildcard), then all regions available to the project
+ * are queried, and the results are aggregated.
+ *
+ *
+ *
+ * @param name Required. Redis instance resource name using the form:
+ * `projects/{project_id}/locations/{location_id}/instances/{instance_id}` where `location_id`
+ * refers to a GCP region
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Instance getInstance(InstanceName name) {
+
+ GetInstanceRequest request =
+ GetInstanceRequest.newBuilder().setName(name == null ? null : name.toString()).build();
+ return getInstance(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD
+ /**
+ * Gets the details of a specific Redis instance.
+ *
+ *
+ *
+ * @param name Required. Redis instance resource name using the form:
+ * `projects/{project_id}/locations/{location_id}/instances/{instance_id}` where `location_id`
+ * refers to a GCP region
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Instance getInstance(String name) {
+
+ GetInstanceRequest request = GetInstanceRequest.newBuilder().setName(name).build();
+ return getInstance(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD
+ /**
+ * Gets the details of a specific Redis instance.
+ *
+ *
+ *
+ * @param request The request object containing all of the parameters for the API call.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ private final Instance getInstance(GetInstanceRequest request) {
+ return getInstanceCallable().call(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD
+ /**
+ * Gets the details of a specific Redis instance.
+ *
+ *
+ */
+ public final UnaryCallable getInstanceCallable() {
+ return stub.getInstanceCallable();
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD
+ /**
+ * Creates a Redis instance based on the specified tier and memory size.
+ *
+ *
By default, the instance is peered to the project's [default
+ * network](/compute/docs/networks-and-firewalls#networks).
+ *
+ *
The creation is executed asynchronously and callers may check the returned operation to
+ * track its progress. Once the operation is completed the Redis instance will be fully
+ * functional. Completed longrunning.Operation will contain the new instance object in the
+ * response field.
+ *
+ *
The returned operation is automatically deleted after a few hours, so there is no need to
+ * call DeleteOperation.
+ *
+ *
+ *
+ * @param parent Required. The resource name of the instance location using the form:
+ * `projects/{project_id}/locations/{location_id}` where `location_id` refers to a GCP region
+ * @param instanceId Required. The logical name of the Redis instance in the customer project with
+ * the following restrictions:
+ *
* Must contain only lowercase letters, numbers, and hyphens. * Must start with a
+ * letter. * Must be between 1-40 characters. * Must end with a number or a letter.
+ * * Must be unique within the customer project / location
+ * @param instance Required. A Redis [Instance] resource
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final OperationFuture createInstanceAsync(
+ LocationName parent, String instanceId, Instance instance) {
+
+ CreateInstanceRequest request =
+ CreateInstanceRequest.newBuilder()
+ .setParent(parent == null ? null : parent.toString())
+ .setInstanceId(instanceId)
+ .setInstance(instance)
+ .build();
+ return createInstanceAsync(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD
+ /**
+ * Creates a Redis instance based on the specified tier and memory size.
+ *
+ *
By default, the instance is peered to the project's [default
+ * network](/compute/docs/networks-and-firewalls#networks).
+ *
+ *
The creation is executed asynchronously and callers may check the returned operation to
+ * track its progress. Once the operation is completed the Redis instance will be fully
+ * functional. Completed longrunning.Operation will contain the new instance object in the
+ * response field.
+ *
+ *
The returned operation is automatically deleted after a few hours, so there is no need to
+ * call DeleteOperation.
+ *
+ *
+ *
+ * @param parent Required. The resource name of the instance location using the form:
+ * `projects/{project_id}/locations/{location_id}` where `location_id` refers to a GCP region
+ * @param instanceId Required. The logical name of the Redis instance in the customer project with
+ * the following restrictions:
+ *
* Must contain only lowercase letters, numbers, and hyphens. * Must start with a
+ * letter. * Must be between 1-40 characters. * Must end with a number or a letter.
+ * * Must be unique within the customer project / location
+ * @param instance Required. A Redis [Instance] resource
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final OperationFuture createInstanceAsync(
+ String parent, String instanceId, Instance instance) {
+
+ CreateInstanceRequest request =
+ CreateInstanceRequest.newBuilder()
+ .setParent(parent)
+ .setInstanceId(instanceId)
+ .setInstance(instance)
+ .build();
+ return createInstanceAsync(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD
+ /**
+ * Creates a Redis instance based on the specified tier and memory size.
+ *
+ *
By default, the instance is peered to the project's [default
+ * network](/compute/docs/networks-and-firewalls#networks).
+ *
+ *
The creation is executed asynchronously and callers may check the returned operation to
+ * track its progress. Once the operation is completed the Redis instance will be fully
+ * functional. Completed longrunning.Operation will contain the new instance object in the
+ * response field.
+ *
+ *
The returned operation is automatically deleted after a few hours, so there is no need to
+ * call DeleteOperation.
+ *
+ *
+ *
+ * @param request The request object containing all of the parameters for the API call.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final OperationFuture createInstanceAsync(CreateInstanceRequest request) {
+ return createInstanceOperationCallable().futureCall(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD
+ /**
+ * Creates a Redis instance based on the specified tier and memory size.
+ *
+ *
By default, the instance is peered to the project's [default
+ * network](/compute/docs/networks-and-firewalls#networks).
+ *
+ *
The creation is executed asynchronously and callers may check the returned operation to
+ * track its progress. Once the operation is completed the Redis instance will be fully
+ * functional. Completed longrunning.Operation will contain the new instance object in the
+ * response field.
+ *
+ *
The returned operation is automatically deleted after a few hours, so there is no need to
+ * call DeleteOperation.
+ *
+ *
+ */
+ public final OperationCallable
+ createInstanceOperationCallable() {
+ return stub.createInstanceOperationCallable();
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD
+ /**
+ * Creates a Redis instance based on the specified tier and memory size.
+ *
+ *
By default, the instance is peered to the project's [default
+ * network](/compute/docs/networks-and-firewalls#networks).
+ *
+ *
The creation is executed asynchronously and callers may check the returned operation to
+ * track its progress. Once the operation is completed the Redis instance will be fully
+ * functional. Completed longrunning.Operation will contain the new instance object in the
+ * response field.
+ *
+ *
The returned operation is automatically deleted after a few hours, so there is no need to
+ * call DeleteOperation.
+ *
+ *
+ */
+ public final UnaryCallable createInstanceCallable() {
+ return stub.createInstanceCallable();
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD
+ /**
+ * Updates the metadata and configuration of a specific Redis instance.
+ *
+ *
Completed longrunning.Operation will contain the new instance object in the response field.
+ * The returned operation is automatically deleted after a few hours, so there is no need to call
+ * DeleteOperation.
+ *
+ *
+ *
+ * @param updateMask Required. Mask of fields to update. At least one path must be supplied in
+ * this field. The elements of the repeated paths field may only include these fields from
+ * [Instance][CloudRedis.Instance]: * `display_name` * `labels` * `memory_size_gb`
+ * * `redis_config`
+ * @param instance Required. Update description. Only fields specified in update_mask are updated.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final OperationFuture updateInstanceAsync(
+ FieldMask updateMask, Instance instance) {
+
+ UpdateInstanceRequest request =
+ UpdateInstanceRequest.newBuilder().setUpdateMask(updateMask).setInstance(instance).build();
+ return updateInstanceAsync(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD
+ /**
+ * Updates the metadata and configuration of a specific Redis instance.
+ *
+ *
Completed longrunning.Operation will contain the new instance object in the response field.
+ * The returned operation is automatically deleted after a few hours, so there is no need to call
+ * DeleteOperation.
+ *
+ *
+ *
+ * @param request The request object containing all of the parameters for the API call.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final OperationFuture updateInstanceAsync(UpdateInstanceRequest request) {
+ return updateInstanceOperationCallable().futureCall(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD
+ /**
+ * Updates the metadata and configuration of a specific Redis instance.
+ *
+ *
Completed longrunning.Operation will contain the new instance object in the response field.
+ * The returned operation is automatically deleted after a few hours, so there is no need to call
+ * DeleteOperation.
+ *
+ *
+ */
+ public final OperationCallable
+ updateInstanceOperationCallable() {
+ return stub.updateInstanceOperationCallable();
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD
+ /**
+ * Updates the metadata and configuration of a specific Redis instance.
+ *
+ *
Completed longrunning.Operation will contain the new instance object in the response field.
+ * The returned operation is automatically deleted after a few hours, so there is no need to call
+ * DeleteOperation.
+ *
+ *
+ */
+ public final UnaryCallable updateInstanceCallable() {
+ return stub.updateInstanceCallable();
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD
+ /**
+ * Deletes a specific Redis instance. Instance stops serving and data is deleted.
+ *
+ *
+ *
+ * @param name Required. Redis instance resource name using the form:
+ * `projects/{project_id}/locations/{location_id}/instances/{instance_id}` where `location_id`
+ * refers to a GCP region
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final OperationFuture deleteInstanceAsync(InstanceName name) {
+
+ DeleteInstanceRequest request =
+ DeleteInstanceRequest.newBuilder().setName(name == null ? null : name.toString()).build();
+ return deleteInstanceAsync(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD
+ /**
+ * Deletes a specific Redis instance. Instance stops serving and data is deleted.
+ *
+ *
+ *
+ * @param name Required. Redis instance resource name using the form:
+ * `projects/{project_id}/locations/{location_id}/instances/{instance_id}` where `location_id`
+ * refers to a GCP region
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final OperationFuture deleteInstanceAsync(String name) {
+
+ DeleteInstanceRequest request = DeleteInstanceRequest.newBuilder().setName(name).build();
+ return deleteInstanceAsync(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD
+ /**
+ * Deletes a specific Redis instance. Instance stops serving and data is deleted.
+ *
+ *
+ *
+ * @param request The request object containing all of the parameters for the API call.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ private final OperationFuture deleteInstanceAsync(DeleteInstanceRequest request) {
+ return deleteInstanceOperationCallable().futureCall(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD
+ /**
+ * Deletes a specific Redis instance. Instance stops serving and data is deleted.
+ *
+ *
+ */
+ public final UnaryCallable deleteInstanceCallable() {
+ return stub.deleteInstanceCallable();
+ }
+
+ @Override
+ public final void close() {
+ stub.close();
+ }
+
+ @Override
+ public void shutdown() {
+ stub.shutdown();
+ }
+
+ @Override
+ public boolean isShutdown() {
+ return stub.isShutdown();
+ }
+
+ @Override
+ public boolean isTerminated() {
+ return stub.isTerminated();
+ }
+
+ @Override
+ public void shutdownNow() {
+ stub.shutdownNow();
+ }
+
+ @Override
+ public boolean awaitTermination(long duration, TimeUnit unit) throws InterruptedException {
+ return stub.awaitTermination(duration, unit);
+ }
+
+ public static class ListInstancesPagedResponse
+ extends AbstractPagedListResponse<
+ ListInstancesRequest, ListInstancesResponse, Instance, ListInstancesPage,
+ ListInstancesFixedSizeCollection> {
+
+ public static ApiFuture createAsync(
+ PageContext context,
+ ApiFuture futureResponse) {
+ ApiFuture futurePage =
+ ListInstancesPage.createEmptyPage().createPageAsync(context, futureResponse);
+ return ApiFutures.transform(
+ futurePage,
+ new ApiFunction() {
+ @Override
+ public ListInstancesPagedResponse apply(ListInstancesPage input) {
+ return new ListInstancesPagedResponse(input);
+ }
+ });
+ }
+
+ private ListInstancesPagedResponse(ListInstancesPage page) {
+ super(page, ListInstancesFixedSizeCollection.createEmptyCollection());
+ }
+ }
+
+ public static class ListInstancesPage
+ extends AbstractPage<
+ ListInstancesRequest, ListInstancesResponse, Instance, ListInstancesPage> {
+
+ private ListInstancesPage(
+ PageContext context,
+ ListInstancesResponse response) {
+ super(context, response);
+ }
+
+ private static ListInstancesPage createEmptyPage() {
+ return new ListInstancesPage(null, null);
+ }
+
+ @Override
+ protected ListInstancesPage createPage(
+ PageContext context,
+ ListInstancesResponse response) {
+ return new ListInstancesPage(context, response);
+ }
+
+ @Override
+ public ApiFuture createPageAsync(
+ PageContext context,
+ ApiFuture futureResponse) {
+ return super.createPageAsync(context, futureResponse);
+ }
+ }
+
+ public static class ListInstancesFixedSizeCollection
+ extends AbstractFixedSizeCollection<
+ ListInstancesRequest, ListInstancesResponse, Instance, ListInstancesPage,
+ ListInstancesFixedSizeCollection> {
+
+ private ListInstancesFixedSizeCollection(List pages, int collectionSize) {
+ super(pages, collectionSize);
+ }
+
+ private static ListInstancesFixedSizeCollection createEmptyCollection() {
+ return new ListInstancesFixedSizeCollection(null, 0);
+ }
+
+ @Override
+ protected ListInstancesFixedSizeCollection createCollection(
+ List pages, int collectionSize) {
+ return new ListInstancesFixedSizeCollection(pages, collectionSize);
+ }
+ }
+}
diff --git a/google-cloud-redis/src/main/java/com/google/cloud/redis/v1beta1/CloudRedisSettings.java b/google-cloud-redis/src/main/java/com/google/cloud/redis/v1beta1/CloudRedisSettings.java
new file mode 100644
index 000000000000..1d853addbaa8
--- /dev/null
+++ b/google-cloud-redis/src/main/java/com/google/cloud/redis/v1beta1/CloudRedisSettings.java
@@ -0,0 +1,259 @@
+/*
+ * Copyright 2018 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
+ *
+ * https://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.
+ */
+package com.google.cloud.redis.v1beta1;
+
+import static com.google.cloud.redis.v1beta1.CloudRedisClient.ListInstancesPagedResponse;
+
+import com.google.api.core.ApiFunction;
+import com.google.api.core.BetaApi;
+import com.google.api.gax.core.GoogleCredentialsProvider;
+import com.google.api.gax.core.InstantiatingExecutorProvider;
+import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider;
+import com.google.api.gax.rpc.ApiClientHeaderProvider;
+import com.google.api.gax.rpc.ClientContext;
+import com.google.api.gax.rpc.ClientSettings;
+import com.google.api.gax.rpc.OperationCallSettings;
+import com.google.api.gax.rpc.PagedCallSettings;
+import com.google.api.gax.rpc.TransportChannelProvider;
+import com.google.api.gax.rpc.UnaryCallSettings;
+import com.google.cloud.redis.v1beta1.stub.CloudRedisStubSettings;
+import com.google.longrunning.Operation;
+import com.google.protobuf.Any;
+import com.google.protobuf.Empty;
+import java.io.IOException;
+import java.util.List;
+import javax.annotation.Generated;
+
+// AUTO-GENERATED DOCUMENTATION AND CLASS
+/**
+ * Settings class to configure an instance of {@link CloudRedisClient}.
+ *
+ *
The default instance has everything set to sensible defaults:
+ *
+ *
+ *
The default service address (redis.googleapis.com) and default port (443) are used.
+ *
Credentials are acquired automatically through Application Default Credentials.
+ *
Retries are configured for idempotent methods but not for non-idempotent methods.
+ *
+ *
+ *
The builder of this class is recursive, so contained classes are themselves builders. When
+ * build() is called, the tree of builders is called to create the complete settings object. For
+ * example, to set the total timeout of getInstance to 30 seconds:
+ *
+ *
+ */
+@Generated("by gapic-generator")
+@BetaApi
+public class CloudRedisSettings extends ClientSettings {
+ /** Returns the object with the settings used for calls to listInstances. */
+ public PagedCallSettings
+ listInstancesSettings() {
+ return ((CloudRedisStubSettings) getStubSettings()).listInstancesSettings();
+ }
+
+ /** Returns the object with the settings used for calls to getInstance. */
+ public UnaryCallSettings getInstanceSettings() {
+ return ((CloudRedisStubSettings) getStubSettings()).getInstanceSettings();
+ }
+
+ /** Returns the object with the settings used for calls to createInstance. */
+ public UnaryCallSettings createInstanceSettings() {
+ return ((CloudRedisStubSettings) getStubSettings()).createInstanceSettings();
+ }
+
+ /** Returns the object with the settings used for calls to createInstance. */
+ public OperationCallSettings
+ createInstanceOperationSettings() {
+ return ((CloudRedisStubSettings) getStubSettings()).createInstanceOperationSettings();
+ }
+
+ /** Returns the object with the settings used for calls to updateInstance. */
+ public UnaryCallSettings updateInstanceSettings() {
+ return ((CloudRedisStubSettings) getStubSettings()).updateInstanceSettings();
+ }
+
+ /** Returns the object with the settings used for calls to updateInstance. */
+ public OperationCallSettings
+ updateInstanceOperationSettings() {
+ return ((CloudRedisStubSettings) getStubSettings()).updateInstanceOperationSettings();
+ }
+
+ /** Returns the object with the settings used for calls to deleteInstance. */
+ public UnaryCallSettings deleteInstanceSettings() {
+ return ((CloudRedisStubSettings) getStubSettings()).deleteInstanceSettings();
+ }
+
+ /** Returns the object with the settings used for calls to deleteInstance. */
+ public OperationCallSettings
+ deleteInstanceOperationSettings() {
+ return ((CloudRedisStubSettings) getStubSettings()).deleteInstanceOperationSettings();
+ }
+
+ public static final CloudRedisSettings create(CloudRedisStubSettings stub) throws IOException {
+ return new CloudRedisSettings.Builder(stub.toBuilder()).build();
+ }
+
+ /** Returns a builder for the default ExecutorProvider for this service. */
+ public static InstantiatingExecutorProvider.Builder defaultExecutorProviderBuilder() {
+ return CloudRedisStubSettings.defaultExecutorProviderBuilder();
+ }
+
+ /** Returns the default service endpoint. */
+ public static String getDefaultEndpoint() {
+ return CloudRedisStubSettings.getDefaultEndpoint();
+ }
+
+ /** Returns the default service scopes. */
+ public static List getDefaultServiceScopes() {
+ return CloudRedisStubSettings.getDefaultServiceScopes();
+ }
+
+ /** Returns a builder for the default credentials for this service. */
+ public static GoogleCredentialsProvider.Builder defaultCredentialsProviderBuilder() {
+ return CloudRedisStubSettings.defaultCredentialsProviderBuilder();
+ }
+
+ /** Returns a builder for the default ChannelProvider for this service. */
+ public static InstantiatingGrpcChannelProvider.Builder defaultGrpcTransportProviderBuilder() {
+ return CloudRedisStubSettings.defaultGrpcTransportProviderBuilder();
+ }
+
+ public static TransportChannelProvider defaultTransportChannelProvider() {
+ return CloudRedisStubSettings.defaultTransportChannelProvider();
+ }
+
+ @BetaApi("The surface for customizing headers is not stable yet and may change in the future.")
+ public static ApiClientHeaderProvider.Builder defaultApiClientHeaderProviderBuilder() {
+ return CloudRedisStubSettings.defaultApiClientHeaderProviderBuilder();
+ }
+
+ /** Returns a new builder for this class. */
+ public static Builder newBuilder() {
+ return Builder.createDefault();
+ }
+
+ /** Returns a new builder for this class. */
+ public static Builder newBuilder(ClientContext clientContext) {
+ return new Builder(clientContext);
+ }
+
+ /** Returns a builder containing all the values of this settings class. */
+ public Builder toBuilder() {
+ return new Builder(this);
+ }
+
+ protected CloudRedisSettings(Builder settingsBuilder) throws IOException {
+ super(settingsBuilder);
+ }
+
+ /** Builder for CloudRedisSettings. */
+ public static class Builder extends ClientSettings.Builder {
+ protected Builder() throws IOException {
+ this((ClientContext) null);
+ }
+
+ protected Builder(ClientContext clientContext) {
+ super(CloudRedisStubSettings.newBuilder(clientContext));
+ }
+
+ private static Builder createDefault() {
+ return new Builder(CloudRedisStubSettings.newBuilder());
+ }
+
+ protected Builder(CloudRedisSettings settings) {
+ super(settings.getStubSettings().toBuilder());
+ }
+
+ protected Builder(CloudRedisStubSettings.Builder stubSettings) {
+ super(stubSettings);
+ }
+
+ public CloudRedisStubSettings.Builder getStubSettingsBuilder() {
+ return ((CloudRedisStubSettings.Builder) getStubSettings());
+ }
+
+ // NEXT_MAJOR_VER: remove 'throws Exception'
+ /**
+ * Applies the given settings updater function to all of the unary API methods in this service.
+ *
+ *
Note: This method does not support applying settings to streaming methods.
+ */
+ public Builder applyToAllUnaryMethods(
+ ApiFunction, Void> settingsUpdater) throws Exception {
+ super.applyToAllUnaryMethods(
+ getStubSettingsBuilder().unaryMethodSettingsBuilders(), settingsUpdater);
+ return this;
+ }
+
+ /** Returns the builder for the settings used for calls to listInstances. */
+ public PagedCallSettings.Builder<
+ ListInstancesRequest, ListInstancesResponse, ListInstancesPagedResponse>
+ listInstancesSettings() {
+ return getStubSettingsBuilder().listInstancesSettings();
+ }
+
+ /** Returns the builder for the settings used for calls to getInstance. */
+ public UnaryCallSettings.Builder getInstanceSettings() {
+ return getStubSettingsBuilder().getInstanceSettings();
+ }
+
+ /** Returns the builder for the settings used for calls to createInstance. */
+ public UnaryCallSettings.Builder createInstanceSettings() {
+ return getStubSettingsBuilder().createInstanceSettings();
+ }
+
+ /** Returns the builder for the settings used for calls to createInstance. */
+ public OperationCallSettings.Builder
+ createInstanceOperationSettings() {
+ return getStubSettingsBuilder().createInstanceOperationSettings();
+ }
+
+ /** Returns the builder for the settings used for calls to updateInstance. */
+ public UnaryCallSettings.Builder updateInstanceSettings() {
+ return getStubSettingsBuilder().updateInstanceSettings();
+ }
+
+ /** Returns the builder for the settings used for calls to updateInstance. */
+ public OperationCallSettings.Builder
+ updateInstanceOperationSettings() {
+ return getStubSettingsBuilder().updateInstanceOperationSettings();
+ }
+
+ /** Returns the builder for the settings used for calls to deleteInstance. */
+ public UnaryCallSettings.Builder deleteInstanceSettings() {
+ return getStubSettingsBuilder().deleteInstanceSettings();
+ }
+
+ /** Returns the builder for the settings used for calls to deleteInstance. */
+ public OperationCallSettings.Builder
+ deleteInstanceOperationSettings() {
+ return getStubSettingsBuilder().deleteInstanceOperationSettings();
+ }
+
+ @Override
+ public CloudRedisSettings build() throws IOException {
+ return new CloudRedisSettings(this);
+ }
+ }
+}
diff --git a/google-cloud-redis/src/main/java/com/google/cloud/redis/v1beta1/package-info.java b/google-cloud-redis/src/main/java/com/google/cloud/redis/v1beta1/package-info.java
new file mode 100644
index 000000000000..417e81179934
--- /dev/null
+++ b/google-cloud-redis/src/main/java/com/google/cloud/redis/v1beta1/package-info.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2018 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
+ *
+ * https://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.
+ */
+
+/**
+ * A client to Google Cloud Memorystore for Redis API.
+ *
+ *
The interfaces provided are listed below, along with usage samples.
+ *
+ *
Service Description: Configures and manages Cloud Memorystore for Redis instances
+ *
+ *
Google Cloud Memorystore for Redis v1beta1
+ *
+ *
The `redis.googleapis.com` service implements the Google Cloud Memorystore for Redis API and
+ * defines the following resource model for managing Redis instances: * The service works with a
+ * collection of cloud projects, named: `/projects/*` * Each project has a collection of
+ * available locations, named: `/locations/*` * Each location has a collection of Redis
+ * instances, named: `/instances/*` * As such, Redis instances are resources of the form:
+ * `/projects/{project_id}/locations/{location_id}/instances/{instance_id}`
+ *
+ *
Note that location_id must be refering to a GCP `region`; for example: *
+ * `projects/redpepper-1290/locations/us-central1/instances/my-redis`
+ *
+ *
+ */
+package com.google.cloud.redis.v1beta1;
diff --git a/google-cloud-redis/src/main/java/com/google/cloud/redis/v1beta1/stub/CloudRedisStub.java b/google-cloud-redis/src/main/java/com/google/cloud/redis/v1beta1/stub/CloudRedisStub.java
new file mode 100644
index 000000000000..4043840bf60c
--- /dev/null
+++ b/google-cloud-redis/src/main/java/com/google/cloud/redis/v1beta1/stub/CloudRedisStub.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2018 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
+ *
+ * https://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.
+ */
+package com.google.cloud.redis.v1beta1.stub;
+
+import static com.google.cloud.redis.v1beta1.CloudRedisClient.ListInstancesPagedResponse;
+
+import com.google.api.core.BetaApi;
+import com.google.api.gax.core.BackgroundResource;
+import com.google.api.gax.rpc.OperationCallable;
+import com.google.api.gax.rpc.UnaryCallable;
+import com.google.cloud.redis.v1beta1.CreateInstanceRequest;
+import com.google.cloud.redis.v1beta1.DeleteInstanceRequest;
+import com.google.cloud.redis.v1beta1.GetInstanceRequest;
+import com.google.cloud.redis.v1beta1.Instance;
+import com.google.cloud.redis.v1beta1.ListInstancesRequest;
+import com.google.cloud.redis.v1beta1.ListInstancesResponse;
+import com.google.cloud.redis.v1beta1.UpdateInstanceRequest;
+import com.google.longrunning.Operation;
+import com.google.longrunning.stub.OperationsStub;
+import com.google.protobuf.Any;
+import com.google.protobuf.Empty;
+import javax.annotation.Generated;
+
+// AUTO-GENERATED DOCUMENTATION AND CLASS
+/**
+ * Base stub class for Google Cloud Memorystore for Redis API.
+ *
+ *
This class is for advanced usage and reflects the underlying API directly.
+ */
+@Generated("by gapic-generator")
+@BetaApi("A restructuring of stub classes is planned, so this may break in the future")
+public abstract class CloudRedisStub implements BackgroundResource {
+
+ public OperationsStub getOperationsStub() {
+ throw new UnsupportedOperationException("Not implemented: getOperationsStub()");
+ }
+
+ public UnaryCallable
+ listInstancesPagedCallable() {
+ throw new UnsupportedOperationException("Not implemented: listInstancesPagedCallable()");
+ }
+
+ public UnaryCallable listInstancesCallable() {
+ throw new UnsupportedOperationException("Not implemented: listInstancesCallable()");
+ }
+
+ public UnaryCallable getInstanceCallable() {
+ throw new UnsupportedOperationException("Not implemented: getInstanceCallable()");
+ }
+
+ public OperationCallable createInstanceOperationCallable() {
+ throw new UnsupportedOperationException("Not implemented: createInstanceOperationCallable()");
+ }
+
+ public UnaryCallable createInstanceCallable() {
+ throw new UnsupportedOperationException("Not implemented: createInstanceCallable()");
+ }
+
+ public OperationCallable updateInstanceOperationCallable() {
+ throw new UnsupportedOperationException("Not implemented: updateInstanceOperationCallable()");
+ }
+
+ public UnaryCallable updateInstanceCallable() {
+ throw new UnsupportedOperationException("Not implemented: updateInstanceCallable()");
+ }
+
+ public OperationCallable deleteInstanceOperationCallable() {
+ throw new UnsupportedOperationException("Not implemented: deleteInstanceOperationCallable()");
+ }
+
+ public UnaryCallable deleteInstanceCallable() {
+ throw new UnsupportedOperationException("Not implemented: deleteInstanceCallable()");
+ }
+
+ @Override
+ public abstract void close();
+}
diff --git a/google-cloud-redis/src/main/java/com/google/cloud/redis/v1beta1/stub/CloudRedisStubSettings.java b/google-cloud-redis/src/main/java/com/google/cloud/redis/v1beta1/stub/CloudRedisStubSettings.java
new file mode 100644
index 000000000000..3b9b51a26deb
--- /dev/null
+++ b/google-cloud-redis/src/main/java/com/google/cloud/redis/v1beta1/stub/CloudRedisStubSettings.java
@@ -0,0 +1,566 @@
+/*
+ * Copyright 2018 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
+ *
+ * https://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.
+ */
+package com.google.cloud.redis.v1beta1.stub;
+
+import static com.google.cloud.redis.v1beta1.CloudRedisClient.ListInstancesPagedResponse;
+
+import com.google.api.core.ApiFunction;
+import com.google.api.core.ApiFuture;
+import com.google.api.core.BetaApi;
+import com.google.api.gax.core.GaxProperties;
+import com.google.api.gax.core.GoogleCredentialsProvider;
+import com.google.api.gax.core.InstantiatingExecutorProvider;
+import com.google.api.gax.grpc.GaxGrpcProperties;
+import com.google.api.gax.grpc.GrpcTransportChannel;
+import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider;
+import com.google.api.gax.grpc.ProtoOperationTransformers;
+import com.google.api.gax.longrunning.OperationSnapshot;
+import com.google.api.gax.longrunning.OperationTimedPollAlgorithm;
+import com.google.api.gax.retrying.RetrySettings;
+import com.google.api.gax.rpc.ApiCallContext;
+import com.google.api.gax.rpc.ApiClientHeaderProvider;
+import com.google.api.gax.rpc.ClientContext;
+import com.google.api.gax.rpc.OperationCallSettings;
+import com.google.api.gax.rpc.PageContext;
+import com.google.api.gax.rpc.PagedCallSettings;
+import com.google.api.gax.rpc.PagedListDescriptor;
+import com.google.api.gax.rpc.PagedListResponseFactory;
+import com.google.api.gax.rpc.StatusCode;
+import com.google.api.gax.rpc.StubSettings;
+import com.google.api.gax.rpc.TransportChannelProvider;
+import com.google.api.gax.rpc.UnaryCallSettings;
+import com.google.api.gax.rpc.UnaryCallable;
+import com.google.cloud.redis.v1beta1.CreateInstanceRequest;
+import com.google.cloud.redis.v1beta1.DeleteInstanceRequest;
+import com.google.cloud.redis.v1beta1.GetInstanceRequest;
+import com.google.cloud.redis.v1beta1.Instance;
+import com.google.cloud.redis.v1beta1.ListInstancesRequest;
+import com.google.cloud.redis.v1beta1.ListInstancesResponse;
+import com.google.cloud.redis.v1beta1.UpdateInstanceRequest;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Lists;
+import com.google.longrunning.Operation;
+import com.google.protobuf.Any;
+import com.google.protobuf.Empty;
+import java.io.IOException;
+import java.util.List;
+import javax.annotation.Generated;
+import org.threeten.bp.Duration;
+
+// AUTO-GENERATED DOCUMENTATION AND CLASS
+/**
+ * Settings class to configure an instance of {@link CloudRedisStub}.
+ *
+ *
The default instance has everything set to sensible defaults:
+ *
+ *
+ *
The default service address (redis.googleapis.com) and default port (443) are used.
+ *
Credentials are acquired automatically through Application Default Credentials.
+ *
Retries are configured for idempotent methods but not for non-idempotent methods.
+ *
+ *
+ *
The builder of this class is recursive, so contained classes are themselves builders. When
+ * build() is called, the tree of builders is called to create the complete settings object. For
+ * example, to set the total timeout of getInstance to 30 seconds:
+ *
+ *
+ */
+@Generated("by gapic-generator")
+@BetaApi
+public class CloudRedisStubSettings extends StubSettings {
+ /** The default scopes of the service. */
+ private static final ImmutableList DEFAULT_SERVICE_SCOPES =
+ ImmutableList.builder().add("https://www.googleapis.com/auth/cloud-platform").build();
+
+ private final PagedCallSettings<
+ ListInstancesRequest, ListInstancesResponse, ListInstancesPagedResponse>
+ listInstancesSettings;
+ private final UnaryCallSettings getInstanceSettings;
+ private final UnaryCallSettings createInstanceSettings;
+ private final OperationCallSettings
+ createInstanceOperationSettings;
+ private final UnaryCallSettings updateInstanceSettings;
+ private final OperationCallSettings
+ updateInstanceOperationSettings;
+ private final UnaryCallSettings deleteInstanceSettings;
+ private final OperationCallSettings
+ deleteInstanceOperationSettings;
+
+ /** Returns the object with the settings used for calls to listInstances. */
+ public PagedCallSettings
+ listInstancesSettings() {
+ return listInstancesSettings;
+ }
+
+ /** Returns the object with the settings used for calls to getInstance. */
+ public UnaryCallSettings getInstanceSettings() {
+ return getInstanceSettings;
+ }
+
+ /** Returns the object with the settings used for calls to createInstance. */
+ public UnaryCallSettings createInstanceSettings() {
+ return createInstanceSettings;
+ }
+
+ /** Returns the object with the settings used for calls to createInstance. */
+ public OperationCallSettings
+ createInstanceOperationSettings() {
+ return createInstanceOperationSettings;
+ }
+
+ /** Returns the object with the settings used for calls to updateInstance. */
+ public UnaryCallSettings updateInstanceSettings() {
+ return updateInstanceSettings;
+ }
+
+ /** Returns the object with the settings used for calls to updateInstance. */
+ public OperationCallSettings
+ updateInstanceOperationSettings() {
+ return updateInstanceOperationSettings;
+ }
+
+ /** Returns the object with the settings used for calls to deleteInstance. */
+ public UnaryCallSettings deleteInstanceSettings() {
+ return deleteInstanceSettings;
+ }
+
+ /** Returns the object with the settings used for calls to deleteInstance. */
+ public OperationCallSettings
+ deleteInstanceOperationSettings() {
+ return deleteInstanceOperationSettings;
+ }
+
+ @BetaApi("A restructuring of stub classes is planned, so this may break in the future")
+ public CloudRedisStub createStub() throws IOException {
+ if (getTransportChannelProvider()
+ .getTransportName()
+ .equals(GrpcTransportChannel.getGrpcTransportName())) {
+ return GrpcCloudRedisStub.create(this);
+ } else {
+ throw new UnsupportedOperationException(
+ "Transport not supported: " + getTransportChannelProvider().getTransportName());
+ }
+ }
+
+ /** Returns a builder for the default ExecutorProvider for this service. */
+ public static InstantiatingExecutorProvider.Builder defaultExecutorProviderBuilder() {
+ return InstantiatingExecutorProvider.newBuilder();
+ }
+
+ /** Returns the default service endpoint. */
+ public static String getDefaultEndpoint() {
+ return "redis.googleapis.com:443";
+ }
+
+ /** Returns the default service scopes. */
+ public static List getDefaultServiceScopes() {
+ return DEFAULT_SERVICE_SCOPES;
+ }
+
+ /** Returns a builder for the default credentials for this service. */
+ public static GoogleCredentialsProvider.Builder defaultCredentialsProviderBuilder() {
+ return GoogleCredentialsProvider.newBuilder().setScopesToApply(DEFAULT_SERVICE_SCOPES);
+ }
+
+ /** Returns a builder for the default ChannelProvider for this service. */
+ public static InstantiatingGrpcChannelProvider.Builder defaultGrpcTransportProviderBuilder() {
+ return InstantiatingGrpcChannelProvider.newBuilder();
+ }
+
+ public static TransportChannelProvider defaultTransportChannelProvider() {
+ return defaultGrpcTransportProviderBuilder().build();
+ }
+
+ @BetaApi("The surface for customizing headers is not stable yet and may change in the future.")
+ public static ApiClientHeaderProvider.Builder defaultApiClientHeaderProviderBuilder() {
+ return ApiClientHeaderProvider.newBuilder()
+ .setGeneratedLibToken(
+ "gapic", GaxProperties.getLibraryVersion(CloudRedisStubSettings.class))
+ .setTransportToken(
+ GaxGrpcProperties.getGrpcTokenName(), GaxGrpcProperties.getGrpcVersion());
+ }
+
+ /** Returns a new builder for this class. */
+ public static Builder newBuilder() {
+ return Builder.createDefault();
+ }
+
+ /** Returns a new builder for this class. */
+ public static Builder newBuilder(ClientContext clientContext) {
+ return new Builder(clientContext);
+ }
+
+ /** Returns a builder containing all the values of this settings class. */
+ public Builder toBuilder() {
+ return new Builder(this);
+ }
+
+ protected CloudRedisStubSettings(Builder settingsBuilder) throws IOException {
+ super(settingsBuilder);
+
+ listInstancesSettings = settingsBuilder.listInstancesSettings().build();
+ getInstanceSettings = settingsBuilder.getInstanceSettings().build();
+ createInstanceSettings = settingsBuilder.createInstanceSettings().build();
+ createInstanceOperationSettings = settingsBuilder.createInstanceOperationSettings().build();
+ updateInstanceSettings = settingsBuilder.updateInstanceSettings().build();
+ updateInstanceOperationSettings = settingsBuilder.updateInstanceOperationSettings().build();
+ deleteInstanceSettings = settingsBuilder.deleteInstanceSettings().build();
+ deleteInstanceOperationSettings = settingsBuilder.deleteInstanceOperationSettings().build();
+ }
+
+ private static final PagedListDescriptor
+ LIST_INSTANCES_PAGE_STR_DESC =
+ new PagedListDescriptor() {
+ @Override
+ public String emptyToken() {
+ return "";
+ }
+
+ @Override
+ public ListInstancesRequest injectToken(ListInstancesRequest payload, String token) {
+ return ListInstancesRequest.newBuilder(payload).setPageToken(token).build();
+ }
+
+ @Override
+ public ListInstancesRequest injectPageSize(ListInstancesRequest payload, int pageSize) {
+ return ListInstancesRequest.newBuilder(payload).setPageSize(pageSize).build();
+ }
+
+ @Override
+ public Integer extractPageSize(ListInstancesRequest payload) {
+ return payload.getPageSize();
+ }
+
+ @Override
+ public String extractNextToken(ListInstancesResponse payload) {
+ return payload.getNextPageToken();
+ }
+
+ @Override
+ public Iterable extractResources(ListInstancesResponse payload) {
+ return payload.getInstancesList();
+ }
+ };
+
+ private static final PagedListResponseFactory<
+ ListInstancesRequest, ListInstancesResponse, ListInstancesPagedResponse>
+ LIST_INSTANCES_PAGE_STR_FACT =
+ new PagedListResponseFactory<
+ ListInstancesRequest, ListInstancesResponse, ListInstancesPagedResponse>() {
+ @Override
+ public ApiFuture getFuturePagedResponse(
+ UnaryCallable callable,
+ ListInstancesRequest request,
+ ApiCallContext context,
+ ApiFuture futureResponse) {
+ PageContext pageContext =
+ PageContext.create(callable, LIST_INSTANCES_PAGE_STR_DESC, request, context);
+ return ListInstancesPagedResponse.createAsync(pageContext, futureResponse);
+ }
+ };
+
+ /** Builder for CloudRedisStubSettings. */
+ public static class Builder extends StubSettings.Builder {
+ private final ImmutableList> unaryMethodSettingsBuilders;
+
+ private final PagedCallSettings.Builder<
+ ListInstancesRequest, ListInstancesResponse, ListInstancesPagedResponse>
+ listInstancesSettings;
+ private final UnaryCallSettings.Builder getInstanceSettings;
+ private final UnaryCallSettings.Builder
+ createInstanceSettings;
+ private final OperationCallSettings.Builder
+ createInstanceOperationSettings;
+ private final UnaryCallSettings.Builder
+ updateInstanceSettings;
+ private final OperationCallSettings.Builder
+ updateInstanceOperationSettings;
+ private final UnaryCallSettings.Builder
+ deleteInstanceSettings;
+ private final OperationCallSettings.Builder
+ deleteInstanceOperationSettings;
+
+ private static final ImmutableMap>
+ RETRYABLE_CODE_DEFINITIONS;
+
+ static {
+ ImmutableMap.Builder> definitions =
+ ImmutableMap.builder();
+ definitions.put(
+ "idempotent",
+ ImmutableSet.copyOf(
+ Lists.newArrayList(
+ StatusCode.Code.DEADLINE_EXCEEDED, StatusCode.Code.UNAVAILABLE)));
+ definitions.put("non_idempotent", ImmutableSet.copyOf(Lists.newArrayList()));
+ RETRYABLE_CODE_DEFINITIONS = definitions.build();
+ }
+
+ private static final ImmutableMap RETRY_PARAM_DEFINITIONS;
+
+ static {
+ ImmutableMap.Builder definitions = ImmutableMap.builder();
+ RetrySettings settings = null;
+ settings =
+ RetrySettings.newBuilder()
+ .setInitialRetryDelay(Duration.ofMillis(100L))
+ .setRetryDelayMultiplier(1.3)
+ .setMaxRetryDelay(Duration.ofMillis(60000L))
+ .setInitialRpcTimeout(Duration.ofMillis(20000L))
+ .setRpcTimeoutMultiplier(1.0)
+ .setMaxRpcTimeout(Duration.ofMillis(20000L))
+ .setTotalTimeout(Duration.ofMillis(600000L))
+ .build();
+ definitions.put("default", settings);
+ RETRY_PARAM_DEFINITIONS = definitions.build();
+ }
+
+ protected Builder() {
+ this((ClientContext) null);
+ }
+
+ protected Builder(ClientContext clientContext) {
+ super(clientContext);
+
+ listInstancesSettings = PagedCallSettings.newBuilder(LIST_INSTANCES_PAGE_STR_FACT);
+
+ getInstanceSettings = UnaryCallSettings.newUnaryCallSettingsBuilder();
+
+ createInstanceSettings = UnaryCallSettings.newUnaryCallSettingsBuilder();
+
+ createInstanceOperationSettings = OperationCallSettings.newBuilder();
+
+ updateInstanceSettings = UnaryCallSettings.newUnaryCallSettingsBuilder();
+
+ updateInstanceOperationSettings = OperationCallSettings.newBuilder();
+
+ deleteInstanceSettings = UnaryCallSettings.newUnaryCallSettingsBuilder();
+
+ deleteInstanceOperationSettings = OperationCallSettings.newBuilder();
+
+ unaryMethodSettingsBuilders =
+ ImmutableList.>of(
+ listInstancesSettings,
+ getInstanceSettings,
+ createInstanceSettings,
+ updateInstanceSettings,
+ deleteInstanceSettings);
+
+ initDefaults(this);
+ }
+
+ private static Builder createDefault() {
+ Builder builder = new Builder((ClientContext) null);
+ builder.setTransportChannelProvider(defaultTransportChannelProvider());
+ builder.setCredentialsProvider(defaultCredentialsProviderBuilder().build());
+ builder.setInternalHeaderProvider(defaultApiClientHeaderProviderBuilder().build());
+ builder.setEndpoint(getDefaultEndpoint());
+ return initDefaults(builder);
+ }
+
+ private static Builder initDefaults(Builder builder) {
+
+ builder
+ .listInstancesSettings()
+ .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("non_idempotent"))
+ .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("default"));
+
+ builder
+ .getInstanceSettings()
+ .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("non_idempotent"))
+ .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("default"));
+
+ builder
+ .createInstanceSettings()
+ .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("non_idempotent"))
+ .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("default"));
+
+ builder
+ .updateInstanceSettings()
+ .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("non_idempotent"))
+ .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("default"));
+
+ builder
+ .deleteInstanceSettings()
+ .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("non_idempotent"))
+ .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("default"));
+ builder
+ .createInstanceOperationSettings()
+ .setInitialCallSettings(
+ UnaryCallSettings
+ .newUnaryCallSettingsBuilder()
+ .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("idempotent"))
+ .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("default"))
+ .build())
+ .setResponseTransformer(
+ ProtoOperationTransformers.ResponseTransformer.create(Instance.class))
+ .setMetadataTransformer(ProtoOperationTransformers.MetadataTransformer.create(Any.class))
+ .setPollingAlgorithm(
+ OperationTimedPollAlgorithm.create(
+ RetrySettings.newBuilder()
+ .setInitialRetryDelay(Duration.ofMillis(60000L))
+ .setRetryDelayMultiplier(1.5)
+ .setMaxRetryDelay(Duration.ofMillis(360000L))
+ .setInitialRpcTimeout(Duration.ZERO) // ignored
+ .setRpcTimeoutMultiplier(1.0) // ignored
+ .setMaxRpcTimeout(Duration.ZERO) // ignored
+ .setTotalTimeout(Duration.ofMillis(1200000L))
+ .build()));
+ builder
+ .updateInstanceOperationSettings()
+ .setInitialCallSettings(
+ UnaryCallSettings
+ .newUnaryCallSettingsBuilder()
+ .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("idempotent"))
+ .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("default"))
+ .build())
+ .setResponseTransformer(
+ ProtoOperationTransformers.ResponseTransformer.create(Instance.class))
+ .setMetadataTransformer(ProtoOperationTransformers.MetadataTransformer.create(Any.class))
+ .setPollingAlgorithm(
+ OperationTimedPollAlgorithm.create(
+ RetrySettings.newBuilder()
+ .setInitialRetryDelay(Duration.ofMillis(60000L))
+ .setRetryDelayMultiplier(1.5)
+ .setMaxRetryDelay(Duration.ofMillis(360000L))
+ .setInitialRpcTimeout(Duration.ZERO) // ignored
+ .setRpcTimeoutMultiplier(1.0) // ignored
+ .setMaxRpcTimeout(Duration.ZERO) // ignored
+ .setTotalTimeout(Duration.ofMillis(1200000L))
+ .build()));
+ builder
+ .deleteInstanceOperationSettings()
+ .setInitialCallSettings(
+ UnaryCallSettings
+ .newUnaryCallSettingsBuilder()
+ .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("idempotent"))
+ .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("default"))
+ .build())
+ .setResponseTransformer(
+ ProtoOperationTransformers.ResponseTransformer.create(Empty.class))
+ .setMetadataTransformer(ProtoOperationTransformers.MetadataTransformer.create(Any.class))
+ .setPollingAlgorithm(
+ OperationTimedPollAlgorithm.create(
+ RetrySettings.newBuilder()
+ .setInitialRetryDelay(Duration.ofMillis(60000L))
+ .setRetryDelayMultiplier(1.5)
+ .setMaxRetryDelay(Duration.ofMillis(360000L))
+ .setInitialRpcTimeout(Duration.ZERO) // ignored
+ .setRpcTimeoutMultiplier(1.0) // ignored
+ .setMaxRpcTimeout(Duration.ZERO) // ignored
+ .setTotalTimeout(Duration.ofMillis(1200000L))
+ .build()));
+
+ return builder;
+ }
+
+ protected Builder(CloudRedisStubSettings settings) {
+ super(settings);
+
+ listInstancesSettings = settings.listInstancesSettings.toBuilder();
+ getInstanceSettings = settings.getInstanceSettings.toBuilder();
+ createInstanceSettings = settings.createInstanceSettings.toBuilder();
+ createInstanceOperationSettings = settings.createInstanceOperationSettings.toBuilder();
+ updateInstanceSettings = settings.updateInstanceSettings.toBuilder();
+ updateInstanceOperationSettings = settings.updateInstanceOperationSettings.toBuilder();
+ deleteInstanceSettings = settings.deleteInstanceSettings.toBuilder();
+ deleteInstanceOperationSettings = settings.deleteInstanceOperationSettings.toBuilder();
+
+ unaryMethodSettingsBuilders =
+ ImmutableList.>of(
+ listInstancesSettings,
+ getInstanceSettings,
+ createInstanceSettings,
+ updateInstanceSettings,
+ deleteInstanceSettings);
+ }
+
+ // NEXT_MAJOR_VER: remove 'throws Exception'
+ /**
+ * Applies the given settings updater function to all of the unary API methods in this service.
+ *
+ *
Note: This method does not support applying settings to streaming methods.
+ */
+ public Builder applyToAllUnaryMethods(
+ ApiFunction, Void> settingsUpdater) throws Exception {
+ super.applyToAllUnaryMethods(unaryMethodSettingsBuilders, settingsUpdater);
+ return this;
+ }
+
+ public ImmutableList> unaryMethodSettingsBuilders() {
+ return unaryMethodSettingsBuilders;
+ }
+
+ /** Returns the builder for the settings used for calls to listInstances. */
+ public PagedCallSettings.Builder<
+ ListInstancesRequest, ListInstancesResponse, ListInstancesPagedResponse>
+ listInstancesSettings() {
+ return listInstancesSettings;
+ }
+
+ /** Returns the builder for the settings used for calls to getInstance. */
+ public UnaryCallSettings.Builder getInstanceSettings() {
+ return getInstanceSettings;
+ }
+
+ /** Returns the builder for the settings used for calls to createInstance. */
+ public UnaryCallSettings.Builder createInstanceSettings() {
+ return createInstanceSettings;
+ }
+
+ /** Returns the builder for the settings used for calls to createInstance. */
+ public OperationCallSettings.Builder
+ createInstanceOperationSettings() {
+ return createInstanceOperationSettings;
+ }
+
+ /** Returns the builder for the settings used for calls to updateInstance. */
+ public UnaryCallSettings.Builder updateInstanceSettings() {
+ return updateInstanceSettings;
+ }
+
+ /** Returns the builder for the settings used for calls to updateInstance. */
+ public OperationCallSettings.Builder
+ updateInstanceOperationSettings() {
+ return updateInstanceOperationSettings;
+ }
+
+ /** Returns the builder for the settings used for calls to deleteInstance. */
+ public UnaryCallSettings.Builder deleteInstanceSettings() {
+ return deleteInstanceSettings;
+ }
+
+ /** Returns the builder for the settings used for calls to deleteInstance. */
+ public OperationCallSettings.Builder
+ deleteInstanceOperationSettings() {
+ return deleteInstanceOperationSettings;
+ }
+
+ @Override
+ public CloudRedisStubSettings build() throws IOException {
+ return new CloudRedisStubSettings(this);
+ }
+ }
+}
diff --git a/google-cloud-redis/src/main/java/com/google/cloud/redis/v1beta1/stub/GrpcCloudRedisCallableFactory.java b/google-cloud-redis/src/main/java/com/google/cloud/redis/v1beta1/stub/GrpcCloudRedisCallableFactory.java
new file mode 100644
index 000000000000..0e35704c894a
--- /dev/null
+++ b/google-cloud-redis/src/main/java/com/google/cloud/redis/v1beta1/stub/GrpcCloudRedisCallableFactory.java
@@ -0,0 +1,114 @@
+/*
+ * Copyright 2018 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
+ *
+ * https://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.
+ */
+package com.google.cloud.redis.v1beta1.stub;
+
+import com.google.api.core.BetaApi;
+import com.google.api.gax.grpc.GrpcCallSettings;
+import com.google.api.gax.grpc.GrpcCallableFactory;
+import com.google.api.gax.grpc.GrpcStubCallableFactory;
+import com.google.api.gax.rpc.BatchingCallSettings;
+import com.google.api.gax.rpc.BidiStreamingCallable;
+import com.google.api.gax.rpc.ClientContext;
+import com.google.api.gax.rpc.ClientStreamingCallable;
+import com.google.api.gax.rpc.OperationCallSettings;
+import com.google.api.gax.rpc.OperationCallable;
+import com.google.api.gax.rpc.PagedCallSettings;
+import com.google.api.gax.rpc.ServerStreamingCallSettings;
+import com.google.api.gax.rpc.ServerStreamingCallable;
+import com.google.api.gax.rpc.StreamingCallSettings;
+import com.google.api.gax.rpc.UnaryCallSettings;
+import com.google.api.gax.rpc.UnaryCallable;
+import com.google.longrunning.Operation;
+import com.google.longrunning.stub.OperationsStub;
+import javax.annotation.Generated;
+
+// AUTO-GENERATED DOCUMENTATION AND CLASS
+/**
+ * gRPC callable factory implementation for Google Cloud Memorystore for Redis API.
+ *
+ *
This class is for advanced usage.
+ */
+@Generated("by gapic-generator")
+@BetaApi("The surface for use by generated code is not stable yet and may change in the future.")
+public class GrpcCloudRedisCallableFactory implements GrpcStubCallableFactory {
+ @Override
+ public UnaryCallable createUnaryCallable(
+ GrpcCallSettings grpcCallSettings,
+ UnaryCallSettings callSettings,
+ ClientContext clientContext) {
+ return GrpcCallableFactory.createUnaryCallable(grpcCallSettings, callSettings, clientContext);
+ }
+
+ @Override
+ public
+ UnaryCallable createPagedCallable(
+ GrpcCallSettings grpcCallSettings,
+ PagedCallSettings pagedCallSettings,
+ ClientContext clientContext) {
+ return GrpcCallableFactory.createPagedCallable(
+ grpcCallSettings, pagedCallSettings, clientContext);
+ }
+
+ @Override
+ public UnaryCallable createBatchingCallable(
+ GrpcCallSettings grpcCallSettings,
+ BatchingCallSettings batchingCallSettings,
+ ClientContext clientContext) {
+ return GrpcCallableFactory.createBatchingCallable(
+ grpcCallSettings, batchingCallSettings, clientContext);
+ }
+
+ @Override
+ public
+ OperationCallable createOperationCallable(
+ GrpcCallSettings grpcCallSettings,
+ OperationCallSettings operationCallSettings,
+ ClientContext clientContext,
+ OperationsStub operationsStub) {
+ return GrpcCallableFactory.createOperationCallable(
+ grpcCallSettings, operationCallSettings, clientContext, operationsStub);
+ }
+
+ @Override
+ public
+ BidiStreamingCallable createBidiStreamingCallable(
+ GrpcCallSettings grpcCallSettings,
+ StreamingCallSettings streamingCallSettings,
+ ClientContext clientContext) {
+ return GrpcCallableFactory.createBidiStreamingCallable(
+ grpcCallSettings, streamingCallSettings, clientContext);
+ }
+
+ @Override
+ public
+ ServerStreamingCallable createServerStreamingCallable(
+ GrpcCallSettings grpcCallSettings,
+ ServerStreamingCallSettings streamingCallSettings,
+ ClientContext clientContext) {
+ return GrpcCallableFactory.createServerStreamingCallable(
+ grpcCallSettings, streamingCallSettings, clientContext);
+ }
+
+ @Override
+ public
+ ClientStreamingCallable createClientStreamingCallable(
+ GrpcCallSettings grpcCallSettings,
+ StreamingCallSettings streamingCallSettings,
+ ClientContext clientContext) {
+ return GrpcCallableFactory.createClientStreamingCallable(
+ grpcCallSettings, streamingCallSettings, clientContext);
+ }
+}
diff --git a/google-cloud-redis/src/main/java/com/google/cloud/redis/v1beta1/stub/GrpcCloudRedisStub.java b/google-cloud-redis/src/main/java/com/google/cloud/redis/v1beta1/stub/GrpcCloudRedisStub.java
new file mode 100644
index 000000000000..37e23a4e5990
--- /dev/null
+++ b/google-cloud-redis/src/main/java/com/google/cloud/redis/v1beta1/stub/GrpcCloudRedisStub.java
@@ -0,0 +1,288 @@
+/*
+ * Copyright 2018 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
+ *
+ * https://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.
+ */
+package com.google.cloud.redis.v1beta1.stub;
+
+import static com.google.cloud.redis.v1beta1.CloudRedisClient.ListInstancesPagedResponse;
+
+import com.google.api.core.BetaApi;
+import com.google.api.gax.core.BackgroundResource;
+import com.google.api.gax.core.BackgroundResourceAggregation;
+import com.google.api.gax.grpc.GrpcCallSettings;
+import com.google.api.gax.grpc.GrpcStubCallableFactory;
+import com.google.api.gax.rpc.ClientContext;
+import com.google.api.gax.rpc.OperationCallable;
+import com.google.api.gax.rpc.UnaryCallable;
+import com.google.cloud.redis.v1beta1.CreateInstanceRequest;
+import com.google.cloud.redis.v1beta1.DeleteInstanceRequest;
+import com.google.cloud.redis.v1beta1.GetInstanceRequest;
+import com.google.cloud.redis.v1beta1.Instance;
+import com.google.cloud.redis.v1beta1.ListInstancesRequest;
+import com.google.cloud.redis.v1beta1.ListInstancesResponse;
+import com.google.cloud.redis.v1beta1.UpdateInstanceRequest;
+import com.google.longrunning.Operation;
+import com.google.longrunning.stub.GrpcOperationsStub;
+import com.google.protobuf.Any;
+import com.google.protobuf.Empty;
+import io.grpc.MethodDescriptor;
+import io.grpc.protobuf.ProtoUtils;
+import java.io.IOException;
+import java.util.concurrent.TimeUnit;
+import javax.annotation.Generated;
+
+// AUTO-GENERATED DOCUMENTATION AND CLASS
+/**
+ * gRPC stub implementation for Google Cloud Memorystore for Redis API.
+ *
+ *
This class is for advanced usage and reflects the underlying API directly.
+ */
+@Generated("by gapic-generator")
+@BetaApi("A restructuring of stub classes is planned, so this may break in the future")
+public class GrpcCloudRedisStub extends CloudRedisStub {
+
+ private static final MethodDescriptor
+ listInstancesMethodDescriptor =
+ MethodDescriptor.newBuilder()
+ .setType(MethodDescriptor.MethodType.UNARY)
+ .setFullMethodName("google.cloud.redis.v1beta1.CloudRedis/ListInstances")
+ .setRequestMarshaller(
+ ProtoUtils.marshaller(ListInstancesRequest.getDefaultInstance()))
+ .setResponseMarshaller(
+ ProtoUtils.marshaller(ListInstancesResponse.getDefaultInstance()))
+ .build();
+ private static final MethodDescriptor getInstanceMethodDescriptor =
+ MethodDescriptor.newBuilder()
+ .setType(MethodDescriptor.MethodType.UNARY)
+ .setFullMethodName("google.cloud.redis.v1beta1.CloudRedis/GetInstance")
+ .setRequestMarshaller(ProtoUtils.marshaller(GetInstanceRequest.getDefaultInstance()))
+ .setResponseMarshaller(ProtoUtils.marshaller(Instance.getDefaultInstance()))
+ .build();
+ private static final MethodDescriptor
+ createInstanceMethodDescriptor =
+ MethodDescriptor.newBuilder()
+ .setType(MethodDescriptor.MethodType.UNARY)
+ .setFullMethodName("google.cloud.redis.v1beta1.CloudRedis/CreateInstance")
+ .setRequestMarshaller(
+ ProtoUtils.marshaller(CreateInstanceRequest.getDefaultInstance()))
+ .setResponseMarshaller(ProtoUtils.marshaller(Operation.getDefaultInstance()))
+ .build();
+ private static final MethodDescriptor
+ updateInstanceMethodDescriptor =
+ MethodDescriptor.newBuilder()
+ .setType(MethodDescriptor.MethodType.UNARY)
+ .setFullMethodName("google.cloud.redis.v1beta1.CloudRedis/UpdateInstance")
+ .setRequestMarshaller(
+ ProtoUtils.marshaller(UpdateInstanceRequest.getDefaultInstance()))
+ .setResponseMarshaller(ProtoUtils.marshaller(Operation.getDefaultInstance()))
+ .build();
+ private static final MethodDescriptor
+ deleteInstanceMethodDescriptor =
+ MethodDescriptor.newBuilder()
+ .setType(MethodDescriptor.MethodType.UNARY)
+ .setFullMethodName("google.cloud.redis.v1beta1.CloudRedis/DeleteInstance")
+ .setRequestMarshaller(
+ ProtoUtils.marshaller(DeleteInstanceRequest.getDefaultInstance()))
+ .setResponseMarshaller(ProtoUtils.marshaller(Operation.getDefaultInstance()))
+ .build();
+
+ private final BackgroundResource backgroundResources;
+ private final GrpcOperationsStub operationsStub;
+
+ private final UnaryCallable listInstancesCallable;
+ private final UnaryCallable
+ listInstancesPagedCallable;
+ private final UnaryCallable getInstanceCallable;
+ private final UnaryCallable createInstanceCallable;
+ private final OperationCallable
+ createInstanceOperationCallable;
+ private final UnaryCallable updateInstanceCallable;
+ private final OperationCallable
+ updateInstanceOperationCallable;
+ private final UnaryCallable deleteInstanceCallable;
+ private final OperationCallable
+ deleteInstanceOperationCallable;
+
+ private final GrpcStubCallableFactory callableFactory;
+
+ public static final GrpcCloudRedisStub create(CloudRedisStubSettings settings)
+ throws IOException {
+ return new GrpcCloudRedisStub(settings, ClientContext.create(settings));
+ }
+
+ public static final GrpcCloudRedisStub create(ClientContext clientContext) throws IOException {
+ return new GrpcCloudRedisStub(CloudRedisStubSettings.newBuilder().build(), clientContext);
+ }
+
+ public static final GrpcCloudRedisStub create(
+ ClientContext clientContext, GrpcStubCallableFactory callableFactory) throws IOException {
+ return new GrpcCloudRedisStub(
+ CloudRedisStubSettings.newBuilder().build(), clientContext, callableFactory);
+ }
+
+ /**
+ * Constructs an instance of GrpcCloudRedisStub, using the given settings. This is protected so
+ * that it is easy to make a subclass, but otherwise, the static factory methods should be
+ * preferred.
+ */
+ protected GrpcCloudRedisStub(CloudRedisStubSettings settings, ClientContext clientContext)
+ throws IOException {
+ this(settings, clientContext, new GrpcCloudRedisCallableFactory());
+ }
+
+ /**
+ * Constructs an instance of GrpcCloudRedisStub, using the given settings. This is protected so
+ * that it is easy to make a subclass, but otherwise, the static factory methods should be
+ * preferred.
+ */
+ protected GrpcCloudRedisStub(
+ CloudRedisStubSettings settings,
+ ClientContext clientContext,
+ GrpcStubCallableFactory callableFactory)
+ throws IOException {
+ this.callableFactory = callableFactory;
+ this.operationsStub = GrpcOperationsStub.create(clientContext, callableFactory);
+
+ GrpcCallSettings listInstancesTransportSettings =
+ GrpcCallSettings.newBuilder()
+ .setMethodDescriptor(listInstancesMethodDescriptor)
+ .build();
+ GrpcCallSettings getInstanceTransportSettings =
+ GrpcCallSettings.newBuilder()
+ .setMethodDescriptor(getInstanceMethodDescriptor)
+ .build();
+ GrpcCallSettings createInstanceTransportSettings =
+ GrpcCallSettings.newBuilder()
+ .setMethodDescriptor(createInstanceMethodDescriptor)
+ .build();
+ GrpcCallSettings updateInstanceTransportSettings =
+ GrpcCallSettings.newBuilder()
+ .setMethodDescriptor(updateInstanceMethodDescriptor)
+ .build();
+ GrpcCallSettings deleteInstanceTransportSettings =
+ GrpcCallSettings.newBuilder()
+ .setMethodDescriptor(deleteInstanceMethodDescriptor)
+ .build();
+
+ this.listInstancesCallable =
+ callableFactory.createUnaryCallable(
+ listInstancesTransportSettings, settings.listInstancesSettings(), clientContext);
+ this.listInstancesPagedCallable =
+ callableFactory.createPagedCallable(
+ listInstancesTransportSettings, settings.listInstancesSettings(), clientContext);
+ this.getInstanceCallable =
+ callableFactory.createUnaryCallable(
+ getInstanceTransportSettings, settings.getInstanceSettings(), clientContext);
+ this.createInstanceCallable =
+ callableFactory.createUnaryCallable(
+ createInstanceTransportSettings, settings.createInstanceSettings(), clientContext);
+ this.createInstanceOperationCallable =
+ callableFactory.createOperationCallable(
+ createInstanceTransportSettings,
+ settings.createInstanceOperationSettings(),
+ clientContext,
+ this.operationsStub);
+ this.updateInstanceCallable =
+ callableFactory.createUnaryCallable(
+ updateInstanceTransportSettings, settings.updateInstanceSettings(), clientContext);
+ this.updateInstanceOperationCallable =
+ callableFactory.createOperationCallable(
+ updateInstanceTransportSettings,
+ settings.updateInstanceOperationSettings(),
+ clientContext,
+ this.operationsStub);
+ this.deleteInstanceCallable =
+ callableFactory.createUnaryCallable(
+ deleteInstanceTransportSettings, settings.deleteInstanceSettings(), clientContext);
+ this.deleteInstanceOperationCallable =
+ callableFactory.createOperationCallable(
+ deleteInstanceTransportSettings,
+ settings.deleteInstanceOperationSettings(),
+ clientContext,
+ this.operationsStub);
+
+ backgroundResources = new BackgroundResourceAggregation(clientContext.getBackgroundResources());
+ }
+
+ public GrpcOperationsStub getOperationsStub() {
+ return operationsStub;
+ }
+
+ public UnaryCallable
+ listInstancesPagedCallable() {
+ return listInstancesPagedCallable;
+ }
+
+ public UnaryCallable listInstancesCallable() {
+ return listInstancesCallable;
+ }
+
+ public UnaryCallable getInstanceCallable() {
+ return getInstanceCallable;
+ }
+
+ public OperationCallable createInstanceOperationCallable() {
+ return createInstanceOperationCallable;
+ }
+
+ public UnaryCallable createInstanceCallable() {
+ return createInstanceCallable;
+ }
+
+ public OperationCallable updateInstanceOperationCallable() {
+ return updateInstanceOperationCallable;
+ }
+
+ public UnaryCallable updateInstanceCallable() {
+ return updateInstanceCallable;
+ }
+
+ public OperationCallable deleteInstanceOperationCallable() {
+ return deleteInstanceOperationCallable;
+ }
+
+ public UnaryCallable deleteInstanceCallable() {
+ return deleteInstanceCallable;
+ }
+
+ @Override
+ public final void close() {
+ shutdown();
+ }
+
+ @Override
+ public void shutdown() {
+ backgroundResources.shutdown();
+ }
+
+ @Override
+ public boolean isShutdown() {
+ return backgroundResources.isShutdown();
+ }
+
+ @Override
+ public boolean isTerminated() {
+ return backgroundResources.isTerminated();
+ }
+
+ @Override
+ public void shutdownNow() {
+ backgroundResources.shutdownNow();
+ }
+
+ @Override
+ public boolean awaitTermination(long duration, TimeUnit unit) throws InterruptedException {
+ return backgroundResources.awaitTermination(duration, unit);
+ }
+}
diff --git a/google-cloud-redis/src/test/java/com/google/cloud/redis/v1beta1/CloudRedisClientTest.java b/google-cloud-redis/src/test/java/com/google/cloud/redis/v1beta1/CloudRedisClientTest.java
new file mode 100644
index 000000000000..29c1bd58e2bb
--- /dev/null
+++ b/google-cloud-redis/src/test/java/com/google/cloud/redis/v1beta1/CloudRedisClientTest.java
@@ -0,0 +1,411 @@
+/*
+ * Copyright 2018 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
+ *
+ * https://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.
+ */
+package com.google.cloud.redis.v1beta1;
+
+import static com.google.cloud.redis.v1beta1.CloudRedisClient.ListInstancesPagedResponse;
+
+import com.google.api.gax.core.NoCredentialsProvider;
+import com.google.api.gax.grpc.GaxGrpcProperties;
+import com.google.api.gax.grpc.testing.LocalChannelProvider;
+import com.google.api.gax.grpc.testing.MockGrpcService;
+import com.google.api.gax.grpc.testing.MockServiceHelper;
+import com.google.api.gax.rpc.ApiClientHeaderProvider;
+import com.google.api.gax.rpc.InvalidArgumentException;
+import com.google.api.gax.rpc.StatusCode;
+import com.google.cloud.redis.v1beta1.Instance.Tier;
+import com.google.common.collect.Lists;
+import com.google.longrunning.Operation;
+import com.google.protobuf.Any;
+import com.google.protobuf.Empty;
+import com.google.protobuf.FieldMask;
+import com.google.protobuf.GeneratedMessageV3;
+import io.grpc.Status;
+import io.grpc.StatusRuntimeException;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
+import java.util.concurrent.ExecutionException;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+@javax.annotation.Generated("by GAPIC")
+public class CloudRedisClientTest {
+ private static MockCloudRedis mockCloudRedis;
+ private static MockServiceHelper serviceHelper;
+ private CloudRedisClient client;
+ private LocalChannelProvider channelProvider;
+
+ @BeforeClass
+ public static void startStaticServer() {
+ mockCloudRedis = new MockCloudRedis();
+ serviceHelper =
+ new MockServiceHelper("in-process-1", Arrays.asList(mockCloudRedis));
+ serviceHelper.start();
+ }
+
+ @AfterClass
+ public static void stopServer() {
+ serviceHelper.stop();
+ }
+
+ @Before
+ public void setUp() throws IOException {
+ serviceHelper.reset();
+ channelProvider = serviceHelper.createChannelProvider();
+ CloudRedisSettings settings =
+ CloudRedisSettings.newBuilder()
+ .setTransportChannelProvider(channelProvider)
+ .setCredentialsProvider(NoCredentialsProvider.create())
+ .build();
+ client = CloudRedisClient.create(settings);
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ client.close();
+ }
+
+ @Test
+ @SuppressWarnings("all")
+ public void listInstancesTest() {
+ String nextPageToken = "";
+ Instance instancesElement = Instance.newBuilder().build();
+ List instances = Arrays.asList(instancesElement);
+ ListInstancesResponse expectedResponse =
+ ListInstancesResponse.newBuilder()
+ .setNextPageToken(nextPageToken)
+ .addAllInstances(instances)
+ .build();
+ mockCloudRedis.addResponse(expectedResponse);
+
+ LocationName parent = LocationName.of("[PROJECT]", "[LOCATION]");
+
+ ListInstancesPagedResponse pagedListResponse = client.listInstances(parent);
+
+ List resources = Lists.newArrayList(pagedListResponse.iterateAll());
+ Assert.assertEquals(1, resources.size());
+ Assert.assertEquals(expectedResponse.getInstancesList().get(0), resources.get(0));
+
+ List actualRequests = mockCloudRedis.getRequests();
+ Assert.assertEquals(1, actualRequests.size());
+ ListInstancesRequest actualRequest = (ListInstancesRequest) actualRequests.get(0);
+
+ Assert.assertEquals(parent, LocationName.parse(actualRequest.getParent()));
+ Assert.assertTrue(
+ channelProvider.isHeaderSent(
+ ApiClientHeaderProvider.getDefaultApiClientHeaderKey(),
+ GaxGrpcProperties.getDefaultApiClientHeaderPattern()));
+ }
+
+ @Test
+ @SuppressWarnings("all")
+ public void listInstancesExceptionTest() throws Exception {
+ StatusRuntimeException exception = new StatusRuntimeException(Status.INVALID_ARGUMENT);
+ mockCloudRedis.addException(exception);
+
+ try {
+ LocationName parent = LocationName.of("[PROJECT]", "[LOCATION]");
+
+ client.listInstances(parent);
+ Assert.fail("No exception raised");
+ } catch (InvalidArgumentException e) {
+ // Expected exception
+ }
+ }
+
+ @Test
+ @SuppressWarnings("all")
+ public void getInstanceTest() {
+ String name2 = "name2-1052831874";
+ String displayName = "displayName1615086568";
+ String locationId = "locationId552319461";
+ String alternativeLocationId = "alternativeLocationId-718920621";
+ String redisVersion = "redisVersion-685310444";
+ String reservedIpRange = "reservedIpRange-1082940580";
+ String host = "host3208616";
+ int port = 3446913;
+ String currentLocationId = "currentLocationId1312712735";
+ String statusMessage = "statusMessage-239442758";
+ int memorySizeGb = 34199707;
+ String authorizedNetwork = "authorizedNetwork-1733809270";
+ Instance expectedResponse =
+ Instance.newBuilder()
+ .setName(name2)
+ .setDisplayName(displayName)
+ .setLocationId(locationId)
+ .setAlternativeLocationId(alternativeLocationId)
+ .setRedisVersion(redisVersion)
+ .setReservedIpRange(reservedIpRange)
+ .setHost(host)
+ .setPort(port)
+ .setCurrentLocationId(currentLocationId)
+ .setStatusMessage(statusMessage)
+ .setMemorySizeGb(memorySizeGb)
+ .setAuthorizedNetwork(authorizedNetwork)
+ .build();
+ mockCloudRedis.addResponse(expectedResponse);
+
+ InstanceName name = InstanceName.of("[PROJECT]", "[LOCATION]", "[INSTANCE]");
+
+ Instance actualResponse = client.getInstance(name);
+ Assert.assertEquals(expectedResponse, actualResponse);
+
+ List actualRequests = mockCloudRedis.getRequests();
+ Assert.assertEquals(1, actualRequests.size());
+ GetInstanceRequest actualRequest = (GetInstanceRequest) actualRequests.get(0);
+
+ Assert.assertEquals(name, InstanceName.parse(actualRequest.getName()));
+ Assert.assertTrue(
+ channelProvider.isHeaderSent(
+ ApiClientHeaderProvider.getDefaultApiClientHeaderKey(),
+ GaxGrpcProperties.getDefaultApiClientHeaderPattern()));
+ }
+
+ @Test
+ @SuppressWarnings("all")
+ public void getInstanceExceptionTest() throws Exception {
+ StatusRuntimeException exception = new StatusRuntimeException(Status.INVALID_ARGUMENT);
+ mockCloudRedis.addException(exception);
+
+ try {
+ InstanceName name = InstanceName.of("[PROJECT]", "[LOCATION]", "[INSTANCE]");
+
+ client.getInstance(name);
+ Assert.fail("No exception raised");
+ } catch (InvalidArgumentException e) {
+ // Expected exception
+ }
+ }
+
+ @Test
+ @SuppressWarnings("all")
+ public void createInstanceTest() throws Exception {
+ String name = "name3373707";
+ String displayName = "displayName1615086568";
+ String locationId = "locationId552319461";
+ String alternativeLocationId = "alternativeLocationId-718920621";
+ String redisVersion = "redisVersion-685310444";
+ String reservedIpRange = "reservedIpRange-1082940580";
+ String host = "host3208616";
+ int port = 3446913;
+ String currentLocationId = "currentLocationId1312712735";
+ String statusMessage = "statusMessage-239442758";
+ int memorySizeGb2 = 1493816946;
+ String authorizedNetwork = "authorizedNetwork-1733809270";
+ Instance expectedResponse =
+ Instance.newBuilder()
+ .setName(name)
+ .setDisplayName(displayName)
+ .setLocationId(locationId)
+ .setAlternativeLocationId(alternativeLocationId)
+ .setRedisVersion(redisVersion)
+ .setReservedIpRange(reservedIpRange)
+ .setHost(host)
+ .setPort(port)
+ .setCurrentLocationId(currentLocationId)
+ .setStatusMessage(statusMessage)
+ .setMemorySizeGb(memorySizeGb2)
+ .setAuthorizedNetwork(authorizedNetwork)
+ .build();
+ Operation resultOperation =
+ Operation.newBuilder()
+ .setName("createInstanceTest")
+ .setDone(true)
+ .setResponse(Any.pack(expectedResponse))
+ .build();
+ mockCloudRedis.addResponse(resultOperation);
+
+ LocationName parent = LocationName.of("[PROJECT]", "[LOCATION]");
+ String instanceId = "test_instance";
+ Instance.Tier tier = Instance.Tier.BASIC;
+ int memorySizeGb = 1;
+ Instance instance = Instance.newBuilder().setTier(tier).setMemorySizeGb(memorySizeGb).build();
+
+ Instance actualResponse = client.createInstanceAsync(parent, instanceId, instance).get();
+ Assert.assertEquals(expectedResponse, actualResponse);
+
+ List actualRequests = mockCloudRedis.getRequests();
+ Assert.assertEquals(1, actualRequests.size());
+ CreateInstanceRequest actualRequest = (CreateInstanceRequest) actualRequests.get(0);
+
+ Assert.assertEquals(parent, LocationName.parse(actualRequest.getParent()));
+ Assert.assertEquals(instanceId, actualRequest.getInstanceId());
+ Assert.assertEquals(instance, actualRequest.getInstance());
+ Assert.assertTrue(
+ channelProvider.isHeaderSent(
+ ApiClientHeaderProvider.getDefaultApiClientHeaderKey(),
+ GaxGrpcProperties.getDefaultApiClientHeaderPattern()));
+ }
+
+ @Test
+ @SuppressWarnings("all")
+ public void createInstanceExceptionTest() throws Exception {
+ StatusRuntimeException exception = new StatusRuntimeException(Status.INVALID_ARGUMENT);
+ mockCloudRedis.addException(exception);
+
+ try {
+ LocationName parent = LocationName.of("[PROJECT]", "[LOCATION]");
+ String instanceId = "test_instance";
+ Instance.Tier tier = Instance.Tier.BASIC;
+ int memorySizeGb = 1;
+ Instance instance = Instance.newBuilder().setTier(tier).setMemorySizeGb(memorySizeGb).build();
+
+ client.createInstanceAsync(parent, instanceId, instance).get();
+ Assert.fail("No exception raised");
+ } catch (ExecutionException e) {
+ Assert.assertEquals(InvalidArgumentException.class, e.getCause().getClass());
+ InvalidArgumentException apiException = (InvalidArgumentException) e.getCause();
+ Assert.assertEquals(StatusCode.Code.INVALID_ARGUMENT, apiException.getStatusCode().getCode());
+ }
+ }
+
+ @Test
+ @SuppressWarnings("all")
+ public void updateInstanceTest() throws Exception {
+ String name = "name3373707";
+ String displayName2 = "displayName21615000987";
+ String locationId = "locationId552319461";
+ String alternativeLocationId = "alternativeLocationId-718920621";
+ String redisVersion = "redisVersion-685310444";
+ String reservedIpRange = "reservedIpRange-1082940580";
+ String host = "host3208616";
+ int port = 3446913;
+ String currentLocationId = "currentLocationId1312712735";
+ String statusMessage = "statusMessage-239442758";
+ int memorySizeGb2 = 1493816946;
+ String authorizedNetwork = "authorizedNetwork-1733809270";
+ Instance expectedResponse =
+ Instance.newBuilder()
+ .setName(name)
+ .setDisplayName(displayName2)
+ .setLocationId(locationId)
+ .setAlternativeLocationId(alternativeLocationId)
+ .setRedisVersion(redisVersion)
+ .setReservedIpRange(reservedIpRange)
+ .setHost(host)
+ .setPort(port)
+ .setCurrentLocationId(currentLocationId)
+ .setStatusMessage(statusMessage)
+ .setMemorySizeGb(memorySizeGb2)
+ .setAuthorizedNetwork(authorizedNetwork)
+ .build();
+ Operation resultOperation =
+ Operation.newBuilder()
+ .setName("updateInstanceTest")
+ .setDone(true)
+ .setResponse(Any.pack(expectedResponse))
+ .build();
+ mockCloudRedis.addResponse(resultOperation);
+
+ String pathsElement = "display_name";
+ String pathsElement2 = "memory_size_gb";
+ List paths = Arrays.asList(pathsElement, pathsElement2);
+ FieldMask updateMask = FieldMask.newBuilder().addAllPaths(paths).build();
+ String displayName = "UpdatedDisplayName";
+ int memorySizeGb = 4;
+ Instance instance =
+ Instance.newBuilder().setDisplayName(displayName).setMemorySizeGb(memorySizeGb).build();
+
+ Instance actualResponse = client.updateInstanceAsync(updateMask, instance).get();
+ Assert.assertEquals(expectedResponse, actualResponse);
+
+ List actualRequests = mockCloudRedis.getRequests();
+ Assert.assertEquals(1, actualRequests.size());
+ UpdateInstanceRequest actualRequest = (UpdateInstanceRequest) actualRequests.get(0);
+
+ Assert.assertEquals(updateMask, actualRequest.getUpdateMask());
+ Assert.assertEquals(instance, actualRequest.getInstance());
+ Assert.assertTrue(
+ channelProvider.isHeaderSent(
+ ApiClientHeaderProvider.getDefaultApiClientHeaderKey(),
+ GaxGrpcProperties.getDefaultApiClientHeaderPattern()));
+ }
+
+ @Test
+ @SuppressWarnings("all")
+ public void updateInstanceExceptionTest() throws Exception {
+ StatusRuntimeException exception = new StatusRuntimeException(Status.INVALID_ARGUMENT);
+ mockCloudRedis.addException(exception);
+
+ try {
+ String pathsElement = "display_name";
+ String pathsElement2 = "memory_size_gb";
+ List paths = Arrays.asList(pathsElement, pathsElement2);
+ FieldMask updateMask = FieldMask.newBuilder().addAllPaths(paths).build();
+ String displayName = "UpdatedDisplayName";
+ int memorySizeGb = 4;
+ Instance instance =
+ Instance.newBuilder().setDisplayName(displayName).setMemorySizeGb(memorySizeGb).build();
+
+ client.updateInstanceAsync(updateMask, instance).get();
+ Assert.fail("No exception raised");
+ } catch (ExecutionException e) {
+ Assert.assertEquals(InvalidArgumentException.class, e.getCause().getClass());
+ InvalidArgumentException apiException = (InvalidArgumentException) e.getCause();
+ Assert.assertEquals(StatusCode.Code.INVALID_ARGUMENT, apiException.getStatusCode().getCode());
+ }
+ }
+
+ @Test
+ @SuppressWarnings("all")
+ public void deleteInstanceTest() throws Exception {
+ Empty expectedResponse = Empty.newBuilder().build();
+ Operation resultOperation =
+ Operation.newBuilder()
+ .setName("deleteInstanceTest")
+ .setDone(true)
+ .setResponse(Any.pack(expectedResponse))
+ .build();
+ mockCloudRedis.addResponse(resultOperation);
+
+ InstanceName name = InstanceName.of("[PROJECT]", "[LOCATION]", "[INSTANCE]");
+
+ Empty actualResponse = client.deleteInstanceAsync(name).get();
+ Assert.assertEquals(expectedResponse, actualResponse);
+
+ List actualRequests = mockCloudRedis.getRequests();
+ Assert.assertEquals(1, actualRequests.size());
+ DeleteInstanceRequest actualRequest = (DeleteInstanceRequest) actualRequests.get(0);
+
+ Assert.assertEquals(name, InstanceName.parse(actualRequest.getName()));
+ Assert.assertTrue(
+ channelProvider.isHeaderSent(
+ ApiClientHeaderProvider.getDefaultApiClientHeaderKey(),
+ GaxGrpcProperties.getDefaultApiClientHeaderPattern()));
+ }
+
+ @Test
+ @SuppressWarnings("all")
+ public void deleteInstanceExceptionTest() throws Exception {
+ StatusRuntimeException exception = new StatusRuntimeException(Status.INVALID_ARGUMENT);
+ mockCloudRedis.addException(exception);
+
+ try {
+ InstanceName name = InstanceName.of("[PROJECT]", "[LOCATION]", "[INSTANCE]");
+
+ client.deleteInstanceAsync(name).get();
+ Assert.fail("No exception raised");
+ } catch (ExecutionException e) {
+ Assert.assertEquals(InvalidArgumentException.class, e.getCause().getClass());
+ InvalidArgumentException apiException = (InvalidArgumentException) e.getCause();
+ Assert.assertEquals(StatusCode.Code.INVALID_ARGUMENT, apiException.getStatusCode().getCode());
+ }
+ }
+}
diff --git a/google-cloud-redis/src/test/java/com/google/cloud/redis/v1beta1/MockCloudRedis.java b/google-cloud-redis/src/test/java/com/google/cloud/redis/v1beta1/MockCloudRedis.java
new file mode 100644
index 000000000000..56635c7a71fd
--- /dev/null
+++ b/google-cloud-redis/src/test/java/com/google/cloud/redis/v1beta1/MockCloudRedis.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2018 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
+ *
+ * https://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.
+ */
+package com.google.cloud.redis.v1beta1;
+
+import com.google.api.core.BetaApi;
+import com.google.api.gax.grpc.testing.MockGrpcService;
+import com.google.protobuf.GeneratedMessageV3;
+import io.grpc.ServerServiceDefinition;
+import java.util.List;
+
+@javax.annotation.Generated("by GAPIC")
+@BetaApi
+public class MockCloudRedis implements MockGrpcService {
+ private final MockCloudRedisImpl serviceImpl;
+
+ public MockCloudRedis() {
+ serviceImpl = new MockCloudRedisImpl();
+ }
+
+ @Override
+ public List getRequests() {
+ return serviceImpl.getRequests();
+ }
+
+ @Override
+ public void addResponse(GeneratedMessageV3 response) {
+ serviceImpl.addResponse(response);
+ }
+
+ @Override
+ public void addException(Exception exception) {
+ serviceImpl.addException(exception);
+ }
+
+ @Override
+ public ServerServiceDefinition getServiceDefinition() {
+ return serviceImpl.bindService();
+ }
+
+ @Override
+ public void reset() {
+ serviceImpl.reset();
+ }
+}
diff --git a/google-cloud-redis/src/test/java/com/google/cloud/redis/v1beta1/MockCloudRedisImpl.java b/google-cloud-redis/src/test/java/com/google/cloud/redis/v1beta1/MockCloudRedisImpl.java
new file mode 100644
index 000000000000..9728915a135b
--- /dev/null
+++ b/google-cloud-redis/src/test/java/com/google/cloud/redis/v1beta1/MockCloudRedisImpl.java
@@ -0,0 +1,133 @@
+/*
+ * Copyright 2018 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
+ *
+ * https://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.
+ */
+package com.google.cloud.redis.v1beta1;
+
+import com.google.api.core.BetaApi;
+import com.google.cloud.redis.v1beta1.CloudRedisGrpc.CloudRedisImplBase;
+import com.google.longrunning.Operation;
+import com.google.protobuf.GeneratedMessageV3;
+import io.grpc.stub.StreamObserver;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Queue;
+
+@javax.annotation.Generated("by GAPIC")
+@BetaApi
+public class MockCloudRedisImpl extends CloudRedisImplBase {
+ private ArrayList requests;
+ private Queue