Author: fhanik
Date: Thu Oct 26 08:24:24 2006
New Revision: 468035

URL: http://svn.apache.org/viewvc?view=rev&rev=468035
Log:
Reverted the removal of the "socket buffer", writing to a ByteBuffer is 
extremely slow, so it should only be done in chunks

Modified:
    
tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/InternalNioOutputBuffer.java
    tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java

Modified: 
tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/InternalNioOutputBuffer.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/InternalNioOutputBuffer.java?view=diff&rev=468035&r1=468034&r2=468035
==============================================================================
--- 
tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/InternalNioOutputBuffer.java 
(original)
+++ 
tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/InternalNioOutputBuffer.java 
Thu Oct 26 08:24:24 2006
@@ -69,8 +69,15 @@
         this.response = response;
         headers = response.getMimeHeaders();
 
-        //buf = new byte[headerBufferSize];
+        buf = new byte[headerBufferSize];
         
+        if (headerBufferSize < (8 * 1024)) {
+            bbufLimit = 6 * 1500;    
+        } else {
+            bbufLimit = (headerBufferSize / 1500 + 1) * 1500;
+        }
+        //bbuf = ByteBuffer.allocateDirect(bbufLimit);
+
         outputStreamOutputBuffer = new SocketOutputBuffer();
 
         filterLibrary = new OutputFilter[0];
@@ -128,7 +135,7 @@
     /**
      * Pointer to the current write buffer.
      */
-    //protected byte[] buf;
+    protected byte[] buf;
 
 
     /**
@@ -440,12 +447,11 @@
     /**
      * Send the response status line.
      */
-    public void sendStatus() throws IOException  {
+    public void sendStatus() {
 
         // Write protocol name
         write(Constants.HTTP_11_BYTES);
-        addToBB(Constants.SP);
-        pos++;
+        buf[pos++] = Constants.SP;
 
         // Write status code
         int status = response.getStatus();
@@ -463,8 +469,7 @@
             write(status);
         }
 
-        addToBB(Constants.SP);
-        pos++;
+        buf[pos++] = Constants.SP;
 
         // Write message
         String message = response.getMessage();
@@ -475,10 +480,8 @@
         }
 
         // End the response status line
-        addToBB(Constants.CR);
-        pos++;
-        addToBB(Constants.LF);
-        pos++;
+        buf[pos++] = Constants.CR;
+        buf[pos++] = Constants.LF;
 
     }
 
@@ -489,18 +492,14 @@
      * @param name Header name
      * @param value Header value
      */
