From: Roger Meier Date: Sun, 24 Mar 2013 20:26:17 +0000 (+0100) Subject: THRIFT-1869 TThreadPoolServer (java) dies when threadpool is consumed X-Git-Tag: 0.9.1~158 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=ce6d1d709aaaf33d2cdfc7415a6e95b10faac2e5;p=common%2Fthrift.git THRIFT-1869 TThreadPoolServer (java) dies when threadpool is consumed Patch: Brock Noland --- diff --git a/lib/java/src/org/apache/thrift/server/TThreadPoolServer.java b/lib/java/src/org/apache/thrift/server/TThreadPoolServer.java index 19e51af4..38dfd582 100644 --- a/lib/java/src/org/apache/thrift/server/TThreadPoolServer.java +++ b/lib/java/src/org/apache/thrift/server/TThreadPoolServer.java @@ -20,6 +20,7 @@ package org.apache.thrift.server; import java.util.concurrent.ExecutorService; +import java.util.concurrent.RejectedExecutionException; import java.util.concurrent.SynchronousQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; @@ -121,7 +122,24 @@ public class TThreadPoolServer extends TServer { try { TTransport client = serverTransport_.accept(); WorkerProcess wp = new WorkerProcess(client); - executorService_.execute(wp); + while(true) { + int rejections = 0; + try { + executorService_.execute(wp); + break; + } catch(RejectedExecutionException ex) { + LOGGER.warn("ExecutorService rejected client " + (++rejections) + + " times(s)", ex); + try { + TimeUnit.SECONDS.sleep(1); + } catch (InterruptedException e) { + LOGGER.warn("Interrupted while waiting to place client on" + + " executor queue."); + Thread.currentThread().interrupt(); + break; + } + } + } } catch (TTransportException ttx) { if (!stopped_) { ++failureCount;