com.google.api.grpc
diff --git a/google-cloud-bigquerystorage/src/main/java/com/google/cloud/bigquery/storage/v1/JsonStreamWriter.java b/google-cloud-bigquerystorage/src/main/java/com/google/cloud/bigquery/storage/v1/JsonStreamWriter.java
index 6380af4fc6..d2c58e372b 100644
--- a/google-cloud-bigquerystorage/src/main/java/com/google/cloud/bigquery/storage/v1/JsonStreamWriter.java
+++ b/google-cloud-bigquerystorage/src/main/java/com/google/cloud/bigquery/storage/v1/JsonStreamWriter.java
@@ -320,6 +320,11 @@ private void setStreamWriterSettings(
* newBuilder that constructs a JsonStreamWriter builder with BigQuery client being initialized by
* StreamWriter by default.
*
+ * The table schema passed in will be updated automatically when there is a schema update
+ * event. When used for Writer creation, it should be the latest schema. So when you are trying to
+ * reuse a stream, you should use Builder newBuilder( String streamOrTableName,
+ * BigQueryWriteClient client) instead, so the created Writer will be based on a fresh schema.
+ *
* @param streamOrTableName name of the stream that must follow
* "projects/[^/]+/datasets/[^/]+/tables/[^/]+/streams/[^/]+" or table name
* "projects/[^/]+/datasets/[^/]+/tables/[^/]+"
@@ -336,6 +341,11 @@ public static Builder newBuilder(String streamOrTableName, TableSchema tableSche
/**
* newBuilder that constructs a JsonStreamWriter builder.
*
+ *
The table schema passed in will be updated automatically when there is a schema update
+ * event. When used for Writer creation, it should be the latest schema. So when you are trying to
+ * reuse a stream, you should use Builder newBuilder( String streamOrTableName,
+ * BigQueryWriteClient client) instead, so the created Writer will be based on a fresh schema.
+ *
* @param streamOrTableName name of the stream that must follow
* "projects/[^/]+/datasets/[^/]+/tables/[^/]+/streams/[^/]+"
* @param tableSchema The schema of the table when the stream was created, which is passed back
diff --git a/google-cloud-bigquerystorage/src/main/java/com/google/cloud/bigquery/storage/v1/StreamWriter.java b/google-cloud-bigquerystorage/src/main/java/com/google/cloud/bigquery/storage/v1/StreamWriter.java
index f9e6186edc..4d07dfdd91 100644
--- a/google-cloud-bigquerystorage/src/main/java/com/google/cloud/bigquery/storage/v1/StreamWriter.java
+++ b/google-cloud-bigquerystorage/src/main/java/com/google/cloud/bigquery/storage/v1/StreamWriter.java
@@ -47,7 +47,10 @@ public class StreamWriter implements AutoCloseable {
private static final Logger log = Logger.getLogger(StreamWriter.class.getName());
private static String datasetsMatching = "projects/[^/]+/datasets/[^/]+/";
- private static Pattern streamPattern = Pattern.compile(datasetsMatching);
+ private static Pattern streamPatternDatasets = Pattern.compile(datasetsMatching);
+
+ private static String defaultStreamMatching = "/_default";
+ private static Pattern streamPatternDefaultStream = Pattern.compile(defaultStreamMatching);
// Cache of location info for a given dataset.
private static Map projectAndDatasetToLocation = new ConcurrentHashMap<>();
@@ -195,6 +198,14 @@ private StreamWriter(Builder builder) throws IOException {
getBigQueryWriteClient(builder),
ownsBigQueryWriteClient));
} else {
+ if (!isDefaultStream(streamName)) {
+ log.warning(
+ "Connection pool is only allowed in default stream! However received "
+ + builder.streamName);
+ throw new IllegalArgumentException(
+ "Trying to enable connection pool in non-default stream.");
+ }
+
BigQueryWriteClient client = getBigQueryWriteClient(builder);
String location = builder.location;
if (location == null || location.isEmpty()) {
@@ -264,7 +275,7 @@ private StreamWriter(Builder builder) throws IOException {
@VisibleForTesting
static String extractDatasetAndProjectName(String streamName) {
- Matcher streamMatcher = streamPattern.matcher(streamName);
+ Matcher streamMatcher = streamPatternDatasets.matcher(streamName);
if (streamMatcher.find()) {
return streamMatcher.group();
} else {
@@ -273,12 +284,19 @@ static String extractDatasetAndProjectName(String streamName) {
}
}
+ @VisibleForTesting
+ static boolean isDefaultStream(String streamName) {
+ Matcher streamMatcher = streamPatternDefaultStream.matcher(streamName);
+ return streamMatcher.find();
+ }
+
private BigQueryWriteClient getBigQueryWriteClient(Builder builder) throws IOException {
if (builder.client == null) {
BigQueryWriteSettings stubSettings =
BigQueryWriteSettings.newBuilder()
.setCredentialsProvider(builder.credentialsProvider)
.setTransportChannelProvider(builder.channelProvider)
+ .setBackgroundExecutorProvider(builder.executorProvider)
.setEndpoint(builder.endpoint)
.build();
testOnlyClientCreatedTimes++;
diff --git a/google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1/JsonStreamWriterTest.java b/google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1/JsonStreamWriterTest.java
index 258a287a1c..8c34ad9b3c 100644
--- a/google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1/JsonStreamWriterTest.java
+++ b/google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1/JsonStreamWriterTest.java
@@ -63,8 +63,8 @@
@RunWith(JUnit4.class)
public class JsonStreamWriterTest {
private static final Logger LOG = Logger.getLogger(JsonStreamWriterTest.class.getName());
- private static final String TEST_STREAM = "projects/p/datasets/d/tables/t/streams/s";
- private static final String TEST_STREAM_2 = "projects/p/datasets/d2/tables/t2/streams/s2";
+ private static final String TEST_STREAM = "projects/p/datasets/d/tables/t/streams/_default";
+ private static final String TEST_STREAM_2 = "projects/p/datasets/d2/tables/t2/streams/_default";
private static final String TEST_TABLE = "projects/p/datasets/d/tables/t";
private static final ExecutorProvider SINGLE_THREAD_EXECUTOR =
InstantiatingExecutorProvider.newBuilder().setExecutorThreadCount(1).build();
diff --git a/google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1/StreamWriterTest.java b/google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1/StreamWriterTest.java
index 134b438593..50e43fe45d 100644
--- a/google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1/StreamWriterTest.java
+++ b/google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1/StreamWriterTest.java
@@ -62,8 +62,10 @@
@RunWith(JUnit4.class)
public class StreamWriterTest {
private static final Logger log = Logger.getLogger(StreamWriterTest.class.getName());
- private static final String TEST_STREAM_1 = "projects/p/datasets/d1/tables/t1/streams/s1";
- private static final String TEST_STREAM_2 = "projects/p/datasets/d2/tables/t2/streams/s2";
+ private static final String TEST_STREAM_1 = "projects/p/datasets/d1/tables/t1/streams/_default";
+ private static final String TEST_STREAM_2 = "projects/p/datasets/d2/tables/t2/streams/_default";
+ private static final String TEST_STREAM_SHORTEN = "projects/p/datasets/d2/tables/t2/_default";
+ private static final String EXPLICIT_STEAM = "projects/p/datasets/d1/tables/t1/streams/s1";
private static final String TEST_TRACE_ID = "DATAFLOW:job_id";
private FakeScheduledExecutorService fakeExecutor;
private FakeBigQueryWrite testBigQueryWrite;
@@ -366,6 +368,31 @@ public void run() throws Throwable {
});
}
+ @Test
+ public void testEnableConnectionPoolOnExplicitStream() throws Exception {
+ IllegalArgumentException ex =
+ assertThrows(
+ IllegalArgumentException.class,
+ new ThrowingRunnable() {
+ @Override
+ public void run() throws Throwable {
+ StreamWriter.newBuilder(EXPLICIT_STEAM, client)
+ .setEnableConnectionPool(true)
+ .build();
+ }
+ });
+ assertTrue(ex.getMessage().contains("Trying to enable connection pool in non-default stream."));
+ }
+
+ @Test
+ public void testShortenStreamNameAllowed() throws Exception {
+ // no exception is thrown.
+ StreamWriter.newBuilder(TEST_STREAM_SHORTEN, client)
+ .setEnableConnectionPool(true)
+ .setLocation("us")
+ .build();
+ }
+
@Test
public void testAppendSuccessAndConnectionError() throws Exception {
StreamWriter writer = getTestStreamWriter();
diff --git a/grpc-google-cloud-bigquerystorage-v1/pom.xml b/grpc-google-cloud-bigquerystorage-v1/pom.xml
index a36c5d5b5d..70ebdd87a9 100644
--- a/grpc-google-cloud-bigquerystorage-v1/pom.xml
+++ b/grpc-google-cloud-bigquerystorage-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
grpc-google-cloud-bigquerystorage-v1
- 2.26.0
+ 2.27.0
grpc-google-cloud-bigquerystorage-v1
GRPC library for grpc-google-cloud-bigquerystorage-v1
com.google.cloud
google-cloud-bigquerystorage-parent
- 2.26.0
+ 2.27.0
diff --git a/grpc-google-cloud-bigquerystorage-v1beta1/pom.xml b/grpc-google-cloud-bigquerystorage-v1beta1/pom.xml
index 778903f97d..bf6472829e 100644
--- a/grpc-google-cloud-bigquerystorage-v1beta1/pom.xml
+++ b/grpc-google-cloud-bigquerystorage-v1beta1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
grpc-google-cloud-bigquerystorage-v1beta1
- 0.150.0
+ 0.151.0
grpc-google-cloud-bigquerystorage-v1beta1
GRPC library for grpc-google-cloud-bigquerystorage-v1beta1
com.google.cloud
google-cloud-bigquerystorage-parent
- 2.26.0
+ 2.27.0
diff --git a/grpc-google-cloud-bigquerystorage-v1beta2/pom.xml b/grpc-google-cloud-bigquerystorage-v1beta2/pom.xml
index 282b5213fb..08171ba24e 100644
--- a/grpc-google-cloud-bigquerystorage-v1beta2/pom.xml
+++ b/grpc-google-cloud-bigquerystorage-v1beta2/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
grpc-google-cloud-bigquerystorage-v1beta2
- 0.150.0
+ 0.151.0
grpc-google-cloud-bigquerystorage-v1beta2
GRPC library for grpc-google-cloud-bigquerystorage-v1beta2
com.google.cloud
google-cloud-bigquerystorage-parent
- 2.26.0
+ 2.27.0
diff --git a/pom.xml b/pom.xml
index c1116df39b..f7abd87805 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
com.google.cloud
google-cloud-bigquerystorage-parent
pom
- 2.26.0
+ 2.27.0
BigQuery Storage Parent
https://github.com/googleapis/java-bigquerystorage
@@ -14,7 +14,7 @@
com.google.cloud
google-cloud-shared-config
- 1.5.4
+ 1.5.5
@@ -76,44 +76,44 @@
com.google.cloud
google-cloud-shared-dependencies
- 3.0.6
+ 3.1.0
pom
import
com.google.api.grpc
proto-google-cloud-bigquerystorage-v1beta1
- 0.150.0
+ 0.151.0
com.google.api.grpc
proto-google-cloud-bigquerystorage-v1beta2
- 0.150.0
+ 0.151.0
com.google.api.grpc
proto-google-cloud-bigquerystorage-v1
- 2.26.0
+ 2.27.0
com.google.api.grpc
grpc-google-cloud-bigquerystorage-v1beta1
- 0.150.0
+ 0.151.0
com.google.api.grpc
grpc-google-cloud-bigquerystorage-v1beta2
- 0.150.0
+ 0.151.0
com.google.api.grpc
grpc-google-cloud-bigquerystorage-v1
- 2.26.0
+ 2.27.0
com.google.cloud
google-cloud-bigquerystorage
- 2.26.0
+ 2.27.0
org.json
diff --git a/proto-google-cloud-bigquerystorage-v1/pom.xml b/proto-google-cloud-bigquerystorage-v1/pom.xml
index 6213582a18..4380700cc8 100644
--- a/proto-google-cloud-bigquerystorage-v1/pom.xml
+++ b/proto-google-cloud-bigquerystorage-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
proto-google-cloud-bigquerystorage-v1
- 2.26.0
+ 2.27.0
proto-google-cloud-bigquerystorage-v1
PROTO library for proto-google-cloud-bigquerystorage-v1
com.google.cloud
google-cloud-bigquerystorage-parent
- 2.26.0
+ 2.27.0
diff --git a/proto-google-cloud-bigquerystorage-v1beta1/pom.xml b/proto-google-cloud-bigquerystorage-v1beta1/pom.xml
index 0108942e56..1d9b326e49 100644
--- a/proto-google-cloud-bigquerystorage-v1beta1/pom.xml
+++ b/proto-google-cloud-bigquerystorage-v1beta1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
proto-google-cloud-bigquerystorage-v1beta1
- 0.150.0
+ 0.151.0
proto-google-cloud-bigquerystorage-v1beta1
PROTO library for proto-google-cloud-bigquerystorage-v1beta1
com.google.cloud
google-cloud-bigquerystorage-parent
- 2.26.0
+ 2.27.0
diff --git a/proto-google-cloud-bigquerystorage-v1beta2/pom.xml b/proto-google-cloud-bigquerystorage-v1beta2/pom.xml
index 878866a0c2..ef3e2c3632 100644
--- a/proto-google-cloud-bigquerystorage-v1beta2/pom.xml
+++ b/proto-google-cloud-bigquerystorage-v1beta2/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
proto-google-cloud-bigquerystorage-v1beta2
- 0.150.0
+ 0.151.0
proto-google-cloud-bigquerystorage-v1beta2
PROTO library for proto-google-cloud-bigquerystorage-v1beta2
com.google.cloud
google-cloud-bigquerystorage-parent
- 2.26.0
+ 2.27.0
diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml
index cc5a483690..a64e59bfc9 100644
--- a/samples/install-without-bom/pom.xml
+++ b/samples/install-without-bom/pom.xml
@@ -21,7 +21,7 @@
1.8
1.8
UTF-8
- 10.0.0
+ 10.0.1