|
13 | 13 | import org.apache.lucene.search.SortedNumericSortField; |
14 | 14 | import org.apache.lucene.search.SortedSetSortField; |
15 | 15 | import org.elasticsearch.action.support.DefaultShardOperationFailedException; |
16 | | -import org.elasticsearch.action.support.broadcast.BaseBroadcastResponse; |
| 16 | +import org.elasticsearch.action.support.broadcast.ChunkedBroadcastResponse; |
17 | 17 | import org.elasticsearch.common.collect.Iterators; |
18 | 18 | import org.elasticsearch.common.io.stream.StreamInput; |
19 | 19 | import org.elasticsearch.common.io.stream.StreamOutput; |
20 | 20 | import org.elasticsearch.common.unit.ByteSizeValue; |
21 | | -import org.elasticsearch.common.xcontent.ChunkedToXContent; |
22 | 21 | import org.elasticsearch.core.RestApiVersion; |
23 | 22 | import org.elasticsearch.index.engine.Segment; |
24 | | -import org.elasticsearch.rest.action.RestActions; |
25 | 23 | import org.elasticsearch.xcontent.ToXContent; |
26 | 24 | import org.elasticsearch.xcontent.XContentBuilder; |
27 | 25 |
|
|
33 | 31 | import java.util.Locale; |
34 | 32 | import java.util.Map; |
35 | 33 |
|
36 | | -public class IndicesSegmentResponse extends BaseBroadcastResponse implements ChunkedToXContent { |
| 34 | +public class IndicesSegmentResponse extends ChunkedBroadcastResponse { |
37 | 35 |
|
38 | 36 | private final ShardSegments[] shards; |
39 | 37 |
|
@@ -79,72 +77,72 @@ public void writeTo(StreamOutput out) throws IOException { |
79 | 77 | } |
80 | 78 |
|
81 | 79 | @Override |
82 | | - public Iterator<? extends ToXContent> toXContentChunked(ToXContent.Params outerParams) { |
83 | | - return Iterators.concat(Iterators.single(((builder, params) -> { |
84 | | - builder.startObject(); |
85 | | - RestActions.buildBroadcastShardsHeader(builder, params, this); |
86 | | - return builder.startObject(Fields.INDICES); |
87 | | - })), getIndices().values().stream().map(indexSegments -> (ToXContent) (builder, params) -> { |
88 | | - builder.startObject(indexSegments.getIndex()); |
89 | | - |
90 | | - builder.startObject(Fields.SHARDS); |
91 | | - for (IndexShardSegments indexSegment : indexSegments) { |
92 | | - builder.startArray(Integer.toString(indexSegment.shardId().id())); |
93 | | - for (ShardSegments shardSegments : indexSegment) { |
94 | | - builder.startObject(); |
95 | | - |
96 | | - builder.startObject(Fields.ROUTING); |
97 | | - builder.field(Fields.STATE, shardSegments.getShardRouting().state()); |
98 | | - builder.field(Fields.PRIMARY, shardSegments.getShardRouting().primary()); |
99 | | - builder.field(Fields.NODE, shardSegments.getShardRouting().currentNodeId()); |
100 | | - if (shardSegments.getShardRouting().relocatingNodeId() != null) { |
101 | | - builder.field(Fields.RELOCATING_NODE, shardSegments.getShardRouting().relocatingNodeId()); |
102 | | - } |
103 | | - builder.endObject(); |
104 | | - |
105 | | - builder.field(Fields.NUM_COMMITTED_SEGMENTS, shardSegments.getNumberOfCommitted()); |
106 | | - builder.field(Fields.NUM_SEARCH_SEGMENTS, shardSegments.getNumberOfSearch()); |
107 | | - |
108 | | - builder.startObject(Fields.SEGMENTS); |
109 | | - for (Segment segment : shardSegments) { |
110 | | - builder.startObject(segment.getName()); |
111 | | - builder.field(Fields.GENERATION, segment.getGeneration()); |
112 | | - builder.field(Fields.NUM_DOCS, segment.getNumDocs()); |
113 | | - builder.field(Fields.DELETED_DOCS, segment.getDeletedDocs()); |
114 | | - builder.humanReadableField(Fields.SIZE_IN_BYTES, Fields.SIZE, segment.getSize()); |
115 | | - if (builder.getRestApiVersion() == RestApiVersion.V_7) { |
116 | | - builder.humanReadableField(Fields.MEMORY_IN_BYTES, Fields.MEMORY, ByteSizeValue.ZERO); |
117 | | - } |
118 | | - builder.field(Fields.COMMITTED, segment.isCommitted()); |
119 | | - builder.field(Fields.SEARCH, segment.isSearch()); |
120 | | - if (segment.getVersion() != null) { |
121 | | - builder.field(Fields.VERSION, segment.getVersion()); |
122 | | - } |
123 | | - if (segment.isCompound() != null) { |
124 | | - builder.field(Fields.COMPOUND, segment.isCompound()); |
| 80 | + protected Iterator<ToXContent> customXContentChunks(ToXContent.Params params) { |
| 81 | + return Iterators.concat( |
| 82 | + Iterators.single((builder, p) -> builder.startObject(Fields.INDICES)), |
| 83 | + getIndices().values().stream().map(indexSegments -> (ToXContent) (builder, p) -> { |
| 84 | + builder.startObject(indexSegments.getIndex()); |
| 85 | + |
| 86 | + builder.startObject(Fields.SHARDS); |
| 87 | + for (IndexShardSegments indexSegment : indexSegments) { |
| 88 | + builder.startArray(Integer.toString(indexSegment.shardId().id())); |
| 89 | + for (ShardSegments shardSegments : indexSegment) { |
| 90 | + builder.startObject(); |
| 91 | + |
| 92 | + builder.startObject(Fields.ROUTING); |
| 93 | + builder.field(Fields.STATE, shardSegments.getShardRouting().state()); |
| 94 | + builder.field(Fields.PRIMARY, shardSegments.getShardRouting().primary()); |
| 95 | + builder.field(Fields.NODE, shardSegments.getShardRouting().currentNodeId()); |
| 96 | + if (shardSegments.getShardRouting().relocatingNodeId() != null) { |
| 97 | + builder.field(Fields.RELOCATING_NODE, shardSegments.getShardRouting().relocatingNodeId()); |
125 | 98 | } |
126 | | - if (segment.getMergeId() != null) { |
127 | | - builder.field(Fields.MERGE_ID, segment.getMergeId()); |
128 | | - } |
129 | | - if (segment.getSegmentSort() != null) { |
130 | | - toXContent(builder, segment.getSegmentSort()); |
131 | | - } |
132 | | - if (segment.attributes != null && segment.attributes.isEmpty() == false) { |
133 | | - builder.field("attributes", segment.attributes); |
| 99 | + builder.endObject(); |
| 100 | + |
| 101 | + builder.field(Fields.NUM_COMMITTED_SEGMENTS, shardSegments.getNumberOfCommitted()); |
| 102 | + builder.field(Fields.NUM_SEARCH_SEGMENTS, shardSegments.getNumberOfSearch()); |
| 103 | + |
| 104 | + builder.startObject(Fields.SEGMENTS); |
| 105 | + for (Segment segment : shardSegments) { |
| 106 | + builder.startObject(segment.getName()); |
| 107 | + builder.field(Fields.GENERATION, segment.getGeneration()); |
| 108 | + builder.field(Fields.NUM_DOCS, segment.getNumDocs()); |
| 109 | + builder.field(Fields.DELETED_DOCS, segment.getDeletedDocs()); |
| 110 | + builder.humanReadableField(Fields.SIZE_IN_BYTES, Fields.SIZE, segment.getSize()); |
| 111 | + if (builder.getRestApiVersion() == RestApiVersion.V_7) { |
| 112 | + builder.humanReadableField(Fields.MEMORY_IN_BYTES, Fields.MEMORY, ByteSizeValue.ZERO); |
| 113 | + } |
| 114 | + builder.field(Fields.COMMITTED, segment.isCommitted()); |
| 115 | + builder.field(Fields.SEARCH, segment.isSearch()); |
| 116 | + if (segment.getVersion() != null) { |
| 117 | + builder.field(Fields.VERSION, segment.getVersion()); |
| 118 | + } |
| 119 | + if (segment.isCompound() != null) { |
| 120 | + builder.field(Fields.COMPOUND, segment.isCompound()); |
| 121 | + } |
| 122 | + if (segment.getMergeId() != null) { |
| 123 | + builder.field(Fields.MERGE_ID, segment.getMergeId()); |
| 124 | + } |
| 125 | + if (segment.getSegmentSort() != null) { |
| 126 | + toXContent(builder, segment.getSegmentSort()); |
| 127 | + } |
| 128 | + if (segment.attributes != null && segment.attributes.isEmpty() == false) { |
| 129 | + builder.field("attributes", segment.attributes); |
| 130 | + } |
| 131 | + builder.endObject(); |
134 | 132 | } |
135 | 133 | builder.endObject(); |
136 | | - } |
137 | | - builder.endObject(); |
138 | 134 |
|
139 | | - builder.endObject(); |
| 135 | + builder.endObject(); |
| 136 | + } |
| 137 | + builder.endArray(); |
140 | 138 | } |
141 | | - builder.endArray(); |
142 | | - } |
143 | | - builder.endObject(); |
| 139 | + builder.endObject(); |
144 | 140 |
|
145 | | - builder.endObject(); |
146 | | - return builder; |
147 | | - }).iterator(), Iterators.single((builder, params) -> builder.endObject().endObject())); |
| 141 | + builder.endObject(); |
| 142 | + return builder; |
| 143 | + }).iterator(), |
| 144 | + Iterators.single((builder, p) -> builder.endObject()) |
| 145 | + ); |
148 | 146 | } |
149 | 147 |
|
150 | 148 | private static void toXContent(XContentBuilder builder, Sort sort) throws IOException { |
|
0 commit comments