-
Notifications
You must be signed in to change notification settings - Fork 24.9k
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
[Ingest Node Pipelines] More detailed _simulate response #56004
Comments
Pinging @elastic/es-core-features (:Core/Features/Ingest) |
If a conditional is added to a processor, and that processor fails, and that processor has an on_failure handler, the full trace of all of the executed processors may not be displayed in simulate verbose. The information is correct, but misses displaying some of the steps used to get there. This happens because a processor that is conditional processor is a wrapper around the real processor and a processor with an on_failure handler is also a wrapper around the processor(s). When decorating for simulation we treat compound processor specially, but if a compound processor is wrapped by a conditional processor that compound processor's processors can be missed for decoration resulting in the missing displayed steps. The fix to this is to treat the conditional processor specially and explicitly seperate it from the processor it is wrapping. This requires us to keep track of 2 processors a possible conditional processor and the actual processor it may be wrapping. related: #56004
If a conditional is added to a processor, and that processor fails, and that processor has an on_failure handler, the full trace of all of the executed processors may not be displayed in simulate verbose. The information is correct, but misses displaying some of the steps used to get there. This happens because a processor that is conditional processor is a wrapper around the real processor and a processor with an on_failure handler is also a wrapper around the processor(s). When decorating for simulation we treat compound processor specially, but if a compound processor is wrapped by a conditional processor that compound processor's processors can be missed for decoration resulting in the missing displayed steps. The fix to this is to treat the conditional processor specially and explicitly seperate it from the processor it is wrapping. This requires us to keep track of 2 processors a possible conditional processor and the actual processor it may be wrapping. related: elastic#56004
#56635) If a conditional is added to a processor, and that processor fails, and that processor has an on_failure handler, the full trace of all of the executed processors may not be displayed in simulate verbose. The information is correct, but misses displaying some of the steps used to get there. This happens because a processor that is conditional processor is a wrapper around the real processor and a processor with an on_failure handler is also a wrapper around the processor(s). When decorating for simulation we treat compound processor specially, but if a compound processor is wrapped by a conditional processor that compound processor's processors can be missed for decoration resulting in the missing displayed steps. The fix to this is to treat the conditional processor specially and explicitly seperate it from the processor it is wrapping. This requires us to keep track of 2 processors a possible conditional processor and the actual processor it may be wrapping. related: #56004
Pinging @elastic/es-ui (:ES-UI) |
#56478 fixed a bug that may have led to missing information from the verbose output. With the bug fixed and description displayed, we still need:
I would like to propose to introduce to the output:
For example, for the given input (success):
the verbose output is:
For the given input (skipped):
the output:
input (error_ignore):
output:
input (error)
output:
input (dropped)
output:
There is a bit of an oddity with the Here is more verbose example:
output:
|
@jakelandis This looks really great! With regards to your new additions:
This sounds fantastic and will be vital for the kind of debugging experience we want to build
This is also an excellent addition giving us a way to give the user good feedback on why something was skipped.
I am not sure this is as useful for our use case. We will still want to be able to tie this processor result back to the submitted pipeline instance. This means we will also have the processor type available. Couple initial follow up questions from my side:
|
correct, same structure with some additional elements.
There is a current the oddity (as mentioned above) such that the pipeline processor itself (the one that forks out to a different pipeline) is not part of the output... I can look into that further but can't commit to that quite yet. Otherwise, yes |
#60433 has been submitted which I believe addresses these concerns. Also, I was able to get the pipeline processor sorted out so it shouldn't be special (as mentioned above). |
This commit enhances the verbose output for the `_ingest/pipeline/_simulate?verbose` api. Specifically this adds the following: * the pipeline processor is now included in the output * the conditional (if) and result is now included in the output iff it was defined * a status field is always displayed. the possible values of status are * `success` - if the processor ran with out errors * `error` - if the processor ran but threw an error that was not ingored * `error_ignored` - if the processor ran but threw an error that was ingored * `skipped` - if the process did not run (currently only possible if the if condition evaluates to false) * `dropped` - if the the `drop` processor ran and dropped the document * a `processor_type` field for the type of processor (e.g. set, rename, etc.) * throw a better error if trying to simulate with a pipeline that does not exist closes #56004
This commit enhances the verbose output for the `_ingest/pipeline/_simulate?verbose` api. Specifically this adds the following: * the pipeline processor is now included in the output * the conditional (if) and result is now included in the output iff it was defined * a status field is always displayed. the possible values of status are * `success` - if the processor ran with out errors * `error` - if the processor ran but threw an error that was not ingored * `error_ignored` - if the processor ran but threw an error that was ingored * `skipped` - if the process did not run (currently only possible if the if condition evaluates to false) * `dropped` - if the the `drop` processor ran and dropped the document * a `processor_type` field for the type of processor (e.g. set, rename, etc.) * throw a better error if trying to simulate with a pipeline that does not exist closes elastic#56004 # Conflicts: # docs/reference/ingest/apis/simulate-pipeline.asciidoc
This commit enhances the verbose output for the `_ingest/pipeline/_simulate?verbose` api. Specifically this adds the following: * the pipeline processor is now included in the output * the conditional (if) and result is now included in the output iff it was defined * a status field is always displayed. the possible values of status are * `success` - if the processor ran with out errors * `error` - if the processor ran but threw an error that was not ingored * `error_ignored` - if the processor ran but threw an error that was ingored * `skipped` - if the process did not run (currently only possible if the if condition evaluates to false) * `dropped` - if the the `drop` processor ran and dropped the document * a `processor_type` field for the type of processor (e.g. set, rename, etc.) * throw a better error if trying to simulate with a pipeline that does not exist closes #56004
Describe the feature:
In Kibana, new UI was built to support management of ingest node pipelines (elastic/kibana#62321). The UI also gives users a way of simulating the pipeline while creating or editing it.
The simulate UI we are envisioning will provide users with detailed information about the path each document has traveled through the simulated pipeline. Including the following information:
if
). This will enable ✅ and ❌ indications at each processor. Critically, it would be important to know why something went wrong.On ES
8.0.0
snapshot this is an example request-response pair:Request
Response
Given the above, we do not have a way of mapping these results back to the submitted pipeline to achieve 1 and 2, only a less detailed version of 3. (Where does
THIS SHOULD BE THERE FROM FAILURE
actually come from?)One solution is that the response would be a structural mirror of the pipeline submitted to simulate. This would be simplest for consumers to map the result tree back to the submitted tree, each path would map back to a specific processor.
Alternatively, a flat structure could still work if we use
tag
as a placeholder for a serialised path which points to the processor in the submitted pipeline (e.g.,0.on_failure.1
). Howevertag
will still be exposed to users as a field they can enter values into (so we would be hijacking it for the call to_simulate
). See this issue (#56000) concerning the multiple concerns of tag.Assistance here would be greatly appreciated.
CC @jakelandis @talevy @cjcenizal
The text was updated successfully, but these errors were encountered: