You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by hi...@apache.org on 2013/08/18 03:07:30 UTC

svn commit: r1515054 - in /synapse/trunk/java/modules: documentation/src/site/xdoc/userguide/transports/ transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/ ...

Author: hiranya
Date: Sun Aug 18 01:07:29 2013
New Revision: 1515054

URL: http://svn.apache.org/r1515054
Log:
Fixing SYNAPSE-824 for nhttp and pt transports

Added:
    synapse/trunk/java/modules/transports/core/nhttp/src/test/resources/test-http.properties
Modified:
    synapse/trunk/java/modules/documentation/src/site/xdoc/userguide/transports/nhttp.xml
    synapse/trunk/java/modules/documentation/src/site/xdoc/userguide/transports/pass_through.xml
    synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/HttpCoreNIOSender.java
    synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ListenerContext.java
    synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/PassThroughHttpListener.java
    synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/PassThroughHttpSender.java
    synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/config/BaseConfiguration.java
    synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/utils/config/HttpConfigConstants.java
    synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/utils/config/HttpTransportConfiguration.java
    synapse/trunk/java/modules/transports/core/nhttp/src/test/java/org/apache/synapse/transport/utils/config/HttpTransportConfigurationTest.java

Modified: synapse/trunk/java/modules/documentation/src/site/xdoc/userguide/transports/nhttp.xml
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/documentation/src/site/xdoc/userguide/transports/nhttp.xml?rev=1515054&r1=1515053&r2=1515054&view=diff
==============================================================================
--- synapse/trunk/java/modules/documentation/src/site/xdoc/userguide/transports/nhttp.xml (original)
+++ synapse/trunk/java/modules/documentation/src/site/xdoc/userguide/transports/nhttp.xml Sun Aug 18 01:07:29 2013
@@ -762,16 +762,41 @@
                         <th>Default</th>
                     </tr>
                     <tr>
-                        <td>http.socket.timeout</td>
+                        <td>http.socket.timeout <a name="http.socket.timeout"/></td>
                         <td>
                             Sets the TCP socket timeout in milliseconds
                             (See <a href="http://docs.oracle.com/javase/1.5.0/docs/api/java/net/SocketOptions.html#SO_TIMEOUT">SO_TIMEOUT</a>).
+                            This applies to sockets opened by both transport listener and sender.
                             <div class="xmlConf">http.socket.timeout=20000</div>
                         </td>
                         <td>No</td>
                         <td>60000</td>
                     </tr>
                     <tr>
+                        <td>http.socket.timeout.listener</td>
+                        <td>
+                            Sets the timeout in milliseconds for all the TCP sockets opened by the
+                            transport listener. This overrides the value of
+                            <a href="#http.socket.timeout">http.socket.timeout</a> for the transport
+                            listener.
+                            <div class="xmlConf">http.socket.timeout.listener=20000</div>
+                        </td>
+                        <td>No</td>
+                        <td>Value of <a href="#http.socket.timeout">http.socket.timeout</a></td>
+                    </tr>
+                    <tr>
+                        <td>http.socket.timeout.sender</td>
+                        <td>
+                            Sets the timeout in milliseconds for all the TCP sockets opened by the
+                            transport sender. This overrides the value of
+                            <a href="#http.socket.timeout">http.socket.timeout</a> for the transport
+                            sender.
+                            <div class="xmlConf">http.socket.timeout.sender=20000</div>
+                        </td>
+                        <td>No</td>
+                        <td>Value of <a href="#http.socket.timeout">http.socket.timeout</a></td>
+                    </tr>
+                    <tr>
                         <td>http.connection.timeout</td>
                         <td>
                             Sets the TCP connection timeout in milliseconds. This determines the timeout

Modified: synapse/trunk/java/modules/documentation/src/site/xdoc/userguide/transports/pass_through.xml
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/documentation/src/site/xdoc/userguide/transports/pass_through.xml?rev=1515054&r1=1515053&r2=1515054&view=diff
==============================================================================
--- synapse/trunk/java/modules/documentation/src/site/xdoc/userguide/transports/pass_through.xml (original)
+++ synapse/trunk/java/modules/documentation/src/site/xdoc/userguide/transports/pass_through.xml Sun Aug 18 01:07:29 2013
@@ -749,16 +749,41 @@
                         <th>Default</th>
                     </tr>
                     <tr>
-                        <td>http.socket.timeout</td>
+                        <td>http.socket.timeout <a name="http.socket.timeout"/></td>
                         <td>
                             Sets the TCP socket timeout in milliseconds
                             (See <a href="http://docs.oracle.com/javase/1.5.0/docs/api/java/net/SocketOptions.html#SO_TIMEOUT">SO_TIMEOUT</a>).
