Removes multiple toXContent entry points for SnapshotInfo
SnapshotInfo had a toXContent and an externalToXContent, the former for writing snapshot info to the snapshot blob and the latter for writing the snapshot info to the APIs. This commit unifies writing x-content to one method, toXContent, which distinguishes which format to write the snapshot info in based on the Params parameter. In addition, it makes use of the already existing snapshot specific params found in the BlobStoreFormat. Closes #18494
This commit is contained in:
parent
b3a8c54928
commit
105aee08b3
|
@ -85,7 +85,7 @@ public class CreateSnapshotResponse extends ActionResponse implements ToXContent
|
|||
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
|
||||
if (snapshotInfo != null) {
|
||||
builder.field("snapshot");
|
||||
snapshotInfo.toExternalXContent(builder, params);
|
||||
snapshotInfo.toXContent(builder, params);
|
||||
} else {
|
||||
builder.field("accepted", true);
|
||||
}
|
||||
|
|
|
@ -78,7 +78,7 @@ public class GetSnapshotsResponse extends ActionResponse implements ToXContent {
|
|||
public XContentBuilder toXContent(XContentBuilder builder, ToXContent.Params params) throws IOException {
|
||||
builder.startArray("snapshots");
|
||||
for (SnapshotInfo snapshotInfo : snapshots) {
|
||||
snapshotInfo.toExternalXContent(builder, params);
|
||||
snapshotInfo.toXContent(builder, params);
|
||||
}
|
||||
builder.endArray();
|
||||
return builder;
|
||||
|
|
|
@ -26,6 +26,7 @@ import org.elasticsearch.common.xcontent.FromXContentBuilder;
|
|||
import org.elasticsearch.common.xcontent.ToXContent;
|
||||
import org.elasticsearch.common.xcontent.XContentHelper;
|
||||
import org.elasticsearch.common.xcontent.XContentParser;
|
||||
import org.elasticsearch.snapshots.SnapshotInfo;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
|
@ -51,6 +52,8 @@ public abstract class BlobStoreFormat<T extends ToXContent> {
|
|||
// when metadata is serialized certain elements of the metadata shouldn't be included into snapshot
|
||||
// exclusion of these elements is done by setting MetaData.CONTEXT_MODE_PARAM to MetaData.CONTEXT_MODE_SNAPSHOT
|
||||
snapshotOnlyParams.put(MetaData.CONTEXT_MODE_PARAM, MetaData.CONTEXT_MODE_SNAPSHOT);
|
||||
// serialize SnapshotInfo using the SNAPSHOT mode
|
||||
snapshotOnlyParams.put(SnapshotInfo.CONTEXT_MODE_PARAM, SnapshotInfo.CONTEXT_MODE_SNAPSHOT);
|
||||
SNAPSHOT_ONLY_FORMAT_PARAMS = new ToXContent.MapParams(snapshotOnlyParams);
|
||||
}
|
||||
|
||||
|
|
|
@ -44,6 +44,8 @@ import java.util.List;
|
|||
public final class SnapshotInfo implements Comparable<SnapshotInfo>, ToXContent, FromXContentBuilder<SnapshotInfo>, Writeable {
|
||||
|
||||
public static final SnapshotInfo PROTO = new SnapshotInfo("", Collections.emptyList(), 0);
|
||||
public static final String CONTEXT_MODE_PARAM = "context_mode";
|
||||
public static final String CONTEXT_MODE_SNAPSHOT = "SNAPSHOT";
|
||||
private static final FormatDateTimeFormatter DATE_TIME_FORMATTER = Joda.forPattern("strictDateOptionalTime");
|
||||
private static final String SNAPSHOT = "snapshot";
|
||||
private static final String INDICES = "indices";
|
||||
|
@ -294,37 +296,12 @@ public final class SnapshotInfo implements Comparable<SnapshotInfo>, ToXContent,
|
|||
|
||||
@Override
|
||||
public XContentBuilder toXContent(final XContentBuilder builder, final Params params) throws IOException {
|
||||
builder.startObject(SNAPSHOT);
|
||||
builder.field(NAME, name);
|
||||
builder.field(VERSION_ID, version.id);
|
||||
builder.startArray(INDICES);
|
||||
for (String index : indices) {
|
||||
builder.value(index);
|
||||
// write snapshot info to repository snapshot blob format
|
||||
if (CONTEXT_MODE_SNAPSHOT.equals(params.param(CONTEXT_MODE_PARAM))) {
|
||||
return toXContentSnapshot(builder, params);
|
||||
}
|
||||
builder.endArray();
|
||||
builder.field(STATE, state);
|
||||
if (reason != null) {
|
||||
builder.field(REASON, reason);
|
||||
}
|
||||
builder.field(START_TIME, startTime);
|
||||
builder.field(END_TIME, endTime);
|
||||
builder.field(TOTAL_SHARDS, totalShards);
|
||||
builder.field(SUCCESSFUL_SHARDS, successfulShards);
|
||||
builder.startArray(FAILURES);
|
||||
for (SnapshotShardFailure shardFailure : shardFailures) {
|
||||
builder.startObject();
|
||||
shardFailure.toXContent(builder, params);
|
||||
builder.endObject();
|
||||
}
|
||||
builder.endArray();
|
||||
builder.endObject();
|
||||
return builder;
|
||||
}
|
||||
|
||||
/**
|
||||
* Produces the external X-content that is delivered through the REST layer.
|
||||
*/
|
||||
public XContentBuilder toExternalXContent(final XContentBuilder builder, final ToXContent.Params params) throws IOException {
|
||||
// write snapshot info for the API and any other situations
|
||||
builder.startObject();
|
||||
builder.field(SNAPSHOT, name);
|
||||
builder.field(VERSION_ID, version.id);
|
||||
|
@ -363,6 +340,34 @@ public final class SnapshotInfo implements Comparable<SnapshotInfo>, ToXContent,
|
|||
return builder;
|
||||
}
|
||||
|
||||
private XContentBuilder toXContentSnapshot(final XContentBuilder builder, final ToXContent.Params params) throws IOException {
|
||||
builder.startObject(SNAPSHOT);
|
||||
builder.field(NAME, name);
|
||||
builder.field(VERSION_ID, version.id);
|
||||
builder.startArray(INDICES);
|
||||
for (String index : indices) {
|
||||
builder.value(index);
|
||||
}
|
||||
builder.endArray();
|
||||
builder.field(STATE, state);
|
||||
if (reason != null) {
|
||||
builder.field(REASON, reason);
|
||||
}
|
||||
builder.field(START_TIME, startTime);
|
||||
builder.field(END_TIME, endTime);
|
||||
builder.field(TOTAL_SHARDS, totalShards);
|
||||
builder.field(SUCCESSFUL_SHARDS, successfulShards);
|
||||
builder.startArray(FAILURES);
|
||||
for (SnapshotShardFailure shardFailure : shardFailures) {
|
||||
builder.startObject();
|
||||
shardFailure.toXContent(builder, params);
|
||||
builder.endObject();
|
||||
}
|
||||
builder.endArray();
|
||||
builder.endObject();
|
||||
return builder;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SnapshotInfo fromXContent(final XContentParser parser, final ParseFieldMatcher matcher) throws IOException {
|
||||
return fromXContent(parser);
|
||||
|
|
Loading…
Reference in New Issue