|
25 | 25 | import org.elasticsearch.Version; |
26 | 26 | import org.elasticsearch.cluster.ClusterState.Custom; |
27 | 27 | import org.elasticsearch.common.Nullable; |
| 28 | +import org.elasticsearch.common.Strings; |
28 | 29 | import org.elasticsearch.common.collect.ImmutableOpenMap; |
29 | 30 | import org.elasticsearch.common.io.stream.StreamInput; |
30 | 31 | import org.elasticsearch.common.io.stream.StreamOutput; |
@@ -76,7 +77,7 @@ public String toString() { |
76 | 77 | return builder.append("]").toString(); |
77 | 78 | } |
78 | 79 |
|
79 | | - public static class Entry { |
| 80 | + public static class Entry implements ToXContent { |
80 | 81 | private final State state; |
81 | 82 | private final Snapshot snapshot; |
82 | 83 | private final boolean includeGlobalState; |
@@ -210,7 +211,50 @@ public int hashCode() { |
210 | 211 |
|
211 | 212 | @Override |
212 | 213 | public String toString() { |
213 | | - return snapshot.toString(); |
| 214 | + return Strings.toString(this); |
| 215 | + } |
| 216 | + |
| 217 | + @Override |
| 218 | + public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException { |
| 219 | + builder.startObject(); |
| 220 | + builder.field(REPOSITORY, snapshot.getRepository()); |
| 221 | + builder.field(SNAPSHOT, snapshot.getSnapshotId().getName()); |
| 222 | + builder.field(UUID, snapshot.getSnapshotId().getUUID()); |
| 223 | + builder.field(INCLUDE_GLOBAL_STATE, includeGlobalState()); |
| 224 | + builder.field(PARTIAL, partial); |
| 225 | + builder.field(STATE, state); |
| 226 | + builder.startArray(INDICES); |
| 227 | + { |
| 228 | + for (IndexId index : indices) { |
| 229 | + index.toXContent(builder, params); |
| 230 | + } |
| 231 | + } |
| 232 | + builder.endArray(); |
| 233 | + builder.humanReadableField(START_TIME_MILLIS, START_TIME, new TimeValue(startTime)); |
| 234 | + builder.field(REPOSITORY_STATE_ID, repositoryStateId); |
| 235 | + builder.startArray(SHARDS); |
| 236 | + { |
| 237 | + for (ObjectObjectCursor<ShardId, ShardSnapshotStatus> shardEntry : shards) { |
| 238 | + ShardId shardId = shardEntry.key; |
| 239 | + ShardSnapshotStatus status = shardEntry.value; |
| 240 | + builder.startObject(); |
| 241 | + { |
| 242 | + builder.field(INDEX, shardId.getIndex()); |
| 243 | + builder.field(SHARD, shardId.getId()); |
| 244 | + builder.field(STATE, status.state()); |
| 245 | + builder.field(NODE, status.nodeId()); |
| 246 | + } |
| 247 | + builder.endObject(); |
| 248 | + } |
| 249 | + } |
| 250 | + builder.endArray(); |
| 251 | + builder.endObject(); |
| 252 | + return builder; |
| 253 | + } |
| 254 | + |
| 255 | + @Override |
| 256 | + public boolean isFragment() { |
| 257 | + return false; |
214 | 258 | } |
215 | 259 |
|
216 | 260 | private ImmutableOpenMap<String, List<ShardId>> findWaitingIndices(ImmutableOpenMap<ShardId, ShardSnapshotStatus> shards) { |
@@ -507,48 +551,12 @@ public void writeTo(StreamOutput out) throws IOException { |
507 | 551 | public XContentBuilder toXContent(XContentBuilder builder, ToXContent.Params params) throws IOException { |
508 | 552 | builder.startArray(SNAPSHOTS); |
509 | 553 | for (Entry entry : entries) { |
510 | | - toXContent(entry, builder, params); |
| 554 | + entry.toXContent(builder, params); |
511 | 555 | } |
512 | 556 | builder.endArray(); |
513 | 557 | return builder; |
514 | 558 | } |
515 | 559 |
|
516 | | - public void toXContent(Entry entry, XContentBuilder builder, ToXContent.Params params) throws IOException { |
517 | | - builder.startObject(); |
518 | | - builder.field(REPOSITORY, entry.snapshot().getRepository()); |
519 | | - builder.field(SNAPSHOT, entry.snapshot().getSnapshotId().getName()); |
520 | | - builder.field(UUID, entry.snapshot().getSnapshotId().getUUID()); |
521 | | - builder.field(INCLUDE_GLOBAL_STATE, entry.includeGlobalState()); |
522 | | - builder.field(PARTIAL, entry.partial()); |
523 | | - builder.field(STATE, entry.state()); |
524 | | - builder.startArray(INDICES); |
525 | | - { |
526 | | - for (IndexId index : entry.indices()) { |
527 | | - index.toXContent(builder, params); |
528 | | - } |
529 | | - } |
530 | | - builder.endArray(); |
531 | | - builder.humanReadableField(START_TIME_MILLIS, START_TIME, new TimeValue(entry.startTime())); |
532 | | - builder.field(REPOSITORY_STATE_ID, entry.getRepositoryStateId()); |
533 | | - builder.startArray(SHARDS); |
534 | | - { |
535 | | - for (ObjectObjectCursor<ShardId, ShardSnapshotStatus> shardEntry : entry.shards) { |
536 | | - ShardId shardId = shardEntry.key; |
537 | | - ShardSnapshotStatus status = shardEntry.value; |
538 | | - builder.startObject(); |
539 | | - { |
540 | | - builder.field(INDEX, shardId.getIndex()); |
541 | | - builder.field(SHARD, shardId.getId()); |
542 | | - builder.field(STATE, status.state()); |
543 | | - builder.field(NODE, status.nodeId()); |
544 | | - } |
545 | | - builder.endObject(); |
546 | | - } |
547 | | - } |
548 | | - builder.endArray(); |
549 | | - builder.endObject(); |
550 | | - } |
551 | | - |
552 | 560 | public enum ShardState { |
553 | 561 | INIT((byte) 0, false, false), |
554 | 562 | SUCCESS((byte) 2, true, false), |
|
0 commit comments