Browse Source

Move composite aggregation to core (#27474)

This change removes the module named aggs-composite and adds the `composite` aggs
as a core aggregation. This allows other plugins to use this new aggregation
and simplifies the integration in the HL rest client.
Jim Ferenczi 8 years ago
parent
commit
6319424e4a
39 changed files with 137 additions and 400 deletions
  1. 0 1
      build.gradle
  2. 1 2
      client/rest-high-level/build.gradle
  3. 3 0
      client/rest-high-level/src/main/java/org/elasticsearch/client/RestHighLevelClient.java
  4. 2 4
      client/rest-high-level/src/test/java/org/elasticsearch/client/RestHighLevelClientTests.java
  5. 0 1
      client/transport/build.gradle
  6. 1 4
      client/transport/src/main/java/org/elasticsearch/transport/client/PreBuiltTransportClient.java
  7. 1 3
      client/transport/src/test/java/org/elasticsearch/transport/client/PreBuiltTransportClientTests.java
  8. 5 0
      core/src/main/java/org/elasticsearch/search/SearchModule.java
  9. 1 1
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeAggregation.java
  10. 1 1
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeAggregationBuilder.java
  11. 1 1
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeAggregationFactory.java
  12. 1 1
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeAggregationPlugin.java
  13. 1 1
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeAggregator.java
  14. 1 13
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeKey.java
  15. 5 9
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeValuesComparator.java
  16. 1 1
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeValuesSource.java
  17. 1 1
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeValuesSourceBuilder.java
  18. 1 1
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeValuesSourceConfig.java
  19. 1 1
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeValuesSourceParserHelper.java
  20. 1 1
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/DateHistogramValuesSourceBuilder.java
  21. 1 1
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/HistogramValuesSource.java
  22. 1 1
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/HistogramValuesSourceBuilder.java
  23. 2 2
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/InternalComposite.java
  24. 1 1
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/ParsedComposite.java
  25. 1 1
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/RoundingValuesSource.java
  26. 1 1
      core/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/TermsValuesSourceBuilder.java
  27. 2 0
      core/src/test/java/org/elasticsearch/search/aggregations/AggregationsTests.java
  28. 94 0
      core/src/test/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeAggregationBuilderTests.java
  29. 1 1
      core/src/test/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeAggregatorTests.java
  30. 1 25
      core/src/test/java/org/elasticsearch/search/aggregations/bucket/composite/InternalCompositeTests.java
  31. 0 27
      modules/aggs-composite/build.gradle
  32. 0 42
      modules/aggs-composite/src/main/java/org/elasticsearch/search/aggregations/composite/spi/CompositeNamedXContentProvider.java
  33. 0 1
      modules/aggs-composite/src/main/resources/META-INF/services/org.elasticsearch.plugins.spi.NamedXContentProvider
  34. 0 196
      modules/aggs-composite/src/test/java/org/elasticsearch/search/aggregations/composite/CompositeAggregationBuilderTests.java
  35. 0 35
      modules/aggs-composite/src/test/java/org/elasticsearch/search/aggregations/composite/CompositeAggregationsClientYamlTestSuiteIT.java
  36. 0 13
      modules/aggs-composite/src/test/resources/rest-api-spec/test/composite/10_basic.yml
  37. 0 4
      rest-api-spec/src/main/resources/rest-api-spec/test/search.aggregation/230_composite.yml
  38. 0 1
      settings.gradle
  39. 3 1
      test/framework/src/main/java/org/elasticsearch/test/InternalAggregationTestCase.java

+ 0 - 1
build.gradle

@@ -251,7 +251,6 @@ subprojects {
     "org.elasticsearch.plugin:parent-join-client:${version}": ':modules:parent-join',
     "org.elasticsearch.plugin:aggs-matrix-stats-client:${version}": ':modules:aggs-matrix-stats',
     "org.elasticsearch.plugin:percolator-client:${version}": ':modules:percolator',
-    "org.elasticsearch.plugin:aggs-composite-client:${version}": ':modules:aggs-composite',
   ]
   if (indexCompatVersions[-1].snapshot) {
     /* The last and second to last versions can be snapshots. Rather than use

+ 1 - 2
client/rest-high-level/build.gradle

@@ -39,8 +39,7 @@ dependencies {
   compile "org.elasticsearch.client:elasticsearch-rest-client:${version}"
   compile "org.elasticsearch.plugin:parent-join-client:${version}"
   compile "org.elasticsearch.plugin:aggs-matrix-stats-client:${version}"
-  compile "org.elasticsearch.plugin:aggs-composite-client:${version}"
-    
+
   testCompile "org.elasticsearch.client:test:${version}"
   testCompile "org.elasticsearch.test:framework:${version}"
   testCompile "com.carrotsearch.randomizedtesting:randomizedtesting-runner:${versions.randomizedrunner}"

+ 3 - 0
client/rest-high-level/src/main/java/org/elasticsearch/client/RestHighLevelClient.java

@@ -56,6 +56,8 @@ import org.elasticsearch.rest.RestStatus;
 import org.elasticsearch.search.aggregations.Aggregation;
 import org.elasticsearch.search.aggregations.bucket.adjacency.AdjacencyMatrixAggregationBuilder;
 import org.elasticsearch.search.aggregations.bucket.adjacency.ParsedAdjacencyMatrix;
+import org.elasticsearch.search.aggregations.bucket.composite.CompositeAggregationBuilder;
+import org.elasticsearch.search.aggregations.bucket.composite.ParsedComposite;
 import org.elasticsearch.search.aggregations.bucket.filter.FilterAggregationBuilder;
 import org.elasticsearch.search.aggregations.bucket.filter.FiltersAggregationBuilder;
 import org.elasticsearch.search.aggregations.bucket.filter.ParsedFilter;
@@ -621,6 +623,7 @@ public class RestHighLevelClient implements Closeable {
         map.put(ScriptedMetricAggregationBuilder.NAME, (p, c) -> ParsedScriptedMetric.fromXContent(p, (String) c));
         map.put(IpRangeAggregationBuilder.NAME, (p, c) -> ParsedBinaryRange.fromXContent(p, (String) c));
         map.put(TopHitsAggregationBuilder.NAME, (p, c) -> ParsedTopHits.fromXContent(p, (String) c));
+        map.put(CompositeAggregationBuilder.NAME, (p, c) -> ParsedComposite.fromXContent(p, (String) c));
         List<NamedXContentRegistry.Entry> entries = map.entrySet().stream()
                 .map(entry -> new NamedXContentRegistry.Entry(Aggregation.class, new ParseField(entry.getKey()), entry.getValue()))
                 .collect(Collectors.toList());

+ 2 - 4
client/rest-high-level/src/test/java/org/elasticsearch/client/RestHighLevelClientTests.java

@@ -62,7 +62,6 @@ import org.elasticsearch.rest.RestStatus;
 import org.elasticsearch.search.SearchHits;
 import org.elasticsearch.search.aggregations.Aggregation;
 import org.elasticsearch.search.aggregations.InternalAggregations;
-import org.elasticsearch.search.aggregations.composite.CompositeAggregationBuilder;
 import org.elasticsearch.search.aggregations.matrix.stats.MatrixStatsAggregationBuilder;
 import org.elasticsearch.search.suggest.Suggest;
 import org.elasticsearch.test.ESTestCase;
@@ -649,7 +648,7 @@ public class RestHighLevelClientTests extends ESTestCase {
 
     public void testProvidedNamedXContents() {
         List<NamedXContentRegistry.Entry> namedXContents = RestHighLevelClient.getProvidedNamedXContents();
-        assertEquals(3, namedXContents.size());
+        assertEquals(2, namedXContents.size());
         Map<Class<?>, Integer> categories = new HashMap<>();
         List<String> names = new ArrayList<>();
         for (NamedXContentRegistry.Entry namedXContent : namedXContents) {
@@ -660,10 +659,9 @@ public class RestHighLevelClientTests extends ESTestCase {
             }
         }
         assertEquals(1, categories.size());
-        assertEquals(Integer.valueOf(3), categories.get(Aggregation.class));
+        assertEquals(Integer.valueOf(2), categories.get(Aggregation.class));
         assertTrue(names.contains(ChildrenAggregationBuilder.NAME));
         assertTrue(names.contains(MatrixStatsAggregationBuilder.NAME));
-        assertTrue(names.contains(CompositeAggregationBuilder.NAME));
     }
 
     private static class TrackingActionListener implements ActionListener<Integer> {

+ 0 - 1
client/transport/build.gradle

@@ -32,7 +32,6 @@ dependencies {
   compile "org.elasticsearch.plugin:lang-mustache-client:${version}"
   compile "org.elasticsearch.plugin:percolator-client:${version}"
   compile "org.elasticsearch.plugin:parent-join-client:${version}"
-  compile "org.elasticsearch.plugin:aggs-composite-client:${version}"
   testCompile "com.carrotsearch.randomizedtesting:randomizedtesting-runner:${versions.randomizedrunner}"
   testCompile "junit:junit:${versions.junit}"
   testCompile "org.hamcrest:hamcrest-all:${versions.hamcrest}"

+ 1 - 4
client/transport/src/main/java/org/elasticsearch/transport/client/PreBuiltTransportClient.java

@@ -30,7 +30,6 @@ import org.elasticsearch.join.ParentJoinPlugin;
 import org.elasticsearch.percolator.PercolatorPlugin;
 import org.elasticsearch.plugins.Plugin;
 import org.elasticsearch.script.mustache.MustachePlugin;
-import org.elasticsearch.search.aggregations.composite.CompositeAggregationPlugin;
 import org.elasticsearch.transport.Netty4Plugin;
 
 import java.util.Arrays;
@@ -45,7 +44,6 @@ import java.util.concurrent.TimeUnit;
  * {@link PercolatorPlugin},
  * {@link MustachePlugin},
  * {@link ParentJoinPlugin}
- * {@link CompositeAggregationPlugin}
  * plugins for the client. These plugins are all the required modules for Elasticsearch.
  */
 @SuppressWarnings({"unchecked","varargs"})
@@ -90,8 +88,7 @@ public class PreBuiltTransportClient extends TransportClient {
                 ReindexPlugin.class,
                 PercolatorPlugin.class,
                 MustachePlugin.class,
-                ParentJoinPlugin.class,
-                CompositeAggregationPlugin.class));
+                ParentJoinPlugin.class));
 
     /**
      * Creates a new transport client with pre-installed plugins.

+ 1 - 3
client/transport/src/test/java/org/elasticsearch/transport/client/PreBuiltTransportClientTests.java

@@ -20,7 +20,6 @@
 package org.elasticsearch.transport.client;
 
 import com.carrotsearch.randomizedtesting.RandomizedTest;
-import org.apache.lucene.util.Constants;
 import org.elasticsearch.client.transport.TransportClient;
 import org.elasticsearch.common.network.NetworkModule;
 import org.elasticsearch.common.settings.Settings;
@@ -30,7 +29,6 @@ import org.elasticsearch.percolator.PercolatorPlugin;
 import org.elasticsearch.plugins.Plugin;
 import org.elasticsearch.script.mustache.MustachePlugin;
 import org.elasticsearch.transport.Netty4Plugin;
-import org.elasticsearch.search.aggregations.composite.CompositeAggregationPlugin;
 import org.junit.Test;
 
 import java.util.Arrays;
@@ -54,7 +52,7 @@ public class PreBuiltTransportClientTests extends RandomizedTest {
     public void testInstallPluginTwice() {
         for (Class<? extends Plugin> plugin :
                 Arrays.asList(ParentJoinPlugin.class, ReindexPlugin.class, PercolatorPlugin.class,
-                    MustachePlugin.class, CompositeAggregationPlugin.class)) {
+                    MustachePlugin.class)) {
             try {
                 new PreBuiltTransportClient(Settings.EMPTY, plugin);
                 fail("exception expected");

+ 5 - 0
core/src/main/java/org/elasticsearch/search/SearchModule.java

@@ -99,6 +99,9 @@ import org.elasticsearch.search.aggregations.InternalAggregation;
 import org.elasticsearch.search.aggregations.PipelineAggregationBuilder;
 import org.elasticsearch.search.aggregations.bucket.adjacency.AdjacencyMatrixAggregationBuilder;
 import org.elasticsearch.search.aggregations.bucket.adjacency.InternalAdjacencyMatrix;
+import org.elasticsearch.search.aggregations.bucket.composite.CompositeAggregation;
+import org.elasticsearch.search.aggregations.bucket.composite.CompositeAggregationBuilder;
+import org.elasticsearch.search.aggregations.bucket.composite.InternalComposite;
 import org.elasticsearch.search.aggregations.bucket.filter.FilterAggregationBuilder;
 import org.elasticsearch.search.aggregations.bucket.filter.FiltersAggregationBuilder;
 import org.elasticsearch.search.aggregations.bucket.filter.InternalFilter;
@@ -408,6 +411,8 @@ public class SearchModule {
                 GeoCentroidAggregationBuilder::parse).addResultReader(InternalGeoCentroid::new));
         registerAggregation(new AggregationSpec(ScriptedMetricAggregationBuilder.NAME, ScriptedMetricAggregationBuilder::new,
                 ScriptedMetricAggregationBuilder::parse).addResultReader(InternalScriptedMetric::new));
+        registerAggregation((new AggregationSpec(CompositeAggregationBuilder.NAME, CompositeAggregationBuilder::new,
+            CompositeAggregationBuilder::parse).addResultReader(InternalComposite::new)));
         registerFromPlugin(plugins, SearchPlugin::getAggregations, this::registerAggregation);
     }
 

+ 1 - 1
modules/aggs-composite/src/main/java/org/elasticsearch/search/aggregations/composite/CompositeAggregation.java → core/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeAggregation.java

@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.elasticsearch.search.aggregations.composite;
+package org.elasticsearch.search.aggregations.bucket.composite;
 
 import org.apache.lucene.util.BytesRef;
 import org.elasticsearch.common.xcontent.XContentBuilder;

+ 1 - 1
modules/aggs-composite/src/main/java/org/elasticsearch/search/aggregations/composite/CompositeAggregationBuilder.java → core/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeAggregationBuilder.java

@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.elasticsearch.search.aggregations.composite;
+package org.elasticsearch.search.aggregations.bucket.composite;
 
 import org.apache.lucene.search.Sort;
 import org.apache.lucene.search.SortField;

+ 1 - 1
modules/aggs-composite/src/main/java/org/elasticsearch/search/aggregations/composite/CompositeAggregationFactory.java → core/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeAggregationFactory.java

@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.elasticsearch.search.aggregations.composite;
+package org.elasticsearch.search.aggregations.bucket.composite;
 
 import org.elasticsearch.search.aggregations.Aggregator;
 import org.elasticsearch.search.aggregations.AggregatorFactories;

+ 1 - 1
modules/aggs-composite/src/main/java/org/elasticsearch/search/aggregations/composite/CompositeAggregationPlugin.java → core/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeAggregationPlugin.java

@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.elasticsearch.search.aggregations.composite;
+package org.elasticsearch.search.aggregations.bucket.composite;
 
 import org.elasticsearch.plugins.Plugin;
 import org.elasticsearch.plugins.SearchPlugin;

+ 1 - 1
modules/aggs-composite/src/main/java/org/elasticsearch/search/aggregations/composite/CompositeAggregator.java → core/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeAggregator.java

@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.elasticsearch.search.aggregations.composite;
+package org.elasticsearch.search.aggregations.bucket.composite;
 
 import org.apache.lucene.index.LeafReaderContext;
 import org.apache.lucene.search.CollectionTerminatedException;

+ 1 - 13
modules/aggs-composite/src/main/java/org/elasticsearch/search/aggregations/composite/CompositeKey.java → core/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeKey.java

@@ -17,21 +17,9 @@
  * under the License.
  */
 