+                            This applies to sockets opened by both transport listener and sender.
                             <div class="xmlConf">http.socket.timeout=20000</div>
                         </td>
                         <td>No</td>
                         <td>60000</td>
                     </tr>
                     <tr>
+                        <td>http.socket.timeout.listener</td>
+                        <td>
+                            Sets the timeout in milliseconds for all the TCP sockets opened by the
+                            transport listener. This overrides the value of
+                            <a href="#http.socket.timeout">http.socket.timeout</a> for the transport
+                            listener.
+                            <div class="xmlConf">http.socket.timeout.listener=20000</div>
+                        </td>
+                        <td>No</td>
+                        <td>Value of <a href="#http.socket.timeout">http.socket.timeout</a></td>
+                    </tr>
+                    <tr>
+                        <td>http.socket.timeout.sender</td>
+                        <td>
+                            Sets the timeout in milliseconds for all the TCP sockets opened by the
+                            transport sender. This overrides the value of
+                            <a href="#http.socket.timeout">http.socket.timeout</a> for the transport
+                            sender.
+                            <div class="xmlConf">http.socket.timeout.sender=20000</div>
+                        </td>
+                        <td>No</td>
+                        <td>Value of <a href="#http.socket.timeout">http.socket.timeout</a></td>
+                    </tr>
+                    <tr>
                         <td>http.connection.timeout</td>
                         <td>
                             Sets the TCP connection timeout in milliseconds. This determines the timeout

Modified: synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/HttpCoreNIOSender.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/HttpCoreNIOSender.java?rev=1515054&r1=1515053&r2=1515054&view=diff
==============================================================================
--- synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/HttpCoreNIOSender.java (original)
+++ synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/HttpCoreNIOSender.java Sun Aug 18 01:07:29 2013
@@ -255,7 +255,7 @@ public class HttpCoreNIOSender extends A
 
     private IOReactorConfig getReactorConfig() {
         NHttpConfiguration cfg = NHttpConfiguration.getInstance();
-        return cfg.getReactorConfig();
+        return cfg.getConnectingReactorConfig();
     }
 
     /**

Modified: synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ListenerContext.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ListenerContext.java?rev=1515054&r1=1515053&r2=1515054&view=diff
==============================================================================
--- synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ListenerContext.java (original)
+++ synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/ListenerContext.java Sun Aug 18 01:07:29 2013
@@ -243,7 +243,7 @@ public class ListenerContext {
 
     public IOReactorConfig getReactorConfig() {
         NHttpConfiguration cfg = NHttpConfiguration.getInstance();
-        return cfg.getReactorConfig();
+        return cfg.getListeningReactorConfig();
     }
 
     public ConfigurationContext getCfgCtx() {

Modified: synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/PassThroughHttpListener.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/PassThroughHttpListener.java?rev=1515054&r1=1515053&r2=1515054&view=diff
==============================================================================
--- synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/PassThroughHttpListener.java (original)
+++ synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/PassThroughHttpListener.java Sun Aug 18 01:07:29 2013
@@ -143,7 +143,7 @@ public class PassThroughHttpListener imp
         try {
             String prefix = namePrefix + "-PT-Listener I/O Dispatcher";
             ioReactor = new DefaultListeningIOReactor(
-                            sourceConfiguration.getReactorConfig(),
+                            sourceConfiguration.getReactorConfig(true),
                             new NativeThreadFactory(new ThreadGroup(prefix + " Thread Group"), prefix));
             
             ioReactor.setExceptionHandler(new IOReactorExceptionHandler() {

Modified: synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/PassThroughHttpSender.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/PassThroughHttpSender.java?rev=1515054&r1=1515053&r2=1515054&view=diff
==============================================================================
--- synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/PassThroughHttpSender.java (original)
+++ synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/PassThroughHttpSender.java Sun Aug 18 01:07:29 2013
@@ -174,7 +174,7 @@ public class PassThroughHttpSender exten
             String prefix = namePrefix + "-PT-Sender I/O Dispatcher";
 
             ioReactor = new DefaultConnectingIOReactor(
-                            targetConfiguration.getReactorConfig(),
+                            targetConfiguration.getReactorConfig(false),
                             new NativeThreadFactory(new ThreadGroup(prefix + " Thread Group"), prefix));
 
             ioReactor.setExceptionHandler(new IOReactorExceptionHandler() {

Modified: synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/config/BaseConfiguration.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/config/BaseConfiguration.java?rev=1515054&r1=1515053&r2=1515054&view=diff
==============================================================================
--- synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/config/BaseConfiguration.java (original)
+++ synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/config/BaseConfiguration.java Sun Aug 18 01:07:29 2013
@@ -78,8 +78,12 @@ public abstract class BaseConfiguration 
 
     abstract protected HttpProcessor initHttpProcessor();
 
-    public IOReactorConfig getReactorConfig() {
-        return conf.getReactorConfig();
+    public IOReactorConfig getReactorConfig(boolean listener) {
+        if (listener) {
+            return conf.getListeningReactorConfig();
+        } else {
+            return conf.getConnectingReactorConfig();
+        }
     }
 
     public ConnectionConfig getConnectionConfig() {

Modified: synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/utils/config/HttpConfigConstants.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/utils/config/HttpConfigConstants.java?rev=1515054&r1=1515053&r2=1515054&view=diff
==============================================================================
--- synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/utils/config/HttpConfigConstants.java (original)
+++ synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/utils/config/HttpConfigConstants.java Sun Aug 18 01:07:29 2013
@@ -30,6 +30,8 @@ public class HttpConfigConstants {
     public static final String SO_LINGER = "http.socket.linger";
     public static final String SO_REUSEADDR = "http.socket.reuseaddr";
     public static final String SO_TIMEOUT = "http.socket.timeout";
+    public static final String LISTENER_SO_TIMEOUT = "http.socket.timeout.listener";
+    public static final String SENDER_SO_TIMEOUT = "http.socket.timeout.sender";
     public static final String SELECT_INTERVAL = "http.nio.select-interval";
 
     public static final String HTTP_MALFORMED_INPUT_ACTION = "http.malformed.input.action";

Modified: synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/utils/config/HttpTransportConfiguration.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/utils/config/HttpTransportConfiguration.java?rev=1515054&r1=1515053&r2=1515054&view=diff
==============================================================================
--- synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/utils/config/HttpTransportConfiguration.java (original)
+++ synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/utils/config/HttpTransportConfiguration.java Sun Aug 18 01:07:29 2013
@@ -58,14 +58,45 @@ public abstract class HttpTransportConfi
     abstract protected int getThreadsPerReactor();
 
     /**
-     * Get the IOReactor configuration
+     * Get the listening I/O reactor configuration
      *
      * @return A fully initialized IOReactorConfig instance
      */
