|
36 | 36 | import org.elasticsearch.xcontent.XContentBuilder;
|
37 | 37 |
|
38 | 38 | import java.io.IOException;
|
| 39 | +import java.util.Collections; |
39 | 40 | import java.util.HashSet;
|
40 | 41 | import java.util.List;
|
41 | 42 | import java.util.Locale;
|
@@ -84,59 +85,28 @@ static RestResponse buildRestResponse(
|
84 | 85 | ) throws Exception {
|
85 | 86 | final Set<String> indicesToDisplay = new HashSet<>();
|
86 | 87 | final Set<String> returnedAliasNames = new HashSet<>();
|
87 |
| - for (final Map.Entry<String, List<AliasMetadata>> cursor : responseAliasMap.entrySet()) { |
88 |
| - for (final AliasMetadata aliasMetadata : cursor.getValue()) { |
89 |
| - if (aliasesExplicitlyRequested) { |
| 88 | + if (aliasesExplicitlyRequested) { |
| 89 | + for (final Map.Entry<String, List<AliasMetadata>> cursor : responseAliasMap.entrySet()) { |
| 90 | + final var aliases = cursor.getValue(); |
| 91 | + if (aliases.isEmpty() == false) { |
90 | 92 | // only display indices that have aliases
|
91 | 93 | indicesToDisplay.add(cursor.getKey());
|
92 |
| - } |
93 |
| - returnedAliasNames.add(aliasMetadata.alias()); |
94 |
| - } |
95 |
| - } |
96 |
| - dataStreamAliases.entrySet() |
97 |
| - .stream() |
98 |
| - .flatMap(entry -> entry.getValue().stream()) |
99 |
| - .forEach(dataStreamAlias -> returnedAliasNames.add(dataStreamAlias.getName())); |
100 |
| - |
101 |
| - // compute explicitly requested aliases that have are not returned in the result |
102 |
| - final SortedSet<String> missingAliases = new TreeSet<>(); |
103 |
| - // first wildcard index, leading "-" as an alias name after this index means |
104 |
| - // that it is an exclusion |
105 |
| - int firstWildcardIndex = requestedAliases.length; |
106 |
| - for (int i = 0; i < requestedAliases.length; i++) { |
107 |
| - if (Regex.isSimpleMatchPattern(requestedAliases[i])) { |
108 |
| - firstWildcardIndex = i; |
109 |
| - break; |
110 |
| - } |
111 |
| - } |
112 |
| - for (int i = 0; i < requestedAliases.length; i++) { |
113 |
| - if (Metadata.ALL.equals(requestedAliases[i]) |
114 |
| - || Regex.isSimpleMatchPattern(requestedAliases[i]) |
115 |
| - || (i > firstWildcardIndex && requestedAliases[i].charAt(0) == '-')) { |
116 |
| - // only explicitly requested aliases will be called out as missing (404) |
117 |
| - continue; |
118 |
| - } |
119 |
| - // check if aliases[i] is subsequently excluded |
120 |
| - int j = Math.max(i + 1, firstWildcardIndex); |
121 |
| - for (; j < requestedAliases.length; j++) { |
122 |
| - if (requestedAliases[j].charAt(0) == '-') { |
123 |
| - // this is an exclude pattern |
124 |
| - if (Regex.simpleMatch(requestedAliases[j].substring(1), requestedAliases[i]) |
125 |
| - || Metadata.ALL.equals(requestedAliases[j].substring(1))) { |
126 |
| - // aliases[i] is excluded by aliases[j] |
127 |
| - break; |
| 94 | + for (final AliasMetadata aliasMetadata : aliases) { |
| 95 | + returnedAliasNames.add(aliasMetadata.alias()); |
128 | 96 | }
|
129 | 97 | }
|
130 | 98 | }
|
131 |
| - if (j == requestedAliases.length) { |
132 |
| - // explicitly requested aliases[i] is not excluded by any subsequent "-" wildcard in expression |
133 |
| - if (false == returnedAliasNames.contains(requestedAliases[i])) { |
134 |
| - // aliases[i] is not in the result set |
135 |
| - missingAliases.add(requestedAliases[i]); |
| 99 | + |
| 100 | + for (final List<DataStreamAlias> dataStreamAliasList : dataStreamAliases.values()) { |
| 101 | + for (final DataStreamAlias dataStreamAlias : dataStreamAliasList) { |
| 102 | + returnedAliasNames.add(dataStreamAlias.getName()); |
136 | 103 | }
|
137 | 104 | }
|
138 | 105 | }
|
139 | 106 |
|
| 107 | + // compute explicitly requested aliases that would not be returned in the result |
| 108 | + final var missingAliases = computeMissingAliases(requestedAliases, returnedAliasNames); |
| 109 | + |
140 | 110 | final RestStatus status;
|
141 | 111 | builder.startObject();
|
142 | 112 | {
|
@@ -239,4 +209,50 @@ public RestResponse buildResponse(GetAliasesResponse response, XContentBuilder b
|
239 | 209 | });
|
240 | 210 | }
|
241 | 211 |
|
| 212 | + private static SortedSet<String> computeMissingAliases(String[] requestedAliases, Set<String> returnedAliasNames) { |
| 213 | + if (requestedAliases.length == 0) { |
| 214 | + return Collections.emptySortedSet(); |
| 215 | + } |
| 216 | + |
| 217 | + final var missingAliases = new TreeSet<String>(); |
| 218 | + |
| 219 | + // first wildcard index, leading "-" as an alias name after this index means |
| 220 | + // that it is an exclusion |
| 221 | + int firstWildcardIndex = requestedAliases.length; |
| 222 | + for (int i = 0; i < requestedAliases.length; i++) { |
| 223 | + if (Regex.isSimpleMatchPattern(requestedAliases[i])) { |
| 224 | + firstWildcardIndex = i; |
| 225 | + break; |
| 226 | + } |
| 227 | + } |
| 228 | + for (int i = 0; i < requestedAliases.length; i++) { |
| 229 | + if (Metadata.ALL.equals(requestedAliases[i]) |
| 230 | + || Regex.isSimpleMatchPattern(requestedAliases[i]) |
| 231 | + || (i > firstWildcardIndex && requestedAliases[i].charAt(0) == '-')) { |
| 232 | + // only explicitly requested aliases will be called out as missing (404) |
| 233 | + continue; |
| 234 | + } |
| 235 | + // check if aliases[i] is subsequently excluded |
| 236 | + int j = Math.max(i + 1, firstWildcardIndex); |
| 237 | + for (; j < requestedAliases.length; j++) { |
| 238 | + if (requestedAliases[j].charAt(0) == '-') { |
| 239 | + // this is an exclude pattern |
| 240 | + if (Regex.simpleMatch(requestedAliases[j].substring(1), requestedAliases[i]) |
| 241 | + || Metadata.ALL.equals(requestedAliases[j].substring(1))) { |
| 242 | + // aliases[i] is excluded by aliases[j] |
| 243 | + break; |
| 244 | + } |
| 245 | + } |
| 246 | + } |
| 247 | + if (j == requestedAliases.length) { |
| 248 | + // explicitly requested aliases[i] is not excluded by any subsequent "-" wildcard in expression |
| 249 | + if (false == returnedAliasNames.contains(requestedAliases[i])) { |
| 250 | + // aliases[i] is not in the result set |
| 251 | + missingAliases.add(requestedAliases[i]); |
| 252 | + } |
| 253 | + } |
| 254 | + } |
| 255 | + |
| 256 | + return missingAliases; |
| 257 | + } |
242 | 258 | }
|
0 commit comments