-package org.elasticsearch.search.aggregations.composite;
+package org.elasticsearch.search.aggregations.bucket.composite;
 
-import org.apache.lucene.util.BytesRef;
-import org.elasticsearch.search.DocValueFormat;
-
-import java.util.AbstractMap;
-import java.util.AbstractSet;
-import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
 
 /**
  * A key that is composed of multiple {@link Comparable} values.

+ 5 - 9
modules/aggs-composite/src/main/java/org/elasticsearch/search/aggregations/composite/CompositeValuesComparator.java → core/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeValuesComparator.java

@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.elasticsearch.search.aggregations.composite;
+package org.elasticsearch.search.aggregations.bucket.composite;
 
 import org.apache.lucene.index.DirectoryReader;
 import org.apache.lucene.index.IndexReader;
@@ -26,10 +26,6 @@ import org.elasticsearch.search.aggregations.LeafBucketCollector;
 
 import java.io.IOException;
 
-import static org.elasticsearch.search.aggregations.composite.CompositeValuesSource.wrapBinary;
-import static org.elasticsearch.search.aggregations.composite.CompositeValuesSource.wrapDouble;
-import static org.elasticsearch.search.aggregations.composite.CompositeValuesSource.wrapGlobalOrdinals;
-import static org.elasticsearch.search.aggregations.composite.CompositeValuesSource.wrapLong;
 import static org.elasticsearch.search.aggregations.support.ValuesSource.Numeric;
 import static org.elasticsearch.search.aggregations.support.ValuesSource.Bytes;
 import static org.elasticsearch.search.aggregations.support.ValuesSource.Bytes.WithOrdinals;
@@ -51,16 +47,16 @@ final class CompositeValuesComparator {
             final int reverseMul = sources[i].reverseMul();
             if (sources[i].valuesSource() instanceof WithOrdinals && reader instanceof DirectoryReader) {
                 WithOrdinals vs = (WithOrdinals) sources[i].valuesSource();
-                arrays[i] = wrapGlobalOrdinals(vs, size, reverseMul);
+                arrays[i] = CompositeValuesSource.wrapGlobalOrdinals(vs, size, reverseMul);
             } else if (sources[i].valuesSource() instanceof Bytes) {
                 Bytes vs = (Bytes) sources[i].valuesSource();
-                arrays[i] = wrapBinary(vs, size, reverseMul);
+                arrays[i] = CompositeValuesSource.wrapBinary(vs, size, reverseMul);
             } else if (sources[i].valuesSource() instanceof Numeric) {
                 final Numeric vs = (Numeric) sources[i].valuesSource();
                 if (vs.isFloatingPoint()) {
-                    arrays[i] = wrapDouble(vs, size, reverseMul);
+                    arrays[i] = CompositeValuesSource.wrapDouble(vs, size, reverseMul);
                 } else {
-                    arrays[i] = wrapLong(vs, size, reverseMul);
+                    arrays[i] = CompositeValuesSource.wrapLong(vs, size, reverseMul);
                 }
             }
         }

+ 1 - 1
modules/aggs-composite/src/main/java/org/elasticsearch/search/aggregations/composite/CompositeValuesSource.java → core/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeValuesSource.java

@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.elasticsearch.search.aggregations.composite;
+package org.elasticsearch.search.aggregations.bucket.composite;
 
 import org.apache.lucene.index.LeafReaderContext;
 import org.apache.lucene.index.SortedNumericDocValues;

+ 1 - 1
modules/aggs-composite/src/main/java/org/elasticsearch/search/aggregations/composite/CompositeValuesSourceBuilder.java → core/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeValuesSourceBuilder.java

@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.elasticsearch.search.aggregations.composite;
+package org.elasticsearch.search.aggregations.bucket.composite;
 
 import org.apache.lucene.index.DocValues;
 import org.apache.lucene.index.IndexReader;

+ 1 - 1
modules/aggs-composite/src/main/java/org/elasticsearch/search/aggregations/composite/CompositeValuesSourceConfig.java → core/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeValuesSourceConfig.java

@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.elasticsearch.search.aggregations.composite;
+package org.elasticsearch.search.aggregations.bucket.composite;
 
 import org.elasticsearch.search.aggregations.support.ValuesSource;
 import org.elasticsearch.search.sort.SortOrder;

+ 1 - 1
modules/aggs-composite/src/main/java/org/elasticsearch/search/aggregations/composite/CompositeValuesSourceParserHelper.java → core/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeValuesSourceParserHelper.java

@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.elasticsearch.search.aggregations.composite;
+package org.elasticsearch.search.aggregations.bucket.composite;
 
 import org.elasticsearch.common.ParseField;
 import org.elasticsearch.common.ParsingException;

+ 1 - 1
modules/aggs-composite/src/main/java/org/elasticsearch/search/aggregations/composite/DateHistogramValuesSourceBuilder.java → core/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/DateHistogramValuesSourceBuilder.java

@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.elasticsearch.search.aggregations.composite;
+package org.elasticsearch.search.aggregations.bucket.composite;
 
 import org.apache.lucene.search.SortField;
 import org.elasticsearch.common.ParseField;

+ 1 - 1
modules/aggs-composite/src/main/java/org/elasticsearch/search/aggregations/composite/HistogramValuesSource.java → core/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/HistogramValuesSource.java

@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.elasticsearch.search.aggregations.composite;
+package org.elasticsearch.search.aggregations.bucket.composite;
 
 import org.apache.lucene.index.LeafReaderContext;
 import org.apache.lucene.index.SortedNumericDocValues;

+ 1 - 1
modules/aggs-composite/src/main/java/org/elasticsearch/search/aggregations/composite/HistogramValuesSourceBuilder.java → core/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/HistogramValuesSourceBuilder.java

@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.elasticsearch.search.aggregations.composite;
+package org.elasticsearch.search.aggregations.bucket.composite;
 
 import org.apache.lucene.search.SortField;
 import org.elasticsearch.common.io.stream.StreamInput;

+ 2 - 2
modules/aggs-composite/src/main/java/org/elasticsearch/search/aggregations/composite/InternalComposite.java → core/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/InternalComposite.java

@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.elasticsearch.search.aggregations.composite;
+package org.elasticsearch.search.aggregations.bucket.composite;
 
 import org.apache.lucene.util.BytesRef;
 import org.elasticsearch.common.io.stream.StreamInput;
@@ -59,7 +59,7 @@ public class InternalComposite
         this.reverseMuls = reverseMuls;
     }
 
-    InternalComposite(StreamInput in) throws IOException {
+    public InternalComposite(StreamInput in) throws IOException {
         super(in);
         this.size = in.readVInt();
         this.sourceNames = in.readList(StreamInput::readString);

+ 1 - 1
modules/aggs-composite/src/main/java/org/elasticsearch/search/aggregations/composite/ParsedComposite.java → core/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/ParsedComposite.java

@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.elasticsearch.search.aggregations.composite;
+package org.elasticsearch.search.aggregations.bucket.composite;
 
 import org.elasticsearch.common.xcontent.ObjectParser;
 import org.elasticsearch.common.xcontent.XContentBuilder;

+ 1 - 1
modules/aggs-composite/src/main/java/org/elasticsearch/search/aggregations/composite/RoundingValuesSource.java → core/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/RoundingValuesSource.java

@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.elasticsearch.search.aggregations.composite;
+package org.elasticsearch.search.aggregations.bucket.composite;
 
 import org.apache.lucene.index.LeafReaderContext;
 import org.apache.lucene.index.SortedNumericDocValues;

+ 1 - 1
modules/aggs-composite/src/main/java/org/elasticsearch/search/aggregations/composite/TermsValuesSourceBuilder.java → core/src/main/java/org/elasticsearch/search/aggregations/bucket/composite/TermsValuesSourceBuilder.java

@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.elasticsearch.search.aggregations.composite;
+package org.elasticsearch.search.aggregations.bucket.composite;
 
 import org.apache.lucene.search.SortField;
 import org.elasticsearch.common.io.stream.StreamInput;

+ 2 - 0
core/src/test/java/org/elasticsearch/search/aggregations/AggregationsTests.java

@@ -32,6 +32,7 @@ import org.elasticsearch.common.xcontent.XContentType;
 import org.elasticsearch.rest.action.search.RestSearchAction;
 import org.elasticsearch.search.aggregations.Aggregation.CommonFields;
 import org.elasticsearch.search.aggregations.bucket.adjacency.InternalAdjacencyMatrixTests;
+import org.elasticsearch.search.aggregations.bucket.composite.InternalCompositeTests;
 import org.elasticsearch.search.aggregations.bucket.filter.InternalFilterTests;
 import org.elasticsearch.search.aggregations.bucket.filter.InternalFiltersTests;
 import org.elasticsearch.search.aggregations.bucket.geogrid.InternalGeoHashGridTests;
@@ -144,6 +145,7 @@ public class AggregationsTests extends ESTestCase {
         aggsTests.add(new InternalScriptedMetricTests());
         aggsTests.add(new InternalBinaryRangeTests());
         aggsTests.add(new InternalTopHitsTests());
+        aggsTests.add(new InternalCompositeTests());
         return Collections.unmodifiableList(aggsTests);
     }
 

+ 94 - 0
core/src/test/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeAggregationBuilderTests.java

@@ -0,0 +1,94 @@
+/*
+ * 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.search.aggregations.bucket.composite;
+
+import org.elasticsearch.script.Script;
+import org.elasticsearch.search.aggregations.BaseAggregationTestCase;
+import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramInterval;
+import org.elasticsearch.search.sort.SortOrder;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class CompositeAggregationBuilderTests extends BaseAggregationTestCase<CompositeAggregationBuilder> {
+    private DateHistogramValuesSourceBuilder randomDateHistogramSourceBuilder() {
+        DateHistogramValuesSourceBuilder histo = new DateHistogramValuesSourceBuilder(randomAlphaOfLengthBetween(5, 10));
+        if (randomBoolean()) {
+            histo.field(randomAlphaOfLengthBetween(1, 20));
+        } else {
+            histo.script(new Script(randomAlphaOfLengthBetween(10, 20)));
+        }
+        if (randomBoolean()) {
+            histo.dateHistogramInterval(randomFrom(DateHistogramInterval.days(10),
+                DateHistogramInterval.minutes(1), DateHistogramInterval.weeks(1)));
+        } else {
+            histo.interval(randomNonNegativeLong());
+        }
+        if (randomBoolean()) {
+            histo.timeZone(randomDateTimeZone());
+        }
+        return histo;
+    }
+
+    private TermsValuesSourceBuilder randomTermsSourceBuilder() {
+        TermsValuesSourceBuilder terms = new TermsValuesSourceBuilder(randomAlphaOfLengthBetween(5, 10));
+        if (randomBoolean()) {
+            terms.field(randomAlphaOfLengthBetween(1, 20));
+        } else {
+            terms.script(new Script(randomAlphaOfLengthBetween(10, 20)));
+        }
+        terms.order(randomFrom(SortOrder.values()));
+        return terms;
+    }
+
+    private HistogramValuesSourceBuilder randomHistogramSourceBuilder() {
+        HistogramValuesSourceBuilder histo = new HistogramValuesSourceBuilder(randomAlphaOfLengthBetween(5, 10));
+        if (randomBoolean()) {
+            histo.field(randomAlphaOfLengthBetween(1, 20));
+        } else {
+            histo.script(new Script(randomAlphaOfLengthBetween(10, 20)));
+        }
+        histo.interval(randomDoubleBetween(Math.nextUp(0), Double.MAX_VALUE, false));
+        return histo;
+    }
+
+    @Override
+    protected CompositeAggregationBuilder createTestAggregatorBuilder() {
+        int numSources = randomIntBetween(1, 10);
+        List<CompositeValuesSourceBuilder<?>> sources = new ArrayList<>();
+        for (int i = 0; i < numSources; i++) {
+            int type = randomIntBetween(0, 2);
+            switch (type) {
+                case 0:
+                    sources.add(randomTermsSourceBuilder());
+                    break;
+                case 1:
+                    sources.add(randomDateHistogramSourceBuilder());
+                    break;
+                case 2:
+                    sources.add(randomHistogramSourceBuilder());
+                    break;
+                default:
+                    throw new AssertionError("wrong branch");
+            }
+        }
+        return new CompositeAggregationBuilder(randomAlphaOfLength(10), sources);
+    }
+}

+ 1 - 1
modules/aggs-composite/src/test/java/org/elasticsearch/search/aggregations/composite/CompositeAggregatorTests.java → core/src/test/java/org/elasticsearch/search/aggregations/bucket/composite/CompositeAggregatorTests.java

@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.elasticsearch.search.aggregations.composite;
+package org.elasticsearch.search.aggregations.bucket.composite;
 
 import org.apache.lucene.analysis.MockAnalyzer;
 import org.apache.lucene.document.Document;

+ 1 - 25
modules/aggs-composite/src/test/java/org/elasticsearch/search/aggregations/composite/InternalCompositeTests.java → core/src/test/java/org/elasticsearch/search/aggregations/bucket/composite/InternalCompositeTests.java

@@ -17,18 +17,11 @@
  * under the License.
  */
 
-package org.elasticsearch.search.aggregations.composite;
+package org.elasticsearch.search.aggregations.bucket.composite;
 
 import org.apache.lucene.util.BytesRef;
-import org.elasticsearch.common.ParseField;
-import org.elasticsearch.common.io.stream.NamedWriteableRegistry;
 import org.elasticsearch.common.io.stream.Writeable;
-import org.elasticsearch.common.settings.Settings;
 import org.elasticsearch.common.util.BigArrays;
-import org.elasticsearch.common.xcontent.ContextParser;
-import org.elasticsearch.common.xcontent.NamedXContentRegistry;
-import org.elasticsearch.search.SearchModule;
-import org.elasticsearch.search.aggregations.Aggregation;
 import org.elasticsearch.search.aggregations.InternalAggregation;
 import org.elasticsearch.search.aggregations.InternalAggregations;
 import org.elasticsearch.search.aggregations.ParsedAggregation;
@@ -82,23 +75,6 @@ public class InternalCompositeTests extends InternalMultiBucketAggregationTestCa
         formats = null;
     }
 
-    @Override
-    protected List<NamedXContentRegistry.Entry> getNamedXContents() {
-        List<NamedXContentRegistry.Entry> namedXContents = new ArrayList<>(getDefaultNamedXContents());
-        ContextParser<Object, Aggregation> parser = (p, c) -> ParsedComposite.fromXContent(p, (String) c);
-        namedXContents.add(new NamedXContentRegistry.Entry(Aggregation.class, new ParseField(CompositeAggregationBuilder.NAME), parser));
-        return namedXContents;
-    }
-
-    @Override
-    protected NamedWriteableRegistry getNamedWriteableRegistry() {
-        return new NamedWriteableRegistry(
-            new SearchModule(
-                Settings.EMPTY, false, Collections.singletonList(new CompositeAggregationPlugin())
-            ).getNamedWriteables()
-        );
-    }
-
     @Override
     protected Writeable.Reader<InternalComposite> instanceReader() {
         return InternalComposite::new;

+ 0 - 27
modules/aggs-composite/build.gradle

@@ -1,27 +0,0 @@
-/*
- * 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.
- */
-
-esplugin {
-  description 'A multi-bucket aggregation that can paginate buckets from different sources efficiently.'
-  classname 'org.elasticsearch.search.aggregations.composite.CompositeAggregationPlugin'
-  hasClientJar = true
-}
-
-compileJava.options.compilerArgs << "-Xlint:-deprecation"
-compileTestJava.options.compilerArgs << "-Xlint:-deprecation"

+ 0 - 42
modules/aggs-composite/src/main/java/org/elasticsearch/search/aggregations/composite/spi/CompositeNamedXContentProvider.java

@@ -1,42 +0,0 @@
-/*
- * 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.search.aggregations.composite.spi;
-
-import org.elasticsearch.common.ParseField;
-import org.elasticsearch.common.xcontent.ContextParser;
-import org.elasticsearch.common.xcontent.NamedXContentRegistry;
-import org.elasticsearch.plugins.spi.NamedXContentProvider;
-import org.elasticsearch.search.aggregations.Aggregation;
-import org.elasticsearch.search.aggregations.composite.CompositeAggregationBuilder;
-import org.elasticsearch.search.aggregations.composite.ParsedComposite;
-
-import java.util.List;
-
-import static java.util.Collections.singletonList;
-
-public class CompositeNamedXContentProvider implements NamedXContentProvider {
-
-    @Override
-    public List<NamedXContentRegistry.Entry> getNamedXContentParsers() {
-        ParseField parseField = new ParseField(CompositeAggregationBuilder.NAME);
-        ContextParser<Object, Aggregation> contextParser = (p, name) -> ParsedComposite.fromXContent(p, (String) name);
-        return singletonList(new NamedXContentRegistry.Entry(Aggregation.class, parseField, contextParser));
-    }
-}

+ 0 - 1
modules/aggs-composite/src/main/resources/META-INF/services/org.elasticsearch.plugins.spi.NamedXContentProvider

@@ -1 +0,0 @@
-org.elasticsearch.search.aggregations.composite.spi.CompositeNamedXContentProvider

+ 0 - 196
modules/aggs-composite/src/test/java/org/elasticsearch/search/aggregations/composite/CompositeAggregationBuilderTests.java

@@ -1,196 +0,0 @@
-/*
- * 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.search.aggregations.composite;
-
-import org.elasticsearch.common.Strings;
-import org.elasticsearch.common.io.stream.BytesStreamOutput;
-import org.elasticsearch.common.io.stream.NamedWriteableAwareStreamInput;
-import org.elasticsearch.common.io.stream.NamedWriteableRegistry;
-import org.elasticsearch.common.io.stream.StreamInput;
-import org.elasticsearch.common.settings.Settings;
-import org.elasticsearch.common.xcontent.NamedXContentRegistry;
-import org.elasticsearch.common.xcontent.ToXContent;
-import org.elasticsearch.common.xcontent.XContentBuilder;
-import org.elasticsearch.common.xcontent.XContentFactory;
-import org.elasticsearch.common.xcontent.XContentParser;
-import org.elasticsearch.common.xcontent.XContentType;
-import org.elasticsearch.script.Script;
-import org.elasticsearch.search.SearchModule;
-import org.elasticsearch.search.aggregations.AggregationBuilder;
-import org.elasticsearch.search.aggregations.AggregatorFactories;
-import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramInterval;
-import org.elasticsearch.search.sort.SortOrder;
-import org.elasticsearch.test.ESTestCase;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import static org.elasticsearch.test.EqualsHashCodeTestUtils.checkEqualsAndHashCode;
-import static org.hamcrest.Matchers.hasSize;
-
-public class CompositeAggregationBuilderTests extends ESTestCase {
-    static final CompositeAggregationPlugin PLUGIN = new CompositeAggregationPlugin();
-
-    @Override
-    protected NamedXContentRegistry xContentRegistry() {
-        return new NamedXContentRegistry(
-            new SearchModule(Settings.EMPTY, false, Collections.singletonList(PLUGIN)).getNamedXContents()
-        );
-    }
-
-    @Override
-    protected NamedWriteableRegistry writableRegistry() {
-        return new NamedWriteableRegistry(
-            new SearchModule(Settings.EMPTY, false, Collections.singletonList(PLUGIN)).getNamedWriteables()
-        );
-    }
-
-    private DateHistogramValuesSourceBuilder randomDateHistogramSourceBuilder() {
-        DateHistogramValuesSourceBuilder histo = new DateHistogramValuesSourceBuilder(randomAlphaOfLengthBetween(5, 10));
-        if (randomBoolean()) {
-            histo.field(randomAlphaOfLengthBetween(1, 20));
-        } else {
-            histo.script(new Script(randomAlphaOfLengthBetween(10, 20)));
-        }
-        if (randomBoolean()) {
-            histo.dateHistogramInterval(randomFrom(DateHistogramInterval.days(10),
-                DateHistogramInterval.minutes(1), DateHistogramInterval.weeks(1)));
-        } else {
-            histo.interval(randomNonNegativeLong());
-        }
-        if (randomBoolean()) {
-            histo.timeZone(randomDateTimeZone());
-        }
-        return histo;
-    }
-
-    private TermsValuesSourceBuilder randomTermsSourceBuilder() {
-        TermsValuesSourceBuilder terms = new TermsValuesSourceBuilder(randomAlphaOfLengthBetween(5, 10));
-        if (randomBoolean()) {
-            terms.field(randomAlphaOfLengthBetween(1, 20));
-        } else {
-            terms.script(new Script(randomAlphaOfLengthBetween(10, 20)));
-        }
-        terms.order(randomFrom(SortOrder.values()));
-        return terms;
-    }
-
-    private HistogramValuesSourceBuilder randomHistogramSourceBuilder() {
-        HistogramValuesSourceBuilder histo = new HistogramValuesSourceBuilder(randomAlphaOfLengthBetween(5, 10));
-        if (randomBoolean()) {
-            histo.field(randomAlphaOfLengthBetween(1, 20));
-        } else {
-            histo.script(new Script(randomAlphaOfLengthBetween(10, 20)));
-        }
-        histo.interval(randomDoubleBetween(Math.nextUp(0), Double.MAX_VALUE, false));
-        return histo;
-    }
-
-    private CompositeAggregationBuilder randomBuilder() {
-        int numSources = randomIntBetween(1, 10);
-        List<CompositeValuesSourceBuilder<?>> sources = new ArrayList<>();
-        for (int i = 0; i < numSources; i++) {
-            int type = randomIntBetween(0, 2);
-            switch (type) {
-                case 0:
-                    sources.add(randomTermsSourceBuilder());
-                    break;
-                case 1:
-                    sources.add(randomDateHistogramSourceBuilder());
-                    break;
-                case 2:
-                    sources.add(randomHistogramSourceBuilder());
-                    break;
-                default:
-                    throw new AssertionError("wrong branch");
-            }
-        }
-        return new CompositeAggregationBuilder(randomAlphaOfLength(10), sources);
-    }
-
-    public void testFromXContent() throws IOException {
-        CompositeAggregationBuilder testAgg = randomBuilder();
-        AggregatorFactories.Builder factoriesBuilder = AggregatorFactories.builder().addAggregator(testAgg);
-        XContentBuilder builder = XContentFactory.contentBuilder(randomFrom(XContentType.values()));
-        if (randomBoolean()) {
-            builder.prettyPrint();
-        }
-        factoriesBuilder.toXContent(builder, ToXContent.EMPTY_PARAMS);
-        XContentBuilder shuffled = shuffleXContent(builder);
-        XContentParser parser = createParser(shuffled);
-        AggregationBuilder newAgg = assertParse(parser);
-        assertNotSame(newAgg, testAgg);
-        assertEquals(testAgg, newAgg);
-        assertEquals(testAgg.hashCode(), newAgg.hashCode());
-    }
-
-    public void testToString() throws IOException {
-        CompositeAggregationBuilder testAgg = randomBuilder();
-        String toString = randomBoolean() ? Strings.toString(testAgg) : testAgg.toString();
-        XContentParser parser = createParser(XContentType.JSON.xContent(), toString);
-        AggregationBuilder newAgg = assertParse(parser);
-        assertNotSame(newAgg, testAgg);
-        assertEquals(testAgg, newAgg);
-        assertEquals(testAgg.hashCode(), newAgg.hashCode());
-    }
-
-    private AggregationBuilder assertParse(XContentParser parser) throws IOException {
-        assertSame(XContentParser.Token.START_OBJECT, parser.nextToken());
-        AggregatorFactories.Builder parsed = AggregatorFactories.parseAggregators(parser);
-        assertThat(parsed.getAggregatorFactories(), hasSize(1));
-        assertThat(parsed.getPipelineAggregatorFactories(), hasSize(0));
-        AggregationBuilder newAgg = parsed.getAggregatorFactories().get(0);
-        assertNull(parser.nextToken());
-        assertNotNull(newAgg);
-        return newAgg;
-    }
-
-    /**
-     * Test serialization and deserialization of the test AggregatorFactory.
-     */
-    public void testSerialization() throws IOException {
-        CompositeAggregationBuilder testAgg = randomBuilder();
-        try (BytesStreamOutput output = new BytesStreamOutput()) {
-            output.writeNamedWriteable(testAgg);
-            try (StreamInput in = new NamedWriteableAwareStreamInput(output.bytes().streamInput(), writableRegistry())) {
-                AggregationBuilder deserialized = in.readNamedWriteable(AggregationBuilder.class);
-                assertEquals(testAgg, deserialized);
-                assertEquals(testAgg.hashCode(), deserialized.hashCode());
-                assertNotSame(testAgg, deserialized);
-            }
-        }
-    }
-
-    public void testEqualsAndHashcode() throws IOException {
-        checkEqualsAndHashCode(randomBuilder(), this::copyAggregation);
-    }
-
-    private CompositeAggregationBuilder copyAggregation(CompositeAggregationBuilder agg) throws IOException {
-        try (BytesStreamOutput output = new BytesStreamOutput()) {
-            agg.writeTo(output);
-            try (StreamInput in = new NamedWriteableAwareStreamInput(output.bytes().streamInput(), writableRegistry())) {
-                return (CompositeAggregationBuilder) writableRegistry().getReader(AggregationBuilder.class,
-                    agg.getWriteableName()).read(in);
-            }
-        }
-    }
-}

+ 0 - 35
modules/aggs-composite/src/test/java/org/elasticsearch/search/aggregations/composite/CompositeAggregationsClientYamlTestSuiteIT.java

@@ -1,35 +0,0 @@
-/*
- * 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.search.aggregations.composite;
-
-import com.carrotsearch.randomizedtesting.annotations.Name;
-import com.carrotsearch.randomizedtesting.annotations.ParametersFactory;
-import org.elasticsearch.test.rest.yaml.ClientYamlTestCandidate;
-import org.elasticsearch.test.rest.yaml.ESClientYamlSuiteTestCase;
-
-public class CompositeAggregationsClientYamlTestSuiteIT extends ESClientYamlSuiteTestCase {
-    public CompositeAggregationsClientYamlTestSuiteIT(@Name("yaml")ClientYamlTestCandidate testCandidate) {
-        super(testCandidate);
-    }
-
-    @ParametersFactory
-    public static Iterable<Object[]> parameters() throws Exception {
-        return ESClientYamlSuiteTestCase.createParameters();
-    }
-}

+ 0 - 13
modules/aggs-composite/src/test/resources/rest-api-spec/test/composite/10_basic.yml

@@ -1,13 +0,0 @@
-# Integration tests for Composite aggs plugin
-#
-"Composite aggs loaded":
-    - do:
-        cluster.state: {}
-
-    # Get master node id
-    - set: { master_node: master }
-
-    - do:
-        nodes.info: {}
-
-    - match:  { nodes.$master.modules.0.name: aggs-composite }

+ 0 - 4
modules/aggs-composite/src/test/resources/rest-api-spec/test/composite/20_composite.yml → rest-api-spec/src/main/resources/rest-api-spec/test/search.aggregation/230_composite.yml

@@ -190,7 +190,3 @@ setup:
                         }
                       }
                     ]
-
-
-
-

+ 0 - 1
settings.gradle

@@ -31,7 +31,6 @@ List projects = [
   'test:fixtures:old-elasticsearch',
   'test:logger-usage',
   'modules:aggs-matrix-stats',
-  'modules:aggs-composite',
   'modules:analysis-common',
   'modules:ingest-common',
   'modules:lang-expression',

+ 3 - 1
test/framework/src/main/java/org/elasticsearch/test/InternalAggregationTestCase.java

@@ -41,6 +41,8 @@ import org.elasticsearch.search.aggregations.InternalAggregation;
 import org.elasticsearch.search.aggregations.ParsedAggregation;
 import org.elasticsearch.search.aggregations.bucket.adjacency.AdjacencyMatrixAggregationBuilder;
 import org.elasticsearch.search.aggregations.bucket.adjacency.ParsedAdjacencyMatrix;
+import org.elasticsearch.search.aggregations.bucket.composite.CompositeAggregationBuilder;
+import org.elasticsearch.search.aggregations.bucket.composite.ParsedComposite;
 import org.elasticsearch.search.aggregations.bucket.filter.FilterAggregationBuilder;
 import org.elasticsearch.search.aggregations.bucket.filter.FiltersAggregationBuilder;
 import org.elasticsearch.search.aggregations.bucket.filter.ParsedFilter;
@@ -136,7 +138,6 @@ import java.util.function.Supplier;
 import java.util.stream.Collectors;
 
 import static java.util.Collections.emptyList;
-import static java.util.Collections.emptyMap;
 import static java.util.Collections.singletonMap;
 import static org.elasticsearch.common.xcontent.XContentHelper.toXContent;
 import static org.elasticsearch.test.XContentTestUtils.insertRandomFields;
@@ -194,6 +195,7 @@ public abstract class InternalAggregationTestCase<T extends InternalAggregation>
         map.put(ScriptedMetricAggregationBuilder.NAME, (p, c) -> ParsedScriptedMetric.fromXContent(p, (String) c));
         map.put(IpRangeAggregationBuilder.NAME, (p, c) -> ParsedBinaryRange.fromXContent(p, (String) c));
         map.put(TopHitsAggregationBuilder.NAME, (p, c) -> ParsedTopHits.fromXContent(p, (String) c));
+        map.put(CompositeAggregationBuilder.NAME, (p, c) -> ParsedComposite.fromXContent(p, (String) c));
 
         namedXContents = map.entrySet().stream()
                 .map(entry -> new NamedXContentRegistry.Entry(Aggregation.class, new ParseField(entry.getKey()), entry.getValue()))