Date: Wed, 13 Sep 2023 11:24:14 -0700
Subject: [PATCH 06/15] fix: checksum format (#1178)
Fix checksum format to match the server's format -- unsigned long.
---
.../v1/client/ChecksumEnforcingInputStream.java | 2 +-
.../datastore/v1/client/EndToEndChecksumHandler.java | 10 +++++++---
.../v1/client/EndToEndChecksumHandlerTest.java | 12 +++++++++++-
.../google/datastore/v1/client/RemoteRpcTest.java | 2 +-
4 files changed, 20 insertions(+), 6 deletions(-)
diff --git a/datastore-v1-proto-client/src/main/java/com/google/datastore/v1/client/ChecksumEnforcingInputStream.java b/datastore-v1-proto-client/src/main/java/com/google/datastore/v1/client/ChecksumEnforcingInputStream.java
index 0b91f18e2..e8cc4163a 100644
--- a/datastore-v1-proto-client/src/main/java/com/google/datastore/v1/client/ChecksumEnforcingInputStream.java
+++ b/datastore-v1-proto-client/src/main/java/com/google/datastore/v1/client/ChecksumEnforcingInputStream.java
@@ -76,7 +76,7 @@ public int read(byte[] b, int off, int len) throws IOException {
endToEndChecksumHandler.update(b, off, i);
} else {
// no more payload to read. compute checksum and verify
- if (!expectedChecksum.equalsIgnoreCase(endToEndChecksumHandler.hash())) {
+ if (!expectedChecksum.equals(endToEndChecksumHandler.hash())) {
throw new IOException("possible memory corruption on payload detected");
}
}
diff --git a/datastore-v1-proto-client/src/main/java/com/google/datastore/v1/client/EndToEndChecksumHandler.java b/datastore-v1-proto-client/src/main/java/com/google/datastore/v1/client/EndToEndChecksumHandler.java
index 01aa303c8..3f840a8ba 100644
--- a/datastore-v1-proto-client/src/main/java/com/google/datastore/v1/client/EndToEndChecksumHandler.java
+++ b/datastore-v1-proto-client/src/main/java/com/google/datastore/v1/client/EndToEndChecksumHandler.java
@@ -40,7 +40,11 @@ static String computeChecksum(byte[] bytes) {
return null;
}
HashCode hc = getNewCrc32cHasher().putBytes(bytes).hash();
- return hc.toString();
+ return hashToString(hc);
+ }
+
+ private static String hashToString(HashCode hc) {
+ return String.valueOf(Integer.toUnsignedLong(hc.asInt()));
}
private static Hasher getNewCrc32cHasher() {
@@ -59,7 +63,7 @@ static boolean validateChecksum(String checksum, byte[] bytes) {
&& !checksum.isEmpty()
&& bytes != null
&& bytes.length > 0
- && checksum.equalsIgnoreCase(computeChecksum(bytes));
+ && checksum.equals(computeChecksum(bytes));
}
static boolean hasChecksumHeader(HttpResponse response) {
@@ -76,6 +80,6 @@ void update(byte[] bytes, int off, int len) {
}
String hash() {
- return hasher.hash().toString();
+ return hashToString(hasher.hash());
}
}
diff --git a/datastore-v1-proto-client/src/test/java/com/google/datastore/v1/client/EndToEndChecksumHandlerTest.java b/datastore-v1-proto-client/src/test/java/com/google/datastore/v1/client/EndToEndChecksumHandlerTest.java
index b0a7e4e86..1fdc1906a 100644
--- a/datastore-v1-proto-client/src/test/java/com/google/datastore/v1/client/EndToEndChecksumHandlerTest.java
+++ b/datastore-v1-proto-client/src/test/java/com/google/datastore/v1/client/EndToEndChecksumHandlerTest.java
@@ -16,6 +16,7 @@
package com.google.datastore.v1.client;
import static java.nio.charset.StandardCharsets.UTF_8;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
@@ -27,7 +28,10 @@
/** Test for {@link EndToEndChecksumHandler}. */
@RunWith(JUnit4.class)
public class EndToEndChecksumHandlerTest {
- private byte[] payloadBytes = "This is a long string with numbers 1234, 134.56 ".getBytes(UTF_8);
+ private final byte[] payloadBytes =
+ "This is a long string with numbers 1234, 134.56 ".getBytes(UTF_8);
+ private final byte[] payloadForUnsignedLongChecksum = "aaa".getBytes(UTF_8);
+ private final String unsignedLongChecksum = "3818383321";
@Test
public void validateChecksum_correctChecksum() {
@@ -35,6 +39,12 @@ public void validateChecksum_correctChecksum() {
assertTrue(EndToEndChecksumHandler.validateChecksum(computed, payloadBytes));
}
+ @Test
+ public void computeChecksum_returnsUnsignedLongAsStringValue() {
+ String computed = EndToEndChecksumHandler.computeChecksum(payloadForUnsignedLongChecksum);
+ assertEquals("computeChecksum return value", unsignedLongChecksum, computed);
+ }
+
@Test
public void validateChecksum_incorrectChecksum() {
String computed = EndToEndChecksumHandler.computeChecksum("random string".getBytes(UTF_8));
diff --git a/datastore-v1-proto-client/src/test/java/com/google/datastore/v1/client/RemoteRpcTest.java b/datastore-v1-proto-client/src/test/java/com/google/datastore/v1/client/RemoteRpcTest.java
index 281e92f04..28e3f20b8 100644
--- a/datastore-v1-proto-client/src/test/java/com/google/datastore/v1/client/RemoteRpcTest.java
+++ b/datastore-v1-proto-client/src/test/java/com/google/datastore/v1/client/RemoteRpcTest.java
@@ -176,7 +176,7 @@ public void testHttpHeaders_expectE2eChecksumHeader() throws IOException {
httpRequest
.getHeaders()
.getFirstHeaderStringValue(EndToEndChecksumHandler.HTTP_REQUEST_CHECKSUM_HEADER);
- assertEquals(8, header.length());
+ assertEquals(9, header.length());
}
@Test
From 12a3d27ebc7ca87338ee896fd6ba3e804edd95ce Mon Sep 17 00:00:00 2001
From: kolea2 <45548808+kolea2@users.noreply.github.com>
Date: Thu, 14 Sep 2023 10:58:14 -0400
Subject: [PATCH 07/15] fix: deprecate `databaseId` on
datastore-v1-proto-client DatastoreOptions (#1190)
---
.../datastore/v1/client/DatastoreOptions.java | 33 +++++++++++++++++--
.../v1/client/DatastoreClientTest.java | 1 +
.../datastore/spi/v1/HttpDatastoreRpc.java | 1 -
3 files changed, 31 insertions(+), 4 deletions(-)
diff --git a/datastore-v1-proto-client/src/main/java/com/google/datastore/v1/client/DatastoreOptions.java b/datastore-v1-proto-client/src/main/java/com/google/datastore/v1/client/DatastoreOptions.java
index eefd629ec..687410d78 100644
--- a/datastore-v1-proto-client/src/main/java/com/google/datastore/v1/client/DatastoreOptions.java
+++ b/datastore-v1-proto-client/src/main/java/com/google/datastore/v1/client/DatastoreOptions.java
@@ -41,7 +41,9 @@
*/
public class DatastoreOptions {
private final String projectId;
- private final String databaseId;
+
+ @Deprecated private final String databaseId;
+
private final String projectEndpoint;
private final String host;
private final String localHost;
@@ -75,7 +77,9 @@ public static class Builder {
"Can set at most one of project endpoint, host, and local host.";
private String projectId;
- private String databaseId;
+
+ @Deprecated private String databaseId;
+
private String projectEndpoint;
private String host;
private String localHost;
@@ -107,8 +111,19 @@ public Builder projectId(String projectId) {
return this;
}
- /** Sets the database ID used to access Cloud Datastore. */
+ /**
+ * This field is ignored and will be removed in a future release. Please set the database id on
+ * the request itself. For example:
+ *
+ * {@code
+ * CommitRequest.newBuilder()
+ * .setDatabaseId("my-database-id")
+ * ....
+ * .build();
+ * }
+ */
@BetaApi
+ @Deprecated
public Builder databaseId(String databaseId) {
this.databaseId = databaseId;
return this;
@@ -188,7 +203,19 @@ public String getProjectId() {
return projectId;
}
+ /**
+ * This field is ignored and will be removed in a future release. Please set the database id on
+ * the request itself. For example:
+ *
+ * {@code
+ * CommitRequest.newBuilder()
+ * .setDatabaseId("my-database-id")
+ * ....
+ * .build();
+ * }
+ */
@BetaApi
+ @Deprecated
public String getDatabaseId() {
return databaseId;
}
diff --git a/datastore-v1-proto-client/src/test/java/com/google/datastore/v1/client/DatastoreClientTest.java b/datastore-v1-proto-client/src/test/java/com/google/datastore/v1/client/DatastoreClientTest.java
index 3eb7a66de..3fd82ddca 100644
--- a/datastore-v1-proto-client/src/test/java/com/google/datastore/v1/client/DatastoreClientTest.java
+++ b/datastore-v1-proto-client/src/test/java/com/google/datastore/v1/client/DatastoreClientTest.java
@@ -216,6 +216,7 @@ public void create_LocalHost() {
}
@Test
+ // TODO: remove this test once deprecated `databaseId` is removed
public void setDatabaseId() {
DatastoreOptions options =
new DatastoreOptions.Builder()
diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/spi/v1/HttpDatastoreRpc.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/spi/v1/HttpDatastoreRpc.java
index cfbbaa7df..fd3cdc658 100644
--- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/spi/v1/HttpDatastoreRpc.java
+++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/spi/v1/HttpDatastoreRpc.java
@@ -55,7 +55,6 @@ public HttpDatastoreRpc(DatastoreOptions options) {
com.google.datastore.v1.client.DatastoreOptions.Builder clientBuilder =
new com.google.datastore.v1.client.DatastoreOptions.Builder()
.projectId(options.getProjectId())
- .databaseId(options.getDatabaseId())
.initializer(getHttpRequestInitializer(options, httpTransportOptions))
.transport(transport);
String normalizedHost = options.getHost() != null ? options.getHost().toLowerCase() : "";
From c6be76a45d45bb8fb30efef859194644f2c2f7da Mon Sep 17 00:00:00 2001
From: Mend Renovate
Date: Fri, 15 Sep 2023 06:48:06 +0200
Subject: [PATCH 08/15] chore(deps): update dependency
com.google.cloud:libraries-bom to v26.23.0 (#1191)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* chore(deps): update dependency com.google.cloud:libraries-bom to v26.23.0
* 🦉 Updates from OwlBot post-processor
See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md
---------
Co-authored-by: Owl Bot
---
README.md | 4 ++--
samples/native-image-sample/pom.xml | 2 +-
samples/snippets/pom.xml | 2 +-
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/README.md b/README.md
index f7172c9ba..a6aa140f2 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.22.0
+ 26.23.0
pom
import
@@ -50,7 +50,7 @@ If you are using Maven without the BOM, add this to your dependencies:
If you are using Gradle 5.x or later, add this to your dependencies:
```Groovy
-implementation platform('com.google.cloud:libraries-bom:26.22.0')
+implementation platform('com.google.cloud:libraries-bom:26.23.0')
implementation 'com.google.cloud:google-cloud-datastore'
```
diff --git a/samples/native-image-sample/pom.xml b/samples/native-image-sample/pom.xml
index 0fadbb5df..53c93e4e1 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.22.0
+ 26.23.0
pom
import
diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml
index eb806662d..d2f0cde15 100644
--- a/samples/snippets/pom.xml
+++ b/samples/snippets/pom.xml
@@ -30,7 +30,7 @@
com.google.cloud
libraries-bom
- 26.22.0
+ 26.23.0
pom
import
From a628255dffc2e8f871df699ebe7a94e4b75eb4b9 Mon Sep 17 00:00:00 2001
From: Mend Renovate
Date: Fri, 15 Sep 2023 16:47:10 +0200
Subject: [PATCH 09/15] deps: update dependency
org.graalvm.buildtools:native-maven-plugin to v0.9.27 (#1193)
---
samples/native-image-sample/pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/samples/native-image-sample/pom.xml b/samples/native-image-sample/pom.xml
index 53c93e4e1..03a28ebbf 100644
--- a/samples/native-image-sample/pom.xml
+++ b/samples/native-image-sample/pom.xml
@@ -107,7 +107,7 @@
org.graalvm.buildtools
native-maven-plugin
- 0.9.26
+ 0.9.27
true
com.example.datastore.NativeImageDatastoreSample
From aa3bca10de19350cabc244426ebc284c64cb7344 Mon Sep 17 00:00:00 2001
From: Mend Renovate
Date: Fri, 15 Sep 2023 16:52:14 +0200
Subject: [PATCH 10/15] deps: update dependency
org.graalvm.buildtools:junit-platform-native to v0.9.27 (#1192)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
[](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [org.graalvm.buildtools:junit-platform-native](https://togithub.com/graalvm/native-build-tools) | `0.9.26` -> `0.9.27` | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) |
---
### Configuration
📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.
â™» **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update again.
---
- [ ] If you want to rebase/retry this PR, check this box
---
This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/googleapis/java-datastore).
---
samples/native-image-sample/pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/samples/native-image-sample/pom.xml b/samples/native-image-sample/pom.xml
index 03a28ebbf..5e36f7335 100644
--- a/samples/native-image-sample/pom.xml
+++ b/samples/native-image-sample/pom.xml
@@ -86,7 +86,7 @@
org.graalvm.buildtools
junit-platform-native
- 0.9.26
+ 0.9.27
test