You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by tr...@apache.org on 2008/03/16 17:18:49 UTC

svn commit: r637605 - in /mina/trunk: core/src/main/java/org/apache/mina/transport/socket/ core/src/main/java/org/apache/mina/transport/socket/nio/ core/src/test/java/org/apache/mina/filter/logging/ transport-apr/src/main/java/org/apache/mina/transport...

Author: trustin
Date: Sun Mar 16 09:18:47 2008
New Revision: 637605

URL: http://svn.apache.org/viewvc?rev=637605&view=rev
Log:
* Fixed a problem that Socket.setReceiveBufferSize() is called unnecessarily if ServerSocket.setReceiveBufferSize() is already called with the default value - DefaultSocketSessionConfig keeps track of the change of the default receiveBufferSize to solve this problem.
* Made MdcInjectionFilterTest to dispose connectors


Modified:
    mina/trunk/core/src/main/java/org/apache/mina/transport/socket/DefaultSocketSessionConfig.java
    mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketAcceptor.java
    mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketConnector.java
    mina/trunk/core/src/test/java/org/apache/mina/filter/logging/MdcInjectionFilterTest.java
    mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprSocketAcceptor.java
    mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprSocketConnector.java

Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/socket/DefaultSocketSessionConfig.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/socket/DefaultSocketSessionConfig.java?rev=637605&r1=637604&r2=637605&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/socket/DefaultSocketSessionConfig.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/socket/DefaultSocketSessionConfig.java Sun Mar 16 09:18:47 2008
@@ -206,9 +206,12 @@
         return SET_TRAFFIC_CLASS_AVAILABLE;
     }
 
-    private final boolean defaultReuseAddress;
+    private SocketService parent;
+    private boolean defaultReuseAddress;
+    private int defaultReceiveBufferSize = DEFAULT_RECEIVE_BUFFER_SIZE;
+    
     private boolean reuseAddress;
-    private int receiveBufferSize = DEFAULT_RECEIVE_BUFFER_SIZE;
+    private int receiveBufferSize = defaultReceiveBufferSize;
     private int sendBufferSize = DEFAULT_SEND_BUFFER_SIZE;
     private int trafficClass = DEFAULT_TRAFFIC_CLASS;
     private boolean keepAlive = DEFAULT_KEEP_ALIVE;
@@ -219,8 +222,12 @@
     /**
      * Creates a new instance.
      */
