Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -36,20 +36,20 @@ public class FieldCapabilitiesResponse extends ActionResponse implements Chunked
public static final ParseField FAILURES_FIELD = new ParseField("failures");

private final String[] indices;
private final Map<String, Map<String, FieldCapabilities>> responseMap;
private final Map<String, Map<String, FieldCapabilities>> fields;
private final List<FieldCapabilitiesFailure> failures;
private final List<FieldCapabilitiesIndexResponse> indexResponses;

public FieldCapabilitiesResponse(
String[] indices,
Map<String, Map<String, FieldCapabilities>> responseMap,
Map<String, Map<String, FieldCapabilities>> fields,
List<FieldCapabilitiesFailure> failures
) {
this(indices, responseMap, Collections.emptyList(), failures);
this(indices, fields, Collections.emptyList(), failures);
}

public FieldCapabilitiesResponse(String[] indices, Map<String, Map<String, FieldCapabilities>> responseMap) {
this(indices, responseMap, Collections.emptyList(), Collections.emptyList());
public FieldCapabilitiesResponse(String[] indices, Map<String, Map<String, FieldCapabilities>> fields) {
this(indices, fields, Collections.emptyList(), Collections.emptyList());
}

public FieldCapabilitiesResponse(List<FieldCapabilitiesIndexResponse> indexResponses, List<FieldCapabilitiesFailure> failures) {
Expand All @@ -58,19 +58,19 @@ public FieldCapabilitiesResponse(List<FieldCapabilitiesIndexResponse> indexRespo

private FieldCapabilitiesResponse(
String[] indices,
Map<String, Map<String, FieldCapabilities>> responseMap,
Map<String, Map<String, FieldCapabilities>> fields,
List<FieldCapabilitiesIndexResponse> indexResponses,
List<FieldCapabilitiesFailure> failures
) {
this.responseMap = Objects.requireNonNull(responseMap);
this.fields = Objects.requireNonNull(fields);
this.indexResponses = Objects.requireNonNull(indexResponses);
this.indices = indices;
this.failures = failures;
}

public FieldCapabilitiesResponse(StreamInput in) throws IOException {
indices = in.readStringArray();
this.responseMap = in.readMap(FieldCapabilitiesResponse::readField);
this.indices = in.readStringArray();
this.fields = in.readMap(FieldCapabilitiesResponse::readField);
this.indexResponses = FieldCapabilitiesIndexResponse.readList(in);
this.failures = in.readCollectionAsList(FieldCapabilitiesFailure::new);
}
Expand Down Expand Up @@ -98,7 +98,7 @@ public int getFailedIndicesCount() {
* Get the field capabilities map.
*/
public Map<String, Map<String, FieldCapabilities>> get() {
return responseMap;
return fields;
}

/**
Expand All @@ -120,7 +120,7 @@ public List<FieldCapabilitiesIndexResponse> getIndexResponses() {
* Get the field capabilities per type for the provided {@code field}.
*/
public Map<String, FieldCapabilities> getField(String field) {
return responseMap.get(field);
return fields.get(field);
}

/**
Expand All @@ -141,7 +141,7 @@ private static Map<String, FieldCapabilities> readField(StreamInput in) throws I
@Override
public void writeTo(StreamOutput out) throws IOException {
out.writeStringArray(indices);
out.writeMap(responseMap, FieldCapabilitiesResponse::writeField);
out.writeMap(fields, FieldCapabilitiesResponse::writeField);
FieldCapabilitiesIndexResponse.writeList(out, indexResponses);
out.writeCollection(failures);
}
Expand All @@ -160,7 +160,7 @@ public Iterator<? extends ToXContent> toXContentChunked(ToXContent.Params params
Iterators.single(
(b, p) -> b.startObject().array(INDICES_FIELD.getPreferredName(), indices).startObject(FIELDS_FIELD.getPreferredName())
),
Iterators.map(responseMap.entrySet().iterator(), r -> (b, p) -> b.xContentValuesMap(r.getKey(), r.getValue())),
Iterators.map(fields.entrySet().iterator(), r -> (b, p) -> b.xContentValuesMap(r.getKey(), r.getValue())),
this.failures.size() > 0
? Iterators.concat(
Iterators.single(
Expand All @@ -182,21 +182,21 @@ public boolean equals(Object o) {
if (o == null || getClass() != o.getClass()) return false;
FieldCapabilitiesResponse that = (FieldCapabilitiesResponse) o;
return Arrays.equals(indices, that.indices)
&& Objects.equals(responseMap, that.responseMap)
&& Objects.equals(fields, that.fields)
&& Objects.equals(indexResponses, that.indexResponses)
&& Objects.equals(failures, that.failures);
}

@Override
public int hashCode() {
int result = Objects.hash(responseMap, indexResponses, failures);
int result = Objects.hash(fields, indexResponses, failures);
result = 31 * result + Arrays.hashCode(indices);
return result;
}

@Override
public String toString() {
if (indexResponses.size() > 0) {
if (!indexResponses.isEmpty()) {
return "FieldCapabilitiesResponse{unmerged}";
}
return Strings.toString(this);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -459,7 +459,7 @@ private static FieldCapabilitiesResponse merge(
final FieldCapabilitiesIndexResponse[] indexResponses = indexResponsesMap.values().toArray(new FieldCapabilitiesIndexResponse[0]);
Arrays.sort(indexResponses, Comparator.comparing(FieldCapabilitiesIndexResponse::getIndexName));
final String[] indices = Arrays.stream(indexResponses).map(FieldCapabilitiesIndexResponse::getIndexName).toArray(String[]::new);
final Map<String, Map<String, FieldCapabilities.Builder>> responseMapBuilder = new HashMap<>();
final Map<String, Map<String, FieldCapabilities.Builder>> fieldsBuilder = new HashMap<>();
int lastPendingIndex = 0;
for (int i = 1; i <= indexResponses.length; i++) {
if (i == indexResponses.length || hasSameMappingHash(indexResponses[lastPendingIndex], indexResponses[i]) == false) {
Expand All @@ -469,17 +469,17 @@ private static FieldCapabilitiesResponse merge(
} else {
subIndices = ArrayUtil.copyOfSubArray(indices, lastPendingIndex, i);
}
innerMerge(subIndices, responseMapBuilder, request, indexResponses[lastPendingIndex]);
innerMerge(subIndices, fieldsBuilder, request, indexResponses[lastPendingIndex]);
lastPendingIndex = i;
}
}

task.ensureNotCancelled();
Map<String, Map<String, FieldCapabilities>> responseMap = Maps.newMapWithExpectedSize(responseMapBuilder.size());
Map<String, Map<String, FieldCapabilities>> fields = Maps.newMapWithExpectedSize(fieldsBuilder.size());
if (request.includeUnmapped()) {
collectResponseMapIncludingUnmapped(indices, responseMapBuilder, responseMap);
collectFieldsIncludingUnmapped(indices, fieldsBuilder, fields);
} else {
collectResponseMap(responseMapBuilder, responseMap);
collectFields(fieldsBuilder, fields);
}

// The merge method is only called on the primary coordinator for cross-cluster field caps, so we
Expand All @@ -493,7 +493,7 @@ private static FieldCapabilitiesResponse merge(
);
}
}
return new FieldCapabilitiesResponse(indices, Collections.unmodifiableMap(responseMap), failures);
return new FieldCapabilitiesResponse(indices, Collections.unmodifiableMap(fields), failures);
}

private static boolean shouldLogException(Exception e) {
Expand All @@ -506,13 +506,13 @@ private static boolean shouldLogException(Exception e) {
&& ExceptionsHelper.isNodeOrShardUnavailableTypeException(e) == false;
}

private static void collectResponseMapIncludingUnmapped(
private static void collectFieldsIncludingUnmapped(
String[] indices,
Map<String, Map<String, FieldCapabilities.Builder>> responseMapBuilder,
Map<String, Map<String, FieldCapabilities>> responseMap
Map<String, Map<String, FieldCapabilities.Builder>> fieldsBuilder,
Map<String, Map<String, FieldCapabilities>> fieldsMap
) {
final Set<String> mappedScratch = new HashSet<>();
for (Map.Entry<String, Map<String, FieldCapabilities.Builder>> entry : responseMapBuilder.entrySet()) {
for (Map.Entry<String, Map<String, FieldCapabilities.Builder>> entry : fieldsBuilder.entrySet()) {
var typeMapBuilder = entry.getValue().entrySet();

// do this directly, rather than using the builder, to save creating a whole lot of objects we don't need
Expand All @@ -527,17 +527,17 @@ private static void collectResponseMapIncludingUnmapped(
if (unmapped != null) {
res.put("unmapped", unmapped.apply(resSize > 1));
}
responseMap.put(entry.getKey(), Collections.unmodifiableMap(res));
fieldsMap.put(entry.getKey(), Collections.unmodifiableMap(res));
}
}

private static void collectResponseMap(
Map<String, Map<String, FieldCapabilities.Builder>> responseMapBuilder,
Map<String, Map<String, FieldCapabilities>> responseMap
private static void collectFields(
Map<String, Map<String, FieldCapabilities.Builder>> fieldsBuilder,
Map<String, Map<String, FieldCapabilities>> fields
) {
for (Map.Entry<String, Map<String, FieldCapabilities.Builder>> entry : responseMapBuilder.entrySet()) {
for (Map.Entry<String, Map<String, FieldCapabilities.Builder>> entry : fieldsBuilder.entrySet()) {
var typeMapBuilder = entry.getValue().entrySet();
responseMap.put(entry.getKey(), Collections.unmodifiableMap(capabilities(typeMapBuilder.size(), typeMapBuilder)));
fields.put(entry.getKey(), Collections.unmodifiableMap(capabilities(typeMapBuilder.size(), typeMapBuilder)));
}
}

Expand Down