From a94ce0890b3802a7bccf05e8b44d53a2513b3648 Mon Sep 17 00:00:00 2001 From: jimit-j-shah <57637300+jimit-j-shah@users.noreply.github.com> Date: Wed, 26 Mar 2025 16:33:15 -0700 Subject: [PATCH 1/2] feat: Add if the op is a `transaction` to gRPC request header. This will be used for routing optimizations. --- .../firestore/v1/stub/GrpcFirestoreStub.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/v1/stub/GrpcFirestoreStub.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/v1/stub/GrpcFirestoreStub.java index c0717e8c1..c737f061f 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/v1/stub/GrpcFirestoreStub.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/v1/stub/GrpcFirestoreStub.java @@ -58,6 +58,7 @@ import com.google.firestore.v1.WriteRequest; import com.google.firestore.v1.WriteResponse; import com.google.longrunning.stub.GrpcOperationsStub; +import com.google.protobuf.ByteString; import com.google.protobuf.Empty; import io.grpc.MethodDescriptor; import io.grpc.protobuf.ProtoUtils; @@ -302,6 +303,7 @@ protected GrpcFirestoreStub( request -> { RequestParamsBuilder builder = RequestParamsBuilder.create(); builder.add("name", String.valueOf(request.getName())); + builder.add("transaction", (request.hasTransaction() ? "true" : "false")); return builder.build(); }) .build(); @@ -313,6 +315,7 @@ protected GrpcFirestoreStub( RequestParamsBuilder builder = RequestParamsBuilder.create(); builder.add("collection_id", String.valueOf(request.getCollectionId())); builder.add("parent", String.valueOf(request.getParent())); + builder.add("transaction", (request.hasTransaction() ? "true" : "false")); return builder.build(); }) .build(); @@ -344,6 +347,11 @@ protected GrpcFirestoreStub( request -> { RequestParamsBuilder builder = RequestParamsBuilder.create(); builder.add("database", String.valueOf(request.getDatabase())); + builder.add( + "transaction", + (request.hasTransaction() || request.hasNewTransaction() + ? "true" + : "false")); return builder.build(); }) .build(); @@ -355,6 +363,7 @@ protected GrpcFirestoreStub( request -> { RequestParamsBuilder builder = RequestParamsBuilder.create(); builder.add("database", String.valueOf(request.getDatabase())); + builder.add("transaction", "true"); return builder.build(); }) .build(); @@ -365,6 +374,9 @@ protected GrpcFirestoreStub( request -> { RequestParamsBuilder builder = RequestParamsBuilder.create(); builder.add("database", String.valueOf(request.getDatabase())); + builder.add( + "transaction", + (request.getTransaction().equals(ByteString.EMPTY) ? "false" : "true")); return builder.build(); }) .build(); @@ -375,6 +387,7 @@ protected GrpcFirestoreStub( request -> { RequestParamsBuilder builder = RequestParamsBuilder.create(); builder.add("database", String.valueOf(request.getDatabase())); + builder.add("transaction", "true"); return builder.build(); }) .build(); @@ -385,6 +398,9 @@ protected GrpcFirestoreStub( request -> { RequestParamsBuilder builder = RequestParamsBuilder.create(); builder.add("parent", String.valueOf(request.getParent())); + builder.add( + "transaction", + (request.hasTransaction() || request.hasNewTransaction() ? "true" : "false")); return builder.build(); }) .build(); @@ -396,6 +412,11 @@ protected GrpcFirestoreStub( request -> { RequestParamsBuilder builder = RequestParamsBuilder.create(); builder.add("parent", String.valueOf(request.getParent())); + builder.add( + "transaction", + (request.hasTransaction() || request.hasNewTransaction() + ? "true" + : "false")); return builder.build(); }) .build(); From 014ae124a72991efeb135ec0e908bb40af97e928 Mon Sep 17 00:00:00 2001 From: cloud-java-bot Date: Wed, 26 Mar 2025 23:41:57 +0000 Subject: [PATCH 2/2] chore: generate libraries at Wed Mar 26 23:40:18 UTC 2025 --- .../GrpcRoutingHeaderInterceptorProvider.java | 48 ------------------- .../v1/stub/FirestoreStubSettings.java | 6 +-- .../firestore/v1/stub/GrpcFirestoreStub.java | 21 -------- ...cRoutingHeaderInterceptorProviderTest.java | 33 ------------- 4 files changed, 1 insertion(+), 107 deletions(-) delete mode 100644 google-cloud-firestore/src/main/java/com/google/cloud/firestore/v1/GrpcRoutingHeaderInterceptorProvider.java delete mode 100644 google-cloud-firestore/src/test/java/com/google/cloud/firestore/v1/GrpcRoutingHeaderInterceptorProviderTest.java diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/v1/GrpcRoutingHeaderInterceptorProvider.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/v1/GrpcRoutingHeaderInterceptorProvider.java deleted file mode 100644 index 409b0f64e..000000000 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/v1/GrpcRoutingHeaderInterceptorProvider.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 2025 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 - * - * http://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.firestore.v1; - -import com.google.api.core.InternalApi; -import com.google.api.gax.grpc.GrpcHeaderInterceptor; -import com.google.api.gax.grpc.GrpcInterceptorProvider; -import io.grpc.ClientInterceptor; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import javax.annotation.Nonnull; - -@InternalApi -public class GrpcRoutingHeaderInterceptorProvider implements GrpcInterceptorProvider { - private static final String X_GOOG_SKIP_FIRESTORE_DFE = "x-goog-firestore-skip-dfe"; - List clientInterceptors; - - private GrpcRoutingHeaderInterceptorProvider( - @Nonnull GrpcHeaderInterceptor grpcRoutingHeaderInterceptor) { - clientInterceptors = Collections.singletonList(grpcRoutingHeaderInterceptor); - } - - public static GrpcRoutingHeaderInterceptorProvider defaultGrpcRoutingHeaderInterceptorProvider() { - Map staticHeaders = new HashMap(); - staticHeaders.put(X_GOOG_SKIP_FIRESTORE_DFE, "true"); - return new GrpcRoutingHeaderInterceptorProvider(new GrpcHeaderInterceptor(staticHeaders)); - } - - @Override - public List getInterceptors() { - return clientInterceptors; - } -} diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/v1/stub/FirestoreStubSettings.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/v1/stub/FirestoreStubSettings.java index 74f61bbb4..92d6c8a00 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/v1/stub/FirestoreStubSettings.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/v1/stub/FirestoreStubSettings.java @@ -48,7 +48,6 @@ 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.firestore.v1.GrpcRoutingHeaderInterceptorProvider; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; @@ -483,10 +482,7 @@ public static InstantiatingGrpcChannelProvider.Builder defaultGrpcTransportProvi } public static TransportChannelProvider defaultTransportChannelProvider() { - return defaultGrpcTransportProviderBuilder() - .setInterceptorProvider( - GrpcRoutingHeaderInterceptorProvider.defaultGrpcRoutingHeaderInterceptorProvider()) - .build(); + return defaultGrpcTransportProviderBuilder().build(); } public static ApiClientHeaderProvider.Builder defaultGrpcApiClientHeaderProviderBuilder() { diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/v1/stub/GrpcFirestoreStub.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/v1/stub/GrpcFirestoreStub.java index c737f061f..c0717e8c1 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/v1/stub/GrpcFirestoreStub.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/v1/stub/GrpcFirestoreStub.java @@ -58,7 +58,6 @@ import com.google.firestore.v1.WriteRequest; import com.google.firestore.v1.WriteResponse; import com.google.longrunning.stub.GrpcOperationsStub; -import com.google.protobuf.ByteString; import com.google.protobuf.Empty; import io.grpc.MethodDescriptor; import io.grpc.protobuf.ProtoUtils; @@ -303,7 +302,6 @@ protected GrpcFirestoreStub( request -> { RequestParamsBuilder builder = RequestParamsBuilder.create(); builder.add("name", String.valueOf(request.getName())); - builder.add("transaction", (request.hasTransaction() ? "true" : "false")); return builder.build(); }) .build(); @@ -315,7 +313,6 @@ protected GrpcFirestoreStub( RequestParamsBuilder builder = RequestParamsBuilder.create(); builder.add("collection_id", String.valueOf(request.getCollectionId())); builder.add("parent", String.valueOf(request.getParent())); - builder.add("transaction", (request.hasTransaction() ? "true" : "false")); return builder.build(); }) .build(); @@ -347,11 +344,6 @@ protected GrpcFirestoreStub( request -> { RequestParamsBuilder builder = RequestParamsBuilder.create(); builder.add("database", String.valueOf(request.getDatabase())); - builder.add( - "transaction", - (request.hasTransaction() || request.hasNewTransaction() - ? "true" - : "false")); return builder.build(); }) .build(); @@ -363,7 +355,6 @@ protected GrpcFirestoreStub( request -> { RequestParamsBuilder builder = RequestParamsBuilder.create(); builder.add("database", String.valueOf(request.getDatabase())); - builder.add("transaction", "true"); return builder.build(); }) .build(); @@ -374,9 +365,6 @@ protected GrpcFirestoreStub( request -> { RequestParamsBuilder builder = RequestParamsBuilder.create(); builder.add("database", String.valueOf(request.getDatabase())); - builder.add( - "transaction", - (request.getTransaction().equals(ByteString.EMPTY) ? "false" : "true")); return builder.build(); }) .build(); @@ -387,7 +375,6 @@ protected GrpcFirestoreStub( request -> { RequestParamsBuilder builder = RequestParamsBuilder.create(); builder.add("database", String.valueOf(request.getDatabase())); - builder.add("transaction", "true"); return builder.build(); }) .build(); @@ -398,9 +385,6 @@ protected GrpcFirestoreStub( request -> { RequestParamsBuilder builder = RequestParamsBuilder.create(); builder.add("parent", String.valueOf(request.getParent())); - builder.add( - "transaction", - (request.hasTransaction() || request.hasNewTransaction() ? "true" : "false")); return builder.build(); }) .build(); @@ -412,11 +396,6 @@ protected GrpcFirestoreStub( request -> { RequestParamsBuilder builder = RequestParamsBuilder.create(); builder.add("parent", String.valueOf(request.getParent())); - builder.add( - "transaction", - (request.hasTransaction() || request.hasNewTransaction() - ? "true" - : "false")); return builder.build(); }) .build(); diff --git a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/v1/GrpcRoutingHeaderInterceptorProviderTest.java b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/v1/GrpcRoutingHeaderInterceptorProviderTest.java deleted file mode 100644 index f701e2e48..000000000 --- a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/v1/GrpcRoutingHeaderInterceptorProviderTest.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2025 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 - * - * http://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.firestore.v1; - -import static org.junit.Assert.assertEquals; - -import com.google.api.gax.grpc.GrpcHeaderInterceptor; -import io.grpc.ClientInterceptor; -import org.junit.Test; - -public class GrpcRoutingHeaderInterceptorProviderTest { - @Test - public void testDefaultGrpcRoutingHeaderInterceptorProvider() { - GrpcRoutingHeaderInterceptorProvider interceptorProvider = - GrpcRoutingHeaderInterceptorProvider.defaultGrpcRoutingHeaderInterceptorProvider(); - assertEquals(1, interceptorProvider.getInterceptors().size()); - ClientInterceptor clientInterceptor = interceptorProvider.getInterceptors().get(0); - assertEquals(GrpcHeaderInterceptor.class.getName(), clientInterceptor.getClass().getName()); - } -}