feat: add support to a few more specific StorageErrors for the Write API#1563
Conversation
OFFSET_OUT_OF_RANGE OFFSET_ALREADY_EXISTS STREAM_NOT_FOUND Towards b/220198094
yirutang
left a comment
There was a problem hiding this comment.
Add a e2e test for all these exceptions + to show the StatusRuntimeException still works?
|
Converting this to draft as we realized that there are backend changes needed (https://b.corp.google.com/issues/220198094#comment7) before proceeding. |
google-cloud-bigquerystorage/src/main/java/com/google/cloud/bigquery/storage/v1/Exceptions.java
Show resolved
Hide resolved
|
The exception backend change is fully rolled out. |
| return null; | ||
| } | ||
| String streamName = error.getEntity(); | ||
| String errorMessage = |
There was a problem hiding this comment.
Add a comment about this is to trim the entity sub message. Also narrow it further down by looking for "Entity: ".
There was a problem hiding this comment.
"Entity:..." is present in the detailMessage of OFFSET_OUT_OF_RANGE error when it should not be there since we already provide streamName in the error. The full detailMessage I get looks like: "OUT_OF_RANGE: The offset is within stream, expected offset 1, received 0 Entity: projects/.../datasets/.../tables/testtable/streams/CiQ2NGY3OT...".
I created b/231499869 to track this.
There was a problem hiding this comment.
So why do you need to trim the next message?
There was a problem hiding this comment.
What does "next message" mean? I added a comment here to clarify further. Basically, I need to trim the message of whitespaces either way (with or without Entity) in order to get the "expected offset [0-9]+, received [0-9]+" portion to parse out the offset numbers.
| Long expectedOffet = | ||
| Long.parseLong( | ||
| errorMessage.substring( | ||
| errorMessage.lastIndexOf("offset") + 7, errorMessage.lastIndexOf(","))); |
There was a problem hiding this comment.
Have a stream match pattern for "expected offset $0, received $1". I am writing cl/445470232 to make sure the parsing will not break.
🤖 I have created a release *beep* *boop* --- ## [2.13.0](v2.12.2...v2.13.0) (2022-05-05) ### Features * add support to a few more specific StorageErrors for the Write API ([#1563](#1563)) ([c26091e](c26091e)) * next release from main branch is 2.12.2 ([#1624](#1624)) ([b2aa2a4](b2aa2a4)) ### Bug Fixes * A stuck when the client fail to get DoneCallback ([#1637](#1637)) ([3baa84e](3baa84e)) * Fix a possible NULL PTR after introduced timeout on waitForDone ([#1638](#1638)) ([e1c6ded](e1c6ded)) ### Dependencies * update dependency com.google.cloud:google-cloud-bigquery to v2.10.10 ([#1623](#1623)) ([54b74b8](54b74b8)) * update dependency org.apache.avro:avro to v1.11.0 ([#1632](#1632)) ([b47eea0](b47eea0)) ### Documentation * **samples:** update WriteComittedStream sample code to match best practices ([#1628](#1628)) ([5d4c7e1](5d4c7e1)) * **sample:** update WriteToDefaultStream sample to match best practices ([#1631](#1631)) ([73ddd7b](73ddd7b)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
OFFSET_OUT_OF_RANGE
OFFSET_ALREADY_EXISTS
STREAM_NOT_FOUND
Towards b/220198094