You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2007/06/16 22:34:31 UTC

svn commit: r547977 - in /jakarta/httpcomponents/httpcore/trunk: ./ module-nio/src/main/java/org/apache/http/impl/nio/reactor/ module-nio/src/main/java/org/apache/http/nio/params/

Author: olegk
Date: Sat Jun 16 13:34:30 2007
New Revision: 547977

URL: http://svn.apache.org/viewvc?view=rev&rev=547977
Log:
HTTPCORE-63: Made I/O select interval configurable for all default I/O reactor implementations

Contributed by Oleg Kalnichevski and Anders Wallgren <anders_wallgren at alum.mit.edu>

Modified:
    jakarta/httpcomponents/httpcore/trunk/RELEASE_NOTES.txt
    jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/reactor/AbstractMultiworkerIOReactor.java
    jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/reactor/DefaultConnectingIOReactor.java
    jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/reactor/DefaultListeningIOReactor.java
    jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/params/HttpNIOParams.java

Modified: jakarta/httpcomponents/httpcore/trunk/RELEASE_NOTES.txt
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/RELEASE_NOTES.txt?view=diff&rev=547977&r1=547976&r2=547977
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/RELEASE_NOTES.txt (original)
+++ jakarta/httpcomponents/httpcore/trunk/RELEASE_NOTES.txt Sat Jun 16 13:34:30 2007
@@ -1,5 +1,14 @@
 Changes since 4.0 Alpha 4
 
