-
Notifications
You must be signed in to change notification settings - Fork 4.5k
feat:large-row-skip-in-bigtable | added experimental options to skip … #34245
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Closed
sarthakbhutani
wants to merge
6
commits into
apache:master
from
sarthakbhutani:large-row-skip-in-bigtable
Closed
Changes from 1 commit
Commits
Show all changes
6 commits
Select commit
Hold shift + click to select a range
0eb2494
feat:large-row-skip-in-bigtable | added experimental options to skip …
sarthakbhutani 50f7924
removed the separate reader for skipping large rows
sarthakbhutani f648a5a
code formatted
sarthakbhutani c5150ff
Merge branch 'apache:master' into large-row-skip-in-bigtable
sarthakbhutani 16b04a2
Code refractoring - Improve readability of experimentalSkipLargeRows…
sarthakbhutani e253472
Code formatting
sarthakbhutani File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -125,6 +125,100 @@ public BigtableWriterImpl openForWriting(BigtableWriteOptions writeOptions) { | |
| writeOptions.getCloseWaitTimeout()); | ||
| } | ||
|
|
||
| @VisibleForTesting | ||
| static class BigtableReaderWithExperimentalOptions implements Reader { | ||
| private final BigtableDataClient client; | ||
|
|
||
| private final String projectId; | ||
| private final String instanceId; | ||
| private final String tableId; | ||
|
|
||
| private final List<ByteKeyRange> ranges; | ||
| private final RowFilter rowFilter; | ||
| private Iterator<Row> results; | ||
|
|
||
| private Row currentRow; | ||
|
|
||
| private ServerStream<Row> stream; | ||
|
|
||
| private boolean exhausted; | ||
|
|
||
| @VisibleForTesting | ||
| BigtableReaderWithExperimentalOptions( | ||
| BigtableDataClient client, | ||
| String projectId, | ||
| String instanceId, | ||
| String tableId, | ||
| List<ByteKeyRange> ranges, | ||
| @Nullable RowFilter rowFilter) { | ||
| this.client = client; | ||
| this.projectId = projectId; | ||
| this.instanceId = instanceId; | ||
| this.tableId = tableId; | ||
| this.ranges = ranges; | ||
| this.rowFilter = rowFilter; | ||
| } | ||
|
|
||
| @Override | ||
| public boolean start() throws IOException { | ||
| ServiceCallMetric serviceCallMetric = createCallMetric(projectId, instanceId, tableId); | ||
|
|
||
| Query query = Query.create(tableId); | ||
| for (ByteKeyRange sourceRange : ranges) { | ||
| query.range( | ||
| ByteString.copyFrom(sourceRange.getStartKey().getValue()), | ||
| ByteString.copyFrom(sourceRange.getEndKey().getValue())); | ||
| } | ||
|
|
||
| if (rowFilter != null) { | ||
| query.filter(Filters.FILTERS.fromProto(rowFilter)); | ||
| } | ||
| try { | ||
| stream = | ||
| client | ||
| .skipLargeRowsCallable(new BigtableRowProtoAdapter()) | ||
|
||
| .call(query, GrpcCallContext.createDefault()); | ||
| results = stream.iterator(); | ||
| serviceCallMetric.call("ok"); | ||
| } catch (StatusRuntimeException e) { | ||
| serviceCallMetric.call(e.getStatus().getCode().toString()); | ||
| throw e; | ||
| } | ||
| return advance(); | ||
| } | ||
|
|
||
| @Override | ||
| public boolean advance() throws IOException { | ||
| if (results.hasNext()) { | ||
| currentRow = results.next(); | ||
| return true; | ||
| } | ||
| exhausted = true; | ||
| return false; | ||
| } | ||
|
|
||
| @Override | ||
| public Row getCurrentRow() throws NoSuchElementException { | ||
| if (currentRow == null) { | ||
| throw new NoSuchElementException(); | ||
| } | ||
| return currentRow; | ||
| } | ||
|
|
||
| @Override | ||
| public void close() { | ||
| if (!exhausted) { | ||
| stream.cancel(); | ||
| exhausted = true; | ||
| } | ||
| } | ||
|
|
||
| @Override | ||
| public void reportLineage() { | ||
| Lineage.getSources().add("bigtable", ImmutableList.of(projectId, instanceId, tableId)); | ||
| } | ||
| } | ||
|
|
||
| @VisibleForTesting | ||
| static class BigtableReaderImpl implements Reader { | ||
| private final BigtableDataClient client; | ||
|
|
@@ -660,6 +754,14 @@ public Reader createReader(BigtableSource source) throws IOException { | |
| source.getRanges(), | ||
| source.getRowFilter(), | ||
| source.getMaxBufferElementCount()); | ||
| } else if (source.getReadOptions().getExperimentalSkipLargeRows()) { | ||
| return new BigtableReaderWithExperimentalOptions( | ||
| client, | ||
| projectId, | ||
| instanceId, | ||
| source.getTableId().get(), | ||
| source.getRanges(), | ||
| source.getRowFilter()); | ||
| } else { | ||
| return new BigtableReaderImpl( | ||
| client, | ||
|
|
||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.