private void handleRequest( StreamInput stream, long requestId, int messageLengthBytes, LocalTransport sourceTransport, Version version) throws Exception { stream = new NamedWriteableAwareStreamInput(stream, namedWriteableRegistry); final String action = stream.readString(); transportServiceAdapter.onRequestReceived(requestId, action); inFlightRequestsBreaker() .addEstimateBytesAndMaybeBreak(messageLengthBytes, "<transport_request>"); final LocalTransportChannel transportChannel = new LocalTransportChannel( this, transportServiceAdapter, sourceTransport, action, requestId, version, messageLengthBytes); try { final RequestHandlerRegistry reg = transportServiceAdapter.getRequestHandler(action); if (reg == null) { throw new ActionNotFoundTransportException("Action [" + action + "] not found"); } final TransportRequest request = reg.newRequest(); request.remoteAddress(sourceTransport.boundAddress.publishAddress()); request.readFrom(stream); if (ThreadPool.Names.SAME.equals(reg.getExecutor())) { //noinspection unchecked reg.processMessageReceived(request, transportChannel); } else { threadPool .executor(reg.getExecutor()) .execute( new AbstractRunnable() { @Override protected void doRun() throws Exception { //noinspection unchecked reg.processMessageReceived(request, transportChannel); } @Override public boolean isForceExecution() { return reg.isForceExecution(); } @Override public void onFailure(Throwable e) { if (lifecycleState() == Lifecycle.State.STARTED) { // we can only send a response transport is started.... try { transportChannel.sendResponse(e); } catch (Throwable e1) { logger.warn( "Failed to send error message back to client for action [{}]", e1, action); logger.warn("Actual Exception", e); } } } }); } } catch (Throwable e) { try { transportChannel.sendResponse(e); } catch (Throwable e1) { logger.warn("Failed to send error message back to client for action [{}]", e, action); logger.warn("Actual Exception", e1); } } }