From 63d30a0f4882ad60a399481e168759b7d293c33e Mon Sep 17 00:00:00 2001 From: Dmitry Volodin Date: Tue, 30 Jan 2018 12:09:36 +0300 Subject: [PATCH] THRIFT-4429: Make TThreadPoolServer.executorService_ available in inherited classes and refactor methods to be able customization --- .../apache/thrift/AsyncProcessFunction.java | 1 - .../org/apache/thrift/TAsyncProcessor.java | 9 +---- .../src/org/apache/thrift/TEnumHelper.java | 1 - .../thrift/server/TThreadPoolServer.java | 35 ++++++++++++++----- 4 files changed, 28 insertions(+), 18 deletions(-) diff --git a/lib/java/src/org/apache/thrift/AsyncProcessFunction.java b/lib/java/src/org/apache/thrift/AsyncProcessFunction.java index 550ebd532b7..483c8d054a5 100644 --- a/lib/java/src/org/apache/thrift/AsyncProcessFunction.java +++ b/lib/java/src/org/apache/thrift/AsyncProcessFunction.java @@ -20,7 +20,6 @@ import org.apache.thrift.async.AsyncMethodCallback; import org.apache.thrift.protocol.TMessage; -import org.apache.thrift.protocol.TMessageType; import org.apache.thrift.protocol.TProtocol; import org.apache.thrift.server.AbstractNonblockingServer; diff --git a/lib/java/src/org/apache/thrift/TAsyncProcessor.java b/lib/java/src/org/apache/thrift/TAsyncProcessor.java index 0a069ea005a..533e74d86c7 100644 --- a/lib/java/src/org/apache/thrift/TAsyncProcessor.java +++ b/lib/java/src/org/apache/thrift/TAsyncProcessor.java @@ -18,14 +18,7 @@ */ package org.apache.thrift; -import org.apache.thrift.protocol.*; - -import org.apache.thrift.server.AbstractNonblockingServer.*; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.Collections; -import java.util.Map; +import org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer; public interface TAsyncProcessor { /** diff --git a/lib/java/src/org/apache/thrift/TEnumHelper.java b/lib/java/src/org/apache/thrift/TEnumHelper.java index c17d661c283..fbc778751e2 100644 --- a/lib/java/src/org/apache/thrift/TEnumHelper.java +++ b/lib/java/src/org/apache/thrift/TEnumHelper.java @@ -19,7 +19,6 @@ package org.apache.thrift; -import java.lang.InstantiationException; import java.lang.NoSuchMethodException; import java.lang.IllegalAccessException; import java.lang.reflect.InvocationTargetException; diff --git a/lib/java/src/org/apache/thrift/server/TThreadPoolServer.java b/lib/java/src/org/apache/thrift/server/TThreadPoolServer.java index 90d5e5b0457..53c20e98fe6 100644 --- a/lib/java/src/org/apache/thrift/server/TThreadPoolServer.java +++ b/lib/java/src/org/apache/thrift/server/TThreadPoolServer.java @@ -145,22 +145,40 @@ private static ExecutorService createDefaultExecutorService(Args args) { executorQueue); } - - public void serve() { - try { + protected ExecutorService getExecutorService() { + return executorService_; + } + + protected boolean preServe() { + try { serverTransport_.listen(); } catch (TTransportException ttx) { LOGGER.error("Error occurred during listening.", ttx); - return; + return false; } // Run the preServe event if (eventHandler_ != null) { eventHandler_.preServe(); } - stopped_ = false; setServing(true); + + return true; + } + + public void serve() { + if (!preServe()) { + return; + } + + execute(); + waitForShutdown(); + + setServing(false); + } + + protected void execute() { int failureCount = 0; while (!stopped_) { try { @@ -213,8 +231,10 @@ public void serve() { } } } - - executorService_.shutdown(); + } + + protected void waitForShutdown() { + executorService_.shutdown(); // Loop until awaitTermination finally does return without a interrupted // exception. If we don't do this, then we'll shut down prematurely. We want @@ -232,7 +252,6 @@ public void serve() { now = newnow; } } - setServing(false); } public void stop() {