This is an automated email from the ASF dual-hosted git repository.
yhu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/beam.git
The following commit(s) were added to refs/heads/master by this push:
new 4df89c704b0 Allow Firestore project to be configurable (#31808)
4df89c704b0 is described below
commit 4df89c704b066b9708d10ff36b8bca6af645c9ab
Author: Vitaly Terentyev <[email protected]>
AuthorDate: Wed Jul 10 19:05:32 2024 +0400
Allow Firestore project to be configurable (#31808)
---
.../apache/beam/sdk/io/gcp/firestore/FirestoreOptions.java | 11 +++++++++++
.../apache/beam/sdk/io/gcp/firestore/FirestoreV1ReadFn.java | 9 +++++++--
.../apache/beam/sdk/io/gcp/firestore/FirestoreV1WriteFn.java | 9 +++++++--
.../beam/sdk/io/gcp/firestore/it/FirestoreTestingHelper.java | 5 ++++-
4 files changed, 29 insertions(+), 5 deletions(-)
diff --git
a/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/firestore/FirestoreOptions.java
b/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/firestore/FirestoreOptions.java
index a292a106e51..5adc9ef38f3 100644
---
a/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/firestore/FirestoreOptions.java
+++
b/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/firestore/FirestoreOptions.java
@@ -17,6 +17,7 @@
*/
package org.apache.beam.sdk.io.gcp.firestore;
+import org.apache.beam.sdk.extensions.gcp.options.GcpOptions;
import org.apache.beam.sdk.options.Default;
import org.apache.beam.sdk.options.Description;
import org.apache.beam.sdk.options.PipelineOptions;
@@ -75,4 +76,14 @@ public interface FirestoreOptions extends PipelineOptions {
* @param host the host and port to connect to
*/
void setFirestoreHost(String host);
+
+ /** The Firestore project ID to connect to. */
+ @Description("Firestore project ID")
+ @Nullable
+ String getFirestoreProject();
+
+ /**
+ * Set the Firestore project ID, it will override the value from {@link
GcpOptions#getProject()}.
+ */
+ void setFirestoreProject(String firestoreProject);
}
diff --git
a/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/firestore/FirestoreV1ReadFn.java
b/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/firestore/FirestoreV1ReadFn.java
index b4a334b75c9..51e5efa380e 100644
---
a/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/firestore/FirestoreV1ReadFn.java
+++
b/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/firestore/FirestoreV1ReadFn.java
@@ -635,9 +635,14 @@ final class FirestoreV1ReadFn {
/** {@inheritDoc} */
@Override
public final void startBundle(StartBundleContext c) {
- String project =
c.getPipelineOptions().as(GcpOptions.class).getProject();
+ String project =
c.getPipelineOptions().as(FirestoreOptions.class).getFirestoreProject();
+ if (project == null) {
+ project = c.getPipelineOptions().as(GcpOptions.class).getProject();
+ }
projectId =
- requireNonNull(project, "project must be defined on GcpOptions of
PipelineOptions");
+ requireNonNull(
+ project,
+ "project must be defined on FirestoreOptions or GcpOptions of
PipelineOptions");
firestoreStub =
firestoreStatefulComponentFactory.getFirestoreStub(c.getPipelineOptions());
}
diff --git
a/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/firestore/FirestoreV1WriteFn.java
b/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/firestore/FirestoreV1WriteFn.java
index 3e9e1890c1e..09378d4f80c 100644
---
a/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/firestore/FirestoreV1WriteFn.java
+++
b/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/firestore/FirestoreV1WriteFn.java
@@ -202,11 +202,16 @@ final class FirestoreV1WriteFn {
@Override
public final void startBundle(StartBundleContext c) {
- String project =
c.getPipelineOptions().as(GcpOptions.class).getProject();
+ String project =
c.getPipelineOptions().as(FirestoreOptions.class).getFirestoreProject();
+ if (project == null) {
+ project = c.getPipelineOptions().as(GcpOptions.class).getProject();
+ }
String databaseId =
c.getPipelineOptions().as(FirestoreOptions.class).getFirestoreDb();
databaseRootName =
DatabaseRootName.of(
- requireNonNull(project, "project must be defined on GcpOptions
of PipelineOptions"),
+ requireNonNull(
+ project,
+ "project must be defined on FirestoreOptions or GcpOptions
of PipelineOptions"),
requireNonNull(
databaseId,
"firestoreDb must be defined on FirestoreOptions of
PipelineOptions"));
diff --git
a/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/firestore/it/FirestoreTestingHelper.java
b/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/firestore/it/FirestoreTestingHelper.java
index a57dd688d4a..d3a82bf24ce 100644
---
a/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/firestore/it/FirestoreTestingHelper.java
+++
b/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/firestore/it/FirestoreTestingHelper.java
@@ -17,6 +17,8 @@
*/
package org.apache.beam.sdk.io.gcp.firestore.it;
+import static
org.apache.beam.vendor.guava.v32_1_2_jre.com.google.common.base.MoreObjects.firstNonNull;
+
import com.google.api.core.ApiFunction;
import com.google.api.core.ApiFuture;
import com.google.api.core.ApiFutures;
@@ -132,7 +134,8 @@ final class FirestoreTestingHelper implements TestRule {
firestoreOptions =
FirestoreOptions.newBuilder()
.setCredentials(gcpOptions.getGcpCredential())
- .setProjectId(gcpOptions.getProject())
+ .setProjectId(
+ firstNonNull(firestoreBeamOptions.getFirestoreProject(),
gcpOptions.getProject()))
.setDatabaseId(firestoreBeamOptions.getFirestoreDb())
.setHost(firestoreBeamOptions.getFirestoreHost())
.build();