Author: trustin
Date: Mon Oct 15 22:57:53 2007
New Revision: 585050

URL: http://svn.apache.org/viewvc?rev=585050&view=rev
Log:
Fixed issue: DIRMINA-458 (Unnecessary automatic adjustment of read buffer in 
SocketIoProcessor)
* Deferred decrement of readBufferSize once to avoid unnecessary adjustment.


Modified:
    
mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
    
mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java
    
mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
    
mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java
    
mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java
    
mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoProcessor.java
    mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoSession.java

Modified: 
mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
URL: 
http://svn.apache.org/viewvc/mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java?rev=585050&r1=585049&r2=585050&view=diff
==============================================================================
--- 
mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
 (original)
+++ 
mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
 Mon Oct 15 22:57:53 2007
@@ -254,17 +254,9 @@
                 buf = null;
                 
                 if (readBytes * 2 < session.getReadBufferSize()) {
-                    if (session.getReadBufferSize() > 64) {
-                        session.setReadBufferSize(session.getReadBufferSize() 
>>> 1);
-                    }
+                    session.decreaseReadBufferSize();
                 } else if (readBytes == session.getReadBufferSize()) {
-                    int newReadBufferSize = session.getReadBufferSize() << 1;
-                    if (newReadBufferSize <= (((SocketSessionConfig) 
session.getConfig()).getReceiveBufferSize() << 1)) {
-                        // read buffer size shouldn't get bigger than
-                        // twice of the receive buffer size because of
-                        // read-write fairness.
-                        session.setReadBufferSize(newReadBufferSize);
-                    }
+                    session.increaseReadBufferSize();
                 }
             }
             if (ret < 0) {

Modified: 
mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java
URL: 
http://svn.apache.org/viewvc/mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java?rev=585050&r1=585049&r2=585050&view=diff
==============================================================================
--- 
mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java
 (original)
+++ 
mina/branches/1.0/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java
 Mon Oct 15 22:57:53 2007
@@ -72,6 +72,7 @@
     private SelectionKey key;
 
     private int readBufferSize = 1024;
+    private boolean deferDecreaseReadBufferSize = true;
 
     /**
      * Creates a new instance.
@@ -186,8 +187,30 @@
         return readBufferSize;
     }
     
-    void setReadBufferSize(int readBufferSize) {
+    void increaseReadBufferSize() {
+        int newReadBufferSize = getReadBufferSize() << 1;
+        if (newReadBufferSize <= ((SocketSessionConfig) 
getConfig()).getReceiveBufferSize() << 1) {
+            // read buffer size shouldn't get bigger than
+            // twice of the receive buffer size because of
+            // read-write fairness.
+            setReadBufferSize(newReadBufferSize);
+        }
+    }
+    
+    void decreaseReadBufferSize() {
+        if (deferDecreaseReadBufferSize) {
+            deferDecreaseReadBufferSize = false;
+            return;
+        }
+        
+        if (getReadBufferSize() > 64) {
+            setReadBufferSize(getReadBufferSize() >>> 1);
+        }
+    }
+    
+    private void setReadBufferSize(int readBufferSize) {
         this.readBufferSize = readBufferSize;
+        this.deferDecreaseReadBufferSize = true;
     }
 
     private class SessionConfigImpl extends BaseIoSessionConfig implements

Modified: 
mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
URL: 
http://svn.apache.org/viewvc/mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java?rev=585050&r1=585049&r2=585050&view=diff
==============================================================================
--- 
mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
 (original)
+++ 
mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketIoProcessor.java
 Mon Oct 15 22:57:53 2007
@@ -219,17 +219,9 @@
                 buf = null;
 
                 if (readBytes * 2 < session.getReadBufferSize()) {
-                    if (session.getReadBufferSize() > 64) {
-                        session.setReadBufferSize(session.getReadBufferSize() 
>>> 1);
-                    }
+                    session.decreaseReadBufferSize();
                 } else if (readBytes == session.getReadBufferSize()) {
-                    int newReadBufferSize = session.getReadBufferSize() << 1;
-                    if (newReadBufferSize <= (((SocketSessionConfig) 
session.getConfig()).getReceiveBufferSize() << 1)) {
-                        // read buffer size shouldn't get bigger than
-                        // twice of the receive buffer size because of
-                        // read-write fairness.
-                        session.setReadBufferSize(newReadBufferSize);
-                    }
+                    session.increaseReadBufferSize();
                 }
             }
             if (ret < 0) {

Modified: 
mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java
URL: 
http://svn.apache.org/viewvc/mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java?rev=585050&r1=585049&r2=585050&view=diff
==============================================================================
--- 
mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java
 (original)
+++ 
mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/SocketSessionImpl.java
 Mon Oct 15 22:57:53 2007
@@ -73,6 +73,7 @@
     private SelectionKey key;
 
     private int readBufferSize = 1024;
+    private boolean deferDecreaseReadBufferSize = true;
 
     /**
      * Creates a new instance.
@@ -189,9 +190,31 @@
     int getReadBufferSize() {
         return readBufferSize;
     }
-
-    void setReadBufferSize(int readBufferSize) {
+    
+    void increaseReadBufferSize() {
+        int newReadBufferSize = getReadBufferSize() << 1;
+        if (newReadBufferSize <= ((SocketSessionConfig) 
getConfig()).getReceiveBufferSize() << 1) {
+            // read buffer size shouldn't get bigger than
+            // twice of the receive buffer size because of
+            // read-write fairness.
+            setReadBufferSize(newReadBufferSize);
+        }
+    }
+    
+    void decreaseReadBufferSize() {
+        if (deferDecreaseReadBufferSize) {
+            deferDecreaseReadBufferSize = false;
+            return;
+        }
+        
+        if (getReadBufferSize() > 64) {
+            setReadBufferSize(getReadBufferSize() >>> 1);
+        }
+    }
+    
+    private void setReadBufferSize(int readBufferSize) {
         this.readBufferSize = readBufferSize;
+        this.deferDecreaseReadBufferSize = true;
     }
 
     private class SessionConfigImpl extends BaseIoSessionConfig implements

Modified: 
mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java
URL: 
http://svn.apache.org/viewvc/mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java?rev=585050&r1=585049&r2=585050&view=diff
==============================================================================
--- 
mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java
 (original)
+++ 
mina/branches/1.1/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java
 Mon Oct 15 22:57:53 2007
@@ -35,7 +35,6 @@
 import org.apache.mina.common.IoSessionConfig;
 import org.apache.mina.common.RuntimeIOException;
 import org.apache.mina.common.TransportType;
-import org.apache.mina.common.WriteFuture;
 import org.apache.mina.common.IoFilter.WriteRequest;
 import org.apache.mina.common.support.BaseIoSession;
 import org.apache.mina.transport.socket.nio.DatagramServiceConfig;

Modified: 
mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoProcessor.java
URL: 
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoProcessor.java?rev=585050&r1=585049&r2=585050&view=diff
==============================================================================
--- 
mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoProcessor.java 
(original)
+++ 
mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoProcessor.java 
Mon Oct 15 22:57:53 2007
@@ -307,17 +307,10 @@
                 buf = null;
 
                 if (session.getTransportMetadata().hasFragmentation()) {
-                    if (readBytes * 2 < config.getReadBufferSize()) {
-                        if (config.getReadBufferSize() > 
config.getMinReadBufferSize()) {
-                            
config.setReadBufferSize(config.getReadBufferSize() >>> 1);
-                        }
+                    if ((readBytes << 1) < config.getReadBufferSize()) {
+                        session.decreaseReadBufferSize();
                     } else if (readBytes == config.getReadBufferSize()) {
-                        int newReadBufferSize = config.getReadBufferSize() << 
1;
-                        if (newReadBufferSize <= 
config.getMaxReadBufferSize()) {
-                            config.setReadBufferSize(newReadBufferSize);
-                        } else {
-                            
config.setReadBufferSize(config.getMaxReadBufferSize());
-                        }
+                        session.increaseReadBufferSize();
                     }
                 }
             }

Modified: 
mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoSession.java
URL: 
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoSession.java?rev=585050&r1=585049&r2=585050&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoSession.java 
(original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/AbstractIoSession.java 
Mon Oct 15 22:57:53 2007
@@ -134,6 +134,8 @@
     private long lastIdleTimeForRead;
 
     private long lastIdleTimeForWrite;
+    
+    private boolean deferDecreaseReadBuffer = true;
 
     protected AbstractIoSession() {
         creationTime = lastReadTime = lastWriteTime =
@@ -493,6 +495,30 @@
 
     protected Queue<WriteRequest> getWriteRequestQueue() {
         return writeRequestQueue;
+    }
+    
+    protected void increaseReadBufferSize() {
+        int newReadBufferSize = getConfig().getReadBufferSize() << 1;
+        if (newReadBufferSize <= getConfig().getMaxReadBufferSize()) {
+            getConfig().setReadBufferSize(newReadBufferSize);
+        } else {
+            getConfig().setReadBufferSize(getConfig().getMaxReadBufferSize());
+        }
+        
+        deferDecreaseReadBuffer = true;
+    }
+    
+    protected void decreaseReadBufferSize() {
+        if (deferDecreaseReadBuffer) {
+            deferDecreaseReadBuffer = false;
+            return;
+        }
+        
+        if (getConfig().getReadBufferSize() > 
getConfig().getMinReadBufferSize()) {
+            getConfig().setReadBufferSize(getConfig().getReadBufferSize() >>> 
1);
+        }
+
+        deferDecreaseReadBuffer = true;
     }
 
     public long getCreationTime() {


Reply via email to