Skip to content

Commit 4266dbc

Browse files
committed
Introduced OptionalResolvedIndices class
Signed-off-by: Nils Bandener <nils.bandener@eliatra.com>
1 parent 017d721 commit 4266dbc

File tree

44 files changed

+1117
-276
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+1117
-276
lines changed

modules/lang-mustache/src/main/java/org/opensearch/script/mustache/TransportRenderSearchTemplateAction.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
package org.opensearch.script.mustache;
1010

11+
import org.opensearch.action.search.TransportSearchAction;
1112
import org.opensearch.action.support.ActionFilters;
1213
import org.opensearch.common.inject.Inject;
1314
import org.opensearch.core.xcontent.NamedXContentRegistry;
@@ -23,8 +24,17 @@ public TransportRenderSearchTemplateAction(
2324
ActionFilters actionFilters,
2425
ScriptService scriptService,
2526
NamedXContentRegistry xContentRegistry,
26-
NodeClient client
27+
NodeClient client,
28+
TransportSearchAction transportSearchAction
2729
) {
28-
super(RenderSearchTemplateAction.NAME, transportService, actionFilters, scriptService, xContentRegistry, client);
30+
super(
31+
RenderSearchTemplateAction.NAME,
32+
transportService,
33+
actionFilters,
34+
scriptService,
35+
xContentRegistry,
36+
client,
37+
transportSearchAction
38+
);
2939
}
3040
}

modules/lang-mustache/src/main/java/org/opensearch/script/mustache/TransportSearchTemplateAction.java

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,11 @@
3434

3535
import org.opensearch.action.search.SearchRequest;
3636
import org.opensearch.action.search.SearchResponse;
37+
import org.opensearch.action.search.TransportSearchAction;
3738
import org.opensearch.action.support.ActionFilters;
3839
import org.opensearch.action.support.HandledTransportAction;
40+
import org.opensearch.action.support.TransportIndicesResolvingAction;
41+
import org.opensearch.cluster.metadata.ResolvedIndices;
3942
import org.opensearch.common.inject.Inject;
4043
import org.opensearch.common.xcontent.LoggingDeprecationHandler;
4144
import org.opensearch.core.action.ActionListener;
@@ -57,26 +60,30 @@
5760
import java.io.IOException;
5861
import java.util.Collections;
5962

60-
public class TransportSearchTemplateAction extends HandledTransportAction<SearchTemplateRequest, SearchTemplateResponse> {
61-
63+
public class TransportSearchTemplateAction extends HandledTransportAction<SearchTemplateRequest, SearchTemplateResponse>
64+
implements
65+
TransportIndicesResolvingAction<SearchTemplateRequest> {
6266
private static final String TEMPLATE_LANG = MustacheScriptEngine.NAME;
6367

6468
protected final ScriptService scriptService;
6569
protected final NamedXContentRegistry xContentRegistry;
6670
protected final NodeClient client;
71+
private final TransportSearchAction transportSearchAction;
6772

6873
@Inject
6974
public TransportSearchTemplateAction(
7075
TransportService transportService,
7176
ActionFilters actionFilters,
7277
ScriptService scriptService,
7378
NamedXContentRegistry xContentRegistry,
74-
NodeClient client
79+
NodeClient client,
80+
TransportSearchAction transportSearchAction
7581
) {
7682
super(SearchTemplateAction.NAME, transportService, actionFilters, SearchTemplateRequest::new);
7783
this.scriptService = scriptService;
7884
this.xContentRegistry = xContentRegistry;
7985
this.client = client;
86+
this.transportSearchAction = transportSearchAction;
8087
}
8188

8289
public TransportSearchTemplateAction(
@@ -85,12 +92,14 @@ public TransportSearchTemplateAction(
8592
ActionFilters actionFilters,
8693
ScriptService scriptService,
8794
NamedXContentRegistry xContentRegistry,
88-
NodeClient client
95+
NodeClient client,
96+
TransportSearchAction transportSearchAction
8997
) {
9098
super(actionName, transportService, actionFilters, SearchTemplateRequest::new);
9199
this.scriptService = scriptService;
92100
this.xContentRegistry = xContentRegistry;
93101
this.client = client;
102+
this.transportSearchAction = transportSearchAction;
94103
}
95104

96105
@Override
@@ -180,4 +189,9 @@ private static void checkRestTotalHitsAsInt(SearchRequest searchRequest, SearchS
180189
}
181190
}
182191
}
192+
193+
@Override
194+
public ResolvedIndices resolveIndices(SearchTemplateRequest request) {
195+
return transportSearchAction.resolveIndices(request.getRequest());
196+
}
183197
}

modules/reindex/src/main/java/org/opensearch/index/reindex/TransportDeleteByQueryAction.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,11 @@
3232

3333
package org.opensearch.index.reindex;
3434

