Skip to content

Commit 8c37875

Browse files
authored
Remove ChunkedToXContentHelper.array method, swap for ChunkedToXContentBuilder (#114319)
1 parent 5e761fe commit 8c37875

File tree

23 files changed

+197
-257
lines changed

23 files changed

+197
-257
lines changed

server/src/main/java/org/elasticsearch/cluster/metadata/IndexGraveyard.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import org.elasticsearch.common.settings.Setting;
2020
import org.elasticsearch.common.settings.Settings;
2121
import org.elasticsearch.common.time.DateFormatter;
22-
import org.elasticsearch.common.xcontent.ChunkedToXContentHelper;
22+
import org.elasticsearch.common.xcontent.ChunkedToXContent;
2323
import org.elasticsearch.index.Index;
2424
import org.elasticsearch.xcontent.ContextParser;
2525
import org.elasticsearch.xcontent.ObjectParser;
@@ -128,8 +128,8 @@ public boolean containsIndex(final Index index) {
128128
}
129129

130130
@Override
131-
public Iterator<? extends ToXContent> toXContentChunked(ToXContent.Params ignored) {
132-
return ChunkedToXContentHelper.array(TOMBSTONES_FIELD.getPreferredName(), tombstones.iterator());
131+
public Iterator<? extends ToXContent> toXContentChunked(ToXContent.Params params) {
132+
return ChunkedToXContent.builder(params).array(TOMBSTONES_FIELD.getPreferredName(), tombstones.iterator());
133133
}
134134

135135
public static IndexGraveyard fromXContent(final XContentParser parser) throws IOException {

server/src/main/java/org/elasticsearch/cluster/routing/allocation/AbstractAllocationDecision.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.elasticsearch.cluster.node.DiscoveryNode;
1313
import org.elasticsearch.cluster.node.DiscoveryNodeRole;
1414
import org.elasticsearch.cluster.routing.allocation.decider.Decision.Type;
15+
import org.elasticsearch.common.collect.Iterators;
1516
import org.elasticsearch.common.io.stream.StreamInput;
1617
import org.elasticsearch.common.io.stream.StreamOutput;
1718
import org.elasticsearch.common.io.stream.Writeable;
@@ -140,7 +141,11 @@ public static Iterator<ToXContent> nodeDecisionsToXContentChunked(List<NodeAlloc
140141
return Collections.emptyIterator();
141142
}
142143

143-
return ChunkedToXContentHelper.array("node_allocation_decisions", nodeDecisions.iterator());
144+
return Iterators.concat(
145+
ChunkedToXContentHelper.startArray("node_allocation_decisions"),
146+
nodeDecisions.iterator(),
147+
ChunkedToXContentHelper.endArray()
148+
);
144149
}
145150

146151
/**

server/src/main/java/org/elasticsearch/cluster/routing/allocation/AllocateUnassignedDecision.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@
1313
import org.elasticsearch.cluster.routing.UnassignedInfo.AllocationStatus;
1414
import org.elasticsearch.cluster.routing.allocation.decider.Decision;
1515
import org.elasticsearch.cluster.routing.allocation.decider.Decision.Type;
16-
import org.elasticsearch.common.collect.Iterators;
1716
import org.elasticsearch.common.io.stream.StreamInput;
1817
import org.elasticsearch.common.io.stream.StreamOutput;
18+
import org.elasticsearch.common.xcontent.ChunkedToXContent;
1919
import org.elasticsearch.core.Nullable;
2020
import org.elasticsearch.core.TimeValue;
2121
import org.elasticsearch.xcontent.ToXContent;
@@ -296,7 +296,7 @@ && getNodeDecisions().stream()
296296
@Override
297297
public Iterator<? extends ToXContent> toXContentChunked(ToXContent.Params params) {
298298
checkDecisionState();
299-
return Iterators.concat(Iterators.single((builder, p) -> {
299+
return ChunkedToXContent.builder(params).append((builder, p) -> {
300300
builder.field("can_allocate", getAllocationDecision());
301301
builder.field("allocate_explanation", getExplanation());
302302
if (targetNode != null) {
@@ -320,7 +320,7 @@ public Iterator<? extends ToXContent> toXContentChunked(ToXContent.Params params
320320
);
321321
}
322322
return builder;
323-
}), nodeDecisionsToXContentChunked(nodeDecisions));
323+
}).append(nodeDecisionsToXContentChunked(nodeDecisions));
324324
}
325325

326326
@Override

server/src/main/java/org/elasticsearch/cluster/routing/allocation/MoveDecision.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@
1212
import org.elasticsearch.cluster.node.DiscoveryNode;
1313
import org.elasticsearch.cluster.routing.allocation.decider.Decision;
1414
import org.elasticsearch.cluster.routing.allocation.decider.Decision.Type;
15-
import org.elasticsearch.common.collect.Iterators;
1615
import org.elasticsearch.common.io.stream.StreamInput;
1716
import org.elasticsearch.common.io.stream.StreamOutput;
17+
import org.elasticsearch.common.xcontent.ChunkedToXContent;
1818
import org.elasticsearch.core.Nullable;
1919
import org.elasticsearch.xcontent.ToXContent;
2020

@@ -260,7 +260,7 @@ public String getExplanation() {
260260
@Override
261261
public Iterator<? extends ToXContent> toXContentChunked(ToXContent.Params params) {
262262
checkDecisionState();
263-
return Iterators.concat(Iterators.single((builder, p) -> {
263+
return ChunkedToXContent.builder(params).append((builder, p) -> {
264264
if (targetNode != null) {
265265
builder.startObject("target_node");
266266
discoveryNodeToXContent(targetNode, true, builder);
@@ -289,7 +289,7 @@ public Iterator<? extends ToXContent> toXContentChunked(ToXContent.Params params
289289
builder.field("move_explanation", getExplanation());
290290
}
291291
return builder;
292-
}), nodeDecisionsToXContentChunked(nodeDecisions));
292+
}).append(nodeDecisionsToXContentChunked(nodeDecisions));
293293
}
294294

295295
@Override

server/src/main/java/org/elasticsearch/common/xcontent/ChunkedToXContentBuilder.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ private void endArray() {
248248
addChunk((b, p) -> b.endArray());
249249
}
250250

251-
public ChunkedToXContentBuilder array(String name, String... values) {
251+
public ChunkedToXContentBuilder array(String name, String[] values) {
252252
addChunk((b, p) -> b.array(name, values));
253253
return this;
254254
}
@@ -350,6 +350,26 @@ public ChunkedToXContentBuilder field(String name, Long value) {
350350
return this;
351351
}
352352

353+
public ChunkedToXContentBuilder field(String name, float value) {
354+
addChunk((b, p) -> b.field(name, value));
355+
return this;
356+
}
357+
358+
public ChunkedToXContentBuilder field(String name, Float value) {
359+
addChunk((b, p) -> b.field(name, value));
360+
return this;
361+
}
362+
363+
public ChunkedToXContentBuilder field(String name, double value) {
364+
addChunk((b, p) -> b.field(name, value));
365+
return this;
366+
}
367+
368+
public ChunkedToXContentBuilder field(String name, Double value) {
369+
addChunk((b, p) -> b.field(name, value));
370+
return this;
371+
}
372+
353373
public ChunkedToXContentBuilder field(String name, String value) {
354374
addChunk((b, p) -> b.field(name, value));
355375
return this;

server/src/main/java/org/elasticsearch/common/xcontent/ChunkedToXContentHelper.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,6 @@ public static Iterator<ToXContent> field(String name, String value) {
5353
return Iterators.single(((builder, params) -> builder.field(name, value)));
5454
}
5555

56-
public static Iterator<ToXContent> array(String name, Iterator<? extends ToXContent> contents) {
57-
return Iterators.concat(ChunkedToXContentHelper.startArray(name), contents, ChunkedToXContentHelper.endArray());
58-
}
59-
6056
/**
6157
* Creates an Iterator of a single ToXContent object that serializes the given object as a single chunk. Just wraps {@link
6258
* Iterators#single}, but still useful because it avoids any type ambiguity.

server/src/main/java/org/elasticsearch/health/Diagnosis.java

Lines changed: 21 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,12 @@
1010
package org.elasticsearch.health;
1111

1212
import org.elasticsearch.cluster.node.DiscoveryNode;
13-
import org.elasticsearch.common.collect.Iterators;
1413
import org.elasticsearch.common.xcontent.ChunkedToXContent;
15-
import org.elasticsearch.common.xcontent.ChunkedToXContentHelper;
14+
import org.elasticsearch.common.xcontent.ChunkedToXContentBuilder;
1615
import org.elasticsearch.core.Nullable;
1716
import org.elasticsearch.xcontent.ToXContent;
1817

1918
import java.util.Collection;
20-
import java.util.Collections;
2119
import java.util.Iterator;
2220
import java.util.List;
2321
import java.util.Objects;
@@ -78,22 +76,20 @@ public Resource(Collection<DiscoveryNode> nodes) {
7876
}
7977

8078
@Override
81-
public Iterator<? extends ToXContent> toXContentChunked(ToXContent.Params outerParams) {
82-
final Iterator<? extends ToXContent> valuesIterator;
79+
public Iterator<? extends ToXContent> toXContentChunked(ToXContent.Params params) {
80+
var builder = ChunkedToXContent.builder(params);
8381
if (nodes != null) {
84-
valuesIterator = Iterators.map(nodes.iterator(), node -> (builder, params) -> {
85-
builder.startObject();
86-
builder.field(ID_FIELD, node.getId());
82+
return builder.array(type.displayValue, nodes.iterator(), node -> (b, p) -> {
83+
b.startObject();
84+
b.field(ID_FIELD, node.getId());
8785
if (node.getName() != null) {
88-
builder.field(NAME_FIELD, node.getName());
86+
b.field(NAME_FIELD, node.getName());
8987
}
90-
builder.endObject();
91-
return builder;
88+
return b.endObject();
9289
});
9390
} else {
94-
valuesIterator = Iterators.map(values.iterator(), value -> (builder, params) -> builder.value(value));
91+
return builder.array(type.displayValue, values.toArray(String[]::new));
9592
}
96-
return ChunkedToXContentHelper.array(type.displayValue, valuesIterator);
9793
}
9894

9995
@Override
@@ -144,30 +140,18 @@ public String getUniqueId() {
144140
}
145141

146142
@Override
147-
public Iterator<? extends ToXContent> toXContentChunked(ToXContent.Params outerParams) {
148-
final Iterator<? extends ToXContent> resourcesIterator;
149-
if (affectedResources == null) {
150-
resourcesIterator = Collections.emptyIterator();
151-
} else {
152-
resourcesIterator = Iterators.flatMap(affectedResources.iterator(), s -> s.toXContentChunked(outerParams));
153-
}
154-
return Iterators.concat(Iterators.single((ToXContent) (builder, params) -> {
155-
builder.startObject();
156-
builder.field("id", definition.getUniqueId());
157-
builder.field("cause", definition.cause);
158-
builder.field("action", definition.action);
159-
builder.field("help_url", definition.helpURL);
160-
161-
if (affectedResources != null && affectedResources.size() > 0) {
162-
builder.startObject("affected_resources");
163-
}
164-
return builder;
165-
}), resourcesIterator, Iterators.single((builder, params) -> {
166-
if (affectedResources != null && affectedResources.size() > 0) {
167-
builder.endObject();
143+
public Iterator<? extends ToXContent> toXContentChunked(ToXContent.Params params) {
144+
return ChunkedToXContent.builder(params).object(ob -> {
145+
ob.append((b, p) -> {
146+
b.field("id", definition.getUniqueId());
147+
b.field("cause", definition.cause);
148+
b.field("action", definition.action);
149+
b.field("help_url", definition.helpURL);
150+
return b;
151+
});
152+
if (affectedResources != null && affectedResources.isEmpty() == false) {
153+
ob.object("affected_resources", affectedResources.iterator(), ChunkedToXContentBuilder::append);
168154
}
169-
builder.endObject();
170-
return builder;
171-
}));
155+
});
172156
}
173157
}

server/src/main/java/org/elasticsearch/health/HealthIndicatorResult.java

Lines changed: 17 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@
99

1010
package org.elasticsearch.health;
1111

12-
import org.elasticsearch.common.collect.Iterators;
12+
import org.elasticsearch.common.xcontent.ChunkedToXContent;
13+
import org.elasticsearch.common.xcontent.ChunkedToXContentBuilder;
1314
import org.elasticsearch.common.xcontent.ChunkedToXContentObject;
1415
import org.elasticsearch.xcontent.ToXContent;
1516

16-
import java.util.Collections;
1717
import java.util.Iterator;
1818
import java.util.List;
1919

@@ -26,33 +26,22 @@ public record HealthIndicatorResult(
2626
List<Diagnosis> diagnosisList
2727
) implements ChunkedToXContentObject {
2828
@Override
29-
public Iterator<? extends ToXContent> toXContentChunked(ToXContent.Params outerParams) {
30-
final Iterator<? extends ToXContent> diagnosisIterator;
31-
if (diagnosisList == null) {
32-
diagnosisIterator = Collections.emptyIterator();
33-
} else {
34-
diagnosisIterator = Iterators.flatMap(diagnosisList.iterator(), s -> s.toXContentChunked(outerParams));
35-
}
36-
return Iterators.concat(Iterators.single((ToXContent) (builder, params) -> {
37-
builder.startObject();
38-
builder.field("status", status.xContentValue());
39-
builder.field("symptom", symptom);
40-
if (details != null && HealthIndicatorDetails.EMPTY.equals(details) == false) {
41-
builder.field("details", details, params);
42-
}
43-
if (impacts != null && impacts.isEmpty() == false) {
44-
builder.field("impacts", impacts);
45-
}
46-
if (diagnosisList != null && diagnosisList.isEmpty() == false) {
47-
builder.startArray("diagnosis");
48-
}
49-
return builder;
50-
}), diagnosisIterator, Iterators.single((builder, params) -> {
29+
public Iterator<? extends ToXContent> toXContentChunked(ToXContent.Params params) {
30+
return ChunkedToXContent.builder(params).object(ob -> {
31+
ob.append((b, p) -> {
32+
b.field("status", status.xContentValue());
33+
b.field("symptom", symptom);
34+
if (details != null && HealthIndicatorDetails.EMPTY.equals(details) == false) {
35+
b.field("details", details, p);
36+
}
37+
if (impacts != null && impacts.isEmpty() == false) {
38+
b.field("impacts", impacts);
39+
}
40+
return b;
41+
});
5142
if (diagnosisList != null && diagnosisList.isEmpty() == false) {
52-
builder.endArray();
43+
ob.array("diagnosis", diagnosisList.iterator(), ChunkedToXContentBuilder::append);
5344
}
54-
builder.endObject();
55-
return builder;
56-
}));
45+
});
5746
}
5847
}

server/src/main/java/org/elasticsearch/ingest/IngestMetadata.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import org.elasticsearch.common.io.stream.StreamInput;
1919
import org.elasticsearch.common.io.stream.StreamOutput;
2020
import org.elasticsearch.common.util.Maps;
21-
import org.elasticsearch.common.xcontent.ChunkedToXContentHelper;
21+
import org.elasticsearch.common.xcontent.ChunkedToXContent;
2222
import org.elasticsearch.xcontent.ObjectParser;
2323
import org.elasticsearch.xcontent.ParseField;
2424
import org.elasticsearch.xcontent.ToXContent;
@@ -98,8 +98,8 @@ public static IngestMetadata fromXContent(XContentParser parser) throws IOExcept
9898
}
9999

100100
@Override
101-
public Iterator<? extends ToXContent> toXContentChunked(ToXContent.Params ignored) {
102-
return ChunkedToXContentHelper.array(PIPELINES_FIELD.getPreferredName(), pipelines.values().iterator());
101+
public Iterator<? extends ToXContent> toXContentChunked(ToXContent.Params params) {
102+
return ChunkedToXContent.builder(params).array(PIPELINES_FIELD.getPreferredName(), pipelines.values().iterator());
103103
}
104104

105105
@Override

server/src/main/java/org/elasticsearch/persistent/PersistentTasksCustomMetadata.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,11 @@
1717
import org.elasticsearch.cluster.NamedDiff;
1818
import org.elasticsearch.cluster.metadata.Metadata;
1919
import org.elasticsearch.common.Strings;
20-
import org.elasticsearch.common.collect.Iterators;
2120
import org.elasticsearch.common.io.stream.StreamInput;
2221
import org.elasticsearch.common.io.stream.StreamOutput;
2322
import org.elasticsearch.common.io.stream.VersionedNamedWriteable;
2423
import org.elasticsearch.common.io.stream.Writeable;
25-
import org.elasticsearch.common.xcontent.ChunkedToXContentHelper;
24+
import org.elasticsearch.common.xcontent.ChunkedToXContent;
2625
import org.elasticsearch.core.Nullable;
2726
import org.elasticsearch.xcontent.ConstructingObjectParser;
2827
import org.elasticsearch.xcontent.ObjectParser;
@@ -552,11 +551,8 @@ public static NamedDiff<Metadata.Custom> readDiffFrom(StreamInput in) throws IOE
552551
}
553552

554553
@Override
555-
public Iterator<? extends ToXContent> toXContentChunked(ToXContent.Params ignored) {
556-
return Iterators.concat(
557-
Iterators.single((builder, params) -> builder.field("last_allocation_id", lastAllocationId)),
558-
ChunkedToXContentHelper.array("tasks", tasks.values().iterator())
559-
);
554+
public Iterator<? extends ToXContent> toXContentChunked(ToXContent.Params params) {
555+
return ChunkedToXContent.builder(params).field("last_allocation_id", lastAllocationId).array("tasks", tasks.values().iterator());
560556
}
561557

562558
public static Builder builder() {

0 commit comments

Comments
 (0)