You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2012/03/22 20:37:09 UTC

svn commit: r1304005 - in /cxf/trunk: rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/ systests/transports/src/test/java/org/apache/cxf/systest/http_jetty/

Author: dkulp
Date: Thu Mar 22 19:37:09 2012
New Revision: 1304005

URL: http://svn.apache.org/viewvc?rev=1304005&view=rev
Log:
There are a minimum number of threads that Jetty needs, but Jetty
doesn't warn about it.  We will.

Modified:
    cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngine.java
    cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/Messages.properties
    cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/http_jetty/Server.java
    cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/http_jetty/ThreadPoolTest.java
    cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/http_jetty/cxf.xml

Modified: cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngine.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngine.java?rev=1304005&r1=1304004&r2=1304005&view=diff
==============================================================================
--- cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngine.java (original)
+++ cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngine.java Thu Mar 22 19:37:09 2012
@@ -458,6 +458,17 @@ public class JettyHTTPServerEngine
                 aconn.getServer().setThreadPool(pool);
                 aconn.setThreadPool(pool);
             }
+            //threads for the acceptors and selectors are taken from 
+            //the pool so we need to have room for those
+            int acc = aconn.getAcceptors() * 2;
+            if (getThreadingParameters().isSetMaxThreads()
+                && getThreadingParameters().getMaxThreads() <= acc) {
+                throw new Fault(new Message("NOT_ENOUGH_THREADS", LOG,
+                                            port,
+                                            acc + 1,
+                                            getThreadingParameters().getMaxThreads(),
+                                            acc));
+            }
             if (pool instanceof QueuedThreadPool) {
                 QueuedThreadPool pl = (QueuedThreadPool)pool;
                 if (getThreadingParameters().isSetMinThreads()) {
@@ -472,7 +483,7 @@ public class JettyHTTPServerEngine
                         pool.getClass().getMethod("setMinThreads", Integer.TYPE)
                             .invoke(pool, getThreadingParameters().getMinThreads());
                     }
-                    if (getThreadingParameters().isSetMinThreads()) {
+                    if (getThreadingParameters().isSetMaxThreads()) {
                         pool.getClass().getMethod("setMaxThreads", Integer.TYPE)
                             .invoke(pool, getThreadingParameters().getMaxThreads());
                     }

Modified: cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/Messages.properties
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/Messages.properties?rev=1304005&r1=1304004&r2=1304005&view=diff
==============================================================================
--- cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/Messages.properties (original)
+++ cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/Messages.properties Thu Mar 22 19:37:09 2012
@@ -26,3 +26,4 @@ FAILED_TO_SHUTDOWN_ENGINE_MSG = Failed t
 UNKNOWN_CONNECTOR_MSG = Unknown connector type {0}, can''t set the socket reuseAddress flag.
 INVALID_ENCODING_MSG = Invalid character set {0} in request.
 FALLBACK_THREADING_PARAMETERS_MSG = No explicitly configured threading parameters for port {0}, using fallback values min:{1} max:{2}
+NOT_ENOUGH_THREADS = Not enough threads configured for port {0}.  Need at least {1} ({3} for Jetty selectors and set managers) but only {2} configured.
\ No newline at end of file

Modified: cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/http_jetty/Server.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/http_jetty/Server.java?rev=1304005&r1=1304004&r2=1304005&view=diff
==============================================================================
--- cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/http_jetty/Server.java (original)
+++ cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/http_jetty/Server.java Thu Mar 22 19:37:09 2012
@@ -32,6 +32,9 @@ public class Server extends AbstractBusT
     static final String PORT = allocatePort(Server.class);
     static final String ADDRESS = "http://localhost:" + PORT + "/SoapContext/SoapPort";
 
+    Endpoint ep;
+    
+    
     protected void run()  {
 
         SpringBusFactory factory = new SpringBusFactory();
@@ -40,7 +43,14 @@ public class Server extends AbstractBusT
         setBus(bus);
 
         GreeterImpl implementor = new GreeterImpl();
-        Endpoint.publish(ADDRESS, implementor);
+        ep = Endpoint.publish(ADDRESS, implementor);
+    }
+    
+    @Override
+    public void tearDown() {
+        if (ep != null) {
+            ep.stop();
+        }
     }
         
     public static void main(String[] args) {

Modified: cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/http_jetty/ThreadPoolTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/http_jetty/ThreadPoolTest.java?rev=1304005&r1=1304004&r2=1304005&view=diff
==============================================================================
--- cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/http_jetty/ThreadPoolTest.java (original)
+++ cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/http_jetty/ThreadPoolTest.java Thu Mar 22 19:37:09 2012
@@ -44,8 +44,10 @@ public class ThreadPoolTest extends Abst
 
     @BeforeClass
     public static void startServers() throws Exception {
+        int threads = Math.max(1, (Runtime.getRuntime().availableProcessors() + 3) / 4) * 2 + 3;
+        System.setProperty("ThreadPoolTest.threads", Integer.toString(threads));
         assertTrue("server did not launch correctly", 
-                   launchServer(Server.class, false));
+                   launchServer(Server.class, true));
     }
 
     @Before
@@ -56,34 +58,53 @@ public class ThreadPoolTest extends Abst
         bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
                                    ADDRESS);
     }
