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 c2d7d5fbbc6 BigtableIO: Force minimum value of
`desiredBundleSizeBytes` to be 1 (#28798)
c2d7d5fbbc6 is described below
commit c2d7d5fbbc6a0d89131a624665116758c194e3ea
Author: Joar Wandborg <[email protected]>
AuthorDate: Thu Oct 5 21:44:09 2023 +0200
BigtableIO: Force minimum value of `desiredBundleSizeBytes` to be 1 (#28798)
---
CHANGES.md | 34 ++++++++++++++++++++++
.../beam/sdk/io/gcp/bigtable/BigtableIO.java | 6 +++-
.../beam/sdk/io/gcp/bigtable/BigtableIOTest.java | 33 +++++++++++++++++++++
3 files changed, 72 insertions(+), 1 deletion(-)
diff --git a/CHANGES.md b/CHANGES.md
index 650b33c1240..0c2c2e3f79f 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -53,6 +53,40 @@
* ([#X](https://github.com/apache/beam/issues/X)).
-->
+# [2.52.0] - Unreleased
+
+## Highlights
+
+* New highly anticipated feature X added to Python SDK
([#X](https://github.com/apache/beam/issues/X)).
+* New highly anticipated feature Y added to Java SDK
([#Y](https://github.com/apache/beam/issues/Y)).
+
+## I/Os
+
+* Support for X source added (Java/Python)
([#X](https://github.com/apache/beam/issues/X)).
+
+## New Features / Improvements
+
+* X feature added (Java/Python)
([#X](https://github.com/apache/beam/issues/X)).
+
+## Breaking Changes
+
+* X behavior was changed ([#X](https://github.com/apache/beam/issues/X)).
+
+## Deprecations
+
+* X behavior is deprecated and will be removed in X versions
([#X](https://github.com/apache/beam/issues/X)).
+
+## Bugfixes
+
+* Fixed "Desired bundle size 0 bytes must be greater than 0" in Java SDK's
BigtableIO.BigtableSource when you have more cores than bytes to read (Java)
[#28793](https://github.com/apache/beam/issues/28793).
+
+## Security Fixes
+* Fixed (CVE-YYYY-NNNN)[https://www.cve.org/CVERecord?id=CVE-YYYY-NNNN]
(Java/Python/Go) ([#X](https://github.com/apache/beam/issues/X)).
+
+## Known Issues
+
+* ([#X](https://github.com/apache/beam/issues/X)).
+
# [2.51.0] - Unreleased
## Highlights
diff --git
a/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.java
b/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.java
index 92a0af20548..ef868e8bf7c 100644
---
a/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.java
+++
b/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.java
@@ -1326,7 +1326,11 @@ public class BigtableIO {
long maximumNumberOfSplits = 4000;
long sizeEstimate = getEstimatedSizeBytes(options);
desiredBundleSizeBytes =
- Math.max(sizeEstimate / maximumNumberOfSplits,
desiredBundleSizeBytes);
+ Math.max(
+ sizeEstimate / maximumNumberOfSplits,
+ // BoundedReadEvaluatorFactory may provide us with a
desiredBundleSizeBytes of 0
+ // https://github.com/apache/beam/issues/28793
+ Math.max(1, desiredBundleSizeBytes));
// Delegate to testable helper.
List<BigtableSource> splits =
diff --git
a/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/bigtable/BigtableIOTest.java
b/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/bigtable/BigtableIOTest.java
index bb70eb78984..971b91d89b7 100644
---
a/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/bigtable/BigtableIOTest.java
+++
b/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/bigtable/BigtableIOTest.java
@@ -766,6 +766,39 @@ public class BigtableIOTest {
assertSourcesEqualReferenceSource(source, splits, null /* options */);
}
+ /**
+ * Regression test for <a
href="https://github.com/apache/beam/issues/28793">[Bug]: BigtableSource
+ * "Desired bundle size 0 bytes must be greater than 0" #28793 </a>.
+ */
+ @Test
+ public void testSplittingWithDesiredBundleSizeZero() throws Exception {
+ final String table = "TEST-SPLIT-DESIRED-BUNDLE-SIZE-ZERO-TABLE";
+ final int numRows = 10;
+ final int numSamples = 10;
+ final long bytesPerRow = 1L;
+
+ // Set up test table data and sample row keys for size estimation and
splitting.
+ makeTableData(table, numRows);
+ service.setupSampleRowKeys(table, numSamples, bytesPerRow);
+
+ // Generate source and split it.
+ BigtableSource source =
+ new BigtableSource(
+ factory,
+ configId,
+ config,
+ BigtableReadOptions.builder()
+ .setTableId(StaticValueProvider.of(table))
+ .setKeyRanges(ALL_KEY_RANGE)
+ .build(),
+ null /*size*/);
+ List<BigtableSource> splits = source.split(0, null /* options */);
+
+ // Test num splits and split equality.
+ assertThat(splits, hasSize(numSamples));
+ assertSourcesEqualReferenceSource(source, splits, null /* options */);
+ }
+
@Test
public void testReadingWithSplitFailed() throws Exception {
FailureBigtableService failureService =