diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ede5c2ecf..3ead8d9dea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,19 @@ # Changelog +## [1.8.0](https://www.github.com/googleapis/java-bigtable/compare/v1.7.1...v1.8.0) (2019-12-17) + + +### Features + +* add implementation of ChannelPrimer to establish connection to GFE and integrate into bigtable client ([#115](https://www.github.com/googleapis/java-bigtable/issues/115)) ([276f942](https://www.github.com/googleapis/java-bigtable/commit/276f942dd2e668600347a59496525a589d7560da)) +* update filter to accept an exact timestamp for better accessibility ([#92](https://www.github.com/googleapis/java-bigtable/issues/92)) ([e25758b](https://www.github.com/googleapis/java-bigtable/commit/e25758b3164618ac16d57fffe6ba0e4175229960)) + + +### Dependencies + +* update gax.version to v1.51.0 ([#105](https://www.github.com/googleapis/java-bigtable/issues/105)) ([dcdd0c3](https://www.github.com/googleapis/java-bigtable/commit/dcdd0c347f10802be57c4f7267c2b82c59ea2278)) +* upgrade gax to 1.52.0, google-cloud-core to 1.92.0 ([#118](https://www.github.com/googleapis/java-bigtable/issues/118)) ([c106497](https://www.github.com/googleapis/java-bigtable/commit/c1064977eff3889e4f8b6ba8ab44a08f6f96ae1f)) + ### [1.7.1](https://www.github.com/googleapis/java-bigtable/compare/v1.7.0...v1.7.1) (2019-11-13) diff --git a/README.md b/README.md index 895e3b5fb6..ae32a554c0 100644 --- a/README.md +++ b/README.md @@ -17,16 +17,16 @@ If you are using Maven, add this to your pom.xml file com.google.cloud google-cloud-bigtable - 1.7.1 + 1.8.0 ``` If you are using Gradle, add this to your dependencies ```Groovy -compile 'com.google.cloud:google-cloud-bigtable:1.7.1' +compile 'com.google.cloud:google-cloud-bigtable:1.8.0' ``` If you are using SBT, add this to your dependencies ```Scala -libraryDependencies += "com.google.cloud" % "google-cloud-bigtable" % "1.7.1" +libraryDependencies += "com.google.cloud" % "google-cloud-bigtable" % "1.8.0" ``` [//]: # ({x-version-update-end}) diff --git a/google-cloud-bigtable-bom/pom.xml b/google-cloud-bigtable-bom/pom.xml index bea8e3c9d8..4c3d25a57c 100644 --- a/google-cloud-bigtable-bom/pom.xml +++ b/google-cloud-bigtable-bom/pom.xml @@ -3,12 +3,12 @@ 4.0.0 com.google.cloud google-cloud-bigtable-bom - 1.7.1 + 1.8.0 pom com.google.cloud google-cloud-shared-config - 0.2.1 + 0.3.0 Google Cloud Bigtable BOM @@ -72,32 +72,32 @@ com.google.cloud google-cloud-bigtable - 1.7.1 + 1.8.0 com.google.cloud google-cloud-bigtable-emulator - 0.116.1 + 0.117.0 com.google.api.grpc grpc-google-cloud-bigtable-admin-v2 - 1.7.1 + 1.8.0 com.google.api.grpc grpc-google-cloud-bigtable-v2 - 1.7.1 + 1.8.0 com.google.api.grpc proto-google-cloud-bigtable-admin-v2 - 1.7.1 + 1.8.0 com.google.api.grpc proto-google-cloud-bigtable-v2 - 1.7.1 + 1.8.0 @@ -111,6 +111,16 @@ true + + + + org.apache.maven.plugins + maven-site-plugin + + + false + + \ No newline at end of file diff --git a/google-cloud-bigtable-emulator/pom.xml b/google-cloud-bigtable-emulator/pom.xml index 4d251c69e1..0b35714cae 100644 --- a/google-cloud-bigtable-emulator/pom.xml +++ b/google-cloud-bigtable-emulator/pom.xml @@ -5,7 +5,7 @@ 4.0.0 google-cloud-bigtable-emulator - 0.116.1 + 0.117.0 Google Cloud Java - Bigtable Emulator https://github.com/googleapis/java-bigtable @@ -14,7 +14,7 @@ com.google.cloud google-cloud-bigtable-parent - 1.7.1 + 1.8.0 scm:git:git@github.com:googleapis/java-bigtable.git diff --git a/google-cloud-bigtable/pom.xml b/google-cloud-bigtable/pom.xml index 42bf77049c..a5382f3e5f 100644 --- a/google-cloud-bigtable/pom.xml +++ b/google-cloud-bigtable/pom.xml @@ -2,7 +2,7 @@ 4.0.0 google-cloud-bigtable - 1.7.1 + 1.8.0 jar Google Cloud Bigtable https://github.com/googleapis/java-bigtable @@ -12,7 +12,7 @@ com.google.cloud google-cloud-bigtable-parent - 1.7.1 + 1.8.0 google-cloud-bigtable @@ -22,12 +22,12 @@ false ${skipTests} - bigtable.googleapis.com:443 - bigtableadmin.googleapis.com:443 - - - testdirectpath-bigtable.sandbox.googleapis.com:443 - test-bigtableadmin.sandbox.googleapis.com:443 + + + + + + + true + classes 2C true @@ -369,74 +378,4 @@ - - - - - org.apache.maven.plugins - maven-javadoc-plugin - 3.1.1 - - protected - true - none - true - - - - - com/google/cloud/bigtable/gaxx/** - - - com/google/cloud/bigtable/admin/v2/internal/** - com/google/cloud/bigtable/admin/v2/BaseBigtableInstanceAdminClient.java - com/google/cloud/bigtable/admin/v2/BaseBigtableInstanceAdminSettings.java - com/google/cloud/bigtable/admin/v2/stub/GrpcBigtableInstanceAdminCallableFactory.java - com/google/cloud/bigtable/admin/v2/stub/GrpcBigtableInstanceAdminStub.java - com/google/cloud/bigtable/admin/v2/stub/BigtableInstanceAdminStub.java - - - com/google/cloud/bigtable/admin/v2/BaseBigtableTableAdminClient.java - com/google/cloud/bigtable/admin/v2/BaseBigtableTableAdminSettings.java - com/google/cloud/bigtable/admin/v2/stub/GrpcBigtableTableAdminCallableFactory.java - com/google/cloud/bigtable/admin/v2/stub/GrpcBigtableTableAdminStub.java - com/google/cloud/bigtable/admin/v2/stub/BigtableTableAdminStub.java - com/google/cloud/bigtable/admin/v2/stub/EnhancedBigtableTableAdminStub.java - - - com/google/cloud/bigtable/data/v2/internal/** - com/google/cloud/bigtable/data/v2/BaseBigtableDataClient.java - com/google/cloud/bigtable/data/v2/BaseBigtableDataSettings.java - com/google/cloud/bigtable/data/v2/stub/BigtableStub.java - com/google/cloud/bigtable/data/v2/stub/BigtableStubSettings.java - com/google/cloud/bigtable/data/v2/stub/GrpcBigtableStub.java - com/google/cloud/bigtable/data/v2/stub/GrpcBigtableCallableFactory.java - com/google/cloud/bigtable/data/v2/stub/EnhancedBigtableStub.java - com/google/cloud/bigtable/data/v2/stub/mutaterows/** - com/google/cloud/bigtable/data/v2/stub/readrows/** - com/google/cloud/bigtable/data/v2/stub/metrics/** - - - - - ${project.javadoc.protobufBaseURL} - ../../../../../google-api-grpc/proto-google-cloud-bigtable-v2/target/site/apidocs/ - - - ${project.javadoc.protobufBaseURL} - ../../../../../google-api-grpc/grpc-google-cloud-bigtable-v2/target/site/apidocs/ - - - ${project.javadoc.protobufBaseURL} - ../../../../../google-api-grpc/proto-google-cloud-bigtable-admin-v2/target/site/apidocs/ - - - ${project.javadoc.protobufBaseURL} - ../../../../../google-api-grpc/grpc-google-cloud-bigtable-admin-v2/target/site/apidocs/ - - - - - - diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/BigtableDataSettings.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/BigtableDataSettings.java index bc60362b85..ff97408809 100644 --- a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/BigtableDataSettings.java +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/BigtableDataSettings.java @@ -184,6 +184,12 @@ public String getAppProfileId() { return stubSettings.getAppProfileId(); } + /** Gets if channels will gracefully refresh connections to Cloud Bigtable service */ + @BetaApi("This API depends on experimental gRPC APIs") + public boolean isRefreshingChannel() { + return stubSettings.isRefreshingChannel(); + } + /** Returns the underlying RPC settings. */ public EnhancedBigtableStubSettings getStubSettings() { return stubSettings; @@ -275,6 +281,26 @@ public CredentialsProvider getCredentialsProvider() { return stubSettings.getCredentialsProvider(); } + /** + * Configure periodic gRPC channel refreshes. + * + *

