-
Notifications
You must be signed in to change notification settings - Fork 229
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
feat: update retries and implement Retryable #750
Merged
Merged
Changes from 37 commits
Commits
Show all changes
39 commits
Select commit
Hold shift + click to select a range
70b01b7
feat: update retries and implement Retryable
TimurSadykov b9bbc1f
fix: retry logic fix
TimurSadykov 11c9ffa
feat: add RetryStrategy setting to GoogleCredential and ServiceAccoun…
TimurSadykov 2791b9a
fix: refactor retryable interface
TimurSadykov fd7a446
Merge remote-tracking branch 'origin/main' into stim-common-retry
TimurSadykov 190d191
fix: javadocs
TimurSadykov 8c0991c
🦉 Updates from OwlBot
gcf-owl-bot[bot] d863ce8
fix: remove RetryStrategy
TimurSadykov c6ef5c5
fix: change set definition to java 8 compatible
TimurSadykov e92c65b
🦉 Updates from OwlBot
gcf-owl-bot[bot] f8d6842
feat: tests for new retries
TimurSadykov 7b4e490
🦉 Updates from OwlBot
gcf-owl-bot[bot] 5aef1f7
fix: update method name
TimurSadykov fc7bcb4
fix: temporary poms
TimurSadykov 67cfaab
🦉 Updates from OwlBot
gcf-owl-bot[bot] 5bd45cf
fix: refactor to move response handling into the specific credential …
TimurSadykov 7e7f437
🦉 Updates from OwlBot
gcf-owl-bot[bot] 22b2ce5
fix: update dependencies with release builds
TimurSadykov e11b257
fix: http-client dependency fix
TimurSadykov 626cb41
fix: http-client dependency fix
TimurSadykov e1910c2
remove unused dependency
TimurSadykov eef2030
feat: additional factory method
TimurSadykov d7bef21
feat: flag to disable default retries and tests
TimurSadykov 577bfef
🦉 Updates from OwlBot
gcf-owl-bot[bot] d88bc10
fix: merge conflict
TimurSadykov c22fb51
fix: (WIF) remove erroneous check for the subject token field name fo…
lsirac fe7a059
chore(deps): update dependency org.apache.maven.plugins:maven-compile…
renovate-bot fff63de
chore(deps): update dependency org.apache.maven.plugins:maven-checkst…
renovate-bot 52aacd6
🦉 Updates from OwlBot
gcf-owl-bot[bot] c14a620
Merge remote-tracking branch 'origin/main' into stim-common-retry
TimurSadykov afb3a50
fix: nit remove extra ;
TimurSadykov 10a0c0c
merge latest
TimurSadykov 1adab2c
feat: generate retryable exceptions for UserCredentials
TimurSadykov b533e65
🦉 Updates from OwlBot
gcf-owl-bot[bot] 7404928
Merge branch 'main' into stim-common-retry
arithmetic1728 4363aba
fix: remove public from exception constructors, leverage builder in S…
TimurSadykov d309720
🦉 Updates from OwlBot
gcf-owl-bot[bot] 23d38a5
fix: update ServiceAccountCredentials docs
TimurSadykov d85aee4
🦉 Updates from OwlBot
gcf-owl-bot[bot] 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 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 |
---|---|---|
|
@@ -9,6 +9,7 @@ target/ | |
|
||
# Intellij | ||
*.iml | ||
*.factorypath | ||
.idea/ | ||
|
||
# VS Code | ||
|
This file contains 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 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 |
---|---|---|
@@ -0,0 +1,49 @@ | ||
/* | ||
* Copyright 2022 Google LLC | ||
* | ||
* Redistribution and use in source and binary forms, with or without | ||
* modification, are permitted provided that the following conditions are | ||
* met: | ||
* | ||
* * Redistributions of source code must retain the above copyright | ||
* notice, this list of conditions and the following disclaimer. | ||
* * Redistributions in binary form must reproduce the above | ||
* copyright notice, this list of conditions and the following disclaimer | ||
* in the documentation and/or other materials provided with the | ||
* distribution. | ||
* | ||
* * Neither the name of Google LLC nor the names of its | ||
* contributors may be used to endorse or promote products derived from | ||
* this software without specific prior written permission. | ||
* | ||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
*/ | ||
|
||
package com.google.auth; | ||
|
||
// an interface to identify retryable errors | ||
public interface Retryable { | ||
TimurSadykov marked this conversation as resolved.
Show resolved
Hide resolved
|
||
/** | ||
* A flag indicating whether the error is retryable | ||
* | ||
* @return true if related error is retryable, false otherwise | ||
*/ | ||
boolean isRetryable(); | ||
|
||
/** | ||
* Gets a number of performed retries for related HttpRequest | ||
* | ||
* @return a number of performed retries | ||
*/ | ||
int getRetryCount(); | ||
} |
157 changes: 157 additions & 0 deletions
157
oauth2_http/java/com/google/auth/oauth2/GoogleAuthException.java
This file contains 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 |
---|---|---|
@@ -0,0 +1,157 @@ | ||
/* | ||
* Copyright 2022 Google LLC | ||
* | ||
* Redistribution and use in source and binary forms, with or without | ||
* modification, are permitted provided that the following conditions are | ||
* met: | ||
* | ||
* * Redistributions of source code must retain the above copyright | ||
* notice, this list of conditions and the following disclaimer. | ||
* * Redistributions in binary form must reproduce the above | ||
* copyright notice, this list of conditions and the following disclaimer | ||
* in the documentation and/or other materials provided with the | ||
* distribution. | ||
* | ||
* * Neither the name of Google LLC nor the names of its | ||
* contributors may be used to endorse or promote products derived from | ||
* this software without specific prior written permission. | ||
* | ||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
*/ | ||
|
||
package com.google.auth.oauth2; | ||
|
||
import com.google.api.client.http.HttpResponseException; | ||
import com.google.auth.Retryable; | ||
import java.io.IOException; | ||
|
||
/** | ||
* Base class for the standard Auth error response. It extends a default exception while keeping | ||
* Json response format | ||
*/ | ||
class GoogleAuthException extends IOException implements Retryable { | ||
|
||
private final boolean isRetryable; | ||
private final int retryCount; | ||
|
||
/** | ||
* Constructor with all parameters | ||
* | ||
* @param isRetryable A retry status for the related HTTP request | ||
* @param retryCount A number of retries performed for the related HTTP request | ||
* @param message The detail message (which is saved for later retrieval by the {@link | ||
* #getMessage()} method) | ||
* @param cause The cause (which is saved for later retrieval by the {@link #getCause()} method). | ||
* (A null value is permitted, and indicates that the cause is nonexistent or unknown.) | ||
*/ | ||
GoogleAuthException(boolean isRetryable, int retryCount, String message, Throwable cause) { | ||
super(message, cause); | ||
this.isRetryable = isRetryable; | ||
this.retryCount = retryCount; | ||
} | ||
|
||
/** | ||
* Constructor with message defaulted to the cause | ||
* | ||
* @param isRetryable A retry status for the related HTTP request | ||
* @param retryCount A number of retries performed for the related HTTP request | ||
* @param cause The cause (which is saved for later retrieval by the {@link #getCause()} method). | ||
* (A null value is permitted, and indicates that the cause is nonexistent or unknown.) If the | ||
* cause has retry information, it is going to be skipped in favor of the {@code retryCount} | ||
* parameter | ||
*/ | ||
GoogleAuthException(boolean isRetryable, int retryCount, Throwable cause) { | ||
super(cause); | ||
this.isRetryable = isRetryable; | ||
this.retryCount = retryCount; | ||
} | ||
|
||
/** | ||
* Constructor without explicit retry count. | ||
* | ||
* @param isRetryable A retry status for the related HTTP request | ||
* @param cause The cause (which is saved for later retrieval by the {@link #getCause()} method). | ||
* (A null value is permitted, and indicates that the cause is nonexistent or unknown.) | ||
*/ | ||
GoogleAuthException(boolean isRetryable, Throwable cause) { | ||
super(cause); | ||
this.isRetryable = isRetryable; | ||
this.retryCount = 0; | ||
} | ||
|
||
/** | ||
* Constructor without retry info | ||
* | ||
* @param cause The cause (which is saved for later retrieval by the {@link #getCause()} method). | ||
* (A null value is permitted, and indicates that the cause is nonexistent or unknown.) | ||
*/ | ||
GoogleAuthException(Throwable cause) { | ||
this(false, cause); | ||
} | ||
|
||
/** A default Constructor */ | ||
GoogleAuthException() { | ||
super(); | ||
this.isRetryable = false; | ||
this.retryCount = 0; | ||
} | ||
|
||
/** | ||
* Creates an instance of the exception based on {@link HttpResponseException} and a custom error | ||
* message. | ||
* | ||
* @see #createWithTokenEndpointResponseException(HttpResponseException, String) | ||
* @param responseException an instance of {@link HttpResponseException} | ||
* @param message The detail message (which is saved for later retrieval by the {@link | ||
* #getMessage()} method) | ||
* @return new instance of {@link GoogleAuthException} | ||
*/ | ||
static GoogleAuthException createWithTokenEndpointResponseException( | ||
HttpResponseException responseException, String message) { | ||
int responseStatus = responseException.getStatusCode(); | ||
boolean isRetryable = | ||
OAuth2Utils.TOKEN_ENDPOINT_RETRYABLE_STATUS_CODES.contains(responseStatus); | ||
int retryCount = responseException.getAttemptCount() - 1; | ||
|
||
if (message == null) { | ||
return new GoogleAuthException(isRetryable, retryCount, responseException); | ||
} else { | ||
return new GoogleAuthException(isRetryable, retryCount, message, responseException); | ||
} | ||
} | ||
|
||
/** | ||
* Creates an instance of the exception based on {@link HttpResponseException} returned by Google | ||
* token endpoint. It uses response status code information to populate the {@code #isRetryable} | ||
* property and a number of performed attempts to populate the {@code #retryCount} property | ||
* | ||
* @param responseException an instance of {@link HttpResponseException} | ||
* @return new instance of {@link GoogleAuthException} | ||
*/ | ||
static GoogleAuthException createWithTokenEndpointResponseException( | ||
HttpResponseException responseException) { | ||
return GoogleAuthException.createWithTokenEndpointResponseException(responseException, null); | ||
} | ||
|
||
/** Returns true if the error is retryable, false otherwise */ | ||
@Override | ||
public boolean isRetryable() { | ||
return isRetryable; | ||
} | ||
|
||
/** Returns number of reties performed for the related HTTP request */ | ||
@Override | ||
public int getRetryCount() { | ||
return retryCount; | ||
} | ||
} |
This file contains 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 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 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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
/** Retryable is an interface to identify retryable errors. */