|
@@ -39,13 +39,14 @@ import org.elasticsearch.action.update.UpdateRequest;
|
|
|
import org.elasticsearch.client.Requests;
|
|
|
import org.elasticsearch.common.bytes.BytesReference;
|
|
|
import org.elasticsearch.common.settings.Settings;
|
|
|
+import org.elasticsearch.common.xcontent.XContentBuilder;
|
|
|
import org.elasticsearch.common.xcontent.XContentType;
|
|
|
import org.elasticsearch.plugins.Plugin;
|
|
|
import org.elasticsearch.test.ESIntegTestCase;
|
|
|
|
|
|
-import java.util.Arrays;
|
|
|
import java.util.Collection;
|
|
|
import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
import java.util.Map;
|
|
|
|
|
|
import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
|
|
@@ -68,7 +69,7 @@ public class IngestClientIT extends ESIntegTestCase {
|
|
|
|
|
|
@Override
|
|
|
protected Collection<Class<? extends Plugin>> nodePlugins() {
|
|
|
- return Arrays.asList(IngestTestPlugin.class);
|
|
|
+ return List.of(ExtendedIngestTestPlugin.class);
|
|
|
}
|
|
|
|
|
|
public void testSimulate() throws Exception {
|
|
@@ -293,4 +294,157 @@ public class IngestClientIT extends ESIntegTestCase {
|
|
|
assertFalse(item.isFailed());
|
|
|
assertEquals("auto-generated", item.getResponse().getId());
|
|
|
}
|
|
|
+
|
|
|
+ public void testPipelineOriginHeader() throws Exception {
|
|
|
+ {
|
|
|
+ XContentBuilder source = jsonBuilder().startObject();
|
|
|
+ {
|
|
|
+ source.startArray("processors");
|
|
|
+ source.startObject();
|
|
|
+ {
|
|
|
+ source.startObject("pipeline");
|
|
|
+ source.field("name", "2");
|
|
|
+ source.endObject();
|
|
|
+ }
|
|
|
+ source.endObject();
|
|
|
+ source.endArray();
|
|
|
+ }
|
|
|
+ source.endObject();
|
|
|
+ PutPipelineRequest putPipelineRequest =
|
|
|
+ new PutPipelineRequest("1", BytesReference.bytes(source), XContentType.JSON);
|
|
|
+ client().admin().cluster().putPipeline(putPipelineRequest).get();
|
|
|
+ }
|
|
|
+ {
|
|
|
+ XContentBuilder source = jsonBuilder().startObject();
|
|
|
+ {
|
|
|
+ source.startArray("processors");
|
|
|
+ source.startObject();
|
|
|
+ {
|
|
|
+ source.startObject("pipeline");
|
|
|
+ source.field("name", "3");
|
|
|
+ source.endObject();
|
|
|
+ }
|
|
|
+ source.endObject();
|
|
|
+ source.endArray();
|
|
|
+ }
|
|
|
+ source.endObject();
|
|
|
+ PutPipelineRequest putPipelineRequest =
|
|
|
+ new PutPipelineRequest("2", BytesReference.bytes(source), XContentType.JSON);
|
|
|
+ client().admin().cluster().putPipeline(putPipelineRequest).get();
|
|
|
+ }
|
|
|
+ {
|
|
|
+ XContentBuilder source = jsonBuilder().startObject();
|
|
|
+ {
|
|
|
+ source.startArray("processors");
|
|
|
+ source.startObject();
|
|
|
+ {
|
|
|
+ source.startObject("fail");
|
|
|
+ source.endObject();
|
|
|
+ }
|
|
|
+ source.endObject();
|
|
|
+ source.endArray();
|
|
|
+ }
|
|
|
+ source.endObject();
|
|
|
+ PutPipelineRequest putPipelineRequest =
|
|
|
+ new PutPipelineRequest("3", BytesReference.bytes(source), XContentType.JSON);
|
|
|
+ client().admin().cluster().putPipeline(putPipelineRequest).get();
|
|
|
+ }
|
|
|
+
|
|
|
+ Exception e = expectThrows(Exception.class, () -> {
|
|
|
+ IndexRequest indexRequest = new IndexRequest("test");
|
|
|
+ indexRequest.source("{}", XContentType.JSON);
|
|
|
+ indexRequest.setPipeline("1");
|
|
|
+ client().index(indexRequest).get();
|
|
|
+ });
|
|
|
+ IngestProcessorException ingestException = (IngestProcessorException) e.getCause();
|
|
|
+ assertThat(ingestException.getHeader("processor_type"), equalTo(List.of("fail")));
|
|
|
+ assertThat(ingestException.getHeader("pipeline_origin"), equalTo(List.of("3", "2", "1")));
|
|
|
+ }
|
|
|
+
|
|
|
+ public void testPipelineProcessorOnFailure() throws Exception {
|
|
|
+ {
|
|
|
+ XContentBuilder source = jsonBuilder().startObject();
|
|
|
+ {
|
|
|
+ source.startArray("processors");
|
|
|
+ source.startObject();
|
|
|
+ {
|
|
|
+ source.startObject("pipeline");
|
|
|
+ source.field("name", "2");
|
|
|
+ source.endObject();
|
|
|
+ }
|
|
|
+ source.endObject();
|
|
|
+ source.endArray();
|
|
|
+ }
|
|
|
+ {
|
|
|
+ source.startArray("on_failure");
|
|
|
+ source.startObject();
|
|
|
+ {
|
|
|
+ source.startObject("onfailure_processor");
|
|
|
+ source.endObject();
|
|
|
+ }
|
|
|
+ source.endObject();
|
|
|
+ source.endArray();
|
|
|
+ }
|
|
|
+ source.endObject();
|
|
|
+ PutPipelineRequest putPipelineRequest =
|
|
|
+ new PutPipelineRequest("1", BytesReference.bytes(source), XContentType.JSON);
|
|
|
+ client().admin().cluster().putPipeline(putPipelineRequest).get();
|
|
|
+ }
|
|
|
+ {
|
|
|
+ XContentBuilder source = jsonBuilder().startObject();
|
|
|
+ {
|
|
|
+ source.startArray("processors");
|
|
|
+ source.startObject();
|
|
|
+ {
|
|
|
+ source.startObject("pipeline");
|
|
|
+ source.field("name", "3");
|
|
|
+ source.endObject();
|
|
|
+ }
|
|
|
+ source.endObject();
|
|
|
+ source.endArray();
|
|
|
+ }
|
|
|
+ source.endObject();
|
|
|
+ PutPipelineRequest putPipelineRequest =
|
|
|
+ new PutPipelineRequest("2", BytesReference.bytes(source), XContentType.JSON);
|
|
|
+ client().admin().cluster().putPipeline(putPipelineRequest).get();
|
|
|
+ }
|
|
|
+ {
|
|
|
+ XContentBuilder source = jsonBuilder().startObject();
|
|
|
+ {
|
|
|
+ source.startArray("processors");
|
|
|
+ source.startObject();
|
|
|
+ {
|
|
|
+ source.startObject("fail");
|
|
|
+ source.endObject();
|
|
|
+ }
|
|
|
+ source.endObject();
|
|
|
+ source.endArray();
|
|
|
+ }
|
|
|
+ source.endObject();
|
|
|
+ PutPipelineRequest putPipelineRequest =
|
|
|
+ new PutPipelineRequest("3", BytesReference.bytes(source), XContentType.JSON);
|
|
|
+ client().admin().cluster().putPipeline(putPipelineRequest).get();
|
|
|
+ }
|
|
|
+
|
|
|
+ client().prepareIndex("test").setId("1").setSource("{}", XContentType.JSON).setPipeline("1").get();
|
|
|
+ Map<String, Object> inserted = client().prepareGet("test", "1")
|
|
|
+ .get().getSourceAsMap();
|
|
|
+ assertThat(inserted.get("readme"), equalTo("pipeline with id [3] is a bad pipeline"));
|
|
|
+ }
|
|
|
+
|
|
|
+ public static class ExtendedIngestTestPlugin extends IngestTestPlugin {
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map<String, Processor.Factory> getProcessors(Processor.Parameters parameters) {
|
|
|
+ Map<String, Processor.Factory> factories = new HashMap<>(super.getProcessors(parameters));
|
|
|
+ factories.put(PipelineProcessor.TYPE, new PipelineProcessor.Factory(parameters.ingestService));
|
|
|
+ factories.put("fail", (processorFactories, tag, config) -> new TestProcessor(tag, "fail", new RuntimeException()));
|
|
|
+ factories.put("onfailure_processor", (processorFactories, tag, config) -> new TestProcessor(tag, "fail", document -> {
|
|
|
+ String onFailurePipeline = document.getFieldValue("_ingest.on_failure_pipeline", String.class);
|
|
|
+ document.setFieldValue("readme", "pipeline with id [" + onFailurePipeline + "] is a bad pipeline");
|
|
|
+ }));
|
|
|
+ return factories;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|