org.elasticsearch.action.admin.indices.segments.TransportIndicesSegmentsAction Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of elasticsearch Show documentation
Show all versions of elasticsearch Show documentation
Elasticsearch subproject :server
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0 and the Server Side Public License, v 1; you may not use this file except
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/
package org.elasticsearch.action.admin.indices.segments;
import org.elasticsearch.action.ActionListener;
import org.elasticsearch.action.support.ActionFilters;
import org.elasticsearch.action.support.DefaultShardOperationFailedException;
import org.elasticsearch.action.support.broadcast.node.TransportBroadcastByNodeAction;
import org.elasticsearch.cluster.ClusterState;
import org.elasticsearch.cluster.block.ClusterBlockException;
import org.elasticsearch.cluster.block.ClusterBlockLevel;
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
import org.elasticsearch.cluster.routing.ShardRouting;
import org.elasticsearch.cluster.routing.ShardsIterator;
import org.elasticsearch.cluster.service.ClusterService;
import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.io.stream.StreamInput;
import org.elasticsearch.index.IndexService;
import org.elasticsearch.index.shard.IndexShard;
import org.elasticsearch.indices.IndicesService;
import org.elasticsearch.tasks.CancellableTask;
import org.elasticsearch.tasks.Task;
import org.elasticsearch.threadpool.ThreadPool;
import org.elasticsearch.transport.TransportService;
import java.io.IOException;
import java.util.List;
public class TransportIndicesSegmentsAction extends TransportBroadcastByNodeAction<
IndicesSegmentsRequest,
IndicesSegmentResponse,
ShardSegments> {
private final IndicesService indicesService;
@Inject
public TransportIndicesSegmentsAction(
ClusterService clusterService,
TransportService transportService,
IndicesService indicesService,
ActionFilters actionFilters,
IndexNameExpressionResolver indexNameExpressionResolver
) {
super(
IndicesSegmentsAction.NAME,
clusterService,
transportService,
actionFilters,
indexNameExpressionResolver,
IndicesSegmentsRequest::new,
ThreadPool.Names.MANAGEMENT
);
this.indicesService = indicesService;
}
/**
* Segments goes across *all* active shards.
*/
@Override
protected ShardsIterator shards(ClusterState clusterState, IndicesSegmentsRequest request, String[] concreteIndices) {
return clusterState.routingTable().allShards(concreteIndices);
}
@Override
protected ClusterBlockException checkGlobalBlock(ClusterState state, IndicesSegmentsRequest request) {
return state.blocks().globalBlockedException(ClusterBlockLevel.METADATA_READ);
}
@Override
protected ClusterBlockException checkRequestBlock(ClusterState state, IndicesSegmentsRequest countRequest, String[] concreteIndices) {
return state.blocks().indicesBlockedException(ClusterBlockLevel.METADATA_READ, concreteIndices);
}
@Override
protected ShardSegments readShardResult(StreamInput in) throws IOException {
return new ShardSegments(in);
}
@Override
protected IndicesSegmentResponse newResponse(
IndicesSegmentsRequest request,
int totalShards,
int successfulShards,
int failedShards,
List results,
List shardFailures,
ClusterState clusterState
) {
return new IndicesSegmentResponse(
results.toArray(new ShardSegments[results.size()]),
totalShards,
successfulShards,
failedShards,
shardFailures
);
}
@Override
protected IndicesSegmentsRequest readRequestFrom(StreamInput in) throws IOException {
return new IndicesSegmentsRequest(in);
}
@Override
protected void shardOperation(
IndicesSegmentsRequest request,
ShardRouting shardRouting,
Task task,
ActionListener listener
) {
ActionListener.completeWith(listener, () -> {
assert task instanceof CancellableTask;
IndexService indexService = indicesService.indexServiceSafe(shardRouting.index());
IndexShard indexShard = indexService.getShard(shardRouting.id());
return new ShardSegments(indexShard.routingEntry(), indexShard.segments());
});
}
}