-
Notifications
You must be signed in to change notification settings - Fork 1.4k
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
bigquery: storage/managedwriter: wrong error at the wrong place for large batch inserts #6321
Comments
I'll need to look more deeply at this, but my initial guess is that this is running afoul of grpc send/recv limits. They can be adjusted to some extent on the client side, but currently the backend only accepts single appends of ~10MB in size. |
Was able to repro and understand what's happening here. The large append causes the server side to close the network connection for the stream, which the client isn't detecting properly. It retries, but using the moribund connection it never makes progress. There is a more descriptive error wrapped inside the invalid request message, but it's not obvious that it's there as its not surfaced in the error string. I've got some work to make error comprehension better here, but I'll tackle that in subsequent work. The immediate fix will be to address the reconnection problem. |
Issuing a sufficiently large single append request is enough to trigger the server backend to close an existing grpc stream. This PR addresses the problem by allowing a failed request to signal that subsequent requests should request a new grpc stream connection. This PR also adds an integration test that induces the failure by issuing a large request, and ensures subsequent requests succeed. Towards: googleapis#6321
) * fix(bigquery/storage/managedwriter): improve network reconnection Issuing a sufficiently large single append request is enough to trigger the server backend to close an existing grpc stream. This PR addresses the problem by allowing a failed request to signal that subsequent requests should request a new grpc stream connection. This PR also adds an integration test that induces the failure by issuing a large request, and ensures subsequent requests succeed. Towards: #6321
The initial fix for the reconnection issue has been released in bigquery 1.36.0. I'm dropping the priority for this issue, targeting the subsequent error handling improvements. |
* feat(storage): add Custom Placement Config Dual Region Support (#6294) * feat(storage): support Custom Dual Regions with CustomPlacementConfig * fix typo * add comments * address pr comments * new sublink * feat(bigquery/storage/managedwriter/adapt): support packed field option (#6312) * feat(bigquery/storage/managedwriter/adapt): support packed field option This PR adds the "packed" field option for repeated numeric scalar types when converting from table schema to proto descriptor. For large repetitions, this can yield wire size encoding benefits. This option is only relevant for proto2 descriptors; proto3 packs by default. * chore: update go version to 1.17 (#6342) This does not affect the version of Go we support. More details here: googleapis/go-genproto#859 * chore(all): auto-regenerate gapics (#6337) This is an auto-generated regeneration of the gapic clients by cloud.google.com/go/internal/gapicgen. Once the corresponding genproto PR is submitted, genbot will update this PR with a newer dependency to the newer version of genproto and assign reviewers to this PR. If you have been assigned to review this PR, please: - Ensure that the version of genproto in go.mod has been updated. - Ensure that CI is passing. If it's failing, it requires your manual attention. - Approve and submit this PR if you believe it's ready to ship. Corresponding genproto PR: googleapis/go-genproto#857 Changes: feat(bigquery/migration): Add Presto dialect to bigquerymigration v2 client library PiperOrigin-RevId: 460797158 Source-Link: googleapis/googleapis@46f2598 * fix(bigquery/storage/managedwriter): improve network reconnection (#6338) * fix(bigquery/storage/managedwriter): improve network reconnection Issuing a sufficiently large single append request is enough to trigger the server backend to close an existing grpc stream. This PR addresses the problem by allowing a failed request to signal that subsequent requests should request a new grpc stream connection. This PR also adds an integration test that induces the failure by issuing a large request, and ensures subsequent requests succeed. Towards: #6321 * fix(pubsub): make receipt modack call async (#6335) * fix(pubsub): make receipt modack call async * dont propagate modack errors * update comment on why errors are not checked * chore(all): auto-regenerate gapics (#6347) This is an auto-generated regeneration of the gapic clients by cloud.google.com/go/internal/gapicgen. Once the corresponding genproto PR is submitted, genbot will update this PR with a newer dependency to the newer version of genproto and assign reviewers to this PR. If you have been assigned to review this PR, please: - Ensure that the version of genproto in go.mod has been updated. - Ensure that CI is passing. If it's failing, it requires your manual attention. - Approve and submit this PR if you believe it's ready to ship. Corresponding genproto PR: googleapis/go-genproto#861 Changes: feat(dataplex): Add IAM support for Explore content APIs feat: Add support for custom container for Task feat: Add support for cross project for Task feat: Add support for custom encryption key to be used for encrypt data on the PDs associated with the VMs in your Dataproc cluster for Task feat: Add support for Latest job in Task resource feat: User mode filter in Explore list sessions API feat: Support logging sampled file paths per partition to Cloud logging for Discovery event PiperOrigin-RevId: 461116673 Source-Link: googleapis/googleapis@9af1b9b * chore(main): release bigquery 1.36.0 (#6343) Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> * chore(storage): remove adapters dependency (#6350) The go-type-adapters package is used only minimally in storage, and nowhere else in google-cloud-go. Seems easiest to just drop this dependency. * doc(pubsub): clarify behavior of ack deadlines (#6301) * doc(pubsub): clarify behavior of ack deadlines * add 99th percentile documentation * chore(ci): add sync branch workflow for storage-refactor (#6334) * chore(ci): add sync branch workflow for storage-refactor * add change notes * only on weekdays * change job names * add cloud-storage-dpe to reviewers Co-authored-by: gcf-merge-on-green[bot] <60162190+gcf-merge-on-green[bot]@users.noreply.github.com> * test(profiler): use go 1.18.4 in integration test (#6348) * chore: fix renovate (#6353) It has not processed in 20 days. I think we need to be careful with the PRs and have renovate try to do all the rebasing needed or else it seems to get confused and not able to recover. Fixes: #6352 * chore(main): release pubsub 1.24.0 (#6300) Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> Co-authored-by: Alex Hong <[email protected]> * chore(ci): storage-refactor sync use Yoshi Code Bot (#6355) Co-authored-by: gcf-merge-on-green[bot] <60162190+gcf-merge-on-green[bot]@users.noreply.github.com> Co-authored-by: cojenco <[email protected]> Co-authored-by: shollyman <[email protected]> Co-authored-by: Cody Oss <[email protected]> Co-authored-by: Yoshi Automation Bot <[email protected]> Co-authored-by: Alex Hong <[email protected]> Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> Co-authored-by: Chris Cotter <[email protected]> Co-authored-by: Noah Dietz <[email protected]> Co-authored-by: gcf-merge-on-green[bot] <60162190+gcf-merge-on-green[bot]@users.noreply.github.com> Co-authored-by: Amarin (Um) Phaosawasdi <[email protected]>
) * fix(bigquery/storage/managedwriter): improve network reconnection Issuing a sufficiently large single append request is enough to trigger the server backend to close an existing grpc stream. This PR addresses the problem by allowing a failed request to signal that subsequent requests should request a new grpc stream connection. This PR also adds an integration test that induces the failure by issuing a large request, and ensures subsequent requests succeed. Towards: #6321
This PR augments the package docs, as well as adding a utility function for extracting an instance of the service's specific error proto from an error (by way of the grpc status error details). Fixes: googleapis#6321
) * feat(bigquery/storage/managedwriter): improve error communication Fixes: #6321
Client
go/bigquery/storage/managedwriter
Environment
MacOS Monterey 12.3
Windows 10
Go Environment
$ go version: go1.18 darwin/amd64 or go1.17.5 windows/amd64
Code
e.g.
Expected behavior
data is loaded to BQ
Actual behavior
rpc error: code = InvalidArgument desc = Request contains an invalid argument.
which comes from
It happend because the list of rows is too big (with more complex data the limit is 100k, when I have less rows it all works). So:
The text was updated successfully, but these errors were encountered: