diff --git a/.ci/init.gradle b/.ci/init.gradle
index e59541fe6edd..28a04308d184 100644
--- a/.ci/init.gradle
+++ b/.ci/init.gradle
@@ -10,6 +10,8 @@ initscript {
}
}
+boolean USE_ARTIFACTORY=false
+
['VAULT_ADDR', 'VAULT_ROLE_ID', 'VAULT_SECRET_ID'].each {
if (System.env."$it" == null) {
throw new GradleException("$it must be set!")
@@ -37,39 +39,44 @@ final Vault vault = new Vault(
)
.withRetries(5, 1000)
-final Map artifactoryCredentials = vault.logical()
- .read("secret/elasticsearch-ci/artifactory.elstc.co")
- .getData();
-logger.info("Using elastic artifactory repos")
-Closure configCache = {
- return {
- name "artifactory-gradle-release"
- url "https://artifactory.elstc.co/artifactory/gradle-release"
- credentials {
- username artifactoryCredentials.get("username")
- password artifactoryCredentials.get("token")
+if (USE_ARTIFACTORY) {
+ final Map artifactoryCredentials = vault.logical()
+ .read("secret/elasticsearch-ci/artifactory.elstc.co")
+ .getData();
+ logger.info("Using elastic artifactory repos")
+ Closure configCache = {
+ return {
+ name "artifactory-gradle-release"
+ url "https://artifactory.elstc.co/artifactory/gradle-release"
+ credentials {
+ username artifactoryCredentials.get("username")
+ password artifactoryCredentials.get("token")
+ }
}
}
-}
-settingsEvaluated { settings ->
- settings.pluginManagement {
- repositories {
- maven configCache()
- }
- }
-}
-projectsLoaded {
- allprojects {
- buildscript {
+ settingsEvaluated { settings ->
+ settings.pluginManagement {
repositories {
maven configCache()
}
}
- repositories {
- maven configCache()
+ }
+ projectsLoaded {
+ allprojects {
+ buildscript {
+ repositories {
+ maven configCache()
+ }
+ }
+ repositories {
+ maven configCache()
+ }
}
}
+}
+
+projectsLoaded {
rootProject {
project.pluginManager.withPlugin('com.gradle.build-scan') {
buildScan.server = 'https://gradle-enterprise.elastic.co'
@@ -77,6 +84,7 @@ projectsLoaded {
}
}
+
final String buildCacheUrl = System.getProperty('org.elasticsearch.build.cache.url')
final boolean buildCachePush = Boolean.valueOf(System.getProperty('org.elasticsearch.build.cache.push', 'false'))
diff --git a/.eclipseformat.xml b/.eclipseformat.xml
new file mode 100644
index 000000000000..4df52d1b6036
--- /dev/null
+++ b/.eclipseformat.xml
@@ -0,0 +1,362 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index c2bae4e20625..f96ef5dd1d5e 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -155,19 +155,68 @@ For Eclipse, go to `Preferences->Java->Installed JREs` and add `-ea` to
### Java Language Formatting Guidelines
+Java files in the Elasticsearch codebase are formatted with the Eclipse JDT
+formatter, using the [Spotless
+Gradle](https://github.com/diffplug/spotless/tree/master/plugin-gradle)
+plugin. This plugin is configured on a project-by-project basis, via
+`build.gradle` in the root of the repository. So long as at least one
+project is configured, the formatting check can be run explicitly with:
+
+ ./gradlew spotlessJavaCheck
+
+The code can be formatted with:
+
+ ./gradlew spotlessApply
+
+These tasks can also be run for specific subprojects, e.g.
+
+ ./gradlew server:spotlessJavaCheck
+
Please follow these formatting guidelines:
* Java indent is 4 spaces
* Line width is 140 characters
-* Lines of code surrounded by `// tag` and `// end` comments are included in the
-documentation and should only be 76 characters wide not counting
-leading indentation
-* The rest is left to Java coding standards
-* Disable “auto-format on save” to prevent unnecessary format changes. This makes reviews much harder as it generates unnecessary formatting changes. If your IDE supports formatting only modified chunks that is fine to do.
-* Wildcard imports (`import foo.bar.baz.*`) are forbidden and will cause the build to fail. This can be done automatically by your IDE:
- * Eclipse: `Preferences->Java->Code Style->Organize Imports`. There are two boxes labeled "`Number of (static )? imports needed for .*`". Set their values to 99999 or some other absurdly high value.
- * IntelliJ: `Preferences/Settings->Editor->Code Style->Java->Imports`. There are two configuration options: `Class count to use import with '*'` and `Names count to use static import with '*'`. Set their values to 99999 or some other absurdly high value.
-* Don't worry too much about import order. Try not to change it but don't worry about fighting your IDE to stop it from doing so.
+* Lines of code surrounded by `// tag` and `// end` comments are included
+ in the documentation and should only be 76 characters wide not counting
+ leading indentation
+* Wildcard imports (`import foo.bar.baz.*`) are forbidden and will cause
+ the build to fail. This can be done automatically by your IDE:
+ * Eclipse: `Preferences->Java->Code Style->Organize Imports`. There are
+ two boxes labeled "`Number of (static )? imports needed for .*`". Set
+ their values to 99999 or some other absurdly high value.
+ * IntelliJ: `Preferences/Settings->Editor->Code Style->Java->Imports`.
+ There are two configuration options: `Class count to use import with
+ '*'` and `Names count to use static import with '*'`. Set their values
+ to 99999 or some other absurdly high value.
+
+#### Editor / IDE Support
+
+Eclipse IDEs can import the file [elasticsearch.eclipseformat.xml]
+directly.
+
+IntelliJ IDEs can
+[import](https://blog.jetbrains.com/idea/2014/01/intellij-idea-13-importing-code-formatter-settings-from-eclipse/)
+the same settings file, and / or use the [Eclipse Code
+Formatter](https://plugins.jetbrains.com/plugin/6546-eclipse-code-formatter)
+plugin.
+
+You can also tell Spotless to [format a specific
+file](https://github.com/diffplug/spotless/tree/master/plugin-gradle#can-i-apply-spotless-to-specific-files)
+from the command line.
+
+#### Formatting failures
+
+Sometimes Spotless will report a "misbehaving rule which can't make up its
+mind" and will recommend enabling the `paddedCell()` setting. If you
+enabled this settings and run the format check again,
+Spotless will write files to
+`$PROJECT/build/spotless-diagnose-java/` to aid diagnosis. It writes
+different copies of the formatted files, so that you can see how they
+differ and infer what is the problem.
+
+The `paddedCell() option is disabled for normal operation in order to
+detect any misbehaviour. You can enabled the option from the command line
+by running Gradle with `-Dspotless.paddedcell`.
### License Headers
diff --git a/build.gradle b/build.gradle
index a826ecb4475e..34d43545bce2 100644
--- a/build.gradle
+++ b/build.gradle
@@ -35,6 +35,7 @@ plugins {
id 'com.gradle.build-scan' version '2.4'
id 'lifecycle-base'
id 'elasticsearch.global-build-info'
+ id "com.diffplug.gradle.spotless" version "3.24.2" apply false
}
apply plugin: 'nebula.info-scm'
@@ -98,6 +99,34 @@ subprojects {
plugins.withType(BuildPlugin).whenPluginAdded {
project.licenseFile = project.rootProject.file('licenses/APACHE-LICENSE-2.0.txt')
project.noticeFile = project.rootProject.file('NOTICE.txt')
+
+ // Projects that should be formatted and checked with Spotless are
+ // listed here, by project path. Once the number of formatted projects
+ // is greater than the number of unformatted projects, this can be
+ // switched to an exclude list, and eventualy removed completely.
+ def projectPathsToFormat = [
+ // ':build-tools'
+ ]
+
+ if (projectPathsToFormat.contains(project.path)) {
+ project.apply plugin: "com.diffplug.gradle.spotless"
+
+ spotless {
+ java {
+
+ removeUnusedImports()
+ eclipse().configFile rootProject.file('.eclipseformat.xml')
+ trimTrailingWhitespace()
+
+ // See CONTRIBUTING.md for details of when to enabled this.
+ if (System.getProperty('spotless.paddedcell') != null) {
+ paddedCell()
+ }
+ }
+ }
+
+ precommit.dependsOn 'spotlessJavaCheck'
+ }
}
}
diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle
index e9c21ce68341..293d2ccd3571 100644
--- a/buildSrc/build.gradle
+++ b/buildSrc/build.gradle
@@ -112,7 +112,7 @@ dependencies {
compile 'com.netflix.nebula:gradle-extra-configurations-plugin:3.0.3'
compile 'com.netflix.nebula:nebula-publishing-plugin:4.4.4'
compile 'com.netflix.nebula:gradle-info-plugin:3.0.3'
- compile 'org.eclipse.jgit:org.eclipse.jgit:3.2.0.201312181205-r'
+ compile 'org.eclipse.jgit:org.eclipse.jgit:5.5.0.201909110433-r'
compile 'com.perforce:p4java:2012.3.551082' // THIS IS SUPPOSED TO BE OPTIONAL IN THE FUTURE....
compile 'org.apache.rat:apache-rat:0.11'
compile "org.elasticsearch:jna:4.5.1"
diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/doc/RestTestsFromSnippetsTask.groovy b/buildSrc/src/main/groovy/org/elasticsearch/gradle/doc/RestTestsFromSnippetsTask.groovy
index 54db2cd71628..b42bc83b4725 100644
--- a/buildSrc/src/main/groovy/org/elasticsearch/gradle/doc/RestTestsFromSnippetsTask.groovy
+++ b/buildSrc/src/main/groovy/org/elasticsearch/gradle/doc/RestTestsFromSnippetsTask.groovy
@@ -206,8 +206,11 @@ public class RestTestsFromSnippetsTask extends SnippetsTask {
response(snippet)
return
}
- if (snippet.test || snippet.console ||
- snippet.language == 'console') {
+ if ((snippet.language == 'js') && (snippet.console)) {
+ throw new InvalidUserDataException(
+ "$snippet: Use `[source,console]` instead of `// CONSOLE`.")
+ }
+ if (snippet.test || snippet.language == 'console') {
test(snippet)
previousTest = snippet
return
diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/plugin/PluginBuildPlugin.groovy b/buildSrc/src/main/groovy/org/elasticsearch/gradle/plugin/PluginBuildPlugin.groovy
index 45752e8ace0a..9e9f93b22ddd 100644
--- a/buildSrc/src/main/groovy/org/elasticsearch/gradle/plugin/PluginBuildPlugin.groovy
+++ b/buildSrc/src/main/groovy/org/elasticsearch/gradle/plugin/PluginBuildPlugin.groovy
@@ -50,6 +50,7 @@ class PluginBuildPlugin implements Plugin {
@Override
void apply(Project project) {
project.pluginManager.apply(BuildPlugin)
+ project.pluginManager.apply(TestClustersPlugin)
PluginPropertiesExtension extension = project.extensions.create(PLUGIN_EXTENSION_NAME, PluginPropertiesExtension, project)
configureDependencies(project)
diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/RestIntegTestTask.groovy b/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/RestIntegTestTask.groovy
index e3df285503c2..365f6b82e664 100644
--- a/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/RestIntegTestTask.groovy
+++ b/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/RestIntegTestTask.groovy
@@ -26,35 +26,18 @@ import org.elasticsearch.gradle.tool.Boilerplate
import org.elasticsearch.gradle.tool.ClasspathUtils
import org.gradle.api.DefaultTask
import org.gradle.api.Task
-import org.gradle.api.execution.TaskExecutionAdapter
import org.gradle.api.file.FileCopyDetails
-import org.gradle.api.logging.Logger
-import org.gradle.api.logging.Logging
import org.gradle.api.tasks.Copy
import org.gradle.api.tasks.Input
-import org.gradle.api.tasks.TaskState
-import org.gradle.api.tasks.options.Option
import org.gradle.api.tasks.testing.Test
import org.gradle.plugins.ide.idea.IdeaPlugin
-
-import java.nio.charset.StandardCharsets
-import java.nio.file.Files
-import java.util.stream.Stream
-
/**
* A wrapper task around setting up a cluster and running rest tests.
*/
class RestIntegTestTask extends DefaultTask {
- private static final Logger LOGGER = Logging.getLogger(RestIntegTestTask)
-
- protected ClusterConfiguration clusterConfig
-
protected Test runner
- /** Info about nodes in the integ test cluster. Note this is *not* available until runtime. */
- List nodes
-
/** Flag indicating whether the rest tests in the rest spec should be run. */
@Input
Boolean includePackaged = false
@@ -62,18 +45,13 @@ class RestIntegTestTask extends DefaultTask {
RestIntegTestTask() {
runner = project.tasks.create("${name}Runner", RestTestRunnerTask.class)
super.dependsOn(runner)
- boolean usesTestclusters = project.plugins.hasPlugin(TestClustersPlugin.class)
- if (usesTestclusters == false) {
- clusterConfig = project.extensions.create("${name}Cluster", ClusterConfiguration.class, project)
- runner.outputs.doNotCacheIf("Caching is disabled when using ClusterFormationTasks", { true })
- } else {
- project.testClusters {
+
+ project.testClusters {
"$name" {
javaHome = project.file(project.ext.runtimeJavaHome)
}
- }
- runner.useCluster project.testClusters."$name"
}
+ runner.useCluster project.testClusters."$name"
runner.include('**/*IT.class')
runner.systemProperty('tests.rest.load_packaged', 'false')
@@ -82,40 +60,11 @@ class RestIntegTestTask extends DefaultTask {
if (System.getProperty("tests.cluster") != null || System.getProperty("tests.clustername") != null) {
throw new IllegalArgumentException("tests.rest.cluster, tests.cluster, and tests.clustername must all be null or non-null")
}
- if (usesTestclusters == true) {
- ElasticsearchCluster cluster = project.testClusters."${name}"
- runner.nonInputProperties.systemProperty('tests.rest.cluster', "${-> cluster.allHttpSocketURI.join(",")}")
- runner.nonInputProperties.systemProperty('tests.cluster', "${-> cluster.transportPortURI}")
- runner.nonInputProperties.systemProperty('tests.clustername', "${-> cluster.getName()}")
- } else {
- // we pass all nodes to the rest cluster to allow the clients to round-robin between them
- // this is more realistic than just talking to a single node
- runner.nonInputProperties.systemProperty('tests.rest.cluster', "${-> nodes.collect { it.httpUri() }.join(",")}")
- runner.nonInputProperties.systemProperty('tests.config.dir', "${-> nodes[0].pathConf}")
- // TODO: our "client" qa tests currently use the rest-test plugin. instead they should have their own plugin
- // that sets up the test cluster and passes this transport uri instead of http uri. Until then, we pass
- // both as separate sysprops
- runner.nonInputProperties.systemProperty('tests.cluster', "${-> nodes[0].transportUri()}")
- runner.nonInputProperties.systemProperty('tests.clustername', "${-> nodes[0].clusterName}")
- // dump errors and warnings from cluster log on failure
- TaskExecutionAdapter logDumpListener = new TaskExecutionAdapter() {
- @Override
- void afterExecute(Task task, TaskState state) {
- if (task == runner && state.failure != null) {
- for (NodeInfo nodeInfo : nodes) {
- printLogExcerpt(nodeInfo)
- }
- }
- }
- }
- runner.doFirst {
- project.gradle.addListener(logDumpListener)
- }
- runner.doLast {
- project.gradle.removeListener(logDumpListener)
- }
- }
+ ElasticsearchCluster cluster = project.testClusters."${name}"
+ runner.nonInputProperties.systemProperty('tests.rest.cluster', "${-> cluster.allHttpSocketURI.join(",")}")
+ runner.nonInputProperties.systemProperty('tests.cluster', "${-> cluster.transportPortURI}")
+ runner.nonInputProperties.systemProperty('tests.clustername', "${-> cluster.getName()}")
} else {
if (System.getProperty("tests.cluster") == null || System.getProperty("tests.clustername") == null) {
throw new IllegalArgumentException("tests.rest.cluster, tests.cluster, and tests.clustername must all be null or non-null")
@@ -137,13 +86,6 @@ class RestIntegTestTask extends DefaultTask {
runner.enabled = false
return // no need to add cluster formation tasks if the task won't run!
}
- if (usesTestclusters == false) {
- // only create the cluster if needed as otherwise an external cluster to use was specified
- if (System.getProperty("tests.rest.cluster") == null) {
- nodes = ClusterFormationTasks.setup(project, "${name}Cluster", runner, clusterConfig)
- }
- super.dependsOn(runner.finalizedBy)
- }
}
}
@@ -152,17 +94,6 @@ class RestIntegTestTask extends DefaultTask {
includePackaged = include
}
- @Option(
- option = "debug-jvm",
- description = "Enable debugging configuration, to allow attaching a debugger to elasticsearch."
- )
- public void setDebug(boolean enabled) {
- clusterConfig.debug = enabled;
- }
-
- public List getNodes() {
- return nodes
- }
@Override
public Task dependsOn(Object... dependencies) {
@@ -189,44 +120,6 @@ class RestIntegTestTask extends DefaultTask {
project.tasks.getByName("${name}Runner").configure(configure)
}
- /** Print out an excerpt of the log from the given node. */
- protected static void printLogExcerpt(NodeInfo nodeInfo) {
- File logFile = new File(nodeInfo.homeDir, "logs/${nodeInfo.clusterName}.log")
- LOGGER.lifecycle("\nCluster ${nodeInfo.clusterName} - node ${nodeInfo.nodeNum} log excerpt:")
- LOGGER.lifecycle("(full log at ${logFile})")
- LOGGER.lifecycle('-----------------------------------------')
- Stream stream = Files.lines(logFile.toPath(), StandardCharsets.UTF_8)
- try {
- boolean inStartup = true
- boolean inExcerpt = false
- int linesSkipped = 0
- for (String line : stream) {
- if (line.startsWith("[")) {
- inExcerpt = false // clear with the next log message
- }
- if (line =~ /(\[WARN *\])|(\[ERROR *\])/) {
- inExcerpt = true // show warnings and errors
- }
- if (inStartup || inExcerpt) {
- if (linesSkipped != 0) {
- LOGGER.lifecycle("... SKIPPED ${linesSkipped} LINES ...")
- }
- LOGGER.lifecycle(line)
- linesSkipped = 0
- } else {
- ++linesSkipped
- }
- if (line =~ /recovered \[\d+\] indices into cluster_state/) {
- inStartup = false
- }
- }
- } finally {
- stream.close()
- }
- LOGGER.lifecycle('=========================================')
-
- }
-
Copy createCopyRestSpecTask() {
Boilerplate.maybeCreate(project.configurations, 'restSpec') {
project.dependencies.add(
diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/RestTestPlugin.groovy b/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/RestTestPlugin.groovy
index 071b7b3db783..3e56046e49f4 100644
--- a/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/RestTestPlugin.groovy
+++ b/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/RestTestPlugin.groovy
@@ -19,6 +19,7 @@
package org.elasticsearch.gradle.test
import org.elasticsearch.gradle.BuildPlugin
+import org.elasticsearch.gradle.testclusters.TestClustersPlugin
import org.gradle.api.InvalidUserDataException
import org.gradle.api.Plugin
import org.gradle.api.Project
@@ -43,6 +44,7 @@ public class RestTestPlugin implements Plugin {
+ 'elasticsearch.standalone-rest-test')
}
+ project.pluginManager.apply(TestClustersPlugin)
RestIntegTestTask integTest = project.tasks.create('integTest', RestIntegTestTask.class)
integTest.description = 'Runs rest tests against an elasticsearch cluster.'
integTest.group = JavaBasePlugin.VERIFICATION_GROUP
diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/StandaloneRestTestPlugin.groovy b/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/StandaloneRestTestPlugin.groovy
index cfe610fa568c..539b6fa7632d 100644
--- a/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/StandaloneRestTestPlugin.groovy
+++ b/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/StandaloneRestTestPlugin.groovy
@@ -20,13 +20,12 @@
package org.elasticsearch.gradle.test
-
import groovy.transform.CompileStatic
import org.elasticsearch.gradle.BuildPlugin
import org.elasticsearch.gradle.ExportElasticsearchBuildResourcesTask
-import org.elasticsearch.gradle.VersionProperties
import org.elasticsearch.gradle.info.GlobalBuildInfoPlugin
import org.elasticsearch.gradle.precommit.PrecommitTasks
+import org.elasticsearch.gradle.testclusters.TestClustersPlugin
import org.gradle.api.InvalidUserDataException
import org.gradle.api.JavaVersion
import org.gradle.api.Plugin
@@ -42,7 +41,6 @@ import org.gradle.api.tasks.compile.JavaCompile
import org.gradle.api.tasks.testing.Test
import org.gradle.plugins.ide.eclipse.model.EclipseModel
import org.gradle.plugins.ide.idea.model.IdeaModel
-
/**
* Configures the build to compile tests against Elasticsearch's test framework
* and run REST tests. Use BuildPlugin if you want to build main code as well
@@ -60,6 +58,7 @@ class StandaloneRestTestPlugin implements Plugin {
}
project.rootProject.pluginManager.apply(GlobalBuildInfoPlugin)
project.pluginManager.apply(JavaBasePlugin)
+ project.pluginManager.apply(TestClustersPlugin)
project.getTasks().create("buildResources", ExportElasticsearchBuildResourcesTask)
BuildPlugin.configureRepositories(project)
diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/TestWithDependenciesPlugin.groovy b/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/TestWithDependenciesPlugin.groovy
index 7e370fd69e2d..35c143c1421a 100644
--- a/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/TestWithDependenciesPlugin.groovy
+++ b/buildSrc/src/main/groovy/org/elasticsearch/gradle/test/TestWithDependenciesPlugin.groovy
@@ -56,7 +56,8 @@ class TestWithDependenciesPlugin implements Plugin {
private static addPluginResources(Project project, Project pluginProject) {
String outputDir = "${project.buildDir}/generated-resources/${pluginProject.name}"
- String taskName = ClusterFormationTasks.pluginTaskName("copy", pluginProject.name, "Metadata")
+ String camelName = pluginProject.name.replaceAll(/-(\w)/) { _, c -> c.toUpperCase(Locale.ROOT) }
+ String taskName = "copy" + camelName[0].toUpperCase(Locale.ROOT) + camelName.substring(1) + "Metadata"
Copy copyPluginMetadata = project.tasks.create(taskName, Copy.class)
copyPluginMetadata.into(outputDir)
copyPluginMetadata.from(pluginProject.tasks.pluginProperties)
diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/TestingConventionsTasks.java b/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/TestingConventionsTasks.java
index 95ad323ceda8..2f5028315a42 100644
--- a/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/TestingConventionsTasks.java
+++ b/buildSrc/src/main/java/org/elasticsearch/gradle/precommit/TestingConventionsTasks.java
@@ -70,19 +70,13 @@ public class TestingConventionsTasks extends DefaultTask {
}
@Input
- public Map> classFilesPerEnabledTask(FileTree testClassFiles) {
- Map> collector = new HashMap<>();
-
- // Gradle Test
- collector.putAll(
- getProject().getTasks().withType(Test.class).stream()
- .filter(Task::getEnabled)
- .collect(Collectors.toMap(
- Task::getPath,
- task -> task.getCandidateClassFiles().getFiles()
- ))
- );
- return Collections.unmodifiableMap(collector);
+ public Map> getClassFilesPerEnabledTask() {
+ return getProject().getTasks().withType(Test.class).stream()
+ .filter(Task::getEnabled)
+ .collect(Collectors.toMap(
+ Task::getPath,
+ task -> task.getCandidateClassFiles().getFiles()
+ ));
}
@Input
@@ -154,7 +148,7 @@ public class TestingConventionsTasks extends DefaultTask {
.collect(Collectors.toList())
).getAsFileTree();
- final Map> classFilesPerTask = classFilesPerEnabledTask(allTestClassFiles);
+ final Map> classFilesPerTask = getClassFilesPerEnabledTask();
final Map>> testClassesPerTask = classFilesPerTask.entrySet().stream()
.collect(
diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/ElasticsearchNode.java b/buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/ElasticsearchNode.java
index 6a85f9e1c4bf..587d5484fd80 100644
--- a/buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/ElasticsearchNode.java
+++ b/buildSrc/src/main/java/org/elasticsearch/gradle/testclusters/ElasticsearchNode.java
@@ -968,12 +968,6 @@ public class ElasticsearchNode implements TestClusterConfiguration {
// Don't wait for state, just start up quickly. This will also allow new and old nodes in the BWC case to become the master
defaultConfig.put("discovery.initial_state_timeout", "0s");
- // TODO: Remove these once https://github.com/elastic/elasticsearch/issues/46091 is fixed
- defaultConfig.put("logger.org.elasticsearch.action.support.master.TransportMasterNodeAction", "TRACE");
- defaultConfig.put("logger.org.elasticsearch.cluster.metadata.MetaDataCreateIndexService", "TRACE");
- defaultConfig.put("logger.org.elasticsearch.cluster.service", "DEBUG");
- defaultConfig.put("logger.org.elasticsearch.cluster.coordination", "DEBUG");
- defaultConfig.put("logger.org.elasticsearch.gateway.MetaStateService", "TRACE");
if (getVersion().getMajor() >= 8) {
defaultConfig.put("cluster.service.slow_task_logging_threshold", "5s");
defaultConfig.put("cluster.service.slow_master_task_logging_threshold", "5s");
diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/testfixtures/TestFixtureExtension.java b/buildSrc/src/main/java/org/elasticsearch/gradle/testfixtures/TestFixtureExtension.java
index b4ddcf0bed18..1521b7971333 100644
--- a/buildSrc/src/main/java/org/elasticsearch/gradle/testfixtures/TestFixtureExtension.java
+++ b/buildSrc/src/main/java/org/elasticsearch/gradle/testfixtures/TestFixtureExtension.java
@@ -18,20 +18,65 @@
*/
package org.elasticsearch.gradle.testfixtures;
+import org.gradle.api.GradleException;
import org.gradle.api.NamedDomainObjectContainer;
import org.gradle.api.Project;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
+
public class TestFixtureExtension {
private final Project project;
final NamedDomainObjectContainer fixtures;
+ final Map serviceToProjectUseMap = new HashMap<>();
public TestFixtureExtension(Project project) {
this.project = project;
this.fixtures = project.container(Project.class);
}
+ public void useFixture() {
+ useFixture(this.project.getPath());
+ }
+
public void useFixture(String path) {
+ addFixtureProject(path);
+ serviceToProjectUseMap.put(path, this.project.getPath());
+ }
+
+ public void useFixture(String path, String serviceName) {
+ addFixtureProject(path);
+ String key = getServiceNameKey(path, serviceName);
+ serviceToProjectUseMap.put(key, this.project.getPath());
+
+ Optional otherProject = this.findOtherProjectUsingService(key);
+ if (otherProject.isPresent()) {
+ throw new GradleException(
+ "Projects " + otherProject.get() + " and " + this.project.getPath() + " both claim the "+ serviceName +
+ " service defined in the docker-compose.yml of " + path + "This is not supported because it breaks " +
+ "running in parallel. Configure dedicated services for each project and use those instead."
+ );
+ }
+ }
+
+ private String getServiceNameKey(String fixtureProjectPath, String serviceName) {
+ return fixtureProjectPath + "::" + serviceName;
+ }
+
+ private Optional findOtherProjectUsingService(String serviceName) {
+ return this.project.getRootProject().getAllprojects().stream()
+ .filter(p -> p.equals(this.project) == false)
+ .filter(p -> p.getExtensions().findByType(TestFixtureExtension.class) != null)
+ .map(project -> project.getExtensions().getByType(TestFixtureExtension.class))
+ .flatMap(ext -> ext.serviceToProjectUseMap.entrySet().stream())
+ .filter(entry -> entry.getKey().equals(serviceName))
+ .map(Map.Entry::getValue)
+ .findAny();
+ }
+
+ private void addFixtureProject(String path) {
Project fixtureProject = this.project.findProject(path);
if (fixtureProject == null) {
throw new IllegalArgumentException("Could not find test fixture " + fixtureProject);
@@ -42,6 +87,20 @@ public class TestFixtureExtension {
);
}
fixtures.add(fixtureProject);
+ // Check for exclusive access
+ Optional otherProject = this.findOtherProjectUsingService(path);
+ if (otherProject.isPresent()) {
+ throw new GradleException("Projects " + otherProject.get() + " and " + this.project.getPath() + " both " +
+ "claim all services from " + path + ". This is not supported because it breaks running in parallel. " +
+ "Configure specific services in docker-compose.yml for each and add the service name to `useFixture`"
+ );
+ }
}
+ boolean isServiceRequired(String serviceName, String fixtureProject) {
+ if (serviceToProjectUseMap.containsKey(fixtureProject)) {
+ return true;
+ }
+ return serviceToProjectUseMap.containsKey(getServiceNameKey(fixtureProject, serviceName));
+ }
}
diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/testfixtures/TestFixturesPlugin.java b/buildSrc/src/main/java/org/elasticsearch/gradle/testfixtures/TestFixturesPlugin.java
index 556e938875e2..93c91cbee51d 100644
--- a/buildSrc/src/main/java/org/elasticsearch/gradle/testfixtures/TestFixturesPlugin.java
+++ b/buildSrc/src/main/java/org/elasticsearch/gradle/testfixtures/TestFixturesPlugin.java
@@ -20,6 +20,7 @@ package org.elasticsearch.gradle.testfixtures;
import com.avast.gradle.dockercompose.ComposeExtension;
import com.avast.gradle.dockercompose.DockerComposePlugin;
+import com.avast.gradle.dockercompose.ServiceInfo;
import com.avast.gradle.dockercompose.tasks.ComposeUp;
import org.elasticsearch.gradle.OS;
import org.elasticsearch.gradle.SystemPropertyCommandLineArgumentProvider;
@@ -58,9 +59,6 @@ public class TestFixturesPlugin implements Plugin {
ext.set("testFixturesDir", testfixturesDir);
if (project.file(DOCKER_COMPOSE_YML).exists()) {
- // the project that defined a test fixture can also use it
- extension.fixtures.add(project);
-
Task buildFixture = project.getTasks().create("buildFixture");
Task pullFixture = project.getTasks().create("pullFixture");
Task preProcessFixture = project.getTasks().create("preProcessFixture");
@@ -106,6 +104,7 @@ public class TestFixturesPlugin implements Plugin {
configureServiceInfoForTask(
postProcessFixture,
project,
+ false,
(name, port) -> postProcessFixture.getExtensions()
.getByType(ExtraPropertiesExtension.class).set(name, port)
);
@@ -144,6 +143,7 @@ public class TestFixturesPlugin implements Plugin {
configureServiceInfoForTask(
task,
fixtureProject,
+ true,
(name, host) ->
task.getExtensions().getByType(SystemPropertyCommandLineArgumentProvider.class).systemProperty(name, host)
);
@@ -165,14 +165,23 @@ public class TestFixturesPlugin implements Plugin {
);
}
- private void configureServiceInfoForTask(Task task, Project fixtureProject, BiConsumer consumer) {
+ private void configureServiceInfoForTask(
+ Task task, Project fixtureProject, boolean enableFilter, BiConsumer consumer
+ ) {
// Configure ports for the tests as system properties.
// We only know these at execution time so we need to do it in doFirst
+ TestFixtureExtension extension = task.getProject().getExtensions().getByType(TestFixtureExtension.class);
task.doFirst(new Action() {
@Override
public void execute(Task theTask) {
fixtureProject.getExtensions().getByType(ComposeExtension.class).getServicesInfos()
- .forEach((service, infos) -> {
+ .entrySet().stream()
+ .filter(entry -> enableFilter == false ||
+ extension.isServiceRequired(entry.getKey(), fixtureProject.getPath())
+ )
+ .forEach(entry -> {
+ String service = entry.getKey();
+ ServiceInfo infos = entry.getValue();
infos.getTcpPorts()
.forEach((container, host) -> {
String name = "test.fixtures." + service + ".tcp." + container;
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/GraphRequestConverters.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/GraphRequestConverters.java
index 69a70bd97f17..48009810cf3b 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/GraphRequestConverters.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/GraphRequestConverters.java
@@ -29,7 +29,7 @@ final class GraphRequestConverters {
private GraphRequestConverters() {}
static Request explore(GraphExploreRequest exploreRequest) throws IOException {
- String endpoint = RequestConverters.endpoint(exploreRequest.indices(), exploreRequest.types(), "_graph/explore");
+ String endpoint = RequestConverters.endpoint(exploreRequest.indices(), "_graph/explore");
Request request = new Request(HttpGet.METHOD_NAME, endpoint);
request.setEntity(RequestConverters.createEntity(exploreRequest, RequestConverters.REQUEST_BODY_CONTENT_TYPE));
return request;
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/IndexLifecycleRequestConverters.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/IndexLifecycleRequestConverters.java
index 563f178711e4..e6105a54bb26 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/IndexLifecycleRequestConverters.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/IndexLifecycleRequestConverters.java
@@ -204,7 +204,7 @@ final class IndexLifecycleRequestConverters {
}
static Request executeSnapshotLifecyclePolicy(ExecuteSnapshotLifecyclePolicyRequest executeSnapshotLifecyclePolicyRequest) {
- Request request = new Request(HttpPut.METHOD_NAME,
+ Request request = new Request(HttpPost.METHOD_NAME,
new RequestConverters.EndpointBuilder()
.addPathPartAsIs("_slm/policy")
.addPathPartAsIs(executeSnapshotLifecyclePolicyRequest.getPolicyId())
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/IndicesRequestConverters.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/IndicesRequestConverters.java
index 62f041d6c680..ba8598370453 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/IndicesRequestConverters.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/IndicesRequestConverters.java
@@ -544,8 +544,7 @@ final class IndicesRequestConverters {
static Request validateQuery(ValidateQueryRequest validateQueryRequest) throws IOException {
String[] indices = validateQueryRequest.indices() == null ? Strings.EMPTY_ARRAY : validateQueryRequest.indices();
- String[] types = validateQueryRequest.types() == null || indices.length <= 0 ? Strings.EMPTY_ARRAY : validateQueryRequest.types();
- String endpoint = RequestConverters.endpoint(indices, types, "_validate/query");
+ String endpoint = RequestConverters.endpoint(indices, "_validate/query");
Request request = new Request(HttpGet.METHOD_NAME, endpoint);
RequestConverters.Params params = new RequestConverters.Params();
params.withIndicesOptions(validateQueryRequest.indicesOptions());
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/RequestConverters.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/RequestConverters.java
index e42d0f30b4ce..0bf14d07c2e9 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/RequestConverters.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/RequestConverters.java
@@ -504,9 +504,7 @@ final class RequestConverters {
}
static Request explain(ExplainRequest explainRequest) throws IOException {
- String endpoint = explainRequest.type().equals(MapperService.SINGLE_MAPPING_NAME)
- ? endpoint(explainRequest.index(), "_explain", explainRequest.id())
- : endpoint(explainRequest.index(), explainRequest.type(), explainRequest.id(), "_explain");
+ String endpoint = endpoint(explainRequest.index(), "_explain", explainRequest.id());
Request request = new Request(HttpGet.METHOD_NAME, endpoint);
Params params = new Params();
@@ -547,6 +545,10 @@ final class RequestConverters {
return prepareReindexRequest(reindexRequest, false);
}
+ static Request submitDeleteByQuery(DeleteByQueryRequest deleteByQueryRequest) throws IOException {
+ return prepareDeleteByQueryRequest(deleteByQueryRequest, false);
+ }
+
private static Request prepareReindexRequest(ReindexRequest reindexRequest, boolean waitForCompletion) throws IOException {
String endpoint = new EndpointBuilder().addPathPart("_reindex").build();
Request request = new Request(HttpPost.METHOD_NAME, endpoint);
@@ -566,6 +568,35 @@ final class RequestConverters {
return request;
}
+ private static Request prepareDeleteByQueryRequest(DeleteByQueryRequest deleteByQueryRequest,
+ boolean waitForCompletion) throws IOException {
+ String endpoint = endpoint(deleteByQueryRequest.indices(), "_delete_by_query");
+ Request request = new Request(HttpPost.METHOD_NAME, endpoint);
+ Params params = new Params()
+ .withRouting(deleteByQueryRequest.getRouting())
+ .withRefresh(deleteByQueryRequest.isRefresh())
+ .withTimeout(deleteByQueryRequest.getTimeout())
+ .withWaitForActiveShards(deleteByQueryRequest.getWaitForActiveShards())
+ .withRequestsPerSecond(deleteByQueryRequest.getRequestsPerSecond())
+ .withIndicesOptions(deleteByQueryRequest.indicesOptions())
+ .withWaitForCompletion(waitForCompletion);
+ if (deleteByQueryRequest.isAbortOnVersionConflict() == false) {
+ params.putParam("conflicts", "proceed");
+ }
+ if (deleteByQueryRequest.getBatchSize() != AbstractBulkByScrollRequest.DEFAULT_SCROLL_SIZE) {
+ params.putParam("scroll_size", Integer.toString(deleteByQueryRequest.getBatchSize()));
+ }
+ if (deleteByQueryRequest.getScrollTime() != AbstractBulkByScrollRequest.DEFAULT_SCROLL_TIMEOUT) {
+ params.putParam("scroll", deleteByQueryRequest.getScrollTime());
+ }
+ if (deleteByQueryRequest.getMaxDocs() > 0) {
+ params.putParam("max_docs", Integer.toString(deleteByQueryRequest.getMaxDocs()));
+ }
+ request.addParameters(params.asMap());
+ request.setEntity(createEntity(deleteByQueryRequest, REQUEST_BODY_CONTENT_TYPE));
+ return request;
+ }
+
static Request updateByQuery(UpdateByQueryRequest updateByQueryRequest) throws IOException {
String endpoint = endpoint(updateByQueryRequest.indices(), "_update_by_query");
Request request = new Request(HttpPost.METHOD_NAME, endpoint);
@@ -595,30 +626,7 @@ final class RequestConverters {
}
static Request deleteByQuery(DeleteByQueryRequest deleteByQueryRequest) throws IOException {
- String endpoint = endpoint(deleteByQueryRequest.indices(), "_delete_by_query");
- Request request = new Request(HttpPost.METHOD_NAME, endpoint);
- Params params = new Params()
- .withRouting(deleteByQueryRequest.getRouting())
- .withRefresh(deleteByQueryRequest.isRefresh())
- .withTimeout(deleteByQueryRequest.getTimeout())
- .withWaitForActiveShards(deleteByQueryRequest.getWaitForActiveShards())
- .withRequestsPerSecond(deleteByQueryRequest.getRequestsPerSecond())
- .withIndicesOptions(deleteByQueryRequest.indicesOptions());
- if (deleteByQueryRequest.isAbortOnVersionConflict() == false) {
- params.putParam("conflicts", "proceed");
- }
- if (deleteByQueryRequest.getBatchSize() != AbstractBulkByScrollRequest.DEFAULT_SCROLL_SIZE) {
- params.putParam("scroll_size", Integer.toString(deleteByQueryRequest.getBatchSize()));
- }
- if (deleteByQueryRequest.getScrollTime() != AbstractBulkByScrollRequest.DEFAULT_SCROLL_TIMEOUT) {
- params.putParam("scroll", deleteByQueryRequest.getScrollTime());
- }
- if (deleteByQueryRequest.getMaxDocs() > 0) {
- params.putParam("max_docs", Integer.toString(deleteByQueryRequest.getMaxDocs()));
- }
- request.addParameters(params.asMap());
- request.setEntity(createEntity(deleteByQueryRequest, REQUEST_BODY_CONTENT_TYPE));
- return request;
+ return prepareDeleteByQueryRequest(deleteByQueryRequest, true);
}
static Request rethrottleReindex(RethrottleRequest rethrottleRequest) {
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/RestHighLevelClient.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/RestHighLevelClient.java
index 093d717389f1..3986d4e8f13d 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/RestHighLevelClient.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/RestHighLevelClient.java
@@ -256,7 +256,7 @@ public class RestHighLevelClient implements Closeable {
private final IndexLifecycleClient ilmClient = new IndexLifecycleClient(this);
private final RollupClient rollupClient = new RollupClient(this);
private final CcrClient ccrClient = new CcrClient(this);
- private final DataFrameClient dataFrameClient = new DataFrameClient(this);
+ private final TransformClient transformClient = new TransformClient(this);
private final EnrichClient enrichClient = new EnrichClient(this);
/**
@@ -478,8 +478,8 @@ public class RestHighLevelClient implements Closeable {
*
* @return the client wrapper for making Data Frame API calls
*/
- public DataFrameClient dataFrame() {
- return dataFrameClient;
+ public TransformClient transform() {
+ return transformClient;
}
public EnrichClient enrich() {
@@ -595,6 +595,21 @@ public class RestHighLevelClient implements Closeable {
);
}
+ /**
+ * Submits a delete by query task
+ * See
+ * Delete By Query API on elastic.co
+ * @param deleteByQueryRequest the request
+ * @param options the request options (e.g. headers), use {@link RequestOptions#DEFAULT} if nothing needs to be customized
+ * @return the submission response
+ */
+ public final TaskSubmissionResponse submitDeleteByQueryTask(DeleteByQueryRequest deleteByQueryRequest,
+ RequestOptions options) throws IOException {
+ return performRequestAndParseEntity(
+ deleteByQueryRequest, RequestConverters::submitDeleteByQuery, options, TaskSubmissionResponse::fromXContent, emptySet()
+ );
+ }
+
/**
* Asynchronously executes a delete by query request.
* See
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/DataFrameClient.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/TransformClient.java
similarity index 65%
rename from client/rest-high-level/src/main/java/org/elasticsearch/client/DataFrameClient.java
rename to client/rest-high-level/src/main/java/org/elasticsearch/client/TransformClient.java
index e56bd4422928..9b18fbc06af0 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/DataFrameClient.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/TransformClient.java
@@ -21,29 +21,29 @@ package org.elasticsearch.client;
import org.elasticsearch.action.ActionListener;
import org.elasticsearch.client.core.AcknowledgedResponse;
-import org.elasticsearch.client.transform.DeleteDataFrameTransformRequest;
-import org.elasticsearch.client.transform.GetDataFrameTransformRequest;
-import org.elasticsearch.client.transform.GetDataFrameTransformResponse;
-import org.elasticsearch.client.transform.GetDataFrameTransformStatsRequest;
-import org.elasticsearch.client.transform.GetDataFrameTransformStatsResponse;
-import org.elasticsearch.client.transform.PreviewDataFrameTransformRequest;
-import org.elasticsearch.client.transform.PreviewDataFrameTransformResponse;
-import org.elasticsearch.client.transform.PutDataFrameTransformRequest;
-import org.elasticsearch.client.transform.StartDataFrameTransformRequest;
-import org.elasticsearch.client.transform.StartDataFrameTransformResponse;
-import org.elasticsearch.client.transform.StopDataFrameTransformRequest;
-import org.elasticsearch.client.transform.StopDataFrameTransformResponse;
-import org.elasticsearch.client.transform.UpdateDataFrameTransformRequest;
-import org.elasticsearch.client.transform.UpdateDataFrameTransformResponse;
+import org.elasticsearch.client.transform.DeleteTransformRequest;
+import org.elasticsearch.client.transform.GetTransformRequest;
+import org.elasticsearch.client.transform.GetTransformResponse;
+import org.elasticsearch.client.transform.GetTransformStatsRequest;
+import org.elasticsearch.client.transform.GetTransformStatsResponse;
+import org.elasticsearch.client.transform.PreviewTransformRequest;
+import org.elasticsearch.client.transform.PreviewTransformResponse;
+import org.elasticsearch.client.transform.PutTransformRequest;
+import org.elasticsearch.client.transform.StartTransformRequest;
+import org.elasticsearch.client.transform.StartTransformResponse;
+import org.elasticsearch.client.transform.StopTransformRequest;
+import org.elasticsearch.client.transform.StopTransformResponse;
+import org.elasticsearch.client.transform.UpdateTransformRequest;
+import org.elasticsearch.client.transform.UpdateTransformResponse;
import java.io.IOException;
import java.util.Collections;
-public final class DataFrameClient {
+public final class TransformClient {
private final RestHighLevelClient restHighLevelClient;
- DataFrameClient(RestHighLevelClient restHighLevelClient) {
+ TransformClient(RestHighLevelClient restHighLevelClient) {
this.restHighLevelClient = restHighLevelClient;
}
@@ -54,15 +54,15 @@ public final class DataFrameClient {
* see
* Create transform documentation
*
- * @param request The PutDataFrameTransformRequest containing the
- * {@link org.elasticsearch.client.transform.transforms.DataFrameTransformConfig}.
+ * @param request The PutTransformRequest containing the
+ * {@link org.elasticsearch.client.transform.transforms.TransformConfig}.
* @param options Additional request options (e.g. headers), use {@link RequestOptions#DEFAULT} if nothing needs to be customized
* @return An AcknowledgedResponse object indicating request success
* @throws IOException when there is a serialization issue sending the request or receiving the response
*/
- public AcknowledgedResponse putDataFrameTransform(PutDataFrameTransformRequest request, RequestOptions options) throws IOException {
+ public AcknowledgedResponse putTransform(PutTransformRequest request, RequestOptions options) throws IOException {
return restHighLevelClient.performRequestAndParseEntity(request,
- DataFrameRequestConverters::putDataFrameTransform,
+ TransformRequestConverters::putTransform,
options,
AcknowledgedResponse::fromXContent,
Collections.emptySet());
@@ -74,16 +74,16 @@ public final class DataFrameClient {
* For additional info
* see
* Create transform documentation
- * @param request The PutDataFrameTransformRequest containing the
- * {@link org.elasticsearch.client.transform.transforms.DataFrameTransformConfig}.
+ * @param request The PutTransformRequest containing the
+ * {@link org.elasticsearch.client.transform.transforms.TransformConfig}.
* @param options Additional request options (e.g. headers), use {@link RequestOptions#DEFAULT} if nothing needs to be customized
* @param listener Listener to be notified upon request completion
* @return cancellable that may be used to cancel the request
*/
- public Cancellable putDataFrameTransformAsync(PutDataFrameTransformRequest request, RequestOptions options,
- ActionListener listener) {
+ public Cancellable putTransformAsync(PutTransformRequest request, RequestOptions options,
+ ActionListener listener) {
return restHighLevelClient.performRequestAsyncAndParseEntity(request,
- DataFrameRequestConverters::putDataFrameTransform,
+ TransformRequestConverters::putTransform,
options,
AcknowledgedResponse::fromXContent,
listener,
@@ -97,18 +97,18 @@ public final class DataFrameClient {
* see
* Create transform documentation
*
- * @param request The UpdateDataFrameTransformRequest containing the
- * {@link org.elasticsearch.client.transform.transforms.DataFrameTransformConfigUpdate}.
+ * @param request The UpdateTransformRequest containing the
+ * {@link org.elasticsearch.client.transform.transforms.TransformConfigUpdate}.
* @param options Additional request options (e.g. headers), use {@link RequestOptions#DEFAULT} if nothing needs to be customized
- * @return An UpdateDataFrameTransformResponse object containing the updated configuration
+ * @return An UpdateTransformResponse object containing the updated configuration
* @throws IOException when there is a serialization issue sending the request or receiving the response
*/
- public UpdateDataFrameTransformResponse updateDataFrameTransform(UpdateDataFrameTransformRequest request,
- RequestOptions options) throws IOException {
+ public UpdateTransformResponse updateTransform(UpdateTransformRequest request,
+ RequestOptions options) throws IOException {
return restHighLevelClient.performRequestAndParseEntity(request,
- DataFrameRequestConverters::updateDataFrameTransform,
+ TransformRequestConverters::updateTransform,
options,
- UpdateDataFrameTransformResponse::fromXContent,
+ UpdateTransformResponse::fromXContent,
Collections.emptySet());
}
@@ -118,19 +118,19 @@ public final class DataFrameClient {
* For additional info
* see
* Create transform documentation
- * @param request The UpdateDataFrameTransformRequest containing the
- * {@link org.elasticsearch.client.transform.transforms.DataFrameTransformConfigUpdate}.
+ * @param request The UpdateTransformRequest containing the
+ * {@link org.elasticsearch.client.transform.transforms.TransformConfigUpdate}.
* @param options Additional request options (e.g. headers), use {@link RequestOptions#DEFAULT} if nothing needs to be customized
* @param listener Listener to be notified upon request completion
* @return cancellable that may be used to cancel the request
*/
- public Cancellable updateDataFrameTransformAsync(UpdateDataFrameTransformRequest request,
- RequestOptions options,
- ActionListener listener) {
+ public Cancellable updateTransformAsync(UpdateTransformRequest request,
+ RequestOptions options,
+ ActionListener listener) {
return restHighLevelClient.performRequestAsyncAndParseEntity(request,
- DataFrameRequestConverters::updateDataFrameTransform,
+ TransformRequestConverters::updateTransform,
options,
- UpdateDataFrameTransformResponse::fromXContent,
+ UpdateTransformResponse::fromXContent,
listener,
Collections.emptySet());
}
@@ -142,17 +142,17 @@ public final class DataFrameClient {
* see
* Get transform stats documentation
*
- * @param request Specifies the which transforms to get the stats for
+ * @param request Specifies which transforms to get the stats for
* @param options Additional request options (e.g. headers), use {@link RequestOptions#DEFAULT} if nothing needs to be customized
* @return The transform stats
* @throws IOException when there is a serialization issue sending the request or receiving the response
*/
- public GetDataFrameTransformStatsResponse getDataFrameTransformStats(GetDataFrameTransformStatsRequest request, RequestOptions options)
+ public GetTransformStatsResponse getTransformStats(GetTransformStatsRequest request, RequestOptions options)
throws IOException {
return restHighLevelClient.performRequestAndParseEntity(request,
- DataFrameRequestConverters::getDataFrameTransformStats,
+ TransformRequestConverters::getTransformStats,
options,
- GetDataFrameTransformStatsResponse::fromXContent,
+ GetTransformStatsResponse::fromXContent,
Collections.emptySet());
}
@@ -162,17 +162,17 @@ public final class DataFrameClient {
* For additional info
* see
* Get transform stats documentation
- * @param request Specifies the which transforms to get the stats for
+ * @param request Specifies which transforms to get the stats for
* @param options Additional request options (e.g. headers), use {@link RequestOptions#DEFAULT} if nothing needs to be customized
* @param listener Listener to be notified upon request completion
* @return cancellable that may be used to cancel the request
*/
- public Cancellable getDataFrameTransformStatsAsync(GetDataFrameTransformStatsRequest request, RequestOptions options,
- ActionListener listener) {
+ public Cancellable getTransformStatsAsync(GetTransformStatsRequest request, RequestOptions options,
+ ActionListener listener) {
return restHighLevelClient.performRequestAsyncAndParseEntity(request,
- DataFrameRequestConverters::getDataFrameTransformStats,
+ TransformRequestConverters::getTransformStats,
options,
- GetDataFrameTransformStatsResponse::fromXContent,
+ GetTransformStatsResponse::fromXContent,
listener,
Collections.emptySet());
}
@@ -189,10 +189,10 @@ public final class DataFrameClient {
* @return An AcknowledgedResponse object indicating request success
* @throws IOException when there is a serialization issue sending the request or receiving the response
*/
- public AcknowledgedResponse deleteDataFrameTransform(DeleteDataFrameTransformRequest request, RequestOptions options)
+ public AcknowledgedResponse deleteTransform(DeleteTransformRequest request, RequestOptions options)
throws IOException {
return restHighLevelClient.performRequestAndParseEntity(request,
- DataFrameRequestConverters::deleteDataFrameTransform,
+ TransformRequestConverters::deleteTransform,
options,
AcknowledgedResponse::fromXContent,
Collections.emptySet());
@@ -209,10 +209,10 @@ public final class DataFrameClient {
* @param listener Listener to be notified upon request completion
* @return cancellable that may be used to cancel the request
*/
- public Cancellable deleteDataFrameTransformAsync(DeleteDataFrameTransformRequest request, RequestOptions options,
- ActionListener listener) {
+ public Cancellable deleteTransformAsync(DeleteTransformRequest request, RequestOptions options,
+ ActionListener listener) {
return restHighLevelClient.performRequestAsyncAndParseEntity(request,
- DataFrameRequestConverters::deleteDataFrameTransform,
+ TransformRequestConverters::deleteTransform,
options,
AcknowledgedResponse::fromXContent,
listener,
@@ -231,12 +231,12 @@ public final class DataFrameClient {
* @return A response containing the results of the applied transform
* @throws IOException when there is a serialization issue sending the request or receiving the response
*/
- public PreviewDataFrameTransformResponse previewDataFrameTransform(PreviewDataFrameTransformRequest request, RequestOptions options)
+ public PreviewTransformResponse previewTransform(PreviewTransformRequest request, RequestOptions options)
throws IOException {
return restHighLevelClient.performRequestAndParseEntity(request,
- DataFrameRequestConverters::previewDataFrameTransform,
+ TransformRequestConverters::previewTransform,
options,
- PreviewDataFrameTransformResponse::fromXContent,
+ PreviewTransformResponse::fromXContent,
Collections.emptySet());
}
@@ -250,12 +250,12 @@ public final class DataFrameClient {
* @param listener Listener to be notified upon request completion
* @return cancellable that may be used to cancel the request
*/
- public Cancellable previewDataFrameTransformAsync(PreviewDataFrameTransformRequest request, RequestOptions options,
- ActionListener listener) {
+ public Cancellable previewTransformAsync(PreviewTransformRequest request, RequestOptions options,
+ ActionListener listener) {
return restHighLevelClient.performRequestAsyncAndParseEntity(request,
- DataFrameRequestConverters::previewDataFrameTransform,
+ TransformRequestConverters::previewTransform,
options,
- PreviewDataFrameTransformResponse::fromXContent,
+ PreviewTransformResponse::fromXContent,
listener,
Collections.emptySet());
}
@@ -272,12 +272,12 @@ public final class DataFrameClient {
* @return A response object indicating request success
* @throws IOException when there is a serialization issue sending the request or receiving the response
*/
- public StartDataFrameTransformResponse startDataFrameTransform(StartDataFrameTransformRequest request, RequestOptions options)
+ public StartTransformResponse startTransform(StartTransformRequest request, RequestOptions options)
throws IOException {
return restHighLevelClient.performRequestAndParseEntity(request,
- DataFrameRequestConverters::startDataFrameTransform,
+ TransformRequestConverters::startTransform,
options,
- StartDataFrameTransformResponse::fromXContent,
+ StartTransformResponse::fromXContent,
Collections.emptySet());
}
@@ -292,12 +292,12 @@ public final class DataFrameClient {
* @param listener Listener to be notified upon request completion
* @return cancellable that may be used to cancel the request
*/
- public Cancellable startDataFrameTransformAsync(StartDataFrameTransformRequest request, RequestOptions options,
- ActionListener listener) {
+ public Cancellable startTransformAsync(StartTransformRequest request, RequestOptions options,
+ ActionListener listener) {
return restHighLevelClient.performRequestAsyncAndParseEntity(request,
- DataFrameRequestConverters::startDataFrameTransform,
+ TransformRequestConverters::startTransform,
options,
- StartDataFrameTransformResponse::fromXContent,
+ StartTransformResponse::fromXContent,
listener,
Collections.emptySet());
}
@@ -314,12 +314,12 @@ public final class DataFrameClient {
* @return A response object indicating request success
* @throws IOException when there is a serialization issue sending the request or receiving the response
*/
- public StopDataFrameTransformResponse stopDataFrameTransform(StopDataFrameTransformRequest request, RequestOptions options)
+ public StopTransformResponse stopTransform(StopTransformRequest request, RequestOptions options)
throws IOException {
return restHighLevelClient.performRequestAndParseEntity(request,
- DataFrameRequestConverters::stopDataFrameTransform,
+ TransformRequestConverters::stopTransform,
options,
- StopDataFrameTransformResponse::fromXContent,
+ StopTransformResponse::fromXContent,
Collections.emptySet());
}
@@ -334,12 +334,12 @@ public final class DataFrameClient {
* @param listener Listener to be notified upon request completion
* @return cancellable that may be used to cancel the request
*/
- public Cancellable stopDataFrameTransformAsync(StopDataFrameTransformRequest request, RequestOptions options,
- ActionListener listener) {
+ public Cancellable stopTransformAsync(StopTransformRequest request, RequestOptions options,
+ ActionListener listener) {
return restHighLevelClient.performRequestAsyncAndParseEntity(request,
- DataFrameRequestConverters::stopDataFrameTransform,
+ TransformRequestConverters::stopTransform,
options,
- StopDataFrameTransformResponse::fromXContent,
+ StopTransformResponse::fromXContent,
listener,
Collections.emptySet());
}
@@ -353,15 +353,15 @@ public final class DataFrameClient {
*
* @param request The get transform request
* @param options Additional request options (e.g. headers), use {@link RequestOptions#DEFAULT} if nothing needs to be customized
- * @return An GetDataFrameTransformResponse containing the requested transforms
+ * @return An GetTransformResponse containing the requested transforms
* @throws IOException when there is a serialization issue sending the request or receiving the response
*/
- public GetDataFrameTransformResponse getDataFrameTransform(GetDataFrameTransformRequest request, RequestOptions options)
+ public GetTransformResponse getTransform(GetTransformRequest request, RequestOptions options)
throws IOException {
return restHighLevelClient.performRequestAndParseEntity(request,
- DataFrameRequestConverters::getDataFrameTransform,
+ TransformRequestConverters::getTransform,
options,
- GetDataFrameTransformResponse::fromXContent,
+ GetTransformResponse::fromXContent,
Collections.emptySet());
}
@@ -376,12 +376,12 @@ public final class DataFrameClient {
* @param listener Listener to be notified upon request completion
* @return cancellable that may be used to cancel the request
*/
- public Cancellable getDataFrameTransformAsync(GetDataFrameTransformRequest request, RequestOptions options,
- ActionListener listener) {
+ public Cancellable getTransformAsync(GetTransformRequest request, RequestOptions options,
+ ActionListener listener) {
return restHighLevelClient.performRequestAsyncAndParseEntity(request,
- DataFrameRequestConverters::getDataFrameTransform,
+ TransformRequestConverters::getTransform,
options,
- GetDataFrameTransformResponse::fromXContent,
+ GetTransformResponse::fromXContent,
listener,
Collections.emptySet());
}
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/DataFrameRequestConverters.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/TransformRequestConverters.java
similarity index 79%
rename from client/rest-high-level/src/main/java/org/elasticsearch/client/DataFrameRequestConverters.java
rename to client/rest-high-level/src/main/java/org/elasticsearch/client/TransformRequestConverters.java
index ab8c79a1784b..49d347ae2b6e 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/DataFrameRequestConverters.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/TransformRequestConverters.java
@@ -24,29 +24,29 @@ import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.elasticsearch.client.core.PageParams;
-import org.elasticsearch.client.transform.DeleteDataFrameTransformRequest;
-import org.elasticsearch.client.transform.GetDataFrameTransformRequest;
-import org.elasticsearch.client.transform.GetDataFrameTransformStatsRequest;
-import org.elasticsearch.client.transform.PreviewDataFrameTransformRequest;
-import org.elasticsearch.client.transform.PutDataFrameTransformRequest;
-import org.elasticsearch.client.transform.StartDataFrameTransformRequest;
-import org.elasticsearch.client.transform.StopDataFrameTransformRequest;
-import org.elasticsearch.client.transform.UpdateDataFrameTransformRequest;
+import org.elasticsearch.client.transform.DeleteTransformRequest;
+import org.elasticsearch.client.transform.GetTransformRequest;
+import org.elasticsearch.client.transform.GetTransformStatsRequest;
+import org.elasticsearch.client.transform.PreviewTransformRequest;
+import org.elasticsearch.client.transform.PutTransformRequest;
+import org.elasticsearch.client.transform.StartTransformRequest;
+import org.elasticsearch.client.transform.StopTransformRequest;
+import org.elasticsearch.client.transform.UpdateTransformRequest;
import org.elasticsearch.common.Strings;
import java.io.IOException;
import static org.elasticsearch.client.RequestConverters.REQUEST_BODY_CONTENT_TYPE;
import static org.elasticsearch.client.RequestConverters.createEntity;
-import static org.elasticsearch.client.transform.DeleteDataFrameTransformRequest.FORCE;
-import static org.elasticsearch.client.transform.GetDataFrameTransformRequest.ALLOW_NO_MATCH;
-import static org.elasticsearch.client.transform.PutDataFrameTransformRequest.DEFER_VALIDATION;
+import static org.elasticsearch.client.transform.DeleteTransformRequest.FORCE;
+import static org.elasticsearch.client.transform.GetTransformRequest.ALLOW_NO_MATCH;
+import static org.elasticsearch.client.transform.PutTransformRequest.DEFER_VALIDATION;
-final class DataFrameRequestConverters {
+final class TransformRequestConverters {
- private DataFrameRequestConverters() {}
+ private TransformRequestConverters() {}
- static Request putDataFrameTransform(PutDataFrameTransformRequest putRequest) throws IOException {
+ static Request putTransform(PutTransformRequest putRequest) throws IOException {
String endpoint = new RequestConverters.EndpointBuilder()
.addPathPartAsIs("_data_frame", "transforms")
.addPathPart(putRequest.getConfig().getId())
@@ -59,7 +59,7 @@ final class DataFrameRequestConverters {
return request;
}
- static Request updateDataFrameTransform(UpdateDataFrameTransformRequest updateDataFrameTransformRequest) throws IOException {
+ static Request updateTransform(UpdateTransformRequest updateDataFrameTransformRequest) throws IOException {
String endpoint = new RequestConverters.EndpointBuilder()
.addPathPartAsIs("_data_frame", "transforms")
.addPathPart(updateDataFrameTransformRequest.getId())
@@ -73,7 +73,7 @@ final class DataFrameRequestConverters {
return request;
}
- static Request getDataFrameTransform(GetDataFrameTransformRequest getRequest) {
+ static Request getTransform(GetTransformRequest getRequest) {
String endpoint = new RequestConverters.EndpointBuilder()
.addPathPartAsIs("_data_frame", "transforms")
.addPathPart(Strings.collectionToCommaDelimitedString(getRequest.getId()))
@@ -91,7 +91,7 @@ final class DataFrameRequestConverters {
return request;
}
- static Request deleteDataFrameTransform(DeleteDataFrameTransformRequest deleteRequest) {
+ static Request deleteTransform(DeleteTransformRequest deleteRequest) {
String endpoint = new RequestConverters.EndpointBuilder()
.addPathPartAsIs("_data_frame", "transforms")
.addPathPart(deleteRequest.getId())
@@ -103,7 +103,7 @@ final class DataFrameRequestConverters {
return request;
}
- static Request startDataFrameTransform(StartDataFrameTransformRequest startRequest) {
+ static Request startTransform(StartTransformRequest startRequest) {
String endpoint = new RequestConverters.EndpointBuilder()
.addPathPartAsIs("_data_frame", "transforms")
.addPathPart(startRequest.getId())
@@ -118,7 +118,7 @@ final class DataFrameRequestConverters {
return request;
}
- static Request stopDataFrameTransform(StopDataFrameTransformRequest stopRequest) {
+ static Request stopTransform(StopTransformRequest stopRequest) {
String endpoint = new RequestConverters.EndpointBuilder()
.addPathPartAsIs("_data_frame", "transforms")
.addPathPart(stopRequest.getId())
@@ -139,7 +139,7 @@ final class DataFrameRequestConverters {
return request;
}
- static Request previewDataFrameTransform(PreviewDataFrameTransformRequest previewRequest) throws IOException {
+ static Request previewTransform(PreviewTransformRequest previewRequest) throws IOException {
String endpoint = new RequestConverters.EndpointBuilder()
.addPathPartAsIs("_data_frame", "transforms", "_preview")
.build();
@@ -148,7 +148,7 @@ final class DataFrameRequestConverters {
return request;
}
- static Request getDataFrameTransformStats(GetDataFrameTransformStatsRequest statsRequest) {
+ static Request getTransformStats(GetTransformStatsRequest statsRequest) {
String endpoint = new RequestConverters.EndpointBuilder()
.addPathPartAsIs("_data_frame", "transforms")
.addPathPart(statsRequest.getId())
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/core/CountRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/core/CountRequest.java
index 95ab3db7e71f..2d42b56bc818 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/core/CountRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/core/CountRequest.java
@@ -19,10 +19,8 @@
package org.elasticsearch.client.core;
-import org.elasticsearch.action.ActionRequest;
-import org.elasticsearch.action.ActionRequestValidationException;
-import org.elasticsearch.action.IndicesRequest;
import org.elasticsearch.action.support.IndicesOptions;
+import org.elasticsearch.client.Validatable;
import org.elasticsearch.common.Strings;
import org.elasticsearch.common.xcontent.ToXContentObject;
import org.elasticsearch.common.xcontent.XContentBuilder;
@@ -39,7 +37,7 @@ import static org.elasticsearch.action.search.SearchRequest.DEFAULT_INDICES_OPTI
/**
* Encapsulates a request to _count API against one, several or all indices.
*/
-public final class CountRequest extends ActionRequest implements IndicesRequest.Replaceable, ToXContentObject {
+public final class CountRequest implements Validatable, ToXContentObject {
private String[] indices = Strings.EMPTY_ARRAY;
private String[] types = Strings.EMPTY_ARRAY;
@@ -78,11 +76,6 @@ public final class CountRequest extends ActionRequest implements IndicesRequest.
this.query = Objects.requireNonNull(query, "query must not be null");;
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
-
/**
* Sets the indices the count will be executed on.
*/
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/graph/GraphExploreRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/graph/GraphExploreRequest.java
index 5a0a4c2a9208..c3230a75a58d 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/graph/GraphExploreRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/graph/GraphExploreRequest.java
@@ -47,7 +47,6 @@ public class GraphExploreRequest implements IndicesRequest.Replaceable, ToXConte
public static final String NO_VERTICES_ERROR_MESSAGE = "Graph explore hop must have at least one VertexRequest";
private String[] indices = Strings.EMPTY_ARRAY;
private IndicesOptions indicesOptions = IndicesOptions.fromOptions(false, false, true, false);
- private String[] types = Strings.EMPTY_ARRAY;
private String routing;
private TimeValue timeout;
@@ -106,31 +105,6 @@ public class GraphExploreRequest implements IndicesRequest.Replaceable, ToXConte
return this;
}
- /**
- * The document types to execute the explore against. Defaults to be executed against
- * all types.
- *
- * @deprecated Types are in the process of being removed. Instead of using a type, prefer to
- * filter on a field on the document.
- */
- @Deprecated
- public String[] types() {
- return this.types;
- }
-
- /**
- * The document types to execute the explore request against. Defaults to be executed against
- * all types.
- *
- * @deprecated Types are in the process of being removed. Instead of using a type, prefer to
- * filter on a field on the document.
- */
- @Deprecated
- public GraphExploreRequest types(String... types) {
- this.types = types;
- return this;
- }
-
public String routing() {
return this.routing;
}
@@ -154,7 +128,7 @@ public class GraphExploreRequest implements IndicesRequest.Replaceable, ToXConte
* operations involved in each hop are limited to the remaining time
* available but can still overrun due to the nature of their "best efforts"
* timeout support. When a timeout occurs partial results are returned.
- *
+ *
* @param timeout
* a {@link TimeValue} object which determines the maximum length
* of time to spend exploring
@@ -174,7 +148,7 @@ public class GraphExploreRequest implements IndicesRequest.Replaceable, ToXConte
@Override
public String toString() {
- return "graph explore [" + Arrays.toString(indices) + "][" + Arrays.toString(types) + "]";
+ return "graph explore [" + Arrays.toString(indices) + "]";
}
/**
@@ -190,7 +164,7 @@ public class GraphExploreRequest implements IndicesRequest.Replaceable, ToXConte
* better with smaller samples as there are less look-ups required for
* background frequencies of terms found in the documents
*
- *
+ *
* @param maxNumberOfDocsPerHop
* shard-level sample size in documents
*/
@@ -231,7 +205,7 @@ public class GraphExploreRequest implements IndicesRequest.Replaceable, ToXConte
* default value is true which means terms are selected based on
* significance (see the {@link SignificantTerms} aggregation) rather than
* popularity (using the {@link TermsAggregator}).
- *
+ *
* @param value
* true if the significant_terms algorithm should be used.
*/
@@ -246,7 +220,7 @@ public class GraphExploreRequest implements IndicesRequest.Replaceable, ToXConte
/**
* Return detailed information about vertex frequencies as part of JSON
* results - defaults to false
- *
+ *
* @param value
* true if detailed information is required in JSON responses
*/
@@ -262,7 +236,7 @@ public class GraphExploreRequest implements IndicesRequest.Replaceable, ToXConte
* Add a stage in the graph exploration. Each hop represents a stage of
* querying elasticsearch to identify terms which can then be connnected to
* other terms in a subsequent hop.
- *
+ *
* @param guidingQuery
* optional choice of query which influences which documents are
* considered in this stage
@@ -316,7 +290,7 @@ public class GraphExploreRequest implements IndicesRequest.Replaceable, ToXConte
@Override
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
builder.startObject();
-
+
builder.startObject("controls");
{
if (sampleSize != SamplerAggregationBuilder.DEFAULT_SHARD_SAMPLE_SIZE) {
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/indices/DetailAnalyzeResponse.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/indices/DetailAnalyzeResponse.java
index 36cf8afad0d5..0696ac7b5554 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/indices/DetailAnalyzeResponse.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/indices/DetailAnalyzeResponse.java
@@ -113,8 +113,6 @@ public class DetailAnalyzeResponse {
private final String name;
private final AnalyzeResponse.AnalyzeToken[] tokens;
- private static final String TOKENS = "tokens";
-
@Override
public boolean equals(Object o) {
if (this == o) return true;
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/indices/PutIndexTemplateRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/indices/PutIndexTemplateRequest.java
index 7008a719b7b3..2d03a08d2d42 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/indices/PutIndexTemplateRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/indices/PutIndexTemplateRequest.java
@@ -20,15 +20,13 @@ package org.elasticsearch.client.indices;
import org.elasticsearch.ElasticsearchGenerationException;
import org.elasticsearch.ElasticsearchParseException;
-import org.elasticsearch.action.ActionRequestValidationException;
-import org.elasticsearch.action.IndicesRequest;
import org.elasticsearch.action.admin.indices.alias.Alias;
-import org.elasticsearch.action.support.IndicesOptions;
-import org.elasticsearch.action.support.master.MasterNodeRequest;
+import org.elasticsearch.client.TimedRequest;
import org.elasticsearch.common.Strings;
import org.elasticsearch.common.bytes.BytesArray;
import org.elasticsearch.common.bytes.BytesReference;
import org.elasticsearch.common.settings.Settings;
+import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.DeprecationHandler;
import org.elasticsearch.common.xcontent.NamedXContentRegistry;
import org.elasticsearch.common.xcontent.ToXContentFragment;
@@ -50,13 +48,12 @@ import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
-import static org.elasticsearch.action.ValidateActions.addValidationError;
import static org.elasticsearch.common.settings.Settings.Builder.EMPTY_SETTINGS;
/**
* A request to create an index template.
*/
-public class PutIndexTemplateRequest extends MasterNodeRequest implements IndicesRequest, ToXContentFragment {
+public class PutIndexTemplateRequest extends TimedRequest implements ToXContentFragment {
private String name;
@@ -77,19 +74,11 @@ public class PutIndexTemplateRequest extends MasterNodeRequest indexPatterns) {
this.name(name);
- }
-
- @Override
- public ActionRequestValidationException validate() {
- ActionRequestValidationException validationException = null;
- if (indexPatterns == null || indexPatterns.size() == 0) {
- validationException = addValidationError("index patterns are missing", validationException);
- }
- return validationException;
+ this.patterns(indexPatterns);
}
/**
@@ -111,6 +100,9 @@ public class PutIndexTemplateRequest extends MasterNodeRequest indexPatterns) {
+ if (indexPatterns == null || indexPatterns.size() == 0) {
+ throw new IllegalArgumentException("index patterns are missing");
+ }
this.indexPatterns = indexPatterns;
return this;
}
@@ -412,14 +404,21 @@ public class PutIndexTemplateRequest extends MasterNodeRequest jobIds;
private final String calendarId;
@@ -61,11 +60,6 @@ public class DeleteCalendarJobRequest extends ActionRequest {
return calendarId;
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
-
@Override
public int hashCode() {
return Objects.hash(jobIds, calendarId);
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/DeleteCalendarRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/DeleteCalendarRequest.java
index 047561685fbf..4a1d7c11e16c 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/DeleteCalendarRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/DeleteCalendarRequest.java
@@ -19,15 +19,14 @@
package org.elasticsearch.client.ml;
-import org.elasticsearch.action.ActionRequest;
-import org.elasticsearch.action.ActionRequestValidationException;
+import org.elasticsearch.client.Validatable;
import java.util.Objects;
/**
* Request to delete a Machine Learning Calendar
*/
-public class DeleteCalendarRequest extends ActionRequest {
+public class DeleteCalendarRequest implements Validatable {
private final String calendarId;
@@ -43,11 +42,6 @@ public class DeleteCalendarRequest extends ActionRequest {
return calendarId;
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
-
@Override
public int hashCode() {
return Objects.hash(calendarId);
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/DeleteDatafeedRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/DeleteDatafeedRequest.java
index 9782b73b5795..11cfc7f3e914 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/DeleteDatafeedRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/DeleteDatafeedRequest.java
@@ -18,15 +18,14 @@
*/
package org.elasticsearch.client.ml;
-import org.elasticsearch.action.ActionRequest;
-import org.elasticsearch.action.ActionRequestValidationException;
+import org.elasticsearch.client.Validatable;
import java.util.Objects;
/**
* Request to delete a Machine Learning Datafeed via its ID
*/
-public class DeleteDatafeedRequest extends ActionRequest {
+public class DeleteDatafeedRequest implements Validatable {
private String datafeedId;
private Boolean force;
@@ -53,11 +52,6 @@ public class DeleteDatafeedRequest extends ActionRequest {
this.force = force;
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
-
@Override
public int hashCode() {
return Objects.hash(datafeedId, force);
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/DeleteExpiredDataRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/DeleteExpiredDataRequest.java
index 25e340a8bab1..4da2d52ee357 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/DeleteExpiredDataRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/DeleteExpiredDataRequest.java
@@ -18,13 +18,12 @@
*/
package org.elasticsearch.client.ml;
-import org.elasticsearch.action.ActionRequest;
-import org.elasticsearch.action.ActionRequestValidationException;
+import org.elasticsearch.client.Validatable;
/**
* Request to delete expired model snapshots and forecasts
*/
-public class DeleteExpiredDataRequest extends ActionRequest {
+public class DeleteExpiredDataRequest implements Validatable {
/**
* Create a new request to delete expired data
@@ -32,8 +31,4 @@ public class DeleteExpiredDataRequest extends ActionRequest {
public DeleteExpiredDataRequest() {
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
}
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/DeleteForecastRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/DeleteForecastRequest.java
index 9c6bccd191c1..e961c5791d4d 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/DeleteForecastRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/DeleteForecastRequest.java
@@ -18,8 +18,7 @@
*/
package org.elasticsearch.client.ml;
-import org.elasticsearch.action.ActionRequest;
-import org.elasticsearch.action.ActionRequestValidationException;
+import org.elasticsearch.client.Validatable;
import org.elasticsearch.client.ml.job.config.Job;
import org.elasticsearch.common.ParseField;
import org.elasticsearch.common.Strings;
@@ -37,7 +36,7 @@ import java.util.Objects;
/**
* POJO for a delete forecast request
*/
-public class DeleteForecastRequest extends ActionRequest implements ToXContentObject {
+public class DeleteForecastRequest implements Validatable, ToXContentObject {
public static final ParseField FORECAST_ID = new ParseField("forecast_id");
public static final ParseField ALLOW_NO_FORECASTS = new ParseField("allow_no_forecasts");
@@ -159,11 +158,6 @@ public class DeleteForecastRequest extends ActionRequest implements ToXContentOb
return Objects.hash(jobId, forecastIds, allowNoForecasts, timeout);
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
-
@Override
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
builder.startObject();
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/DeleteJobRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/DeleteJobRequest.java
index 44e3668059c4..2b7258270053 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/DeleteJobRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/DeleteJobRequest.java
@@ -18,15 +18,14 @@
*/
package org.elasticsearch.client.ml;
-import org.elasticsearch.action.ActionRequest;
-import org.elasticsearch.action.ActionRequestValidationException;
+import org.elasticsearch.client.Validatable;
import java.util.Objects;
/**
* Request to delete a Machine Learning Job via its ID
*/
-public class DeleteJobRequest extends ActionRequest {
+public class DeleteJobRequest implements Validatable {
private String jobId;
private Boolean force;
@@ -76,11 +75,6 @@ public class DeleteJobRequest extends ActionRequest {
this.waitForCompletion = waitForCompletion;
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
-
@Override
public int hashCode() {
return Objects.hash(jobId, force);
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/DeleteModelSnapshotRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/DeleteModelSnapshotRequest.java
index 1c153e3555b1..081560fb03eb 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/DeleteModelSnapshotRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/DeleteModelSnapshotRequest.java
@@ -18,18 +18,16 @@
*/
package org.elasticsearch.client.ml;
-import org.elasticsearch.action.ActionRequest;
-import org.elasticsearch.action.ActionRequestValidationException;
+import org.elasticsearch.client.Validatable;
import org.elasticsearch.client.ml.job.config.Job;
import org.elasticsearch.client.ml.job.process.ModelSnapshot;
-
import java.util.Objects;
/**
* Request to delete a Machine Learning Model Snapshot Job via its Job and Snapshot IDs
*/
-public class DeleteModelSnapshotRequest extends ActionRequest {
+public class DeleteModelSnapshotRequest implements Validatable {
private final String jobId;
private final String snapshotId;
@@ -47,11 +45,6 @@ public class DeleteModelSnapshotRequest extends ActionRequest {
return snapshotId;
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
-
@Override
public int hashCode() {
return Objects.hash(jobId, snapshotId);
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/FlushJobRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/FlushJobRequest.java
index 067851d45266..8436eb67be81 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/FlushJobRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/FlushJobRequest.java
@@ -18,8 +18,7 @@
*/
package org.elasticsearch.client.ml;
-import org.elasticsearch.action.ActionRequest;
-import org.elasticsearch.action.ActionRequestValidationException;
+import org.elasticsearch.client.Validatable;
import org.elasticsearch.client.ml.job.config.Job;
import org.elasticsearch.common.ParseField;
import org.elasticsearch.common.xcontent.ConstructingObjectParser;
@@ -32,7 +31,7 @@ import java.util.Objects;
/**
* Request object to flush a given Machine Learning job.
*/
-public class FlushJobRequest extends ActionRequest implements ToXContentObject {
+public class FlushJobRequest implements Validatable, ToXContentObject {
public static final ParseField CALC_INTERIM = new ParseField("calc_interim");
public static final ParseField START = new ParseField("start");
@@ -188,8 +187,4 @@ public class FlushJobRequest extends ActionRequest implements ToXContentObject {
return builder;
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
}
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/ForecastJobRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/ForecastJobRequest.java
index 67d290c37f08..b9d2ceca43b5 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/ForecastJobRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/ForecastJobRequest.java
@@ -18,8 +18,7 @@
*/
package org.elasticsearch.client.ml;
-import org.elasticsearch.action.ActionRequest;
-import org.elasticsearch.action.ActionRequestValidationException;
+import org.elasticsearch.client.Validatable;
import org.elasticsearch.client.ml.job.config.Job;
import org.elasticsearch.common.ParseField;
import org.elasticsearch.common.unit.TimeValue;
@@ -34,7 +33,7 @@ import java.util.Objects;
/**
* Pojo for forecasting an existing and open Machine Learning Job
*/
-public class ForecastJobRequest extends ActionRequest implements ToXContentObject {
+public class ForecastJobRequest implements Validatable, ToXContentObject {
public static final ParseField DURATION = new ParseField("duration");
public static final ParseField EXPIRES_IN = new ParseField("expires_in");
@@ -133,8 +132,4 @@ public class ForecastJobRequest extends ActionRequest implements ToXContentObjec
return builder;
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
}
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetBucketsRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetBucketsRequest.java
index 655ecb2b9750..1aa2c3a7755f 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetBucketsRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetBucketsRequest.java
@@ -18,8 +18,7 @@
*/
package org.elasticsearch.client.ml;
-import org.elasticsearch.action.ActionRequest;
-import org.elasticsearch.action.ActionRequestValidationException;
+import org.elasticsearch.client.Validatable;
import org.elasticsearch.client.core.PageParams;
import org.elasticsearch.client.ml.job.config.Job;
import org.elasticsearch.client.ml.job.results.Result;
@@ -34,7 +33,7 @@ import java.util.Objects;
/**
* A request to retrieve buckets of a given job
*/
-public class GetBucketsRequest extends ActionRequest implements ToXContentObject {
+public class GetBucketsRequest implements Validatable, ToXContentObject {
public static final ParseField EXPAND = new ParseField("expand");
public static final ParseField EXCLUDE_INTERIM = new ParseField("exclude_interim");
@@ -199,11 +198,6 @@ public class GetBucketsRequest extends ActionRequest implements ToXContentObject
this.descending = descending;
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
-
@Override
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
builder.startObject();
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetCalendarEventsRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetCalendarEventsRequest.java
index 05bc234178eb..622ee51eb9e4 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetCalendarEventsRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetCalendarEventsRequest.java
@@ -19,8 +19,7 @@
package org.elasticsearch.client.ml;
-import org.elasticsearch.action.ActionRequest;
-import org.elasticsearch.action.ActionRequestValidationException;
+import org.elasticsearch.client.Validatable;
import org.elasticsearch.client.core.PageParams;
import org.elasticsearch.client.ml.calendars.Calendar;
import org.elasticsearch.client.ml.job.config.Job;
@@ -35,7 +34,7 @@ import java.util.Objects;
/**
* Get the Scheduled Events for a Calendar
*/
-public class GetCalendarEventsRequest extends ActionRequest implements ToXContentObject {
+public class GetCalendarEventsRequest implements Validatable, ToXContentObject {
public static final ParseField START = new ParseField("start");
public static final ParseField END = new ParseField("end");
@@ -121,11 +120,6 @@ public class GetCalendarEventsRequest extends ActionRequest implements ToXConten
this.jobId = jobId;
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
-
@Override
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
builder.startObject();
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetCalendarsRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetCalendarsRequest.java
index bcbae91693b9..defa3943c5d8 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetCalendarsRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetCalendarsRequest.java
@@ -19,8 +19,7 @@
package org.elasticsearch.client.ml;
-import org.elasticsearch.action.ActionRequest;
-import org.elasticsearch.action.ActionRequestValidationException;
+import org.elasticsearch.client.Validatable;
import org.elasticsearch.client.core.PageParams;
import org.elasticsearch.client.ml.calendars.Calendar;
import org.elasticsearch.common.xcontent.ObjectParser;
@@ -30,7 +29,7 @@ import org.elasticsearch.common.xcontent.XContentBuilder;
import java.io.IOException;
import java.util.Objects;
-public class GetCalendarsRequest extends ActionRequest implements ToXContentObject {
+public class GetCalendarsRequest implements Validatable, ToXContentObject {
public static final ObjectParser PARSER =
new ObjectParser<>("get_calendars_request", GetCalendarsRequest::new);
@@ -66,11 +65,6 @@ public class GetCalendarsRequest extends ActionRequest implements ToXContentObje
this.pageParams = pageParams;
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
-
@Override
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
builder.startObject();
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetCategoriesRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetCategoriesRequest.java
index b1000c3e4eb4..f1d148c8ee39 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetCategoriesRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetCategoriesRequest.java
@@ -18,8 +18,7 @@
*/
package org.elasticsearch.client.ml;
-import org.elasticsearch.action.ActionRequest;
-import org.elasticsearch.action.ActionRequestValidationException;
+import org.elasticsearch.client.Validatable;
import org.elasticsearch.client.core.PageParams;
import org.elasticsearch.client.ml.job.config.Job;
import org.elasticsearch.common.ParseField;
@@ -33,7 +32,7 @@ import java.util.Objects;
/**
* A request to retrieve categories of a given job
*/
-public class GetCategoriesRequest extends ActionRequest implements ToXContentObject {
+public class GetCategoriesRequest implements Validatable, ToXContentObject {
public static final ParseField CATEGORY_ID = new ParseField("category_id");
@@ -88,11 +87,6 @@ public class GetCategoriesRequest extends ActionRequest implements ToXContentObj
this.pageParams = pageParams;
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
-
@Override
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
builder.startObject();
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetDatafeedRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetDatafeedRequest.java
index d8b88e026ccb..ab827b64c2d2 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetDatafeedRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetDatafeedRequest.java
@@ -18,8 +18,7 @@
*/
package org.elasticsearch.client.ml;
-import org.elasticsearch.action.ActionRequest;
-import org.elasticsearch.action.ActionRequestValidationException;
+import org.elasticsearch.client.Validatable;
import org.elasticsearch.client.ml.datafeed.DatafeedConfig;
import org.elasticsearch.common.ParseField;
import org.elasticsearch.common.xcontent.ConstructingObjectParser;
@@ -38,7 +37,7 @@ import java.util.Objects;
* {@code _all} explicitly gets all the datafeeds in the cluster
* An empty request (no {@code datafeedId}s) implicitly gets all the datafeeds in the cluster
*/
-public class GetDatafeedRequest extends ActionRequest implements ToXContentObject {
+public class GetDatafeedRequest implements Validatable, ToXContentObject {
public static final ParseField DATAFEED_IDS = new ParseField("datafeed_ids");
public static final ParseField ALLOW_NO_DATAFEEDS = new ParseField("allow_no_datafeeds");
@@ -101,11 +100,6 @@ public class GetDatafeedRequest extends ActionRequest implements ToXContentObjec
return allowNoDatafeeds;
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
-
@Override
public int hashCode() {
return Objects.hash(datafeedIds, allowNoDatafeeds);
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetDatafeedStatsRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetDatafeedStatsRequest.java
index a3814d6c90c9..a44d6bf93c02 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetDatafeedStatsRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetDatafeedStatsRequest.java
@@ -18,8 +18,7 @@
*/
package org.elasticsearch.client.ml;
-import org.elasticsearch.action.ActionRequest;
-import org.elasticsearch.action.ActionRequestValidationException;
+import org.elasticsearch.client.Validatable;
import org.elasticsearch.client.ml.datafeed.DatafeedConfig;
import org.elasticsearch.common.ParseField;
import org.elasticsearch.common.Strings;
@@ -41,7 +40,7 @@ import java.util.Objects;
* {@code _all} explicitly gets all the datafeeds' statistics in the cluster
* An empty request (no {@code datafeedId}s) implicitly gets all the datafeeds' statistics in the cluster
*/
-public class GetDatafeedStatsRequest extends ActionRequest implements ToXContentObject {
+public class GetDatafeedStatsRequest implements Validatable, ToXContentObject {
public static final ParseField ALLOW_NO_DATAFEEDS = new ParseField("allow_no_datafeeds");
@@ -128,11 +127,6 @@ public class GetDatafeedStatsRequest extends ActionRequest implements ToXContent
Objects.equals(allowNoDatafeeds, that.allowNoDatafeeds);
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
-
@Override
public XContentBuilder toXContent(XContentBuilder builder, ToXContent.Params params) throws IOException {
builder.startObject();
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetFiltersRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetFiltersRequest.java
index a1808af23fca..98c7f9d54d0c 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetFiltersRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetFiltersRequest.java
@@ -18,8 +18,7 @@
*/
package org.elasticsearch.client.ml;
-import org.elasticsearch.action.ActionRequest;
-import org.elasticsearch.action.ActionRequestValidationException;
+import org.elasticsearch.client.Validatable;
import org.elasticsearch.client.core.PageParams;
import org.elasticsearch.client.ml.job.config.MlFilter;
import org.elasticsearch.common.xcontent.ObjectParser;
@@ -32,7 +31,7 @@ import java.util.Objects;
/**
* A request to retrieve {@link MlFilter}s
*/
-public class GetFiltersRequest extends ActionRequest implements ToXContentObject {
+public class GetFiltersRequest implements Validatable, ToXContentObject {
public static final ObjectParser PARSER =
new ObjectParser<>("get_filters_request", GetFiltersRequest::new);
@@ -83,11 +82,6 @@ public class GetFiltersRequest extends ActionRequest implements ToXContentObject
this.size = size;
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
-
@Override
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
builder.startObject();
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetInfluencersRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetInfluencersRequest.java
index 8e5a45e7ba38..0639fd9574c7 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetInfluencersRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetInfluencersRequest.java
@@ -18,8 +18,7 @@
*/
package org.elasticsearch.client.ml;
-import org.elasticsearch.action.ActionRequest;
-import org.elasticsearch.action.ActionRequestValidationException;
+import org.elasticsearch.client.Validatable;
import org.elasticsearch.client.core.PageParams;
import org.elasticsearch.client.ml.job.config.Job;
import org.elasticsearch.common.ParseField;
@@ -33,7 +32,7 @@ import java.util.Objects;
/**
* A request to retrieve influencers of a given job
*/
-public class GetInfluencersRequest extends ActionRequest implements ToXContentObject {
+public class GetInfluencersRequest implements Validatable, ToXContentObject {
public static final ParseField EXCLUDE_INTERIM = new ParseField("exclude_interim");
public static final ParseField START = new ParseField("start");
@@ -167,11 +166,6 @@ public class GetInfluencersRequest extends ActionRequest implements ToXContentOb
this.descending = descending;
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
-
@Override
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
builder.startObject();
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetJobRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetJobRequest.java
index 4d4c67b511bf..24684cd99c6f 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetJobRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetJobRequest.java
@@ -18,8 +18,7 @@
*/
package org.elasticsearch.client.ml;
-import org.elasticsearch.action.ActionRequest;
-import org.elasticsearch.action.ActionRequestValidationException;
+import org.elasticsearch.client.Validatable;
import org.elasticsearch.client.ml.job.config.Job;
import org.elasticsearch.common.ParseField;
import org.elasticsearch.common.xcontent.ConstructingObjectParser;
@@ -39,7 +38,7 @@ import java.util.Objects;
* {@code _all} explicitly gets all the jobs in the cluster
* An empty request (no {@code jobId}s) implicitly gets all the jobs in the cluster
*/
-public class GetJobRequest extends ActionRequest implements ToXContentObject {
+public class GetJobRequest implements Validatable, ToXContentObject {
public static final ParseField JOB_IDS = new ParseField("job_ids");
public static final ParseField ALLOW_NO_JOBS = new ParseField("allow_no_jobs");
@@ -101,11 +100,6 @@ public class GetJobRequest extends ActionRequest implements ToXContentObject {
return allowNoJobs;
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
-
@Override
public int hashCode() {
return Objects.hash(jobIds, allowNoJobs);
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetJobStatsRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetJobStatsRequest.java
index 493e2bf5272e..d33972babb57 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetJobStatsRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetJobStatsRequest.java
@@ -18,8 +18,7 @@
*/
package org.elasticsearch.client.ml;
-import org.elasticsearch.action.ActionRequest;
-import org.elasticsearch.action.ActionRequestValidationException;
+import org.elasticsearch.client.Validatable;
import org.elasticsearch.client.ml.job.config.Job;
import org.elasticsearch.common.ParseField;
import org.elasticsearch.common.Strings;
@@ -41,7 +40,7 @@ import java.util.Objects;
* {@code _all} explicitly gets all the jobs' statistics in the cluster
* An empty request (no {@code jobId}s) implicitly gets all the jobs' statistics in the cluster
*/
-public class GetJobStatsRequest extends ActionRequest implements ToXContentObject {
+public class GetJobStatsRequest implements Validatable, ToXContentObject {
public static final ParseField ALLOW_NO_JOBS = new ParseField("allow_no_jobs");
@@ -128,11 +127,6 @@ public class GetJobStatsRequest extends ActionRequest implements ToXContentObjec
Objects.equals(allowNoJobs, that.allowNoJobs);
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
-
@Override
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
builder.startObject();
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetModelSnapshotsRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetModelSnapshotsRequest.java
index acb138ac442f..7e11073cbc26 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetModelSnapshotsRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetModelSnapshotsRequest.java
@@ -18,8 +18,7 @@
*/
package org.elasticsearch.client.ml;
-import org.elasticsearch.action.ActionRequest;
-import org.elasticsearch.action.ActionRequestValidationException;
+import org.elasticsearch.client.Validatable;
import org.elasticsearch.client.core.PageParams;
import org.elasticsearch.client.ml.job.config.Job;
import org.elasticsearch.common.ParseField;
@@ -33,7 +32,7 @@ import java.util.Objects;
/**
* A request to retrieve information about model snapshots for a given job
*/
-public class GetModelSnapshotsRequest extends ActionRequest implements ToXContentObject {
+public class GetModelSnapshotsRequest implements Validatable, ToXContentObject {
public static final ParseField SNAPSHOT_ID = new ParseField("snapshot_id");
@@ -153,11 +152,6 @@ public class GetModelSnapshotsRequest extends ActionRequest implements ToXConten
this.desc = desc;
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
-
@Override
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
builder.startObject();
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetOverallBucketsRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetOverallBucketsRequest.java
index 36c0fe250e25..f34dcb3be8aa 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetOverallBucketsRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/GetOverallBucketsRequest.java
@@ -18,8 +18,7 @@
*/
package org.elasticsearch.client.ml;
-import org.elasticsearch.action.ActionRequest;
-import org.elasticsearch.action.ActionRequestValidationException;
+import org.elasticsearch.client.Validatable;
import org.elasticsearch.client.ml.job.config.Job;
import org.elasticsearch.common.ParseField;
import org.elasticsearch.common.Strings;
@@ -37,7 +36,7 @@ import java.util.Objects;
/**
* A request to retrieve overall buckets of set of jobs
*/
-public class GetOverallBucketsRequest extends ActionRequest implements ToXContentObject {
+public class GetOverallBucketsRequest implements Validatable, ToXContentObject {
public static final ParseField TOP_N = new ParseField("top_n");
public static final ParseField BUCKET_SPAN = new ParseField("bucket_span");
@@ -203,11 +202,6 @@ public class GetOverallBucketsRequest extends ActionRequest implements ToXConten
return allowNoJobs;
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
-
@Override
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
builder.startObject();
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/OpenJobRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/OpenJobRequest.java
index 5b8e68cd72dc..ae9489bce137 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/OpenJobRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/OpenJobRequest.java
@@ -18,8 +18,7 @@
*/
package org.elasticsearch.client.ml;
-import org.elasticsearch.action.ActionRequest;
-import org.elasticsearch.action.ActionRequestValidationException;
+import org.elasticsearch.client.Validatable;
import org.elasticsearch.client.ml.job.config.Job;
import org.elasticsearch.common.ParseField;
import org.elasticsearch.common.Strings;
@@ -35,7 +34,7 @@ import java.util.Objects;
/**
* Request to open a Machine Learning Job
*/
-public class OpenJobRequest extends ActionRequest implements ToXContentObject {
+public class OpenJobRequest implements Validatable, ToXContentObject {
public static final ParseField TIMEOUT = new ParseField("timeout");
public static final ConstructingObjectParser PARSER = new ConstructingObjectParser<>(
@@ -88,11 +87,6 @@ public class OpenJobRequest extends ActionRequest implements ToXContentObject {
this.timeout = timeout;
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
-
@Override
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
builder.startObject();
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/PostCalendarEventRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/PostCalendarEventRequest.java
index 2c43ec9ab776..943703414583 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/PostCalendarEventRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/PostCalendarEventRequest.java
@@ -18,8 +18,7 @@
*/
package org.elasticsearch.client.ml;
-import org.elasticsearch.action.ActionRequest;
-import org.elasticsearch.action.ActionRequestValidationException;
+import org.elasticsearch.client.Validatable;
import org.elasticsearch.client.ml.calendars.Calendar;
import org.elasticsearch.client.ml.calendars.ScheduledEvent;
import org.elasticsearch.common.ParseField;
@@ -35,7 +34,7 @@ import java.util.Objects;
/**
* Request to add a ScheduledEvent to a Machine Learning calendar
*/
-public class PostCalendarEventRequest extends ActionRequest implements ToXContentObject {
+public class PostCalendarEventRequest implements Validatable, ToXContentObject {
private final String calendarId;
private final List scheduledEvents;
@@ -78,11 +77,6 @@ public class PostCalendarEventRequest extends ActionRequest implements ToXConten
return scheduledEvents;
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
-
@Override
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
builder.startObject();
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/PostDataRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/PostDataRequest.java
index 519ac5e00510..e81464bc4282 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/PostDataRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/PostDataRequest.java
@@ -18,8 +18,7 @@
*/
package org.elasticsearch.client.ml;
-import org.elasticsearch.action.ActionRequest;
-import org.elasticsearch.action.ActionRequestValidationException;
+import org.elasticsearch.client.Validatable;
import org.elasticsearch.client.ml.job.config.Job;
import org.elasticsearch.common.ParseField;
import org.elasticsearch.common.bytes.BytesArray;
@@ -40,7 +39,7 @@ import java.util.Objects;
/**
* Request to post data to a Machine Learning job
*/
-public class PostDataRequest extends ActionRequest implements ToXContentObject {
+public class PostDataRequest implements Validatable, ToXContentObject {
public static final ParseField RESET_START = new ParseField("reset_start");
public static final ParseField RESET_END = new ParseField("reset_end");
@@ -159,11 +158,6 @@ public class PostDataRequest extends ActionRequest implements ToXContentObject {
Objects.equals(xContentType, other.xContentType);
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
-
@Override
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
builder.startObject();
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/PreviewDatafeedRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/PreviewDatafeedRequest.java
index a21e96b46423..8ec2df177d50 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/PreviewDatafeedRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/PreviewDatafeedRequest.java
@@ -18,8 +18,7 @@
*/
package org.elasticsearch.client.ml;
-import org.elasticsearch.action.ActionRequest;
-import org.elasticsearch.action.ActionRequestValidationException;
+import org.elasticsearch.client.Validatable;
import org.elasticsearch.client.ml.datafeed.DatafeedConfig;
import org.elasticsearch.common.Strings;
import org.elasticsearch.common.xcontent.ConstructingObjectParser;
@@ -31,9 +30,9 @@ import java.io.IOException;
import java.util.Objects;
/**
- * Request to preview a MachineLearning Datafeed
+ * Request to preview a MachineLearning Datafeed
*/
-public class PreviewDatafeedRequest extends ActionRequest implements ToXContentObject {
+public class PreviewDatafeedRequest implements Validatable, ToXContentObject {
public static final ConstructingObjectParser PARSER = new ConstructingObjectParser<>(
"open_datafeed_request", true, a -> new PreviewDatafeedRequest((String) a[0]));
@@ -61,11 +60,6 @@ public class PreviewDatafeedRequest extends ActionRequest implements ToXContentO
return datafeedId;
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
-
@Override
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
builder.startObject();
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/PutCalendarJobRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/PutCalendarJobRequest.java
index 5ec379868934..52fbee411651 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/PutCalendarJobRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/PutCalendarJobRequest.java
@@ -18,8 +18,7 @@
*/
package org.elasticsearch.client.ml;
-import org.elasticsearch.action.ActionRequest;
-import org.elasticsearch.action.ActionRequestValidationException;
+import org.elasticsearch.client.Validatable;
import java.security.InvalidParameterException;
import java.util.Arrays;
@@ -29,7 +28,7 @@ import java.util.Objects;
/**
* Request class for adding Machine Learning Jobs to an existing calendar
*/
-public class PutCalendarJobRequest extends ActionRequest {
+public class PutCalendarJobRequest implements Validatable {
private final List jobIds;
private final String calendarId;
@@ -61,11 +60,6 @@ public class PutCalendarJobRequest extends ActionRequest {
return calendarId;
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
-
@Override
public int hashCode() {
return Objects.hash(jobIds, calendarId);
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/PutCalendarRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/PutCalendarRequest.java
index 56d6b2b545b5..45f650b9cbe3 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/PutCalendarRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/PutCalendarRequest.java
@@ -19,8 +19,7 @@
package org.elasticsearch.client.ml;
-import org.elasticsearch.action.ActionRequest;
-import org.elasticsearch.action.ActionRequestValidationException;
+import org.elasticsearch.client.Validatable;
import org.elasticsearch.client.ml.calendars.Calendar;
import org.elasticsearch.common.xcontent.ToXContentObject;
import org.elasticsearch.common.xcontent.XContentBuilder;
@@ -31,7 +30,7 @@ import java.util.Objects;
/**
* Request to create a new Machine Learning calendar
*/
-public class PutCalendarRequest extends ActionRequest implements ToXContentObject {
+public class PutCalendarRequest implements Validatable, ToXContentObject {
private final Calendar calendar;
@@ -43,11 +42,6 @@ public class PutCalendarRequest extends ActionRequest implements ToXContentObjec
return calendar;
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
-
@Override
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
calendar.toXContent(builder, params);
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/PutDatafeedRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/PutDatafeedRequest.java
index 34cb12599a61..16634ec10c69 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/PutDatafeedRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/PutDatafeedRequest.java
@@ -18,8 +18,7 @@
*/
package org.elasticsearch.client.ml;
-import org.elasticsearch.action.ActionRequest;
-import org.elasticsearch.action.ActionRequestValidationException;
+import org.elasticsearch.client.Validatable;
import org.elasticsearch.client.ml.datafeed.DatafeedConfig;
import org.elasticsearch.common.Strings;
import org.elasticsearch.common.xcontent.ToXContentObject;
@@ -31,7 +30,7 @@ import java.util.Objects;
/**
* Request to create a new Machine Learning Datafeed given a {@link DatafeedConfig} configuration
*/
-public class PutDatafeedRequest extends ActionRequest implements ToXContentObject {
+public class PutDatafeedRequest implements Validatable, ToXContentObject {
private final DatafeedConfig datafeed;
@@ -77,8 +76,4 @@ public class PutDatafeedRequest extends ActionRequest implements ToXContentObjec
return Strings.toString(this);
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
}
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/PutFilterRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/PutFilterRequest.java
index 5414c8625811..2b307b560620 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/PutFilterRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/PutFilterRequest.java
@@ -18,8 +18,7 @@
*/
package org.elasticsearch.client.ml;
-import org.elasticsearch.action.ActionRequest;
-import org.elasticsearch.action.ActionRequestValidationException;
+import org.elasticsearch.client.Validatable;
import org.elasticsearch.client.ml.job.config.MlFilter;
import org.elasticsearch.common.Strings;
import org.elasticsearch.common.xcontent.ToXContentObject;
@@ -31,7 +30,7 @@ import java.util.Objects;
/**
* Request to create a new Machine Learning MlFilter given a {@link MlFilter} configuration
*/
-public class PutFilterRequest extends ActionRequest implements ToXContentObject {
+public class PutFilterRequest implements Validatable, ToXContentObject {
private final MlFilter filter;
@@ -77,8 +76,4 @@ public class PutFilterRequest extends ActionRequest implements ToXContentObject
return Strings.toString(this);
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
}
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/PutJobRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/PutJobRequest.java
index de8529de6bb8..9fc393e36fd0 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/PutJobRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/PutJobRequest.java
@@ -18,8 +18,7 @@
*/
package org.elasticsearch.client.ml;
-import org.elasticsearch.action.ActionRequest;
-import org.elasticsearch.action.ActionRequestValidationException;
+import org.elasticsearch.client.Validatable;
import org.elasticsearch.client.ml.job.config.Job;
import org.elasticsearch.common.Strings;
import org.elasticsearch.common.xcontent.ToXContentObject;
@@ -31,7 +30,7 @@ import java.util.Objects;
/**
* Request to create a new Machine Learning Job given a {@link Job} configuration
*/
-public class PutJobRequest extends ActionRequest implements ToXContentObject {
+public class PutJobRequest implements Validatable, ToXContentObject {
private final Job job;
@@ -77,8 +76,4 @@ public class PutJobRequest extends ActionRequest implements ToXContentObject {
return Strings.toString(this);
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
}
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/RevertModelSnapshotRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/RevertModelSnapshotRequest.java
index 3a38cd86a056..2581df06a153 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/RevertModelSnapshotRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/RevertModelSnapshotRequest.java
@@ -18,8 +18,7 @@
*/
package org.elasticsearch.client.ml;
-import org.elasticsearch.action.ActionRequest;
-import org.elasticsearch.action.ActionRequestValidationException;
+import org.elasticsearch.client.Validatable;
import org.elasticsearch.client.ml.job.config.Job;
import org.elasticsearch.client.ml.job.process.ModelSnapshot;
import org.elasticsearch.common.ParseField;
@@ -33,7 +32,7 @@ import java.util.Objects;
/**
* A request to revert to a specific model snapshot for a given job
*/
-public class RevertModelSnapshotRequest extends ActionRequest implements ToXContentObject {
+public class RevertModelSnapshotRequest implements Validatable, ToXContentObject {
public static final ParseField DELETE_INTERVENING = new ParseField("delete_intervening_results");
@@ -82,11 +81,6 @@ public class RevertModelSnapshotRequest extends ActionRequest implements ToXCont
this.deleteInterveningResults = deleteInterveningResults;
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
-
@Override
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
builder.startObject();
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/SetUpgradeModeRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/SetUpgradeModeRequest.java
index 64e94f025178..b913ebe29233 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/SetUpgradeModeRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/SetUpgradeModeRequest.java
@@ -18,8 +18,7 @@
*/
package org.elasticsearch.client.ml;
-import org.elasticsearch.action.ActionRequest;
-import org.elasticsearch.action.ActionRequestValidationException;
+import org.elasticsearch.client.Validatable;
import org.elasticsearch.common.ParseField;
import org.elasticsearch.common.unit.TimeValue;
@@ -28,7 +27,7 @@ import java.util.Objects;
/**
* Sets ML into upgrade_mode
*/
-public class SetUpgradeModeRequest extends ActionRequest {
+public class SetUpgradeModeRequest implements Validatable {
public static final ParseField ENABLED = new ParseField("enabled");
@@ -67,11 +66,6 @@ public class SetUpgradeModeRequest extends ActionRequest {
this.timeout = timeout;
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
-
@Override
public int hashCode() {
return Objects.hash(enabled, timeout);
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/StartDatafeedRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/StartDatafeedRequest.java
index 4ee6d747e576..68e93141b01e 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/StartDatafeedRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/StartDatafeedRequest.java
@@ -18,8 +18,7 @@
*/
package org.elasticsearch.client.ml;
-import org.elasticsearch.action.ActionRequest;
-import org.elasticsearch.action.ActionRequestValidationException;
+import org.elasticsearch.client.Validatable;
import org.elasticsearch.client.ml.datafeed.DatafeedConfig;
import org.elasticsearch.common.ParseField;
import org.elasticsearch.common.unit.TimeValue;
@@ -33,7 +32,7 @@ import java.util.Objects;
/**
* Request to start a Datafeed
*/
-public class StartDatafeedRequest extends ActionRequest implements ToXContentObject {
+public class StartDatafeedRequest implements Validatable, ToXContentObject {
public static final ParseField START = new ParseField("start");
public static final ParseField END = new ParseField("end");
@@ -114,11 +113,6 @@ public class StartDatafeedRequest extends ActionRequest implements ToXContentObj
this.timeout = timeout;
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
-
@Override
public int hashCode() {
return Objects.hash(datafeedId, start, end, timeout);
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/StopDatafeedRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/StopDatafeedRequest.java
index 4bba828d68ee..430f24777d4c 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/StopDatafeedRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/StopDatafeedRequest.java
@@ -18,8 +18,7 @@
*/
package org.elasticsearch.client.ml;
-import org.elasticsearch.action.ActionRequest;
-import org.elasticsearch.action.ActionRequestValidationException;
+import org.elasticsearch.client.Validatable;
import org.elasticsearch.client.ml.datafeed.DatafeedConfig;
import org.elasticsearch.common.ParseField;
import org.elasticsearch.common.Strings;
@@ -39,7 +38,7 @@ import java.util.Objects;
/**
* Request to stop Machine Learning Datafeeds
*/
-public class StopDatafeedRequest extends ActionRequest implements ToXContentObject {
+public class StopDatafeedRequest implements Validatable, ToXContentObject {
public static final ParseField TIMEOUT = new ParseField("timeout");
public static final ParseField FORCE = new ParseField("force");
@@ -144,11 +143,6 @@ public class StopDatafeedRequest extends ActionRequest implements ToXContentObje
this.allowNoDatafeeds = allowNoDatafeeds;
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
-
@Override
public int hashCode() {
return Objects.hash(datafeedIds, timeout, force, allowNoDatafeeds);
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/UpdateDatafeedRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/UpdateDatafeedRequest.java
index e434c5f9a572..6fd9e6fb41d6 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/UpdateDatafeedRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/UpdateDatafeedRequest.java
@@ -18,8 +18,7 @@
*/
package org.elasticsearch.client.ml;
-import org.elasticsearch.action.ActionRequest;
-import org.elasticsearch.action.ActionRequestValidationException;
+import org.elasticsearch.client.Validatable;
import org.elasticsearch.client.ml.datafeed.DatafeedUpdate;
import org.elasticsearch.common.Strings;
import org.elasticsearch.common.xcontent.ToXContentObject;
@@ -32,7 +31,7 @@ import java.util.Objects;
* Requests an update to a {@link org.elasticsearch.client.ml.datafeed.DatafeedConfig} with the passed {@link DatafeedUpdate}
* settings
*/
-public class UpdateDatafeedRequest extends ActionRequest implements ToXContentObject {
+public class UpdateDatafeedRequest implements Validatable, ToXContentObject {
private final DatafeedUpdate update;
@@ -73,8 +72,4 @@ public class UpdateDatafeedRequest extends ActionRequest implements ToXContentOb
return Strings.toString(this);
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
}
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/UpdateFilterRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/UpdateFilterRequest.java
index fb7d06a55251..c2e502e6578f 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/UpdateFilterRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/UpdateFilterRequest.java
@@ -18,8 +18,7 @@
*/
package org.elasticsearch.client.ml;
-import org.elasticsearch.action.ActionRequest;
-import org.elasticsearch.action.ActionRequestValidationException;
+import org.elasticsearch.client.Validatable;
import org.elasticsearch.client.ml.job.config.MlFilter;
import org.elasticsearch.common.ParseField;
import org.elasticsearch.common.Strings;
@@ -36,7 +35,7 @@ import java.util.TreeSet;
/**
* Updates an existing {@link MlFilter} configuration
*/
-public class UpdateFilterRequest extends ActionRequest implements ToXContentObject {
+public class UpdateFilterRequest implements Validatable, ToXContentObject {
public static final ParseField ADD_ITEMS = new ParseField("add_items");
public static final ParseField REMOVE_ITEMS = new ParseField("remove_items");
@@ -149,8 +148,4 @@ public class UpdateFilterRequest extends ActionRequest implements ToXContentObje
return Strings.toString(this);
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
}
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/UpdateJobRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/UpdateJobRequest.java
index 6e050f8adcf9..91952b22f2a2 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/UpdateJobRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/UpdateJobRequest.java
@@ -18,8 +18,7 @@
*/
package org.elasticsearch.client.ml;
-import org.elasticsearch.action.ActionRequest;
-import org.elasticsearch.action.ActionRequestValidationException;
+import org.elasticsearch.client.Validatable;
import org.elasticsearch.client.ml.job.config.JobUpdate;
import org.elasticsearch.common.Strings;
import org.elasticsearch.common.xcontent.ToXContentObject;
@@ -32,7 +31,7 @@ import java.util.Objects;
* Updates a {@link org.elasticsearch.client.ml.job.config.Job} with the passed {@link JobUpdate}
* settings
*/
-public class UpdateJobRequest extends ActionRequest implements ToXContentObject {
+public class UpdateJobRequest implements Validatable, ToXContentObject {
private final JobUpdate update;
@@ -73,8 +72,4 @@ public class UpdateJobRequest extends ActionRequest implements ToXContentObject
return Strings.toString(this);
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
}
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/UpdateModelSnapshotRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/UpdateModelSnapshotRequest.java
index b2b6417ab2ed..bd376e7a4d92 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/UpdateModelSnapshotRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/UpdateModelSnapshotRequest.java
@@ -18,8 +18,7 @@
*/
package org.elasticsearch.client.ml;
-import org.elasticsearch.action.ActionRequest;
-import org.elasticsearch.action.ActionRequestValidationException;
+import org.elasticsearch.client.Validatable;
import org.elasticsearch.client.ml.job.config.Job;
import org.elasticsearch.client.ml.job.process.ModelSnapshot;
import org.elasticsearch.common.xcontent.ConstructingObjectParser;
@@ -32,7 +31,7 @@ import java.util.Objects;
/**
* A request to update information about an existing model snapshot for a given job
*/
-public class UpdateModelSnapshotRequest extends ActionRequest implements ToXContentObject {
+public class UpdateModelSnapshotRequest implements Validatable, ToXContentObject {
public static final ConstructingObjectParser PARSER = new ConstructingObjectParser<>(
@@ -93,11 +92,6 @@ public class UpdateModelSnapshotRequest extends ActionRequest implements ToXCont
this.retain = retain;
}
- @Override
- public ActionRequestValidationException validate() {
- return null;
- }
-
@Override
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
builder.startObject();
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/inference/MlInferenceNamedXContentProvider.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/inference/MlInferenceNamedXContentProvider.java
new file mode 100644
index 000000000000..be7c3c00af2c
--- /dev/null
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/inference/MlInferenceNamedXContentProvider.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to Elasticsearch under one or more contributor
+ * license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright
+ * ownership. Elasticsearch licenses this file to you under
+ * the Apache License, Version 2.0 (the "License"); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.elasticsearch.client.ml.inference;
+
+import org.elasticsearch.client.ml.inference.trainedmodel.TrainedModel;
+import org.elasticsearch.client.ml.inference.trainedmodel.tree.Tree;
+import org.elasticsearch.client.ml.inference.preprocessing.FrequencyEncoding;
+import org.elasticsearch.client.ml.inference.preprocessing.OneHotEncoding;
+import org.elasticsearch.client.ml.inference.preprocessing.PreProcessor;
+import org.elasticsearch.client.ml.inference.preprocessing.TargetMeanEncoding;
+import org.elasticsearch.common.ParseField;
+import org.elasticsearch.common.xcontent.NamedXContentRegistry;
+import org.elasticsearch.plugins.spi.NamedXContentProvider;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class MlInferenceNamedXContentProvider implements NamedXContentProvider {
+
+ @Override
+ public List getNamedXContentParsers() {
+ List namedXContent = new ArrayList<>();
+
+ // PreProcessing
+ namedXContent.add(new NamedXContentRegistry.Entry(PreProcessor.class, new ParseField(OneHotEncoding.NAME),
+ OneHotEncoding::fromXContent));
+ namedXContent.add(new NamedXContentRegistry.Entry(PreProcessor.class, new ParseField(TargetMeanEncoding.NAME),
+ TargetMeanEncoding::fromXContent));
+ namedXContent.add(new NamedXContentRegistry.Entry(PreProcessor.class, new ParseField(FrequencyEncoding.NAME),
+ FrequencyEncoding::fromXContent));
+
+ // Model
+ namedXContent.add(new NamedXContentRegistry.Entry(TrainedModel.class, new ParseField(Tree.NAME), Tree::fromXContent));
+
+ return namedXContent;
+ }
+
+}
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/inference/preprocessing/FrequencyEncoding.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/inference/preprocessing/FrequencyEncoding.java
new file mode 100644
index 000000000000..fd0810d613eb
--- /dev/null
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/inference/preprocessing/FrequencyEncoding.java
@@ -0,0 +1,161 @@
+/*
+ * Licensed to Elasticsearch under one or more contributor
+ * license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright
+ * ownership. Elasticsearch licenses this file to you under
+ * the Apache License, Version 2.0 (the "License"); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.elasticsearch.client.ml.inference.preprocessing;
+
+import org.elasticsearch.common.ParseField;
+import org.elasticsearch.common.xcontent.ConstructingObjectParser;
+import org.elasticsearch.common.xcontent.ToXContent;
+import org.elasticsearch.common.xcontent.XContentBuilder;
+import org.elasticsearch.common.xcontent.XContentParser;
+
+import java.io.IOException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+
+/**
+ * PreProcessor for frequency encoding a set of categorical values for a given field.
+ */
+public class FrequencyEncoding implements PreProcessor {
+
+ public static final String NAME = "frequency_encoding";
+ public static final ParseField FIELD = new ParseField("field");
+ public static final ParseField FEATURE_NAME = new ParseField("feature_name");
+ public static final ParseField FREQUENCY_MAP = new ParseField("frequency_map");
+
+ @SuppressWarnings("unchecked")
+ public static final ConstructingObjectParser PARSER = new ConstructingObjectParser<>(
+ NAME,
+ true,
+ a -> new FrequencyEncoding((String)a[0], (String)a[1], (Map)a[2]));
+ static {
+ PARSER.declareString(ConstructingObjectParser.constructorArg(), FIELD);
+ PARSER.declareString(ConstructingObjectParser.constructorArg(), FEATURE_NAME);
+ PARSER.declareObject(ConstructingObjectParser.constructorArg(),
+ (p, c) -> p.map(HashMap::new, XContentParser::doubleValue),
+ FREQUENCY_MAP);
+ }
+
+ public static FrequencyEncoding fromXContent(XContentParser parser) {
+ return PARSER.apply(parser, null);
+ }
+
+ private final String field;
+ private final String featureName;
+ private final Map frequencyMap;
+
+ public FrequencyEncoding(String field, String featureName, Map frequencyMap) {
+ this.field = Objects.requireNonNull(field);
+ this.featureName = Objects.requireNonNull(featureName);
+ this.frequencyMap = Collections.unmodifiableMap(Objects.requireNonNull(frequencyMap));
+ }
+
+ /**
+ * @return Field name on which to frequency encode
+ */
+ public String getField() {
+ return field;
+ }
+
+ /**
+ * @return Map of Value: frequency for the frequency encoding
+ */
+ public Map getFrequencyMap() {
+ return frequencyMap;
+ }
+
+ /**
+ * @return The encoded feature name
+ */
+ public String getFeatureName() {
+ return featureName;
+ }
+
+ @Override
+ public String getName() {
+ return NAME;
+ }
+
+ @Override
+ public XContentBuilder toXContent(XContentBuilder builder, ToXContent.Params params) throws IOException {
+ builder.startObject();
+ builder.field(FIELD.getPreferredName(), field);
+ builder.field(FEATURE_NAME.getPreferredName(), featureName);
+ builder.field(FREQUENCY_MAP.getPreferredName(), frequencyMap);
+ builder.endObject();
+ return builder;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ FrequencyEncoding that = (FrequencyEncoding) o;
+ return Objects.equals(field, that.field)
+ && Objects.equals(featureName, that.featureName)
+ && Objects.equals(frequencyMap, that.frequencyMap);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(field, featureName, frequencyMap);
+ }
+
+ public Builder builder(String field) {
+ return new Builder(field);
+ }
+
+ public static class Builder {
+
+ private String field;
+ private String featureName;
+ private Map frequencyMap = new HashMap<>();
+
+ public Builder(String field) {
+ this.field = field;
+ }
+
+ public Builder setField(String field) {
+ this.field = field;
+ return this;
+ }
+
+ public Builder setFeatureName(String featureName) {
+ this.featureName = featureName;
+ return this;
+ }
+
+ public Builder setFrequencyMap(Map frequencyMap) {
+ this.frequencyMap = new HashMap<>(frequencyMap);
+ return this;
+ }
+
+ public Builder addFrequency(String valueName, double frequency) {
+ this.frequencyMap.put(valueName, frequency);
+ return this;
+ }
+
+ public FrequencyEncoding build() {
+ return new FrequencyEncoding(field, featureName, frequencyMap);
+ }
+ }
+
+}
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/inference/preprocessing/OneHotEncoding.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/inference/preprocessing/OneHotEncoding.java
new file mode 100644
index 000000000000..812cd723f994
--- /dev/null
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/inference/preprocessing/OneHotEncoding.java
@@ -0,0 +1,138 @@
+/*
+ * Licensed to Elasticsearch under one or more contributor
+ * license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright
+ * ownership. Elasticsearch licenses this file to you under
+ * the Apache License, Version 2.0 (the "License"); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.elasticsearch.client.ml.inference.preprocessing;
+
+import org.elasticsearch.common.ParseField;
+import org.elasticsearch.common.xcontent.ConstructingObjectParser;
+import org.elasticsearch.common.xcontent.ToXContent;
+import org.elasticsearch.common.xcontent.XContentBuilder;
+import org.elasticsearch.common.xcontent.XContentParser;
+
+import java.io.IOException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * PreProcessor for one hot encoding a set of categorical values for a given field.
+ */
+public class OneHotEncoding implements PreProcessor {
+
+ public static final String NAME = "one_hot_encoding";
+ public static final ParseField FIELD = new ParseField("field");
+ public static final ParseField HOT_MAP = new ParseField("hot_map");
+
+ @SuppressWarnings("unchecked")
+ public static final ConstructingObjectParser PARSER = new ConstructingObjectParser<>(
+ NAME,
+ true,
+ a -> new OneHotEncoding((String)a[0], (Map)a[1]));
+ static {
+ PARSER.declareString(ConstructingObjectParser.constructorArg(), FIELD);
+ PARSER.declareObject(ConstructingObjectParser.constructorArg(), (p, c) -> p.mapStrings(), HOT_MAP);
+ }
+
+ public static OneHotEncoding fromXContent(XContentParser parser) {
+ return PARSER.apply(parser, null);
+ }
+
+ private final String field;
+ private final Map hotMap;
+
+ public OneHotEncoding(String field, Map hotMap) {
+ this.field = Objects.requireNonNull(field);
+ this.hotMap = Collections.unmodifiableMap(Objects.requireNonNull(hotMap));
+ }
+
+ /**
+ * @return Field name on which to one hot encode
+ */
+ public String getField() {
+ return field;
+ }
+
+ /**
+ * @return Map of Value: ColumnName for the one hot encoding
+ */
+ public Map getHotMap() {
+ return hotMap;
+ }
+
+ @Override
+ public String getName() {
+ return NAME;
+ }
+
+ @Override
+ public XContentBuilder toXContent(XContentBuilder builder, ToXContent.Params params) throws IOException {
+ builder.startObject();
+ builder.field(FIELD.getPreferredName(), field);
+ builder.field(HOT_MAP.getPreferredName(), hotMap);
+ builder.endObject();
+ return builder;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ OneHotEncoding that = (OneHotEncoding) o;
+ return Objects.equals(field, that.field)
+ && Objects.equals(hotMap, that.hotMap);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(field, hotMap);
+ }
+
+ public Builder builder(String field) {
+ return new Builder(field);
+ }
+
+ public static class Builder {
+
+ private String field;
+ private Map hotMap = new HashMap<>();
+
+ public Builder(String field) {
+ this.field = field;
+ }
+
+ public Builder setField(String field) {
+ this.field = field;
+ return this;
+ }
+
+ public Builder setHotMap(Map hotMap) {
+ this.hotMap = new HashMap<>(hotMap);
+ return this;
+ }
+
+ public Builder addOneHot(String valueName, String oneHotFeatureName) {
+ this.hotMap.put(valueName, oneHotFeatureName);
+ return this;
+ }
+
+ public OneHotEncoding build() {
+ return new OneHotEncoding(field, hotMap);
+ }
+ }
+}
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/inference/preprocessing/PreProcessor.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/inference/preprocessing/PreProcessor.java
new file mode 100644
index 000000000000..ea814a8a0d61
--- /dev/null
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/inference/preprocessing/PreProcessor.java
@@ -0,0 +1,33 @@
+/*
+ * Licensed to Elasticsearch under one or more contributor
+ * license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright
+ * ownership. Elasticsearch licenses this file to you under
+ * the Apache License, Version 2.0 (the "License"); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.elasticsearch.client.ml.inference.preprocessing;
+
+import org.elasticsearch.common.xcontent.ToXContentObject;
+
+
+/**
+ * Describes a pre-processor for a defined machine learning model
+ */
+public interface PreProcessor extends ToXContentObject {
+
+ /**
+ * @return The name of the pre-processor
+ */
+ String getName();
+}
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/inference/preprocessing/TargetMeanEncoding.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/inference/preprocessing/TargetMeanEncoding.java
new file mode 100644
index 000000000000..bb29924b98e1
--- /dev/null
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/inference/preprocessing/TargetMeanEncoding.java
@@ -0,0 +1,183 @@
+/*
+ * Licensed to Elasticsearch under one or more contributor
+ * license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright
+ * ownership. Elasticsearch licenses this file to you under
+ * the Apache License, Version 2.0 (the "License"); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.elasticsearch.client.ml.inference.preprocessing;
+
+import org.elasticsearch.common.ParseField;
+import org.elasticsearch.common.xcontent.ConstructingObjectParser;
+import org.elasticsearch.common.xcontent.ToXContent;
+import org.elasticsearch.common.xcontent.XContentBuilder;
+import org.elasticsearch.common.xcontent.XContentParser;
+
+import java.io.IOException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+
+/**
+ * PreProcessor for target mean encoding a set of categorical values for a given field.
+ */
+public class TargetMeanEncoding implements PreProcessor {
+
+ public static final String NAME = "target_mean_encoding";
+ public static final ParseField FIELD = new ParseField("field");
+ public static final ParseField FEATURE_NAME = new ParseField("feature_name");
+ public static final ParseField TARGET_MEANS = new ParseField("target_means");
+ public static final ParseField DEFAULT_VALUE = new ParseField("default_value");
+
+ @SuppressWarnings("unchecked")
+ public static final ConstructingObjectParser PARSER = new ConstructingObjectParser<>(
+ NAME,
+ true,
+ a -> new TargetMeanEncoding((String)a[0], (String)a[1], (Map)a[2], (Double)a[3]));
+ static {
+ PARSER.declareString(ConstructingObjectParser.constructorArg(), FIELD);
+ PARSER.declareString(ConstructingObjectParser.constructorArg(), FEATURE_NAME);
+ PARSER.declareObject(ConstructingObjectParser.constructorArg(),
+ (p, c) -> p.map(HashMap::new, XContentParser::doubleValue),
+ TARGET_MEANS);
+ PARSER.declareDouble(ConstructingObjectParser.constructorArg(), DEFAULT_VALUE);
+ }
+
+ public static TargetMeanEncoding fromXContent(XContentParser parser) {
+ return PARSER.apply(parser, null);
+ }
+
+ private final String field;
+ private final String featureName;
+ private final Map meanMap;
+ private final double defaultValue;
+
+ public TargetMeanEncoding(String field, String featureName, Map meanMap, Double defaultValue) {
+ this.field = Objects.requireNonNull(field);
+ this.featureName = Objects.requireNonNull(featureName);
+ this.meanMap = Collections.unmodifiableMap(Objects.requireNonNull(meanMap));
+ this.defaultValue = Objects.requireNonNull(defaultValue);
+ }
+
+ /**
+ * @return Field name on which to target mean encode
+ */
+ public String getField() {
+ return field;
+ }
+
+ /**
+ * @return Map of Value: targetMean for the target mean encoding
+ */
+ public Map getMeanMap() {
+ return meanMap;
+ }
+
+ /**
+ * @return The default value to set when a previously unobserved value is seen
+ */
+ public double getDefaultValue() {
+ return defaultValue;
+ }
+
+ /**
+ * @return The feature name for the encoded value
+ */
+ public String getFeatureName() {
+ return featureName;
+ }
+
+ @Override
+ public String getName() {
+ return NAME;
+ }
+
+ @Override
+ public XContentBuilder toXContent(XContentBuilder builder, ToXContent.Params params) throws IOException {
+ builder.startObject();
+ builder.field(FIELD.getPreferredName(), field);
+ builder.field(FEATURE_NAME.getPreferredName(), featureName);
+ builder.field(TARGET_MEANS.getPreferredName(), meanMap);
+ builder.field(DEFAULT_VALUE.getPreferredName(), defaultValue);
+ builder.endObject();
+ return builder;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ TargetMeanEncoding that = (TargetMeanEncoding) o;
+ return Objects.equals(field, that.field)
+ && Objects.equals(featureName, that.featureName)
+ && Objects.equals(meanMap, that.meanMap)
+ && Objects.equals(defaultValue, that.defaultValue);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(field, featureName, meanMap, defaultValue);
+ }
+
+ public Builder builder(String field) {
+ return new Builder(field);
+ }
+
+ public static class Builder {
+
+ private String field;
+ private String featureName;
+ private Map meanMap = new HashMap<>();
+ private double defaultValue;
+
+ public Builder(String field) {
+ this.field = field;
+ }
+
+ public String getField() {
+ return field;
+ }
+
+ public Builder setField(String field) {
+ this.field = field;
+ return this;
+ }
+
+ public Builder setFeatureName(String featureName) {
+ this.featureName = featureName;
+ return this;
+ }
+
+ public Builder setMeanMap(Map meanMap) {
+ this.meanMap = meanMap;
+ return this;
+ }
+
+ public Builder addMeanMapEntry(String valueName, double meanEncoding) {
+ this.meanMap.put(valueName, meanEncoding);
+ return this;
+ }
+
+ public Builder setDefaultValue(double defaultValue) {
+ this.defaultValue = defaultValue;
+ return this;
+ }
+
+ public TargetMeanEncoding build() {
+ return new TargetMeanEncoding(field, featureName, meanMap, defaultValue);
+ }
+ }
+}
diff --git a/server/src/main/java/org/elasticsearch/search/SearchContextException.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/inference/trainedmodel/TrainedModel.java
similarity index 57%
rename from server/src/main/java/org/elasticsearch/search/SearchContextException.java
rename to client/rest-high-level/src/main/java/org/elasticsearch/client/ml/inference/trainedmodel/TrainedModel.java
index 8f1ebb80139c..fb1f5c3b4ab9 100644
--- a/server/src/main/java/org/elasticsearch/search/SearchContextException.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/inference/trainedmodel/TrainedModel.java
@@ -16,26 +16,21 @@
* specific language governing permissions and limitations
* under the License.
*/
+package org.elasticsearch.client.ml.inference.trainedmodel;
-package org.elasticsearch.search;
+import org.elasticsearch.common.xcontent.ToXContentObject;
-import org.elasticsearch.common.io.stream.StreamInput;
-import org.elasticsearch.search.internal.SearchContext;
+import java.util.List;
-import java.io.IOException;
+public interface TrainedModel extends ToXContentObject {
-public class SearchContextException extends SearchException {
-
- public SearchContextException(SearchContext context, String msg) {
- super(context.shardTarget(), msg);
- }
-
- public SearchContextException(SearchContext context, String msg, Throwable t) {
- super(context.shardTarget(), msg, t);
- }
-
- public SearchContextException(StreamInput in) throws IOException {
- super(in);
- }
+ /**
+ * @return List of featureNames expected by the model. In the order that they are expected
+ */
+ List getFeatureNames();
+ /**
+ * @return The name of the model
+ */
+ String getName();
}
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/inference/trainedmodel/tree/Tree.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/inference/trainedmodel/tree/Tree.java
new file mode 100644
index 000000000000..de040ec6f9ed
--- /dev/null
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/inference/trainedmodel/tree/Tree.java
@@ -0,0 +1,192 @@
+/*
+ * Licensed to Elasticsearch under one or more contributor
+ * license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright
+ * ownership. Elasticsearch licenses this file to you under
+ * the Apache License, Version 2.0 (the "License"); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.elasticsearch.client.ml.inference.trainedmodel.tree;
+
+import org.elasticsearch.client.ml.inference.trainedmodel.TrainedModel;
+import org.elasticsearch.common.ParseField;
+import org.elasticsearch.common.Strings;
+import org.elasticsearch.common.xcontent.ObjectParser;
+import org.elasticsearch.common.xcontent.XContentBuilder;
+import org.elasticsearch.common.xcontent.XContentParser;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+public class Tree implements TrainedModel {
+
+ public static final String NAME = "tree";
+
+ public static final ParseField FEATURE_NAMES = new ParseField("feature_names");
+ public static final ParseField TREE_STRUCTURE = new ParseField("tree_structure");
+
+ private static final ObjectParser PARSER = new ObjectParser<>(NAME, true, Builder::new);
+
+ static {
+ PARSER.declareStringArray(Builder::setFeatureNames, FEATURE_NAMES);
+ PARSER.declareObjectArray(Builder::setNodes, (p, c) -> TreeNode.fromXContent(p), TREE_STRUCTURE);
+ }
+
+ public static Tree fromXContent(XContentParser parser) {
+ return PARSER.apply(parser, null).build();
+ }
+
+ private final List featureNames;
+ private final List nodes;
+
+ Tree(List featureNames, List nodes) {
+ this.featureNames = Collections.unmodifiableList(Objects.requireNonNull(featureNames));
+ this.nodes = Collections.unmodifiableList(Objects.requireNonNull(nodes));
+ }
+
+ @Override
+ public String getName() {
+ return NAME;
+ }
+
+ @Override
+ public List getFeatureNames() {
+ return featureNames;
+ }
+
+ public List getNodes() {
+ return nodes;
+ }
+
+ @Override
+ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
+ builder.startObject();
+ builder.field(FEATURE_NAMES.getPreferredName(), featureNames);
+ builder.field(TREE_STRUCTURE.getPreferredName(), nodes);
+ builder.endObject();
+ return builder;
+ }
+
+ @Override
+ public String toString() {
+ return Strings.toString(this);
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ Tree that = (Tree) o;
+ return Objects.equals(featureNames, that.featureNames)
+ && Objects.equals(nodes, that.nodes);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(featureNames, nodes);
+ }
+
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ public static class Builder {
+ private List featureNames;
+ private ArrayList nodes;
+ private int numNodes;
+
+ public Builder() {
+ nodes = new ArrayList<>();
+ // allocate space in the root node and set to a leaf
+ nodes.add(null);
+ addLeaf(0, 0.0);
+ numNodes = 1;
+ }
+
+ public Builder setFeatureNames(List featureNames) {
+ this.featureNames = featureNames;
+ return this;
+ }
+
+ public Builder addNode(TreeNode.Builder node) {
+ nodes.add(node);
+ return this;
+ }
+
+ public Builder setNodes(List nodes) {
+ this.nodes = new ArrayList<>(nodes);
+ return this;
+ }
+
+ public Builder setNodes(TreeNode.Builder... nodes) {
+ return setNodes(Arrays.asList(nodes));
+ }
+
+ /**
+ * Add a decision node. Space for the child nodes is allocated
+ * @param nodeIndex Where to place the node. This is either 0 (root) or an existing child node index
+ * @param featureIndex The feature index the decision is made on
+ * @param isDefaultLeft Default left branch if the feature is missing
+ * @param decisionThreshold The decision threshold
+ * @return The created node
+ */
+ public TreeNode.Builder addJunction(int nodeIndex, int featureIndex, boolean isDefaultLeft, double decisionThreshold) {
+ int leftChild = numNodes++;
+ int rightChild = numNodes++;
+ nodes.ensureCapacity(nodeIndex + 1);
+ for (int i = nodes.size(); i < nodeIndex + 1; i++) {
+ nodes.add(null);
+ }
+
+ TreeNode.Builder node = TreeNode.builder(nodeIndex)
+ .setDefaultLeft(isDefaultLeft)
+ .setLeftChild(leftChild)
+ .setRightChild(rightChild)
+ .setSplitFeature(featureIndex)
+ .setThreshold(decisionThreshold);
+ nodes.set(nodeIndex, node);
+
+ // allocate space for the child nodes
+ while (nodes.size() <= rightChild) {
+ nodes.add(null);
+ }
+
+ return node;
+ }
+
+ /**
+ * Sets the node at {@code nodeIndex} to a leaf node.
+ * @param nodeIndex The index as allocated by a call to {@link #addJunction(int, int, boolean, double)}
+ * @param value The prediction value
+ * @return this
+ */
+ public Builder addLeaf(int nodeIndex, double value) {
+ for (int i = nodes.size(); i < nodeIndex + 1; i++) {
+ nodes.add(null);
+ }
+ nodes.set(nodeIndex, TreeNode.builder(nodeIndex).setLeafValue(value));
+ return this;
+ }
+
+ public Tree build() {
+ return new Tree(featureNames,
+ nodes.stream().map(TreeNode.Builder::build).collect(Collectors.toList()));
+ }
+ }
+
+}
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/inference/trainedmodel/tree/TreeNode.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/inference/trainedmodel/tree/TreeNode.java
new file mode 100644
index 000000000000..020aaa097169
--- /dev/null
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/ml/inference/trainedmodel/tree/TreeNode.java
@@ -0,0 +1,280 @@
+/*
+ * Licensed to Elasticsearch under one or more contributor
+ * license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright
+ * ownership. Elasticsearch licenses this file to you under
+ * the Apache License, Version 2.0 (the "License"); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.elasticsearch.client.ml.inference.trainedmodel.tree;
+
+import org.elasticsearch.client.ml.job.config.Operator;
+import org.elasticsearch.common.ParseField;
+import org.elasticsearch.common.Strings;
+import org.elasticsearch.common.xcontent.ObjectParser;
+import org.elasticsearch.common.xcontent.ToXContentObject;
+import org.elasticsearch.common.xcontent.XContentBuilder;
+import org.elasticsearch.common.xcontent.XContentParser;
+
+import java.io.IOException;
+import java.util.Objects;
+
+public class TreeNode implements ToXContentObject {
+
+ public static final String NAME = "tree_node";
+
+ public static final ParseField DECISION_TYPE = new ParseField("decision_type");
+ public static final ParseField THRESHOLD = new ParseField("threshold");
+ public static final ParseField LEFT_CHILD = new ParseField("left_child");
+ public static final ParseField RIGHT_CHILD = new ParseField("right_child");
+ public static final ParseField DEFAULT_LEFT = new ParseField("default_left");
+ public static final ParseField SPLIT_FEATURE = new ParseField("split_feature");
+ public static final ParseField NODE_INDEX = new ParseField("node_index");
+ public static final ParseField SPLIT_GAIN = new ParseField("split_gain");
+ public static final ParseField LEAF_VALUE = new ParseField("leaf_value");
+
+
+ private static final ObjectParser PARSER = new ObjectParser<>(
+ NAME,
+ true,
+ Builder::new);
+ static {
+ PARSER.declareDouble(Builder::setThreshold, THRESHOLD);
+ PARSER.declareField(Builder::setOperator,
+ p -> Operator.fromString(p.text()),
+ DECISION_TYPE,
+ ObjectParser.ValueType.STRING);
+ PARSER.declareInt(Builder::setLeftChild, LEFT_CHILD);
+ PARSER.declareInt(Builder::setRightChild, RIGHT_CHILD);
+ PARSER.declareBoolean(Builder::setDefaultLeft, DEFAULT_LEFT);
+ PARSER.declareInt(Builder::setSplitFeature, SPLIT_FEATURE);
+ PARSER.declareInt(Builder::setNodeIndex, NODE_INDEX);
+ PARSER.declareDouble(Builder::setSplitGain, SPLIT_GAIN);
+ PARSER.declareDouble(Builder::setLeafValue, LEAF_VALUE);
+ }
+
+ public static Builder fromXContent(XContentParser parser) {
+ return PARSER.apply(parser, null);
+ }
+
+ private final Operator operator;
+ private final Double threshold;
+ private final Integer splitFeature;
+ private final int nodeIndex;
+ private final Double splitGain;
+ private final Double leafValue;
+ private final Boolean defaultLeft;
+ private final Integer leftChild;
+ private final Integer rightChild;
+
+
+ TreeNode(Operator operator,
+ Double threshold,
+ Integer splitFeature,
+ int nodeIndex,
+ Double splitGain,
+ Double leafValue,
+ Boolean defaultLeft,
+ Integer leftChild,
+ Integer rightChild) {
+ this.operator = operator;
+ this.threshold = threshold;
+ this.splitFeature = splitFeature;
+ this.nodeIndex = nodeIndex;
+ this.splitGain = splitGain;
+ this.leafValue = leafValue;
+ this.defaultLeft = defaultLeft;
+ this.leftChild = leftChild;
+ this.rightChild = rightChild;
+ }
+
+ public Operator getOperator() {
+ return operator;
+ }
+
+ public Double getThreshold() {
+ return threshold;
+ }
+
+ public Integer getSplitFeature() {
+ return splitFeature;
+ }
+
+ public Integer getNodeIndex() {
+ return nodeIndex;
+ }
+
+ public Double getSplitGain() {
+ return splitGain;
+ }
+
+ public Double getLeafValue() {
+ return leafValue;
+ }
+
+ public Boolean isDefaultLeft() {
+ return defaultLeft;
+ }
+
+ public Integer getLeftChild() {
+ return leftChild;
+ }
+
+ public Integer getRightChild() {
+ return rightChild;
+ }
+
+ @Override
+ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
+ builder.startObject();
+ addOptionalField(builder, DECISION_TYPE, operator);
+ addOptionalField(builder, THRESHOLD, threshold);
+ addOptionalField(builder, SPLIT_FEATURE, splitFeature);
+ addOptionalField(builder, SPLIT_GAIN, splitGain);
+ addOptionalField(builder, NODE_INDEX, nodeIndex);
+ addOptionalField(builder, LEAF_VALUE, leafValue);
+ addOptionalField(builder, DEFAULT_LEFT, defaultLeft );
+ addOptionalField(builder, LEFT_CHILD, leftChild);
+ addOptionalField(builder, RIGHT_CHILD, rightChild);
+ builder.endObject();
+ return builder;
+ }
+
+ private void addOptionalField(XContentBuilder builder, ParseField field, Object value) throws IOException {
+ if (value != null) {
+ builder.field(field.getPreferredName(), value);
+ }
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ TreeNode that = (TreeNode) o;
+ return Objects.equals(operator, that.operator)
+ && Objects.equals(threshold, that.threshold)
+ && Objects.equals(splitFeature, that.splitFeature)
+ && Objects.equals(nodeIndex, that.nodeIndex)
+ && Objects.equals(splitGain, that.splitGain)
+ && Objects.equals(leafValue, that.leafValue)
+ && Objects.equals(defaultLeft, that.defaultLeft)
+ && Objects.equals(leftChild, that.leftChild)
+ && Objects.equals(rightChild, that.rightChild);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(operator,
+ threshold,
+ splitFeature,
+ splitGain,
+ nodeIndex,
+ leafValue,
+ defaultLeft,
+ leftChild,
+ rightChild);
+ }
+
+ @Override
+ public String toString() {
+ return Strings.toString(this);
+ }
+
+ public static Builder builder(int nodeIndex) {
+ return new Builder(nodeIndex);
+ }
+
+ public static class Builder {
+ private Operator operator;
+ private Double threshold;
+ private Integer splitFeature;
+ private int nodeIndex;
+ private Double splitGain;
+ private Double leafValue;
+ private Boolean defaultLeft;
+ private Integer leftChild;
+ private Integer rightChild;
+
+ public Builder(int nodeIndex) {
+ nodeIndex = nodeIndex;
+ }
+
+ private Builder() {
+ }
+
+ public Builder setOperator(Operator operator) {
+ this.operator = operator;
+ return this;
+ }
+
+ public Builder setThreshold(Double threshold) {
+ this.threshold = threshold;
+ return this;
+ }
+
+ public Builder setSplitFeature(Integer splitFeature) {
+ this.splitFeature = splitFeature;
+ return this;
+ }
+
+ public Builder setNodeIndex(int nodeIndex) {
+ this.nodeIndex = nodeIndex;
+ return this;
+ }
+
+ public Builder setSplitGain(Double splitGain) {
+ this.splitGain = splitGain;
+ return this;
+ }
+
+ public Builder setLeafValue(Double leafValue) {
+ this.leafValue = leafValue;
+ return this;
+ }
+
+ public Builder setDefaultLeft(Boolean defaultLeft) {
+ this.defaultLeft = defaultLeft;
+ return this;
+ }
+
+ public Builder setLeftChild(Integer leftChild) {
+ this.leftChild = leftChild;
+ return this;
+ }
+
+ public Integer getLeftChild() {
+ return leftChild;
+ }
+
+ public Builder setRightChild(Integer rightChild) {
+ this.rightChild = rightChild;
+ return this;
+ }
+
+ public Integer getRightChild() {
+ return rightChild;
+ }
+
+ public TreeNode build() {
+ return new TreeNode(operator,
+ threshold,
+ splitFeature,
+ nodeIndex,
+ splitGain,
+ leafValue,
+ defaultLeft,
+ leftChild,
+ rightChild);
+ }
+ }
+}
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/slm/SnapshotLifecycleStats.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/slm/SnapshotLifecycleStats.java
index fc54f74649b0..6a8eb3230306 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/slm/SnapshotLifecycleStats.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/slm/SnapshotLifecycleStats.java
@@ -74,7 +74,7 @@ public class SnapshotLifecycleStats implements ToXContentObject {
PARSER.declareLong(ConstructingObjectParser.constructorArg(), RETENTION_FAILED);
PARSER.declareLong(ConstructingObjectParser.constructorArg(), RETENTION_TIMED_OUT);
PARSER.declareLong(ConstructingObjectParser.constructorArg(), RETENTION_TIME_MILLIS);
- PARSER.declareNamedObjects(ConstructingObjectParser.constructorArg(), (p, c, n) -> SnapshotPolicyStats.parse(p, n), POLICY_STATS);
+ PARSER.declareObjectArray(ConstructingObjectParser.constructorArg(), SnapshotPolicyStats.PARSER, POLICY_STATS);
}
// Package visible for testing
@@ -178,22 +178,25 @@ public class SnapshotLifecycleStats implements ToXContentObject {
private final long snapshotsDeleted;
private final long snapshotDeleteFailures;
+ public static final ParseField POLICY_ID = new ParseField("policy");
static final ParseField SNAPSHOTS_TAKEN = new ParseField("snapshots_taken");
static final ParseField SNAPSHOTS_FAILED = new ParseField("snapshots_failed");
static final ParseField SNAPSHOTS_DELETED = new ParseField("snapshots_deleted");
static final ParseField SNAPSHOT_DELETION_FAILURES = new ParseField("snapshot_deletion_failures");
- private static final ConstructingObjectParser PARSER =
+ private static final ConstructingObjectParser PARSER =
new ConstructingObjectParser<>("snapshot_policy_stats", true,
- (a, id) -> {
- long taken = (long) a[0];
- long failed = (long) a[1];
- long deleted = (long) a[2];
- long deleteFailed = (long) a[3];
+ a -> {
+ String id = (String) a[0];
+ long taken = (long) a[1];
+ long failed = (long) a[2];
+ long deleted = (long) a[3];
+ long deleteFailed = (long) a[4];
return new SnapshotPolicyStats(id, taken, failed, deleted, deleteFailed);
});
static {
+ PARSER.declareString(ConstructingObjectParser.constructorArg(), POLICY_ID);
PARSER.declareLong(ConstructingObjectParser.constructorArg(), SNAPSHOTS_TAKEN);
PARSER.declareLong(ConstructingObjectParser.constructorArg(), SNAPSHOTS_FAILED);
PARSER.declareLong(ConstructingObjectParser.constructorArg(), SNAPSHOTS_DELETED);
@@ -209,7 +212,11 @@ public class SnapshotLifecycleStats implements ToXContentObject {
}
public static SnapshotPolicyStats parse(XContentParser parser, String policyId) {
- return PARSER.apply(parser, policyId);
+ return PARSER.apply(parser, null);
+ }
+
+ public String getPolicyId() {
+ return policyId;
}
public long getSnapshotsTaken() {
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/transform/DeleteDataFrameTransformRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/transform/DeleteTransformRequest.java
similarity index 85%
rename from client/rest-high-level/src/main/java/org/elasticsearch/client/transform/DeleteDataFrameTransformRequest.java
rename to client/rest-high-level/src/main/java/org/elasticsearch/client/transform/DeleteTransformRequest.java
index d28779efd1d6..7eaeb1435b6f 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/transform/DeleteDataFrameTransformRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/transform/DeleteTransformRequest.java
@@ -27,16 +27,16 @@ import java.util.Optional;
/**
- * Request to delete a data frame transform
+ * Request to delete a transform
*/
-public class DeleteDataFrameTransformRequest implements Validatable {
+public class DeleteTransformRequest implements Validatable {
public static final String FORCE = "force";
private final String id;
private Boolean force;
- public DeleteDataFrameTransformRequest(String id) {
+ public DeleteTransformRequest(String id) {
this.id = id;
}
@@ -56,7 +56,7 @@ public class DeleteDataFrameTransformRequest implements Validatable {
public Optional validate() {
if (id == null) {
ValidationException validationException = new ValidationException();
- validationException.addValidationError("data frame transform id must not be null");
+ validationException.addValidationError("transform id must not be null");
return Optional.of(validationException);
} else {
return Optional.empty();
@@ -77,7 +77,7 @@ public class DeleteDataFrameTransformRequest implements Validatable {
if (obj == null || getClass() != obj.getClass()) {
return false;
}
- DeleteDataFrameTransformRequest other = (DeleteDataFrameTransformRequest) obj;
+ DeleteTransformRequest other = (DeleteTransformRequest) obj;
return Objects.equals(id, other.id) && Objects.equals(force, other.force);
}
}
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/transform/GetDataFrameTransformRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/transform/GetTransformRequest.java
similarity index 80%
rename from client/rest-high-level/src/main/java/org/elasticsearch/client/transform/GetDataFrameTransformRequest.java
rename to client/rest-high-level/src/main/java/org/elasticsearch/client/transform/GetTransformRequest.java
index 3c442b650102..f0238083f6af 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/transform/GetDataFrameTransformRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/transform/GetTransformRequest.java
@@ -28,22 +28,22 @@ import java.util.List;
import java.util.Objects;
import java.util.Optional;
-public class GetDataFrameTransformRequest implements Validatable {
+public class GetTransformRequest implements Validatable {
public static final String ALLOW_NO_MATCH = "allow_no_match";
/**
- * Helper method to create a request that will get ALL Data Frame Transforms
- * @return new {@link GetDataFrameTransformRequest} object for the id "_all"
+ * Helper method to create a request that will get ALL Transforms
+ * @return new {@link GetTransformRequest} object for the id "_all"
*/
- public static GetDataFrameTransformRequest getAllDataFrameTransformsRequest() {
- return new GetDataFrameTransformRequest("_all");
+ public static GetTransformRequest getAllTransformRequest() {
+ return new GetTransformRequest("_all");
}
private final List ids;
private PageParams pageParams;
private Boolean allowNoMatch;
- public GetDataFrameTransformRequest(String... ids) {
+ public GetTransformRequest(String... ids) {
this.ids = Arrays.asList(ids);
}
@@ -71,7 +71,7 @@ public class GetDataFrameTransformRequest implements Validatable {
public Optional validate() {
if (ids == null || ids.isEmpty()) {
ValidationException validationException = new ValidationException();
- validationException.addValidationError("data frame transform id must not be null");
+ validationException.addValidationError("transform id must not be null");
return Optional.of(validationException);
} else {
return Optional.empty();
@@ -92,7 +92,7 @@ public class GetDataFrameTransformRequest implements Validatable {
if (obj == null || getClass() != obj.getClass()) {
return false;
}
- GetDataFrameTransformRequest other = (GetDataFrameTransformRequest) obj;
+ GetTransformRequest other = (GetTransformRequest) obj;
return Objects.equals(ids, other.ids)
&& Objects.equals(pageParams, other.pageParams)
&& Objects.equals(allowNoMatch, other.allowNoMatch);
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/transform/GetDataFrameTransformResponse.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/transform/GetTransformResponse.java
similarity index 77%
rename from client/rest-high-level/src/main/java/org/elasticsearch/client/transform/GetDataFrameTransformResponse.java
rename to client/rest-high-level/src/main/java/org/elasticsearch/client/transform/GetTransformResponse.java
index e1ca2df503d9..de2418b3852d 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/transform/GetDataFrameTransformResponse.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/transform/GetTransformResponse.java
@@ -19,7 +19,7 @@
package org.elasticsearch.client.transform;
-import org.elasticsearch.client.transform.transforms.DataFrameTransformConfig;
+import org.elasticsearch.client.transform.transforms.TransformConfig;
import org.elasticsearch.common.Nullable;
import org.elasticsearch.common.ParseField;
import org.elasticsearch.common.xcontent.ConstructingObjectParser;
@@ -31,7 +31,7 @@ import java.util.Objects;
import static org.elasticsearch.common.xcontent.ConstructingObjectParser.constructorArg;
import static org.elasticsearch.common.xcontent.ConstructingObjectParser.optionalConstructorArg;
-public class GetDataFrameTransformResponse {
+public class GetTransformResponse {
public static final ParseField TRANSFORMS = new ParseField("transforms");
public static final ParseField INVALID_TRANSFORMS = new ParseField("invalid_transforms");
@@ -42,30 +42,30 @@ public class GetDataFrameTransformResponse {
new ConstructingObjectParser<>("invalid_transforms", true, args -> new InvalidTransforms((List) args[0]));
@SuppressWarnings("unchecked")
- static final ConstructingObjectParser PARSER = new ConstructingObjectParser<>(
- "get_data_frame_transform", true, args -> new GetDataFrameTransformResponse(
- (List) args[0], (int) args[1], (InvalidTransforms) args[2]));
+ static final ConstructingObjectParser PARSER = new ConstructingObjectParser<>(
+ "get_transform", true, args -> new GetTransformResponse(
+ (List) args[0], (int) args[1], (InvalidTransforms) args[2]));
static {
// Discard the count field which is the size of the transforms array
INVALID_TRANSFORMS_PARSER.declareInt((a, b) -> {}, COUNT);
INVALID_TRANSFORMS_PARSER.declareStringArray(constructorArg(), TRANSFORMS);
- PARSER.declareObjectArray(constructorArg(), DataFrameTransformConfig.PARSER::apply, TRANSFORMS);
+ PARSER.declareObjectArray(constructorArg(), TransformConfig.PARSER::apply, TRANSFORMS);
PARSER.declareInt(constructorArg(), COUNT);
PARSER.declareObject(optionalConstructorArg(), INVALID_TRANSFORMS_PARSER::apply, INVALID_TRANSFORMS);
}
- public static GetDataFrameTransformResponse fromXContent(final XContentParser parser) {
- return GetDataFrameTransformResponse.PARSER.apply(parser, null);
+ public static GetTransformResponse fromXContent(final XContentParser parser) {
+ return GetTransformResponse.PARSER.apply(parser, null);
}
- private List transformConfigurations;
+ private List transformConfigurations;
private int count;
private InvalidTransforms invalidTransforms;
- public GetDataFrameTransformResponse(List transformConfigurations,
- int count,
- @Nullable InvalidTransforms invalidTransforms) {
+ public GetTransformResponse(List transformConfigurations,
+ int count,
+ @Nullable InvalidTransforms invalidTransforms) {
this.transformConfigurations = transformConfigurations;
this.count = count;
this.invalidTransforms = invalidTransforms;
@@ -80,7 +80,7 @@ public class GetDataFrameTransformResponse {
return count;
}
- public List getTransformConfigurations() {
+ public List getTransformConfigurations() {
return transformConfigurations;
}
@@ -99,7 +99,7 @@ public class GetDataFrameTransformResponse {
return false;
}
- final GetDataFrameTransformResponse that = (GetDataFrameTransformResponse) other;
+ final GetTransformResponse that = (GetTransformResponse) other;
return Objects.equals(this.transformConfigurations, that.transformConfigurations)
&& Objects.equals(this.count, that.count)
&& Objects.equals(this.invalidTransforms, that.invalidTransforms);
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/transform/GetDataFrameTransformStatsRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/transform/GetTransformStatsRequest.java
similarity index 88%
rename from client/rest-high-level/src/main/java/org/elasticsearch/client/transform/GetDataFrameTransformStatsRequest.java
rename to client/rest-high-level/src/main/java/org/elasticsearch/client/transform/GetTransformStatsRequest.java
index 579dd715cbc5..d226d5c67bb5 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/transform/GetDataFrameTransformStatsRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/transform/GetTransformStatsRequest.java
@@ -26,12 +26,12 @@ import org.elasticsearch.client.core.PageParams;
import java.util.Objects;
import java.util.Optional;
-public class GetDataFrameTransformStatsRequest implements Validatable {
+public class GetTransformStatsRequest implements Validatable {
private final String id;
private PageParams pageParams;
private Boolean allowNoMatch;
- public GetDataFrameTransformStatsRequest(String id) {
+ public GetTransformStatsRequest(String id) {
this.id = id;
}
@@ -59,7 +59,7 @@ public class GetDataFrameTransformStatsRequest implements Validatable {
public Optional validate() {
if (id == null) {
ValidationException validationException = new ValidationException();
- validationException.addValidationError("data frame transform id must not be null");
+ validationException.addValidationError("transform id must not be null");
return Optional.of(validationException);
} else {
return Optional.empty();
@@ -80,7 +80,7 @@ public class GetDataFrameTransformStatsRequest implements Validatable {
if (obj == null || getClass() != obj.getClass()) {
return false;
}
- GetDataFrameTransformStatsRequest other = (GetDataFrameTransformStatsRequest) obj;
+ GetTransformStatsRequest other = (GetTransformStatsRequest) obj;
return Objects.equals(id, other.id)
&& Objects.equals(pageParams, other.pageParams)
&& Objects.equals(allowNoMatch, other.allowNoMatch);
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/transform/GetDataFrameTransformStatsResponse.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/transform/GetTransformStatsResponse.java
similarity index 78%
rename from client/rest-high-level/src/main/java/org/elasticsearch/client/transform/GetDataFrameTransformStatsResponse.java
rename to client/rest-high-level/src/main/java/org/elasticsearch/client/transform/GetTransformStatsResponse.java
index a1c4fc819749..4debe2ffd75a 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/transform/GetDataFrameTransformStatsResponse.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/transform/GetTransformStatsResponse.java
@@ -21,7 +21,7 @@ package org.elasticsearch.client.transform;
import org.elasticsearch.ElasticsearchException;
import org.elasticsearch.action.TaskOperationFailure;
-import org.elasticsearch.client.transform.transforms.DataFrameTransformStats;
+import org.elasticsearch.client.transform.transforms.TransformStats;
import org.elasticsearch.common.Nullable;
import org.elasticsearch.common.ParseField;
import org.elasticsearch.common.xcontent.ConstructingObjectParser;
@@ -34,19 +34,19 @@ import java.util.Objects;
import static org.elasticsearch.common.xcontent.ConstructingObjectParser.constructorArg;
import static org.elasticsearch.common.xcontent.ConstructingObjectParser.optionalConstructorArg;
-public class GetDataFrameTransformStatsResponse {
+public class GetTransformStatsResponse {
public static final ParseField TRANSFORMS = new ParseField("transforms");
public static final ParseField COUNT = new ParseField("count");
@SuppressWarnings("unchecked")
- static final ConstructingObjectParser PARSER = new ConstructingObjectParser<>(
- "get_data_frame_transform_stats_response", true,
- args -> new GetDataFrameTransformStatsResponse((List) args[0],
+ static final ConstructingObjectParser PARSER = new ConstructingObjectParser<>(
+ "get_transform_stats_response", true,
+ args -> new GetTransformStatsResponse((List) args[0],
(List) args[1], (List) args[2]));
static {
- PARSER.declareObjectArray(constructorArg(), DataFrameTransformStats.PARSER::apply, TRANSFORMS);
+ PARSER.declareObjectArray(constructorArg(), TransformStats.PARSER::apply, TRANSFORMS);
// Discard the count field which is the size of the transforms array
PARSER.declareInt((a, b) -> {}, COUNT);
PARSER.declareObjectArray(optionalConstructorArg(), (p, c) -> TaskOperationFailure.fromXContent(p),
@@ -55,15 +55,15 @@ public class GetDataFrameTransformStatsResponse {
AcknowledgedTasksResponse.NODE_FAILURES);
}
- public static GetDataFrameTransformStatsResponse fromXContent(final XContentParser parser) {
- return GetDataFrameTransformStatsResponse.PARSER.apply(parser, null);
+ public static GetTransformStatsResponse fromXContent(final XContentParser parser) {
+ return GetTransformStatsResponse.PARSER.apply(parser, null);
}
- private final List transformsStats;
+ private final List transformsStats;
private final List taskFailures;
private final List nodeFailures;
- public GetDataFrameTransformStatsResponse(List transformsStats,
+ public GetTransformStatsResponse(List transformsStats,
@Nullable List taskFailures,
@Nullable List extends ElasticsearchException> nodeFailures) {
this.transformsStats = transformsStats;
@@ -71,7 +71,7 @@ public class GetDataFrameTransformStatsResponse {
this.nodeFailures = nodeFailures == null ? Collections.emptyList() : Collections.unmodifiableList(nodeFailures);
}
- public List getTransformsStats() {
+ public List getTransformsStats() {
return transformsStats;
}
@@ -98,7 +98,7 @@ public class GetDataFrameTransformStatsResponse {
return false;
}
- final GetDataFrameTransformStatsResponse that = (GetDataFrameTransformStatsResponse) other;
+ final GetTransformStatsResponse that = (GetTransformStatsResponse) other;
return Objects.equals(this.transformsStats, that.transformsStats)
&& Objects.equals(this.nodeFailures, that.nodeFailures)
&& Objects.equals(this.taskFailures, that.taskFailures);
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/transform/PreviewDataFrameTransformRequest.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/transform/PreviewTransformRequest.java
similarity index 80%
rename from client/rest-high-level/src/main/java/org/elasticsearch/client/transform/PreviewDataFrameTransformRequest.java
rename to client/rest-high-level/src/main/java/org/elasticsearch/client/transform/PreviewTransformRequest.java
index ab06ebfa4c9e..4eba5c60aa71 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/transform/PreviewDataFrameTransformRequest.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/transform/PreviewTransformRequest.java
@@ -21,7 +21,7 @@ package org.elasticsearch.client.transform;
import org.elasticsearch.client.Validatable;
import org.elasticsearch.client.ValidationException;
-import org.elasticsearch.client.transform.transforms.DataFrameTransformConfig;
+import org.elasticsearch.client.transform.transforms.TransformConfig;
import org.elasticsearch.common.xcontent.ToXContent;
import org.elasticsearch.common.xcontent.ToXContentObject;
import org.elasticsearch.common.xcontent.XContentBuilder;
@@ -30,15 +30,15 @@ import java.io.IOException;
import java.util.Objects;
import java.util.Optional;
-public class PreviewDataFrameTransformRequest implements ToXContentObject, Validatable {
+public class PreviewTransformRequest implements ToXContentObject, Validatable {
- private final DataFrameTransformConfig config;
+ private final TransformConfig config;
- public PreviewDataFrameTransformRequest(DataFrameTransformConfig config) {
+ public PreviewTransformRequest(TransformConfig config) {
this.config = config;
}
- public DataFrameTransformConfig getConfig() {
+ public TransformConfig getConfig() {
return config;
}
@@ -51,11 +51,11 @@ public class PreviewDataFrameTransformRequest implements ToXContentObject, Valid
public Optional validate() {
ValidationException validationException = new ValidationException();
if (config == null) {
- validationException.addValidationError("preview requires a non-null data frame config");
+ validationException.addValidationError("preview requires a non-null transform config");
return Optional.of(validationException);
} else {
if (config.getSource() == null) {
- validationException.addValidationError("data frame transform source cannot be null");
+ validationException.addValidationError("transform source cannot be null");
}
}
@@ -79,7 +79,7 @@ public class PreviewDataFrameTransformRequest implements ToXContentObject, Valid
if (getClass() != obj.getClass()) {
return false;
}
- PreviewDataFrameTransformRequest other = (PreviewDataFrameTransformRequest) obj;
+ PreviewTransformRequest other = (PreviewTransformRequest) obj;
return Objects.equals(config, other.config);
}
}
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/transform/PreviewDataFrameTransformResponse.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/transform/PreviewTransformResponse.java
similarity index 80%
rename from client/rest-high-level/src/main/java/org/elasticsearch/client/transform/PreviewDataFrameTransformResponse.java
rename to client/rest-high-level/src/main/java/org/elasticsearch/client/transform/PreviewTransformResponse.java
index 9f7cd2b313ab..215d529f9499 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/transform/PreviewDataFrameTransformResponse.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/transform/PreviewTransformResponse.java
@@ -26,23 +26,23 @@ import java.util.List;
import java.util.Map;
import java.util.Objects;
-public class PreviewDataFrameTransformResponse {
+public class PreviewTransformResponse {
private static final String PREVIEW = "preview";
private static final String MAPPINGS = "mappings";
@SuppressWarnings("unchecked")
- public static PreviewDataFrameTransformResponse fromXContent(final XContentParser parser) throws IOException {
+ public static PreviewTransformResponse fromXContent(final XContentParser parser) throws IOException {
Map previewMap = parser.mapOrdered();
Object previewDocs = previewMap.get(PREVIEW);
Object mappings = previewMap.get(MAPPINGS);
- return new PreviewDataFrameTransformResponse((List