-    public IOReactorConfig getReactorConfig() {
+    public IOReactorConfig getListeningReactorConfig() {
         IOReactorConfig.Builder builder = IOReactorConfig.custom()
                 .setIoThreadCount(getThreadsPerReactor())
-                .setSoTimeout(getIntProperty(HttpConfigConstants.SO_TIMEOUT, 60000))
+                .setSoTimeout(getIntProperty(HttpConfigConstants.LISTENER_SO_TIMEOUT,
+                        getIntProperty(HttpConfigConstants.SO_TIMEOUT, 60000)))
+                .setConnectTimeout(getIntProperty(HttpConfigConstants.CONNECTION_TIMEOUT, 0))
+                .setInterestOpQueued(getBooleanProperty(HttpConfigConstants.INTEREST_OPS_QUEUEING, false))
+                .setTcpNoDelay(getBooleanProperty(HttpConfigConstants.TCP_NODELAY, true))
+                .setRcvBufSize(getIntProperty(HttpConfigConstants.SOCKET_RCV_BUFFER_SIZE, 8 * 1024))
+                .setSndBufSize(getIntProperty(HttpConfigConstants.SOCKET_SND_BUFFER_SIZE, 8 * 1024));
+
+        if (getIntProperty(HttpConfigConstants.SO_LINGER) != null) {
+            builder.setSoLinger(getIntProperty(HttpConfigConstants.SO_LINGER));
+        }
+
+        if (getBooleanProperty(HttpConfigConstants.SO_REUSEADDR) != null) {
+            builder.setSoReuseAddress(getBooleanProperty(HttpConfigConstants.SO_REUSEADDR));
+        }
+
+        if (getIntProperty(HttpConfigConstants.SELECT_INTERVAL) != null) {
+            builder.setSelectInterval(getIntProperty(HttpConfigConstants.SELECT_INTERVAL));
+        }
+        return builder.build();
+    }
+
+    /**
+     * Get the connecting I/O reactor configuration
+     *
+     * @return A fully initialized IOReactorConfig instance
+     */
+    public IOReactorConfig getConnectingReactorConfig() {
+        IOReactorConfig.Builder builder = IOReactorConfig.custom()
+                .setIoThreadCount(getThreadsPerReactor())
+                .setSoTimeout(getIntProperty(HttpConfigConstants.SENDER_SO_TIMEOUT,
+                        getIntProperty(HttpConfigConstants.SO_TIMEOUT, 60000)))
                 .setConnectTimeout(getIntProperty(HttpConfigConstants.CONNECTION_TIMEOUT, 0))
                 .setInterestOpQueued(getBooleanProperty(HttpConfigConstants.INTEREST_OPS_QUEUEING, false))
                 .setTcpNoDelay(getBooleanProperty(HttpConfigConstants.TCP_NODELAY, true))

Modified: synapse/trunk/java/modules/transports/core/nhttp/src/test/java/org/apache/synapse/transport/utils/config/HttpTransportConfigurationTest.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/test/java/org/apache/synapse/transport/utils/config/HttpTransportConfigurationTest.java?rev=1515054&r1=1515053&r2=1515054&view=diff
==============================================================================
--- synapse/trunk/java/modules/transports/core/nhttp/src/test/java/org/apache/synapse/transport/utils/config/HttpTransportConfigurationTest.java (original)
+++ synapse/trunk/java/modules/transports/core/nhttp/src/test/java/org/apache/synapse/transport/utils/config/HttpTransportConfigurationTest.java Sun Aug 18 01:07:29 2013
@@ -33,7 +33,16 @@ public class HttpTransportConfigurationT
         assertEquals("barValue", config.getStringProperty("bar", "barValue"));
         assertEquals(true, (boolean) config.getBooleanProperty("baz", true));
 
-        IOReactorConfig reactorConfig = config.getReactorConfig();
+        IOReactorConfig reactorConfig = config.getListeningReactorConfig();
+        assertEquals(2, reactorConfig.getIoThreadCount());
+        assertEquals(0, reactorConfig.getConnectTimeout());
+        assertEquals(1024 * 8, reactorConfig.getRcvBufSize());
+        assertEquals(1024 * 8, reactorConfig.getSndBufSize());
+        assertEquals(60000, reactorConfig.getSoTimeout());
+        assertEquals(true, reactorConfig.isTcpNoDelay());
+        assertEquals(false, reactorConfig.isInterestOpQueued());
+
+        reactorConfig = config.getConnectingReactorConfig();
         assertEquals(2, reactorConfig.getIoThreadCount());
         assertEquals(0, reactorConfig.getConnectTimeout());
         assertEquals(1024 * 8, reactorConfig.getRcvBufSize());
@@ -54,7 +63,7 @@ public class HttpTransportConfigurationT
         assertEquals("Testing", config.getStringProperty("test.bar", "NotTesting"));
         assertEquals(true, (boolean) config.getBooleanProperty("test.baz", false));
 
-        IOReactorConfig reactorConfig = config.getReactorConfig();
+        IOReactorConfig reactorConfig = config.getListeningReactorConfig();
         assertEquals(true, reactorConfig.isSoReuseAddress());
         assertEquals(2, reactorConfig.getIoThreadCount());
         assertEquals(0, reactorConfig.getConnectTimeout());
@@ -70,6 +79,28 @@ public class HttpTransportConfigurationT
         assertEquals(CodingErrorAction.REPORT, connConfig.getUnmappableInputAction());
     }
 
+    public void testTimeoutConfig() {
+        HttpTransportConfiguration config = new SimpleHttpTransportConfiguration("test-http");
+
+        IOReactorConfig reactorConfig = config.getListeningReactorConfig();
+        assertEquals(30000, reactorConfig.getSoTimeout());
+        assertEquals(2, reactorConfig.getIoThreadCount());
+        assertEquals(0, reactorConfig.getConnectTimeout());
+        assertEquals(1024 * 8, reactorConfig.getRcvBufSize());
+        assertEquals(1024 * 8, reactorConfig.getSndBufSize());
+        assertEquals(true, reactorConfig.isTcpNoDelay());
+        assertEquals(false, reactorConfig.isInterestOpQueued());
+
+        reactorConfig = config.getConnectingReactorConfig();
+        assertEquals(20000, reactorConfig.getSoTimeout());
+        assertEquals(2, reactorConfig.getIoThreadCount());
+        assertEquals(0, reactorConfig.getConnectTimeout());
+        assertEquals(1024 * 8, reactorConfig.getRcvBufSize());
+        assertEquals(1024 * 8, reactorConfig.getSndBufSize());
+        assertEquals(true, reactorConfig.isTcpNoDelay());
+        assertEquals(false, reactorConfig.isInterestOpQueued());
+    }
+
     class SimpleHttpTransportConfiguration extends HttpTransportConfiguration {
         public SimpleHttpTransportConfiguration(String fileName) {
             super(fileName);

Added: synapse/trunk/java/modules/transports/core/nhttp/src/test/resources/test-http.properties
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/test/resources/test-http.properties?rev=1515054&view=auto
==============================================================================
--- synapse/trunk/java/modules/transports/core/nhttp/src/test/resources/test-http.properties (added)
+++ synapse/trunk/java/modules/transports/core/nhttp/src/test/resources/test-http.properties Sun Aug 18 01:07:29 2013
@@ -0,0 +1,9 @@
+# Used in HttpTransportConfigurationTest
+
+http.socket.timeout=60000
+http.socket.timeout.listener=30000
+http.socket.timeout.sender=20000
+http.connection.timeout=0
+http.socket.buffer-size=8192
+http.tcp.nodelay=true
+http.nio.interest-ops-queueing=false