From b94ffeeaf7f7e3083ca20fae1f7e7211544117f9 Mon Sep 17 00:00:00 2001 From: Sebastian Schmidt Date: Tue, 29 May 2018 13:49:13 -0700 Subject: [PATCH 1/3] Exposing TransportChannelProvider & CredentialsProvider --- .../cloud/firestore/FirestoreOptions.java | 146 ++++++++++++++++-- .../spi/v1beta1/GrpcFirestoreRpc.java | 8 +- 2 files changed, 133 insertions(+), 21 deletions(-) diff --git a/google-cloud-clients/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FirestoreOptions.java b/google-cloud-clients/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FirestoreOptions.java index 01886df6ccf4..fe67d6bed403 100644 --- a/google-cloud-clients/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FirestoreOptions.java +++ b/google-cloud-clients/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FirestoreOptions.java @@ -17,6 +17,10 @@ package com.google.cloud.firestore; import com.google.api.core.InternalApi; +import com.google.api.gax.core.CredentialsProvider; +import com.google.api.gax.core.GoogleCredentialsProvider; +import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; +import com.google.api.gax.rpc.TransportChannelProvider; import com.google.cloud.ServiceDefaults; import com.google.cloud.ServiceOptions; import com.google.cloud.TransportOptions; @@ -26,6 +30,7 @@ import com.google.cloud.grpc.GrpcTransportOptions; import com.google.common.collect.ImmutableSet; import java.io.IOException; +import java.util.Objects; import java.util.Set; import javax.annotation.Nonnull; @@ -38,11 +43,12 @@ public final class FirestoreOptions extends ServiceOptions { - private String databaseId = DEFAULT_DATABASE_ID; + private String databaseId = FirestoreDefaults.INSTANCE.getDatabaseId(); + private TransportChannelProvider channelProvider = + FirestoreDefaults.INSTANCE.getTransportChannelProvider(); + private CredentialsProvider credentialsProvider = + FirestoreDefaults.INSTANCE.getCredentialsProvider(); private Builder() {} private Builder(FirestoreOptions options) { super(options); + this.databaseId = options.databaseId; + this.channelProvider = options.channelProvider; + this.credentialsProvider = options.credentialsProvider; } + /** + * Sets the {@link TransportOptions} to use with this Firestore client. + * + * @param transportOptions A GrpcTransportOptions object that defines the transport options for + * this client. + */ @Nonnull @Override public Builder setTransportOptions(@Nonnull TransportOptions transportOptions) { if (!(transportOptions instanceof GrpcTransportOptions)) { throw new IllegalArgumentException( - "Only grpc transport is allowed for " + API_SHORT_NAME + "."); + "Only GRPC transport is allowed for " + API_SHORT_NAME + "."); } return super.setTransportOptions(transportOptions); } - @Override + /** + * Sets the {@link TransportChannelProvider} to use with this Firestore client. + * + * @param channelProvider A InstantiatingGrpcChannelProvider object that defines the transport + * provider for this client. + */ @Nonnull - public FirestoreOptions build() { - return new FirestoreOptions(this); + public Builder setChannelProvider(@Nonnull TransportChannelProvider channelProvider) { + if (!(channelProvider instanceof InstantiatingGrpcChannelProvider)) { + throw new IllegalArgumentException( + "Only GRPC channels are allowed for " + API_SHORT_NAME + "."); + } + this.channelProvider = channelProvider; + return this; } + /** + * Sets the {@link CredentialsProvider} to use with this Firestore client. + * + * @param credentialsProvider A GoogleCredentialsProvider object that defines the credential + * provider for this client. + */ + @Nonnull + public Builder setCredentialsProvider(@Nonnull CredentialsProvider credentialsProvider) { + if (!(credentialsProvider instanceof GoogleCredentialsProvider)) { + throw new IllegalArgumentException( + "Only Google credentials are allowed for " + API_SHORT_NAME + "."); + } + this.credentialsProvider = credentialsProvider; + return this; + } + + /** + * Sets the database ID to use with this Firestore client. + * + * @param databaseId The Firestore database ID to use with this client. + */ public Builder setDatabaseId(String databaseId) { this.databaseId = databaseId; return this; } + + @Override + @Nonnull + public FirestoreOptions build() { + return new FirestoreOptions(this); + } } @InternalApi("This class should only be extended within google-cloud-java") @@ -126,9 +190,21 @@ protected FirestoreOptions(Builder builder) { super(FirestoreFactory.class, FirestoreRpcFactory.class, builder, new FirestoreDefaults()); this.databaseId = builder.databaseId; + this.channelProvider = builder.channelProvider; + this.credentialsProvider = builder.credentialsProvider; } private static class FirestoreDefaults implements ServiceDefaults { + private static final FirestoreDefaults INSTANCE = new FirestoreDefaults(); + + private final String HOST = FirestoreSettings.getDefaultEndpoint(); + private final String DATABASE_ID = "(default)"; + private final TransportOptions TRANSPORT_OPTIONS = + getDefaultTransportOptionsBuilder().build(); + private final TransportChannelProvider CHANNEL_PROVIDER = + getDefaultTransportChannelProviderBuilder().build(); + private final CredentialsProvider CREDENTIALS_PROVIDER = + getDefaultCredentialsProviderBuilder().build(); @Nonnull @Override @@ -145,13 +221,44 @@ public FirestoreRpcFactory getDefaultRpcFactory() { @Nonnull @Override public TransportOptions getDefaultTransportOptions() { - return getDefaultGrpcTransportOptions(); + return TRANSPORT_OPTIONS; + } + + @Nonnull + TransportChannelProvider getTransportChannelProvider() { + return CHANNEL_PROVIDER; + } + + @Nonnull + String getHost() { + return HOST; + } + + @Nonnull + String getDatabaseId() { + return DATABASE_ID; } + + @Nonnull + CredentialsProvider getCredentialsProvider() { + return CREDENTIALS_PROVIDER; + } + } + + @Nonnull + public static GrpcTransportOptions.Builder getDefaultTransportOptionsBuilder() { + return GrpcTransportOptions.newBuilder(); } @Nonnull - public static GrpcTransportOptions getDefaultGrpcTransportOptions() { - return GrpcTransportOptions.newBuilder().build(); + public static InstantiatingGrpcChannelProvider.Builder + getDefaultTransportChannelProviderBuilder() { + return FirestoreSettings.defaultGrpcTransportProviderBuilder(); + } + + @Nonnull + public static GoogleCredentialsProvider.Builder getDefaultCredentialsProviderBuilder() { + return FirestoreSettings.defaultCredentialsProviderBuilder(); } @Override @@ -164,13 +271,22 @@ FirestoreRpc getFirestoreRpc() { } @Override - public boolean equals(Object obj) { - return obj instanceof FirestoreOptions && baseEquals((FirestoreOptions) obj); + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + FirestoreOptions that = (FirestoreOptions) o; + return Objects.equals(databaseId, that.databaseId) + && Objects.equals(channelProvider, that.channelProvider) + && baseEquals(that); } @Override public int hashCode() { - return baseHashCode(); + return Objects.hash(databaseId, channelProvider, baseHashCode()); } @Nonnull diff --git a/google-cloud-clients/google-cloud-firestore/src/main/java/com/google/cloud/firestore/spi/v1beta1/GrpcFirestoreRpc.java b/google-cloud-clients/google-cloud-firestore/src/main/java/com/google/cloud/firestore/spi/v1beta1/GrpcFirestoreRpc.java index 6bfb20e30891..074105d41274 100644 --- a/google-cloud-clients/google-cloud-firestore/src/main/java/com/google/cloud/firestore/spi/v1beta1/GrpcFirestoreRpc.java +++ b/google-cloud-clients/google-cloud-firestore/src/main/java/com/google/cloud/firestore/spi/v1beta1/GrpcFirestoreRpc.java @@ -21,7 +21,6 @@ import com.google.api.gax.core.GaxProperties; import com.google.api.gax.grpc.GrpcCallContext; import com.google.api.gax.grpc.GrpcTransportChannel; -import com.google.api.gax.rpc.ApiClientHeaderProvider; import com.google.api.gax.rpc.BidiStreamingCallable; import com.google.api.gax.rpc.ClientContext; import com.google.api.gax.rpc.HeaderProvider; @@ -105,11 +104,8 @@ public GrpcFirestoreRpc(final FirestoreOptions options) throws IOException { DatabaseRootName databaseName = DatabaseRootName.of(options.getProjectId(), options.getDatabaseId()); - settingsBuilder.setCredentialsProvider( - GrpcTransportOptions.setUpCredentialsProvider(options)); - settingsBuilder.setTransportChannelProvider( - GrpcTransportOptions.setUpChannelProvider( - FirestoreSettings.defaultGrpcTransportProviderBuilder(), options)); + settingsBuilder.setCredentialsProvider(options.getCredentialsProvider()); + settingsBuilder.setTransportChannelProvider(options.getTransportChannelProvider()); HeaderProvider internalHeaderProvider = FirestoreSettings.defaultApiClientHeaderProviderBuilder() From 05587c317b2cb8968039df3a360968bcd08d12a8 Mon Sep 17 00:00:00 2001 From: Sebastian Schmidt Date: Wed, 30 May 2018 14:18:31 -0700 Subject: [PATCH 2/3] Removing GoogleCredentialsProvider restrictrion --- .../java/com/google/cloud/firestore/FirestoreOptions.java | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/google-cloud-clients/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FirestoreOptions.java b/google-cloud-clients/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FirestoreOptions.java index fe67d6bed403..02f41f0fa04e 100644 --- a/google-cloud-clients/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FirestoreOptions.java +++ b/google-cloud-clients/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FirestoreOptions.java @@ -155,15 +155,11 @@ public Builder setChannelProvider(@Nonnull TransportChannelProvider channelProvi /** * Sets the {@link CredentialsProvider} to use with this Firestore client. * - * @param credentialsProvider A GoogleCredentialsProvider object that defines the credential - * provider for this client. + * @param credentialsProvider A CredentialsProvider object that defines the credential provider + * for this client. */ @Nonnull public Builder setCredentialsProvider(@Nonnull CredentialsProvider credentialsProvider) { - if (!(credentialsProvider instanceof GoogleCredentialsProvider)) { - throw new IllegalArgumentException( - "Only Google credentials are allowed for " + API_SHORT_NAME + "."); - } this.credentialsProvider = credentialsProvider; return this; } From 6668cd1240786fa052a9723324dfc0178ce33047 Mon Sep 17 00:00:00 2001 From: Sebastian Schmidt Date: Thu, 7 Jun 2018 14:11:28 -0700 Subject: [PATCH 3/3] Renames --- .../cloud/firestore/FirestoreOptions.java | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/google-cloud-clients/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FirestoreOptions.java b/google-cloud-clients/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FirestoreOptions.java index 02f41f0fa04e..009de4fa2b7d 100644 --- a/google-cloud-clients/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FirestoreOptions.java +++ b/google-cloud-clients/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FirestoreOptions.java @@ -107,9 +107,9 @@ public static class Builder extends ServiceOptions.Builder