Skip to content
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

fix: retrying get remote offset and recover from last chunk failures. #726

Merged
merged 7 commits into from Feb 26, 2021

Conversation

frankyn
Copy link
Member

@frankyn frankyn commented Feb 24, 2021

Thank you for opening a Pull Request! Before submitting your PR, there are a few things you can do to make sure it goes smoothly:

  • Ensure the tests and linter pass
  • Code coverage does not decrease (if any source code was changed)
  • Appropriate docs were updated (if necessary)

I added three things in this PR:

  1. Retries around getting remote offset from GCS
  2. Retrying last chunk failures correctly.
  3. Updated documentation for the retry cases

Fixes #709 #687 ☕️

@product-auto-label product-auto-label bot added the api: storage Issues related to the googleapis/java-storage API. label Feb 24, 2021
@google-cla google-cla bot added the cla: yes This human has signed the Contributor License Agreement. label Feb 24, 2021
@frankyn frankyn changed the title Improve retry reliability fix: retrying get remote offset and recover from last chunk failures. Feb 24, 2021
@codecov
Copy link

codecov bot commented Feb 24, 2021

Codecov Report

Merging #726 (fbea777) into master (1389d01) will increase coverage by 0.26%.
The diff coverage is 78.04%.

Impacted file tree graph

@@             Coverage Diff              @@
##             master     #726      +/-   ##
============================================
+ Coverage     64.33%   64.60%   +0.26%     
- Complexity      621      634      +13     
============================================
  Files            32       32              
  Lines          5322     5311      -11     
  Branches        521      519       -2     
============================================
+ Hits           3424     3431       +7     
+ Misses         1733     1718      -15     
+ Partials        165      162       -3     
Impacted Files Coverage Δ Complexity Δ
...om/google/cloud/storage/spi/v1/HttpStorageRpc.java 1.56% <0.00%> (+<0.01%) 2.00 <0.00> (ø)
...ava/com/google/cloud/storage/BlobWriteChannel.java 79.79% <88.88%> (+12.50%) 15.00 <4.00> (+4.00)

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 1389d01...5446314. Read the comment docs.

@frankyn frankyn marked this pull request as ready for review February 24, 2021 19:23
@frankyn frankyn requested a review from a team February 24, 2021 19:23
Copy link
Collaborator

@BenWhitehead BenWhitehead left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a few minor comments/questions

}

@Test
public void testWriteWithDriftRetryCase10() throws IOException {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: I don't know what case N is,

If easy can we improve these test names? maybe something like
testWriteWithDriftRetry_exceptionWhileWriting

@@ -766,6 +766,7 @@ public long getCurrentUploadOffset(String uploadId) {
response = httpRequest.execute();
int code = response.getStatusCode();
if (code == 201 || code == 200) {
// Upload completed successfully
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: create constants for compared values instead of commenting

201 -> STATUS_CREATED
200 -> STATUS_OK

sb.append("Not sure what occurred. Here's debugging information:\n");
sb.append("Response:\n").append(ex.toString()).append("\n\n");
throw new StorageException(0, sb.toString());
throw translate(ex);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We don't want to keep the information in the exception message?

sb.append("uploadId: ").append(getUploadId()).append('\n');
sb.append("localNextByteOffset: ").append(localNextByteOffset).append('\n');
sb.append("remoteNextByteOffset: ").append(remoteNextByteOffset).append('\n');
sb.append("driftOffset: ").append(driftOffset).append("\n\n");
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: only diff between this block and case 4 is Local vs Remote can we extract a method of this logic so it's easier to keep in sync?

@frankyn frankyn added the automerge Merge the pull request once unit tests and other checks pass. label Feb 26, 2021
@gcf-merge-on-green gcf-merge-on-green bot merged commit b41b881 into master Feb 26, 2021
@gcf-merge-on-green gcf-merge-on-green bot deleted the improve-retry-reliability branch February 26, 2021 02:34
@gcf-merge-on-green gcf-merge-on-green bot removed the automerge Merge the pull request once unit tests and other checks pass. label Feb 26, 2021
gcf-merge-on-green bot pushed a commit that referenced this pull request Mar 1, 2021
🤖 I have created a release \*beep\* \*boop\* 
---
### [1.113.12](https://www.github.com/googleapis/java-storage/compare/v1.113.11...v1.113.12) (2021-02-26)


### Bug Fixes

* retrying get remote offset and recover from last chunk failures. ([#726](https://www.github.com/googleapis/java-storage/issues/726)) ([b41b881](https://www.github.com/googleapis/java-storage/commit/b41b88109e13b5ebbd0393d1f264225c12876be6))


### Dependencies

* update dependency com.google.api-client:google-api-client to v1.31.2 ([#686](https://www.github.com/googleapis/java-storage/issues/686)) ([6b1f036](https://www.github.com/googleapis/java-storage/commit/6b1f0361376167719ec5456181134136d27d1d3c))
* update dependency com.google.cloud:google-cloud-shared-dependencies to v0.20.0 ([#732](https://www.github.com/googleapis/java-storage/issues/732)) ([c98413d](https://www.github.com/googleapis/java-storage/commit/c98413df9d9514340aed78b5a4d5e596760bb616))
* update kms.version to v0.87.7 ([#724](https://www.github.com/googleapis/java-storage/issues/724)) ([3229bd8](https://www.github.com/googleapis/java-storage/commit/3229bd860f3a4d700a969aa9e922bbf6b5c1ca10))
* update kms.version to v0.87.8 ([#733](https://www.github.com/googleapis/java-storage/issues/733)) ([a21b75f](https://www.github.com/googleapis/java-storage/commit/a21b75fa846f373970298dd98f8f3520fc2b3c97))
---


This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
api: storage Issues related to the googleapis/java-storage API. cla: yes This human has signed the Contributor License Agreement.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

google cloud storage: NPE from BlobId.java:119
2 participants