|
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