Skip to content

Commit 3b2c69a

Browse files
Avoid extra allocations in RestGetAliasesAction
When no explicit aliases are provided in the call there is no need to collect the index names or aliases into HashSets if they won't be used. Also fixed where the index name was being added for each loop of the alias list.
1 parent b563145 commit 3b2c69a

File tree

2 files changed

+32
-17
lines changed

2 files changed

+32
-17
lines changed

server/src/main/java/org/elasticsearch/rest/action/admin/indices/RestGetAliasesAction.java

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -76,27 +76,50 @@ public String getName() {
7676
}
7777

7878
static RestResponse buildRestResponse(
79-
boolean aliasesExplicitlyRequested,
8079
String[] requestedAliases,
8180
Map<String, List<AliasMetadata>> responseAliasMap,
8281
Map<String, List<DataStreamAlias>> dataStreamAliases,
8382
XContentBuilder builder
8483
) throws Exception {
8584
final Set<String> indicesToDisplay = new HashSet<>();
8685
final Set<String> returnedAliasNames = new HashSet<>();
87-
for (final Map.Entry<String, List<AliasMetadata>> cursor : responseAliasMap.entrySet()) {
88-
for (final AliasMetadata aliasMetadata : cursor.getValue()) {
86+
<<<<<<< Updated upstream
87+
final var aliasesExplicitlyRequested = requestedAliases.length > 0;
88+
89+
if (aliasesExplicitlyRequested) {
90+
for (final Map.Entry<String, List<AliasMetadata>> cursor : responseAliasMap.entrySet()) {
91+
// only display indices that have aliases
92+
indicesToDisplay.add(cursor.getKey());
93+
for (final AliasMetadata aliasMetadata : cursor.getValue()) {
94+
returnedAliasNames.add(aliasMetadata.alias());
95+
}
96+
=======
97+
if (aliasesExplicitlyRequested || requestedAliases.length > 0) {
98+
for (final Map.Entry<String, List<AliasMetadata>> cursor : responseAliasMap.entrySet()) {
8999
if (aliasesExplicitlyRequested) {
90100
// only display indices that have aliases
91101
indicesToDisplay.add(cursor.getKey());
92102
}
93-
returnedAliasNames.add(aliasMetadata.alias());
103+
if (requestedAliases.length > 0) {
104+
for (final AliasMetadata aliasMetadata : cursor.getValue()) {
105+
returnedAliasNames.add(aliasMetadata.alias());
106+
}
107+
}
94108
}
109+
110+
if (requestedAliases.length > 0) {
111+
dataStreamAliases.entrySet()
112+
.stream()
113+
.flatMap(entry -> entry.getValue().stream())
114+
.forEach(dataStreamAlias -> returnedAliasNames.add(dataStreamAlias.getName()));
115+
>>>>>>> Stashed changes
116+
}
117+
118+
dataStreamAliases.entrySet()
119+
.stream()
120+
.flatMap(entry -> entry.getValue().stream())
121+
.forEach(dataStreamAlias -> returnedAliasNames.add(dataStreamAlias.getName()));
95122
}
96-
dataStreamAliases.entrySet()
97-
.stream()
98-
.flatMap(entry -> entry.getValue().stream())
99-
.forEach(dataStreamAlias -> returnedAliasNames.add(dataStreamAlias.getName()));
100123

101124
// compute explicitly requested aliases that have are not returned in the result
102125
final SortedSet<String> missingAliases = new TreeSet<>();
@@ -206,7 +229,6 @@ public RestChannelConsumer prepareRequest(final RestRequest request, final NodeC
206229
// We can't remove this logic yet to support mixed clusters. We should be able to remove this logic here
207230
// in when 8.0 becomes the new version in the master branch.
208231

209-
final boolean namesProvided = request.hasParam("name");
210232
final String[] aliases = request.paramAsStringArrayOrEmptyIfAll("name");
211233
final var masterNodeTimeout = RestUtils.getMasterNodeTimeout(request);
212234
final GetAliasesRequest getAliasesRequest = new GetAliasesRequest(masterNodeTimeout, aliases);
@@ -234,7 +256,7 @@ public RestChannelConsumer prepareRequest(final RestRequest request, final NodeC
234256
.getAliases(getAliasesRequest, new RestBuilderListener<>(channel) {
235257
@Override
236258
public RestResponse buildResponse(GetAliasesResponse response, XContentBuilder builder) throws Exception {
237-
return buildRestResponse(namesProvided, aliases, response.getAliases(), response.getDataStreamAliases(), builder);
259+
return buildRestResponse(aliases, response.getAliases(), response.getDataStreamAliases(), builder);
238260
}
239261
});
240262
}

server/src/test/java/org/elasticsearch/rest/action/admin/indices/RestGetAliasesActionTests.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ public void testBareRequest() throws Exception {
4040
final AliasMetadata foobarAliasMetadata = AliasMetadata.builder("foobar").build();
4141
final AliasMetadata fooAliasMetadata = AliasMetadata.builder("foo").build();
4242
final RestResponse restResponse = RestGetAliasesAction.buildRestResponse(
43-
false,
4443
new String[0],
4544
Map.of("index", Arrays.asList(fooAliasMetadata, foobarAliasMetadata)),
4645
Map.of(),
@@ -54,7 +53,6 @@ public void testBareRequest() throws Exception {
5453
public void testSimpleAliasWildcardMatchingNothing() throws Exception {
5554
final XContentBuilder xContentBuilder = XContentFactory.contentBuilder(XContentType.JSON);
5655
final RestResponse restResponse = RestGetAliasesAction.buildRestResponse(
57-
true,
5856
new String[] { "baz*" },
5957
Map.of(),
6058
Map.of(),
@@ -69,7 +67,6 @@ public void testMultipleAliasWildcardsSomeMatching() throws Exception {
6967
final XContentBuilder xContentBuilder = XContentFactory.contentBuilder(XContentType.JSON);
7068
final AliasMetadata aliasMetadata = AliasMetadata.builder("foobar").build();
7169
final RestResponse restResponse = RestGetAliasesAction.buildRestResponse(
72-
true,
7370
new String[] { "baz*", "foobar*" },
7471
Map.of("index", List.of(aliasMetadata)),
7572
Map.of(),
@@ -83,7 +80,6 @@ public void testMultipleAliasWildcardsSomeMatching() throws Exception {
8380
public void testAliasWildcardsIncludeAndExcludeAll() throws Exception {
8481
final XContentBuilder xContentBuilder = XContentFactory.contentBuilder(XContentType.JSON);
8582
final RestResponse restResponse = RestGetAliasesAction.buildRestResponse(
86-
true,
8783
new String[] { "foob*", "-foo*" },
8884
Map.of(),
8985
Map.of(),
@@ -98,7 +94,6 @@ public void testAliasWildcardsIncludeAndExcludeSome() throws Exception {
9894
final XContentBuilder xContentBuilder = XContentFactory.contentBuilder(XContentType.JSON);
9995
final AliasMetadata aliasMetadata = AliasMetadata.builder("foo").build();
10096
final RestResponse restResponse = RestGetAliasesAction.buildRestResponse(
101-
true,
10297
new String[] { "foo*", "-foob*" },
10398
Map.of("index", List.of(aliasMetadata)),
10499
Map.of(),
@@ -120,7 +115,6 @@ public void testAliasWildcardsIncludeAndExcludeSomeAndExplicitMissing() throws E
120115
}
121116

122117
final RestResponse restResponse = RestGetAliasesAction.buildRestResponse(
123-
true,
124118
aliasPattern,
125119
Map.of("index", List.of(aliasMetadata)),
126120
Map.of(),
@@ -137,7 +131,6 @@ public void testAliasWildcardsIncludeAndExcludeSomeAndExplicitMissing() throws E
137131
public void testAliasWildcardsExcludeExplicitMissing() throws Exception {
138132
final XContentBuilder xContentBuilder = XContentFactory.contentBuilder(XContentType.JSON);
139133
final RestResponse restResponse = RestGetAliasesAction.buildRestResponse(
140-
true,
141134
new String[] { "foo", "foofoo", "-foo*" },
142135
Map.of(),
143136
Map.of(),

0 commit comments

Comments
 (0)