-    public void sendHeader(MessageBytes name, MessageBytes value) throws 
IOException {
+    public void sendHeader(MessageBytes name, MessageBytes value) {
 
         write(name);
-        addToBB(Constants.COLON);
-        pos++;
-        addToBB(Constants.SP);
-        pos++;
+        buf[pos++] = Constants.COLON;
+        buf[pos++] = Constants.SP;
         write(value);
-        addToBB(Constants.CR);
-        pos++;
-        addToBB(Constants.LF);
-        pos++;
+        buf[pos++] = Constants.CR;
+        buf[pos++] = Constants.LF;
 
     }
 
@@ -511,18 +510,15 @@
      * @param name Header name
      * @param value Header value
      */
-    public void sendHeader(ByteChunk name, ByteChunk value) throws IOException 
{
+    public void sendHeader(ByteChunk name, ByteChunk value) {
 
         write(name);
-        addToBB(Constants.COLON);
-        pos++;
-        addToBB(Constants.SP);
-        pos++;
+        buf[pos++] = Constants.COLON;
+        buf[pos++] = Constants.SP;
         write(value);
-        addToBB(Constants.CR);
-        pos++;
-        addToBB(Constants.LF);
-        pos++;
+        buf[pos++] = Constants.CR;
+        buf[pos++] = Constants.LF;
+
     }
 
 
@@ -535,16 +531,11 @@
     public void sendHeader(String name, String value) {
 
         write(name);
-        addToBB(Constants.COLON);
-        pos++;
-        addToBB(Constants.SP);
-        pos++;
+        buf[pos++] = Constants.COLON;
+        buf[pos++] = Constants.SP;
         write(value);
-        addToBB(Constants.CR);
-        pos++;
-        addToBB(Constants.LF);
-        pos++;
-
+        buf[pos++] = Constants.CR;
+        buf[pos++] = Constants.LF;
 
     }
 
@@ -554,10 +545,8 @@
      */
     public void endHeaders() {
 
-        addToBB(Constants.CR);
-        pos++;
-        addToBB(Constants.LF);
-        pos++;
+        buf[pos++] = Constants.CR;
+        buf[pos++] = Constants.LF;
 
     }
 
@@ -609,28 +598,17 @@
 
         if (pos > 0) {
             // Sending the response header buffer
-            //flushBuffer();//do we need this?
+            addToBB(buf, 0, pos);
         }
 
     }
 
     int total = 0;
-    private void addToBB(byte b)  {
-        ByteBuffer bytebuffer = socket.getBufHandler().getWriteBuffer();
-        final int length = 1;
-        if (bytebuffer.remaining() <= length) {
-            try { flushBuffer();} catch (IOException x) {throw new 
RuntimeException(x);}
-        }
-        bytebuffer.put(b);
-        total += length;
-    }
-
     private void addToBB(byte[] buf, int offset, int length) throws 
IOException {
-        ByteBuffer bytebuffer = socket.getBufHandler().getWriteBuffer();
-        if (bytebuffer.remaining() <= length) {
+        if (socket.getBufHandler().getWriteBuffer().remaining() <= length) {
             flushBuffer();
         }
-        bytebuffer.put(buf, offset, length);
+        socket.getBufHandler().getWriteBuffer().put(buf, offset, length);
         total += length;
     }
 
@@ -642,7 +620,7 @@
      * 
      * @param mb data to be written
      */
-    protected void write(MessageBytes mb) throws IOException {
+    protected void write(MessageBytes mb) {
 
         if (mb.getType() == MessageBytes.T_BYTES) {
             ByteChunk bc = mb.getByteChunk();
@@ -664,10 +642,11 @@
      * 
      * @param bc data to be written
      */
-    protected void write(ByteChunk bc) throws IOException{
+    protected void write(ByteChunk bc) {
 
         // Writing the byte chunk to the output buffer
-        addToBB(bc.getBytes(), bc.getStart(),bc.getLength());
+        System.arraycopy(bc.getBytes(), bc.getStart(), buf, pos,
+                         bc.getLength());
         pos = pos + bc.getLength();
 
     }
@@ -696,8 +675,7 @@
             } else if (c == 127) {
                 c = ' ';
             }
-            addToBB((byte) c);
-            pos++;
+            buf[pos++] = (byte) c;
         }
 
     }
@@ -710,10 +688,10 @@
      * 
      * @param b data to be written
      */
-    public void write(byte[] b) throws IOException  {
+    public void write(byte[] b) {
 
         // Writing the byte chunk to the output buffer
-        addToBB(b,0,b.length);
+        System.arraycopy(b, 0, buf, pos, b.length);
         pos = pos + b.length;
 
     }
@@ -744,8 +722,7 @@
             } else if (c == 127) {
                 c = ' ';
             }
-            addToBB((byte) c);
-            pos++;
+            buf[pos++] = (byte) c;
         }
 
     }

Modified: tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java?view=diff&rev=468035&r1=468034&r2=468035
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java 
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java Thu 
Oct 26 08:24:24 2006
@@ -170,7 +170,10 @@
             Selector sel = pol!=null?pol.getSelector():null;
             SelectionKey key = 
sel!=null?socket.getIOChannel().keyFor(sel):null;
             KeyAttachment att = key!=null?(KeyAttachment)key.attachment():null;
-            if ( att!=null ) { att.reset(); keyCache.offer(att); }
+            if ( att!=null ) { 
+                att.reset(); 
+                keyCache.offer(att); 
+            }
             if ( key!=null ) key.attach(null);
             boolean offer = 
socketProperties.getBufferPool()==-1?true:size.get()<socketProperties.getBufferPool();
             offer = offer && 
(socketProperties.getBufferPoolSize()==-1?true:(bytes.get()+socket.getBufferSize())<socketProperties.getBufferPoolSize());
@@ -217,7 +220,7 @@
     /**
      * Maximum amount of worker threads.
      */
-    protected int maxThreads = 40;
+    protected int maxThreads = 400;
     public void setMaxThreads(int maxThreads) { this.maxThreads = maxThreads; }
     public int getMaxThreads() { return maxThreads; }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to