Skip to content

Conversation

frankyn
Copy link
Contributor

@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

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.

2 participants