org.elasticsearch.action.support.HandledTransportAction 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.support;
import org.elasticsearch.action.ActionRequest;
import org.elasticsearch.action.ActionResponse;
import org.elasticsearch.common.io.stream.Writeable;
import org.elasticsearch.tasks.Task;
import org.elasticsearch.threadpool.ThreadPool;
import org.elasticsearch.transport.TransportChannel;
import org.elasticsearch.transport.TransportRequestHandler;
import org.elasticsearch.transport.TransportService;
/**
* A TransportAction that self registers a handler into the transport service
*/
public abstract class HandledTransportAction extends TransportAction<
Request,
Response> {
protected HandledTransportAction(
String actionName,
TransportService transportService,
ActionFilters actionFilters,
Writeable.Reader requestReader
) {
this(actionName, true, transportService, actionFilters, requestReader);
}
protected HandledTransportAction(
String actionName,
TransportService transportService,
ActionFilters actionFilters,
Writeable.Reader requestReader,
String executor
) {
this(actionName, true, transportService, actionFilters, requestReader, executor);
}
protected HandledTransportAction(
String actionName,
boolean canTripCircuitBreaker,
TransportService transportService,
ActionFilters actionFilters,
Writeable.Reader requestReader
) {
this(actionName, canTripCircuitBreaker, transportService, actionFilters, requestReader, ThreadPool.Names.SAME);
}
protected HandledTransportAction(
String actionName,
boolean canTripCircuitBreaker,
TransportService transportService,
ActionFilters actionFilters,
Writeable.Reader requestReader,
String executor
) {
super(actionName, actionFilters, transportService.getTaskManager());
transportService.registerRequestHandler(actionName, executor, false, canTripCircuitBreaker, requestReader, new TransportHandler());
}
class TransportHandler implements TransportRequestHandler {
@Override
public final void messageReceived(final Request request, final TransportChannel channel, Task task) {
// We already got the task created on the network layer - no need to create it again on the transport layer
execute(task, request, new ChannelActionListener<>(channel, actionName, request));
}
}
}