35+
import org.opensearch.action.search.TransportSearchAction;
3536
import org.opensearch.action.support.ActionFilters;
3637
import org.opensearch.action.support.HandledTransportAction;
38+
import org.opensearch.action.support.TransportIndicesResolvingAction;
39+
import org.opensearch.cluster.metadata.ResolvedIndices;
3740
import org.opensearch.cluster.service.ClusterService;
3841
import org.opensearch.common.inject.Inject;
3942
import org.opensearch.core.action.ActionListener;
@@ -45,12 +48,15 @@
4548
import org.opensearch.transport.client.Client;
4649
import org.opensearch.transport.client.ParentTaskAssigningClient;
4750

48-
public class TransportDeleteByQueryAction extends HandledTransportAction<DeleteByQueryRequest, BulkByScrollResponse> {
51+
public class TransportDeleteByQueryAction extends HandledTransportAction<DeleteByQueryRequest, BulkByScrollResponse>
52+
implements
53+
TransportIndicesResolvingAction<DeleteByQueryRequest> {
4954

5055
private final ThreadPool threadPool;
5156
private final Client client;
5257
private final ScriptService scriptService;
5358
private final ClusterService clusterService;
59+
private final TransportSearchAction transportSearchAction;
5460

5561
@Inject
5662
public TransportDeleteByQueryAction(
@@ -59,7 +65,8 @@ public TransportDeleteByQueryAction(
5965
Client client,
6066
TransportService transportService,
6167
ScriptService scriptService,
62-
ClusterService clusterService
68+
ClusterService clusterService,
69+
TransportSearchAction transportSearchAction
6370
) {
6471
super(
6572
DeleteByQueryAction.NAME,
@@ -71,6 +78,7 @@ public TransportDeleteByQueryAction(
7178
this.client = client;
7279
this.scriptService = scriptService;
7380
this.clusterService = clusterService;
81+
this.transportSearchAction = transportSearchAction;
7482
}
7583

7684
@Override
@@ -94,4 +102,9 @@ public void doExecute(Task task, DeleteByQueryRequest request, ActionListener<Bu
94102
}
95103
);
96104
}
105+
106+
@Override
107+
public ResolvedIndices resolveIndices(DeleteByQueryRequest request) {
108+
return transportSearchAction.resolveIndices(request.getSearchRequest());
109+
}
97110
}

modules/reindex/src/main/java/org/opensearch/index/reindex/TransportUpdateByQueryAction.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,12 @@
3434

3535
import org.apache.logging.log4j.Logger;
3636
import org.opensearch.action.index.IndexRequest;
37+
import org.opensearch.action.search.TransportSearchAction;
3738
import org.opensearch.action.support.ActionFilters;
3839
import org.opensearch.action.support.HandledTransportAction;
40+
import org.opensearch.action.support.TransportIndicesResolvingAction;
3941
import org.opensearch.cluster.ClusterState;
42+
import org.opensearch.cluster.metadata.ResolvedIndices;
4043
import org.opensearch.cluster.service.ClusterService;
4144
import org.opensearch.common.inject.Inject;
4245
import org.opensearch.core.action.ActionListener;
@@ -55,12 +58,15 @@
5558
import java.util.Map;
5659
import java.util.function.BiFunction;
5760

58-
public class TransportUpdateByQueryAction extends HandledTransportAction<UpdateByQueryRequest, BulkByScrollResponse> {
61+
public class TransportUpdateByQueryAction extends HandledTransportAction<UpdateByQueryRequest, BulkByScrollResponse>
62+
implements
63+
TransportIndicesResolvingAction<UpdateByQueryRequest> {
5964

6065
private final ThreadPool threadPool;
6166
private final Client client;
6267
private final ScriptService scriptService;
6368
private final ClusterService clusterService;
69+
private final TransportSearchAction transportSearchAction;
6470

6571
@Inject
6672
public TransportUpdateByQueryAction(
@@ -69,7 +75,8 @@ public TransportUpdateByQueryAction(
6975
Client client,
7076
TransportService transportService,
7177
ScriptService scriptService,
72-
ClusterService clusterService
78+
ClusterService clusterService,
79+
TransportSearchAction transportSearchAction
7380
) {
7481
super(
7582
UpdateByQueryAction.NAME,
@@ -81,6 +88,7 @@ public TransportUpdateByQueryAction(
8188
this.client = client;
8289
this.scriptService = scriptService;
8390
this.clusterService = clusterService;
91+
this.transportSearchAction = transportSearchAction;
8492
}
8593

8694
@Override
@@ -106,6 +114,11 @@ protected void doExecute(Task task, UpdateByQueryRequest request, ActionListener
106114
);
107115
}
108116

117+
@Override
118+
public ResolvedIndices resolveIndices(UpdateByQueryRequest request) {
119+
return transportSearchAction.resolveIndices(request.getSearchRequest());
120+
}
121+
109122
/**
110123
* Simple implementation of update-by-query using scrolling and bulk.
111124
*/

modules/reindex/src/test/java/org/opensearch/index/reindex/UpdateByQueryWithScriptTests.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ protected TransportUpdateByQueryAction.AsyncIndexBySearchAction action(ScriptSer
7979
null,
8080
transportService,
8181
scriptService,
82+
null,
8283
null
8384
);
8485
return new TransportUpdateByQueryAction.AsyncIndexBySearchAction(

server/src/main/java/org/opensearch/action/admin/cluster/shards/TransportClusterSearchShardsAction.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,13 @@
3333
package org.opensearch.action.admin.cluster.shards;
3434

3535
import org.opensearch.action.support.ActionFilters;
36+
import org.opensearch.action.support.TransportIndicesResolvingAction;
3637
import org.opensearch.action.support.clustermanager.TransportClusterManagerNodeReadAction;
3738
import org.opensearch.cluster.ClusterState;
3839
import org.opensearch.cluster.block.ClusterBlockException;
3940
import org.opensearch.cluster.block.ClusterBlockLevel;
4041
import org.opensearch.cluster.metadata.IndexNameExpressionResolver;
42+
import org.opensearch.cluster.metadata.ResolvedIndices;
4143
import org.opensearch.cluster.node.DiscoveryNode;
4244
import org.opensearch.cluster.routing.GroupShardsIterator;
4345
import org.opensearch.cluster.routing.ShardIterator;
@@ -65,7 +67,7 @@
6567
*/
6668
public class TransportClusterSearchShardsAction extends TransportClusterManagerNodeReadAction<
6769
ClusterSearchShardsRequest,
68-
ClusterSearchShardsResponse> {
70+
ClusterSearchShardsResponse> implements TransportIndicesResolvingAction<ClusterSearchShardsRequest> {
6971

7072
private final IndicesService indicesService;
7173

@@ -100,7 +102,7 @@ protected String executor() {
100102
@Override
101103
protected ClusterBlockException checkBlock(ClusterSearchShardsRequest request, ClusterState state) {
102104
return state.blocks()
103-
.indicesBlockedException(ClusterBlockLevel.METADATA_READ, indexNameExpressionResolver.concreteIndexNames(state, request));
105+
.indicesBlockedException(ClusterBlockLevel.METADATA_READ, resolveIndices(state, request).namesOfConcreteIndicesAsArray());
104106
}
105107

106108
@Override
@@ -115,7 +117,7 @@ protected void clusterManagerOperation(
115117
final ActionListener<ClusterSearchShardsResponse> listener
116118
) {
117119
ClusterState clusterState = clusterService.state();
118-
String[] concreteIndices = indexNameExpressionResolver.concreteIndexNames(clusterState, request);
120+
String[] concreteIndices = resolveIndices(clusterState, request).namesOfConcreteIndicesAsArray();
119121
Map<String, Set<String>> routingMap = indexNameExpressionResolver.resolveSearchRouting(state, request.routing(), request.indices());
120122
Map<String, AliasFilter> indicesAndFilters = new HashMap<>();
121123
Set<String> indicesAndAliases = indexNameExpressionResolver.resolveExpressions(clusterState, request.indices());
@@ -155,4 +157,13 @@ protected void clusterManagerOperation(
155157
}
156158
listener.onResponse(new ClusterSearchShardsResponse(groupResponses, nodes, indicesAndFilters));
157159
}
160+
161+
@Override
162+
public ResolvedIndices resolveIndices(ClusterSearchShardsRequest request) {
163+
return ResolvedIndices.of(resolveIndices(clusterService.state(), request));
164+
}
165+
166+
private ResolvedIndices.Local.Concrete resolveIndices(ClusterState clusterState, ClusterSearchShardsRequest request) {
167+
return this.indexNameExpressionResolver.concreteResolvedIndices(clusterState, request);
168+
}
158169
}

server/src/main/java/org/opensearch/action/admin/indices/alias/TransportIndicesAliasesAction.java

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.apache.logging.log4j.LogManager;
3636
import org.apache.logging.log4j.Logger;
3737
import org.opensearch.action.RequestValidators;
38+
import org.opensearch.action.admin.indices.delete.DeleteIndexAction;
3839
import org.opensearch.action.support.ActionFilters;
3940
import org.opensearch.action.support.TransportIndicesResolvingAction;
4041
import org.opensearch.action.support.clustermanager.AcknowledgedResponse;
@@ -169,6 +170,7 @@ public void onFailure(Exception t) {
169170
public ResolvedIndices resolveIndices(IndicesAliasesRequest request) {
170171
try {
171172
Set<String> indices = new HashSet<>();
173+
Set<String> indicesToBeDeleted = new HashSet<>();
172174

173175
for (AliasAction aliasAction : resolvedAliasActions(request, clusterService.state(), false)) {
174176
if (aliasAction instanceof AliasAction.Add addAliasAction) {
@@ -178,12 +180,15 @@ public ResolvedIndices resolveIndices(IndicesAliasesRequest request) {
178180
indices.add(removeAliasAction.getIndex());
179181
indices.add(removeAliasAction.getAlias());
180182
} else if (aliasAction instanceof AliasAction.RemoveIndex removeIndexAction) {
181-
// TODO special action
182-
indices.add(removeIndexAction.getIndex());
183+
indicesToBeDeleted.add(removeIndexAction.getIndex());
183184
}
184185
}
185186

186-
return ResolvedIndices.of(indices);
187+
ResolvedIndices result = ResolvedIndices.of(indices);
188+
if (!indicesToBeDeleted.isEmpty()) {
189+
result = result.withLocalSubActions(DeleteIndexAction.INSTANCE, ResolvedIndices.Local.of(indicesToBeDeleted));
190+
}
191+
return result;
187192
} catch (RuntimeException e) {
188193
throw e;
189194
} catch (Exception e) {
@@ -192,18 +197,24 @@ public ResolvedIndices resolveIndices(IndicesAliasesRequest request) {
192197
}
193198
}
194199

200+
/**
201+
* Resolves the actions from the IndicesAliasesRequest into concrete AliasAction instances.
202+
* This method has two modes: validate=true makes validation of the parameters and can potentially cause
203+
* exceptions to be thrown upon validation errors. validate=false skips any code that could throw exceptions. This
204+
* is meant for the resolveIndices() method.
205+
*/
195206
private List<AliasAction> resolvedAliasActions(IndicesAliasesRequest request, ClusterState state, boolean validate) throws Exception {
196207
List<AliasAction> result = new ArrayList<>();
197208
// Resolve all the AliasActions into AliasAction instances and gather all the aliases
198209
for (IndicesAliasesRequest.AliasActions action : request.aliasActions()) {
199-
final Index[] concreteIndices = indexNameExpressionResolver.concreteIndices(
210+
ResolvedIndices.Local.Concrete concreteIndices = indexNameExpressionResolver.concreteResolvedIndices(
200211
state,
201212
request.indicesOptions(),
202213
false,
203214
action.indices()
204215
);
205216
if (validate) {
206-
for (Index concreteIndex : concreteIndices) {
217+
for (Index concreteIndex : concreteIndices.concreteIndices()) {
207218
IndexAbstraction indexAbstraction = state.metadata().getIndicesLookup().get(concreteIndex.getName());
208219
assert indexAbstraction != null : "invalid cluster metadata. index [" + concreteIndex.getName() + "] was not found";
209220
if (indexAbstraction.getParentDataStream() != null) {
@@ -216,19 +227,23 @@ private List<AliasAction> resolvedAliasActions(IndicesAliasesRequest request, Cl
216227
);
217228
}
218229
}
219-
final Optional<Exception> maybeException = requestValidators.validateRequest(request, state, concreteIndices);
230+
final Optional<Exception> maybeException = requestValidators.validateRequest(
231+
request,
232+
state,
233+
concreteIndices.concreteIndicesAsArray()
234+
);
220235
if (maybeException.isPresent()) {
221236
throw maybeException.get();
222237
}
223238
}
224239

225-
for (final Index index : concreteIndices) {
240+
for (String index : concreteIndices.namesOfIndices(state)) {
226241
switch (action.actionType()) {
227242
case ADD:
228-
for (String alias : concreteAliases(action, state.metadata(), index.getName())) {
243+
for (String alias : concreteAliases(action, state.metadata(), index)) {
229244
result.add(
230245
new AliasAction.Add(
231-
index.getName(),
246+
index,
232247
alias,
233248
action.filter(),
234249
action.indexRouting(),
@@ -240,12 +255,12 @@ private List<AliasAction> resolvedAliasActions(IndicesAliasesRequest request, Cl
240255
}
241256
break;
242257
case REMOVE:
243-
for (String alias : concreteAliases(action, state.metadata(), index.getName())) {
244-
result.add(new AliasAction.Remove(index.getName(), alias, action.mustExist()));
258+
for (String alias : concreteAliases(action, state.metadata(), index)) {
259+
result.add(new AliasAction.Remove(index, alias, action.mustExist()));
245260
}
246261
break;
247262
case REMOVE_INDEX:
248-
result.add(new AliasAction.RemoveIndex(index.getName()));
263+
result.add(new AliasAction.RemoveIndex(index));
249264
break;
250265
default:
251266
throw new IllegalArgumentException("Unsupported action [" + action.actionType() + "]");

0 commit comments

Comments
 (0)