+    
+    class TestRunnable implements Runnable {
+        int i;
+        long total;
+        
+        public TestRunnable(int i) {
+            this.i = i;
+        }
+        public void run() {
+            long start = System.currentTimeMillis();
+            try {
+                greeter.greetMeLater(2 * 1000);
+            } catch (Throwable t) {
+                //ignore
+                t.printStackTrace();
+            }
+            long end = System.currentTimeMillis();
+            total = end - start;
+        }
+        public long getTotal() {
+            return total;
+        }
+    }
 
     @Test
-    public void testFallbackThreadPoolConfig() throws Exception { 
-        Runnable r = new Runnable() {
-            public void run() {
-                try {
-                    greeter.greetMeLater(5 * 1000);
-                } catch (Throwable t) {
-                    //ignore
-                }
-            }
-        };
+    public void testFallbackThreadPoolConfig() throws Exception {
+        TestRunnable r[] = new TestRunnable[5];
         Thread[] invokers = new Thread[5];
-        long start = System.currentTimeMillis();
         for (int i = 0; i < invokers.length; i++) {
-            invokers[i] = new Thread(r);
+            r[i] = new TestRunnable(i);
+            invokers[i] = new Thread(r[i]);
             invokers[i].setDaemon(true);
             invokers[i].start();
         }
+        
+        int countLess = 0;
+        int countMore = 0;
         for (int i = 0; i < invokers.length; i++) {
-            invokers[i].join(15 * 1000);
-            long end = System.currentTimeMillis();
-            if ((end - start) > (10 * 1000L)) {
-                return;
+            invokers[i].join(6 * 1000);
+            if (r[i].getTotal() > 3000) {
+                countMore++;
+            } else {
+                countLess++;
             }
         }
-        long end = System.currentTimeMillis();
-        assertTrue("unexpected duration: " + (end - start),
-                   end - start > 10 * 1000L);
+        assertEquals(3, countLess);
+        assertEquals(2, countMore);
+        
     }
 }

Modified: cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/http_jetty/cxf.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/http_jetty/cxf.xml?rev=1304005&r1=1304004&r2=1304005&view=diff
==============================================================================
--- cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/http_jetty/cxf.xml (original)
+++ cxf/trunk/systests/transports/src/test/java/org/apache/cxf/systest/http_jetty/cxf.xml Thu Mar 22 19:37:09 2012
@@ -25,6 +25,6 @@ http://cxf.apache.org/transports/http/co
 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
   
     <http:conduit name="*.http-conduit">
-      <http:client AllowChunking="false"/>
+      <http:client AllowChunking="false" Connection="close"/>
     </http:conduit>
 </beans>
\ No newline at end of file