You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2013/05/29 21:10:44 UTC
svn commit: r1487598 - in /tomcat/trunk/java/org/apache/coyote:
ActionCode.java Response.java http11/AbstractHttp11Processor.java
http11/InternalNioOutputBuffer.java
Author: markt
Date: Wed May 29 19:10:43 2013
New Revision: 1487598
URL: http://svn.apache.org/r1487598
Log:
Simplify. Buffered data left over after a non-blcoking write is written in the processor
Modified:
tomcat/trunk/java/org/apache/coyote/ActionCode.java
tomcat/trunk/java/org/apache/coyote/Response.java
tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java
tomcat/trunk/java/org/apache/coyote/http11/InternalNioOutputBuffer.java
Modified: tomcat/trunk/java/org/apache/coyote/ActionCode.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ActionCode.java?rev=1487598&r1=1487597&r2=1487598&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/ActionCode.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ActionCode.java Wed May 29 19:10:43 2013
@@ -213,12 +213,6 @@ public enum ActionCode {
NB_WRITE_INTEREST,
/**
- * Flush the lower level buffers and re-register the socket with the poller
- * if the buffers cannot be completely flushed.
- */
- NB_WRITE_FLUSH,
-
- /**
* Indicates if the request body has been fully read.
*/
REQUEST_BODY_FULLY_READ
Modified: tomcat/trunk/java/org/apache/coyote/Response.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/Response.java?rev=1487598&r1=1487597&r2=1487598&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/Response.java (original)
+++ tomcat/trunk/java/org/apache/coyote/Response.java Wed May 29 19:10:43 2013
@@ -595,16 +595,9 @@ public final class Response {
}
public void onWritePossible() throws IOException {
- // Flush the lower level buffers
- // If data left in buffers wait for next onWritePossible. Socket will
- // have been placed in poller if buffers weren't emptied.
- AtomicBoolean isDataLeftInBuffers = new AtomicBoolean(true);
- action(ActionCode.NB_WRITE_FLUSH, isDataLeftInBuffers);
- if (isDataLeftInBuffers.get()) {
- return;
- }
-
- // No data in lower level buffers. Ready for app to write more data.
+ // Any buffered data left over from a previous non-blocking write is
+ // written in the Processor so if this point is reached the app is able
+ // to write data.
boolean fire = false;
synchronized (fireListenerLock) {
if (fireListener) {
Modified: tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java?rev=1487598&r1=1487597&r2=1487598&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java Wed May 29 19:10:43 2013
@@ -821,14 +821,6 @@ public abstract class AbstractHttp11Proc
// TODO
throw new IllegalStateException();
}
- } else if (actionCode == ActionCode.NB_WRITE_FLUSH) {
- AtomicBoolean isDataLeftInBuffers = (AtomicBoolean)param;
- try {
- isDataLeftInBuffers.set(getOutputBuffer().flushBuffer(false));
- } catch (IOException e) {
- // TODO
- throw new IllegalStateException();
- }
} else if (actionCode == ActionCode.NB_READ_INTEREST) {
registerForEvent(true, false);
} else if (actionCode == ActionCode.UPGRADE) {
Modified: tomcat/trunk/java/org/apache/coyote/http11/InternalNioOutputBuffer.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/InternalNioOutputBuffer.java?rev=1487598&r1=1487597&r2=1487598&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/InternalNioOutputBuffer.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/InternalNioOutputBuffer.java Wed May 29 19:10:43 2013
@@ -22,6 +22,7 @@ import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.util.Iterator;
+import java.util.concurrent.atomic.AtomicLong;
import org.apache.coyote.OutputBuffer;
import org.apache.coyote.Response;
@@ -82,6 +83,8 @@ public class InternalNioOutputBuffer ext
*/
protected volatile boolean flipped = false;
+ private final AtomicLong bytesWritten = new AtomicLong(0);
+
// --------------------------------------------------------- Public Methods
/**
@@ -96,6 +99,7 @@ public class InternalNioOutputBuffer ext
socket = null;
}
flipped = false;
+ bytesWritten.set(0);
}
@@ -157,6 +161,10 @@ public class InternalNioOutputBuffer ext
// Still have data to write
registerWriteInterest();
}
+ if (written == 0) {
+ (new Exception("written == 0")).printStackTrace();
+ }
+ System.out.println("Total written " + bytesWritten.addAndGet(written));
return written;
}
@@ -198,6 +206,7 @@ public class InternalNioOutputBuffer ext
if (length == 0) return;
+ System.out.println("addToBB");
// Try to flush any data in the socket's write buffer first
boolean dataLeft = flushBuffer(isBlocking());
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org