This feature will gracefully refresh connections to the Cloud Bigtable service. This is an + * experimental feature to address tail latency caused by the service dropping long lived gRPC + * connections, which causes the client to renegotiate the gRPC connection in the request path, + * which causes periodic spikes in latency + */ + @BetaApi("This API depends on experimental gRPC APIs") + public Builder setRefreshingChannel(boolean isRefreshingChannel) { + stubSettings.setRefreshingChannel(isRefreshingChannel); + return this; + } + + /** Gets if channels will gracefully refresh connections to Cloud Bigtable service */ + @BetaApi("This API depends on experimental gRPC APIs") + public boolean isRefreshingChannel() { + return stubSettings.isRefreshingChannel(); + } + /** * Returns the underlying settings for making RPC calls. The settings should be changed with * care. diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/RefreshChannel.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/RefreshChannel.java new file mode 100644 index 0000000000..e34ecd750d --- /dev/null +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/RefreshChannel.java @@ -0,0 +1,54 @@ +/* + * Copyright 2019 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 + * + * https://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.bigtable.data.v2.internal; + +import com.google.api.core.BetaApi; +import com.google.api.core.InternalApi; +import com.google.api.gax.grpc.ChannelPrimer; +import io.grpc.ConnectivityState; +import io.grpc.ManagedChannel; +import java.util.concurrent.TimeUnit; + +/** + * Establish a connection to the Cloud Bigtable service on managedChannel + * + *

This class is considered an internal implementation detail and not meant to be used by + * applications. + */ +@BetaApi("This API depends on gRPC experimental API") +@InternalApi +public final class RefreshChannel implements ChannelPrimer { + + /** + * primeChannel establishes a connection to Cloud Bigtable service. This typically take less than + * 1s. In case of service failure, an upper limit of 10s prevents primeChannel from looping + * forever. + */ + @Override + public void primeChannel(ManagedChannel managedChannel) { + for (int i = 0; i < 10; i++) { + ConnectivityState connectivityState = managedChannel.getState(true); + if (connectivityState == ConnectivityState.READY) { + break; + } + try { + TimeUnit.SECONDS.sleep(1); + } catch (InterruptedException e) { + break; + } + } + } +} diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/models/DefaultRowAdapter.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/models/DefaultRowAdapter.java index 18943265ce..279ebf6407 100644 --- a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/models/DefaultRowAdapter.java +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/models/DefaultRowAdapter.java @@ -149,8 +149,8 @@ public Row finishRow() { sortedCells = currentFamilyCells.build(); } else { // Normal path: concatenate the cells order by family. - ImmutableList.Builder sortedCellsBuilder = - ImmutableList.builderWithExpectedSize(totalCellCount); + // TODO: use builderWithExpectedSize(totalCellCount) when it stabilizes + ImmutableList.Builder sortedCellsBuilder = ImmutableList.builder(); for (ImmutableList.Builder familyCells : cellsByFamily.values()) { sortedCellsBuilder.addAll(familyCells.build()); diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/models/Filters.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/models/Filters.java index 6ada09391b..bd310cd2c5 100644 --- a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/models/Filters.java +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/models/Filters.java @@ -516,6 +516,15 @@ private TimestampFilter() {} public TimestampRangeFilter range() { return new TimestampRangeFilter(); } + + /** + * Matches cells with exact given timestamp. + * + * @return a {@link TimestampRangeFilter} with start/end closed timestamp. + */ + public TimestampRangeFilter exact(Long exactTimestamp) { + return new TimestampRangeFilter().startClosed(exactTimestamp).endClosed(exactTimestamp); + } } /** Matches only cells with microsecond timestamps within the given range. */ diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/EnhancedBigtableStubSettings.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/EnhancedBigtableStubSettings.java index a23cf780c5..11d4726080 100644 --- a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/EnhancedBigtableStubSettings.java +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/EnhancedBigtableStubSettings.java @@ -15,6 +15,7 @@ */ package com.google.cloud.bigtable.data.v2.stub; +import com.google.api.core.BetaApi; import com.google.api.gax.batching.BatchingSettings; import com.google.api.gax.batching.FlowControlSettings; import com.google.api.gax.batching.FlowController.LimitExceededBehavior; @@ -29,6 +30,7 @@ import com.google.api.gax.rpc.TransportChannelProvider; import com.google.api.gax.rpc.UnaryCallSettings; import com.google.api.gax.tracing.OpencensusTracerFactory; +import com.google.cloud.bigtable.data.v2.internal.RefreshChannel; import com.google.cloud.bigtable.data.v2.models.ConditionalRowMutation; import com.google.cloud.bigtable.data.v2.models.KeyOffset; import com.google.cloud.bigtable.data.v2.models.Query; @@ -149,6 +151,7 @@ public class EnhancedBigtableStubSettings extends StubSettings readRowsSettings; private final UnaryCallSettings readRowSettings; @@ -179,6 +182,7 @@ private EnhancedBigtableStubSettings(Builder builder) { projectId = builder.projectId; instanceId = builder.instanceId; appProfileId = builder.appProfileId; + isRefreshingChannel = builder.isRefreshingChannel; // Per method settings. readRowsSettings = builder.readRowsSettings.build(); @@ -210,6 +214,12 @@ public String getAppProfileId() { return appProfileId; } + /** Returns if channels will gracefully refresh connections to Cloud Bigtable service */ + @BetaApi("This API depends on experimental gRPC APIs") + public boolean isRefreshingChannel() { + return isRefreshingChannel; + } + /** Returns a builder for the default ChannelProvider for this service. */ public static InstantiatingGrpcChannelProvider.Builder defaultGrpcTransportProviderBuilder() { return BigtableStubSettings.defaultGrpcTransportProviderBuilder() @@ -413,6 +423,7 @@ public static class Builder extends StubSettings.Builder readRowsSettings; private final UnaryCallSettings.Builder readRowSettings; @@ -433,6 +444,7 @@ public static class Builder extends StubSettings.Builder readRowsSettings() { return readRowsSettings; @@ -642,6 +672,18 @@ public EnhancedBigtableStubSettings build() { Preconditions.checkState(projectId != null, "Project id must be set"); Preconditions.checkState(instanceId != null, "Instance id must be set"); + // Set ChannelPrimer on TransportChannelProvider so channels will gracefully refresh + // connections to Cloud Bigtable service + if (isRefreshingChannel) { + Preconditions.checkArgument( + getTransportChannelProvider() instanceof InstantiatingGrpcChannelProvider, + "refreshingChannel only works with InstantiatingGrpcChannelProviders"); + InstantiatingGrpcChannelProvider.Builder channelBuilder = + ((InstantiatingGrpcChannelProvider) getTransportChannelProvider()) + .toBuilder() + .setChannelPrimer(new RefreshChannel()); + setTransportChannelProvider(channelBuilder.build()); + } return new EnhancedBigtableStubSettings(this); } // diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/internal/RefreshChannelTest.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/internal/RefreshChannelTest.java new file mode 100644 index 0000000000..c41fa4d2a5 --- /dev/null +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/internal/RefreshChannelTest.java @@ -0,0 +1,38 @@ +/* + * Copyright 2019 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 + * + * https://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.bigtable.data.v2.internal; + +import io.grpc.ConnectivityState; +import io.grpc.ManagedChannel; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; +import org.mockito.Mockito; + +@RunWith(JUnit4.class) +public class RefreshChannelTest { + // RefreshChannel should establish connection to the server through managedChannel.getState(true) + @Test + public void testGetStateIsCalled() { + RefreshChannel refreshChannel = new RefreshChannel(); + ManagedChannel managedChannel = Mockito.mock(ManagedChannel.class); + + Mockito.doReturn(ConnectivityState.READY).when(managedChannel).getState(true); + + refreshChannel.primeChannel(managedChannel); + Mockito.verify(managedChannel, Mockito.atLeastOnce()).getState(true); + } +} diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/models/FiltersTest.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/models/FiltersTest.java index 509c99da7a..ad79025258 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/models/FiltersTest.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/models/FiltersTest.java @@ -350,6 +350,21 @@ public void timestampRange() { assertThat(actualFilter).isEqualTo(expectedFilter); } + @Test + public void timestampAtExactTime() { + RowFilter actualFilter = FILTERS.timestamp().exact(20_000L).toProto(); + + RowFilter expectedFilter = + RowFilter.newBuilder() + .setTimestampRangeFilter( + TimestampRange.newBuilder() + .setStartTimestampMicros(20_000L) + .setEndTimestampMicros(20_000L + 1)) + .build(); + + assertThat(actualFilter).isEqualTo(expectedFilter); + } + @Test public void timestampOpenClosedFakeRange() { RowFilter actualFilter = diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/stub/EnhancedBigtableStubSettingsTest.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/stub/EnhancedBigtableStubSettingsTest.java index 6adf129f94..b9b6a69cde 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/stub/EnhancedBigtableStubSettingsTest.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/stub/EnhancedBigtableStubSettingsTest.java @@ -61,6 +61,7 @@ public void settingsAreNotLostTest() { String projectId = "my-project"; String instanceId = "my-instance"; String appProfileId = "my-app-profile-id"; + boolean isRefreshingChannel = true; String endpoint = "some.other.host:123"; CredentialsProvider credentialsProvider = Mockito.mock(CredentialsProvider.class); WatchdogProvider watchdogProvider = Mockito.mock(WatchdogProvider.class); @@ -71,6 +72,7 @@ public void settingsAreNotLostTest() { .setProjectId(projectId) .setInstanceId(instanceId) .setAppProfileId(appProfileId) + .setRefreshingChannel(isRefreshingChannel) .setEndpoint(endpoint) .setCredentialsProvider(credentialsProvider) .setStreamWatchdogProvider(watchdogProvider) @@ -81,6 +83,7 @@ public void settingsAreNotLostTest() { projectId, instanceId, appProfileId, + isRefreshingChannel, endpoint, credentialsProvider, watchdogProvider, @@ -90,6 +93,7 @@ public void settingsAreNotLostTest() { projectId, instanceId, appProfileId, + isRefreshingChannel, endpoint, credentialsProvider, watchdogProvider, @@ -99,6 +103,7 @@ public void settingsAreNotLostTest() { projectId, instanceId, appProfileId, + isRefreshingChannel, endpoint, credentialsProvider, watchdogProvider, @@ -110,6 +115,7 @@ private void verifyBuilder( String projectId, String instanceId, String appProfileId, + boolean isRefreshingChannel, String endpoint, CredentialsProvider credentialsProvider, WatchdogProvider watchdogProvider, @@ -117,6 +123,7 @@ private void verifyBuilder( assertThat(builder.getProjectId()).isEqualTo(projectId); assertThat(builder.getInstanceId()).isEqualTo(instanceId); assertThat(builder.getAppProfileId()).isEqualTo(appProfileId); + assertThat(builder.isRefreshingChannel()).isEqualTo(isRefreshingChannel); assertThat(builder.getEndpoint()).isEqualTo(endpoint); assertThat(builder.getCredentialsProvider()).isEqualTo(credentialsProvider); assertThat(builder.getStreamWatchdogProvider()).isSameInstanceAs(watchdogProvider); @@ -128,6 +135,7 @@ private void verifySettings( String projectId, String instanceId, String appProfileId, + boolean isRefreshingChannel, String endpoint, CredentialsProvider credentialsProvider, WatchdogProvider watchdogProvider, @@ -135,6 +143,7 @@ private void verifySettings( assertThat(settings.getProjectId()).isEqualTo(projectId); assertThat(settings.getInstanceId()).isEqualTo(instanceId); assertThat(settings.getAppProfileId()).isEqualTo(appProfileId); + assertThat(settings.isRefreshingChannel()).isEqualTo(isRefreshingChannel); assertThat(settings.getEndpoint()).isEqualTo(endpoint); assertThat(settings.getCredentialsProvider()).isEqualTo(credentialsProvider); assertThat(settings.getStreamWatchdogProvider()).isSameInstanceAs(watchdogProvider); @@ -521,4 +530,31 @@ private void verifyRetrySettingAreSane(Set retryCodes, RetrySettings retry assertThat(retrySettings.getRpcTimeoutMultiplier()).isAtLeast(1.0); assertThat(retrySettings.getMaxRpcTimeout()).isGreaterThan(Duration.ZERO); } + + @Test + public void isRefreshingChannelDefaultValueTest() { + String dummyProjectId = "my-project"; + String dummyInstanceId = "my-instance"; + EnhancedBigtableStubSettings.Builder builder = + EnhancedBigtableStubSettings.newBuilder() + .setProjectId(dummyProjectId) + .setInstanceId(dummyInstanceId); + assertThat(builder.isRefreshingChannel()).isFalse(); + assertThat(builder.build().isRefreshingChannel()).isFalse(); + assertThat(builder.build().toBuilder().isRefreshingChannel()).isFalse(); + } + + @Test + public void isRefreshingChannelFalseValueTest() { + String dummyProjectId = "my-project"; + String dummyInstanceId = "my-instance"; + EnhancedBigtableStubSettings.Builder builder = + EnhancedBigtableStubSettings.newBuilder() + .setProjectId(dummyProjectId) + .setInstanceId(dummyInstanceId) + .setRefreshingChannel(false); + assertThat(builder.isRefreshingChannel()).isFalse(); + assertThat(builder.build().isRefreshingChannel()).isFalse(); + assertThat(builder.build().toBuilder().isRefreshingChannel()).isFalse(); + } } diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/test_helpers/env/CloudEnv.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/test_helpers/env/CloudEnv.java index b393fdef9a..bee4dfb9d2 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/test_helpers/env/CloudEnv.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/test_helpers/env/CloudEnv.java @@ -22,6 +22,7 @@ import com.google.cloud.bigtable.data.v2.BigtableDataClient; import com.google.cloud.bigtable.data.v2.BigtableDataSettings; import com.google.common.base.MoreObjects; +import com.google.common.base.Strings; import java.io.IOException; import javax.annotation.Nullable; @@ -57,8 +58,8 @@ class CloudEnv extends AbstractTestEnv { static CloudEnv fromSystemProperties() { return new CloudEnv( - getOptionalProperty(DATA_ENDPOINT_PROPERTY_NAME, "bigtable.googleapis.com:443"), - getOptionalProperty(ADMIN_ENDPOINT_PROPERTY_NAME, "bigtableadmin.googleapis.com:443"), + getOptionalProperty(DATA_ENDPOINT_PROPERTY_NAME, ""), + getOptionalProperty(ADMIN_ENDPOINT_PROPERTY_NAME, ""), getRequiredProperty(PROJECT_PROPERTY_NAME), getRequiredProperty(INSTANCE_PROPERTY_NAME), getRequiredProperty(TABLE_PROPERTY_NAME)); @@ -76,18 +77,18 @@ private CloudEnv( this.dataSettings = BigtableDataSettings.newBuilder().setProjectId(projectId).setInstanceId(instanceId); - if (dataEndpoint != null) { + if (!Strings.isNullOrEmpty(dataEndpoint)) { dataSettings.stubSettings().setEndpoint(dataEndpoint); } this.tableAdminSettings = BigtableTableAdminSettings.newBuilder().setProjectId(projectId).setInstanceId(instanceId); - if (adminEndpoint != null) { + if (!Strings.isNullOrEmpty(adminEndpoint)) { this.tableAdminSettings.stubSettings().setEndpoint(adminEndpoint); } this.instanceAdminSettings = BigtableInstanceAdminSettings.newBuilder().setProjectId(projectId); - if (adminEndpoint != null) { + if (!Strings.isNullOrEmpty(adminEndpoint)) { this.instanceAdminSettings.stubSettings().setEndpoint(adminEndpoint); } } diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/test_helpers/env/TestEnvRule.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/test_helpers/env/TestEnvRule.java index 2fa2a26156..52c269b72c 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/test_helpers/env/TestEnvRule.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/test_helpers/env/TestEnvRule.java @@ -103,7 +103,7 @@ protected void before(Description description) throws Throwable { default: throw new IllegalArgumentException( String.format( - "Unknown env: %s. Please set the system property %s to either 'emulator' or 'prod'.", + "Unknown env: %s. Please set the system property %s to either 'emulator' or 'cloud'.", env, ENV_PROPERTY)); } testEnv.start(); diff --git a/grpc-google-cloud-bigtable-admin-v2/pom.xml b/grpc-google-cloud-bigtable-admin-v2/pom.xml index e41cb94d57..0a04bff09d 100644 --- a/grpc-google-cloud-bigtable-admin-v2/pom.xml +++ b/grpc-google-cloud-bigtable-admin-v2/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc grpc-google-cloud-bigtable-admin-v2 - 1.7.1 + 1.8.0 grpc-google-cloud-bigtable-admin-v2 GRPC library for grpc-google-cloud-bigtable-admin-v2 com.google.cloud google-cloud-bigtable-parent - 1.7.1 + 1.8.0 diff --git a/grpc-google-cloud-bigtable-v2/pom.xml b/grpc-google-cloud-bigtable-v2/pom.xml index 45e6a24bc6..c61ef638d0 100644 --- a/grpc-google-cloud-bigtable-v2/pom.xml +++ b/grpc-google-cloud-bigtable-v2/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc grpc-google-cloud-bigtable-v2 - 1.7.1 + 1.8.0 grpc-google-cloud-bigtable-v2 GRPC library for grpc-google-cloud-bigtable-v2 com.google.cloud google-cloud-bigtable-parent - 1.7.1 + 1.8.0 diff --git a/pom.xml b/pom.xml index a7990efe02..74f523cd48 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ google-cloud-bigtable-parent pom - 1.7.1 + 1.8.0 Google Cloud Bigtable Parent https://github.com/googleapis/java-bigtable @@ -14,7 +14,7 @@ com.google.cloud google-cloud-shared-config - 0.2.1 + 0.3.0 @@ -154,15 +154,15 @@ https://googleapis.dev/java/google-api-grpc/latest 1.7 - 1.50.1 + 1.52.0 1.8.1 1.17.0 - 1.91.3 + 1.92.0 1.25.0 28.1-android 0.24.0 - 3.10.0 + 3.11.1 1.4.0 @@ -195,27 +195,27 @@ com.google.cloud google-cloud-bigtable-emulator - 0.116.1 + 0.117.0 com.google.api.grpc grpc-google-cloud-bigtable-admin-v2 - 1.7.1 + 1.8.0 com.google.api.grpc grpc-google-cloud-bigtable-v2 - 1.7.1 + 1.8.0 com.google.api.grpc proto-google-cloud-bigtable-admin-v2 - 1.7.1 + 1.8.0 com.google.api.grpc proto-google-cloud-bigtable-v2 - 1.7.1 + 1.8.0 @@ -257,7 +257,7 @@ com.google.errorprone error_prone_annotations - 2.3.3 + 2.3.4 com.google.code.findbugs @@ -305,7 +305,7 @@ com.google.cloud google-cloud-conformance-tests - 0.0.1 + 0.0.2 org.apache.maven.plugins - maven-project-info-reports-plugin - 3.0.0 - - - - index - dependency-info - team - ci-management - issue-management - licenses - scm - dependency-management - distribution-management - summary - modules - - - + maven-site-plugin + - true - ${site.installationModule} - jar + false org.apache.maven.plugins maven-javadoc-plugin 3.1.1 - - - html - - aggregate - javadoc - - - + + + aggregate + false + site + + aggregate + + + + + **/com/google/bigtable/** + + + + + none protected true ${project.build.directory}/javadoc - - - Test helpers packages - com.google.cloud.testing - - - SPI packages - com.google.cloud.spi* - - + + + + + **/com/google/cloud/bigtable/gaxx/** + + + **/com/google/cloud/bigtable/admin/v2/internal/** + **/com/google/cloud/bigtable/admin/v2/BaseBigtableInstanceAdminClient.java + **/com/google/cloud/bigtable/admin/v2/BaseBigtableInstanceAdminSettings.java + **/com/google/cloud/bigtable/admin/v2/stub/GrpcBigtableInstanceAdminCallableFactory.java + **/com/google/cloud/bigtable/admin/v2/stub/GrpcBigtableInstanceAdminStub.java + **/com/google/cloud/bigtable/admin/v2/stub/BigtableInstanceAdminStub.java + + + **/com/google/cloud/bigtable/admin/v2/BaseBigtableTableAdminClient.java + **/com/google/cloud/bigtable/admin/v2/BaseBigtableTableAdminSettings.java + **/com/google/cloud/bigtable/admin/v2/stub/GrpcBigtableTableAdminCallableFactory.java + **/com/google/cloud/bigtable/admin/v2/stub/GrpcBigtableTableAdminStub.java + **/com/google/cloud/bigtable/admin/v2/stub/BigtableTableAdminStub.java + **/com/google/cloud/bigtable/admin/v2/stub/EnhancedBigtableTableAdminStub.java + + + **/com/google/cloud/bigtable/data/v2/internal/** + **/com/google/cloud/bigtable/data/v2/BaseBigtableDataClient.java + **/com/google/cloud/bigtable/data/v2/BaseBigtableDataSettings.java + **/com/google/cloud/bigtable/data/v2/stub/BigtableStub.java + **/com/google/cloud/bigtable/data/v2/stub/BigtableStubSettings.java + **/com/google/cloud/bigtable/data/v2/stub/GrpcBigtableStub.java + **/com/google/cloud/bigtable/data/v2/stub/GrpcBigtableCallableFactory.java + **/com/google/cloud/bigtable/data/v2/stub/EnhancedBigtableStub.java + **/com/google/cloud/bigtable/data/v2/stub/mutaterows/** + **/com/google/cloud/bigtable/data/v2/stub/readrows/** + **/com/google/cloud/bigtable/data/v2/stub/metrics/** + + + - https://grpc.io/grpc-java/javadoc/ - https://developers.google.com/protocol-buffers/docs/reference/java/ - https://googleapis.dev/java/google-auth-library/latest/ - https://googleapis.dev/java/gax/latest/ + https://googleapis.dev/java/gax/${gax.version}/ https://googleapis.github.io/api-common-java/${google.api-common.version}/apidocs/ - + + + + proto-google-cloud-bigtable-v2 + grpc-google-cloud-bigtable-v2 + proto-google-cloud-bigtable-admin-v2 + grpc-google-cloud-bigtable-admin-v2 + google-cloud-bigtable + google-cloud-bigtable-emulator + google-cloud-bigtable-bom + diff --git a/proto-google-cloud-bigtable-admin-v2/pom.xml b/proto-google-cloud-bigtable-admin-v2/pom.xml index dbcceac78e..6432a48b52 100644 --- a/proto-google-cloud-bigtable-admin-v2/pom.xml +++ b/proto-google-cloud-bigtable-admin-v2/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc proto-google-cloud-bigtable-admin-v2 - 1.7.1 + 1.8.0 proto-google-cloud-bigtable-admin-v2 PROTO library for proto-google-cloud-bigtable-admin-v2 com.google.cloud google-cloud-bigtable-parent - 1.7.1 + 1.8.0 diff --git a/proto-google-cloud-bigtable-v2/pom.xml b/proto-google-cloud-bigtable-v2/pom.xml index 2b10bd04fd..f90922a231 100644 --- a/proto-google-cloud-bigtable-v2/pom.xml +++ b/proto-google-cloud-bigtable-v2/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc proto-google-cloud-bigtable-v2 - 1.7.1 + 1.8.0 proto-google-cloud-bigtable-v2 PROTO library for proto-google-cloud-bigtable-v2 com.google.cloud google-cloud-bigtable-parent - 1.7.1 + 1.8.0 diff --git a/versions.txt b/versions.txt index cae9503e8c..ea5b102db2 100644 --- a/versions.txt +++ b/versions.txt @@ -1,9 +1,9 @@ # Format: # module:released-version:current-version -google-cloud-bigtable:1.7.1:1.7.1 -grpc-google-cloud-bigtable-admin-v2:1.7.1:1.7.1 -grpc-google-cloud-bigtable-v2:1.7.1:1.7.1 -proto-google-cloud-bigtable-admin-v2:1.7.1:1.7.1 -proto-google-cloud-bigtable-v2:1.7.1:1.7.1 -google-cloud-bigtable-emulator:0.116.1:0.116.1 +google-cloud-bigtable:1.8.0:1.8.0 +grpc-google-cloud-bigtable-admin-v2:1.8.0:1.8.0 +grpc-google-cloud-bigtable-v2:1.8.0:1.8.0 +proto-google-cloud-bigtable-admin-v2:1.8.0:1.8.0 +proto-google-cloud-bigtable-v2:1.8.0:1.8.0 +google-cloud-bigtable-emulator:0.117.0:0.117.0