|
|
@@ -13,12 +13,16 @@ import org.apache.logging.log4j.LogManager;
|
|
|
import org.apache.logging.log4j.Logger;
|
|
|
import org.elasticsearch.action.ActionListener;
|
|
|
import org.elasticsearch.action.support.ActionFilters;
|
|
|
-import org.elasticsearch.action.support.master.info.TransportClusterInfoAction;
|
|
|
-import org.elasticsearch.cluster.ClusterState;
|
|
|
+import org.elasticsearch.action.support.ChannelActionListener;
|
|
|
+import org.elasticsearch.action.support.local.TransportLocalProjectMetadataAction;
|
|
|
+import org.elasticsearch.cluster.ProjectState;
|
|
|
+import org.elasticsearch.cluster.block.ClusterBlockException;
|
|
|
+import org.elasticsearch.cluster.block.ClusterBlockLevel;
|
|
|
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
|
|
|
import org.elasticsearch.cluster.metadata.MappingMetadata;
|
|
|
import org.elasticsearch.cluster.project.ProjectResolver;
|
|
|
import org.elasticsearch.cluster.service.ClusterService;
|
|
|
+import org.elasticsearch.core.UpdateForV10;
|
|
|
import org.elasticsearch.indices.IndicesService;
|
|
|
import org.elasticsearch.injection.guice.Inject;
|
|
|
import org.elasticsearch.tasks.CancellableTask;
|
|
|
@@ -28,12 +32,19 @@ import org.elasticsearch.transport.TransportService;
|
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
-public class TransportGetMappingsAction extends TransportClusterInfoAction<GetMappingsRequest, GetMappingsResponse> {
|
|
|
+public class TransportGetMappingsAction extends TransportLocalProjectMetadataAction<GetMappingsRequest, GetMappingsResponse> {
|
|
|
|
|
|
private static final Logger logger = LogManager.getLogger(TransportGetMappingsAction.class);
|
|
|
|
|
|
private final IndicesService indicesService;
|
|
|
+ private final IndexNameExpressionResolver indexNameExpressionResolver;
|
|
|
|
|
|
+ /**
|
|
|
+ * NB prior to 9.0 this was a TransportMasterNodeReadAction so for BwC it must be registered with the TransportService until
|
|
|
+ * we no longer need to support calling this action remotely.
|
|
|
+ */
|
|
|
+ @UpdateForV10(owner = UpdateForV10.Owner.DATA_MANAGEMENT)
|
|
|
+ @SuppressWarnings("this-escape")
|
|
|
@Inject
|
|
|
public TransportGetMappingsAction(
|
|
|
TransportService transportService,
|
|
|
@@ -46,28 +57,46 @@ public class TransportGetMappingsAction extends TransportClusterInfoAction<GetMa
|
|
|
) {
|
|
|
super(
|
|
|
GetMappingsAction.NAME,
|
|
|
- transportService,
|
|
|
- clusterService,
|
|
|
- threadPool,
|
|
|
actionFilters,
|
|
|
- GetMappingsRequest::new,
|
|
|
- indexNameExpressionResolver,
|
|
|
- GetMappingsResponse::new,
|
|
|
+ transportService.getTaskManager(),
|
|
|
+ clusterService,
|
|
|
+ threadPool.executor(ThreadPool.Names.MANAGEMENT),
|
|
|
projectResolver
|
|
|
);
|
|
|
this.indicesService = indicesService;
|
|
|
+ this.indexNameExpressionResolver = indexNameExpressionResolver;
|
|
|
+
|
|
|
+ transportService.registerRequestHandler(
|
|
|
+ actionName,
|
|
|
+ executor,
|
|
|
+ false,
|
|
|
+ true,
|
|
|
+ GetMappingsRequest::new,
|
|
|
+ (request, channel, task) -> executeDirect(task, request, new ChannelActionListener<>(channel))
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected ClusterBlockException checkBlock(GetMappingsRequest request, ProjectState state) {
|
|
|
+ return state.blocks()
|
|
|
+ .indicesBlockedException(
|
|
|
+ state.projectId(),
|
|
|
+ ClusterBlockLevel.METADATA_READ,
|
|
|
+ indexNameExpressionResolver.concreteIndexNames(state.metadata(), request)
|
|
|
+ );
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- protected void doMasterOperation(
|
|
|
+ protected void localClusterStateOperation(
|
|
|
Task task,
|
|
|
final GetMappingsRequest request,
|
|
|
- String[] concreteIndices,
|
|
|
- final ClusterState state,
|
|
|
+ final ProjectState state,
|
|
|
final ActionListener<GetMappingsResponse> listener
|
|
|
) {
|
|
|
- logger.trace("serving getMapping request based on version {}", state.version());
|
|
|
- final Map<String, MappingMetadata> mappings = projectResolver.getProjectMetadata(state)
|
|
|
+ ((CancellableTask) task).ensureNotCancelled();
|
|
|
+ logger.trace("serving getMapping request based on version {}", state.cluster().version());
|
|
|
+ String[] concreteIndices = indexNameExpressionResolver.concreteIndexNames(state.metadata(), request);
|
|
|
+ final Map<String, MappingMetadata> mappings = state.metadata()
|
|
|
.findMappings(concreteIndices, indicesService.getFieldFilter(), () -> checkCancellation(task));
|
|
|
listener.onResponse(new GetMappingsResponse(mappings));
|
|
|
}
|