diff --git a/.github/.OwlBot.lock.yaml b/.github/.OwlBot.lock.yaml index a5361a30a..91bb69e63 100644 --- a/.github/.OwlBot.lock.yaml +++ b/.github/.OwlBot.lock.yaml @@ -13,4 +13,4 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-java:latest - digest: sha256:e62f3ea524b11c1cd6ff7f80362736d86c0056631346b5b106a421686fce2726 + digest: sha256:bf5639d265d70f6137d57d42ae781a6f4e26d4085ff4e018e71350480f9b3996 diff --git a/.readme-partials.yaml b/.readme-partials.yaml index 971616778..9823b5c70 100644 --- a/.readme-partials.yaml +++ b/.readme-partials.yaml @@ -81,7 +81,7 @@ custom_content: | #### Updating data Another thing you'll probably want to do is update your data. The following snippet shows how to update a Datastore entity if it exists. - ``` java + ```java KeyFactory keyFactory = datastore.newKeyFactory().setKind("keyKind"); Key key = keyFactory.newKey("keyName"); Entity entity = datastore.get(key); @@ -95,12 +95,12 @@ custom_content: | ``` The complete source code can be found at - [UpdateEntity.java](../../google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/UpdateEntity.java). + [UpdateEntity.java](https://github.com/googleapis/google-cloud-java/blob/2c1850d4f82f3fbd7b4a50582384c008085aa1a8/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/UpdateEntity.java). #### Complete source code In - [AddEntitiesAndRunQuery.java](../../google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/AddEntitiesAndRunQuery.java) + [AddEntitiesAndRunQuery.java](https://github.com/googleapis/google-cloud-java/blob/2c1850d4f82f3fbd7b4a50582384c008085aa1a8/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/AddEntitiesAndRunQuery.java) we put together all the code to store data and run queries into one program. The program assumes that you are running on Compute Engine or from your own desktop. To run the example on App Engine, simply move the code from the main method to your application's servlet class and change the print statements to @@ -110,8 +110,34 @@ custom_content: | ------- This library has tools to help write tests for code that uses the Datastore. + + #### On your machine + + You can test against a temporary local Datastore by following these steps: - See [TESTING.md](https://github.com/googleapis/google-cloud-java/blob/main/TESTING.md#testing-code-that-uses-datastore) to read more about testing. + 1. [Install Cloud SDK and start the emulator](https://cloud.google.com/datastore/docs/tools/datastore-emulator) + + To determine which host/port the emulator is running on: + + ``` + $ gcloud beta emulators datastore env-init + + # Sample output: + # export DATASTORE_EMULATOR_HOST=localhost:8759 + ``` + + 3. Point your client to the emulator + + ```java + DatastoreOptions options = DatastoreOptions.newBuilder() + .setProjectId(DatastoreOptions.getDefaultProjectId()) + .setHost(System.getenv("DATASTORE_EMULATOR_HOST")) + .setCredentials(NoCredentials.getInstance()) + .setRetrySettings(ServiceOptions.getNoRetrySettings()) + .build(); + Datastore datastore = options.getService(); + ``` + 4. Run your tests Example Applications -------------------- diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c27d2c2c..6c7f24cf7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,19 @@ # Changelog +## [2.14.1](https://github.com/googleapis/java-datastore/compare/v2.14.0...v2.14.1) (2023-03-20) + + +### Documentation + +* Fix broken link to UpdateEntity snippet ([#1022](https://github.com/googleapis/java-datastore/issues/1022)) ([6880604](https://github.com/googleapis/java-datastore/commit/6880604b6b88caf8e03449349d0815d388cfb1a3)), closes [#1010](https://github.com/googleapis/java-datastore/issues/1010) +* Fix broken README links ([#1011](https://github.com/googleapis/java-datastore/issues/1011)) ([276174e](https://github.com/googleapis/java-datastore/commit/276174e26ff92be2bdeb24f733278d2042519cfd)) + + +### Dependencies + +* Update dependency com.google.cloud:google-cloud-shared-dependencies to v3.5.0 ([#1024](https://github.com/googleapis/java-datastore/issues/1024)) ([4a57e95](https://github.com/googleapis/java-datastore/commit/4a57e959dbac14d395ff202fd479f776c84b25e5)) +* Upgrade gapic-generator-java to 2.15.3 ([091d197](https://github.com/googleapis/java-datastore/commit/091d1976c24c1bec7a7974bcffb246d2a16d790c)) + ## [2.14.0](https://github.com/googleapis/java-datastore/compare/v2.13.6...v2.14.0) (2023-03-08) diff --git a/README.md b/README.md index 650f21f7c..681f95bea 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ If you are using Maven with [BOM][libraries-bom], add this to your pom.xml file: com.google.cloud libraries-bom - 26.9.0 + 26.10.0 pom import @@ -41,7 +41,7 @@ If you are using Maven without BOM, add this to your dependencies: com.google.cloud google-cloud-datastore - 2.13.6 + 2.14.0 ``` @@ -56,14 +56,15 @@ implementation 'com.google.cloud:google-cloud-datastore' If you are using Gradle without BOM, add this to your dependencies: ```Groovy -implementation 'com.google.cloud:google-cloud-datastore:2.13.6' +implementation 'com.google.cloud:google-cloud-datastore:2.14.0' ``` If you are using SBT, add this to your dependencies: ```Scala -libraryDependencies += "com.google.cloud" % "google-cloud-datastore" % "2.13.6" +libraryDependencies += "com.google.cloud" % "google-cloud-datastore" % "2.14.0" ``` + ## Authentication @@ -80,7 +81,7 @@ The client application making API calls must be granted [authorization scopes][a You will need a [Google Cloud Platform Console][developer-console] project with the Cloud Datastore [API enabled][enable-api]. [Follow these instructions][create-project] to get your project set up. You will also need to set up the local development environment by -[installing the Google Cloud SDK][cloud-sdk] and running the following commands in command line: +[installing the Google Cloud Command Line Interface][cloud-cli] and running the following commands in command line: `gcloud auth login` and `gcloud config set project [YOUR PROJECT ID]`. ### Installation and setup @@ -183,7 +184,7 @@ Cloud Datastore relies on indexing to run queries. Indexing is turned on by defa #### Updating data Another thing you'll probably want to do is update your data. The following snippet shows how to update a Datastore entity if it exists. -``` java +```java KeyFactory keyFactory = datastore.newKeyFactory().setKind("keyKind"); Key key = keyFactory.newKey("keyName"); Entity entity = datastore.get(key); @@ -197,12 +198,12 @@ if (entity != null) { ``` The complete source code can be found at -[UpdateEntity.java](../../google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/UpdateEntity.java). +[UpdateEntity.java](https://github.com/googleapis/google-cloud-java/blob/2c1850d4f82f3fbd7b4a50582384c008085aa1a8/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/UpdateEntity.java). #### Complete source code In -[AddEntitiesAndRunQuery.java](../../google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/AddEntitiesAndRunQuery.java) +[AddEntitiesAndRunQuery.java](https://github.com/googleapis/google-cloud-java/blob/2c1850d4f82f3fbd7b4a50582384c008085aa1a8/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/AddEntitiesAndRunQuery.java) we put together all the code to store data and run queries into one program. The program assumes that you are running on Compute Engine or from your own desktop. To run the example on App Engine, simply move the code from the main method to your application's servlet class and change the print statements to @@ -213,7 +214,33 @@ Testing This library has tools to help write tests for code that uses the Datastore. -See [TESTING.md](https://github.com/googleapis/google-cloud-java/blob/main/TESTING.md#testing-code-that-uses-datastore) to read more about testing. +#### On your machine + +You can test against a temporary local Datastore by following these steps: + +1. [Install Cloud SDK and start the emulator](https://cloud.google.com/datastore/docs/tools/datastore-emulator) + +To determine which host/port the emulator is running on: + +``` +$ gcloud beta emulators datastore env-init + +# Sample output: +# export DATASTORE_EMULATOR_HOST=localhost:8759 +``` + +3. Point your client to the emulator + +```java +DatastoreOptions options = DatastoreOptions.newBuilder() +.setProjectId(DatastoreOptions.getDefaultProjectId()) +.setHost(System.getenv("DATASTORE_EMULATOR_HOST")) +.setCredentials(NoCredentials.getInstance()) +.setRetrySettings(ServiceOptions.getNoRetrySettings()) +.build(); +Datastore datastore = options.getService(); +``` +4. Run your tests Example Applications -------------------- @@ -341,14 +368,14 @@ Java is a registered trademark of Oracle and/or its affiliates. [kokoro-badge-link-5]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-datastore/java11.html [stability-image]: https://img.shields.io/badge/stability-stable-green [maven-version-image]: https://img.shields.io/maven-central/v/com.google.cloud/google-cloud-datastore.svg -[maven-version-link]: https://search.maven.org/search?q=g:com.google.cloud%20AND%20a:google-cloud-datastore&core=gav +[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-datastore/2.14.0 [authentication]: https://github.com/googleapis/google-cloud-java#authentication [auth-scopes]: https://developers.google.com/identity/protocols/oauth2/scopes [predefined-iam-roles]: https://cloud.google.com/iam/docs/understanding-roles#predefined_roles [iam-policy]: https://cloud.google.com/iam/docs/overview#cloud-iam-policy [developer-console]: https://console.developers.google.com/ [create-project]: https://cloud.google.com/resource-manager/docs/creating-managing-projects -[cloud-sdk]: https://cloud.google.com/sdk/ +[cloud-cli]: https://cloud.google.com/cli [troubleshooting]: https://github.com/googleapis/google-cloud-common/blob/main/troubleshooting/readme.md#troubleshooting [contributing]: https://github.com/googleapis/java-datastore/blob/main/CONTRIBUTING.md [code-of-conduct]: https://github.com/googleapis/java-datastore/blob/main/CODE_OF_CONDUCT.md#contributor-code-of-conduct diff --git a/datastore-v1-proto-client/pom.xml b/datastore-v1-proto-client/pom.xml index fb4b87dfa..043134488 100644 --- a/datastore-v1-proto-client/pom.xml +++ b/datastore-v1-proto-client/pom.xml @@ -19,12 +19,12 @@ 4.0.0 com.google.cloud.datastore datastore-v1-proto-client - 2.14.0 + 2.14.1 com.google.cloud google-cloud-datastore-parent - 2.14.0 + 2.14.1 jar diff --git a/google-cloud-datastore-bom/pom.xml b/google-cloud-datastore-bom/pom.xml index d98acb0f6..4480914ee 100644 --- a/google-cloud-datastore-bom/pom.xml +++ b/google-cloud-datastore-bom/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.google.cloud google-cloud-datastore-bom - 2.14.0 + 2.14.1 pom com.google.cloud @@ -52,22 +52,22 @@ com.google.cloud google-cloud-datastore - 2.14.0 + 2.14.1 com.google.api.grpc grpc-google-cloud-datastore-admin-v1 - 2.14.0 + 2.14.1 com.google.api.grpc proto-google-cloud-datastore-v1 - 0.105.0 + 0.105.1 com.google.api.grpc proto-google-cloud-datastore-admin-v1 - 2.14.0 + 2.14.1 diff --git a/google-cloud-datastore/pom.xml b/google-cloud-datastore/pom.xml index f12a5adff..c39c37cb4 100644 --- a/google-cloud-datastore/pom.xml +++ b/google-cloud-datastore/pom.xml @@ -2,7 +2,7 @@ 4.0.0 google-cloud-datastore - 2.14.0 + 2.14.1 jar Google Cloud Datastore https://github.com/googleapis/java-datastore @@ -12,7 +12,7 @@ com.google.cloud google-cloud-datastore-parent - 2.14.0 + 2.14.1 google-cloud-datastore diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/stub/HttpJsonDatastoreAdminStub.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/stub/HttpJsonDatastoreAdminStub.java index 131c12763..fda56e1e8 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/stub/HttpJsonDatastoreAdminStub.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/stub/HttpJsonDatastoreAdminStub.java @@ -18,6 +18,7 @@ import static com.google.cloud.datastore.admin.v1.DatastoreAdminClient.ListIndexesPagedResponse; +import com.google.api.HttpRule; import com.google.api.core.BetaApi; import com.google.api.core.InternalApi; import com.google.api.gax.core.BackgroundResource; @@ -33,6 +34,7 @@ import com.google.api.gax.rpc.ClientContext; import com.google.api.gax.rpc.OperationCallable; import com.google.api.gax.rpc.UnaryCallable; +import com.google.common.collect.ImmutableMap; import com.google.datastore.admin.v1.CreateIndexRequest; import com.google.datastore.admin.v1.DeleteIndexRequest; import com.google.datastore.admin.v1.ExportEntitiesMetadata; @@ -365,7 +367,26 @@ protected HttpJsonDatastoreAdminStub( throws IOException { this.callableFactory = callableFactory; this.httpJsonOperationsStub = - HttpJsonOperationsStub.create(clientContext, callableFactory, typeRegistry); + HttpJsonOperationsStub.create( + clientContext, + callableFactory, + typeRegistry, + ImmutableMap.builder() + .put( + "google.longrunning.Operations.CancelOperation", + HttpRule.newBuilder() + .setPost("/v1/{name=projects/*/operations/*}:cancel") + .build()) + .put( + "google.longrunning.Operations.DeleteOperation", + HttpRule.newBuilder().setDelete("/v1/{name=projects/*/operations/*}").build()) + .put( + "google.longrunning.Operations.GetOperation", + HttpRule.newBuilder().setGet("/v1/{name=projects/*/operations/*}").build()) + .put( + "google.longrunning.Operations.ListOperations", + HttpRule.newBuilder().setGet("/v1/{name=projects/*}/operations").build()) + .build()); HttpJsonCallSettings exportEntitiesTransportSettings = HttpJsonCallSettings.newBuilder() diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/package-info.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/package-info.java index f0f35511f..735b8c35a 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/package-info.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/package-info.java @@ -36,7 +36,7 @@ * *

