-
Notifications
You must be signed in to change notification settings - Fork 935
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
[MD] Refactor data source server side error handling #2661
[MD] Refactor data source server side error handling #2661
Conversation
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.
We cast all search error against data source to 400 bad request, while maintaining the original error message from OS.
This worries me a lil because it is the root of a similar issue we face in other places in Dashboards where we incorrectly assign the wrong error code for a response. 4xx errors are auth errors.
- Is there really no way to assign the right error response code for an error?
- If not, why did you choose to use a 4xx error instead of a generic 5xx error?
src/plugins/data/server/search/opensearch_search/opensearch_search_strategy.ts
Outdated
Show resolved
Hide resolved
Signed-off-by: Su <[email protected]>
Signed-off-by: Su <[email protected]>
5c57559
to
6734e89
Compare
src/plugins/data/server/search/opensearch_search/opensearch_search_strategy.ts
Outdated
Show resolved
Hide resolved
Signed-off-by: Su <[email protected]>
@ashwin-pc , thanks for the comments, really helpful. I re-worked on this PR. basically doing a refactor of existing error handling logic in data source feature. Now it will keep original status code. But for 401, we choose to cast to 400, due to the limitation of security dashboards plugin. For 5xx error, we cast to 400. Because it doesn't make sense to use 5xx, e.g user's data source domain is down, while trying to connect to it, we get 5xx. But there's nothing wrong with local OSD. Security review also mentioned it's not good to return 5xx for such cases |
Signed-off-by: Su <[email protected]>
@zhongnansu Thanks for that explanation! That logic makes sense to me. |
Signed-off-by: Su <[email protected]>
const isDataSourceConfigError = (error: any) => { | ||
return error.constructor.name === 'DataSourceConfigError' && error.statusCode === 400; | ||
const isDataSourceError = (error: any) => { | ||
return error.constructor.name === 'DataSourceError' && error.statusCode === 400; |
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.
can we use instanceof
instead of error.constructor.name
?
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.
importing DataSourceError
from plugin module to here(core module) doesn't sound like a good practice. But anyway, I did some refactor to move data source error response logic from router.ts
to resolve_index.ts
(/internal/index-pattern-manage/resolve-index).
I checked the codebase, only the route handler defined resolve_index is missing error handling. All other internal/xxx/xxx
API has err handling. E.g internal/search/
, /internal/_msearch
, /internal/index-pattern-manage/preview-script
```
catch (err) {
return res.customError({
statusCode: err.statusCode,
body: {
message: err.message,
attributes: {
error: err.body.error,
},
},
});
```
@zengyan-amazon could you review again
Signed-off-by: Su <[email protected]>
c820a1e
to
0d8f5e3
Compare
Signed-off-by: Su <[email protected]>
- Rename DataSourceConfigError to DataSourceError - Add helper createDataSourceError() to create data source error from, and replace usage of new DataSourceError(e) with createDataSourceError(e) - import createDataSourceError() from data source plugin setup interface, refactor to move data source error response logic from router.ts to resolve_index.ts. Signed-off-by: Su <[email protected]> (cherry picked from commit 9a0bb30)
- Rename DataSourceConfigError to DataSourceError - Add helper createDataSourceError() to create data source error from, and replace usage of new DataSourceError(e) with createDataSourceError(e) - import createDataSourceError() from data source plugin setup interface, refactor to move data source error response logic from router.ts to resolve_index.ts. Signed-off-by: Su <[email protected]> (cherry picked from commit 9a0bb30) Co-authored-by: Zhongnan Su <[email protected]>
…ect#2661) - Rename DataSourceConfigError to DataSourceError - Add helper createDataSourceError() to create data source error from, and replace usage of new DataSourceError(e) with createDataSourceError(e) - import createDataSourceError() from data source plugin setup interface, refactor to move data source error response logic from router.ts to resolve_index.ts. Signed-off-by: Su <[email protected]> Signed-off-by: Ajay Gupta <[email protected]>
…ect#2661) - Rename DataSourceConfigError to DataSourceError - Add helper createDataSourceError() to create data source error from, and replace usage of new DataSourceError(e) with createDataSourceError(e) - import createDataSourceError() from data source plugin setup interface, refactor to move data source error response logic from router.ts to resolve_index.ts. Signed-off-by: Su <[email protected]> Signed-off-by: Sergey V. Osipov <[email protected]>
…ect#2661) - Rename DataSourceConfigError to DataSourceError - Add helper createDataSourceError() to create data source error from, and replace usage of new DataSourceError(e) with createDataSourceError(e) - import createDataSourceError() from data source plugin setup interface, refactor to move data source error response logic from router.ts to resolve_index.ts. Signed-off-by: Su <[email protected]> Signed-off-by: Arpit Bandejiya <[email protected]>
Signed-off-by: Su [email protected]
Description
Refactor data source server side error handling
DataSourceConfigError
toDataSourceError
createDataSourceError()
to create data source error from:new DataSourceError(e)
withcreateDataSourceError(e)
createDataSourceError()
todata
plugin, have to import from data source plugin setup interface, otherwise, some other UTs in other modules failrouter.ts
toresolve_index.ts
. I check all our codebase, only the route handler defined resolve_index is missing error handling. All otherinternal/xxx/xxx
API has err handling. E.ginternal/search/
,/internal/_msearch
,/internal/index-pattern-manage/preview-script
Error statusCode casting logic
Issues Resolved
#2591
Check List
yarn test:jest
yarn test:jest_integration
yarn test:ftr