-
Notifications
You must be signed in to change notification settings - Fork 913
GODRIVER-3086 Add ErrorCodes to ServerError API #1894
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
Conversation
API Change Report./v2/mongocompatible changesBulkWriteException.ErrorCodes: added |
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.
Thank you for this! :)
mongo/errors.go
Outdated
@@ -252,9 +252,23 @@ type ServerError interface { | |||
// HasErrorCodeWithMessage returns true if any of the contained errors have the specified code and message. | |||
HasErrorCodeWithMessage(int, string) bool | |||
|
|||
// ErrorCodes returns a deduplicated list of error codes returned by the | |||
// server. |
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.
It’d be good to mention if there’s a defined sort order.
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.
@prestonvasquez Thoughts?
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.
Also, I suggest:
ErrorCodes returns all error codes (unsorted) in the server’s response. This includes nested errors (e.g., write concern errors) as well as the top-level error code.
return hasErrorCode(e, code) | ||
} | ||
|
||
// ErrorCodes returns a list of error codes returned by the server. |
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.
It’d be good to mention if there’s a defined sort order.
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.
ErrorCodes returns all error codes (unsorted) in the server’s response. This includes nested errors (e.g., write concern errors) as well as the top-level error code.
mongo/errors.go
Outdated
} | ||
return false | ||
|
||
// Deduplicate error codes. |
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.
Not that it affects us :), but: I see the same logic here and in WriteException’s method. This seems like the sort of thing you’d deduplicate.
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.
Looks good! 👍
mongo/errors.go
Outdated
@@ -252,9 +252,23 @@ type ServerError interface { | |||
// HasErrorCodeWithMessage returns true if any of the contained errors have the specified code and message. | |||
HasErrorCodeWithMessage(int, string) bool | |||
|
|||
// ErrorCodes returns a deduplicated list of error codes returned by the |
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.
The latest revision does not deduplicate error codes.
// ErrorCodes returns a deduplicated list of error codes returned by the | |
// ErrorCodes returns a list of error codes returned by the |
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.
I’ve made a few suggestions on verbiage; see what you think.
Also: are there any cases where it is, in fact, correct just to check HasErrorCode() without also checking for other, unexpected error codes? If not, should HasErrorCode()’s documentation also be updated to discourage its use?
Basically ISTM that anyplace an application calls HasErrorCode(123)
should instead be a check of whether ErrorCodes()’s return contains solely 123. Is that reasonable?
mongo/errors.go
Outdated
@@ -252,9 +252,23 @@ type ServerError interface { | |||
// HasErrorCodeWithMessage returns true if any of the contained errors have the specified code and message. | |||
HasErrorCodeWithMessage(int, string) bool | |||
|
|||
// ErrorCodes returns a deduplicated list of error codes returned by the | |||
// server. |
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.
@prestonvasquez Thoughts?
mongo/errors.go
Outdated
@@ -252,9 +252,23 @@ type ServerError interface { | |||
// HasErrorCodeWithMessage returns true if any of the contained errors have the specified code and message. | |||
HasErrorCodeWithMessage(int, string) bool | |||
|
|||
// ErrorCodes returns a deduplicated list of error codes returned by the | |||
// server. |
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.
Also, I suggest:
ErrorCodes returns all error codes (unsorted) in the server’s response. This includes nested errors (e.g., write concern errors) as well as the top-level error code.
return hasErrorCode(e, code) | ||
} | ||
|
||
// ErrorCodes returns a list of error codes returned by the server. |
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.
ErrorCodes returns all error codes (unsorted) in the server’s response. This includes nested errors (e.g., write concern errors) as well as the top-level error code.
I agree with the changes to the interface documentation but don't think we need to be more specific on the methods.
HasErrorCode's logic has not changed and so we should maintain the current intentions and usage guidelines for our users. The current documentation correctly expresses the purpose of the method for each error type. |
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.
LGTM. Thanks!
@FGasper I believe there are plenty of cases where |
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.
Looks good! 👍
I’ve moved the |
GODRIVER-3086
Summary
Extend the
ServerError
interface to includeErrorCodes
which will return a list of deduplicated error codes returned by the server during the lifetime of operation execution.Background & Motivation
The Go Driver provides a way to check if a ServerError has a specific error code, but no way to determine all error codes that occurred during the operation.