15
15
*/
16
16
package com .google .cloud .bigtable .data .v2 .stub ;
17
17
18
+ import com .google .api .core .BetaApi ;
18
19
import com .google .api .gax .batching .BatchingSettings ;
19
20
import com .google .api .gax .batching .FlowControlSettings ;
20
21
import com .google .api .gax .batching .FlowController .LimitExceededBehavior ;
29
30
import com .google .api .gax .rpc .TransportChannelProvider ;
30
31
import com .google .api .gax .rpc .UnaryCallSettings ;
31
32
import com .google .api .gax .tracing .OpencensusTracerFactory ;
33
+ import com .google .cloud .bigtable .data .v2 .internal .RefreshChannel ;
32
34
import com .google .cloud .bigtable .data .v2 .models .ConditionalRowMutation ;
33
35
import com .google .cloud .bigtable .data .v2 .models .KeyOffset ;
34
36
import com .google .cloud .bigtable .data .v2 .models .Query ;
@@ -149,6 +151,7 @@ public class EnhancedBigtableStubSettings extends StubSettings<EnhancedBigtableS
149
151
private final String projectId ;
150
152
private final String instanceId ;
151
153
private final String appProfileId ;
154
+ private final boolean isRefreshingChannel ;
152
155
153
156
private final ServerStreamingCallSettings <Query , Row > readRowsSettings ;
154
157
private final UnaryCallSettings <Query , Row > readRowSettings ;
@@ -179,6 +182,7 @@ private EnhancedBigtableStubSettings(Builder builder) {
179
182
projectId = builder .projectId ;
180
183
instanceId = builder .instanceId ;
181
184
appProfileId = builder .appProfileId ;
185
+ isRefreshingChannel = builder .isRefreshingChannel ;
182
186
183
187
// Per method settings.
184
188
readRowsSettings = builder .readRowsSettings .build ();
@@ -210,6 +214,12 @@ public String getAppProfileId() {
210
214
return appProfileId ;
211
215
}
212
216
217
+ /** Returns if channels will gracefully refresh connections to Cloud Bigtable service */
218
+ @ BetaApi ("This API depends on experimental gRPC APIs" )
219
+ public boolean isRefreshingChannel () {
220
+ return isRefreshingChannel ;
221
+ }
222
+
213
223
/** Returns a builder for the default ChannelProvider for this service. */
214
224
public static InstantiatingGrpcChannelProvider .Builder defaultGrpcTransportProviderBuilder () {
215
225
return BigtableStubSettings .defaultGrpcTransportProviderBuilder ()
@@ -413,6 +423,7 @@ public static class Builder extends StubSettings.Builder<EnhancedBigtableStubSet
413
423
private String projectId ;
414
424
private String instanceId ;
415
425
private String appProfileId ;
426
+ private boolean isRefreshingChannel ;
416
427
417
428
private final ServerStreamingCallSettings .Builder <Query , Row > readRowsSettings ;
418
429
private final UnaryCallSettings .Builder <Query , Row > readRowSettings ;
@@ -433,6 +444,7 @@ public static class Builder extends StubSettings.Builder<EnhancedBigtableStubSet
433
444
*/
434
445
private Builder () {
435
446
this .appProfileId = SERVER_DEFAULT_APP_PROFILE_ID ;
447
+ this .isRefreshingChannel = false ;
436
448
setCredentialsProvider (defaultCredentialsProviderBuilder ().build ());
437
449
438
450
// Defaults provider
@@ -515,6 +527,7 @@ private Builder(EnhancedBigtableStubSettings settings) {
515
527
projectId = settings .projectId ;
516
528
instanceId = settings .instanceId ;
517
529
appProfileId = settings .appProfileId ;
530
+ isRefreshingChannel = settings .isRefreshingChannel ;
518
531
519
532
// Per method settings.
520
533
readRowsSettings = settings .readRowsSettings .toBuilder ();
@@ -602,6 +615,23 @@ public String getAppProfileId() {
602
615
return appProfileId ;
603
616
}
604
617
618
+ /**
619
+ * Sets if channels will gracefully refresh connections to Cloud Bigtable service
620
+ *
621
+ * @see com.google.cloud.bigtable.data.v2.BigtableDataSettings.Builder#setRefreshingChannel
622
+ */
623
+ @ BetaApi ("This API depends on experimental gRPC APIs" )
624
+ public Builder setRefreshingChannel (boolean isRefreshingChannel ) {
625
+ this .isRefreshingChannel = isRefreshingChannel ;
626
+ return this ;
627
+ }
628
+
629
+ /** Gets if channels will gracefully refresh connections to Cloud Bigtable service */
630
+ @ BetaApi ("This API depends on experimental gRPC APIs" )
631
+ public boolean isRefreshingChannel () {
632
+ return isRefreshingChannel ;
633
+ }
634
+
605
635
/** Returns the builder for the settings used for calls to readRows. */
606
636
public ServerStreamingCallSettings .Builder <Query , Row > readRowsSettings () {
607
637
return readRowsSettings ;
@@ -642,6 +672,18 @@ public EnhancedBigtableStubSettings build() {
642
672
Preconditions .checkState (projectId != null , "Project id must be set" );
643
673
Preconditions .checkState (instanceId != null , "Instance id must be set" );
644
674
675
+ // Set ChannelPrimer on TransportChannelProvider so channels will gracefully refresh
676
+ // connections to Cloud Bigtable service
677
+ if (isRefreshingChannel ) {
678
+ Preconditions .checkArgument (
679
+ getTransportChannelProvider () instanceof InstantiatingGrpcChannelProvider ,
680
+ "refreshingChannel only works with InstantiatingGrpcChannelProviders" );
681
+ InstantiatingGrpcChannelProvider .Builder channelBuilder =
682
+ ((InstantiatingGrpcChannelProvider ) getTransportChannelProvider ())
683
+ .toBuilder ()
684
+ .setChannelPrimer (new RefreshChannel ());
685
+ setTransportChannelProvider (channelBuilder .build ());
686
+ }
645
687
return new EnhancedBigtableStubSettings (this );
646
688
}
647
689
// </editor-fold>
0 commit comments