From b9cdd5b5b47673cd240e871ec8967a34994d7aa6 Mon Sep 17 00:00:00 2001 From: Mashhur Date: Mon, 14 Jul 2025 09:11:48 -0700 Subject: [PATCH 01/22] Testing painless processors extension. --- libs/logstash-bridge/build.gradle | 5 ++- .../src/main/java/module-info.java | 1 + .../logstashbridge/StableBridgeAPI.java | 2 +- .../ingest/ProcessorBridge.java | 3 +- .../script/ScriptServiceBridge.java | 40 +++++++++++++++++-- 5 files changed, 45 insertions(+), 6 deletions(-) diff --git a/libs/logstash-bridge/build.gradle b/libs/logstash-bridge/build.gradle index 117bed1e98105..7ea74a9280640 100644 --- a/libs/logstash-bridge/build.gradle +++ b/libs/logstash-bridge/build.gradle @@ -17,7 +17,10 @@ dependencies { compileOnly project(':modules:lang-painless:spi') compileOnly project(':modules:lang-mustache') compileOnly project(':modules:ingest-common') -// compileOnly project(':modules:ingest-geoip') + compileOnly project(':modules:ingest-geoip') + //compileOnly project(':x-pack:plugin:wildcard') + //compileOnly project(':x-pack:plugin:mapper-constant-keyword') + //compileOnly project(':x-pack:plugin:spatial') } tasks.named('forbiddenApisMain').configure { diff --git a/libs/logstash-bridge/src/main/java/module-info.java b/libs/logstash-bridge/src/main/java/module-info.java index ca345b8c6c4f3..abcd69115515b 100644 --- a/libs/logstash-bridge/src/main/java/module-info.java +++ b/libs/logstash-bridge/src/main/java/module-info.java @@ -16,6 +16,7 @@ requires org.elasticsearch.painless.spi; requires org.elasticsearch.mustache; requires org.elasticsearch.xcontent; + requires org.elasticsearch.ingest.common; exports org.elasticsearch.logstashbridge; exports org.elasticsearch.logstashbridge.common; diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/StableBridgeAPI.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/StableBridgeAPI.java index 4963adc889147..d4cd946d74799 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/StableBridgeAPI.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/StableBridgeAPI.java @@ -16,7 +16,7 @@ /** * A {@code StableBridgeAPI} is the stable bridge to an Elasticsearch API, and can produce instances * from the actual API that they mirror. As part of the LogstashBridge project, these classes are relied - * upon by the "Elastic Integration Filter Plugin" for Logstash and their external shapes mut not change + * upon by the "Elastic Integration Filter Plugin" for Logstash and their external shapes must not change * without coordination with the maintainers of that project. * * @param the actual type of the Elasticsearch API being mirrored diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/ProcessorBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/ProcessorBridge.java index ecf9ab44f55b8..72a7e45c6ea94 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/ProcessorBridge.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/ProcessorBridge.java @@ -8,6 +8,7 @@ */ package org.elasticsearch.logstashbridge.ingest; +import org.elasticsearch.cluster.metadata.ProjectId; import org.elasticsearch.core.FixForMultiProject; import org.elasticsearch.core.TimeValue; import org.elasticsearch.ingest.IngestService; @@ -141,7 +142,7 @@ public ProcessorBridge create( final Map config ) throws Exception { return ProcessorBridge.wrap( - this.delegate.create(StableBridgeAPI.unwrap(registry), processorTag, description, config, null) + this.delegate.create(StableBridgeAPI.unwrap(registry), processorTag, description, config, ProjectId.DEFAULT) ); } diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/script/ScriptServiceBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/script/ScriptServiceBridge.java index 1f7a19e333308..0d06966d6e72f 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/script/ScriptServiceBridge.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/script/ScriptServiceBridge.java @@ -9,11 +9,14 @@ package org.elasticsearch.logstashbridge.script; import org.elasticsearch.common.settings.Settings; +import org.elasticsearch.ingest.common.ProcessorsWhitelistExtension; import org.elasticsearch.logstashbridge.StableBridgeAPI; import org.elasticsearch.logstashbridge.common.SettingsBridge; import org.elasticsearch.painless.PainlessPlugin; import org.elasticsearch.painless.PainlessScriptEngine; +import org.elasticsearch.painless.spi.PainlessExtension; import org.elasticsearch.painless.spi.Whitelist; +import org.elasticsearch.plugins.ExtensiblePlugin; import org.elasticsearch.script.IngestConditionalScript; import org.elasticsearch.script.IngestScript; import org.elasticsearch.script.ScriptContext; @@ -24,8 +27,10 @@ import java.io.Closeable; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.function.LongSupplier; public class ScriptServiceBridge extends StableBridgeAPI.Proxy implements Closeable { @@ -33,7 +38,7 @@ public ScriptServiceBridge wrap(final ScriptService delegate) { return new ScriptServiceBridge(delegate); } - public ScriptServiceBridge(final SettingsBridge settingsBridge, final LongSupplier timeProvider) { + public ScriptServiceBridge(final SettingsBridge settingsBridge, final LongSupplier timeProvider) throws IOException { super(getScriptService(settingsBridge.unwrap(), timeProvider)); } @@ -41,7 +46,7 @@ public ScriptServiceBridge(ScriptService delegate) { super(delegate); } - private static ScriptService getScriptService(final Settings settings, final LongSupplier timeProvider) { + private static ScriptService getScriptService(final Settings settings, final LongSupplier timeProvider) throws IOException { final List painlessBaseWhitelist = getPainlessBaseWhiteList(); final Map, List> scriptContexts = Map.of( IngestScript.CONTEXT, @@ -51,7 +56,7 @@ private static ScriptService getScriptService(final Settings settings, final Lon ); final Map scriptEngines = Map.of( PainlessScriptEngine.NAME, - new PainlessScriptEngine(settings, scriptContexts), + getPainlessScriptEngine(settings), MustacheScriptEngine.NAME, new MustacheScriptEngine(settings) ); @@ -62,6 +67,35 @@ private static List getPainlessBaseWhiteList() { return PainlessPlugin.baseWhiteList(); } + /** + * @param settings the Elasticsearch settings object + * @return a {@link ScriptEngine} for painless scripts for use in {@link IngestScript} and + * {@link IngestConditionalScript} contexts, including all available {@link PainlessExtension}s. + * @throws IOException when the underlying script engine cannot be created + */ + private static ScriptEngine getPainlessScriptEngine(final Settings settings) throws IOException { + try (PainlessPlugin painlessPlugin = new PainlessPlugin()) { + painlessPlugin.loadExtensions(new ExtensiblePlugin.ExtensionLoader() { + @Override + @SuppressWarnings("unchecked") + public List loadExtensions(Class extensionPointType) { + if (extensionPointType.isAssignableFrom(PainlessExtension.class)) { + final List extensions = new ArrayList<>(); + + // Add available extensions using reflection to avoid module visibility issues + extensions.add(new ProcessorsWhitelistExtension()); // module: ingest-common + + return (List) extensions; + } else { + return List.of(); + } + } + }); + + return painlessPlugin.getScriptEngine(settings, Set.of(IngestScript.CONTEXT, IngestConditionalScript.CONTEXT)); + } + } + @Override public void close() throws IOException { this.delegate.close(); From e3310cdc45ef0bf87ac505e615d05283ffa5677c Mon Sep 17 00:00:00 2001 From: Mashhur Date: Mon, 14 Jul 2025 10:42:57 -0700 Subject: [PATCH 02/22] Test paintless spaial, wildcard and constant keyword extensions. --- libs/logstash-bridge/build.gradle | 6 +-- .../src/main/java/module-info.java | 3 ++ .../script/ScriptServiceBridge.java | 9 ++++- .../src/main/java/module-info.java | 22 +++++++++++ .../spatial/src/main/java/module-info.java | 38 +++++++++++++++++++ .../wildcard/src/main/java/module-info.java | 23 +++++++++++ 6 files changed, 96 insertions(+), 5 deletions(-) create mode 100644 x-pack/plugin/mapper-constant-keyword/src/main/java/module-info.java create mode 100644 x-pack/plugin/spatial/src/main/java/module-info.java create mode 100644 x-pack/plugin/wildcard/src/main/java/module-info.java diff --git a/libs/logstash-bridge/build.gradle b/libs/logstash-bridge/build.gradle index 7ea74a9280640..0532877d717b0 100644 --- a/libs/logstash-bridge/build.gradle +++ b/libs/logstash-bridge/build.gradle @@ -18,9 +18,9 @@ dependencies { compileOnly project(':modules:lang-mustache') compileOnly project(':modules:ingest-common') compileOnly project(':modules:ingest-geoip') - //compileOnly project(':x-pack:plugin:wildcard') - //compileOnly project(':x-pack:plugin:mapper-constant-keyword') - //compileOnly project(':x-pack:plugin:spatial') + compileOnly project(':x-pack:plugin:wildcard') + compileOnly project(':x-pack:plugin:mapper-constant-keyword') + compileOnly project(':x-pack:plugin:spatial') } tasks.named('forbiddenApisMain').configure { diff --git a/libs/logstash-bridge/src/main/java/module-info.java b/libs/logstash-bridge/src/main/java/module-info.java index abcd69115515b..e9d611266e202 100644 --- a/libs/logstash-bridge/src/main/java/module-info.java +++ b/libs/logstash-bridge/src/main/java/module-info.java @@ -17,6 +17,9 @@ requires org.elasticsearch.mustache; requires org.elasticsearch.xcontent; requires org.elasticsearch.ingest.common; + requires org.elasticsearch.xpack.constantkeyword; + requires org.elasticsearch.xpack.spatial; + requires org.elasticsearch.xpack.wildcard; exports org.elasticsearch.logstashbridge; exports org.elasticsearch.logstashbridge.common; diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/script/ScriptServiceBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/script/ScriptServiceBridge.java index 0d06966d6e72f..5ea8b15b4fad9 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/script/ScriptServiceBridge.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/script/ScriptServiceBridge.java @@ -24,6 +24,9 @@ import org.elasticsearch.script.ScriptModule; import org.elasticsearch.script.ScriptService; import org.elasticsearch.script.mustache.MustacheScriptEngine; +import org.elasticsearch.xpack.constantkeyword.ConstantKeywordPainlessExtension; +import org.elasticsearch.xpack.spatial.SpatialPainlessExtension; +import org.elasticsearch.xpack.wildcard.WildcardPainlessExtension; import java.io.Closeable; import java.io.IOException; @@ -82,8 +85,10 @@ public List loadExtensions(Class extensionPointType) { if (extensionPointType.isAssignableFrom(PainlessExtension.class)) { final List extensions = new ArrayList<>(); - // Add available extensions using reflection to avoid module visibility issues - extensions.add(new ProcessorsWhitelistExtension()); // module: ingest-common + extensions.add(new ConstantKeywordPainlessExtension()); // module: constant-keyword + extensions.add(new ProcessorsWhitelistExtension()); // module: ingest-common + extensions.add(new SpatialPainlessExtension()); // module: spatial + extensions.add(new WildcardPainlessExtension()); // module: wildcard return (List) extensions; } else { diff --git a/x-pack/plugin/mapper-constant-keyword/src/main/java/module-info.java b/x-pack/plugin/mapper-constant-keyword/src/main/java/module-info.java new file mode 100644 index 0000000000000..73ccda15dad67 --- /dev/null +++ b/x-pack/plugin/mapper-constant-keyword/src/main/java/module-info.java @@ -0,0 +1,22 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +/** Elasticsearch X-Pack Constant Keyword Mapper Plugin. */ +module org.elasticsearch.xpack.constantkeyword { + requires org.elasticsearch.base; + requires org.elasticsearch.server; + requires org.elasticsearch.painless.spi; + requires org.elasticsearch.xcontent; + requires org.elasticsearch.xcore; + requires org.apache.lucene.core; + + exports org.elasticsearch.xpack.constantkeyword; + exports org.elasticsearch.xpack.constantkeyword.mapper; + + provides org.elasticsearch.painless.spi.PainlessExtension + with org.elasticsearch.xpack.constantkeyword.ConstantKeywordPainlessExtension; +} diff --git a/x-pack/plugin/spatial/src/main/java/module-info.java b/x-pack/plugin/spatial/src/main/java/module-info.java new file mode 100644 index 0000000000000..b8ea7088d00d3 --- /dev/null +++ b/x-pack/plugin/spatial/src/main/java/module-info.java @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +/** Elasticsearch X-Pack Spatial Plugin. */ +module org.elasticsearch.xpack.spatial { + requires org.elasticsearch.base; + requires org.elasticsearch.geo; + requires org.elasticsearch.h3; + requires org.elasticsearch.server; + requires org.elasticsearch.painless.spi; + requires org.elasticsearch.xcore; + requires org.elasticsearch.xcontent; + requires org.elasticsearch.legacy.geo; + requires org.apache.lucene.core; + requires org.apache.lucene.spatial3d; + + exports org.elasticsearch.xpack.spatial; + exports org.elasticsearch.xpack.spatial.action; + exports org.elasticsearch.xpack.spatial.common; + exports org.elasticsearch.xpack.spatial.index.fielddata; + exports org.elasticsearch.xpack.spatial.index.fielddata.plain; + exports org.elasticsearch.xpack.spatial.index.mapper; + exports org.elasticsearch.xpack.spatial.index.query; + exports org.elasticsearch.xpack.spatial.ingest; + exports org.elasticsearch.xpack.spatial.script.field; + exports org.elasticsearch.xpack.spatial.search.aggregations; + exports org.elasticsearch.xpack.spatial.search.aggregations.bucket.geogrid; + exports org.elasticsearch.xpack.spatial.search.aggregations.metrics; + exports org.elasticsearch.xpack.spatial.search.aggregations.support; + exports org.elasticsearch.xpack.spatial.search.runtime; + + provides org.elasticsearch.painless.spi.PainlessExtension + with org.elasticsearch.xpack.spatial.SpatialPainlessExtension; +} diff --git a/x-pack/plugin/wildcard/src/main/java/module-info.java b/x-pack/plugin/wildcard/src/main/java/module-info.java new file mode 100644 index 0000000000000..e6e68fab98557 --- /dev/null +++ b/x-pack/plugin/wildcard/src/main/java/module-info.java @@ -0,0 +1,23 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +/** Elasticsearch X-Pack Wildcard Plugin. */ +module org.elasticsearch.xpack.wildcard { + requires org.elasticsearch.base; + requires org.elasticsearch.server; + requires org.elasticsearch.painless.spi; + requires org.elasticsearch.xcontent; + requires org.elasticsearch.xcore; + requires org.apache.lucene.core; + requires org.apache.lucene.analysis.common; + + exports org.elasticsearch.xpack.wildcard; + exports org.elasticsearch.xpack.wildcard.mapper; + + provides org.elasticsearch.painless.spi.PainlessExtension + with org.elasticsearch.xpack.wildcard.WildcardPainlessExtension; +} From 3a6a795fafbff47a7a513f20c7acd5555600fa02 Mon Sep 17 00:00:00 2001 From: Mashhur Date: Tue, 15 Jul 2025 11:49:34 -0700 Subject: [PATCH 03/22] Fix the bug that when null applied for Map.of() which may cause NPE. --- .../logstashbridge/ingest/IngestDocumentBridge.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/IngestDocumentBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/IngestDocumentBridge.java index 1df089c0427dc..ff2c025244303 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/IngestDocumentBridge.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/IngestDocumentBridge.java @@ -15,6 +15,7 @@ import org.elasticsearch.logstashbridge.script.TemplateScriptBridge; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.function.BiConsumer; @@ -60,7 +61,7 @@ public void resetReroute() { } public Map getIngestMetadata() { - return Map.copyOf(delegate.getIngestMetadata()); + return Objects.isNull(delegate.getIngestMetadata()) ? Map.of() : Map.copyOf(delegate.getIngestMetadata()); } public T getFieldValue(final String fieldName, final Class type) { @@ -83,7 +84,6 @@ public void removeField(final String path) { delegate.removeField(path); } - // public void executePipeline(Pipeline pipeline, BiConsumer handler) { public void executePipeline(final PipelineBridge pipelineBridge, final BiConsumer handler) { this.delegate.executePipeline(pipelineBridge.unwrap(), (unwrapped, e) -> handler.accept(IngestDocumentBridge.wrap(unwrapped), e)); } From e2dd123adb34202647c77400198ae22c9bae9a23 Mon Sep 17 00:00:00 2001 From: Mashhur Date: Tue, 15 Jul 2025 14:22:04 -0700 Subject: [PATCH 04/22] Debug --- .../logstashbridge/ingest/IngestDocumentBridge.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/IngestDocumentBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/IngestDocumentBridge.java index ff2c025244303..424f38fcceb46 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/IngestDocumentBridge.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/IngestDocumentBridge.java @@ -61,7 +61,10 @@ public void resetReroute() { } public Map getIngestMetadata() { - return Objects.isNull(delegate.getIngestMetadata()) ? Map.of() : Map.copyOf(delegate.getIngestMetadata()); + System.out.println("Is delegate null? " + Objects.isNull(delegate)); + System.out.println("Is delegate ingest metadata null? " + Objects.isNull(delegate.getIngestMetadata())); + System.out.println("Is delegate keysets " + delegate.getIngestMetadata().keySet()); + return delegate.getIngestMetadata(); } public T getFieldValue(final String fieldName, final Class type) { From 84f38e33bcbe4e93dfcca8b2f5820302f96509ce Mon Sep 17 00:00:00 2001 From: Mashhur Date: Tue, 15 Jul 2025 17:36:24 -0700 Subject: [PATCH 05/22] Debugging: require delegate and its metadata non null to get specific exception. --- .../logstashbridge/ingest/IngestDocumentBridge.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/IngestDocumentBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/IngestDocumentBridge.java index 424f38fcceb46..bdd2775b8ed96 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/IngestDocumentBridge.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/IngestDocumentBridge.java @@ -61,10 +61,9 @@ public void resetReroute() { } public Map getIngestMetadata() { - System.out.println("Is delegate null? " + Objects.isNull(delegate)); - System.out.println("Is delegate ingest metadata null? " + Objects.isNull(delegate.getIngestMetadata())); - System.out.println("Is delegate keysets " + delegate.getIngestMetadata().keySet()); - return delegate.getIngestMetadata(); + Objects.requireNonNull(delegate, "IngestDocument cannot be null"); + Objects.requireNonNull(delegate.getIngestMetadata(), "IngestDocument ingest metadata cannot be null"); + return Map.copyOf(delegate.getIngestMetadata()); } public T getFieldValue(final String fieldName, final Class type) { From 78a3394b974aa3a5391894e33dc36d5aef788ad8 Mon Sep 17 00:00:00 2001 From: Mashhur Date: Tue, 15 Jul 2025 17:51:08 -0700 Subject: [PATCH 06/22] Debugging: instead of Map.copyOf(), send ingest metadata as it is. --- .../logstashbridge/ingest/IngestDocumentBridge.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/IngestDocumentBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/IngestDocumentBridge.java index bdd2775b8ed96..c9cee58d5c09e 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/IngestDocumentBridge.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/IngestDocumentBridge.java @@ -63,7 +63,7 @@ public void resetReroute() { public Map getIngestMetadata() { Objects.requireNonNull(delegate, "IngestDocument cannot be null"); Objects.requireNonNull(delegate.getIngestMetadata(), "IngestDocument ingest metadata cannot be null"); - return Map.copyOf(delegate.getIngestMetadata()); + return delegate.getIngestMetadata(); } public T getFieldValue(final String fieldName, final Class type) { From 38b25ce2a115a324464a20118f22c344703a2a5a Mon Sep 17 00:00:00 2001 From: Mashhur Date: Wed, 16 Jul 2025 15:56:57 -0700 Subject: [PATCH 07/22] Make metadata version field accessible, introduce inverse wrapper with default method to avoid required interface implementation. --- .../ingest/IngestDocumentBridge.java | 6 +++ .../ingest/ProcessorBridge.java | 47 +++++++++++++++++-- .../script/ScriptServiceBridge.java | 2 +- .../src/main/java/module-info.java | 5 +- 4 files changed, 52 insertions(+), 8 deletions(-) diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/IngestDocumentBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/IngestDocumentBridge.java index c9cee58d5c09e..4b88ebab93d0c 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/IngestDocumentBridge.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/IngestDocumentBridge.java @@ -21,6 +21,12 @@ public class IngestDocumentBridge extends StableBridgeAPI.Proxy { + public static final class Constants { + public static final String METADATA_VERSION_FIELD_NAME = IngestDocument.Metadata.VERSION.getFieldName(); + + private Constants() {} + } + public static IngestDocumentBridge wrap(final IngestDocument ingestDocument) { if (ingestDocument == null) { return null; diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/ProcessorBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/ProcessorBridge.java index 72a7e45c6ea94..0c9dad8f5108c 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/ProcessorBridge.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/ProcessorBridge.java @@ -11,6 +11,7 @@ import org.elasticsearch.cluster.metadata.ProjectId; import org.elasticsearch.core.FixForMultiProject; import org.elasticsearch.core.TimeValue; +import org.elasticsearch.ingest.IngestDocument; import org.elasticsearch.ingest.IngestService; import org.elasticsearch.ingest.Processor; import org.elasticsearch.logstashbridge.StableBridgeAPI; @@ -30,9 +31,12 @@ public interface ProcessorBridge extends StableBridgeAPI { boolean isAsync(); - void execute(IngestDocumentBridge ingestDocumentBridge, BiConsumer handler) throws Exception; + void execute(IngestDocumentBridge ingestDocumentBridge, BiConsumer handler); static ProcessorBridge wrap(final Processor delegate) { + if (delegate instanceof InverseWrapped inverseWrapped) { + return inverseWrapped.delegate; + } return new Wrapped(delegate); } @@ -62,8 +66,7 @@ public boolean isAsync() { } @Override - public void execute(final IngestDocumentBridge ingestDocumentBridge, final BiConsumer handler) - throws Exception { + public void execute(final IngestDocumentBridge ingestDocumentBridge, final BiConsumer handler) { delegate.execute( StableBridgeAPI.unwrapNullable(ingestDocumentBridge), (id, e) -> handler.accept(IngestDocumentBridge.wrap(id), e) @@ -71,6 +74,44 @@ public void execute(final IngestDocumentBridge ingestDocumentBridge, final BiCon } } + @Override + default Processor unwrap() { + return new InverseWrapped(this); + } + + class InverseWrapped implements Processor { + private final ProcessorBridge delegate; + + public InverseWrapped(final ProcessorBridge delegate) { + this.delegate = delegate; + } + + @Override + public String getType() { + return delegate.getType(); + } + + @Override + public String getTag() { + return delegate.getTag(); + } + + @Override + public String getDescription() { + return delegate.getDescription(); + } + + @Override + public void execute(IngestDocument ingestDocument, BiConsumer handler) { + this.delegate.execute(IngestDocumentBridge.wrap(ingestDocument), (idb, e) -> handler.accept(idb.unwrap(), e)); + } + + @Override + public boolean isAsync() { + return delegate.isAsync(); + } + } + class Parameters extends StableBridgeAPI.Proxy { public Parameters( diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/script/ScriptServiceBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/script/ScriptServiceBridge.java index 5ea8b15b4fad9..c674afd12c5d5 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/script/ScriptServiceBridge.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/script/ScriptServiceBridge.java @@ -86,7 +86,7 @@ public List loadExtensions(Class extensionPointType) { final List extensions = new ArrayList<>(); extensions.add(new ConstantKeywordPainlessExtension()); // module: constant-keyword - extensions.add(new ProcessorsWhitelistExtension()); // module: ingest-common + extensions.add(new ProcessorsWhitelistExtension()); // module: ingest-common extensions.add(new SpatialPainlessExtension()); // module: spatial extensions.add(new WildcardPainlessExtension()); // module: wildcard diff --git a/x-pack/plugin/mapper-constant-keyword/src/main/java/module-info.java b/x-pack/plugin/mapper-constant-keyword/src/main/java/module-info.java index 73ccda15dad67..ba1be20c6baaf 100644 --- a/x-pack/plugin/mapper-constant-keyword/src/main/java/module-info.java +++ b/x-pack/plugin/mapper-constant-keyword/src/main/java/module-info.java @@ -13,10 +13,7 @@ requires org.elasticsearch.xcontent; requires org.elasticsearch.xcore; requires org.apache.lucene.core; - + exports org.elasticsearch.xpack.constantkeyword; exports org.elasticsearch.xpack.constantkeyword.mapper; - - provides org.elasticsearch.painless.spi.PainlessExtension - with org.elasticsearch.xpack.constantkeyword.ConstantKeywordPainlessExtension; } From 0e70a6c0f078660b1326b689703468035ec03064 Mon Sep 17 00:00:00 2001 From: Mashhur Date: Thu, 17 Jul 2025 12:39:11 -0700 Subject: [PATCH 08/22] RedactPlugin, IngestCommonPlugin and IngestUserAgent plugins moved to the bridge. Processor definitions also moved to the bridge. Module simplofications. --- libs/logstash-bridge/build.gradle | 5 ++- .../src/main/java/module-info.java | 5 ++- .../ingest/IngestDocumentBridge.java | 3 -- .../ingest/ProcessorBridge.java | 39 +++++++++++++++++++ .../plugins/IngestCommonPluginBridge.java | 32 +++++++++++++++ .../plugins/IngestUserAgentPluginBridge.java | 28 +++++++++++++ .../plugins/RedactPluginBridge.java | 28 +++++++++++++ .../src/main/java/module-info.java | 2 + .../src/main/java/module-info.java | 1 - .../redact/src/main/java/module-info.java | 18 +++++++++ .../spatial/src/main/java/module-info.java | 16 +------- .../wildcard/src/main/java/module-info.java | 6 +-- 12 files changed, 157 insertions(+), 26 deletions(-) create mode 100644 libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/IngestCommonPluginBridge.java create mode 100644 libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/IngestUserAgentPluginBridge.java create mode 100644 libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/RedactPluginBridge.java create mode 100644 x-pack/plugin/redact/src/main/java/module-info.java diff --git a/libs/logstash-bridge/build.gradle b/libs/logstash-bridge/build.gradle index 0532877d717b0..608d2e3a398e9 100644 --- a/libs/logstash-bridge/build.gradle +++ b/libs/logstash-bridge/build.gradle @@ -18,9 +18,12 @@ dependencies { compileOnly project(':modules:lang-mustache') compileOnly project(':modules:ingest-common') compileOnly project(':modules:ingest-geoip') - compileOnly project(':x-pack:plugin:wildcard') + compileOnly project(':modules:ingest-user-agent') + compileOnly project(':x-pack:plugin:core') compileOnly project(':x-pack:plugin:mapper-constant-keyword') + compileOnly project(':x-pack:plugin:redact') compileOnly project(':x-pack:plugin:spatial') + compileOnly project(':x-pack:plugin:wildcard') } tasks.named('forbiddenApisMain').configure { diff --git a/libs/logstash-bridge/src/main/java/module-info.java b/libs/logstash-bridge/src/main/java/module-info.java index e9d611266e202..3661d75d809de 100644 --- a/libs/logstash-bridge/src/main/java/module-info.java +++ b/libs/logstash-bridge/src/main/java/module-info.java @@ -14,10 +14,13 @@ requires org.elasticsearch.server; requires org.elasticsearch.painless; requires org.elasticsearch.painless.spi; + requires org.elasticsearch.ingest.common; + requires org.elasticsearch.ingest.useragent; requires org.elasticsearch.mustache; requires org.elasticsearch.xcontent; - requires org.elasticsearch.ingest.common; + requires org.elasticsearch.xcore; requires org.elasticsearch.xpack.constantkeyword; + requires org.elasticsearch.xpack.redact; requires org.elasticsearch.xpack.spatial; requires org.elasticsearch.xpack.wildcard; diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/IngestDocumentBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/IngestDocumentBridge.java index 4b88ebab93d0c..239058f9333e2 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/IngestDocumentBridge.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/IngestDocumentBridge.java @@ -15,7 +15,6 @@ import org.elasticsearch.logstashbridge.script.TemplateScriptBridge; import java.util.Map; -import java.util.Objects; import java.util.Set; import java.util.function.BiConsumer; @@ -67,8 +66,6 @@ public void resetReroute() { } public Map getIngestMetadata() { - Objects.requireNonNull(delegate, "IngestDocument cannot be null"); - Objects.requireNonNull(delegate.getIngestMetadata(), "IngestDocument ingest metadata cannot be null"); return delegate.getIngestMetadata(); } diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/ProcessorBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/ProcessorBridge.java index 0c9dad8f5108c..b4b3766ecf183 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/ProcessorBridge.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/ProcessorBridge.java @@ -23,6 +23,45 @@ import java.util.function.BiConsumer; public interface ProcessorBridge extends StableBridgeAPI { + + final class Constants { + private Constants() {} + + public static final String APPEND_PROCESSOR_TYPE = org.elasticsearch.ingest.common.AppendProcessor.TYPE; + public static final String BYTES_PROCESSOR_TYPE = org.elasticsearch.ingest.common.BytesProcessor.TYPE; + public static final String COMMUNITY_ID_PROCESSOR_TYPE = org.elasticsearch.ingest.common.CommunityIdProcessor.TYPE; + public static final String CONVERT_PROCESSOR_TYPE = org.elasticsearch.ingest.common.ConvertProcessor.TYPE; + public static final String CSV_PROCESSOR_TYPE = org.elasticsearch.ingest.common.CsvProcessor.TYPE; + public static final String DATE_INDEX_NAME_PROCESSOR_TYPE = org.elasticsearch.ingest.common.DateIndexNameProcessor.TYPE; + public static final String DATE_PROCESSOR_TYPE = org.elasticsearch.ingest.common.DateProcessor.TYPE; + public static final String DISSECT_PROCESSOR_TYPE = org.elasticsearch.ingest.common.DissectProcessor.TYPE; + public static final String DROP_PROCESSOR_TYPE = org.elasticsearch.ingest.DropProcessor.TYPE; + public static final String FAIL_PROCESSOR_TYPE = org.elasticsearch.ingest.common.FailProcessor.TYPE; + public static final String FINGERPRINT_PROCESSOR_TYPE = org.elasticsearch.ingest.common.FingerprintProcessor.TYPE; + public static final String FOR_EACH_PROCESSOR_TYPE = org.elasticsearch.ingest.common.ForEachProcessor.TYPE; + public static final String GROK_PROCESSOR_TYPE = org.elasticsearch.ingest.common.GrokProcessor.TYPE; + public static final String GSUB_PROCESSOR_TYPE = org.elasticsearch.ingest.common.GsubProcessor.TYPE; + public static final String HTML_STRIP_PROCESSOR_TYPE = org.elasticsearch.ingest.common.HtmlStripProcessor.TYPE; + public static final String JOIN_PROCESSOR_TYPE = org.elasticsearch.ingest.common.JoinProcessor.TYPE; + public static final String JSON_PROCESSOR_TYPE = org.elasticsearch.ingest.common.JsonProcessor.TYPE; + public static final String KEY_VALUE_PROCESSOR_TYPE = org.elasticsearch.ingest.common.KeyValueProcessor.TYPE; + public static final String LOWERCASE_PROCESSOR_TYPE = org.elasticsearch.ingest.common.LowercaseProcessor.TYPE; + public static final String NETWORK_DIRECTION_PROCESSOR_TYPE = org.elasticsearch.ingest.common.NetworkDirectionProcessor.TYPE; + public static final String REGISTERED_DOMAIN_PROCESSOR_TYPE = org.elasticsearch.ingest.common.RegisteredDomainProcessor.TYPE; + public static final String REMOVE_PROCESSOR_TYPE = org.elasticsearch.ingest.common.RemoveProcessor.TYPE; + public static final String RENAME_PROCESSOR_TYPE = org.elasticsearch.ingest.common.RenameProcessor.TYPE; + public static final String REROUTE_PROCESSOR_TYPE = org.elasticsearch.ingest.common.RerouteProcessor.TYPE; + public static final String SCRIPT_PROCESSOR_TYPE = org.elasticsearch.ingest.common.ScriptProcessor.TYPE; + public static final String SET_PROCESSOR_TYPE = org.elasticsearch.ingest.common.SetProcessor.TYPE; + public static final String SORT_PROCESSOR_TYPE = org.elasticsearch.ingest.common.SortProcessor.TYPE; + public static final String SPLIT_PROCESSOR_TYPE = org.elasticsearch.ingest.common.SplitProcessor.TYPE; + public static final String TRIM_PROCESSOR_TYPE = org.elasticsearch.ingest.common.TrimProcessor.TYPE; + public static final String URL_DECODE_PROCESSOR_TYPE = org.elasticsearch.ingest.common.URLDecodeProcessor.TYPE; + public static final String UPPERCASE_PROCESSOR_TYPE = org.elasticsearch.ingest.common.UppercaseProcessor.TYPE; + public static final String URI_PARTS_PROCESSOR_TYPE = org.elasticsearch.ingest.common.UriPartsProcessor.TYPE; + + } + String getType(); String getTag(); diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/IngestCommonPluginBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/IngestCommonPluginBridge.java new file mode 100644 index 0000000000000..bd2e0aba29ced --- /dev/null +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/IngestCommonPluginBridge.java @@ -0,0 +1,32 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ +package org.elasticsearch.logstashbridge.plugins; + +import org.elasticsearch.ingest.common.IngestCommonPlugin; +import org.elasticsearch.logstashbridge.ingest.ProcessorBridge; + +import java.util.Map; +import java.util.stream.Collectors; + +public class IngestCommonPluginBridge implements IngestPluginBridge { + + private final IngestCommonPlugin delegate; + + public IngestCommonPluginBridge() { + delegate = new IngestCommonPlugin(); + } + + @Override + public Map getProcessors(ProcessorBridge.Parameters parameters) { + return this.delegate.getProcessors(parameters.unwrap()) + .entrySet() + .stream() + .collect(Collectors.toMap(Map.Entry::getKey, entry -> ProcessorBridge.Factory.wrap(entry.getValue()))); + } +} diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/IngestUserAgentPluginBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/IngestUserAgentPluginBridge.java new file mode 100644 index 0000000000000..5e60d18575932 --- /dev/null +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/IngestUserAgentPluginBridge.java @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ +package org.elasticsearch.logstashbridge.plugins; + +import org.elasticsearch.ingest.useragent.IngestUserAgentPlugin; +import org.elasticsearch.logstashbridge.StableBridgeAPI; +import org.elasticsearch.logstashbridge.ingest.ProcessorBridge; + +import java.util.Map; + +public class IngestUserAgentPluginBridge implements IngestPluginBridge { + + private final IngestUserAgentPlugin delegate; + + public IngestUserAgentPluginBridge() { + delegate = new IngestUserAgentPlugin(); + } + + public Map getProcessors(final ProcessorBridge.Parameters parameters) { + return StableBridgeAPI.wrap(this.delegate.getProcessors(parameters.unwrap()), ProcessorBridge.Factory::wrap); + } +} diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/RedactPluginBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/RedactPluginBridge.java new file mode 100644 index 0000000000000..4760a7df9eee4 --- /dev/null +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/RedactPluginBridge.java @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ +package org.elasticsearch.logstashbridge.plugins; + +import org.elasticsearch.license.XPackLicenseState; +import org.elasticsearch.logstashbridge.ingest.ProcessorBridge; +import org.elasticsearch.xpack.redact.RedactProcessor; + +import java.util.Map; + +public class RedactPluginBridge implements IngestPluginBridge { + @Override + public Map getProcessors(ProcessorBridge.Parameters parameters) { + // Provide a TRIAL license state to the redact processor + final XPackLicenseState trialLicenseState = new XPackLicenseState(parameters.unwrap().relativeTimeSupplier); + + return Map.of( + RedactProcessor.TYPE, + ProcessorBridge.Factory.wrap(new RedactProcessor.Factory(trialLicenseState, parameters.unwrap().matcherWatchdog)) + ); + } +} diff --git a/modules/ingest-user-agent/src/main/java/module-info.java b/modules/ingest-user-agent/src/main/java/module-info.java index ef0af652f50b3..beda67c758792 100644 --- a/modules/ingest-user-agent/src/main/java/module-info.java +++ b/modules/ingest-user-agent/src/main/java/module-info.java @@ -11,4 +11,6 @@ requires org.elasticsearch.server; requires org.elasticsearch.xcontent; requires org.elasticsearch.base; + + exports org.elasticsearch.ingest.useragent; } diff --git a/x-pack/plugin/mapper-constant-keyword/src/main/java/module-info.java b/x-pack/plugin/mapper-constant-keyword/src/main/java/module-info.java index ba1be20c6baaf..856f2a6cdce5b 100644 --- a/x-pack/plugin/mapper-constant-keyword/src/main/java/module-info.java +++ b/x-pack/plugin/mapper-constant-keyword/src/main/java/module-info.java @@ -15,5 +15,4 @@ requires org.apache.lucene.core; exports org.elasticsearch.xpack.constantkeyword; - exports org.elasticsearch.xpack.constantkeyword.mapper; } diff --git a/x-pack/plugin/redact/src/main/java/module-info.java b/x-pack/plugin/redact/src/main/java/module-info.java new file mode 100644 index 0000000000000..4f10dd62c04e9 --- /dev/null +++ b/x-pack/plugin/redact/src/main/java/module-info.java @@ -0,0 +1,18 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +/** Elasticsearch Redact Plugin. */ +module org.elasticsearch.xpack.redact { + requires org.elasticsearch.base; + requires org.elasticsearch.server; + requires org.elasticsearch.grok; + requires org.elasticsearch.xcore; + requires org.apache.logging.log4j; + requires org.jruby.joni; + + exports org.elasticsearch.xpack.redact; +} diff --git a/x-pack/plugin/spatial/src/main/java/module-info.java b/x-pack/plugin/spatial/src/main/java/module-info.java index b8ea7088d00d3..a95d83d951979 100644 --- a/x-pack/plugin/spatial/src/main/java/module-info.java +++ b/x-pack/plugin/spatial/src/main/java/module-info.java @@ -17,22 +17,8 @@ requires org.elasticsearch.legacy.geo; requires org.apache.lucene.core; requires org.apache.lucene.spatial3d; - + exports org.elasticsearch.xpack.spatial; - exports org.elasticsearch.xpack.spatial.action; exports org.elasticsearch.xpack.spatial.common; - exports org.elasticsearch.xpack.spatial.index.fielddata; - exports org.elasticsearch.xpack.spatial.index.fielddata.plain; - exports org.elasticsearch.xpack.spatial.index.mapper; - exports org.elasticsearch.xpack.spatial.index.query; - exports org.elasticsearch.xpack.spatial.ingest; - exports org.elasticsearch.xpack.spatial.script.field; - exports org.elasticsearch.xpack.spatial.search.aggregations; exports org.elasticsearch.xpack.spatial.search.aggregations.bucket.geogrid; - exports org.elasticsearch.xpack.spatial.search.aggregations.metrics; - exports org.elasticsearch.xpack.spatial.search.aggregations.support; - exports org.elasticsearch.xpack.spatial.search.runtime; - - provides org.elasticsearch.painless.spi.PainlessExtension - with org.elasticsearch.xpack.spatial.SpatialPainlessExtension; } diff --git a/x-pack/plugin/wildcard/src/main/java/module-info.java b/x-pack/plugin/wildcard/src/main/java/module-info.java index e6e68fab98557..b8a11773e215c 100644 --- a/x-pack/plugin/wildcard/src/main/java/module-info.java +++ b/x-pack/plugin/wildcard/src/main/java/module-info.java @@ -14,10 +14,6 @@ requires org.elasticsearch.xcore; requires org.apache.lucene.core; requires org.apache.lucene.analysis.common; - + exports org.elasticsearch.xpack.wildcard; - exports org.elasticsearch.xpack.wildcard.mapper; - - provides org.elasticsearch.painless.spi.PainlessExtension - with org.elasticsearch.xpack.wildcard.WildcardPainlessExtension; } From b7ac030075545a6f1026d8da3bdac8410b7d154f Mon Sep 17 00:00:00 2001 From: Mashhur Date: Thu, 17 Jul 2025 12:42:37 -0700 Subject: [PATCH 09/22] Ingest common plugin simplification. --- .../logstashbridge/plugins/IngestCommonPluginBridge.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/IngestCommonPluginBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/IngestCommonPluginBridge.java index bd2e0aba29ced..436e1fe757a57 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/IngestCommonPluginBridge.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/IngestCommonPluginBridge.java @@ -9,10 +9,10 @@ package org.elasticsearch.logstashbridge.plugins; import org.elasticsearch.ingest.common.IngestCommonPlugin; +import org.elasticsearch.logstashbridge.StableBridgeAPI; import org.elasticsearch.logstashbridge.ingest.ProcessorBridge; import java.util.Map; -import java.util.stream.Collectors; public class IngestCommonPluginBridge implements IngestPluginBridge { @@ -23,10 +23,7 @@ public IngestCommonPluginBridge() { } @Override - public Map getProcessors(ProcessorBridge.Parameters parameters) { - return this.delegate.getProcessors(parameters.unwrap()) - .entrySet() - .stream() - .collect(Collectors.toMap(Map.Entry::getKey, entry -> ProcessorBridge.Factory.wrap(entry.getValue()))); + public Map getProcessors(final ProcessorBridge.Parameters parameters) { + return StableBridgeAPI.wrap(this.delegate.getProcessors(parameters.unwrap()), ProcessorBridge.Factory::wrap); } } From 0d0acef330b391e17c4a6bbaba25fdc636acc2d9 Mon Sep 17 00:00:00 2001 From: elasticsearchmachine Date: Thu, 17 Jul 2025 22:53:19 +0000 Subject: [PATCH 10/22] [CI] Auto commit changes from spotless --- modules/ingest-user-agent/src/main/java/module-info.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/ingest-user-agent/src/main/java/module-info.java b/modules/ingest-user-agent/src/main/java/module-info.java index beda67c758792..7d1ec2c9997a0 100644 --- a/modules/ingest-user-agent/src/main/java/module-info.java +++ b/modules/ingest-user-agent/src/main/java/module-info.java @@ -11,6 +11,6 @@ requires org.elasticsearch.server; requires org.elasticsearch.xcontent; requires org.elasticsearch.base; - + exports org.elasticsearch.ingest.useragent; } From 577e0f2a540271d5542e173c4a59f06af0f1d3d5 Mon Sep 17 00:00:00 2001 From: Mashhur Date: Thu, 17 Jul 2025 16:34:59 -0700 Subject: [PATCH 11/22] Open an access for the x-pack spatial module resources. --- x-pack/plugin/spatial/src/main/java/module-info.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/x-pack/plugin/spatial/src/main/java/module-info.java b/x-pack/plugin/spatial/src/main/java/module-info.java index a95d83d951979..0e93cab259b45 100644 --- a/x-pack/plugin/spatial/src/main/java/module-info.java +++ b/x-pack/plugin/spatial/src/main/java/module-info.java @@ -21,4 +21,6 @@ exports org.elasticsearch.xpack.spatial; exports org.elasticsearch.xpack.spatial.common; exports org.elasticsearch.xpack.spatial.search.aggregations.bucket.geogrid; + + opens org.elasticsearch.xpack.spatial; } From 94aa3e218e0995dfe11f89517b2268d899e8f86b Mon Sep 17 00:00:00 2001 From: elasticsearchmachine Date: Thu, 17 Jul 2025 23:44:46 +0000 Subject: [PATCH 12/22] [CI] Auto commit changes from spotless --- x-pack/plugin/spatial/src/main/java/module-info.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugin/spatial/src/main/java/module-info.java b/x-pack/plugin/spatial/src/main/java/module-info.java index 0e93cab259b45..0331083704bd9 100644 --- a/x-pack/plugin/spatial/src/main/java/module-info.java +++ b/x-pack/plugin/spatial/src/main/java/module-info.java @@ -21,6 +21,6 @@ exports org.elasticsearch.xpack.spatial; exports org.elasticsearch.xpack.spatial.common; exports org.elasticsearch.xpack.spatial.search.aggregations.bucket.geogrid; - + opens org.elasticsearch.xpack.spatial; } From 87774ae746a2bdf8b46520a62e8f1bb1016f05a4 Mon Sep 17 00:00:00 2001 From: Mashhur Date: Thu, 17 Jul 2025 17:22:06 -0700 Subject: [PATCH 13/22] Open access to resources in mapper constant keyword. --- .../mapper-constant-keyword/src/main/java/module-info.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/x-pack/plugin/mapper-constant-keyword/src/main/java/module-info.java b/x-pack/plugin/mapper-constant-keyword/src/main/java/module-info.java index 856f2a6cdce5b..ad0e8a15de0e9 100644 --- a/x-pack/plugin/mapper-constant-keyword/src/main/java/module-info.java +++ b/x-pack/plugin/mapper-constant-keyword/src/main/java/module-info.java @@ -15,4 +15,6 @@ requires org.apache.lucene.core; exports org.elasticsearch.xpack.constantkeyword; + + opens org.elasticsearch.xpack.constantkeyword; } From bfa2d27451b092c12b7c3f6425aeff79cfa43a80 Mon Sep 17 00:00:00 2001 From: Mashhur Date: Thu, 17 Jul 2025 22:31:01 -0700 Subject: [PATCH 14/22] Add an access to resource in x-pack wildcard module. --- x-pack/plugin/wildcard/src/main/java/module-info.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/x-pack/plugin/wildcard/src/main/java/module-info.java b/x-pack/plugin/wildcard/src/main/java/module-info.java index b8a11773e215c..ae1acf2f8cd94 100644 --- a/x-pack/plugin/wildcard/src/main/java/module-info.java +++ b/x-pack/plugin/wildcard/src/main/java/module-info.java @@ -16,4 +16,6 @@ requires org.apache.lucene.analysis.common; exports org.elasticsearch.xpack.wildcard; + + opens org.elasticsearch.xpack.wildcard; } From 4b1ef11dd634dba02b24303ffc5f81a5432e3ccd Mon Sep 17 00:00:00 2001 From: Mashhur Date: Thu, 17 Jul 2025 23:34:45 -0700 Subject: [PATCH 15/22] Export and open access to sub-package spatial modules. --- x-pack/plugin/spatial/src/main/java/module-info.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/x-pack/plugin/spatial/src/main/java/module-info.java b/x-pack/plugin/spatial/src/main/java/module-info.java index 0331083704bd9..b565892985900 100644 --- a/x-pack/plugin/spatial/src/main/java/module-info.java +++ b/x-pack/plugin/spatial/src/main/java/module-info.java @@ -19,8 +19,12 @@ requires org.apache.lucene.spatial3d; exports org.elasticsearch.xpack.spatial; + exports org.elasticsearch.xpack.spatial.action; exports org.elasticsearch.xpack.spatial.common; exports org.elasticsearch.xpack.spatial.search.aggregations.bucket.geogrid; opens org.elasticsearch.xpack.spatial; + opens org.elasticsearch.xpack.spatial.index.fielddata; + opens org.elasticsearch.xpack.spatial.index.fielddata.plain; + opens org.elasticsearch.xpack.spatial.index.mapper; } From fb835ba3ef6fa4a44d19b64eb6d3dc7c9b27dd48 Mon Sep 17 00:00:00 2001 From: Mashhur Date: Fri, 18 Jul 2025 08:40:12 -0700 Subject: [PATCH 16/22] Provide module service implementations with provides keyword in x-pack spatial/wildcard/mapper-constant modules. --- .../src/main/java/module-info.java | 2 ++ x-pack/plugin/spatial/src/main/java/module-info.java | 8 +++----- x-pack/plugin/wildcard/src/main/java/module-info.java | 2 ++ 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/x-pack/plugin/mapper-constant-keyword/src/main/java/module-info.java b/x-pack/plugin/mapper-constant-keyword/src/main/java/module-info.java index ad0e8a15de0e9..bd6f5bf9f35e9 100644 --- a/x-pack/plugin/mapper-constant-keyword/src/main/java/module-info.java +++ b/x-pack/plugin/mapper-constant-keyword/src/main/java/module-info.java @@ -17,4 +17,6 @@ exports org.elasticsearch.xpack.constantkeyword; opens org.elasticsearch.xpack.constantkeyword; + + provides org.elasticsearch.painless.spi.PainlessExtension with org.elasticsearch.xpack.constantkeyword.ConstantKeywordPainlessExtension; } diff --git a/x-pack/plugin/spatial/src/main/java/module-info.java b/x-pack/plugin/spatial/src/main/java/module-info.java index b565892985900..e0284aebe864d 100644 --- a/x-pack/plugin/spatial/src/main/java/module-info.java +++ b/x-pack/plugin/spatial/src/main/java/module-info.java @@ -19,12 +19,10 @@ requires org.apache.lucene.spatial3d; exports org.elasticsearch.xpack.spatial; - exports org.elasticsearch.xpack.spatial.action; exports org.elasticsearch.xpack.spatial.common; exports org.elasticsearch.xpack.spatial.search.aggregations.bucket.geogrid; - opens org.elasticsearch.xpack.spatial; - opens org.elasticsearch.xpack.spatial.index.fielddata; - opens org.elasticsearch.xpack.spatial.index.fielddata.plain; - opens org.elasticsearch.xpack.spatial.index.mapper; + opens org.elasticsearch.xpack.spatial to org.elasticsearch.painless.spi; + + provides org.elasticsearch.painless.spi.PainlessExtension with org.elasticsearch.xpack.spatial.SpatialPainlessExtension; } diff --git a/x-pack/plugin/wildcard/src/main/java/module-info.java b/x-pack/plugin/wildcard/src/main/java/module-info.java index ae1acf2f8cd94..17c6d8d651cd6 100644 --- a/x-pack/plugin/wildcard/src/main/java/module-info.java +++ b/x-pack/plugin/wildcard/src/main/java/module-info.java @@ -18,4 +18,6 @@ exports org.elasticsearch.xpack.wildcard; opens org.elasticsearch.xpack.wildcard; + + provides org.elasticsearch.painless.spi.PainlessExtension with org.elasticsearch.xpack.wildcard.WildcardPainlessExtension; } From b4346d304fd4b2b0946ac251f49577d32c6842e6 Mon Sep 17 00:00:00 2001 From: Mashhur Date: Fri, 18 Jul 2025 09:49:32 -0700 Subject: [PATCH 17/22] Export x-pack spatial module packages to make accessible to ES server module. --- x-pack/plugin/spatial/src/main/java/module-info.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/x-pack/plugin/spatial/src/main/java/module-info.java b/x-pack/plugin/spatial/src/main/java/module-info.java index e0284aebe864d..ef1523feddbc7 100644 --- a/x-pack/plugin/spatial/src/main/java/module-info.java +++ b/x-pack/plugin/spatial/src/main/java/module-info.java @@ -19,8 +19,12 @@ requires org.apache.lucene.spatial3d; exports org.elasticsearch.xpack.spatial; + exports org.elasticsearch.xpack.spatial.action; exports org.elasticsearch.xpack.spatial.common; exports org.elasticsearch.xpack.spatial.search.aggregations.bucket.geogrid; + exports org.elasticsearch.xpack.spatial.index.fielddata; + exports org.elasticsearch.xpack.spatial.index.fielddata.plain; + exports org.elasticsearch.xpack.spatial.index.mapper; opens org.elasticsearch.xpack.spatial to org.elasticsearch.painless.spi; From 290e82ac0a80e91d6a5cd906bb80f07bc18c8dd3 Mon Sep 17 00:00:00 2001 From: Ry Biesemeyer Date: Mon, 21 Jul 2025 20:52:33 +0000 Subject: [PATCH 18/22] spike refactor of logstashbridge stable API - transitions terminology from wrap/unwrap to toInternal/fromInternal - adds abstract base class for ProcessorBridge, since we are expecting external implementations, which includes an internal-shaped proxy to the external definition. - adds copious commentary for the classes that were previously shipped --- .../logstashbridge/StableBridgeAPI.java | 42 +++-- .../logstashbridge/common/SettingsBridge.java | 24 ++- .../logstashbridge/core/IOUtilsBridge.java | 3 + .../logstashbridge/env/EnvironmentBridge.java | 13 +- .../ingest/ConfigurationUtilsBridge.java | 5 +- .../ingest/IngestDocumentBridge.java | 36 ++-- .../logstashbridge/ingest/PipelineBridge.java | 21 ++- .../ingest/PipelineConfigurationBridge.java | 17 +- .../ingest/ProcessorBridge.java | 166 +++++++++++------- .../plugins/IngestCommonPluginBridge.java | 5 +- .../plugins/IngestPluginBridge.java | 23 ++- .../plugins/IngestUserAgentPluginBridge.java | 5 +- .../plugins/RedactPluginBridge.java | 7 +- .../logstashbridge/script/MetadataBridge.java | 27 +-- .../script/ScriptServiceBridge.java | 11 +- .../script/TemplateScriptBridge.java | 15 +- .../threadpool/ThreadPoolBridge.java | 13 +- 17 files changed, 265 insertions(+), 168 deletions(-) diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/StableBridgeAPI.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/StableBridgeAPI.java index d4cd946d74799..c965fd8f46c35 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/StableBridgeAPI.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/StableBridgeAPI.java @@ -19,43 +19,51 @@ * upon by the "Elastic Integration Filter Plugin" for Logstash and their external shapes must not change * without coordination with the maintainers of that project. * - * @param the actual type of the Elasticsearch API being mirrored + * @param the actual type of the Elasticsearch API being mirrored */ -public interface StableBridgeAPI { - T unwrap(); +public interface StableBridgeAPI { + INTERNAL toInternal(); - static T unwrapNullable(final StableBridgeAPI nullableStableBridgeAPI) { + static T toInternalNullable(final StableBridgeAPI nullableStableBridgeAPI) { if (Objects.isNull(nullableStableBridgeAPI)) { return null; } - return nullableStableBridgeAPI.unwrap(); + return nullableStableBridgeAPI.toInternal(); } - static Map unwrap(final Map> bridgeMap) { - return bridgeMap.entrySet().stream().collect(Collectors.toUnmodifiableMap(Map.Entry::getKey, e -> e.getValue().unwrap())); + static Map toInternal(final Map> bridgeMap) { + return bridgeMap.entrySet().stream().collect(Collectors.toUnmodifiableMap(Map.Entry::getKey, e -> e.getValue().toInternal())); } - static > Map wrap(final Map rawMap, final Function wrapFunction) { - return rawMap.entrySet().stream().collect(Collectors.toUnmodifiableMap(Map.Entry::getKey, e -> wrapFunction.apply(e.getValue()))); + static > Map fromInternal(final Map rawMap, final Function externalizor) { + return rawMap.entrySet() + .stream() + .collect(Collectors.toUnmodifiableMap(Map.Entry::getKey, e -> externalizor.apply(e.getValue()))); } - static > B wrap(final T delegate, final Function wrapFunction) { + static > B fromInternal(final T delegate, final Function externalizor) { if (Objects.isNull(delegate)) { return null; } - return wrapFunction.apply(delegate); + return externalizor.apply(delegate); } - abstract class Proxy implements StableBridgeAPI { - protected final T delegate; + /** + * An {@code ProxyInternal} is an implementation of {@code StableBridgeAPI} that + * proxies calls to a delegate that is an actual {@code INTERNAL}. + * + * @param + */ + abstract class ProxyInternal implements StableBridgeAPI { + protected final INTERNAL internalDelegate; - protected Proxy(final T delegate) { - this.delegate = delegate; + protected ProxyInternal(final INTERNAL internalDelegate) { + this.internalDelegate = internalDelegate; } @Override - public T unwrap() { - return delegate; + public INTERNAL toInternal() { + return internalDelegate; } } } diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/common/SettingsBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/common/SettingsBridge.java index 304f4c902bcef..4139191995dc8 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/common/SettingsBridge.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/common/SettingsBridge.java @@ -11,14 +11,17 @@ import org.elasticsearch.common.settings.Settings; import org.elasticsearch.logstashbridge.StableBridgeAPI; -public class SettingsBridge extends StableBridgeAPI.Proxy { +/** + * An external bridge for {@link Settings} + */ +public class SettingsBridge extends StableBridgeAPI.ProxyInternal { - public static SettingsBridge wrap(final Settings delegate) { + public static SettingsBridge fromInternal(final Settings delegate) { return new SettingsBridge(delegate); } public static Builder builder() { - return Builder.wrap(Settings.builder()); + return Builder.fromInternal(Settings.builder()); } public SettingsBridge(final Settings delegate) { @@ -26,12 +29,15 @@ public SettingsBridge(final Settings delegate) { } @Override - public Settings unwrap() { - return this.delegate; + public Settings toInternal() { + return this.internalDelegate; } - public static class Builder extends StableBridgeAPI.Proxy { - static Builder wrap(final Settings.Builder delegate) { + /** + * An external bridge for {@link Settings.Builder} that proxies calls to a real {@link Settings.Builder} + */ + public static class Builder extends StableBridgeAPI.ProxyInternal { + static Builder fromInternal(final Settings.Builder delegate) { return new Builder(delegate); } @@ -40,12 +46,12 @@ private Builder(final Settings.Builder delegate) { } public Builder put(final String key, final String value) { - this.delegate.put(key, value); + this.internalDelegate.put(key, value); return this; } public SettingsBridge build() { - return new SettingsBridge(this.delegate.build()); + return new SettingsBridge(this.internalDelegate.build()); } } } diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/core/IOUtilsBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/core/IOUtilsBridge.java index 1e300bee6881f..e73331c62c71a 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/core/IOUtilsBridge.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/core/IOUtilsBridge.java @@ -12,6 +12,9 @@ import java.io.Closeable; +/** + * An external bridge for {@link IOUtils} + */ public class IOUtilsBridge { public static void closeWhileHandlingException(final Iterable objects) { IOUtils.closeWhileHandlingException(objects); diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/env/EnvironmentBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/env/EnvironmentBridge.java index 236b05dd034e9..086d2ae5a3dc4 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/env/EnvironmentBridge.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/env/EnvironmentBridge.java @@ -14,13 +14,16 @@ import java.nio.file.Path; -public class EnvironmentBridge extends StableBridgeAPI.Proxy { - public static EnvironmentBridge wrap(final Environment delegate) { +/** + * An external bridge for {@link Environment} + */ +public class EnvironmentBridge extends StableBridgeAPI.ProxyInternal { + public static EnvironmentBridge fromInternal(final Environment delegate) { return new EnvironmentBridge(delegate); } public EnvironmentBridge(final SettingsBridge settingsBridge, final Path configPath) { - this(new Environment(settingsBridge.unwrap(), configPath)); + this(new Environment(settingsBridge.toInternal(), configPath)); } private EnvironmentBridge(final Environment delegate) { @@ -28,7 +31,7 @@ private EnvironmentBridge(final Environment delegate) { } @Override - public Environment unwrap() { - return this.delegate; + public Environment toInternal() { + return this.internalDelegate; } } diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/ConfigurationUtilsBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/ConfigurationUtilsBridge.java index 760bd12a5a9da..07178ca65a460 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/ConfigurationUtilsBridge.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/ConfigurationUtilsBridge.java @@ -14,6 +14,9 @@ import java.util.Map; +/** + * An external bridge for {@link ConfigurationUtils} + */ public class ConfigurationUtilsBridge { public static TemplateScriptBridge.Factory compileTemplate( final String processorType, @@ -23,7 +26,7 @@ public static TemplateScriptBridge.Factory compileTemplate( final ScriptServiceBridge scriptServiceBridge ) { return new TemplateScriptBridge.Factory( - ConfigurationUtils.compileTemplate(processorType, processorTag, propertyName, propertyValue, scriptServiceBridge.unwrap()) + ConfigurationUtils.compileTemplate(processorType, processorTag, propertyName, propertyValue, scriptServiceBridge.toInternal()) ); } diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/IngestDocumentBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/IngestDocumentBridge.java index 239058f9333e2..8a1255c816ac1 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/IngestDocumentBridge.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/IngestDocumentBridge.java @@ -18,7 +18,10 @@ import java.util.Set; import java.util.function.BiConsumer; -public class IngestDocumentBridge extends StableBridgeAPI.Proxy { +/** + * An external bridge for {@link IngestDocument} that proxies calls through a real {@link IngestDocument} + */ +public class IngestDocumentBridge extends StableBridgeAPI.ProxyInternal { public static final class Constants { public static final String METADATA_VERSION_FIELD_NAME = IngestDocument.Metadata.VERSION.getFieldName(); @@ -26,7 +29,7 @@ public static final class Constants { private Constants() {} } - public static IngestDocumentBridge wrap(final IngestDocument ingestDocument) { + public static IngestDocumentBridge fromInternalNullable(final IngestDocument ingestDocument) { if (ingestDocument == null) { return null; } @@ -42,54 +45,57 @@ private IngestDocumentBridge(IngestDocument inner) { } public MetadataBridge getMetadata() { - return new MetadataBridge(delegate.getMetadata()); + return new MetadataBridge(internalDelegate.getMetadata()); } public Map getSource() { - return delegate.getSource(); + return internalDelegate.getSource(); } public boolean updateIndexHistory(final String index) { - return delegate.updateIndexHistory(index); + return internalDelegate.updateIndexHistory(index); } public Set getIndexHistory() { - return Set.copyOf(delegate.getIndexHistory()); + return Set.copyOf(internalDelegate.getIndexHistory()); } public boolean isReroute() { - return LogstashInternalBridge.isReroute(delegate); + return LogstashInternalBridge.isReroute(internalDelegate); } public void resetReroute() { - LogstashInternalBridge.resetReroute(delegate); + LogstashInternalBridge.resetReroute(internalDelegate); } public Map getIngestMetadata() { - return delegate.getIngestMetadata(); + return internalDelegate.getIngestMetadata(); } public T getFieldValue(final String fieldName, final Class type) { - return delegate.getFieldValue(fieldName, type); + return internalDelegate.getFieldValue(fieldName, type); } public T getFieldValue(final String fieldName, final Class type, final boolean ignoreMissing) { - return delegate.getFieldValue(fieldName, type, ignoreMissing); + return internalDelegate.getFieldValue(fieldName, type, ignoreMissing); } public String renderTemplate(final TemplateScriptBridge.Factory templateScriptFactory) { - return delegate.renderTemplate(templateScriptFactory.unwrap()); + return internalDelegate.renderTemplate(templateScriptFactory.toInternal()); } public void setFieldValue(final String path, final Object value) { - delegate.setFieldValue(path, value); + internalDelegate.setFieldValue(path, value); } public void removeField(final String path) { - delegate.removeField(path); + internalDelegate.removeField(path); } public void executePipeline(final PipelineBridge pipelineBridge, final BiConsumer handler) { - this.delegate.executePipeline(pipelineBridge.unwrap(), (unwrapped, e) -> handler.accept(IngestDocumentBridge.wrap(unwrapped), e)); + this.internalDelegate.executePipeline(pipelineBridge.toInternal(), + (ingestDocument, e) -> { + handler.accept(IngestDocumentBridge.fromInternalNullable(ingestDocument), e); + }); } } diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/PipelineBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/PipelineBridge.java index 6a5d437f75d81..19ee577ef0874 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/PipelineBridge.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/PipelineBridge.java @@ -16,8 +16,11 @@ import java.util.Map; import java.util.function.BiConsumer; -public class PipelineBridge extends StableBridgeAPI.Proxy { - public static PipelineBridge wrap(final Pipeline pipeline) { +/** + * An external bridge for {@link Pipeline} + */ +public class PipelineBridge extends StableBridgeAPI.ProxyInternal { + public static PipelineBridge fromInternal(final Pipeline pipeline) { return new PipelineBridge(pipeline); } @@ -28,12 +31,12 @@ public static PipelineBridge create( Map processorFactories, ScriptServiceBridge scriptServiceBridge ) throws Exception { - return wrap( + return fromInternal( Pipeline.create( id, config, - StableBridgeAPI.unwrap(processorFactories), - StableBridgeAPI.unwrapNullable(scriptServiceBridge), + StableBridgeAPI.toInternal(processorFactories), + StableBridgeAPI.toInternalNullable(scriptServiceBridge), null ) ); @@ -44,13 +47,13 @@ public PipelineBridge(final Pipeline delegate) { } public String getId() { - return delegate.getId(); + return internalDelegate.getId(); } public void execute(final IngestDocumentBridge ingestDocumentBridge, final BiConsumer handler) { - this.delegate.execute( - StableBridgeAPI.unwrapNullable(ingestDocumentBridge), - (unwrapped, e) -> handler.accept(IngestDocumentBridge.wrap(unwrapped), e) + this.internalDelegate.execute( + StableBridgeAPI.toInternalNullable(ingestDocumentBridge), + (ingestDocument, e) -> handler.accept(IngestDocumentBridge.fromInternalNullable(ingestDocument), e) ); } } diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/PipelineConfigurationBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/PipelineConfigurationBridge.java index cb90d10665659..22a039702f82c 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/PipelineConfigurationBridge.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/PipelineConfigurationBridge.java @@ -15,7 +15,10 @@ import java.util.Map; -public class PipelineConfigurationBridge extends StableBridgeAPI.Proxy { +/** + * An external bridge for {@link PipelineConfiguration} + */ +public class PipelineConfigurationBridge extends StableBridgeAPI.ProxyInternal { public PipelineConfigurationBridge(final PipelineConfiguration delegate) { super(delegate); } @@ -25,25 +28,25 @@ public PipelineConfigurationBridge(final String pipelineId, final String jsonEnc } public String getId() { - return delegate.getId(); + return internalDelegate.getId(); } public Map getConfig() { - return delegate.getConfig(); + return internalDelegate.getConfig(); } public Map getConfig(final boolean unmodifiable) { - return delegate.getConfig(unmodifiable); + return internalDelegate.getConfig(unmodifiable); } @Override public int hashCode() { - return delegate.hashCode(); + return internalDelegate.hashCode(); } @Override public String toString() { - return delegate.toString(); + return internalDelegate.toString(); } @Override @@ -51,7 +54,7 @@ public boolean equals(final Object obj) { if (this == obj) { return true; } else if (obj instanceof PipelineConfigurationBridge other) { - return delegate.equals(other.delegate); + return internalDelegate.equals(other.internalDelegate); } else { return false; } diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/ProcessorBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/ProcessorBridge.java index b4b3766ecf183..3096b8e952b5f 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/ProcessorBridge.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/ProcessorBridge.java @@ -22,8 +22,14 @@ import java.util.Map; import java.util.function.BiConsumer; +/** + * An external bridge for {@link Processor} + */ public interface ProcessorBridge extends StableBridgeAPI { + /** + * An external bridge for processor-related constants + */ final class Constants { private Constants() {} @@ -72,86 +78,104 @@ private Constants() {} void execute(IngestDocumentBridge ingestDocumentBridge, BiConsumer handler); - static ProcessorBridge wrap(final Processor delegate) { - if (delegate instanceof InverseWrapped inverseWrapped) { - return inverseWrapped.delegate; + static ProcessorBridge fromInternal(final Processor internalProcessor) { + if (internalProcessor instanceof AbstractExternal.ProxyExternal externalProxy) { + return externalProxy.getProcessorBridge(); } - return new Wrapped(delegate); + return new ProxyInternal(internalProcessor); } - class Wrapped extends StableBridgeAPI.Proxy implements ProcessorBridge { - public Wrapped(final Processor delegate) { - super(delegate); + /** + * The {@code ProcessorBridge.AbstractExternal} is an abstract base class for implementing + * the {@link ProcessorBridge} externally to the Elasticsearch code-base. It takes care of + * the details of maintaining a singular internal-form implementation of {@link Processor} + * that proxies calls through the external implementation. + */ + abstract class AbstractExternal implements ProcessorBridge { + private ProxyExternal internalProcessor; + + public Processor toInternal() { + if (internalProcessor == null) { + internalProcessor = new ProxyExternal(); + } + return internalProcessor; } - @Override - public String getType() { - return unwrap().getType(); - } + private class ProxyExternal implements Processor { - @Override - public String getTag() { - return unwrap().getTag(); - } + @Override + public String getType() { + return AbstractExternal.this.getType(); + } - @Override - public String getDescription() { - return unwrap().getDescription(); - } + @Override + public String getTag() { + return AbstractExternal.this.getTag(); + } - @Override - public boolean isAsync() { - return unwrap().isAsync(); - } + @Override + public String getDescription() { + return AbstractExternal.this.getDescription(); + } - @Override - public void execute(final IngestDocumentBridge ingestDocumentBridge, final BiConsumer handler) { - delegate.execute( - StableBridgeAPI.unwrapNullable(ingestDocumentBridge), - (id, e) -> handler.accept(IngestDocumentBridge.wrap(id), e) - ); - } - } + @Override + public void execute(IngestDocument ingestDocument, BiConsumer handler) { + AbstractExternal.this.execute(IngestDocumentBridge.fromInternalNullable(ingestDocument), + (idb, e) -> handler.accept(idb.toInternal(), e)); + } - @Override - default Processor unwrap() { - return new InverseWrapped(this); - } + @Override + public boolean isAsync() { + return AbstractExternal.this.isAsync(); + } - class InverseWrapped implements Processor { - private final ProcessorBridge delegate; + private AbstractExternal getProcessorBridge() { + return AbstractExternal.this; + } + } + } - public InverseWrapped(final ProcessorBridge delegate) { - this.delegate = delegate; + /** + * An implementation of {@link ProcessorBridge} that proxies to an internal {@link Processor} + */ + class ProxyInternal extends StableBridgeAPI.ProxyInternal implements ProcessorBridge { + public ProxyInternal(final Processor delegate) { + super(delegate); } @Override public String getType() { - return delegate.getType(); + return toInternal().getType(); } @Override public String getTag() { - return delegate.getTag(); + return toInternal().getTag(); } @Override public String getDescription() { - return delegate.getDescription(); + return toInternal().getDescription(); } @Override - public void execute(IngestDocument ingestDocument, BiConsumer handler) { - this.delegate.execute(IngestDocumentBridge.wrap(ingestDocument), (idb, e) -> handler.accept(idb.unwrap(), e)); + public boolean isAsync() { + return toInternal().isAsync(); } @Override - public boolean isAsync() { - return delegate.isAsync(); + public void execute(final IngestDocumentBridge ingestDocumentBridge, final BiConsumer handler) { + internalDelegate.execute( + StableBridgeAPI.toInternalNullable(ingestDocumentBridge), + (id, e) -> handler.accept(IngestDocumentBridge.fromInternalNullable(id), e) + ); } } - class Parameters extends StableBridgeAPI.Proxy { + /** + * An external bridge for {@link Processor.Parameters} + */ + class Parameters extends StableBridgeAPI.ProxyInternal { public Parameters( final EnvironmentBridge environmentBridge, @@ -160,17 +184,17 @@ public Parameters( ) { this( new Processor.Parameters( - environmentBridge.unwrap(), - scriptServiceBridge.unwrap(), + environmentBridge.toInternal(), + scriptServiceBridge.toInternal(), null, - threadPoolBridge.unwrap().getThreadContext(), - threadPoolBridge.unwrap()::relativeTimeInMillis, - (delay, command) -> threadPoolBridge.unwrap() - .schedule(command, TimeValue.timeValueMillis(delay), threadPoolBridge.unwrap().generic()), + threadPoolBridge.toInternal().getThreadContext(), + threadPoolBridge.toInternal()::relativeTimeInMillis, + (delay, command) -> threadPoolBridge.toInternal() + .schedule(command, TimeValue.timeValueMillis(delay), threadPoolBridge.toInternal().generic()), null, null, - threadPoolBridge.unwrap().generic()::execute, - IngestService.createGrokThreadWatchdog(environmentBridge.unwrap(), threadPoolBridge.unwrap()) + threadPoolBridge.toInternal().generic()::execute, + IngestService.createGrokThreadWatchdog(environmentBridge.toInternal(), threadPoolBridge.toInternal()) ) ); } @@ -180,11 +204,14 @@ private Parameters(final Processor.Parameters delegate) { } @Override - public Processor.Parameters unwrap() { - return this.delegate; + public Processor.Parameters toInternal() { + return this.internalDelegate; } } + /** + * An external bridge for {@link Processor.Factory} + */ interface Factory extends StableBridgeAPI { ProcessorBridge create( Map registry, @@ -193,23 +220,26 @@ ProcessorBridge create( Map config ) throws Exception; - static Factory wrap(final Processor.Factory delegate) { - return new Wrapped(delegate); + static Factory fromInternal(final Processor.Factory delegate) { + return new ProxyInternal(delegate); } @Override - default Processor.Factory unwrap() { + default Processor.Factory toInternal() { final Factory stableAPIFactory = this; return (registry, tag, description, config, projectId) -> stableAPIFactory.create( - StableBridgeAPI.wrap(registry, Factory::wrap), + StableBridgeAPI.fromInternal(registry, Factory::fromInternal), tag, description, config - ).unwrap(); + ).toInternal(); } - class Wrapped extends StableBridgeAPI.Proxy implements Factory { - private Wrapped(final Processor.Factory delegate) { + /** + * An implementation of {@link ProcessorBridge.Factory} that proxies to an internal {@link Processor.Factory} + */ + class ProxyInternal extends StableBridgeAPI.ProxyInternal implements Factory { + private ProxyInternal(final Processor.Factory delegate) { super(delegate); } @@ -221,14 +251,14 @@ public ProcessorBridge create( final String description, final Map config ) throws Exception { - return ProcessorBridge.wrap( - this.delegate.create(StableBridgeAPI.unwrap(registry), processorTag, description, config, ProjectId.DEFAULT) + return ProcessorBridge.fromInternal( + this.internalDelegate.create(StableBridgeAPI.toInternal(registry), processorTag, description, config, ProjectId.DEFAULT) ); } @Override - public Processor.Factory unwrap() { - return this.delegate; + public Processor.Factory toInternal() { + return this.internalDelegate; } } } diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/IngestCommonPluginBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/IngestCommonPluginBridge.java index 436e1fe757a57..065977d834fb0 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/IngestCommonPluginBridge.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/IngestCommonPluginBridge.java @@ -14,6 +14,9 @@ import java.util.Map; +/** + * An external bridge for {@link IngestCommonPlugin} + */ public class IngestCommonPluginBridge implements IngestPluginBridge { private final IngestCommonPlugin delegate; @@ -24,6 +27,6 @@ public IngestCommonPluginBridge() { @Override public Map getProcessors(final ProcessorBridge.Parameters parameters) { - return StableBridgeAPI.wrap(this.delegate.getProcessors(parameters.unwrap()), ProcessorBridge.Factory::wrap); + return StableBridgeAPI.fromInternal(this.delegate.getProcessors(parameters.toInternal()), ProcessorBridge.Factory::fromInternal); } } diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/IngestPluginBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/IngestPluginBridge.java index 49a719e576c41..916244949f4e6 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/IngestPluginBridge.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/IngestPluginBridge.java @@ -16,31 +16,38 @@ import java.io.IOException; import java.util.Map; +/** + * An external bridge for {@link IngestPlugin} + */ public interface IngestPluginBridge { Map getProcessors(ProcessorBridge.Parameters parameters); - static Wrapped wrap(final IngestPlugin delegate) { - return new Wrapped(delegate); + static ProxyInternal fromInternal(final IngestPlugin delegate) { + return new ProxyInternal(delegate); } - class Wrapped extends StableBridgeAPI.Proxy implements IngestPluginBridge, Closeable { + /** + * An implementation of {@link IngestPluginBridge} that proxies calls to an internal {@link IngestPlugin} + */ + class ProxyInternal extends StableBridgeAPI.ProxyInternal implements IngestPluginBridge, Closeable { - private Wrapped(final IngestPlugin delegate) { + private ProxyInternal(final IngestPlugin delegate) { super(delegate); } public Map getProcessors(final ProcessorBridge.Parameters parameters) { - return StableBridgeAPI.wrap(this.delegate.getProcessors(parameters.unwrap()), ProcessorBridge.Factory::wrap); + return StableBridgeAPI.fromInternal(this.internalDelegate.getProcessors(parameters.toInternal()), + ProcessorBridge.Factory::fromInternal); } @Override - public IngestPlugin unwrap() { - return this.delegate; + public IngestPlugin toInternal() { + return this.internalDelegate; } @Override public void close() throws IOException { - if (this.delegate instanceof Closeable closeableDelegate) { + if (this.internalDelegate instanceof Closeable closeableDelegate) { closeableDelegate.close(); } } diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/IngestUserAgentPluginBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/IngestUserAgentPluginBridge.java index 5e60d18575932..4c936e7143571 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/IngestUserAgentPluginBridge.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/IngestUserAgentPluginBridge.java @@ -14,6 +14,9 @@ import java.util.Map; +/** + * An external bridge for {@link IngestUserAgentPlugin} + */ public class IngestUserAgentPluginBridge implements IngestPluginBridge { private final IngestUserAgentPlugin delegate; @@ -23,6 +26,6 @@ public IngestUserAgentPluginBridge() { } public Map getProcessors(final ProcessorBridge.Parameters parameters) { - return StableBridgeAPI.wrap(this.delegate.getProcessors(parameters.unwrap()), ProcessorBridge.Factory::wrap); + return StableBridgeAPI.fromInternal(this.delegate.getProcessors(parameters.toInternal()), ProcessorBridge.Factory::fromInternal); } } diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/RedactPluginBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/RedactPluginBridge.java index 4760a7df9eee4..4e59e5531838f 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/RedactPluginBridge.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/RedactPluginBridge.java @@ -14,15 +14,18 @@ import java.util.Map; +/** + * An external bridge for {@link org.elasticsearch.xpack.redact.RedactPlugin} + */ public class RedactPluginBridge implements IngestPluginBridge { @Override public Map getProcessors(ProcessorBridge.Parameters parameters) { // Provide a TRIAL license state to the redact processor - final XPackLicenseState trialLicenseState = new XPackLicenseState(parameters.unwrap().relativeTimeSupplier); + final XPackLicenseState trialLicenseState = new XPackLicenseState(parameters.toInternal().relativeTimeSupplier); return Map.of( RedactProcessor.TYPE, - ProcessorBridge.Factory.wrap(new RedactProcessor.Factory(trialLicenseState, parameters.unwrap().matcherWatchdog)) + ProcessorBridge.Factory.fromInternal(new RedactProcessor.Factory(trialLicenseState, parameters.toInternal().matcherWatchdog)) ); } } diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/script/MetadataBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/script/MetadataBridge.java index e4dbb3bc8b4ee..1a9f93d65af3c 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/script/MetadataBridge.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/script/MetadataBridge.java @@ -13,52 +13,55 @@ import java.time.ZonedDateTime; -public class MetadataBridge extends StableBridgeAPI.Proxy { +/** + * An external bridge for {@link Metadata} + */ +public class MetadataBridge extends StableBridgeAPI.ProxyInternal { public MetadataBridge(final Metadata delegate) { super(delegate); } public String getIndex() { - return delegate.getIndex(); + return internalDelegate.getIndex(); } public void setIndex(final String index) { - delegate.setIndex(index); + internalDelegate.setIndex(index); } public String getId() { - return delegate.getId(); + return internalDelegate.getId(); } public void setId(final String id) { - delegate.setId(id); + internalDelegate.setId(id); } public long getVersion() { - return delegate.getVersion(); + return internalDelegate.getVersion(); } public void setVersion(final long version) { - delegate.setVersion(version); + internalDelegate.setVersion(version); } public String getVersionType() { - return delegate.getVersionType(); + return internalDelegate.getVersionType(); } public void setVersionType(final String versionType) { - delegate.setVersionType(versionType); + internalDelegate.setVersionType(versionType); } public String getRouting() { - return delegate.getRouting(); + return internalDelegate.getRouting(); } public void setRouting(final String routing) { - delegate.setRouting(routing); + internalDelegate.setRouting(routing); } public ZonedDateTime getNow() { - return delegate.getNow(); + return internalDelegate.getNow(); } } diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/script/ScriptServiceBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/script/ScriptServiceBridge.java index c674afd12c5d5..d13731fb67bed 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/script/ScriptServiceBridge.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/script/ScriptServiceBridge.java @@ -36,13 +36,16 @@ import java.util.Set; import java.util.function.LongSupplier; -public class ScriptServiceBridge extends StableBridgeAPI.Proxy implements Closeable { - public ScriptServiceBridge wrap(final ScriptService delegate) { +/** + * An external bridge for {@link ScriptService} + */ +public class ScriptServiceBridge extends StableBridgeAPI.ProxyInternal implements Closeable { + public ScriptServiceBridge fromInternal(final ScriptService delegate) { return new ScriptServiceBridge(delegate); } public ScriptServiceBridge(final SettingsBridge settingsBridge, final LongSupplier timeProvider) throws IOException { - super(getScriptService(settingsBridge.unwrap(), timeProvider)); + super(getScriptService(settingsBridge.toInternal(), timeProvider)); } public ScriptServiceBridge(ScriptService delegate) { @@ -103,6 +106,6 @@ public List loadExtensions(Class extensionPointType) { @Override public void close() throws IOException { - this.delegate.close(); + this.internalDelegate.close(); } } diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/script/TemplateScriptBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/script/TemplateScriptBridge.java index a184a51676048..58c38a8f224a3 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/script/TemplateScriptBridge.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/script/TemplateScriptBridge.java @@ -11,9 +11,16 @@ import org.elasticsearch.logstashbridge.StableBridgeAPI; import org.elasticsearch.script.TemplateScript; +/** + * An external bridge for {@link TemplateScript} + */ public class TemplateScriptBridge { - public static class Factory extends StableBridgeAPI.Proxy { - public static Factory wrap(final TemplateScript.Factory delegate) { + + /** + * An external bridge for {@link TemplateScript.Factory} + */ + public static class Factory extends StableBridgeAPI.ProxyInternal { + public static Factory fromInternal(final TemplateScript.Factory delegate) { return new Factory(delegate); } @@ -22,8 +29,8 @@ public Factory(final TemplateScript.Factory delegate) { } @Override - public TemplateScript.Factory unwrap() { - return this.delegate; + public TemplateScript.Factory toInternal() { + return this.internalDelegate; } } } diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/threadpool/ThreadPoolBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/threadpool/ThreadPoolBridge.java index d16cca1dd865a..dee0381d30c22 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/threadpool/ThreadPoolBridge.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/threadpool/ThreadPoolBridge.java @@ -16,10 +16,13 @@ import java.util.concurrent.TimeUnit; -public class ThreadPoolBridge extends StableBridgeAPI.Proxy { +/** + * An external bridge for {@link ThreadPool} + */ +public class ThreadPoolBridge extends StableBridgeAPI.ProxyInternal { public ThreadPoolBridge(final SettingsBridge settingsBridge) { - this(new ThreadPool(settingsBridge.unwrap(), MeterRegistry.NOOP, new DefaultBuiltInExecutorBuilders())); + this(new ThreadPool(settingsBridge.toInternal(), MeterRegistry.NOOP, new DefaultBuiltInExecutorBuilders())); } public ThreadPoolBridge(final ThreadPool delegate) { @@ -27,14 +30,14 @@ public ThreadPoolBridge(final ThreadPool delegate) { } public static boolean terminate(final ThreadPoolBridge pool, final long timeout, final TimeUnit timeUnit) { - return ThreadPool.terminate(pool.unwrap(), timeout, timeUnit); + return ThreadPool.terminate(pool.toInternal(), timeout, timeUnit); } public long relativeTimeInMillis() { - return delegate.relativeTimeInMillis(); + return internalDelegate.relativeTimeInMillis(); } public long absoluteTimeInMillis() { - return delegate.absoluteTimeInMillis(); + return internalDelegate.absoluteTimeInMillis(); } } From cd44d2f3ed9d3703879e81762978f24b07c797ad Mon Sep 17 00:00:00 2001 From: Mashhur Date: Tue, 22 Jul 2025 12:35:22 -0700 Subject: [PATCH 19/22] Format the recent logstash-bridge changes. --- .../org/elasticsearch/logstashbridge/StableBridgeAPI.java | 4 +--- .../logstashbridge/ingest/IngestDocumentBridge.java | 7 +++---- .../logstashbridge/ingest/ProcessorBridge.java | 6 ++++-- .../logstashbridge/plugins/IngestPluginBridge.java | 6 ++++-- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/StableBridgeAPI.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/StableBridgeAPI.java index c965fd8f46c35..261b4fec043b9 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/StableBridgeAPI.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/StableBridgeAPI.java @@ -36,9 +36,7 @@ static Map toInternal(final Map> br } static > Map fromInternal(final Map rawMap, final Function externalizor) { - return rawMap.entrySet() - .stream() - .collect(Collectors.toUnmodifiableMap(Map.Entry::getKey, e -> externalizor.apply(e.getValue()))); + return rawMap.entrySet().stream().collect(Collectors.toUnmodifiableMap(Map.Entry::getKey, e -> externalizor.apply(e.getValue()))); } static > B fromInternal(final T delegate, final Function externalizor) { diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/IngestDocumentBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/IngestDocumentBridge.java index 8a1255c816ac1..1c4f8d6338ad8 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/IngestDocumentBridge.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/IngestDocumentBridge.java @@ -93,9 +93,8 @@ public void removeField(final String path) { } public void executePipeline(final PipelineBridge pipelineBridge, final BiConsumer handler) { - this.internalDelegate.executePipeline(pipelineBridge.toInternal(), - (ingestDocument, e) -> { - handler.accept(IngestDocumentBridge.fromInternalNullable(ingestDocument), e); - }); + this.internalDelegate.executePipeline(pipelineBridge.toInternal(), (ingestDocument, e) -> { + handler.accept(IngestDocumentBridge.fromInternalNullable(ingestDocument), e); + }); } } diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/ProcessorBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/ProcessorBridge.java index 3096b8e952b5f..bba63aea23f1f 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/ProcessorBridge.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/ProcessorBridge.java @@ -120,8 +120,10 @@ public String getDescription() { @Override public void execute(IngestDocument ingestDocument, BiConsumer handler) { - AbstractExternal.this.execute(IngestDocumentBridge.fromInternalNullable(ingestDocument), - (idb, e) -> handler.accept(idb.toInternal(), e)); + AbstractExternal.this.execute( + IngestDocumentBridge.fromInternalNullable(ingestDocument), + (idb, e) -> handler.accept(idb.toInternal(), e) + ); } @Override diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/IngestPluginBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/IngestPluginBridge.java index 916244949f4e6..c4e3d56805b28 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/IngestPluginBridge.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/IngestPluginBridge.java @@ -36,8 +36,10 @@ private ProxyInternal(final IngestPlugin delegate) { } public Map getProcessors(final ProcessorBridge.Parameters parameters) { - return StableBridgeAPI.fromInternal(this.internalDelegate.getProcessors(parameters.toInternal()), - ProcessorBridge.Factory::fromInternal); + return StableBridgeAPI.fromInternal( + this.internalDelegate.getProcessors(parameters.toInternal()), + ProcessorBridge.Factory::fromInternal + ); } @Override From 4eee343216b3af61fca4b8d46889e4c93118ae61 Mon Sep 17 00:00:00 2001 From: Mashhur Date: Tue, 22 Jul 2025 14:15:06 -0700 Subject: [PATCH 20/22] Wildcard and mapper constant keyword modules open resource access to painless spi --- .../mapper-constant-keyword/src/main/java/module-info.java | 2 +- x-pack/plugin/wildcard/src/main/java/module-info.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/x-pack/plugin/mapper-constant-keyword/src/main/java/module-info.java b/x-pack/plugin/mapper-constant-keyword/src/main/java/module-info.java index bd6f5bf9f35e9..3d8a152451b32 100644 --- a/x-pack/plugin/mapper-constant-keyword/src/main/java/module-info.java +++ b/x-pack/plugin/mapper-constant-keyword/src/main/java/module-info.java @@ -16,7 +16,7 @@ exports org.elasticsearch.xpack.constantkeyword; - opens org.elasticsearch.xpack.constantkeyword; + opens org.elasticsearch.xpack.constantkeyword to org.elasticsearch.painless.spi; provides org.elasticsearch.painless.spi.PainlessExtension with org.elasticsearch.xpack.constantkeyword.ConstantKeywordPainlessExtension; } diff --git a/x-pack/plugin/wildcard/src/main/java/module-info.java b/x-pack/plugin/wildcard/src/main/java/module-info.java index 17c6d8d651cd6..995f7ca79206a 100644 --- a/x-pack/plugin/wildcard/src/main/java/module-info.java +++ b/x-pack/plugin/wildcard/src/main/java/module-info.java @@ -17,7 +17,7 @@ exports org.elasticsearch.xpack.wildcard; - opens org.elasticsearch.xpack.wildcard; + opens org.elasticsearch.xpack.wildcard to org.elasticsearch.painless.spi; provides org.elasticsearch.painless.spi.PainlessExtension with org.elasticsearch.xpack.wildcard.WildcardPainlessExtension; } From 166d4be3caee47d58b80cd8c9deb7bd36576f3a4 Mon Sep 17 00:00:00 2001 From: Mashhur Date: Tue, 22 Jul 2025 23:02:16 -0700 Subject: [PATCH 21/22] Rename constant-keyword, wildcard, redact and spatial modules in a way that remove xpack from namings. Move constants from processor bridge to align with a proper place where Ingest common plugin bridge is sutable. --- .../src/main/java/module-info.java | 8 ++-- .../ingest/ProcessorBridge.java | 41 ------------------- .../plugins/IngestCommonPluginBridge.java | 41 +++++++++++++++++++ .../src/main/java/module-info.java | 2 +- .../redact/src/main/java/module-info.java | 2 +- .../spatial/src/main/java/module-info.java | 2 +- .../wildcard/src/main/java/module-info.java | 2 +- 7 files changed, 49 insertions(+), 49 deletions(-) diff --git a/libs/logstash-bridge/src/main/java/module-info.java b/libs/logstash-bridge/src/main/java/module-info.java index 3661d75d809de..0d16376d2fbb0 100644 --- a/libs/logstash-bridge/src/main/java/module-info.java +++ b/libs/logstash-bridge/src/main/java/module-info.java @@ -19,10 +19,10 @@ requires org.elasticsearch.mustache; requires org.elasticsearch.xcontent; requires org.elasticsearch.xcore; - requires org.elasticsearch.xpack.constantkeyword; - requires org.elasticsearch.xpack.redact; - requires org.elasticsearch.xpack.spatial; - requires org.elasticsearch.xpack.wildcard; + requires org.elasticsearch.constantkeyword; + requires org.elasticsearch.redact; + requires org.elasticsearch.spatial; + requires org.elasticsearch.wildcard; exports org.elasticsearch.logstashbridge; exports org.elasticsearch.logstashbridge.common; diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/ProcessorBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/ProcessorBridge.java index bba63aea23f1f..2d7d15b90908f 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/ProcessorBridge.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/ingest/ProcessorBridge.java @@ -27,47 +27,6 @@ */ public interface ProcessorBridge extends StableBridgeAPI { - /** - * An external bridge for processor-related constants - */ - final class Constants { - private Constants() {} - - public static final String APPEND_PROCESSOR_TYPE = org.elasticsearch.ingest.common.AppendProcessor.TYPE; - public static final String BYTES_PROCESSOR_TYPE = org.elasticsearch.ingest.common.BytesProcessor.TYPE; - public static final String COMMUNITY_ID_PROCESSOR_TYPE = org.elasticsearch.ingest.common.CommunityIdProcessor.TYPE; - public static final String CONVERT_PROCESSOR_TYPE = org.elasticsearch.ingest.common.ConvertProcessor.TYPE; - public static final String CSV_PROCESSOR_TYPE = org.elasticsearch.ingest.common.CsvProcessor.TYPE; - public static final String DATE_INDEX_NAME_PROCESSOR_TYPE = org.elasticsearch.ingest.common.DateIndexNameProcessor.TYPE; - public static final String DATE_PROCESSOR_TYPE = org.elasticsearch.ingest.common.DateProcessor.TYPE; - public static final String DISSECT_PROCESSOR_TYPE = org.elasticsearch.ingest.common.DissectProcessor.TYPE; - public static final String DROP_PROCESSOR_TYPE = org.elasticsearch.ingest.DropProcessor.TYPE; - public static final String FAIL_PROCESSOR_TYPE = org.elasticsearch.ingest.common.FailProcessor.TYPE; - public static final String FINGERPRINT_PROCESSOR_TYPE = org.elasticsearch.ingest.common.FingerprintProcessor.TYPE; - public static final String FOR_EACH_PROCESSOR_TYPE = org.elasticsearch.ingest.common.ForEachProcessor.TYPE; - public static final String GROK_PROCESSOR_TYPE = org.elasticsearch.ingest.common.GrokProcessor.TYPE; - public static final String GSUB_PROCESSOR_TYPE = org.elasticsearch.ingest.common.GsubProcessor.TYPE; - public static final String HTML_STRIP_PROCESSOR_TYPE = org.elasticsearch.ingest.common.HtmlStripProcessor.TYPE; - public static final String JOIN_PROCESSOR_TYPE = org.elasticsearch.ingest.common.JoinProcessor.TYPE; - public static final String JSON_PROCESSOR_TYPE = org.elasticsearch.ingest.common.JsonProcessor.TYPE; - public static final String KEY_VALUE_PROCESSOR_TYPE = org.elasticsearch.ingest.common.KeyValueProcessor.TYPE; - public static final String LOWERCASE_PROCESSOR_TYPE = org.elasticsearch.ingest.common.LowercaseProcessor.TYPE; - public static final String NETWORK_DIRECTION_PROCESSOR_TYPE = org.elasticsearch.ingest.common.NetworkDirectionProcessor.TYPE; - public static final String REGISTERED_DOMAIN_PROCESSOR_TYPE = org.elasticsearch.ingest.common.RegisteredDomainProcessor.TYPE; - public static final String REMOVE_PROCESSOR_TYPE = org.elasticsearch.ingest.common.RemoveProcessor.TYPE; - public static final String RENAME_PROCESSOR_TYPE = org.elasticsearch.ingest.common.RenameProcessor.TYPE; - public static final String REROUTE_PROCESSOR_TYPE = org.elasticsearch.ingest.common.RerouteProcessor.TYPE; - public static final String SCRIPT_PROCESSOR_TYPE = org.elasticsearch.ingest.common.ScriptProcessor.TYPE; - public static final String SET_PROCESSOR_TYPE = org.elasticsearch.ingest.common.SetProcessor.TYPE; - public static final String SORT_PROCESSOR_TYPE = org.elasticsearch.ingest.common.SortProcessor.TYPE; - public static final String SPLIT_PROCESSOR_TYPE = org.elasticsearch.ingest.common.SplitProcessor.TYPE; - public static final String TRIM_PROCESSOR_TYPE = org.elasticsearch.ingest.common.TrimProcessor.TYPE; - public static final String URL_DECODE_PROCESSOR_TYPE = org.elasticsearch.ingest.common.URLDecodeProcessor.TYPE; - public static final String UPPERCASE_PROCESSOR_TYPE = org.elasticsearch.ingest.common.UppercaseProcessor.TYPE; - public static final String URI_PARTS_PROCESSOR_TYPE = org.elasticsearch.ingest.common.UriPartsProcessor.TYPE; - - } - String getType(); String getTag(); diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/IngestCommonPluginBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/IngestCommonPluginBridge.java index 065977d834fb0..b8f9d2fcd7342 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/IngestCommonPluginBridge.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/IngestCommonPluginBridge.java @@ -19,6 +19,47 @@ */ public class IngestCommonPluginBridge implements IngestPluginBridge { + /** + * An external bridge for processor-related constants + */ + static final class Constants { + private Constants() {} + + public static final String APPEND_PROCESSOR_TYPE = org.elasticsearch.ingest.common.AppendProcessor.TYPE; + public static final String BYTES_PROCESSOR_TYPE = org.elasticsearch.ingest.common.BytesProcessor.TYPE; + public static final String COMMUNITY_ID_PROCESSOR_TYPE = org.elasticsearch.ingest.common.CommunityIdProcessor.TYPE; + public static final String CONVERT_PROCESSOR_TYPE = org.elasticsearch.ingest.common.ConvertProcessor.TYPE; + public static final String CSV_PROCESSOR_TYPE = org.elasticsearch.ingest.common.CsvProcessor.TYPE; + public static final String DATE_INDEX_NAME_PROCESSOR_TYPE = org.elasticsearch.ingest.common.DateIndexNameProcessor.TYPE; + public static final String DATE_PROCESSOR_TYPE = org.elasticsearch.ingest.common.DateProcessor.TYPE; + public static final String DISSECT_PROCESSOR_TYPE = org.elasticsearch.ingest.common.DissectProcessor.TYPE; + public static final String DROP_PROCESSOR_TYPE = org.elasticsearch.ingest.DropProcessor.TYPE; + public static final String FAIL_PROCESSOR_TYPE = org.elasticsearch.ingest.common.FailProcessor.TYPE; + public static final String FINGERPRINT_PROCESSOR_TYPE = org.elasticsearch.ingest.common.FingerprintProcessor.TYPE; + public static final String FOR_EACH_PROCESSOR_TYPE = org.elasticsearch.ingest.common.ForEachProcessor.TYPE; + public static final String GROK_PROCESSOR_TYPE = org.elasticsearch.ingest.common.GrokProcessor.TYPE; + public static final String GSUB_PROCESSOR_TYPE = org.elasticsearch.ingest.common.GsubProcessor.TYPE; + public static final String HTML_STRIP_PROCESSOR_TYPE = org.elasticsearch.ingest.common.HtmlStripProcessor.TYPE; + public static final String JOIN_PROCESSOR_TYPE = org.elasticsearch.ingest.common.JoinProcessor.TYPE; + public static final String JSON_PROCESSOR_TYPE = org.elasticsearch.ingest.common.JsonProcessor.TYPE; + public static final String KEY_VALUE_PROCESSOR_TYPE = org.elasticsearch.ingest.common.KeyValueProcessor.TYPE; + public static final String LOWERCASE_PROCESSOR_TYPE = org.elasticsearch.ingest.common.LowercaseProcessor.TYPE; + public static final String NETWORK_DIRECTION_PROCESSOR_TYPE = org.elasticsearch.ingest.common.NetworkDirectionProcessor.TYPE; + public static final String REGISTERED_DOMAIN_PROCESSOR_TYPE = org.elasticsearch.ingest.common.RegisteredDomainProcessor.TYPE; + public static final String REMOVE_PROCESSOR_TYPE = org.elasticsearch.ingest.common.RemoveProcessor.TYPE; + public static final String RENAME_PROCESSOR_TYPE = org.elasticsearch.ingest.common.RenameProcessor.TYPE; + public static final String REROUTE_PROCESSOR_TYPE = org.elasticsearch.ingest.common.RerouteProcessor.TYPE; + public static final String SCRIPT_PROCESSOR_TYPE = org.elasticsearch.ingest.common.ScriptProcessor.TYPE; + public static final String SET_PROCESSOR_TYPE = org.elasticsearch.ingest.common.SetProcessor.TYPE; + public static final String SORT_PROCESSOR_TYPE = org.elasticsearch.ingest.common.SortProcessor.TYPE; + public static final String SPLIT_PROCESSOR_TYPE = org.elasticsearch.ingest.common.SplitProcessor.TYPE; + public static final String TRIM_PROCESSOR_TYPE = org.elasticsearch.ingest.common.TrimProcessor.TYPE; + public static final String URL_DECODE_PROCESSOR_TYPE = org.elasticsearch.ingest.common.URLDecodeProcessor.TYPE; + public static final String UPPERCASE_PROCESSOR_TYPE = org.elasticsearch.ingest.common.UppercaseProcessor.TYPE; + public static final String URI_PARTS_PROCESSOR_TYPE = org.elasticsearch.ingest.common.UriPartsProcessor.TYPE; + + } + private final IngestCommonPlugin delegate; public IngestCommonPluginBridge() { diff --git a/x-pack/plugin/mapper-constant-keyword/src/main/java/module-info.java b/x-pack/plugin/mapper-constant-keyword/src/main/java/module-info.java index 3d8a152451b32..a4089b538c1f0 100644 --- a/x-pack/plugin/mapper-constant-keyword/src/main/java/module-info.java +++ b/x-pack/plugin/mapper-constant-keyword/src/main/java/module-info.java @@ -6,7 +6,7 @@ */ /** Elasticsearch X-Pack Constant Keyword Mapper Plugin. */ -module org.elasticsearch.xpack.constantkeyword { +module org.elasticsearch.constantkeyword { requires org.elasticsearch.base; requires org.elasticsearch.server; requires org.elasticsearch.painless.spi; diff --git a/x-pack/plugin/redact/src/main/java/module-info.java b/x-pack/plugin/redact/src/main/java/module-info.java index 4f10dd62c04e9..d1f9b2f54e887 100644 --- a/x-pack/plugin/redact/src/main/java/module-info.java +++ b/x-pack/plugin/redact/src/main/java/module-info.java @@ -6,7 +6,7 @@ */ /** Elasticsearch Redact Plugin. */ -module org.elasticsearch.xpack.redact { +module org.elasticsearch.redact { requires org.elasticsearch.base; requires org.elasticsearch.server; requires org.elasticsearch.grok; diff --git a/x-pack/plugin/spatial/src/main/java/module-info.java b/x-pack/plugin/spatial/src/main/java/module-info.java index ef1523feddbc7..e97e200685055 100644 --- a/x-pack/plugin/spatial/src/main/java/module-info.java +++ b/x-pack/plugin/spatial/src/main/java/module-info.java @@ -6,7 +6,7 @@ */ /** Elasticsearch X-Pack Spatial Plugin. */ -module org.elasticsearch.xpack.spatial { +module org.elasticsearch.spatial { requires org.elasticsearch.base; requires org.elasticsearch.geo; requires org.elasticsearch.h3; diff --git a/x-pack/plugin/wildcard/src/main/java/module-info.java b/x-pack/plugin/wildcard/src/main/java/module-info.java index 995f7ca79206a..654c84a77e5f8 100644 --- a/x-pack/plugin/wildcard/src/main/java/module-info.java +++ b/x-pack/plugin/wildcard/src/main/java/module-info.java @@ -6,7 +6,7 @@ */ /** Elasticsearch X-Pack Wildcard Plugin. */ -module org.elasticsearch.xpack.wildcard { +module org.elasticsearch.wildcard { requires org.elasticsearch.base; requires org.elasticsearch.server; requires org.elasticsearch.painless.spi; From 7f84caf449acb9e90116db04d1d565020e149c06 Mon Sep 17 00:00:00 2001 From: Mashhur Date: Tue, 22 Jul 2025 23:19:30 -0700 Subject: [PATCH 22/22] Remove unnecessary constant class in the ingest common plugin bridge. --- .../plugins/IngestCommonPluginBridge.java | 72 +++++++++---------- 1 file changed, 32 insertions(+), 40 deletions(-) diff --git a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/IngestCommonPluginBridge.java b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/IngestCommonPluginBridge.java index b8f9d2fcd7342..664481460fbf9 100644 --- a/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/IngestCommonPluginBridge.java +++ b/libs/logstash-bridge/src/main/java/org/elasticsearch/logstashbridge/plugins/IngestCommonPluginBridge.java @@ -19,46 +19,38 @@ */ public class IngestCommonPluginBridge implements IngestPluginBridge { - /** - * An external bridge for processor-related constants - */ - static final class Constants { - private Constants() {} - - public static final String APPEND_PROCESSOR_TYPE = org.elasticsearch.ingest.common.AppendProcessor.TYPE; - public static final String BYTES_PROCESSOR_TYPE = org.elasticsearch.ingest.common.BytesProcessor.TYPE; - public static final String COMMUNITY_ID_PROCESSOR_TYPE = org.elasticsearch.ingest.common.CommunityIdProcessor.TYPE; - public static final String CONVERT_PROCESSOR_TYPE = org.elasticsearch.ingest.common.ConvertProcessor.TYPE; - public static final String CSV_PROCESSOR_TYPE = org.elasticsearch.ingest.common.CsvProcessor.TYPE; - public static final String DATE_INDEX_NAME_PROCESSOR_TYPE = org.elasticsearch.ingest.common.DateIndexNameProcessor.TYPE; - public static final String DATE_PROCESSOR_TYPE = org.elasticsearch.ingest.common.DateProcessor.TYPE; - public static final String DISSECT_PROCESSOR_TYPE = org.elasticsearch.ingest.common.DissectProcessor.TYPE; - public static final String DROP_PROCESSOR_TYPE = org.elasticsearch.ingest.DropProcessor.TYPE; - public static final String FAIL_PROCESSOR_TYPE = org.elasticsearch.ingest.common.FailProcessor.TYPE; - public static final String FINGERPRINT_PROCESSOR_TYPE = org.elasticsearch.ingest.common.FingerprintProcessor.TYPE; - public static final String FOR_EACH_PROCESSOR_TYPE = org.elasticsearch.ingest.common.ForEachProcessor.TYPE; - public static final String GROK_PROCESSOR_TYPE = org.elasticsearch.ingest.common.GrokProcessor.TYPE; - public static final String GSUB_PROCESSOR_TYPE = org.elasticsearch.ingest.common.GsubProcessor.TYPE; - public static final String HTML_STRIP_PROCESSOR_TYPE = org.elasticsearch.ingest.common.HtmlStripProcessor.TYPE; - public static final String JOIN_PROCESSOR_TYPE = org.elasticsearch.ingest.common.JoinProcessor.TYPE; - public static final String JSON_PROCESSOR_TYPE = org.elasticsearch.ingest.common.JsonProcessor.TYPE; - public static final String KEY_VALUE_PROCESSOR_TYPE = org.elasticsearch.ingest.common.KeyValueProcessor.TYPE; - public static final String LOWERCASE_PROCESSOR_TYPE = org.elasticsearch.ingest.common.LowercaseProcessor.TYPE; - public static final String NETWORK_DIRECTION_PROCESSOR_TYPE = org.elasticsearch.ingest.common.NetworkDirectionProcessor.TYPE; - public static final String REGISTERED_DOMAIN_PROCESSOR_TYPE = org.elasticsearch.ingest.common.RegisteredDomainProcessor.TYPE; - public static final String REMOVE_PROCESSOR_TYPE = org.elasticsearch.ingest.common.RemoveProcessor.TYPE; - public static final String RENAME_PROCESSOR_TYPE = org.elasticsearch.ingest.common.RenameProcessor.TYPE; - public static final String REROUTE_PROCESSOR_TYPE = org.elasticsearch.ingest.common.RerouteProcessor.TYPE; - public static final String SCRIPT_PROCESSOR_TYPE = org.elasticsearch.ingest.common.ScriptProcessor.TYPE; - public static final String SET_PROCESSOR_TYPE = org.elasticsearch.ingest.common.SetProcessor.TYPE; - public static final String SORT_PROCESSOR_TYPE = org.elasticsearch.ingest.common.SortProcessor.TYPE; - public static final String SPLIT_PROCESSOR_TYPE = org.elasticsearch.ingest.common.SplitProcessor.TYPE; - public static final String TRIM_PROCESSOR_TYPE = org.elasticsearch.ingest.common.TrimProcessor.TYPE; - public static final String URL_DECODE_PROCESSOR_TYPE = org.elasticsearch.ingest.common.URLDecodeProcessor.TYPE; - public static final String UPPERCASE_PROCESSOR_TYPE = org.elasticsearch.ingest.common.UppercaseProcessor.TYPE; - public static final String URI_PARTS_PROCESSOR_TYPE = org.elasticsearch.ingest.common.UriPartsProcessor.TYPE; - - } + public static final String APPEND_PROCESSOR_TYPE = org.elasticsearch.ingest.common.AppendProcessor.TYPE; + public static final String BYTES_PROCESSOR_TYPE = org.elasticsearch.ingest.common.BytesProcessor.TYPE; + public static final String COMMUNITY_ID_PROCESSOR_TYPE = org.elasticsearch.ingest.common.CommunityIdProcessor.TYPE; + public static final String CONVERT_PROCESSOR_TYPE = org.elasticsearch.ingest.common.ConvertProcessor.TYPE; + public static final String CSV_PROCESSOR_TYPE = org.elasticsearch.ingest.common.CsvProcessor.TYPE; + public static final String DATE_INDEX_NAME_PROCESSOR_TYPE = org.elasticsearch.ingest.common.DateIndexNameProcessor.TYPE; + public static final String DATE_PROCESSOR_TYPE = org.elasticsearch.ingest.common.DateProcessor.TYPE; + public static final String DISSECT_PROCESSOR_TYPE = org.elasticsearch.ingest.common.DissectProcessor.TYPE; + public static final String DROP_PROCESSOR_TYPE = org.elasticsearch.ingest.DropProcessor.TYPE; + public static final String FAIL_PROCESSOR_TYPE = org.elasticsearch.ingest.common.FailProcessor.TYPE; + public static final String FINGERPRINT_PROCESSOR_TYPE = org.elasticsearch.ingest.common.FingerprintProcessor.TYPE; + public static final String FOR_EACH_PROCESSOR_TYPE = org.elasticsearch.ingest.common.ForEachProcessor.TYPE; + public static final String GROK_PROCESSOR_TYPE = org.elasticsearch.ingest.common.GrokProcessor.TYPE; + public static final String GSUB_PROCESSOR_TYPE = org.elasticsearch.ingest.common.GsubProcessor.TYPE; + public static final String HTML_STRIP_PROCESSOR_TYPE = org.elasticsearch.ingest.common.HtmlStripProcessor.TYPE; + public static final String JOIN_PROCESSOR_TYPE = org.elasticsearch.ingest.common.JoinProcessor.TYPE; + public static final String JSON_PROCESSOR_TYPE = org.elasticsearch.ingest.common.JsonProcessor.TYPE; + public static final String KEY_VALUE_PROCESSOR_TYPE = org.elasticsearch.ingest.common.KeyValueProcessor.TYPE; + public static final String LOWERCASE_PROCESSOR_TYPE = org.elasticsearch.ingest.common.LowercaseProcessor.TYPE; + public static final String NETWORK_DIRECTION_PROCESSOR_TYPE = org.elasticsearch.ingest.common.NetworkDirectionProcessor.TYPE; + public static final String REGISTERED_DOMAIN_PROCESSOR_TYPE = org.elasticsearch.ingest.common.RegisteredDomainProcessor.TYPE; + public static final String REMOVE_PROCESSOR_TYPE = org.elasticsearch.ingest.common.RemoveProcessor.TYPE; + public static final String RENAME_PROCESSOR_TYPE = org.elasticsearch.ingest.common.RenameProcessor.TYPE; + public static final String REROUTE_PROCESSOR_TYPE = org.elasticsearch.ingest.common.RerouteProcessor.TYPE; + public static final String SCRIPT_PROCESSOR_TYPE = org.elasticsearch.ingest.common.ScriptProcessor.TYPE; + public static final String SET_PROCESSOR_TYPE = org.elasticsearch.ingest.common.SetProcessor.TYPE; + public static final String SORT_PROCESSOR_TYPE = org.elasticsearch.ingest.common.SortProcessor.TYPE; + public static final String SPLIT_PROCESSOR_TYPE = org.elasticsearch.ingest.common.SplitProcessor.TYPE; + public static final String TRIM_PROCESSOR_TYPE = org.elasticsearch.ingest.common.TrimProcessor.TYPE; + public static final String URL_DECODE_PROCESSOR_TYPE = org.elasticsearch.ingest.common.URLDecodeProcessor.TYPE; + public static final String UPPERCASE_PROCESSOR_TYPE = org.elasticsearch.ingest.common.UppercaseProcessor.TYPE; + public static final String URI_PARTS_PROCESSOR_TYPE = org.elasticsearch.ingest.common.UriPartsProcessor.TYPE; private final IngestCommonPlugin delegate;