Skip to content

Commit 760e676

Browse files
Wlm create/update REST API bug fix (#16422)
* test changes Signed-off-by: Kaushal Kumar <[email protected]> * fix the create/update queryGroup REST APIs Signed-off-by: Kaushal Kumar <[email protected]> * undo gradle change Signed-off-by: Kaushal Kumar <[email protected]> * add PR link in CHANGELOG Signed-off-by: Kaushal Kumar <[email protected]> * fix javadoc issues Signed-off-by: Kaushal Kumar <[email protected]> * remove redundant name param Signed-off-by: Kaushal Kumar <[email protected]> * Update CHANGELOG.md Signed-off-by: Ankit Jain <[email protected]> * fix action name in transport class for update query group Signed-off-by: Kaushal Kumar <[email protected]> --------- Signed-off-by: Kaushal Kumar <[email protected]> Signed-off-by: Ankit Jain <[email protected]> Co-authored-by: Ankit Jain <[email protected]>
1 parent 6891267 commit 760e676

File tree

5 files changed

+96
-18
lines changed

5 files changed

+96
-18
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
9393
- Fix array hashCode calculation in ResyncReplicationRequest ([#16378](https://github.com/opensearch-project/OpenSearch/pull/16378))
9494
- Fix missing fields in task index mapping to ensure proper task result storage ([#16201](https://github.com/opensearch-project/OpenSearch/pull/16201))
9595
- Fix typo super->sb in method toString() of RemoteStoreNodeAttribute ([#15362](https://github.com/opensearch-project/OpenSearch/pull/15362))
96+
- [Workload Management] Fixing Create/Update QueryGroup TransportActions to execute from non-cluster manager nodes ([16422](https://github.com/opensearch-project/OpenSearch/pull/16422))
9697

9798
### Security
9899

plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/action/CreateQueryGroupRequest.java

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

99
package org.opensearch.plugin.wlm.action;
1010

11-
import org.opensearch.action.ActionRequest;
1211
import org.opensearch.action.ActionRequestValidationException;
12+
import org.opensearch.action.support.clustermanager.ClusterManagerNodeRequest;
1313
import org.opensearch.cluster.metadata.QueryGroup;
1414
import org.opensearch.common.UUIDs;
1515
import org.opensearch.core.common.io.stream.StreamInput;
@@ -33,7 +33,7 @@
3333
*
3434
* @opensearch.experimental
3535
*/
36-
public class CreateQueryGroupRequest extends ActionRequest {
36+
public class CreateQueryGroupRequest extends ClusterManagerNodeRequest<CreateQueryGroupRequest> {
3737
private final QueryGroup queryGroup;
3838

3939
/**

plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/action/TransportCreateQueryGroupAction.java

Lines changed: 46 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,43 +9,82 @@
99
package org.opensearch.plugin.wlm.action;
1010

1111
import org.opensearch.action.support.ActionFilters;
12-
import org.opensearch.action.support.HandledTransportAction;
12+
import org.opensearch.action.support.clustermanager.TransportClusterManagerNodeAction;
13+
import org.opensearch.cluster.ClusterState;
14+
import org.opensearch.cluster.block.ClusterBlockException;
15+
import org.opensearch.cluster.block.ClusterBlockLevel;
16+
import org.opensearch.cluster.metadata.IndexNameExpressionResolver;
1317
import org.opensearch.common.inject.Inject;
1418
import org.opensearch.core.action.ActionListener;
19+
import org.opensearch.core.common.io.stream.StreamInput;
1520
import org.opensearch.plugin.wlm.service.QueryGroupPersistenceService;
16-
import org.opensearch.tasks.Task;
21+
import org.opensearch.threadpool.ThreadPool;
1722
import org.opensearch.transport.TransportService;
1823

24+
import java.io.IOException;
25+
26+
import static org.opensearch.threadpool.ThreadPool.Names.SAME;
27+
1928
/**
2029
* Transport action to create QueryGroup
2130
*
2231
* @opensearch.experimental
2332
*/
24-
public class TransportCreateQueryGroupAction extends HandledTransportAction<CreateQueryGroupRequest, CreateQueryGroupResponse> {
33+
public class TransportCreateQueryGroupAction extends TransportClusterManagerNodeAction<CreateQueryGroupRequest, CreateQueryGroupResponse> {
2534

2635
private final QueryGroupPersistenceService queryGroupPersistenceService;
2736

2837
/**
2938
* Constructor for TransportCreateQueryGroupAction
3039
*
31-
* @param actionName - action name
40+
* @param threadPool - {@link ThreadPool} object
3241
* @param transportService - a {@link TransportService} object
3342
* @param actionFilters - a {@link ActionFilters} object
43+
* @param indexNameExpressionResolver - {@link IndexNameExpressionResolver} object
3444
* @param queryGroupPersistenceService - a {@link QueryGroupPersistenceService} object
3545
*/
3646
@Inject
3747
public TransportCreateQueryGroupAction(
38-
String actionName,
48+
ThreadPool threadPool,
3949
TransportService transportService,
4050
ActionFilters actionFilters,
51+
IndexNameExpressionResolver indexNameExpressionResolver,
4152
QueryGroupPersistenceService queryGroupPersistenceService
4253
) {
43-
super(CreateQueryGroupAction.NAME, transportService, actionFilters, CreateQueryGroupRequest::new);
54+
super(
55+
CreateQueryGroupAction.NAME,
56+
transportService,
57+
queryGroupPersistenceService.getClusterService(),
58+
threadPool,
59+
actionFilters,
60+
CreateQueryGroupRequest::new,
61+
indexNameExpressionResolver
62+
);
4463
this.queryGroupPersistenceService = queryGroupPersistenceService;
4564
}
4665

4766
@Override
48-
protected void doExecute(Task task, CreateQueryGroupRequest request, ActionListener<CreateQueryGroupResponse> listener) {
67+
protected void clusterManagerOperation(
68+
CreateQueryGroupRequest request,
69+
ClusterState clusterState,
70+
ActionListener<CreateQueryGroupResponse> listener
71+
) {
4972
queryGroupPersistenceService.persistInClusterStateMetadata(request.getQueryGroup(), listener);
5073
}
74+
75+
@Override
76+
protected String executor() {
77+
return SAME;
78+
}
79+
80+
@Override
81+
protected CreateQueryGroupResponse read(StreamInput in) throws IOException {
82+
return new CreateQueryGroupResponse(in);
83+
}
84+
85+
@Override
86+
protected ClusterBlockException checkBlock(CreateQueryGroupRequest request, ClusterState state) {
87+
return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE);
88+
}
89+
5190
}

plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/action/TransportUpdateQueryGroupAction.java

Lines changed: 45 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,43 +9,81 @@
99
package org.opensearch.plugin.wlm.action;
1010

1111
import org.opensearch.action.support.ActionFilters;
12-
import org.opensearch.action.support.HandledTransportAction;
12+
import org.opensearch.action.support.clustermanager.TransportClusterManagerNodeAction;
13+
import org.opensearch.cluster.ClusterState;
14+
import org.opensearch.cluster.block.ClusterBlockException;
15+
import org.opensearch.cluster.block.ClusterBlockLevel;
16+
import org.opensearch.cluster.metadata.IndexNameExpressionResolver;
1317
import org.opensearch.common.inject.Inject;
1418
import org.opensearch.core.action.ActionListener;
19+
import org.opensearch.core.common.io.stream.StreamInput;
1520
import org.opensearch.plugin.wlm.service.QueryGroupPersistenceService;
16-
import org.opensearch.tasks.Task;
21+
import org.opensearch.threadpool.ThreadPool;
1722
import org.opensearch.transport.TransportService;
1823

24+
import java.io.IOException;
25+
26+
import static org.opensearch.threadpool.ThreadPool.Names.SAME;
27+
1928
/**
2029
* Transport action to update QueryGroup
2130
*
2231
* @opensearch.experimental
2332
*/
24-
public class TransportUpdateQueryGroupAction extends HandledTransportAction<UpdateQueryGroupRequest, UpdateQueryGroupResponse> {
33+
public class TransportUpdateQueryGroupAction extends TransportClusterManagerNodeAction<UpdateQueryGroupRequest, UpdateQueryGroupResponse> {
2534

2635
private final QueryGroupPersistenceService queryGroupPersistenceService;
2736

2837
/**
2938
* Constructor for TransportUpdateQueryGroupAction
3039
*
31-
* @param actionName - action name
40+
* @param threadPool - {@link ThreadPool} object
3241
* @param transportService - a {@link TransportService} object
3342
* @param actionFilters - a {@link ActionFilters} object
43+
* @param indexNameExpressionResolver - {@link IndexNameExpressionResolver} object
3444
* @param queryGroupPersistenceService - a {@link QueryGroupPersistenceService} object
3545
*/
3646
@Inject
3747
public TransportUpdateQueryGroupAction(
38-
String actionName,
48+
ThreadPool threadPool,
3949
TransportService transportService,
4050
ActionFilters actionFilters,
51+
IndexNameExpressionResolver indexNameExpressionResolver,
4152
QueryGroupPersistenceService queryGroupPersistenceService
4253
) {
43-
super(UpdateQueryGroupAction.NAME, transportService, actionFilters, UpdateQueryGroupRequest::new);
54+
super(
55+
UpdateQueryGroupAction.NAME,
56+
transportService,
57+
queryGroupPersistenceService.getClusterService(),
58+
threadPool,
59+
actionFilters,
60+
UpdateQueryGroupRequest::new,
61+
indexNameExpressionResolver
62+
);
4463
this.queryGroupPersistenceService = queryGroupPersistenceService;
4564
}
4665

4766
@Override
48-
protected void doExecute(Task task, UpdateQueryGroupRequest request, ActionListener<UpdateQueryGroupResponse> listener) {
67+
protected void clusterManagerOperation(
68+
UpdateQueryGroupRequest request,
69+
ClusterState clusterState,
70+
ActionListener<UpdateQueryGroupResponse> listener
71+
) {
4972
queryGroupPersistenceService.updateInClusterStateMetadata(request, listener);
5073
}
74+
75+
@Override
76+
protected String executor() {
77+
return SAME;
78+
}
79+
80+
@Override
81+
protected UpdateQueryGroupResponse read(StreamInput in) throws IOException {
82+
return new UpdateQueryGroupResponse(in);
83+
}
84+
85+
@Override
86+
protected ClusterBlockException checkBlock(UpdateQueryGroupRequest request, ClusterState state) {
87+
return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_WRITE);
88+
}
5189
}

plugins/workload-management/src/main/java/org/opensearch/plugin/wlm/action/UpdateQueryGroupRequest.java

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

99
package org.opensearch.plugin.wlm.action;
1010

11-
import org.opensearch.action.ActionRequest;
1211
import org.opensearch.action.ActionRequestValidationException;
12+
import org.opensearch.action.support.clustermanager.ClusterManagerNodeRequest;
1313
import org.opensearch.cluster.metadata.QueryGroup;
1414
import org.opensearch.core.common.io.stream.StreamInput;
1515
import org.opensearch.core.common.io.stream.StreamOutput;
@@ -23,7 +23,7 @@
2323
*
2424
* @opensearch.experimental
2525
*/
26-
public class UpdateQueryGroupRequest extends ActionRequest {
26+
public class UpdateQueryGroupRequest extends ClusterManagerNodeRequest<UpdateQueryGroupRequest> {
2727
private final String name;
2828
private final MutableQueryGroupFragment mutableQueryGroupFragment;
2929

0 commit comments

Comments
 (0)