This second example shows how to get and update a Datastore entity if it exists. For the * complete source code see + * href="https://github.com/googleapis/google-cloud-java/blob/4f9e98b21264028901878b8a11204868eca858ce/google-cloud-examples/src/main/java/com/google/cloud/examples/datastore/snippets/UpdateEntity.java"> * UpdateEntity.java. * *

{@code
diff --git a/grpc-google-cloud-datastore-admin-v1/pom.xml b/grpc-google-cloud-datastore-admin-v1/pom.xml
index 723047e68..1b321111a 100644
--- a/grpc-google-cloud-datastore-admin-v1/pom.xml
+++ b/grpc-google-cloud-datastore-admin-v1/pom.xml
@@ -4,13 +4,13 @@
   4.0.0
   com.google.api.grpc
   grpc-google-cloud-datastore-admin-v1
-  2.14.0
+  2.14.1
   grpc-google-cloud-datastore-admin-v1
   GRPC library for google-cloud-datastore
   
     com.google.cloud
     google-cloud-datastore-parent
-    2.14.0
+    2.14.1
   
   
     
diff --git a/pom.xml b/pom.xml
index d37c75682..061acf53a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
   com.google.cloud
   google-cloud-datastore-parent
   pom
-  2.14.0
+  2.14.1
   Google Cloud Datastore Parent
   https://github.com/googleapis/java-datastore
   
@@ -151,7 +151,7 @@
       
         com.google.cloud
         google-cloud-shared-dependencies
-        3.4.0
+        3.5.0
         pom
         import
       
@@ -159,27 +159,27 @@
       
         com.google.api.grpc
         proto-google-cloud-datastore-admin-v1
-        2.14.0
+        2.14.1
       
       
         com.google.api.grpc
         grpc-google-cloud-datastore-admin-v1
-        2.14.0
+        2.14.1
       
       
         com.google.cloud
         google-cloud-datastore
-        2.14.0
+        2.14.1
       
       
         com.google.api.grpc
         proto-google-cloud-datastore-v1
-        0.105.0
+        0.105.1
       
       
         com.google.cloud.datastore
         datastore-v1-proto-client
-        2.14.0
+        2.14.1
         
           
             com.google.api.grpc
diff --git a/proto-google-cloud-datastore-admin-v1/pom.xml b/proto-google-cloud-datastore-admin-v1/pom.xml
index a3de14a29..c53f5bbf8 100644
--- a/proto-google-cloud-datastore-admin-v1/pom.xml
+++ b/proto-google-cloud-datastore-admin-v1/pom.xml
@@ -4,13 +4,13 @@
   4.0.0
   com.google.api.grpc
   proto-google-cloud-datastore-admin-v1
-  2.14.0
+  2.14.1
   proto-google-cloud-datastore-admin-v1
   Proto library for google-cloud-datastore
   
     com.google.cloud
     google-cloud-datastore-parent
-    2.14.0
+    2.14.1
   
   
     
diff --git a/proto-google-cloud-datastore-v1/pom.xml b/proto-google-cloud-datastore-v1/pom.xml
index 31d143ac2..f313978ec 100644
--- a/proto-google-cloud-datastore-v1/pom.xml
+++ b/proto-google-cloud-datastore-v1/pom.xml
@@ -4,13 +4,13 @@
   4.0.0
   com.google.api.grpc
   proto-google-cloud-datastore-v1
-  0.105.0
+  0.105.1
   proto-google-cloud-datastore-v1
   PROTO library for proto-google-cloud-datastore-v1
   
     com.google.cloud
     google-cloud-datastore-parent
-    2.14.0
+    2.14.1
   
   
     
diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml
index bcfc25e97..55263138e 100644
--- a/samples/install-without-bom/pom.xml
+++ b/samples/install-without-bom/pom.xml
@@ -29,7 +29,7 @@
     
       com.google.cloud
       google-cloud-datastore
-      2.13.6
+      2.14.0
     
     
 
diff --git a/samples/native-image-sample/pom.xml b/samples/native-image-sample/pom.xml
index 4b6a7c126..057a2e472 100644
--- a/samples/native-image-sample/pom.xml
+++ b/samples/native-image-sample/pom.xml
@@ -28,7 +28,7 @@
       
         com.google.cloud
         libraries-bom
-        26.9.0
+        26.10.0
         pom
         import
       
@@ -97,7 +97,7 @@
             org.apache.maven.plugins
             maven-surefire-plugin
              
-            2.22.2
+            3.0.0
             
               
                 **/IT*
diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml
index a17839a06..023a84abe 100644
--- a/samples/snapshot/pom.xml
+++ b/samples/snapshot/pom.xml
@@ -28,7 +28,7 @@
     
       com.google.cloud
       google-cloud-datastore
-      2.13.6
+      2.14.0
     
 
     
diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml
index dd85dbe71..1929a106a 100644
--- a/samples/snippets/pom.xml
+++ b/samples/snippets/pom.xml
@@ -30,7 +30,7 @@
       
         com.google.cloud
         libraries-bom
-        26.9.0
+        26.10.0
         pom
         import
       
diff --git a/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java b/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java
index 4013dbe04..1397728ba 100644
--- a/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java
+++ b/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java
@@ -34,6 +34,7 @@
 import com.google.cloud.datastore.IncompleteKey;
 import com.google.cloud.datastore.Key;
 import com.google.cloud.datastore.KeyFactory;
+import com.google.cloud.datastore.KeyQuery;
 import com.google.cloud.datastore.ListValue;
 import com.google.cloud.datastore.PathElement;
 import com.google.cloud.datastore.ProjectionEntity;
@@ -65,7 +66,9 @@
 import java.util.List;
 import java.util.Map;
 import java.util.TimeZone;
+import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
+import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
@@ -129,6 +132,13 @@ public void setUp() {
     datastoreRealBackend = DatastoreOptions.getDefaultInstance().getService();
   }
 
+  @After
+  public void tearDown() throws Exception {
+    KeyQuery taskQuery = Query.newKeyQueryBuilder().setKind("Task").build();
+    Key[] taskKeysToDelete = Iterators.toArray(datastoreRealBackend.run(taskQuery), Key.class);
+    datastoreRealBackend.delete(taskKeysToDelete);
+  }
+
   /**
    * Stops the local Datastore emulator.
    *
@@ -1147,8 +1157,10 @@ public void testInQuerySorted() {
   }
 
   @Test
-  public void testStaleReads() {
+  public void testStaleReads() throws InterruptedException {
     setUpQueryTestsRealBackend();
+    // waiting for 6 seconds, so that we can query with read time of 5 seconds ago
+    TimeUnit.SECONDS.sleep(6);
     Datastore datastoreClient = datastoreRealBackend;
     // [START datastore_stale_read]
     Key taskKey =
@@ -1158,10 +1170,10 @@ public void testStaleReads() {
             .addAncestors(PathElement.of("TaskList", "default"))
             .newKey("someTask");
 
-    Timestamp fifteenSecondsAgo =
-        Timestamp.ofTimeSecondsAndNanos(Timestamp.now().getSeconds() - 15L, 0);
-    // Create a readOption with read time fifteenSecondsAgo
-    ReadOption readOption = ReadOption.readTime(fifteenSecondsAgo);
+    Timestamp fiveSecondsAgo =
+        Timestamp.ofTimeSecondsAndNanos(Timestamp.now().getSeconds() - 5L, 0);
+    // Create a readOption with read time fiveSecondsAgo
+    ReadOption readOption = ReadOption.readTime(fiveSecondsAgo);
     // Use the readOption to Fetch entity
     Entity entity = datastoreClient.get(taskKey, readOption);
 
diff --git a/versions.txt b/versions.txt
index c7c734107..1cb3f4435 100644
--- a/versions.txt
+++ b/versions.txt
@@ -1,9 +1,9 @@
 # Format:
 # module:released-version:current-version
 
-google-cloud-datastore:2.14.0:2.14.0
-google-cloud-datastore-bom:2.14.0:2.14.0
-proto-google-cloud-datastore-v1:0.105.0:0.105.0
-datastore-v1-proto-client:2.14.0:2.14.0
-proto-google-cloud-datastore-admin-v1:2.14.0:2.14.0
-grpc-google-cloud-datastore-admin-v1:2.14.0:2.14.0
+google-cloud-datastore:2.14.1:2.14.1
+google-cloud-datastore-bom:2.14.1:2.14.1
+proto-google-cloud-datastore-v1:0.105.1:0.105.1
+datastore-v1-proto-client:2.14.1:2.14.1
+proto-google-cloud-datastore-admin-v1:2.14.1:2.14.1
+grpc-google-cloud-datastore-admin-v1:2.14.1:2.14.1