+* [HTTPCORE-63] Made I/O select interval configurable for all default I/O
+  reactor implementations.
+  Contributed by Oleg Kalnichevski <olegk at apache.org> and 
+  Anders Wallgren <anders_wallgren at alum.mit.edu>
+
+* [HTTPCORE-82] Revised linking of HttpParams to reduce potential for misuse. 
+  Method #setDefaults() removed from the HttpParams interface.
+  Contributed by Roland Weber <rolandw at apache.org>
+
 * [HTTPCORE-81]: Maximum line length and maximum header counts parameters are now 
   correctly enforced in both base and NIO modules. Fixed maximum line length check
   when parsing folded header lines.

Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/reactor/AbstractMultiworkerIOReactor.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/reactor/AbstractMultiworkerIOReactor.java?view=diff&rev=547977&r1=547976&r2=547977
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/reactor/AbstractMultiworkerIOReactor.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/reactor/AbstractMultiworkerIOReactor.java Sat Jun 16 13:34:30 2007
@@ -40,12 +40,13 @@
 
 public abstract class AbstractMultiworkerIOReactor implements IOReactor {
 
+    private final long selectTimeout;
     private final int workerCount;
     private final ThreadFactory threadFactory;
     private final BaseIOReactor[] ioReactors;
     private final Worker[] workers;
     private final Thread[] threads;
-
+    
     private volatile boolean shutdown;
     
     private int currentWorker = 0;
@@ -58,6 +59,7 @@
         if (workerCount <= 0) {
             throw new IllegalArgumentException("Worker count may not be negative or zero");
         }
+        this.selectTimeout = selectTimeout;
         this.workerCount = workerCount;
         if (threadFactory != null) {
             this.threadFactory = threadFactory;
@@ -72,6 +74,10 @@
         this.threads = new Thread[workerCount];
     }
 
+    protected long getSelectTimeout() {
+        return this.selectTimeout;
+    }
+    
     protected void startWorkers(final IOEventDispatch eventDispatch) {
         for (int i = 0; i < this.workerCount; i++) {
             BaseIOReactor ioReactor = this.ioReactors[i];

Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/reactor/DefaultConnectingIOReactor.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/reactor/DefaultConnectingIOReactor.java?view=diff&rev=547977&r1=547976&r2=547977
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/reactor/DefaultConnectingIOReactor.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/reactor/DefaultConnectingIOReactor.java Sat Jun 16 13:34:30 2007
@@ -45,6 +45,7 @@
 import java.util.Set;
 
 import org.apache.http.util.concurrent.ThreadFactory;
+import org.apache.http.nio.params.HttpNIOParams;
 import org.apache.http.nio.reactor.ConnectingIOReactor;
 import org.apache.http.nio.reactor.IOEventDispatch;
 import org.apache.http.nio.reactor.IOReactorException;
@@ -56,8 +57,6 @@
 public class DefaultConnectingIOReactor extends AbstractMultiworkerIOReactor 
         implements ConnectingIOReactor {
 
-    public static int TIMEOUT_CHECK_INTERVAL = 1000;
-    
     private volatile boolean closed = false;
     
     private final HttpParams params;
@@ -70,10 +69,7 @@
             int workerCount, 
             final ThreadFactory threadFactory,
             final HttpParams params) throws IOReactorException {
-        super(TIMEOUT_CHECK_INTERVAL, workerCount, threadFactory);
-        if (params == null) {
-            throw new IllegalArgumentException("HTTP parameters may not be null");
-        }
+        super(HttpNIOParams.getSelectInterval(params), workerCount, threadFactory);
         this.params = params;
         this.requestQueue = new SessionRequestQueue();
         this.lastTimeoutCheck = System.currentTimeMillis();
@@ -99,7 +95,7 @@
         for (;;) {
             int readyCount;
             try {
-                readyCount = this.selector.select(TIMEOUT_CHECK_INTERVAL);
+                readyCount = this.selector.select(getSelectTimeout());
             } catch (InterruptedIOException ex) {
                 throw ex;
             } catch (IOException ex) {
@@ -117,7 +113,7 @@
             }
             
             long currentTime = System.currentTimeMillis();
-            if( (currentTime - this.lastTimeoutCheck) >= TIMEOUT_CHECK_INTERVAL) {
+            if( (currentTime - this.lastTimeoutCheck) >= getSelectTimeout()) {
                 this.lastTimeoutCheck = currentTime;
                 Set keys = this.selector.keys();
                 if (keys != null) {

Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/reactor/DefaultListeningIOReactor.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/reactor/DefaultListeningIOReactor.java?view=diff&rev=547977&r1=547976&r2=547977
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/reactor/DefaultListeningIOReactor.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/impl/nio/reactor/DefaultListeningIOReactor.java Sat Jun 16 13:34:30 2007
@@ -44,6 +44,7 @@
 import java.util.Set;
 
 import org.apache.http.util.concurrent.ThreadFactory;
+import org.apache.http.nio.params.HttpNIOParams;
 import org.apache.http.nio.reactor.IOEventDispatch;
 import org.apache.http.nio.reactor.IOReactorException;
 import org.apache.http.nio.reactor.IOReactorExceptionHandler;
@@ -54,8 +55,6 @@
 public class DefaultListeningIOReactor extends AbstractMultiworkerIOReactor 
         implements ListeningIOReactor {
 
-    public static int TIMEOUT_CHECK_INTERVAL = 1000;
-    
     private volatile boolean closed = false;
     
     private final HttpParams params;
@@ -67,10 +66,7 @@
             int workerCount, 
             final ThreadFactory threadFactory,
             final HttpParams params) throws IOReactorException {
-        super(TIMEOUT_CHECK_INTERVAL, workerCount, threadFactory);
-        if (params == null) {
-            throw new IllegalArgumentException("HTTP parameters may not be null");
-        }
+        super(HttpNIOParams.getSelectInterval(params), workerCount, threadFactory);
         this.params = params;
         try {
             this.selector = Selector.open();
@@ -99,7 +95,7 @@
 
             int readyCount;
             try {
-                readyCount = this.selector.select(TIMEOUT_CHECK_INTERVAL);
+                readyCount = this.selector.select(getSelectTimeout());
             } catch (InterruptedIOException ex) {
                 throw ex;
             } catch (IOException ex) {

Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/params/HttpNIOParams.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/params/HttpNIOParams.java?view=diff&rev=547977&r1=547976&r2=547977
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/params/HttpNIOParams.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/params/HttpNIOParams.java Sat Jun 16 13:34:30 2007
@@ -55,7 +55,14 @@
     public static final String CONTENT_BUFFER_SIZE = "http.nio.content-buffer-size"; 
 
     /**
+     * Determines the time interval in milliseconds at which the I/O reactor wakes up 
+     * to check for timed out sessions and session requests.
+     * <p>
+     * This parameter expects a value of type {@link Long}.
+     * </p>
      */
+    public static final String SELECT_INTERVAL = "http.nio.select-interval"; 
+
     private HttpNIOParams() {
         super();
     }
@@ -72,6 +79,20 @@
             throw new IllegalArgumentException("HTTP parameters may not be null");
         }
         params.setIntParameter(CONTENT_BUFFER_SIZE, size);
+    }
+
+    public static long getSelectInterval(final HttpParams params) {
+        if (params == null) {
+            throw new IllegalArgumentException("HTTP parameters may not be null");
+        }
+        return params.getLongParameter(SELECT_INTERVAL, 1000);
+    }
+    
+    public static void setSelectInterval(final HttpParams params, long ms) {
+        if (params == null) {
+            throw new IllegalArgumentException("HTTP parameters may not be null");
+        }
+        params.setLongParameter(SELECT_INTERVAL, ms);
     }
 
 }