-    public DefaultSocketSessionConfig(boolean server) {
-        if (server) {
+    public DefaultSocketSessionConfig() {
+    }
+    
+    public void init(SocketService parent) {
+        this.parent = parent;
+        if (parent instanceof SocketAcceptor) {
             defaultReuseAddress = true;
         } else {
             defaultReuseAddress = DEFAULT_REUSE_ADDRESS;
@@ -242,6 +249,18 @@
 
     public void setReceiveBufferSize(int receiveBufferSize) {
         this.receiveBufferSize = receiveBufferSize;
+        
+        // The acceptor configures the SO_RCVBUF value of the
+        // server socket when it is activated.  Consequently,
+        // a newly accepted session doesn't need to update its
+        // SO_RCVBUF parameter.  Therefore, we need to update
+        // the default receive buffer size if the acceptor is
+        // not bound yet to avoid a unnecessary system call
+        // when the acceptor is activated and new sessions are
+        // created.
+        if (!parent.isActive() && parent instanceof SocketAcceptor) {
+            defaultReceiveBufferSize = receiveBufferSize;
+        }
     }
 
     public int getSendBufferSize() {
@@ -304,7 +323,7 @@
 
     @Override
     protected boolean isReceiveBufferSizeChanged() {
-        return receiveBufferSize != DEFAULT_RECEIVE_BUFFER_SIZE;
+        return receiveBufferSize != defaultReceiveBufferSize;
     }
 
     @Override

Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketAcceptor.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketAcceptor.java?rev=637605&r1=637604&r2=637605&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketAcceptor.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketAcceptor.java Sun Mar 16 09:18:47 2008
@@ -57,19 +57,23 @@
      * Create an acceptor with a single processing thread using a NewThreadExecutor
      */
     public NioSocketAcceptor() {
-        super(new DefaultSocketSessionConfig(true), NioProcessor.class);
+        super(new DefaultSocketSessionConfig(), NioProcessor.class);
+        ((DefaultSocketSessionConfig) getSessionConfig()).init(this);
     }
 
     public NioSocketAcceptor(int processorCount) {
-        super(new DefaultSocketSessionConfig(true), NioProcessor.class, processorCount);
+        super(new DefaultSocketSessionConfig(), NioProcessor.class, processorCount);
+        ((DefaultSocketSessionConfig) getSessionConfig()).init(this);
     }
     
     public NioSocketAcceptor(IoProcessor<NioSession> processor) {
-        super(new DefaultSocketSessionConfig(true), processor);
+        super(new DefaultSocketSessionConfig(), processor);
+        ((DefaultSocketSessionConfig) getSessionConfig()).init(this);
     }
 
     public NioSocketAcceptor(Executor executor, IoProcessor<NioSession> processor) {
-        super(new DefaultSocketSessionConfig(true), executor, processor);
+        super(new DefaultSocketSessionConfig(), executor, processor);
+        ((DefaultSocketSessionConfig) getSessionConfig()).init(this);
     }
 
     @Override

Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketConnector.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketConnector.java?rev=637605&r1=637604&r2=637605&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketConnector.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketConnector.java Sun Mar 16 09:18:47 2008
@@ -49,19 +49,23 @@
     private volatile Selector selector;
 
     public NioSocketConnector() {
-        super(new DefaultSocketSessionConfig(false), NioProcessor.class);
+        super(new DefaultSocketSessionConfig(), NioProcessor.class);
+        ((DefaultSocketSessionConfig) getSessionConfig()).init(this);
     }
 
     public NioSocketConnector(int processorCount) {
-        super(new DefaultSocketSessionConfig(false), NioProcessor.class, processorCount);
+        super(new DefaultSocketSessionConfig(), NioProcessor.class, processorCount);
+        ((DefaultSocketSessionConfig) getSessionConfig()).init(this);
     }
 
     public NioSocketConnector(IoProcessor<NioSession> processor) {
-        super(new DefaultSocketSessionConfig(false), processor);
+        super(new DefaultSocketSessionConfig(), processor);
+        ((DefaultSocketSessionConfig) getSessionConfig()).init(this);
     }
 
     public NioSocketConnector(Executor executor, IoProcessor<NioSession> processor) {
-        super(new DefaultSocketSessionConfig(false), executor, processor);
+        super(new DefaultSocketSessionConfig(), executor, processor);
+        ((DefaultSocketSessionConfig) getSessionConfig()).init(this);
     }
     
     @Override

Modified: mina/trunk/core/src/test/java/org/apache/mina/filter/logging/MdcInjectionFilterTest.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/test/java/org/apache/mina/filter/logging/MdcInjectionFilterTest.java?rev=637605&r1=637604&r2=637605&view=diff
==============================================================================
--- mina/trunk/core/src/test/java/org/apache/mina/filter/logging/MdcInjectionFilterTest.java (original)
+++ mina/trunk/core/src/test/java/org/apache/mina/filter/logging/MdcInjectionFilterTest.java Sun Mar 16 09:18:47 2008
@@ -171,6 +171,8 @@
         simpleIoHandler.messageSentLatch.await();
         simpleIoHandler.sessionIdleLatch.await();
         simpleIoHandler.sessionClosedLatch.await();
+        connector.dispose();
+        
         // make a copy to prevent ConcurrentModificationException
         List<LoggingEvent> events = new ArrayList<LoggingEvent>(appender.events);
         // verify that all logging events have correct MDC
@@ -204,6 +206,7 @@
         simpleIoHandler.messageSentLatch.await();
         simpleIoHandler.sessionIdleLatch.await();
         simpleIoHandler.sessionClosedLatch.await();
+        connector.dispose();
 
         // make a copy to prevent ConcurrentModificationException
         List<LoggingEvent> events = new ArrayList<LoggingEvent>(appender.events);

Modified: mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprSocketAcceptor.java
URL: http://svn.apache.org/viewvc/mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprSocketAcceptor.java?rev=637605&r1=637604&r2=637605&view=diff
==============================================================================
--- mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprSocketAcceptor.java (original)
+++ mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprSocketAcceptor.java Sun Mar 16 09:18:47 2008
@@ -39,20 +39,24 @@
         new CircularQueue<Long>(POLLSET_SIZE);
     
     public AprSocketAcceptor() {
-        super(new DefaultSocketSessionConfig(true), AprIoProcessor.class);
+        super(new DefaultSocketSessionConfig(), AprIoProcessor.class);
+        ((DefaultSocketSessionConfig) getSessionConfig()).init(this);
     }
 
     public AprSocketAcceptor(int processorCount) {
-        super(new DefaultSocketSessionConfig(true), AprIoProcessor.class, processorCount);
+        super(new DefaultSocketSessionConfig(), AprIoProcessor.class, processorCount);
+        ((DefaultSocketSessionConfig) getSessionConfig()).init(this);
     }
 
     public AprSocketAcceptor(IoProcessor<AprSession> processor) {
-        super(new DefaultSocketSessionConfig(true), processor);
+        super(new DefaultSocketSessionConfig(), processor);
+        ((DefaultSocketSessionConfig) getSessionConfig()).init(this);
     }
 
     public AprSocketAcceptor(Executor executor,
             IoProcessor<AprSession> processor) {
-        super(new DefaultSocketSessionConfig(true), executor, processor);
+        super(new DefaultSocketSessionConfig(), executor, processor);
+        ((DefaultSocketSessionConfig) getSessionConfig()).init(this);
     }
 
     @Override

Modified: mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprSocketConnector.java
URL: http://svn.apache.org/viewvc/mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprSocketConnector.java?rev=637605&r1=637604&r2=637605&view=diff
==============================================================================
--- mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprSocketConnector.java (original)
+++ mina/trunk/transport-apr/src/main/java/org/apache/mina/transport/socket/apr/AprSocketConnector.java Sun Mar 16 09:18:47 2008
@@ -68,19 +68,23 @@
     private volatile ByteBuffer dummyBuffer;
 
     public AprSocketConnector() {
-        super(new DefaultSocketSessionConfig(false), AprIoProcessor.class);
+        super(new DefaultSocketSessionConfig(), AprIoProcessor.class);
+        ((DefaultSocketSessionConfig) getSessionConfig()).init(this);
     }
     
     public AprSocketConnector(int processorCount) {
-        super(new DefaultSocketSessionConfig(false), AprIoProcessor.class, processorCount);
+        super(new DefaultSocketSessionConfig(), AprIoProcessor.class, processorCount);
+        ((DefaultSocketSessionConfig) getSessionConfig()).init(this);
     }
     
     public AprSocketConnector(IoProcessor<AprSession> processor) {
-        super(new DefaultSocketSessionConfig(false), processor);
+        super(new DefaultSocketSessionConfig(), processor);
+        ((DefaultSocketSessionConfig) getSessionConfig()).init(this);
     }
 
     public AprSocketConnector(Executor executor, IoProcessor<AprSession> processor) {
-        super(new DefaultSocketSessionConfig(false), executor, processor);
+        super(new DefaultSocketSessionConfig(), executor, processor);
+        ((DefaultSocketSessionConfig) getSessionConfig()).init(this);
     }
     
     @Override