Skip to content

Commit 3b7b86c

Browse files
authored
Simplify ChunkedToXContentHelper#singleChunk (#105225)
There's no need for this helper to take more than one argument. Almost all the usages only passed in a single argument, and the few cases that supplied more than one can be rewritten as a single argument to save allocating all those extra lambdas.
1 parent aaadc30 commit 3b7b86c

File tree

6 files changed

+28
-36
lines changed

6 files changed

+28
-36
lines changed

libs/x-content/src/main/java/org/elasticsearch/xcontent/XContentBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -976,7 +976,7 @@ public XContentBuilder value(Map<String, ?> map) throws IOException {
976976
return map(map);
977977
}
978978

979-
private XContentBuilder value(ToXContent value, ToXContent.Params params) throws IOException {
979+
public XContentBuilder value(ToXContent value, ToXContent.Params params) throws IOException {
980980
if (value == null) {
981981
return nullValue();
982982
}

server/src/main/java/org/elasticsearch/action/admin/cluster/allocation/DesiredBalanceResponse.java

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -88,10 +88,10 @@ public void writeTo(StreamOutput out) throws IOException {
8888
public Iterator<? extends ToXContent> toXContentChunked(ToXContent.Params params) {
8989
return Iterators.concat(
9090
singleChunk(
91-
(builder, p) -> builder.startObject(),
92-
(builder, p) -> builder.field("stats", stats),
93-
(builder, p) -> builder.field("cluster_balance_stats", clusterBalanceStats),
94-
(builder, p) -> builder.startObject("routing_table")
91+
(builder, p) -> builder.startObject()
92+
.field("stats", stats)
93+
.field("cluster_balance_stats", clusterBalanceStats)
94+
.startObject("routing_table")
9595
),
9696
Iterators.flatMap(
9797
routingTable.entrySet().iterator(),
@@ -172,14 +172,9 @@ public void writeTo(StreamOutput out) throws IOException {
172172
@Override
173173
public Iterator<? extends ToXContent> toXContentChunked(ToXContent.Params params) {
174174
return Iterators.concat(
175-
singleChunk((builder, p) -> builder.startObject(), (builder, p) -> builder.startArray("current")),
175+
singleChunk((builder, p) -> builder.startObject().startArray("current")),
176176
current().iterator(),
177-
singleChunk(
178-
(builder, p) -> builder.endArray(),
179-
(builder, p) -> builder.field("desired"),
180-
desired,
181-
(builder, p) -> builder.endObject()
182-
)
177+
singleChunk((builder, p) -> builder.endArray().field("desired").value(desired, p).endObject())
183178
);
184179
}
185180
}

server/src/main/java/org/elasticsearch/action/admin/cluster/node/stats/NodeStats.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@ public Iterator<? extends ToXContent> toXContentChunked(ToXContent.Params outerP
304304

305305
return Iterators.concat(
306306

307-
Iterators.single((builder, params) -> {
307+
singleChunk((builder, params) -> {
308308
builder.field("name", getNode().getName());
309309
builder.field("transport_address", getNode().getAddress().toString());
310310
builder.field("host", getNode().getHostName());
@@ -329,7 +329,9 @@ public Iterator<? extends ToXContent> toXContentChunked(ToXContent.Params outerP
329329

330330
ifPresent(getIndices()).toXContentChunked(outerParams),
331331

332-
singleChunk(ifPresent(getOs()), ifPresent(getProcess()), ifPresent(getJvm())),
332+
singleChunk(
333+
(builder, p) -> builder.value(ifPresent(getOs()), p).value(ifPresent(getProcess()), p).value(ifPresent(getJvm()), p)
334+
),
333335

334336
ifPresent(getThreadPool()).toXContentChunked(outerParams),
335337
singleChunk(ifPresent(getFs())),
@@ -341,8 +343,7 @@ public Iterator<? extends ToXContent> toXContentChunked(ToXContent.Params outerP
341343
ifPresent(getIngestStats()).toXContentChunked(outerParams),
342344
singleChunk(ifPresent(getAdaptiveSelectionStats())),
343345
ifPresent(getScriptCacheStats()).toXContentChunked(outerParams),
344-
singleChunk(ifPresent(getIndexingPressureStats())),
345-
singleChunk(ifPresent(getRepositoriesStats()))
346+
singleChunk((builder, p) -> builder.value(ifPresent(getIndexingPressureStats()), p).value(ifPresent(getRepositoriesStats()), p))
346347
);
347348
}
348349

server/src/main/java/org/elasticsearch/cluster/ClusterInfo.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -163,17 +163,17 @@ public Iterator<? extends ToXContent> toXContentChunked(ToXContent.Params params
163163
return builder;
164164
}),
165165
singleChunk(
166-
(builder, p) -> builder.endObject(), // end "nodes"
167-
(builder, p) -> builder.startObject("shard_sizes")
166+
(builder, p) -> builder.endObject() // end "nodes"
167+
.startObject("shard_sizes")
168168
),
169169

170170
Iterators.map(
171171
shardSizes.entrySet().iterator(),
172172
c -> (builder, p) -> builder.humanReadableField(c.getKey() + "_bytes", c.getKey(), ByteSizeValue.ofBytes(c.getValue()))
173173
),
174174
singleChunk(
175-
(builder, p) -> builder.endObject(), // end "shard_sizes"
176-
(builder, p) -> builder.startObject("shard_data_set_sizes")
175+
(builder, p) -> builder.endObject() // end "shard_sizes"
176+
.startObject("shard_data_set_sizes")
177177
),
178178
Iterators.map(
179179
shardDataSetSizes.entrySet().iterator(),
@@ -184,13 +184,13 @@ public Iterator<? extends ToXContent> toXContentChunked(ToXContent.Params params
184184
)
185185
),
186186
singleChunk(
187-
(builder, p) -> builder.endObject(), // end "shard_data_set_sizes"
188-
(builder, p) -> builder.startObject("shard_paths")
187+
(builder, p) -> builder.endObject() // end "shard_data_set_sizes"
188+
.startObject("shard_paths")
189189
),
190190
Iterators.map(dataPath.entrySet().iterator(), c -> (builder, p) -> builder.field(c.getKey().toString(), c.getValue())),
191191
singleChunk(
192-
(builder, p) -> builder.endObject(), // end "shard_paths"
193-
(builder, p) -> builder.startArray("reserved_sizes")
192+
(builder, p) -> builder.endObject() // end "shard_paths"
193+
.startArray("reserved_sizes")
194194
),
195195
Iterators.map(reservedSpace.entrySet().iterator(), c -> (builder, p) -> {
196196
builder.startObject();

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

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -115,17 +115,13 @@ public static <T> Iterator<ToXContent> map(String name, Map<String, T> map, Func
115115
}
116116

117117
/**
118-
* Creates an Iterator of a single ToXContent object that serializes all the given 'contents' ToXContent objects into a single chunk.
118+
* Creates an Iterator of a single ToXContent object that serializes the given object as a single chunk. Just wraps {@link
119+
* Iterators#single}, but still useful because it avoids any type ambiguity.
119120
*
120-
* @param contents ToXContent objects supporting toXContent() calls.
121-
* @return Iterator of a single ToXContent object serializing all the ToXContent "contents".
121+
* @param item Item to wrap
122+
* @return Singleton iterator for the given item.
122123
*/
123-
public static Iterator<ToXContent> singleChunk(ToXContent... contents) {
124-
return Iterators.single((builder, params) -> {
125-
for (ToXContent content : contents) {
126-
content.toXContent(builder, params);
127-
}
128-
return builder;
129-
});
124+
public static Iterator<ToXContent> singleChunk(ToXContent item) {
125+
return Iterators.single(item);
130126
}
131127
}

server/src/test/java/org/elasticsearch/action/admin/cluster/node/stats/NodeStatsTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -491,8 +491,8 @@ public void testChunking() {
491491
}
492492

493493
private static int expectedChunks(NodeStats nodeStats, NodeStatsLevel level) {
494-
// expectedChunks = number of static chunks (8 at the moment, see NodeStats#toXContentChunked) + number of variable chunks
495-
return 8 + expectedChunks(nodeStats.getHttp()) //
494+
return 7 // number of static chunks, see NodeStats#toXContentChunked
495+
+ expectedChunks(nodeStats.getHttp()) //
496496
+ expectedChunks(nodeStats.getIndices(), level) //
497497
+ expectedChunks(nodeStats.getTransport()) //
498498
+ expectedChunks(nodeStats.getIngestStats()) //

0 commit comments

Comments
 (0)