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() {