Repository navigation
Add documentations for config to filter internal Druid-related messages from error response - #11755
Conversation
| |`druid.indexer.logs.kill.initialDelay`| Optional. Number of milliseconds after Overlord start when first auto kill is run. |random value less than 300000 (5 mins)| | ||
| |`druid.indexer.logs.kill.delay`|Optional. Number of milliseconds of delay between successive executions of auto kill run. |21600000 (6 hours)| | ||
|
|
||
| ### API Error Response |
There was a problem hiding this comment.
| ### API Error Response | |
| ### API error response |
no caps
|
|
||
| ### API Error Response | ||
|
|
||
| Druid API error responses can be configured to hide internal information (such as Druid class name, stack trace, thread name, servlet name, code, line/column number, and host/ip). |
There was a problem hiding this comment.
| Druid API error responses can be configured to hide internal information (such as Druid class name, stack trace, thread name, servlet name, code, line/column number, and host/ip). | |
| You can configure Druid API error responses to hide internal information like the Druid class name, stack trace, thread name, servlet name, code, line/column number, or host/ip. |
|
|
||
| |Property|Description|Default| | ||
| |--------|-----------|-------| | ||
| |`druid.server.http.showDetailedJettyErrors`|When set to true, any error resulted from the Jetty layer / Jetty filter will have `servlet`, `message`, `url`, `status` and (if exist) `cause` fields in the JSON response. When set to false, the JSON response will only contains `message`, `url`, and `status`. Note that the value of the fields remain unchanged.|true| |
There was a problem hiding this comment.
| |`druid.server.http.showDetailedJettyErrors`|When set to true, any error resulted from the Jetty layer / Jetty filter will have `servlet`, `message`, `url`, `status` and (if exist) `cause` fields in the JSON response. When set to false, the JSON response will only contains `message`, `url`, and `status`. Note that the value of the fields remain unchanged.|true| | |
| |`druid.server.http.showDetailedJettyErrors`|When set to true, any error from the Jetty layer / Jetty filter includes `servlet`, `message`, `url`, `status`, and `cause`, if it exists, fields in the JSON response. When set to false, the JSON response only includes `message`, `url`, and `status`. The field values remain unchanged.|true| |
| |Property|Description|Default| | ||
| |--------|-----------|-------| | ||
| |`druid.server.http.showDetailedJettyErrors`|When set to true, any error resulted from the Jetty layer / Jetty filter will have `servlet`, `message`, `url`, `status` and (if exist) `cause` fields in the JSON response. When set to false, the JSON response will only contains `message`, `url`, and `status`. Note that the value of the fields remain unchanged.|true| | ||
| |`druid.server.http.errorResponseTransformStrategy.strategy`|Error response transform strategy to use to transform error response produced within Druid services.|`none`| |
There was a problem hiding this comment.
| |`druid.server.http.errorResponseTransformStrategy.strategy`|Error response transform strategy to use to transform error response produced within Druid services.|`none`| | |
| |`druid.server.http.errorResponseTransformStrategy.strategy`|Error response transform strategy. The strategy controls how Druid transforms error responses from Druid services. When empty, Druid leaves error responses unchanged.|`none`| |
Is
|
|
||
| ##### Error response transform strategy | ||
|
|
||
| Error response transform strategy can be use to transform error response produced within Druid services. |
There was a problem hiding this comment.
| Error response transform strategy can be use to transform error response produced within Druid services. | |
| You can use an error response transform strategy to transform error responses from within Druid services to hide internal information. |
Suggest re-iterating why you want to use a transform strategy.
| Error response transform strategy can be use to transform error response produced within Druid services. | ||
| Currently, when error response transform strategy is used (not `none`), the error responses from the following Druid services will be transformed as follow: | ||
| - Any query API that failed in the router service. The fields `errorClass` and `host` will always be null while the field `errorMessage` will be transformed based on the set strategy. | ||
| - Any SQL qeury API (`/druid/v2/sql/` POST) that failed. The fields `errorClass` and `host` will always be null while the field `errorMessage` will be transformed based on the set strategy. |
There was a problem hiding this comment.
| - Any SQL qeury API (`/druid/v2/sql/` POST) that failed. The fields `errorClass` and `host` will always be null while the field `errorMessage` will be transformed based on the set strategy. | |
| - For Any SQL query API, for example `POST /druid/v2/sql/...` that fails, Druid sets the fields `errorClass` and `host` to null. Druid applies the transformation strategy to the `errorMessage` field. |
|
|
||
| ###### No error response transform strategy | ||
|
|
||
| In this mode, error response produced within Druid services are left unchanged and returned to the API client as is. |
There was a problem hiding this comment.
| In this mode, error response produced within Druid services are left unchanged and returned to the API client as is. | |
| In this mode, Druid leaves error responses from underlying services unchanged and returns the unchanged errors to the API client. |
| ###### No error response transform strategy | ||
|
|
||
| In this mode, error response produced within Druid services are left unchanged and returned to the API client as is. | ||
| This is the default Druid error response mode. Enable this strategy explicitly by setting druid.server.http.errorResponseTransformStrategy.strategy to none. |
There was a problem hiding this comment.
| This is the default Druid error response mode. Enable this strategy explicitly by setting druid.server.http.errorResponseTransformStrategy.strategy to none. | |
| This is the default Druid error response mode. To explicitly enable this strategy, set `druid.server.http.errorResponseTransformStrategy.strategy` to "none". |
| In this mode, the error response produced within Druid services will be validated against a list of regular expressions. | ||
| The error message of the response will only be returned to the client if it matches any of the regular expressions configured. | ||
| This strategy can be enabled by setting druid.server.http.errorResponseTransformStrategy.strategy=allowedRegex. | ||
|
|
There was a problem hiding this comment.
| In this mode, the error response produced within Druid services will be validated against a list of regular expressions. | |
| The error message of the response will only be returned to the client if it matches any of the regular expressions configured. | |
| This strategy can be enabled by setting druid.server.http.errorResponseTransformStrategy.strategy=allowedRegex. | |
| In this mode, Druid validates the error responses from underlying services will against a list of regular expressions. Only error messages that match a configured regular expression are returned. To enable this strategy, set `druid.server.http.errorResponseTransformStrategy.strategy` to `allowedRegex`. | |
There was a problem hiding this comment.
nit on suggested rewrite (which otherwise lgtm):
...Druid validates the error responses from underlying services will against a list of regular expressions...
should instead be
...Druid validates the error responses from underlying services against a list of regular expressions...
|
|
||
| |Property|Description|Default| | ||
| |--------|-----------|-------| | ||
| |`druid.server.http.errorResponseTransformStrategy.allowedRegex`|The list of regular expressions used to check against the error message. If the error message match any of the regular expressions, then it will be included in the response unchanged. If the error message does not match any of the regular expressions then the error message will either be null or replaced with a default message depedning on the type of underlying Exception. |`[]`| |
There was a problem hiding this comment.
| |`druid.server.http.errorResponseTransformStrategy.allowedRegex`|The list of regular expressions used to check against the error message. If the error message match any of the regular expressions, then it will be included in the response unchanged. If the error message does not match any of the regular expressions then the error message will either be null or replaced with a default message depedning on the type of underlying Exception. |`[]`| | |
| |`druid.server.http.errorResponseTransformStrategy.allowedRegex`|The list of regular expressions Druid uses to validate error messages. If the error message matches any of the regular expressions, then Druid includes it in the response unchanged. If the error message does not match any of the regular expressions, Druid replaces the error message with null or with a default message depending on the type of underlying Exception. |`[]`| |
This could use an example.
|
|
||
| |Property|Description|Default| | ||
| |--------|-----------|-------| | ||
| |`druid.server.http.showDetailedJettyErrors`|When set to true, any error from the Jetty layer / Jetty filter includes `servlet`, `message`, `url`, `status`, and `cause`, if it exists, fields in the JSON response. When set to false, the JSON response only includes `message`, `url`, and `status`. The field values remain unchanged.|true| |
There was a problem hiding this comment.
| |`druid.server.http.showDetailedJettyErrors`|When set to true, any error from the Jetty layer / Jetty filter includes `servlet`, `message`, `url`, `status`, and `cause`, if it exists, fields in the JSON response. When set to false, the JSON response only includes `message`, `url`, and `status`. The field values remain unchanged.|true| | |
| |`druid.server.http.showDetailedJettyErrors`|When set to true, any error from the Jetty layer / Jetty filter includes the following fields in the JSON response: `servlet`, `message`, `url`, `status`, and `cause`, if it exists. When set to false, the JSON response only includes `message`, `url`, and `status`. The field values remain unchanged.|true| |
sorry the way I edited this before was a little confusing.
| You can use an error response transform strategy to transform error responses from within Druid services to hide internal information. | ||
| When you specify an error response transform strategy other than `none`, Druid transforms the error responses from Druid services as follows: | ||
| - For any query API that fails in the Router service, Druid sets the fields `errorClass` and `host` to null. Druid applies the transformation strategy to the `errorMessage` field. | ||
| - For Any SQL query API, for example `POST /druid/v2/sql/...` that fails, Druid sets the fields `errorClass` and `host` to null. Druid applies the transformation strategy to the `errorMessage` field. |
There was a problem hiding this comment.
| - For Any SQL query API, for example `POST /druid/v2/sql/...` that fails, Druid sets the fields `errorClass` and `host` to null. Druid applies the transformation strategy to the `errorMessage` field. | |
| - For Any SQL query API that fails, for example `POST /druid/v2/sql/...`, Druid sets the fields `errorClass` and `host` to null. Druid applies the transformation strategy to the `errorMessage` field. |
sorry another minor edit
There was a problem hiding this comment.
btw For Any should be For any?
techdocsmith
left a comment
There was a problem hiding this comment.
@maytasm thank you for the great example! It really helps. I tweaked some of my previous suggestions and made a couple of suggestions for the wording of the example. Otherwise LGTM.
| |--------|-----------|-------| | ||
| |`druid.server.http.errorResponseTransformStrategy.allowedRegex`|The list of regular expressions Druid uses to validate error messages. If the error message matches any of the regular expressions, then Druid includes it in the response unchanged. If the error message does not match any of the regular expressions, Druid replaces the error message with null or with a default message depending on the type of underlying Exception. |`[]`| | ||
|
|
||
| For example, if the original query error response is: |
There was a problem hiding this comment.
| For example, if the original query error response is: | |
| For example, consider the following error response: |
| ``` | ||
| {"error":"Plan validation failed","errorMessage":"org.apache.calcite.runtime.CalciteContextException: From line 1, column 15 to line 1, column 38: Object 'nonexistent-datasource' not found","errorClass":"org.apache.calcite.tools.ValidationException","host":null} | ||
| ``` | ||
| if `druid.server.http.errorResponseTransformStrategy.allowedRegex` is set to `[]` then the query error response will be transformed to |
There was a problem hiding this comment.
| if `druid.server.http.errorResponseTransformStrategy.allowedRegex` is set to `[]` then the query error response will be transformed to | |
| If `druid.server.http.errorResponseTransformStrategy.allowedRegex` is set to `[]`, Druid transforms the query error response to the following: |
| ``` | ||
| {"error":"Plan validation failed","errorMessage":null,"errorClass":null,"host":null} | ||
| ``` | ||
| however if `druid.server.http.errorResponseTransformStrategy.allowedRegex` is set to `[".*CalciteContextException.*"]` then the query error response will be transformed to |
There was a problem hiding this comment.
| however if `druid.server.http.errorResponseTransformStrategy.allowedRegex` is set to `[".*CalciteContextException.*"]` then the query error response will be transformed to | |
| On the other hand, if `druid.server.http.errorResponseTransformStrategy.allowedRegex` is set to `[".*CalciteContextException.*"]` then Druid transforms the query error response to the following: |
…es from error response (apache#11755) * add doc * add doc * address comments * fix typo * address comments
Add documentations for #11711
This PR has: