Browse Source

Remove unexpected meta param in agg's response (#89467)

Only output the `meta` param from aggs if it was sent in the request.
QY 3 years ago
parent
commit
cdcf238787

+ 6 - 0
docs/changelog/89467.yaml

@@ -0,0 +1,6 @@
+pr: 89467
+summary: Remove unexpected meta param in agg's response
+area: Aggregations
+type: bug
+issues:
+  - 89455

+ 0 - 1
docs/reference/rollup/rollup-getting-started.asciidoc

@@ -260,7 +260,6 @@ Which returns a corresponding response:
    },
    "aggregations" : {
      "timeline" : {
-       "meta" : { },
        "buckets" : [
          {
            "key_as_string" : "2018-01-18T00:00:00.000Z",

+ 26 - 0
rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test/search.aggregation/220_filters_bucket.yml

@@ -249,6 +249,32 @@ setup:
   - match: { aggregations.the_filter.buckets.second_filter.doc_count: 1 }
   - match: { aggregations.the_filter.meta.foo: "bar" }
 
+---
+"Unexpected metadata test":
+  - skip:
+      version: " - 8.4.99"
+      reason: "Fixed in 8.5"
+  - do:
+      search:
+        rest_total_hits_as_int: true
+        body:
+          aggs:
+            the_filter:
+              filters:
+                filters:
+                  first_filter:
+                    match:
+                      int_field: 101
+                  second_filter:
+                    match:
+                      int_field: 151
+
+  - match: { hits.total: 4 }
+  - length: { hits.hits: 4 }
+  - match: { aggregations.the_filter.buckets.first_filter.doc_count: 1 }
+  - match: { aggregations.the_filter.buckets.second_filter.doc_count: 1 }
+  - is_false: aggregations.the_filter.meta
+
 ---
 "Bad params":
   - skip:

+ 1 - 1
server/src/main/java/org/elasticsearch/search/aggregations/AbstractAggregationBuilder.java

@@ -115,7 +115,7 @@ public abstract class AbstractAggregationBuilder<AB extends AbstractAggregationB
 
     @Override
     public Map<String, Object> getMetadata() {
-        return metadata == null ? Collections.emptyMap() : Collections.unmodifiableMap(metadata);
+        return metadata == null ? null : Collections.unmodifiableMap(metadata);
     }
 
     @Override

+ 3 - 1
server/src/main/java/org/elasticsearch/search/aggregations/AggregationBuilder.java

@@ -124,7 +124,9 @@ public abstract class AggregationBuilder
         AggregationBuilder rewritten = doRewrite(context);
         AggregatorFactories.Builder rewrittenSubAggs = factoriesBuilder.rewrite(context);
         if (rewritten != this) {
-            return rewritten.setMetadata(getMetadata()).subAggregations(rewrittenSubAggs);
+            return getMetadata() == null
+                ? rewritten.subAggregations(rewrittenSubAggs)
+                : rewritten.setMetadata(getMetadata()).subAggregations(rewrittenSubAggs);
         } else if (rewrittenSubAggs != factoriesBuilder) {
             return shallowCopy(rewrittenSubAggs, getMetadata());
         } else {

+ 6 - 2
x-pack/plugin/rollup/src/main/java/org/elasticsearch/xpack/rollup/RollupRequestTranslator.java

@@ -224,7 +224,9 @@ public class RollupRequestTranslator {
             rolledDateHisto.minDocCount(source.minDocCount());
             rolledDateHisto.order(source.order());
             rolledDateHisto.field(RollupField.formatFieldName(source, RollupField.TIMESTAMP));
-            rolledDateHisto.setMetadata(source.getMetadata());
+            if (source.getMetadata() != null) {
+                rolledDateHisto.setMetadata(source.getMetadata());
+            }
             return rolledDateHisto;
         });
     }
@@ -251,7 +253,9 @@ public class RollupRequestTranslator {
             rolledHisto.minDocCount(source.minDocCount());
             rolledHisto.order(source.order());
             rolledHisto.field(RollupField.formatFieldName(source, RollupField.VALUE));
-            rolledHisto.setMetadata(source.getMetadata());
+            if (source.getMetadata() != null) {
+                rolledHisto.setMetadata(source.getMetadata());
+            }
             return rolledHisto;
         });
     }